gnu: python-zope-proxy: Update to 4.3.4.
[jackhill/guix/guix.git] / gnu / packages / python-web.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
3 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
4 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
5 ;;; Copyright © 2016, 2017 Danny Milosavljevic <dannym+a@scratchpost.org>
6 ;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
7 ;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
8 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
9 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
10 ;;; Copyright © 2016, 2017, 2020 Julien Lepiller <julien@lepiller.eu>
11 ;;; Copyright © 2016, 2017 ng0 <ng0@n0.is>
12 ;;; Copyright © 2014, 2017 Eric Bavier <bavier@member.fsf.org>
13 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
14 ;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
15 ;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
16 ;;; Copyright © 2016, 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
17 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
18 ;;; Copyright © 2015, 2017 Ben Woodcroft <donttrustben@gmail.com>
19 ;;; Copyright © 2015, 2016 Christopher Allan Webber <cwebber@dustycloud.org>
20 ;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
21 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
22 ;;; Copyright © 2016 David Craven <david@craven.ch>
23 ;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
24 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
25 ;;; Copyright © 2017 Mark Meyer <mark@ofosos.org>
26 ;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
27 ;;; Copyright © 2018, 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
28 ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
29 ;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
30 ;;; Copyright © 2019 Vagrant Cascadian <vagrant@debian.org>
31 ;;; Copyright © 2019 Brendan Tildesley <mail@brendan.scot>
32 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
33 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
34 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
35 ;;; Copyright © 2020 Evan Straw <evan.straw99@gmail.com>
36 ;;;
37 ;;; This file is part of GNU Guix.
38 ;;;
39 ;;; GNU Guix is free software; you can redistribute it and/or modify it
40 ;;; under the terms of the GNU General Public License as published by
41 ;;; the Free Software Foundation; either version 3 of the License, or (at
42 ;;; your option) any later version.
43 ;;;
44 ;;; GNU Guix is distributed in the hope that it will be useful, but
45 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
46 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
47 ;;; GNU General Public License for more details.
48 ;;;
49 ;;; You should have received a copy of the GNU General Public License
50 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
51
52 (define-module (gnu packages python-web)
53 #:use-module (guix packages)
54 #:use-module (guix download)
55 #:use-module (guix git-download)
56 #:use-module (guix build-system python)
57 #:use-module (guix utils)
58 #:use-module (gnu packages)
59 #:use-module (gnu packages base)
60 #:use-module (gnu packages check)
61 #:use-module (gnu packages compression)
62 #:use-module (gnu packages curl)
63 #:use-module (gnu packages databases)
64 #:use-module (gnu packages django)
65 #:use-module (gnu packages groff)
66 #:use-module (gnu packages libffi)
67 #:use-module (gnu packages pkg-config)
68 #:use-module (gnu packages python)
69 #:use-module (gnu packages python-check)
70 #:use-module (gnu packages python-crypto)
71 #:use-module (gnu packages python-xyz)
72 #:use-module (gnu packages serialization)
73 #:use-module (gnu packages sphinx)
74 #:use-module (gnu packages texinfo)
75 #:use-module (gnu packages tls)
76 #:use-module (gnu packages time)
77 #:use-module (gnu packages web)
78 #:use-module (gnu packages xml)
79 #:use-module ((guix licenses) #:prefix license:)
80 #:use-module (srfi srfi-1))
81
82 (define-public python-aiohttp
83 (package
84 (name "python-aiohttp")
85 (version "3.6.2")
86 (source
87 (origin
88 (method url-fetch)
89 (uri (pypi-uri "aiohttp" version))
90 (sha256
91 (base32
92 "09pkw6f1790prnrq0k8cqgnf1qy57ll8lpmc6kld09q7zw4vi6i5"))))
93 (build-system python-build-system)
94 (arguments
95 `(#:tests? #f)) ;missing pytest-timeout
96 (propagated-inputs
97 `(("python-aiodns" ,python-aiodns)
98 ("python-async-timeout" ,python-async-timeout)
99 ("python-attrs" ,python-attrs)
100 ("python-chardet" ,python-chardet)
101 ("python-idna-ssl" ,python-idna-ssl)
102 ("python-multidict" ,python-multidict)
103 ("python-yarl" ,python-yarl)))
104 (home-page "https://github.com/aio-libs/aiohttp/")
105 (synopsis "Async HTTP client/server framework (asyncio)")
106 (description "@code{aiohttp} is an asynchronous HTTP client/server
107 framework.
108
109 Its main features are:
110 @itemize
111 @item Supports both client and server side of HTTP protocol.
112 @item Supports both client and server Web-Sockets out-of-the-box without the
113 Callback Hell.
114 @item Web-server has middlewares and pluggable routing.
115 @end itemize")
116 (license license:asl2.0)))
117
118 (define-public python-aiohttp-socks
119 (package
120 (name "python-aiohttp-socks")
121 (version "0.2.2")
122 (source
123 (origin
124 (method url-fetch)
125 (uri (pypi-uri "aiohttp_socks" version))
126 (sha256
127 (base32
128 "0473702jk66xrgpm28wbdgpnak4v0dh2qmdjw7ky7hf3lwwqkggf"))))
129 (build-system python-build-system)
130 (propagated-inputs
131 `(("python-aiohttp" ,python-aiohttp)))
132 (home-page "https://github.com/romis2012/aiohttp-socks")
133 (synopsis "SOCKS proxy connector for aiohttp")
134 (description "This package provides a SOCKS proxy connector for
135 aiohttp. It supports SOCKS4(a) and SOCKS5.")
136 (license license:asl2.0)))
137
138 (define-public python-aiodns
139 (package
140 (name "python-aiodns")
141 (version "1.1.1")
142 (source
143 (origin
144 (method url-fetch)
145 (uri (pypi-uri "aiodns" version))
146 (sha256
147 (base32
148 "1snr5paql8dgvc676n8xq460wypjsb1xj53cf3px1s4wczf7lryq"))))
149 (build-system python-build-system)
150 (inputs
151 `(("python-pycares" ,python-pycares)))
152 (arguments
153 `(#:tests? #f)) ;tests require internet access
154 (home-page "http://github.com/saghul/aiodns")
155 (synopsis "Simple DNS resolver for asyncio")
156 (description "@code{aiodns} provides a simple way for doing
157 asynchronous DNS resolutions with a synchronous looking interface by
158 using @url{https://github.com/saghul/pycares,pycares}.")
159 (license license:expat)))
160
161 (define-public python-aiorpcx
162 (package
163 (name "python-aiorpcx")
164 (version "0.18.3")
165 (source
166 (origin
167 (method url-fetch)
168 (uri (pypi-uri "aiorpcX" version))
169 (sha256
170 (base32
171 "0k545hc7wl6sh1svydzbv6x7sx5pig2pqkl3yxs9riwmvzawx9xp"))))
172 (build-system python-build-system)
173 (propagated-inputs
174 `(("python-attrs" ,python-attrs)))
175 (home-page "https://github.com/kyuupichan/aiorpcX")
176 (synopsis "Generic asyncio RPC implementation")
177 (description
178 "The aiorpcX library is a generic asyncio implementation of RPC suitable
179 for an application that is a client, server or both.
180
181 The package includes a module with full coverage of JSON RPC versions 1.0 and
182 2.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
183 comes with a SOCKS proxy client.")
184 (license (list license:expat license:bsd-2))))
185
186 (define-public python-falcon
187 (package
188 (name "python-falcon")
189 (version "1.4.1")
190 (source
191 (origin
192 (method url-fetch)
193 (uri (pypi-uri "falcon" version))
194 (sha256
195 (base32
196 "1i0vmqsk24z4biirqhpvas9h28wy7nmpy3jvnb6rz2imq04zd09r"))))
197 (build-system python-build-system)
198 (arguments
199 `(#:phases
200 (modify-phases %standard-phases
201 (replace 'check
202 (lambda _
203 (invoke "pytest"))))))
204 (propagated-inputs
205 `(("python-mimeparse" ,python-mimeparse)
206 ("python-six" ,python-six)))
207 (native-inputs
208 `(("python-cython" ,python-cython) ;for faster binaries
209 ("python-pytest" ,python-pytest)
210 ("python-pyyaml" ,python-pyyaml)
211 ("python-requests" ,python-requests)
212 ("python-testtools" ,python-testtools)
213 ("python-jsonschema" ,python-jsonschema)
214 ("python-msgpack" ,python-msgpack)))
215 (home-page "https://falconframework.org")
216 (synopsis
217 "Web framework for building APIs and application backends")
218 (description
219 "Falcon is a web API framework for building microservices, application
220 backends and higher-level frameworks. Among its features are:
221 @itemize
222 @item Optimized and extensible code base
223 @item Routing via URI templates and REST-inspired resource
224 classes
225 @item Access to headers and bodies through request and response
226 classes
227 @item Request processing via middleware components and hooks
228 @item Idiomatic HTTP error responses
229 @item Straightforward exception handling
230 @item Unit testing support through WSGI helpers and mocks
231 @item Compatible with both CPython and PyPy
232 @item Cython support for better performance when used with CPython
233 @end itemize")
234 (license license:asl2.0)))
235
236 (define-public python2-falcon
237 (package-with-python2 python-falcon))
238
239 (define-public python-falcon-cors
240 (package
241 (name "python-falcon-cors")
242 (version "1.1.7")
243 (source
244 (origin
245 (method url-fetch)
246 (uri (pypi-uri "falcon-cors" version))
247 (sha256
248 (base32
249 "12pym7hwsbd8b0c1azn95nas8gm3f1qpr6lpyx0958xm65ffr20p"))))
250 (build-system python-build-system)
251 (native-inputs
252 `(("python-falcon" ,python-falcon)))
253 (home-page
254 "https://github.com/lwcolton/falcon-cors")
255 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
256 (description "This middleware provides @dfn{cross-origin resource
257 sharing} (CORS) support for Falcon. It allows applying a specially crafted
258 CORS object to the incoming requests, enabling the ability to serve resources
259 over a different origin than that of the web application.")
260 (license license:asl2.0)))
261
262 (define-public python2-falcon-cors
263 (package-with-python2 python-falcon-cors))
264
265 (define-public python-furl
266 (package
267 (name "python-furl")
268 (version "0.5.6")
269 (source
270 (origin
271 (method url-fetch)
272 (uri (pypi-uri "furl" version))
273 (sha256
274 (base32
275 "0lzpfpm686hvz3sr1mcrnd1b3lgmnw8v59gb43wfi98r3b671pqc"))))
276 (build-system python-build-system)
277 (propagated-inputs
278 `(("python-six" ,python-six)
279 ("python-orderedmultidict" ,python-orderedmultidict)))
280 (native-inputs
281 `(("python-pycodestyle" ,python-pycodestyle)))
282 (home-page "https://github.com/gruns/furl")
283 (synopsis "URL manipulation in Python")
284 (description "Furl provides an easy-to-use alternative to the
285 @code{urllib} and @code{urlparse} modules for manipulating URLs.")
286 (license license:unlicense)))
287
288 (define-public python2-furl
289 (package-with-python2 python-furl))
290
291 (define-public python-httplib2
292 (package
293 (name "python-httplib2")
294 (version "0.9.2")
295 (source
296 (origin
297 (method url-fetch)
298 (uri (pypi-uri "httplib2" version))
299 (sha256
300 (base32
301 "126rsryvw9vhbf3qmsfw9lf4l4xm2srmgs439lgma4cpag4s3ay3"))))
302 (build-system python-build-system)
303 (home-page "https://github.com/jcgregorio/httplib2")
304 (synopsis "Comprehensive HTTP client library")
305 (description
306 "A comprehensive HTTP client library supporting many features left out of
307 other HTTP libraries.")
308 (license license:expat)))
309
310 (define-public python2-httplib2
311 (package-with-python2 python-httplib2))
312
313 (define-public httpie
314 (package
315 (name "httpie")
316 (version "2.0.0")
317 (source
318 (origin
319 (method url-fetch)
320 (uri (pypi-uri "httpie" version))
321 (sha256
322 (base32
323 "02bw20cwv3a1lzrn919dk25dq4v81x6q786zlrqsqzhsdxszj14c"))))
324 (build-system python-build-system)
325 (arguments
326 ;; The tests attempt to access external web servers, so we cannot run them.
327 '(#:tests? #f))
328 (propagated-inputs
329 `(("python-colorama" ,python-colorama)
330 ("python-pygments" ,python-pygments)
331 ("python-requests" ,python-requests)))
332 (home-page "https://httpie.org/")
333 (synopsis "cURL-like tool for humans")
334 (description
335 "A command line HTTP client with an intuitive UI, JSON support,
336 syntax highlighting, wget-like downloads, plugins, and more. It consists of
337 a single http command designed for painless debugging and interaction with
338 HTTP servers, RESTful APIs, and web services.")
339 (license license:bsd-3)))
340
341 (define-public python-html2text
342 (package
343 (name "python-html2text")
344 (version "2019.8.11")
345 (source
346 (origin
347 (method url-fetch)
348 (uri (pypi-uri "html2text" version))
349 (sha256
350 (base32
351 "0ppgjplg06kmv9sj0x8p7acczcq2mcfgk1jdjwm4w5w40b0vj5pm"))))
352 (build-system python-build-system)
353 (arguments
354 '(#:phases
355 (modify-phases %standard-phases
356 (replace 'check
357 (lambda _
358 (invoke "pytest" "test/"))))))
359 (native-inputs
360 `(("python-pytest" ,python-pytest)))
361 (home-page "https://github.com/Alir3z4/html2text")
362 (synopsis "Convert HTML into plain text")
363 (description "html2text takes HTML and converts it into plain ASCII text
364 which is also valid markdown. html2text was originally written by Aaron
365 Swartz.")
366 (license license:gpl3+)))
367
368 (define-public python2-html2text
369 (package-with-python2 python-html2text))
370
371 (define-public python-mechanicalsoup
372 (package
373 (name "python-mechanicalsoup")
374 (version "0.11.0")
375 (source
376 (origin
377 (method url-fetch)
378 (uri (pypi-uri "MechanicalSoup" version))
379 (sha256
380 (base32 "0k59wwk75q7nz6i6gynvzhagy02ql0bv7py3qqcwgjw7607yq4i7"))))
381 (build-system python-build-system)
382 (arguments
383 ;; TODO: Enable tests when python-flake8@3.5 hits master.
384 `(#:tests? #f))
385 (propagated-inputs
386 `(("python-beautifulsoup4" ,python-beautifulsoup4)
387 ("python-lxml" ,python-lxml)
388 ("python-requests" ,python-requests)
389 ("python-six" ,python-six)))
390 ;; (native-inputs
391 ;; ;; For tests.
392 ;; `(("python-pytest-flake8" ,python-pytest-flake8)
393 ;; ("python-pytest-httpbin" ,python-pytest-httpbin)
394 ;; ("python-pytest-mock" ,python-pytest-mock)
395 ;; ("python-pytest-runner" ,python-pytest-runner)
396 ;; ("python-requests-mock" ,python-requests-mock)))
397 (home-page "https://mechanicalsoup.readthedocs.io/")
398 (synopsis "Python library for automating website interaction")
399 (description
400 "MechanicalSoup is a Python library for automating interaction with
401 websites. It automatically stores and sends cookies, follows redirects, and can
402 follow links and submit forms. It doesn’t do JavaScript.")
403 (license license:expat)))
404
405 (define-public python2-mechanicalsoup
406 (package-with-python2 python-mechanicalsoup))
407
408 (define-public python-sockjs-tornado
409 (package
410 (name "python-sockjs-tornado")
411 (version "1.0.6")
412 (source
413 (origin
414 (method url-fetch)
415 (uri (pypi-uri "sockjs-tornado" version))
416 (sha256
417 (base32
418 "15dgv6hw6c7h3m310alw1h6p5443lrm9pyqhcv2smc13fz1v04pc"))))
419 (build-system python-build-system)
420 (arguments
421 `(;; There are no tests, and running the test phase requires missing
422 ;; dependencies
423 #:tests? #f))
424 (propagated-inputs
425 `(("python-tornado" ,python-tornado)))
426 (home-page "https://github.com/mrjoes/sockjs-tornado/")
427 (synopsis
428 "SockJS Python server implementation on top of the Tornado framework")
429 (description
430 "SockJS-tornado provides the server-side counterpart to a SockJS client
431 library, through the Tornado framework.
432
433 SockJS provides a low-latency, full-duplex, cross-domain communication channel
434 between a web browser and web server.")
435 (license license:expat)))
436
437 (define-public python2-sockjs-tornado
438 (package-with-python2 python-sockjs-tornado))
439
440 (define-public python-flask-babel
441 (package
442 (name "python-flask-babel")
443 (version "1.0.0")
444 (source
445 (origin
446 (method url-fetch)
447 (uri (pypi-uri "Flask-Babel" version))
448 (sha256
449 (base32
450 "0gmb165vkwv5v7dxsxa2i3zhafns0fh938m2zdcrv4d8z5l099yn"))))
451 (build-system python-build-system)
452 (arguments
453 '(#:phases (modify-phases %standard-phases
454 (replace 'check
455 (lambda _
456 (with-directory-excursion "tests"
457 (invoke "python" "tests.py")))))))
458 (propagated-inputs
459 `(("python-flask" ,python-flask)
460 ("python-babel" ,python-babel)
461 ("python-jinja2" ,python-jinja2)
462 ("python-pytz" ,python-pytz)))
463 (home-page "https://github.com/python-babel/flask-babel")
464 (synopsis "Add i18n/l10n support to Flask applications")
465 (description "This package implements internationalization and localization
466 support for Flask. This is based on the Python babel module as well as pytz -
467 both of which are installed automatically if you install this library.")
468 (license license:bsd-3)))
469
470 (define-public python2-flask-babel
471 (package-with-python2 python-flask-babel))
472
473 (define-public python-html5lib
474 (package
475 (name "python-html5lib")
476 (version "1.0.1")
477 (source
478 (origin
479 (method url-fetch)
480 (uri (pypi-uri "html5lib" version))
481 (sha256
482 (base32
483 "0dipzfrycv6j1jw82v9b7d8lzggx3x8xngx6l4xrqkxwvg7hvjv6"))))
484 (build-system python-build-system)
485 (propagated-inputs
486 `(("python-six" ,python-six)
487 ("python-webencodings" ,python-webencodings)))
488 (arguments
489 `(#:test-target "check"))
490 (home-page
491 "https://github.com/html5lib/html5lib-python")
492 (synopsis
493 "Python HTML parser based on the WHATWG HTML specifcation")
494 (description
495 "Html5lib is an HTML parser based on the WHATWG HTML specifcation
496 and written in Python.")
497 (license license:expat)))
498
499 (define-public python2-html5lib
500 (package-with-python2 python-html5lib))
501
502 ;; Needed for python-bleach, a dependency of python-notebook
503 (define-public python-html5lib-0.9
504 (package
505 (inherit python-html5lib)
506 (version "0.999")
507 (source
508 (origin
509 (method url-fetch)
510 (uri (pypi-uri "html5lib" version))
511 (sha256
512 (base32
513 "17n4zfsj6ynmbwdwviywmj8r6nzr3xvfx2zs0xhndmvm51z7z263"))))))
514
515 (define-public python2-html5lib-0.9
516 (package-with-python2 python-html5lib-0.9))
517
518 (define-public python-html5-parser
519 (package
520 (name "python-html5-parser")
521 (version "0.4.5")
522 (source (origin
523 (method url-fetch)
524 (uri (pypi-uri "html5-parser" version))
525 (sha256
526 (base32
527 "01mx33sx4dhl4kj6wc48nj6jz7ry60rkhjv0s6k8h5xmjf5yy0x9"))))
528 (build-system python-build-system)
529 (native-inputs
530 `(("pkg-config" ,pkg-config)))
531 (inputs
532 `(("libxml2" ,libxml2)))
533 (propagated-inputs
534 `(("python-lxml" ,python-lxml)
535 ("python-beautifulsoup4" ,python-beautifulsoup4)))
536 (home-page "https://html5-parser.readthedocs.io")
537 (synopsis "Fast C-based HTML5 parsing for Python")
538 (description "This package provides a fast implementation of the HTML5
539 parsing spec for Python. Parsing is done in C using a variant of the gumbo
540 parser. The gumbo parse tree is then transformed into an lxml tree, also in
541 C, yielding parse times that can be a thirtieth of the html5lib parse times.")
542 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
543 ;; indicate ASL2.0, including the LICENSE file for the whole project.
544 (license (list license:asl2.0 license:gpl3))))
545
546 (define-public python2-html5-parser
547 (package-with-python2 python-html5-parser))
548
549 (define-public python-pycurl
550 (package
551 (name "python-pycurl")
552 (version "7.43.0.2")
553 (source
554 (origin
555 (method url-fetch)
556 (uri (string-append "https://dl.bintray.com/pycurl/pycurl/pycurl-"
557 version ".tar.gz"))
558 (sha256
559 (base32 "1915kb04k1j4y6k1dx1sgnbddxrl9r1n4q928if2lkrdm73xy30g"))))
560 (build-system python-build-system)
561 (arguments
562 ;; The tests attempt to access external web servers, so we cannot run
563 ;; them. Furthermore, they are skipped altogether when using Python 2.
564 '(#:tests? #f
565 #:phases (modify-phases %standard-phases
566 (add-before 'build 'configure-tls-backend
567 (lambda _
568 ;; XXX: PycURL fails to automatically determine which TLS
569 ;; backend to use when cURL is built with --disable-static.
570 ;; See setup.py and <https://github.com/pycurl/pycurl/pull/147>.
571 (setenv "PYCURL_SSL_LIBRARY" "gnutls")
572 #t)))))
573 (native-inputs
574 `(("python-nose" ,python-nose)
575 ("python-bottle" ,python-bottle)))
576 (inputs
577 `(("curl" ,curl)
578 ("gnutls" ,gnutls)))
579 (home-page "http://pycurl.io/")
580 (synopsis "Lightweight Python wrapper around libcurl")
581 (description "Pycurl is a lightweight wrapper around libcurl. It provides
582 high-speed transfers via libcurl and frequently outperforms alternatives.")
583
584 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
585 ;; under the terms of LGPLv2.1+ or Expat.
586 (license (list license:lgpl2.1+ license:expat))))
587
588 (define-public python2-pycurl
589 (package-with-python2 python-pycurl))
590
591 (define-public python-webencodings
592 (package
593 (name "python-webencodings")
594 (version "0.5.1")
595 (source (origin
596 (method url-fetch)
597 (uri (pypi-uri "webencodings" version))
598 (sha256
599 (base32
600 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
601 (build-system python-build-system)
602 (arguments
603 '(#:phases
604 (modify-phases %standard-phases
605 (replace 'check
606 (lambda _
607 (invoke "py.test" "-v" "webencodings/tests.py")
608 #t)))))
609 (native-inputs
610 `(("python-pytest" ,python-pytest)))
611 (home-page "https://github.com/SimonSapin/python-webencodings")
612 (synopsis "Character encoding aliases for legacy web content")
613 (description
614 "In order to be compatible with legacy web content when interpreting
615 something like @code{Content-Type: text/html; charset=latin1}, tools need
616 to use a particular set of aliases for encoding labels as well as some
617 overriding rules. For example, @code{US-ASCII} and @code{iso-8859-1} on
618 the web are actually aliases for @code{windows-1252}, and a @code{UTF-8}
619 or @code{UTF-16} BOM takes precedence over any other encoding declaration.
620 The WHATWG @url{https://encoding.spec.whatwg.org/,Encoding} standard
621 defines all such details so that implementations do not have to
622 reverse-engineer each other.
623
624 This module implements the Encoding standard and has encoding labels and
625 BOM detection, but the actual implementation for encoders and decoders
626 is Python’s.")
627 (license license:bsd-3)))
628
629 (define-public python2-webencodings
630 (package-with-python2 python-webencodings))
631
632 (define-public python-openid
633 (package
634 (name "python-openid")
635 (version "3.1.0")
636 (source
637 (origin
638 (method url-fetch)
639 (uri (pypi-uri "python3-openid" version))
640 (sha256
641 (base32
642 "00l5hrjh19740w00b3fnsqldnla41wbr2rics09dl4kyd1fkd3b2"))))
643 (build-system python-build-system)
644 (arguments
645 `(#:phases
646 (modify-phases %standard-phases
647 (replace 'check
648 (lambda _
649 (invoke "coverage" "run" "-m"
650 "unittest" "openid.test.test_suite"))))))
651 (properties `((python2-variant . ,(delay python2-openid))))
652 (propagated-inputs
653 `(("python-defusedxml" ,python-defusedxml)))
654 (native-inputs
655 `(("python-coverage" ,python-coverage)
656 ("python-psycopg2" ,python-psycopg2)
657 ("python-django" ,python-django)))
658 (home-page "https://github.com/necaris/python3-openid")
659 (synopsis "OpenID support for servers and consumers")
660 (description "This library provides OpenID authentication for Python, both
661 for clients and servers.")
662 (license license:asl2.0)))
663
664 (define-public python2-openid
665 (package
666 (name "python2-openid")
667 (version "2.2.5")
668 (source
669 (origin
670 (method url-fetch)
671 (uri (pypi-uri "python-openid" version))
672 (sha256
673 (base32
674 "1vvhxlghjan01snfdc4k7ykd80vkyjgizwgg9bncnin8rqz1ricj"))))
675 (build-system python-build-system)
676 (arguments
677 ;; Python 3 support is in `python3-openid`, a separate package.
678 `(#:python ,python-2
679 ;; Tests aren't initialized correctly.
680 #:tests? #f))
681 (home-page "https://github.com/openid/python-openid")
682 (synopsis "OpenID support for servers and consumers")
683 (description "This library provides OpenID authentication for Python, both
684 for clients and servers.")
685 (license license:asl2.0)))
686
687 (define-public python-cssutils
688 (package
689 (name "python-cssutils")
690 (version "1.0.2")
691 (source
692 (origin
693 (method url-fetch)
694 (uri (pypi-uri "cssutils" version))
695 (sha256
696 (base32
697 "1bxchrbqzapwijap0yhlxdil1w9bmwvgx77aizlkhc2mcxjg1z52"))))
698 (build-system python-build-system)
699 (native-inputs
700 `(("unzip" ,unzip))) ; for unpacking the source
701 (arguments
702 `(#:tests? #f)) ; tests require python-pbr < 1.7.0
703 (home-page "http://cthedot.de/cssutils/")
704 (synopsis
705 "CSS Cascading Style Sheets library for Python")
706 (description
707 "Cssutils is a Python package for parsing and building CSS
708 Cascading Style Sheets. Currently it provides a DOM only and no rendering
709 options.")
710 (license license:lgpl3+)))
711
712 (define-public python2-cssutils
713 (package-with-python2 python-cssutils))
714
715 (define-public python-css-parser
716 (package
717 (inherit python-cssutils)
718 (name "python-css-parser")
719 (version "1.0.4")
720 (source
721 (origin
722 (method url-fetch)
723 (uri (pypi-uri "css-parser" version ".tar.gz"))
724 (sha256
725 (base32
726 "0i4xfykiffxzr4f6y0m2ggqvx1rzam6pw6krlr5k6ldf29akbay7"))))
727 (home-page "https://github.com/ebook-utils/css-parser")
728 (synopsis "Fork of cssutils modified for parsing ebooks")
729 (description
730 "Css-parser is a fork of cssutils 1.0.2, updated and modified for parsing
731 ebooks, due to cssutils not receiving updates as of 1.0.2.")
732 (license license:lgpl3+)))
733
734 (define-public python2-css-parser
735 (package-with-python2 python-css-parser))
736
737 (define-public python-cssselect
738 (package
739 (name "python-cssselect")
740 (version "0.9.2")
741 (source
742 (origin
743 (method url-fetch)
744 (uri (pypi-uri "cssselect" version))
745 (sha256
746 (base32
747 "1xg6gbva1yswghiycmgincv6ab4bn7hpm720ndbj40h8xycmnfvi"))))
748 (build-system python-build-system)
749 (arguments
750 ;; tests fail with message
751 ;; AttributeError: 'module' object has no attribute 'tests'
752 `(#:tests? #f))
753 (home-page
754 "https://pythonhosted.org/cssselect/")
755 (synopsis
756 "CSS3 selector parser and translator to XPath 1.0")
757 (description
758 "Cssselect ia a Python module that parses CSS3 Selectors and translates
759 them to XPath 1.0 expressions. Such expressions can be used in lxml or
760 another XPath engine to find the matching elements in an XML or HTML document.")
761 (license license:bsd-3)))
762
763 (define-public python2-cssselect
764 (package-with-python2 python-cssselect))
765
766 (define-public python-openid-cla
767 (package
768 (name "python-openid-cla")
769 (version "1.2")
770 (source
771 (origin
772 (method url-fetch)
773 (uri (pypi-uri "python-openid-cla" version))
774 (sha256
775 (base32
776 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
777 (build-system python-build-system)
778 (arguments '(#:tests? #f)) ; No tests.
779 (home-page "https://github.com/puiterwijk/python-openid-cla/")
780 (synopsis "Implementation of the OpenID CLA extension for python-openid")
781 (description "@code{openid-cla} is an implementation of the OpenID
782 contributor license agreement extension for python-openid.")
783 (license license:bsd-3)))
784
785 (define-public python2-openid-cla
786 (package-with-python2 python-openid-cla))
787
788 (define-public python-openid-teams
789 (package
790 (name "python-openid-teams")
791 (version "1.1")
792 (source
793 (origin
794 (method url-fetch)
795 (uri (pypi-uri "python-openid-teams" version))
796 (sha256
797 (base32
798 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
799 (build-system python-build-system)
800 (arguments '(#:tests? #f)) ; No tests.
801 (home-page "https://github.com/puiterwijk/python-openid-teams/")
802 (synopsis "Implementation of the OpenID teams extension for python-openid")
803 (description
804 "@code{openid-teams} is an implementation of the OpenID
805 teams extension for python-openid.")
806 (license license:bsd-3)))
807
808 (define-public python2-openid-teams
809 (package-with-python2 python-openid-teams))
810
811 (define-public python-tornado
812 (package
813 (name "python-tornado")
814 (version "5.1.1")
815 (source
816 (origin
817 (method url-fetch)
818 (uri (pypi-uri "tornado" version))
819 (sha256
820 (base32
821 "02clqk2116jbnq8lnaqmdw3p52nqrd9ib59r4xz2ll43fpcmhlaf"))))
822 (build-system python-build-system)
823 (arguments
824 '(;; FIXME: Two tests error out with:
825 ;; AssertionError: b'Error in atexit._run_exitfuncs:\nFileNotF[44 chars]ry\n' != b''
826 ;; #:phases
827 ;; (modify-phases %standard-phases
828 ;; (replace 'check
829 ;; (lambda _
830 ;; ;; 'setup.py test' hits an AssertionError on BSD-specific
831 ;; ;; "tornado/platform/kqueue.py". This is the supported method:
832 ;; (invoke "python" "-m" "tornado.test.runtests")
833 ;; #t)))
834 #:tests? #f))
835 (native-inputs
836 `(("python-certifi" ,python-certifi)))
837 (home-page "https://www.tornadoweb.org/")
838 (synopsis "Python web framework and asynchronous networking library")
839 (description
840 "Tornado is a Python web framework and asynchronous networking library,
841 originally developed at FriendFeed. By using non-blocking network I/O,
842 Tornado can scale to tens of thousands of open connections, making it ideal
843 for long polling, WebSockets, and other applications that require a long-lived
844 connection to each user.")
845 (license license:asl2.0)
846 (properties `((python2-variant . ,(delay python2-tornado))))))
847
848 (define-public python2-tornado
849 (let ((tornado (package-with-python2 (strip-python2-variant python-tornado))))
850 (package (inherit tornado)
851 (propagated-inputs
852 `(("python2-backport-ssl-match-hostname"
853 ,python2-backport-ssl-match-hostname)
854 ("python2-backports-abc" ,python2-backports-abc)
855 ("python2-singledispatch" ,python2-singledispatch)
856 ,@(package-propagated-inputs tornado))))))
857
858 (define-public python-tornado-http-auth
859 (package
860 (name "python-tornado-http-auth")
861 (version "1.1.1")
862 (source
863 (origin
864 (method url-fetch)
865 (uri (pypi-uri "tornado-http-auth" version))
866 (sha256
867 (base32 "0hyc5f0a09i5yb99pk4bxpg6w9ichbrb5cv7hc9hff7rxd8w0v0x"))))
868 (build-system python-build-system)
869 (propagated-inputs
870 `(("python-tornado" ,python-tornado)))
871 (home-page "https://github.com/gvalkov/tornado-http-auth")
872 (synopsis "Digest and basic authentication module for Tornado")
873 (description
874 "Provides support for adding authentication to services using the Tornado
875 web framework, either via the basic or digest authentication schemes.")
876 (license license:asl2.0)))
877
878 (define-public python-terminado
879 (package
880 (name "python-terminado")
881 (version "0.8.1")
882 (source
883 (origin
884 (method url-fetch)
885 (uri (pypi-uri "terminado" version))
886 (sha256
887 (base32
888 "0yh69k6579g848rmjyllb5h75pkvgcy27r1l3yzgkf33wnnzkasm"))))
889 (build-system python-build-system)
890 (propagated-inputs
891 `(("python-tornado" ,python-tornado)
892 ("python-ptyprocess" ,python-ptyprocess)))
893 (native-inputs
894 `(("python-nose" ,python-nose)))
895 (arguments
896 `(#:phases
897 (modify-phases %standard-phases
898 (replace 'check
899 (lambda _ (invoke "nosetests") #t)))))
900 (home-page "https://github.com/takluyver/terminado")
901 (synopsis "Terminals served to term.js using Tornado websockets")
902 (description "This package provides a Tornado websocket backend for the
903 term.js Javascript terminal emulator library.")
904 (license license:bsd-2)
905 (properties `((python2-variant . ,(delay python2-terminado))))))
906
907 (define-public python2-terminado
908 (let ((terminado (package-with-python2 (strip-python2-variant python-terminado))))
909 (package (inherit terminado)
910 (propagated-inputs
911 `(("python2-backport-ssl-match-hostname"
912 ,python2-backport-ssl-match-hostname)
913 ("python2-futures" ,python2-futures)
914 ,@(package-propagated-inputs terminado))))))
915
916 (define-public python-wsgi-intercept
917 (package
918 (name "python-wsgi-intercept")
919 (version "1.2.2")
920 (source (origin
921 (method url-fetch)
922 (uri (pypi-uri "wsgi_intercept" version))
923 (sha256
924 (base32
925 "0kjj2v2dvmnpdd5h5gk9rzz0f54rhjb0yiz3zg65bmp65slfw65d"))))
926 (build-system python-build-system)
927 (propagated-inputs
928 `(("python-six" ,python-six)))
929 (native-inputs
930 `(("python-pytest" ,python-pytest)
931 ("python-httplib2" ,python-httplib2)
932 ("python-requests" ,python-requests)
933 ("python-urllib3" ,python-urllib3)))
934 (synopsis "Puts a WSGI application in place of a real URI for testing")
935 (description "Wsgi_intercept installs a WSGI application in place of a real
936 URI for testing. Testing a WSGI application normally involves starting a
937 server at a local host and port, then pointing your test code to that address.
938 Instead, this library lets you intercept calls to any specific host/port
939 combination and redirect them into a WSGI application importable by your test
940 program. Thus, you can avoid spawning multiple processes or threads to test
941 your Web app.")
942 (home-page "https://github.com/cdent/wsgi-intercept")
943 (license license:expat)))
944
945 (define-public python-webob
946 (package
947 (name "python-webob")
948 (version "1.5.1")
949 (source
950 (origin
951 (method url-fetch)
952 (uri (pypi-uri "WebOb" version))
953 (sha256
954 (base32
955 "02bhhzijfhv8hmi1i54d4b0v43liwhnywhflvxsv4x3zax9s3afq"))))
956 (build-system python-build-system)
957 (native-inputs
958 `(("python-nose" ,python-nose)))
959 (home-page "https://webob.org/")
960 (synopsis "WSGI request and response object")
961 (description
962 "WebOb provides wrappers around the WSGI request environment, and an
963 object to help create WSGI responses.")
964 (license license:expat)))
965
966 (define-public python2-webob
967 (package-with-python2 python-webob))
968
969 (define-public python-zope-event
970 (package
971 (name "python-zope-event")
972 (version "4.4")
973 (source
974 (origin
975 (method url-fetch)
976 (uri (pypi-uri "zope.event" version))
977 (sha256
978 (base32
979 "1ksbc726av9xacml6jhcfyn828hlhb9xlddpx6fcvnlvmpmpvhk9"))))
980 (build-system python-build-system)
981 (home-page "https://pypi.org/project/zope.event/")
982 (synopsis "Event publishing system for Python")
983 (description "Zope.event provides an event publishing API, intended for
984 use by applications which are unaware of any subscribers to their events. It
985 is a simple event-dispatching system on which more sophisticated event
986 dispatching systems can be built.")
987 (license license:zpl2.1)))
988
989 (define-public python2-zope-event
990 (package-with-python2 python-zope-event))
991
992 (define-public python-zope-interface
993 (package
994 (name "python-zope-interface")
995 (version "4.7.2")
996 (source
997 (origin
998 (method url-fetch)
999 (uri (pypi-uri "zope.interface" version))
1000 (sha256
1001 (base32
1002 "0r9kvb1q3lxrdhxabliv9nwhjsdmn1n0vcjv93rlqkyb7yyh24gx"))))
1003 (build-system python-build-system)
1004 (native-inputs
1005 `(("python-zope-event" ,python-zope-event)))
1006 (home-page "https://github.com/zopefoundation/zope.interface")
1007 (synopsis "Python implementation of the \"design by contract\"
1008 methodology")
1009 (description "Zope.interface provides an implementation of \"object
1010 interfaces\" for Python. Interfaces are a mechanism for labeling objects as
1011 conforming to a given API or contract.")
1012 (license license:zpl2.1)))
1013
1014 (define-public python2-zope-interface
1015 (package-with-python2 python-zope-interface))
1016
1017 (define-public python-zope-exceptions
1018 (package
1019 (name "python-zope-exceptions")
1020 (version "4.3")
1021 (source
1022 (origin
1023 (method url-fetch)
1024 (uri (pypi-uri "zope.exceptions" version))
1025 (sha256
1026 (base32
1027 "04bjskwas17yscl8bs3l44maxspw1gdji0zcmr499fs420y9r9az"))))
1028 (build-system python-build-system)
1029 (arguments
1030 '(#:tests? #f)) ; circular dependency with zope.testrunner
1031 (propagated-inputs
1032 `(("python-zope-interface" ,python-zope-interface)))
1033 (home-page "https://pypi.org/project/zope.exceptions/")
1034 (synopsis "Zope exceptions")
1035 (description "Zope.exceptions provides general-purpose exception types
1036 that have uses outside of the Zope framework.")
1037 (license license:zpl2.1)))
1038
1039 (define-public python2-zope-exceptions
1040 (package-with-python2 python-zope-exceptions))
1041
1042 (define-public python-zope-testing
1043 (package
1044 (name "python-zope-testing")
1045 (version "4.7")
1046 (source
1047 (origin
1048 (method url-fetch)
1049 (uri (pypi-uri "zope.testing" version))
1050 (sha256
1051 (base32
1052 "1sh3c3i0m8n8fnhqiry0bk3rr356i56ry7calmn57s1pvv8yhsyn"))))
1053 (build-system python-build-system)
1054 (home-page "https://pypi.org/project/zope.testing/")
1055 (synopsis "Zope testing helpers")
1056 (description "Zope.testing provides a number of testing utilities for HTML
1057 forms, HTTP servers, regular expressions, and more.")
1058 (license license:zpl2.1)))
1059
1060 (define-public python2-zope-testing
1061 (package-with-python2 python-zope-testing))
1062
1063 (define-public python-zope-testrunner
1064 (package
1065 (name "python-zope-testrunner")
1066 (version "5.1")
1067 (source
1068 (origin
1069 (method url-fetch)
1070 (uri (pypi-uri "zope.testrunner" version))
1071 (sha256
1072 (base32
1073 "0w3q66cy4crpj7c0hw0vvvvwf3g931rnvw7wwa20av7yqvv6ajim"))))
1074 (build-system python-build-system)
1075 (arguments
1076 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
1077 (native-inputs
1078 `(("python-zope-testing" ,python-zope-testing)))
1079 (propagated-inputs
1080 `(("python-six" ,python-six)
1081 ("python-zope-exceptions" ,python-zope-exceptions)
1082 ("python-zope-interface" ,python-zope-interface)))
1083 (home-page "https://pypi.org/project/zope.testrunner/")
1084 (synopsis "Zope testrunner script")
1085 (description "Zope.testrunner provides a script for running Python
1086 tests.")
1087 (license license:zpl2.1)))
1088
1089 (define-public python2-zope-testrunner
1090 (package-with-python2 python-zope-testrunner))
1091
1092 (define-public python-zope-i18nmessageid
1093 (package
1094 (name "python-zope-i18nmessageid")
1095 (version "5.0.1")
1096 (source
1097 (origin
1098 (method url-fetch)
1099 (uri (pypi-uri "zope.i18nmessageid" version))
1100 (sha256
1101 (base32
1102 "0ndhn4w1qgwkfbwf9vm2bgq418z5g0wmfsgl0d9nz62cd0mi8d4m"))))
1103 (build-system python-build-system)
1104 (native-inputs
1105 `(("python-coverage" ,python-coverage)
1106 ("python-zope-testrunner" ,python-zope-testrunner)))
1107 (propagated-inputs
1108 `(("python-six" ,python-six)))
1109 (home-page "https://pypi.org/project/zope.i18nmessageid/")
1110 (synopsis "Message identifiers for internationalization")
1111 (description "Zope.i18nmessageid provides facilities for declaring
1112 internationalized messages within program source text.")
1113 (license license:zpl2.1)))
1114
1115 (define-public python2-zope-i18nmessageid
1116 (package-with-python2 python-zope-i18nmessageid))
1117
1118 (define-public python-zope-schema
1119 (package
1120 (name "python-zope-schema")
1121 (version "5.0.1")
1122 (source
1123 (origin
1124 (method url-fetch)
1125 (uri (pypi-uri "zope.schema" version))
1126 (sha256
1127 (base32
1128 "0q93j0x52a42khw12al90jw2bk0wly3jwghql3a25zpwwxvn24ya"))))
1129 (build-system python-build-system)
1130 (arguments
1131 '(#:tests? #f)) ; FIXME: Tests can't find zope.event.
1132 (propagated-inputs
1133 `(("python-zope-event" ,python-zope-event)
1134 ("python-zope-interface" ,python-zope-interface)))
1135 (native-inputs
1136 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
1137 ("python-zope-testing" ,python-zope-testing)
1138 ("python-zope-testrunner" ,python-zope-testrunner)))
1139 (home-page "https://pypi.org/project/zope.schema/")
1140 (synopsis "Zope data schemas")
1141 (description "Zope.scheme provides extensions to zope.interface for
1142 defining data schemas.")
1143 (license license:zpl2.1)))
1144
1145 (define-public python2-zope-schema
1146 (package-with-python2 python-zope-schema))
1147
1148 (define-public python-zope-configuration
1149 (package
1150 (name "python-zope-configuration")
1151 (version "4.3.1")
1152 (source (origin
1153 (method url-fetch)
1154 (uri (pypi-uri "zope.configuration" version))
1155 (sha256
1156 (base32
1157 "1qb88764fd7nkkmqv7fl9bxd1jirynkg5vbqkpqdiffnkxzp85kf"))))
1158 (build-system python-build-system)
1159 (arguments
1160 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
1161 (native-inputs
1162 `(("python-zope-testing" ,python-zope-testing)
1163 ("python-zope-testrunner" ,python-zope-testrunner)))
1164 (propagated-inputs
1165 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
1166 ("python-zope-interface" ,python-zope-interface)
1167 ("python-zope-schema" ,python-zope-schema)))
1168 (home-page "https://pypi.org/project/zope.configuration/")
1169 (synopsis "Zope Configuration Markup Language")
1170 (description "Zope.configuration implements ZCML, the Zope Configuration
1171 Markup Language.")
1172 (license license:zpl2.1)))
1173
1174 (define-public python2-zope-configuration
1175 (package-with-python2 python-zope-configuration))
1176
1177 (define-public python-zope-proxy
1178 (package
1179 (name "python-zope-proxy")
1180 (version "4.3.4")
1181 (source
1182 (origin
1183 (method url-fetch)
1184 (uri (pypi-uri "zope.proxy" version))
1185 (sha256
1186 (base32
1187 "1g0rcfnbchpvqhm76aixqlz544dawrgmy8gw9zwmijhk6wfl9f26"))))
1188 (build-system python-build-system)
1189 (arguments
1190 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
1191 (native-inputs
1192 `(("python-zope-testrunner" ,python-zope-testrunner)))
1193 (propagated-inputs
1194 `(("python-zope-interface" ,python-zope-interface)))
1195 (home-page "https://pypi.org/project/zope.proxy/")
1196 (synopsis "Generic, transparent proxies")
1197 (description "Zope.proxy provides generic, transparent proxies for Python.
1198 Proxies are special objects which serve as mostly-transparent wrappers around
1199 another object, intervening in the apparent behavior of the wrapped object
1200 only when necessary to apply the policy (e.g., access checking, location
1201 brokering, etc.) for which the proxy is responsible.")
1202 (license license:zpl2.1)))
1203
1204 (define-public python2-zope-proxy
1205 (package-with-python2 python-zope-proxy))
1206
1207 (define-public python-zope-location
1208 (package
1209 (name "python-zope-location")
1210 (version "4.0.3")
1211 (source
1212 (origin
1213 (method url-fetch)
1214 (uri (pypi-uri "zope.location" version))
1215 (sha256
1216 (base32
1217 "1nj9da4ksiyv3h8n2vpzwd0pb03mdsh7zy87hfpx72b6p2zcwg74"))))
1218 (build-system python-build-system)
1219 (arguments
1220 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
1221 (propagated-inputs
1222 `(("python-zope-proxy" ,python-zope-proxy)
1223 ("python-zope-schema" ,python-zope-schema)))
1224 (home-page "https://pypi.org/project/zope.location/")
1225 (synopsis "Zope location library")
1226 (description "Zope.location implements the concept of \"locations\" in
1227 Zope3, which are are special objects that have a structural location.")
1228 (license license:zpl2.1)))
1229
1230 (define-public python2-zope-location
1231 (package-with-python2 python-zope-location))
1232
1233 (define-public python-zope-security
1234 (package
1235 (name "python-zope-security")
1236 (version "4.0.3")
1237 (source
1238 (origin
1239 (method url-fetch)
1240 (uri (pypi-uri "zope.security" version))
1241 (sha256
1242 (base32
1243 "14zmf684amc0x32kq05yxnhfqd1cmyhafkw05gn81rn90zjv6ssy"))))
1244 (build-system python-build-system)
1245 (arguments
1246 '(#:tests? #f)) ; FIXME: Tests can't find zope.testrunner.
1247 (propagated-inputs
1248 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
1249 ("python-zope-proxy" ,python-zope-proxy)
1250 ("python-zope-schema" ,python-zope-schema)))
1251 (native-inputs
1252 `(("python-six" ,python-six)
1253 ("python-zope-component" ,python-zope-component)
1254 ("python-zope-configuration" ,python-zope-configuration)
1255 ("python-zope-location" ,python-zope-location)
1256 ("python-zope-testrunner" ,python-zope-testrunner)
1257 ("python-zope-testing" ,python-zope-testing)))
1258 (home-page "https://pypi.org/project/zope.security/")
1259 (synopsis "Zope security framework")
1260 (description "Zope.security provides a generic mechanism to implement
1261 security policies on Python objects.")
1262 (license license:zpl2.1)))
1263
1264 (define-public python2-zope-security
1265 (let ((zope-security (package-with-python2 python-zope-security)))
1266 (package (inherit zope-security)
1267 (propagated-inputs
1268 `(("python2-zope-testrunner" ,python2-zope-testrunner)
1269 ,@(alist-delete
1270 "python-zope-testrunner"
1271 (package-propagated-inputs zope-security)))))))
1272
1273 (define-public python-zope-component
1274 (package
1275 (name "python-zope-component")
1276 (version "4.3.0")
1277 (source
1278 (origin
1279 (method url-fetch)
1280 (uri (pypi-uri "zope.component" version))
1281 (sha256
1282 (base32
1283 "1hlvzwj1kcfz1qms1dzhwsshpsf38z9clmyksb1gh41n8k3kchdv"))))
1284 (build-system python-build-system)
1285 (arguments
1286 ;; Skip tests due to circular dependency with python-zope-security.
1287 '(#:tests? #f))
1288 (native-inputs
1289 `(("python-zope-testing" ,python-zope-testing)))
1290 (propagated-inputs
1291 `(("python-zope-event" ,python-zope-event)
1292 ("python-zope-interface" ,python-zope-interface)
1293 ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
1294 ("python-zope-configuration" ,python-zope-configuration)))
1295 (home-page "https://github.com/zopefoundation/zope.component")
1296 (synopsis "Zope Component Architecture")
1297 (description "Zope.component represents the core of the Zope Component
1298 Architecture. Together with the zope.interface package, it provides
1299 facilities for defining, registering and looking up components.")
1300 (license license:zpl2.1)))
1301
1302 (define-public python2-zope-component
1303 (package-with-python2 python-zope-component))
1304
1305 (define-public python-ndg-httpsclient
1306 (package
1307 (name "python-ndg-httpsclient")
1308 (version "0.5.1")
1309 (source (origin
1310 (method url-fetch)
1311 (uri (pypi-uri "ndg_httpsclient" version))
1312 (sha256
1313 (base32
1314 "0412b7i1s4vj7lz9r72nmb28h9syd4q2x89bdirkkc3a6z8awbyp"))))
1315 (build-system python-build-system)
1316 (arguments
1317 '(;; The tests appear to require networking.
1318 #:tests? #f))
1319 (propagated-inputs
1320 `(("python-pyopenssl" ,python-pyopenssl)))
1321 (synopsis "HTTPS support for Python's httplib and urllib2")
1322 (description "This is a HTTPS client implementation for httplib and urllib2
1323 based on PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation
1324 over the default provided with Python and, importantly, enables full
1325 verification of the SSL peer.")
1326 (home-page "https://github.com/cedadev/ndg_httpsclient/")
1327 (license license:bsd-3)))
1328
1329 ;; python2-openssl requires special care, so package-with-python2 is
1330 ;; insufficient.
1331 (define-public python2-ndg-httpsclient
1332 (package (inherit python-ndg-httpsclient)
1333 (name "python2-ndg-httpsclient")
1334 (arguments
1335 (substitute-keyword-arguments (package-arguments python-ndg-httpsclient)
1336 ((#:python _) python-2)))
1337 (propagated-inputs
1338 `(("python2-pyopenssl" ,python2-pyopenssl)))))
1339
1340 (define-public python-websocket-client
1341 (package
1342 (name "python-websocket-client")
1343 (version "0.54.0")
1344 (source
1345 (origin
1346 (method url-fetch)
1347 (uri (pypi-uri "websocket_client" version))
1348 (sha256
1349 (base32
1350 "0j88zmikaypf38lvpkf4aaxrjp9j07dmy5ghj7kli0fv3p4n45g5"))))
1351 (build-system python-build-system)
1352 (propagated-inputs
1353 `(("python-six" ,python-six)))
1354 (home-page "https://github.com/liris/websocket-client")
1355 (synopsis "WebSocket client for Python")
1356 (description "The Websocket-client module provides the low level APIs for
1357 WebSocket usage in Python programs.")
1358 (properties `((python2-variant . ,(delay python2-websocket-client))))
1359 (license license:lgpl2.1+)))
1360
1361 (define-public python2-websocket-client
1362 (let ((base (package-with-python2
1363 (strip-python2-variant python-websocket-client))))
1364 (package
1365 (inherit base)
1366 (native-inputs
1367 `(("python2-backport-ssl-match-hostname"
1368 ,python2-backport-ssl-match-hostname)
1369 ,@(package-native-inputs base))))))
1370
1371 (define-public python-requests
1372 (package
1373 (name "python-requests")
1374 (version "2.22.0")
1375 (source (origin
1376 (method url-fetch)
1377 (uri (pypi-uri "requests" version))
1378 (sha256
1379 (base32
1380 "1d5ybh11jr5sm7xp6mz8fyc7vrp4syifds91m7sj60xalal0gq0i"))))
1381 (build-system python-build-system)
1382 (propagated-inputs
1383 `(("python-certifi" ,python-certifi)
1384 ("python-chardet" ,python-chardet)
1385 ("python-idna" ,python-idna)
1386 ("python-urllib3" ,python-urllib3)))
1387 (arguments
1388 ;; FIXME: Some tests require network access.
1389 '(#:tests? #f))
1390 (home-page "http://python-requests.org/")
1391 (synopsis "Python HTTP library")
1392 (description
1393 "Requests is a Python HTTP client library. It aims to be easier to use
1394 than Python’s urllib2 library.")
1395 (license license:asl2.0)))
1396
1397 ;; Some software requires an older version of Requests, notably Docker/Docker
1398 ;; Compose.
1399 (define-public python-requests-2.20
1400 (package (inherit python-requests)
1401 (version "2.20.1")
1402 (source (origin
1403 (method url-fetch)
1404 (uri (pypi-uri "requests" version))
1405 (sha256
1406 (base32
1407 "0qzj6cgv3k9wyj7wlxgz7xq0cfg4jbbkfm24pp8dnhczwl31527a"))))
1408 (propagated-inputs
1409 `(("python-urllib3" ,python-urllib3-1.24)
1410 ("python-idna" ,python-idna-2.7)
1411 ,@(package-propagated-inputs python-requests)))))
1412
1413 ;; Some software requires an older version of Requests, notably Docker
1414 ;; Compose.
1415 (define-public python-requests-2.7
1416 (package (inherit python-requests)
1417 (version "2.7.0")
1418 (source (origin
1419 (method url-fetch)
1420 (uri (pypi-uri "requests" version))
1421 (sha256
1422 (base32
1423 "0gdr9dxm24amxpbyqpbh3lbwxc2i42hnqv50sigx568qssv3v2ir"))))))
1424
1425 (define-public python2-requests
1426 (package-with-python2 python-requests))
1427
1428 (define-public python-requests-mock
1429 (package
1430 (name "python-requests-mock")
1431 (version "1.3.0")
1432 (source
1433 (origin
1434 (method url-fetch)
1435 (uri (pypi-uri "requests-mock" version))
1436 (sha256
1437 (base32
1438 "0jr997dvk6zbmhvbpcv3rajrgag69mcsm1ai3w3rgk2jdh6rg1mx"))))
1439 (build-system python-build-system)
1440 (propagated-inputs
1441 `(("python-requests" ,python-requests)
1442 ("python-six" ,python-six)))
1443 (native-inputs
1444 `(("python-pbr" ,python-pbr)
1445 ("python-discover" ,python-discover)
1446 ("python-docutils" ,python-docutils)
1447 ("python-fixtures" ,python-fixtures)
1448 ("python-mock" ,python-mock)
1449 ("python-sphinx" ,python-sphinx)
1450 ("python-testrepository" ,python-testrepository)
1451 ("python-testtools" ,python-testtools)))
1452 (home-page "https://requests-mock.readthedocs.org/")
1453 (synopsis "Mock out responses from the requests package")
1454 (description
1455 "This module provides a building block to stub out the HTTP requests
1456 portions of your testing code.")
1457 (properties `((python2-variant . ,(delay python2-requests-mock))))
1458 (license license:asl2.0)))
1459
1460 (define-public python2-requests-mock
1461 (package (inherit (package-with-python2
1462 (strip-python2-variant python-requests-mock)))
1463 (arguments
1464 `(#:python ,python-2
1465 ;; FIXME: 'subunit.run discover: error: no such option: --list'
1466 #:tests? #f))))
1467
1468 (define-public python-requests-toolbelt
1469 (package
1470 (name "python-requests-toolbelt")
1471 (version "0.8.0")
1472 (source (origin
1473 (method url-fetch)
1474 (uri (pypi-uri "requests-toolbelt" version))
1475 (sha256
1476 (base32
1477 "1dc7l42i4080r8i4m9fj51jx367lqkai170vrv7wd93gdj9k39gn"))))
1478 (build-system python-build-system)
1479 (native-inputs
1480 `(("python-betamax" ,python-betamax)
1481 ("python-mock" ,python-mock)
1482 ("python-pytest" ,python-pytest)))
1483 (propagated-inputs
1484 `(("python-requests" ,python-requests)))
1485 (synopsis "Extensions to python-requests")
1486 (description "This is a toolbelt of useful classes and functions to be used
1487 with python-requests.")
1488 (home-page "https://github.com/sigmavirus24/requests-toolbelt")
1489 (license license:asl2.0)))
1490
1491 (define-public python2-requests-toolbelt
1492 (package-with-python2 python-requests-toolbelt))
1493
1494 (define-public python-oauthlib
1495 (package
1496 (name "python-oauthlib")
1497 (version "3.0.1")
1498 (source (origin
1499 (method url-fetch)
1500 (uri (pypi-uri "oauthlib" version))
1501 (sha256
1502 (base32
1503 "163jg4a8f7c5ki655grrr47kgljy12wri3qly7ijf64sk1fjrqqc"))))
1504 (build-system python-build-system)
1505 (arguments
1506 `(#:phases (modify-phases %standard-phases
1507 (replace 'check
1508 (lambda _
1509 (invoke "pytest" "-vv"))))))
1510 (native-inputs
1511 `(("python-pytest" ,python-pytest)
1512 ("python-pytest-cov" ,python-pytest-cov)
1513 ("python-mock" ,python-mock)))
1514 (propagated-inputs
1515 `(("python-cryptography" ,python-cryptography)
1516 ("python-pyjwt" ,python-pyjwt)
1517 ("python-blinker" ,python-blinker)))
1518 (home-page "https://github.com/oauthlib/oauthlib")
1519 (synopsis "OAuth implementation for Python")
1520 (description
1521 "Oauthlib is a generic, spec-compliant, thorough implementation of the
1522 OAuth request-signing logic.")
1523 (license license:bsd-3)))
1524
1525 (define-public python2-oauthlib
1526 (package-with-python2 python-oauthlib))
1527
1528 (define-public python-rauth
1529 (package
1530 (name "python-rauth")
1531 (version "0.7.3")
1532 (source
1533 (origin
1534 (method url-fetch)
1535 (uri (pypi-uri "rauth" version))
1536 (sha256
1537 (base32
1538 "02kv8w8l98ky223avyq7vw7x1f2ya9chrm59r77ylq45qb0xnk2j"))))
1539 (build-system python-build-system)
1540 (arguments
1541 `(#:test-target "check"))
1542 (propagated-inputs
1543 `(("python-requests" ,python-requests)))
1544 (home-page "https://github.com/litl/rauth")
1545 (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
1546 (description
1547 "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly. It also
1548 provides service wrappers for convenient connection initialization and
1549 authenticated session objects providing things like keep-alive.")
1550 (license license:expat)
1551 (properties `((python2-variant . ,(delay python2-rauth))))))
1552
1553 (define-public python2-rauth
1554 (let ((base (package-with-python2 (strip-python2-variant python-rauth))))
1555 (package
1556 (inherit base)
1557 (native-inputs `(("python2-unittest2" ,python2-unittest2)
1558 ,@(package-native-inputs base))))))
1559
1560 (define-public python-urllib3
1561 (package
1562 (name "python-urllib3")
1563 (version "1.25.3")
1564 (source
1565 (origin
1566 (method url-fetch)
1567 (uri (pypi-uri "urllib3" version))
1568 (sha256
1569 (base32
1570 "0cij8qcvvpj62g1q8n785qjkdymfh4b7vf45si4sw64l41rr3rfv"))))
1571 (build-system python-build-system)
1572 (arguments `(#:tests? #f))
1573 (propagated-inputs
1574 `(;; These 5 inputs are used to build urrlib3[secure]
1575 ("python-certifi" ,python-certifi)
1576 ("python-cryptography" ,python-cryptography)
1577 ("python-idna" ,python-idna)
1578 ("python-ipaddress" ,python-ipaddress)
1579 ("python-pyopenssl" ,python-pyopenssl)
1580 ("python-pysocks" ,python-pysocks)))
1581 (home-page "https://urllib3.readthedocs.io/")
1582 (synopsis "HTTP library with thread-safe connection pooling")
1583 (description
1584 "Urllib3 supports features left out of urllib and urllib2 libraries. It
1585 can reuse the same socket connection for multiple requests, it can POST files,
1586 supports url redirection and retries, and also gzip and deflate decoding.")
1587 (license license:expat)))
1588
1589 ;; Some software requires an older version of urllib3, notably Docker.
1590 (define-public python-urllib3-1.24
1591 (package (inherit python-urllib3)
1592 (version "1.24.3")
1593 (source (origin
1594 (method url-fetch)
1595 (uri (pypi-uri "urllib3" version))
1596 (sha256
1597 (base32
1598 "1x0slqrv6kixkbcdnxbglvjliwhc1payavxjvk8fvbqjrnasd4r3"))))))
1599
1600
1601 (define-public python2-urllib3
1602 (package-with-python2 python-urllib3))
1603
1604 (define-public awscli
1605 (package
1606 (name "awscli")
1607 (version "1.18.6")
1608 (source
1609 (origin
1610 (method url-fetch)
1611 (uri (pypi-uri name version))
1612 (sha256
1613 (base32
1614 "0p479mfs9r0m82a217pap8156ijwvhv6r3kqa4k267gd05wgvygm"))))
1615 (build-system python-build-system)
1616 (arguments
1617 ;; FIXME: The 'pypi' release does not contain tests.
1618 '(#:tests? #f
1619 #:phases
1620 (modify-phases %standard-phases
1621 (add-after 'unpack 'fix-reference-to-groff
1622 (lambda _
1623 (substitute* "awscli/help.py"
1624 (("if not self._exists_on_path\\('groff'\\):") "")
1625 (("raise ExecutableNotFoundError\\('groff'\\)") "")
1626 (("cmdline = \\['groff'")
1627 (string-append "cmdline = ['" (which "groff") "'")))
1628 #t)))))
1629 (propagated-inputs
1630 `(("python-colorama" ,python-colorama)
1631 ("python-botocore" ,python-botocore)
1632 ("python-s3transfer" ,python-s3transfer)
1633 ("python-docutils" ,python-docutils)
1634 ("python-pyyaml" ,python-pyyaml)
1635 ("python-rsa" ,python-rsa)))
1636 (native-inputs
1637 `(("groff" ,groff)))
1638 (home-page "https://aws.amazon.com/cli/")
1639 (synopsis "Command line client for AWS")
1640 (description "AWS CLI provides a unified command line interface to the
1641 Amazon Web Services (AWS) API.")
1642 (license license:asl2.0)))
1643
1644 (define-public python-wsgiproxy2
1645 (package
1646 (name "python-wsgiproxy2")
1647 (version "0.4.6")
1648 (source
1649 (origin
1650 (method url-fetch)
1651 (uri (pypi-uri "WSGIProxy2" version ".tar.gz"))
1652 (sha256
1653 (base32 "16jch5nic0hia28lps3c678s9s9mjdq8n87igxncjg0rpi5adqnf"))))
1654 (build-system python-build-system)
1655 (native-inputs
1656 `(("python-webtest" ,python-webtest)))
1657 (propagated-inputs
1658 `(("python-requests" ,python-requests)
1659 ("python-six" ,python-six)
1660 ("python-urllib3" ,python-urllib3)
1661 ("python-webob" ,python-webob)))
1662 (home-page "https://github.com/gawel/WSGIProxy2/")
1663 (synopsis "WSGI Proxy with various http client backends")
1664 (description "WSGI turns HTTP requests into WSGI function calls.
1665 WSGIProxy turns WSGI function calls into HTTP requests.
1666 It also includes code to sign requests and pass private data,
1667 and to spawn subprocesses to handle requests.")
1668 (license license:expat)))
1669
1670 (define-public python2-wsgiproxy2
1671 (package-with-python2 python-wsgiproxy2))
1672
1673 (define-public python-pastedeploy
1674 (package
1675 (name "python-pastedeploy")
1676 (version "1.5.2")
1677 (source
1678 (origin
1679 (method url-fetch)
1680 (uri (pypi-uri "PasteDeploy" version))
1681 (sha256
1682 (base32
1683 "1jz3m4hq8v6hyhfjz9425nd3nvn52cvbfipdcd72krjmla4qz1fm"))))
1684 (build-system python-build-system)
1685 (native-inputs
1686 `(("python-nose" ,python-nose)))
1687 (home-page "https://pylonsproject.org/")
1688 (synopsis
1689 "Load, configure, and compose WSGI applications and servers")
1690 (description
1691 "This tool provides code to load WSGI applications and servers from URIs;
1692 these URIs can refer to Python Eggs for INI-style configuration files. Paste
1693 Script provides commands to serve applications based on this configuration
1694 file.")
1695 (license license:expat)))
1696
1697 (define-public python2-pastedeploy
1698 (package-with-python2 python-pastedeploy))
1699
1700 (define-public python-webtest
1701 (package
1702 (name "python-webtest")
1703 (version "2.0.33")
1704 (source
1705 (origin
1706 (method url-fetch)
1707 (uri (pypi-uri "WebTest" version))
1708 (sha256
1709 (base32
1710 "1l3z0cwqslsf4rcrhi2gr8kdfh74wn2dw76376i4g9i38gz8wd21"))))
1711 (build-system python-build-system)
1712 (arguments
1713 ;; Tests require python-pyquery, which creates a circular dependency.
1714 `(#:tests? #f))
1715 (propagated-inputs
1716 `(("python-waitress" ,python-waitress)
1717 ("python-webob" ,python-webob)
1718 ("python-six" ,python-six)
1719 ("python-beautifulsoup4" ,python-beautifulsoup4)))
1720 (home-page "https://docs.pylonsproject.org/projects/webtest/")
1721 (synopsis "Helper to test WSGI applications")
1722 (description "Webtest allows you to test your Python web applications
1723 without starting an HTTP server. It supports anything that supports the
1724 minimum of WSGI.")
1725 (license license:expat)))
1726
1727 (define-public python2-webtest
1728 (package-with-python2 python-webtest))
1729
1730 (define-public python-flask
1731 (package
1732 (name "python-flask")
1733 (version "1.1.1")
1734 (source (origin
1735 (method url-fetch)
1736 (uri (pypi-uri "Flask" version))
1737 (sha256
1738 (base32
1739 "0ljdjgyjn7vh8ic1n1dc2l1cl421i6pr3kx5sz2w5irhyfbg3y8k"))))
1740 (build-system python-build-system)
1741 (arguments
1742 '(#:phases
1743 (modify-phases %standard-phases
1744 (replace 'check
1745 (lambda _
1746 (setenv "PYTHONPATH" (string-append "./build/lib:"
1747 (getenv "PYTHONPATH")))
1748 (invoke "pytest" "-vv" "tests"))))))
1749 (native-inputs
1750 `(("python-pytest" ,python-pytest)))
1751 (propagated-inputs
1752 `(("python-itsdangerous" ,python-itsdangerous)
1753 ("python-jinja2" ,python-jinja2)
1754 ("python-click" ,python-click)
1755 ("python-werkzeug" ,python-werkzeug)))
1756 (home-page "https://www.palletsprojects.com/p/flask/")
1757 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
1758 (description "Flask is a micro web framework based on the Werkzeug toolkit
1759 and Jinja2 template engine. It is called a micro framework because it does not
1760 presume or force a developer to use a particular tool or library.")
1761 (license license:bsd-3)))
1762
1763 (define-public python2-flask
1764 (package-with-python2 python-flask))
1765
1766 (define-public python-flask-wtf
1767 (package
1768 (name "python-flask-wtf")
1769 (version "0.14.3")
1770 (source
1771 (origin
1772 (method url-fetch)
1773 (uri (pypi-uri "Flask-WTF" version))
1774 (sha256
1775 (base32
1776 "086pvg2x69n0nczcq7frknfjd8am1zdy8qqpva1sanwb02hf65yl"))))
1777 (build-system python-build-system)
1778 (arguments
1779 '(#:phases
1780 (modify-phases %standard-phases
1781 (replace 'check
1782 (lambda _
1783 (setenv "PYTHONPATH" (string-append "./build/lib:"
1784 (getenv "PYTHONPATH")))
1785 (invoke "pytest" "-vv"))))))
1786 (propagated-inputs
1787 `(("python-flask-babel" ,python-flask-babel)
1788 ("python-babel" ,python-babel)
1789 ("python-wtforms" ,python-wtforms)))
1790 (native-inputs
1791 `(("python-pytest" ,python-pytest)))
1792 (home-page "https://github.com/lepture/flask-wtf")
1793 (synopsis "Simple integration of Flask and WTForms")
1794 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
1795 upload, and reCAPTCHA.")
1796 (license license:bsd-3)))
1797
1798 (define-public python2-flask-wtf
1799 (package-with-python2 python-flask-wtf))
1800
1801 (define-public python-flask-multistatic
1802 (package
1803 (name "python-flask-multistatic")
1804 (version "1.0")
1805 (source
1806 (origin
1807 (method url-fetch)
1808 (uri (pypi-uri "flask-multistatic" version))
1809 (sha256
1810 (base32
1811 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
1812 (build-system python-build-system)
1813 (propagated-inputs
1814 `(("python-flask" ,python-flask)))
1815 (home-page "https://pagure.io/flask-multistatic")
1816 (synopsis "Flask plugin to allow overriding static files")
1817 (description "@code{flask-multistatic} is a flask plugin that adds support
1818 for overriding static files.")
1819 (license license:gpl3+)))
1820
1821 (define-public python2-flask-multistatic
1822 (package-with-python2 python-flask-multistatic))
1823
1824 (define-public python-cookies
1825 (package
1826 (name "python-cookies")
1827 (version "2.2.1")
1828 (source (origin
1829 (method url-fetch)
1830 (uri (pypi-uri "cookies" version))
1831 (sha256
1832 (base32
1833 "13pfndz8vbk4p2a44cfbjsypjarkrall71pgc97glk5fiiw9idnn"))))
1834 (build-system python-build-system)
1835 (arguments
1836 `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
1837 #:tests? #f))
1838 (native-inputs
1839 `(("python-pytest" ,python-pytest)))
1840 (synopsis "HTTP cookie parser and renderer")
1841 (description "A RFC 6265-compliant HTTP cookie parser and renderer in
1842 Python.")
1843 (home-page "https://gitlab.com/sashahart/cookies")
1844 (license license:expat)))
1845
1846 (define-public python2-cookies
1847 (package-with-python2 python-cookies))
1848
1849 (define-public python-responses
1850 (package
1851 (name "python-responses")
1852 (version "0.10.6")
1853 (source (origin
1854 (method url-fetch)
1855 (uri (pypi-uri "responses" version))
1856 (sha256
1857 (base32
1858 "147pacwkkqy3qf3hr33fnl1xbzgw0zsm3qppvvy9qhq8h069qbah"))))
1859 (build-system python-build-system)
1860 (arguments
1861 `(;; Test suite is not distributed:
1862 ;; https://github.com/getsentry/responses/issues/38
1863 #:tests? #f))
1864 (native-inputs
1865 `(("python-mock" ,python-mock)))
1866 (propagated-inputs
1867 `(("python-requests" ,python-requests)
1868 ("python-cookies" ,python-cookies)
1869 ("python-six" ,python-six)))
1870 (home-page "https://github.com/getsentry/responses")
1871 (synopsis "Utility for mocking out the `requests` Python library")
1872 (description "A utility library for mocking out the `requests` Python
1873 library.")
1874 (license license:asl2.0)))
1875
1876 (define-public python2-responses
1877 (package-with-python2 python-responses))
1878
1879 (define-public python-grequests
1880 (package
1881 (name "python-grequests")
1882 (version "0.3.0")
1883 (source
1884 (origin
1885 (method url-fetch)
1886 (uri (pypi-uri "grequests" version))
1887 (sha256
1888 (base32
1889 "1j9icncllbkv7x5719b20mx670c6q1jrdx1sakskkarvx3pc8h8g"))))
1890 (build-system python-build-system)
1891 (propagated-inputs
1892 `(("python-gevent" ,python-gevent)
1893 ("python-requests" ,python-requests)))
1894 (native-inputs
1895 `(("python-nose" ,python-nose)))
1896 (home-page "https://github.com/kennethreitz/grequests")
1897 (synopsis "Python library for asynchronous HTTP requests")
1898 (description "GRequests is a Python library that allows you to use
1899 @code{Requests} with @code{Gevent} to make asynchronous HTTP Requests easily")
1900 (license license:bsd-2)))
1901
1902 (define-public python-geventhttpclient
1903 (package
1904 (name "python-geventhttpclient")
1905 (version "1.3.1")
1906 (source (origin
1907 (method url-fetch)
1908 (uri (pypi-uri "geventhttpclient" version))
1909 (sha256
1910 (base32
1911 "07d0q3wzmml75227r6y6mrl5a0zpf4v9gj0ni5rhbyzmaj4az1xx"))
1912 (modules '((guix build utils)))
1913 (snippet
1914 '(begin
1915 ;; Delete pre-compiled files.
1916 (for-each delete-file (find-files "src/geventhttpclient"
1917 ".*\\.pyc"))
1918 #t))))
1919 (build-system python-build-system)
1920 (arguments
1921 '(#:phases
1922 (modify-phases %standard-phases
1923 (add-after 'unpack 'delete-network-tests
1924 (lambda _
1925 (delete-file "src/geventhttpclient/tests/test_client.py")
1926 #t))
1927 (delete 'check)
1928 (add-after 'install 'check
1929 (lambda* (#:key inputs outputs #:allow-other-keys)
1930 (add-installed-pythonpath inputs outputs)
1931 (invoke "py.test" "src/geventhttpclient/tests" "-v"
1932 ;; Append the test modules to sys.path to avoid
1933 ;; namespace conflict which breaks SSL tests.
1934 "--import-mode=append")
1935 #t)))))
1936 (native-inputs
1937 `(("python-pytest" ,python-pytest)))
1938 (propagated-inputs
1939 `(("python-certifi" ,python-certifi)
1940 ("python-gevent" ,python-gevent)
1941 ("python-six" ,python-six)))
1942 (home-page "https://github.com/gwik/geventhttpclient")
1943 (synopsis "HTTP client library for gevent")
1944 (description "@code{python-geventhttpclient} is a high performance,
1945 concurrent HTTP client library for python using @code{gevent}.")
1946 (license license:expat)))
1947
1948 (define-public python2-geventhttpclient
1949 (package-with-python2 python-geventhttpclient))
1950
1951 (define-public python-requests-oauthlib
1952 (package
1953 (name "python-requests-oauthlib")
1954 (version "1.2.0")
1955 (source
1956 (origin
1957 (method url-fetch)
1958 (uri (pypi-uri "requests-oauthlib" version))
1959 (sha256
1960 (base32
1961 "0mrglgcvq7k48pf27s4gifdk0za8xmgpf55jy15yjj471qrk6rdx"))))
1962 (build-system python-build-system)
1963 (arguments
1964 `(#:phases
1965 (modify-phases %standard-phases
1966 ;; removes tests that require network access
1967 (add-before 'check 'pre-check
1968 (lambda _
1969 (delete-file "tests/test_core.py")
1970 #t)))))
1971 (native-inputs
1972 `(("python-pyjwt" ,python-pyjwt)
1973 ("python-requests-mock" ,python-requests-mock)
1974 ("python-mock" ,python-mock)))
1975 (propagated-inputs
1976 `(("python-oauthlib" ,python-oauthlib)
1977 ("python-requests" ,python-requests)))
1978 (home-page
1979 "https://github.com/requests/requests-oauthlib")
1980 (synopsis
1981 "OAuthlib authentication support for Requests")
1982 (description
1983 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
1984 provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
1985 (license license:isc)))
1986
1987 (define-public python2-requests-oauthlib
1988 (package-with-python2 python-requests-oauthlib))
1989
1990 (define-public python-url
1991 (package
1992 (name "python-url")
1993 (version "0.2.0")
1994 (source (origin
1995 (method url-fetch)
1996 (uri (pypi-uri "url" version))
1997 (sha256
1998 (base32
1999 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
2000 (build-system python-build-system)
2001 (propagated-inputs
2002 `(("python-publicsuffix" ,python-publicsuffix)))
2003 (native-inputs
2004 `(("python-coverage" ,python-coverage)
2005 ("python-nose" ,python-nose)))
2006 (arguments
2007 `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
2008 (home-page "https://github.com/seomoz/url-py")
2009 (synopsis "URL Parsing")
2010 (description "Library for parsing urls.")
2011 (license license:expat)
2012 (properties `((python2-variant . ,(delay python2-url))))))
2013
2014 (define-public python2-url
2015 (let ((base (package-with-python2 (strip-python2-variant python-url))))
2016 (package (inherit base)
2017 (propagated-inputs
2018 `(("python2-publicsuffix" ,python2-publicsuffix))))))
2019
2020 (define-public python-cachecontrol
2021 (package
2022 (name "python-cachecontrol")
2023 (version "0.12.5")
2024 (source
2025 (origin
2026 (method git-fetch)
2027 ;; Pypi does not have tests.
2028 (uri (git-reference
2029 (url "https://github.com/ionrock/cachecontrol")
2030 (commit (string-append "v" version))))
2031 (file-name (git-file-name name version))
2032 (sha256
2033 (base32
2034 "03lgc65sl04n0cgzmmgg99bk83f9i6k8yrmcd4hpl46q1pymn0kz"))))
2035 (build-system python-build-system)
2036 (arguments
2037 ;; Versions > 0.11.6 depend on CherryPy for testing.
2038 ;; It's too much work to package CherryPy for now.
2039 `(#:tests? #f))
2040 (propagated-inputs
2041 `(("python-requests" ,python-requests)
2042 ("python-lockfile" ,python-lockfile)))
2043 (home-page "https://github.com/ionrock/cachecontrol")
2044 (synopsis "The httplib2 caching algorithms for use with requests")
2045 (description "CacheControl is a port of the caching algorithms in
2046 @code{httplib2} for use with @code{requests} session objects.")
2047 (license license:asl2.0)))
2048
2049 (define-public python2-cachecontrol
2050 (package-with-python2 python-cachecontrol))
2051
2052 (define-public python-betamax
2053 (package
2054 (name "python-betamax")
2055 (version "0.8.1")
2056 (source
2057 (origin
2058 (method url-fetch)
2059 (uri (pypi-uri "betamax" version))
2060 (sha256
2061 (base32
2062 "1hki1c2vs7adq7zr56wi6i5bhrkia4s2ywpv2c98ibnczz709w2v"))))
2063 (build-system python-build-system)
2064 (arguments
2065 '(;; Many tests fail because they require networking.
2066 #:tests? #f))
2067 (propagated-inputs
2068 `(("python-requests" ,python-requests)))
2069 (home-page "https://github.com/sigmavirus24/betamax")
2070 (synopsis "Record HTTP interactions with python-requests")
2071 (description "Betamax will record your test suite's HTTP interactions and
2072 replay them during future tests. It is designed to work with python-requests.")
2073 (license license:expat)))
2074
2075 (define-public python2-betamax
2076 (package-with-python2 python-betamax))
2077
2078 (define-public python-betamax-matchers
2079 (package
2080 (name "python-betamax-matchers")
2081 (version "0.4.0")
2082 (source
2083 (origin
2084 (method url-fetch)
2085 (uri (pypi-uri "betamax-matchers" version))
2086 (sha256
2087 (base32
2088 "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
2089 (build-system python-build-system)
2090 (propagated-inputs
2091 `(("python-betamax" ,python-betamax)
2092 ("python-requests-toolbelt" ,python-requests-toolbelt)))
2093 (home-page "https://github.com/sigmavirus24/betamax_matchers")
2094 (synopsis "VCR imitation for python-requests")
2095 (description "@code{betamax-matchers} provides a set of Matchers for
2096 Betamax.")
2097 (license license:asl2.0)))
2098
2099 (define-public python2-betamax-matchers
2100 (package-with-python2 python-betamax-matchers))
2101
2102 (define-public python-s3transfer
2103 (package
2104 (name "python-s3transfer")
2105 (version "0.2.0")
2106 (source (origin
2107 (method url-fetch)
2108 (uri (pypi-uri "s3transfer" version))
2109 (sha256
2110 (base32
2111 "08fhj73b1ai52hrs2q3nggshq3pswn1gq8ch3m009cb2v2vmqggj"))))
2112 (build-system python-build-system)
2113 (arguments
2114 `(#:phases
2115 (modify-phases %standard-phases
2116 (replace 'check
2117 (lambda _
2118 ;; Some of the 'integration' tests require network access or
2119 ;; login credentials.
2120 (invoke "nosetests" "--exclude=integration")
2121 #t)))))
2122 (native-inputs
2123 `(("python-docutils" ,python-docutils)
2124 ("python-mock" ,python-mock)
2125 ("python-nose" ,python-nose)))
2126 (propagated-inputs
2127 `(("python-botocore" ,python-botocore)
2128 ("python-urllib3" ,python-urllib3)))
2129 (synopsis "Amazon S3 Transfer Manager")
2130 (description "S3transfer is a Python library for managing Amazon S3
2131 transfers.")
2132 (home-page "https://github.com/boto/s3transfer")
2133 (license license:asl2.0)
2134 (properties `((python2-variant . ,(delay python2-s3transfer))))))
2135
2136 (define-public python2-s3transfer
2137 (let ((base (package-with-python2 (strip-python2-variant python-s3transfer))))
2138 (package
2139 (inherit base)
2140 (native-inputs
2141 `(("python2-futures" ,python2-futures)
2142 ,@(package-native-inputs base))))))
2143
2144 (define-public python-slimit
2145 (package
2146 (name "python-slimit")
2147 (version "0.8.1")
2148 (source
2149 (origin
2150 (method url-fetch)
2151 (uri (pypi-uri "slimit" version ".zip"))
2152 (sha256
2153 (base32
2154 "02vj2x728rs1127q2nc27frrqra4fczivnb7gch6n5lzi7pxqczl"))))
2155 (build-system python-build-system)
2156 (native-inputs
2157 `(("unzip" ,unzip)))
2158 (propagated-inputs
2159 `(("python-ply" ,python-ply)))
2160 (home-page "https://slimit.readthedocs.io/")
2161 (synopsis "JavaScript minifier, parser and lexer written in Python")
2162 (description
2163 "SlimIt is a JavaScript minifier written in Python. It compiles
2164 JavaScript into more compact code so that it downloads and runs faster.
2165 SlimIt also provides a library that includes a JavaScript parser, lexer,
2166 pretty printer and a tree visitor.")
2167 (license license:expat)))
2168
2169 (define-public python-flask-restful
2170 (package
2171 (name "python-flask-restful")
2172 (version "0.3.8")
2173 (source
2174 (origin
2175 (method url-fetch)
2176 (uri (pypi-uri "Flask-RESTful" version))
2177 (patches (search-patches "python-flask-restful-werkzeug-compat.patch"))
2178 (sha256
2179 (base32
2180 "05b9lzx5yc3wgml2bcq50lq35h66m8zpj6dc9advcb5z3acsbaay"))))
2181 (build-system python-build-system)
2182 (propagated-inputs
2183 `(("python-aniso8601" ,python-aniso8601)
2184 ("python-flask" ,python-flask)
2185 ("python-pycrypto" ,python-pycrypto)
2186 ("python-pytz" ,python-pytz)))
2187 (native-inputs
2188 `(;; Optional dependency of Flask. Tests need it.
2189 ("python-blinker" ,python-blinker)
2190 ("python-mock" ,python-mock) ; For tests
2191 ("python-nose" ,python-nose))) ;for tests
2192 (home-page
2193 "https://www.github.com/flask-restful/flask-restful/")
2194 (synopsis
2195 "Flask module for creating REST APIs")
2196 (description
2197 "This package contains a Flask module for creating REST APIs.")
2198 (license license:bsd-3)))
2199
2200 (define-public python-flask-basicauth
2201 (package
2202 (name "python-flask-basicauth")
2203 (version "0.2.0")
2204 (source
2205 (origin
2206 (method url-fetch)
2207 (uri (pypi-uri "Flask-BasicAuth" version))
2208 (sha256
2209 (base32
2210 "1zq1spkjr4sjdnalpp8wl242kdqyk6fhbnhr8hi4r4f0km4bspnz"))))
2211 (build-system python-build-system)
2212 (propagated-inputs
2213 `(("python-flask" ,python-flask)))
2214 (home-page
2215 "https://github.com/jpvanhal/flask-basicauth")
2216 (synopsis
2217 "HTTP basic access authentication for Flask")
2218 (description
2219 "This package provides HTTP basic access authentication for Flask.")
2220 (license license:bsd-3)))
2221
2222 (define-public python-flask-htpasswd
2223 (package
2224 (name "python-flask-htpasswd")
2225 (version "0.3.1")
2226 (source
2227 (origin
2228 (method url-fetch)
2229 (uri (pypi-uri "flask-htpasswd" version))
2230 (sha256
2231 (base32
2232 "14q1y1y9i9bhabdnwd25jqzc4ljli23smxfyyh8abxz1vq93pxra"))))
2233 (build-system python-build-system)
2234 (propagated-inputs
2235 `(("python-flask" ,python-flask)
2236 ("python-itsdangerous" ,python-itsdangerous)
2237 ("python-passlib" ,python-passlib)
2238 ("python-tox" ,python-tox)))
2239 (home-page "http://github.com/carsongee/flask-htpasswd")
2240 (synopsis "Basic authentication via htpasswd files in Flask applications")
2241 (description "This package provides Basic authentication via
2242 @file{htpasswd} files and access_token authentication in Flask
2243 applications.")
2244 (license license:bsd-3)))
2245
2246 (define-public python-flask-sqlalchemy
2247 (package
2248 (name "python-flask-sqlalchemy")
2249 (version "2.4.0")
2250 (source (origin
2251 (method url-fetch)
2252 (uri (pypi-uri "Flask-SQLAlchemy" version))
2253 (sha256
2254 (base32
2255 "0nnllf0ddbh9jlhngnyjj98lbxgxr1csaplllx0caw98syq0k5hc"))))
2256 (build-system python-build-system)
2257 (propagated-inputs
2258 `(("python-flask" ,python-flask)
2259 ("python-sqlalchemy" ,python-sqlalchemy)))
2260 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
2261 (synopsis "Module adding SQLAlchemy support to your Flask application")
2262 (description
2263 "This package adds SQLAlchemy support to your Flask application.")
2264 (license license:bsd-3)))
2265
2266 (define-public python-flask-restplus
2267 (package
2268 (name "python-flask-restplus")
2269 (version "0.9.2")
2270 (source
2271 (origin
2272 (method url-fetch)
2273 (uri (pypi-uri "flask-restplus" version))
2274 (sha256
2275 (base32
2276 "11his6ii5brpkhld0d5bwzjjw4q3vmplpd6fmgzjrvvklsbk0cf4"))))
2277 (build-system python-build-system)
2278 (arguments
2279 '(#:tests? #f)) ; FIXME: 35/882 tests failing.
2280 ;; #:phases
2281 ;; (modify-phases %standard-phases
2282 ;; (replace 'check
2283 ;; (lambda _
2284 ;; (invoke "nosetests")
2285 ;; #t)))))
2286 (propagated-inputs
2287 `(("python-aniso8601" ,python-aniso8601)
2288 ("python-flask" ,python-flask)
2289 ("python-jsonschema" ,python-jsonschema)
2290 ("python-pytz" ,python-pytz)
2291 ("python-six" ,python-six)))
2292 (native-inputs
2293 `(("python-tzlocal" ,python-tzlocal)
2294 ("python-blinker" ,python-blinker)
2295 ("python-nose" ,python-nose)
2296 ("python-rednose" ,python-rednose)))
2297 (home-page "https://github.com/noirbizarre/flask-restplus")
2298 (synopsis "Framework for documented API development with Flask")
2299 (description "This package provides a framework for API development with
2300 the Flask web framework in Python. It is similar to package
2301 @code{python-flask-restful} but supports the @code{python-swagger}
2302 documentation builder.")
2303 (license license:expat)))
2304
2305 (define-public python-flask-restful-swagger
2306 (package
2307 (name "python-flask-restful-swagger")
2308 (version "0.20.1")
2309 (source
2310 (origin
2311 (method url-fetch)
2312 (uri (pypi-uri "flask-restful-swagger" version))
2313 (sha256
2314 (base32
2315 "1p66f98b5zpypnnz56pxpbirchqj6aniw6qyrp8h572l0dn9xlvq"))))
2316 (build-system python-build-system)
2317 (arguments '(#:tests? #f)) ;no tests
2318 (propagated-inputs
2319 `(("python-flask-restful" ,python-flask-restful)))
2320 (home-page "https://github.com/rantav/flask-restful-swagger")
2321 (synopsis "Extract Swagger specs from Flask-Restful projects")
2322 (description "This package lets you extract Swagger API documentation
2323 specs from your Flask-Restful projects.")
2324 (license license:expat)))
2325
2326 (define-public python2-flask-restful-swagger
2327 (package-with-python2 python-flask-restful-swagger))
2328
2329 (define-public python-htmlmin
2330 (package
2331 (name "python-htmlmin")
2332 (version "0.1.12")
2333 (source
2334 (origin
2335 (method url-fetch)
2336 (uri (pypi-uri "htmlmin" version))
2337 (sha256
2338 (base32
2339 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
2340 (arguments
2341 `(#:tests? #f)) ; no tests
2342 (build-system python-build-system)
2343 (home-page "https://htmlmin.readthedocs.org/en/latest/")
2344 (synopsis "HTML minifier")
2345 (description "@code{htmlmin} is an HTML minifier that just works.
2346 It comes with safe defaults and easily configurable options.")
2347 (license license:bsd-3)))
2348
2349 (define-public python2-htmlmin
2350 (package-with-python2 python-htmlmin))
2351
2352 (define-public python-flask-htmlmin
2353 (package
2354 (name "python-flask-htmlmin")
2355 (version "1.2")
2356 (source
2357 (origin
2358 (method url-fetch)
2359 (uri (pypi-uri "Flask-HTMLmin" version))
2360 (sha256
2361 (base32
2362 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
2363 (propagated-inputs
2364 `(("python-flask" ,python-flask)
2365 ("python-htmlmin" ,python-htmlmin)))
2366 (build-system python-build-system)
2367 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
2368 (synopsis "HTML response minifier for Flask")
2369 (description
2370 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
2371 (license license:bsd-3)))
2372
2373 (define-public python2-flask-htmlmin
2374 (package-with-python2 python-flask-htmlmin))
2375
2376 (define-public python-jsmin
2377 (package
2378 (name "python-jsmin")
2379 (version "2.2.2")
2380 (source
2381 (origin
2382 (method url-fetch)
2383 (uri (pypi-uri "jsmin" version))
2384 (sha256
2385 (base32
2386 "0fsmqbjvpxvff0984x7c0y8xmf49ax9mncz48b9xjx8wrnr9kpxn"))))
2387 (build-system python-build-system)
2388 (home-page "https://github.com/tikitu/jsmin/")
2389 (synopsis "Python JavaScript minifier")
2390 (description
2391 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
2392 on the command line.")
2393 (license license:expat)))
2394
2395 (define-public python-flask-login
2396 (package
2397 (name "python-flask-login")
2398 (version "0.5.0")
2399 (source
2400 (origin
2401 (method git-fetch)
2402 (uri (git-reference
2403 (url "https://github.com/maxcountryman/flask-login.git")
2404 (commit version)))
2405 (file-name (git-file-name name version))
2406 (sha256
2407 (base32 "11ac924w0y4m0kf3mxnxdlidy88jfa7njw5yyrq16dvnx4iwd8gg"))))
2408 (build-system python-build-system)
2409 (propagated-inputs
2410 `(("python-flask" ,python-flask)))
2411 (native-inputs
2412 ;; For tests.
2413 `(("python-blinker" ,python-blinker)
2414 ("python-coverage" ,python-coverage)
2415 ("python-mock" ,python-mock)
2416 ("python-pycodestyle" ,python-pycodestyle)
2417 ("python-pyflakes" ,python-pyflakes)
2418 ("python-pytest" ,python-pytest)
2419 ("python-semantic-version" ,python-semantic-version)
2420 ("python-werkzeug" ,python-werkzeug)))
2421 (home-page "https://github.com/maxcountryman/flask-login")
2422 (synopsis "User session management for Flask")
2423 (description
2424 "@code{Flask-Login} provides user session management for Flask. It
2425 handles the common tasks of logging in, logging out, and remembering your
2426 users' sessions over extended periods of time.")
2427 (license license:expat)))
2428
2429 (define-public python2-flask-login
2430 (package-with-python2 python-flask-login))
2431
2432 (define-public python-oauth2client
2433 (package
2434 (name "python-oauth2client")
2435 (version "4.0.0")
2436 (source
2437 (origin
2438 (method url-fetch)
2439 (uri (pypi-uri "oauth2client" version))
2440 (sha256
2441 (base32
2442 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
2443 (build-system python-build-system)
2444 (arguments
2445 `(#:tests? #f))
2446 (propagated-inputs
2447 `(("python-httplib2" ,python-httplib2)
2448 ("python-pyasn1" ,python-pyasn1)
2449 ("python-pyasn1-modules" ,python-pyasn1-modules)
2450 ("python-rsa" ,python-rsa)
2451 ("python-six" ,python-six)))
2452 (home-page "https://github.com/google/oauth2client/")
2453 (synopsis "OAuth 2.0 client library")
2454 (description "@code{python-oauth2client} provides an OAuth 2.0 client
2455 library for Python")
2456 (license license:asl2.0)))
2457
2458 (define-public python2-oauth2client
2459 (package-with-python2 python-oauth2client))
2460
2461 (define-public python-flask-oidc
2462 (package
2463 (name "python-flask-oidc")
2464 (version "1.1.1")
2465 (source
2466 (origin
2467 (method url-fetch)
2468 (uri (pypi-uri "flask-oidc" version))
2469 (sha256
2470 (base32
2471 "1ay5j0mf174bix7i67hclr95gv16z81fpx0dijvi0gydvdj3ddy2"))))
2472 (build-system python-build-system)
2473 (propagated-inputs
2474 `(("python-flask" ,python-flask)
2475 ("python-itsdangerous" ,python-itsdangerous)
2476 ("python-oauth2client" ,python-oauth2client)
2477 ("python-six" ,python-six)))
2478 (native-inputs
2479 `(("python-nose" ,python-nose)
2480 ("python-mock" ,python-mock)))
2481 (home-page "https://github.com/puiterwijk/flask-oidc")
2482 (synopsis "OpenID Connect extension for Flask")
2483 (description "@code{python-flask-oidc} provides an OpenID Connect extension
2484 for Flask.")
2485 (license license:bsd-2)))
2486
2487 (define-public python-webassets
2488 (package
2489 (name "python-webassets")
2490 (version "0.12.1")
2491 (source
2492 (origin
2493 (method url-fetch)
2494 (uri (pypi-uri "webassets" version))
2495 (sha256
2496 (base32
2497 "1nrqkpb7z46h2b77xafxihqv3322cwqv6293ngaky4j3ff4cing7"))))
2498 (build-system python-build-system)
2499 (native-inputs
2500 `(("python-jinja2" ,python-jinja2)
2501 ("python-mock" ,python-mock)
2502 ("python-nose" ,python-nose)
2503 ("python-pytest" ,python-pytest)))
2504 (home-page "https://github.com/miracle2k/webassets")
2505 (synopsis "Media asset management")
2506 (description "Merges, minifies and compresses Javascript and CSS files,
2507 supporting a variety of different filters, including YUI, jsmin, jspacker or
2508 CSS tidy. Also supports URL rewriting in CSS files.")
2509 (license license:bsd-2)))
2510
2511 (define-public python-cssmin
2512 (package
2513 (name "python-cssmin")
2514 (version "0.2.0")
2515 (source
2516 (origin
2517 (method url-fetch)
2518 (uri (pypi-uri "cssmin" version))
2519 (sha256
2520 (base32
2521 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
2522 (build-system python-build-system)
2523 (home-page "https://github.com/zacharyvoase/cssmin")
2524 (synopsis "Python port of the YUI CSS Compressor")
2525 (description "Python port of the YUI CSS Compressor.")
2526 (license (list license:expat license:bsd-3))))
2527
2528 (define-public python2-cssmin
2529 (package-with-python2 python-cssmin))
2530
2531 (define-public python-elasticsearch
2532 (package
2533 (name "python-elasticsearch")
2534 (version "7.1.0")
2535 (source
2536 (origin
2537 (method url-fetch)
2538 (uri (pypi-uri "elasticsearch" version))
2539 (sha256
2540 (base32
2541 "0rnjvlhw4v3vg14l519qliy1s1zpmx3827q0xfviwvk42rr7hh01"))))
2542 (build-system python-build-system)
2543 (native-inputs
2544 `(("python-mock" ,python-mock)
2545 ("python-nosexcover" ,python-nosexcover)
2546 ("python-pyaml" ,python-pyaml)
2547 ("python-requests" ,python-requests)))
2548 (propagated-inputs
2549 `(("urllib3" ,python-urllib3)))
2550 (arguments
2551 ;; tests require the test_elasticsearch module but it is not distributed.
2552 `(#:tests? #f))
2553 (home-page "https://github.com/elastic/elasticsearch-py")
2554 (synopsis "Low-level client for Elasticsearch")
2555 (description "Official low-level client for Elasticsearch. Its goal is to
2556 provide common ground for all Elasticsearch-related code in Python; because of
2557 this it tries to be opinion-free and very extendable.")
2558 (license license:expat)))
2559
2560 (define-public python2-elasticsearch
2561 (package-with-python2 python-elasticsearch))
2562
2563 (define-public python-flask-script
2564 (package
2565 (name "python-flask-script")
2566 (version "2.0.6")
2567 (source
2568 (origin
2569 (method url-fetch)
2570 (uri (pypi-uri "Flask-Script" version))
2571 (sha256
2572 (base32
2573 "0r8w2v89nj6b9p91p495cga5m72a673l2wc0hp0zqk05j4yrc9b4"))))
2574 (build-system python-build-system)
2575 (arguments
2576 `(#:phases
2577 (modify-phases %standard-phases
2578 (add-after 'unpack 'patch-tests
2579 (lambda _
2580 (substitute* "tests.py"
2581 (("flask\\.ext\\.script") "flask_script"))
2582 #t)))))
2583 (propagated-inputs
2584 `(("python-flask" ,python-flask)
2585 ("python-argcomplete" ,python-argcomplete)
2586 ("python-werkzeug" ,python-werkzeug)))
2587 (native-inputs
2588 `(("python-pytest" ,python-pytest)))
2589 (home-page
2590 "https://github.com/smurfix/flask-script")
2591 (synopsis "Scripting support for Flask")
2592 (description "The Flask-Script extension provides support for writing
2593 external scripts in Flask. This includes running a development server,
2594 a customised Python shell, scripts to set up your database, cronjobs,
2595 and other command-line tasks that belong outside the web application
2596 itself.")
2597 (license license:bsd-3)))
2598
2599 (define-public python2-flask-script
2600 (package-with-python2 python-flask-script))
2601
2602 (define-public python-flask-migrate
2603 (package
2604 (name "python-flask-migrate")
2605 (version "2.5.3")
2606 (source
2607 (origin
2608 (method url-fetch)
2609 (uri (pypi-uri "Flask-Migrate" version))
2610 (sha256
2611 (base32
2612 "1vip9ww6l18dxffjsggm83k71zkvihxpnhaswpv8klh95s6517d6"))))
2613 (build-system python-build-system)
2614 (propagated-inputs
2615 `(("python-flask" ,python-flask)
2616 ("python-alembic" ,python-alembic)
2617 ("python-sqlalchemy" ,python-sqlalchemy)
2618 ("python-flask-script" ,python-flask-script)
2619 ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)))
2620 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
2621 (synopsis "SQLAlchemy database migrations for Flask programs using
2622 Alembic")
2623 (description "This package contains SQLAlchemy database migration tools
2624 for Flask programs that are using @code{python-alembic}.")
2625 (license license:expat)))
2626
2627 (define-public python-genshi
2628 (package
2629 (name "python-genshi")
2630 (version "0.7.2")
2631 (source
2632 (origin
2633 (method git-fetch)
2634 (uri (git-reference
2635 (url "https://github.com/edgewall/genshi.git")
2636 (commit version)))
2637 (file-name (git-file-name name version))
2638 (sha256
2639 (base32 "06rch30x10l105k5b6rahd839lkhmgrzn6691wbci0cb2fzps32w"))))
2640 (build-system python-build-system)
2641 (home-page "https://genshi.edgewall.org/")
2642 (synopsis "Toolkit for generation of output for the web")
2643 (description "Genshi is a Python library that provides an integrated set
2644 of components for parsing, generating, and processing HTML, XML or other
2645 textual content for output generation on the web.")
2646 (license license:bsd-3)))
2647
2648 (define-public python2-genshi
2649 (package-with-python2 python-genshi))
2650
2651 (define-public python-flask-principal
2652 (package
2653 (name "python-flask-principal")
2654 (version "0.4.0")
2655 (source
2656 (origin
2657 (method url-fetch)
2658 (uri (pypi-uri "Flask-Principal" version))
2659 (sha256
2660 (base32
2661 "0lwlr5smz8vfm5h9a9i7da3q1c24xqc6vm9jdywdpgxfbi5i7mpm"))))
2662 (build-system python-build-system)
2663 (propagated-inputs
2664 `(("python-blinker" ,python-blinker)))
2665 (native-inputs
2666 `(("python-flask" ,python-flask)
2667 ("python-nose" ,python-nose)))
2668 (home-page "https://pythonhosted.org/Flask-Principal/")
2669 (synopsis "Identity management for Flask")
2670 (description "@code{flask_principal} is a identity management library for
2671 Flask. It supports managing both authentication and authorization data in a
2672 thread-local variable.")
2673 (license license:expat)))
2674
2675 (define-public python2-flask-principal
2676 (package-with-python2 python-flask-principal))
2677
2678 (define-public python-flask-httpauth
2679 (package
2680 (name "python-flask-httpauth")
2681 (version "3.2.3")
2682 (source
2683 (origin
2684 (method url-fetch)
2685 (uri (pypi-uri "Flask-HTTPAuth" version))
2686 (sha256
2687 (base32
2688 "13gff5w1mqpzm5nccyg02v3ifb9ifqh5k866cssjhghhg6msfjsz"))))
2689 (build-system python-build-system)
2690 (native-inputs
2691 `(("python-flask" ,python-flask)))
2692 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
2693 (synopsis "Basic and Digest HTTP authentication for Flask routes")
2694 (description "@code{flask_httpauth} provides Basic and Digest HTTP
2695 authentication for Flask routes.")
2696 (license license:expat)))
2697
2698 (define-public python2-flask-httpauth
2699 (package-with-python2 python-flask-httpauth))
2700
2701 (define-public python-uritemplate
2702 (package
2703 (name "python-uritemplate")
2704 (version "3.0.0")
2705 (source
2706 (origin
2707 (method url-fetch)
2708 (uri (pypi-uri "uritemplate" version))
2709 (sha256
2710 (base32
2711 "0781gm9g34wa0asc19dx81ng0nqq07igzv3bbvdqmz13pv7469n0"))))
2712 (build-system python-build-system)
2713 (home-page "https://uritemplate.readthedocs.org")
2714 (synopsis "Library to deal with URI Templates")
2715 (description "@code{uritemplate} provides Python library to deal with URI
2716 Templates.")
2717 (license license:bsd-2)))
2718
2719 (define-public python2-uritemplate
2720 (package-with-python2 python-uritemplate))
2721
2722 (define-public python-publicsuffix
2723 (package
2724 (name "python-publicsuffix")
2725 (version "1.1.0")
2726 (source (origin
2727 (method url-fetch)
2728 (uri (pypi-uri "publicsuffix" version))
2729 (sha256
2730 (base32
2731 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
2732 (build-system python-build-system)
2733 (arguments
2734 `(#:tests? #f)) ; tests use the internet
2735 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
2736 (synopsis "Get suffix for a domain name")
2737 (description "Get a public suffix for a domain name using the Public Suffix
2738 List.")
2739 (license license:expat)))
2740
2741 (define-public python2-publicsuffix
2742 (package-with-python2 python-publicsuffix))
2743
2744 (define-public python-publicsuffix2
2745 (package
2746 (name "python-publicsuffix2")
2747 (version "2.20191221")
2748 (source
2749 (origin
2750 (method url-fetch)
2751 (uri (pypi-uri "publicsuffix2" version))
2752 (sha256
2753 (base32 "0yzysvfj1najr1mb4pcqrbmjir3xpb69rlffln95a3cdm8qwry00"))))
2754 (build-system python-build-system)
2755 (arguments
2756 '(#:phases
2757 (modify-phases %standard-phases
2758 (add-after 'unpack 'ignore-maintainer-inputs
2759 (lambda _
2760 ;; Comment out a demand for python-requests, which is used only by
2761 ;; the unused ‘update_psl’ helper command.
2762 (substitute* "setup.py"
2763 (("'requests " match)
2764 (format "# ~a" match)))
2765 #t)))
2766 #:tests? #f)) ; the test suite requires network access
2767 (home-page "https://github.com/pombredanne/python-publicsuffix2")
2768 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
2769 (description "Get a public suffix for a domain name using the Public Suffix
2770 List. Forked from and using the same API as the publicsuffix package.")
2771 (license (list license:expat license:mpl2.0))))
2772
2773 (define-public python2-publicsuffix2
2774 (package-with-python2 python-publicsuffix2))
2775
2776 (define-public python-werkzeug
2777 (package
2778 (name "python-werkzeug")
2779 (version "1.0.0")
2780 (source
2781 (origin
2782 (method url-fetch)
2783 (uri (pypi-uri "Werkzeug" version))
2784 (sha256
2785 (base32
2786 "15kh0z61klp62mrc1prka13xsshxn0rsp1j1s2964iw86yisi6qn"))))
2787 (build-system python-build-system)
2788 (arguments
2789 '(#:phases
2790 (modify-phases %standard-phases
2791 (delete 'check)
2792 (add-after 'install 'check
2793 (lambda* (#:key inputs outputs #:allow-other-keys)
2794 (add-installed-pythonpath inputs outputs)
2795 (invoke "python" "-m" "pytest"))))))
2796 (propagated-inputs
2797 `(("python-requests" ,python-requests)))
2798 (native-inputs
2799 `(("python-pytest" ,python-pytest)
2800 ("python-pytest-timeout" ,python-pytest-timeout)))
2801 (home-page "https://www.palletsprojects.org/p/werkzeug/")
2802 (synopsis "Utilities for WSGI applications")
2803 (description "One of the most advanced WSGI utility modules. It includes a
2804 powerful debugger, full-featured request and response objects, HTTP utilities to
2805 handle entity tags, cache control headers, HTTP dates, cookie handling, file
2806 uploads, a powerful URL routing system and a bunch of community-contributed
2807 addon modules.")
2808 (license license:x11)))
2809
2810 (define-public python2-werkzeug
2811 (package-with-python2 python-werkzeug))
2812
2813 (define-public python-bottle
2814 (package
2815 (name "python-bottle")
2816 (version "0.12.13")
2817 (source
2818 (origin
2819 (method url-fetch)
2820 (uri (pypi-uri "bottle" version))
2821 (sha256
2822 (base32
2823 "0m9k2a7yxvggc4kw8fsvj381vgsvfcdshg5nzy6vwrxiw2p53drr"))))
2824 (build-system python-build-system)
2825 (home-page "http://bottlepy.org/")
2826 (synopsis "WSGI framework for small web-applications.")
2827 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
2828 (license license:expat)))
2829
2830 (define-public python2-bottle
2831 (package-with-python2 python-bottle))
2832
2833 (define-public python-wtforms
2834 (package
2835 (name "python-wtforms")
2836 (version "2.1")
2837 (source
2838 (origin
2839 (method url-fetch)
2840 (uri (pypi-uri "WTForms" version ".zip"))
2841 (sha256
2842 (base32
2843 "0vyl26y9cg409cfyj8rhqxazsdnd0jipgjw06civhrd53yyi1pzz"))))
2844 (build-system python-build-system)
2845 (arguments
2846 '(#:phases
2847 (modify-phases %standard-phases
2848 (add-after 'unpack 'remove-django-test
2849 ;; Don't fail the tests when the inputs for the optional tests cannot be found.
2850 (lambda _
2851 (substitute*
2852 "tests/runtests.py"
2853 (("'ext_django.tests', 'ext_sqlalchemy', 'ext_dateutil', 'locale_babel'") "")
2854 (("sys.stderr.write(\"### Disabled test '%s', dependency not found\n\" % name)") ""))
2855 #t)))))
2856 (native-inputs
2857 `(("unzip" ,unzip)))
2858 (home-page "http://wtforms.simplecodes.com/")
2859 (synopsis
2860 "Form validation and rendering library for Python web development")
2861 (description
2862 "WTForms is a flexible forms validation and rendering library
2863 for Python web development. It is very similar to the web form API
2864 available in Django, but is a standalone package.")
2865 (license license:bsd-3)))
2866
2867 (define-public python2-wtforms
2868 (package-with-python2 python-wtforms))
2869
2870 (define-public python-paste
2871 (package
2872 (name "python-paste")
2873 (version "3.0.6")
2874 (source
2875 (origin
2876 (method url-fetch)
2877 (uri (pypi-uri "Paste" version))
2878 (sha256
2879 (base32
2880 "14lbi9asn5agsdf7r97prkjpz7amgmp529lbvfhf0nv881xczah6"))
2881 (patches (search-patches "python-paste-remove-timing-test.patch"))
2882 (modules '((guix build utils)))
2883 (snippet
2884 '(begin
2885 ;; This test calls out to the internet.
2886 (delete-file "tests/test_proxy.py") #t))))
2887 (build-system python-build-system)
2888 (native-inputs
2889 `(("python-pytest" ,python-pytest)
2890 ("python-pytest-runner" ,python-pytest-runner)
2891 ("python-nose" ,python-nose)))
2892 (propagated-inputs
2893 `(("python-six" ,python-six)))
2894 (home-page "https://pythonpaste.readthedocs.io/")
2895 (synopsis
2896 "Python web development tools, focusing on WSGI")
2897 (description
2898 "Paste provides a variety of web development tools and middleware which
2899 can be nested together to build web applications. Paste's design closely
2900 follows ideas flowing from WSGI (Web Standard Gateway Interface).")
2901 (license license:expat)))
2902
2903 (define-public python2-paste
2904 (package-with-python2 python-paste))
2905
2906 (define-public python-pastescript
2907 (package
2908 (name "python-pastescript")
2909 (version "2.0.2")
2910 (source
2911 (origin
2912 (method url-fetch)
2913 (uri (pypi-uri "PasteScript" version))
2914 (sha256
2915 (base32
2916 "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"))))
2917 (build-system python-build-system)
2918 (native-inputs
2919 `(("python-nose" ,python-nose)))
2920 (propagated-inputs
2921 `(("python-paste" ,python-paste)
2922 ("python-pastedeploy" ,python-pastedeploy)))
2923 (home-page (string-append "https://web.archive.org/web/20161025192515/"
2924 "http://pythonpaste.org/script/"))
2925 (arguments
2926 '(;; Unfortunately, this requires the latest unittest2,
2927 ;; but that requires traceback2 which requires linecache2 which requires
2928 ;; unittest2. So we're skipping tests for now.
2929 ;; (Note: Apparently linetest2 only needs unittest2 for its tests,
2930 ;; so in theory we could get around this situation somehow.)
2931 #:tests? #f))
2932 (synopsis
2933 "Pluggable command line tool for serving web applications and more")
2934 (description
2935 "PasteScript is a plugin-friendly command line tool which provides a
2936 variety of features, from launching web applications to bootstrapping project
2937 layouts.")
2938 (license license:expat)))
2939
2940 (define-public python2-pastescript
2941 (package-with-python2 python-pastescript))
2942
2943 (define-public python2-urlgrabber
2944 (package
2945 (name "python2-urlgrabber")
2946 (version "3.10.2")
2947 (source
2948 (origin
2949 (method url-fetch)
2950 (uri (pypi-uri "urlgrabber" version))
2951 (sha256
2952 (base32 "0w1h7hlsq406bxfy2pn4i9bd003bwl0q9b7p03z3g6yl0d21ddq5"))))
2953 (build-system python-build-system)
2954 (arguments `(#:python ,python-2)) ; urlgrabber supports python2 only
2955 (home-page "http://urlgrabber.baseurl.org")
2956 (synopsis "High-level cross protocol url-grabber")
2957 (description "@code{urlgrabber} is Python2 library that unifies access to
2958 files available on web, FTP or locally. It supports HTTP, FTP and file://
2959 protocols, it supports features like HTTP keep-alive, reget, throttling and
2960 more.")
2961 (license license:lgpl2.1+)))
2962
2963 (define-public python-pycares
2964 (package
2965 (name "python-pycares")
2966 (version "2.3.0")
2967 (source
2968 (origin
2969 (method url-fetch)
2970 (uri (pypi-uri "pycares" version))
2971 (sha256
2972 (base32
2973 "0h4fxw5drrhfyslzmfpljk0qnnpbhhb20hnnndzahhbwylyw1x1n"))))
2974 (build-system python-build-system)
2975 (arguments
2976 `(#:tests? #f)) ;tests require internet access
2977 (home-page "http://github.com/saghul/pycares")
2978 (synopsis "Python interface for @code{c-ares}")
2979 (description "@code{pycares} is a Python module which provides an
2980 interface to @code{c-ares}, a C library that performs DNS requests and
2981 name resolutions asynchronously.")
2982 (license license:expat)))
2983
2984 (define-public python-yarl
2985 (package
2986 (name "python-yarl")
2987 (version "1.1.1")
2988 (source
2989 (origin
2990 (method url-fetch)
2991 (uri (pypi-uri "yarl" version))
2992 (sha256
2993 (base32
2994 "1s6z13g8vgxfkkqwhn6imnm7pl7ky9arv4jygnn6bcndcbidg7d6"))))
2995 (build-system python-build-system)
2996 (native-inputs
2997 `(("python-pytest" ,python-pytest)
2998 ("python-pytest-runner" ,python-pytest-runner)))
2999 (propagated-inputs
3000 `(("python-idna" ,python-idna)
3001 ("python-multidict" ,python-multidict)))
3002 (home-page "https://github.com/aio-libs/yarl/")
3003 (synopsis "Yet another URL library")
3004 (description "@code{yarl} module provides handy @code{URL} class
3005 for URL parsing and changing.")
3006 (license license:asl2.0)))
3007
3008 (define-public python-google-api-client
3009 (package
3010 (name "python-google-api-client")
3011 (version "1.6.7")
3012 (source
3013 (origin
3014 (method url-fetch)
3015 (uri (pypi-uri "google-api-python-client" version))
3016 (sha256
3017 (base32
3018 "1wpbbbxfpy9mwxdy3kn352cb590ladv574j1aa2l4grjdqw3ln05"))))
3019 (build-system python-build-system)
3020 (arguments
3021 '(#:tests? #f)) ; tests require internet access
3022 (native-inputs
3023 `(("python-httplib2" ,python-httplib2)
3024 ("python-six" ,python-six)
3025 ("python-oauth2client" ,python-oauth2client)
3026 ("python-uritemplate" ,python-uritemplate)))
3027 (home-page "https://github.com/google/google-api-python-client")
3028 (synopsis "Core Python library for accessing Google APIs")
3029 (description "Python client library for Google's discovery based APIs")
3030 (license license:asl2.0)))
3031
3032 (define-public python2-google-api-client
3033 (package-with-python2 python-google-api-client))
3034
3035 (define-public python-hawkauthlib
3036 (package
3037 (name "python-hawkauthlib")
3038 (version "2.0.0")
3039 (source
3040 (origin
3041 (method url-fetch)
3042 (uri (pypi-uri "hawkauthlib" version))
3043 (sha256
3044 (base32
3045 "03ai47s4h8nfnrf25shbfvkm1b9n1ccd4nmmj280sg1fayi69zgg"))))
3046 (build-system python-build-system)
3047 (propagated-inputs
3048 `(("python-requests" ,python-requests)
3049 ("python-webob" ,python-webob)))
3050 (home-page "https://github.com/mozilla-services/hawkauthlib")
3051 (synopsis "Hawk Access Authentication protocol")
3052 (description
3053 "This is a low-level Python library for implementing Hawk Access Authentication,
3054 a simple HTTP request-signing scheme.")
3055 (license license:mpl2.0)))
3056
3057 (define-public python-pybrowserid
3058 (package
3059 (name "python-pybrowserid")
3060 (version "0.14.0")
3061 (source
3062 (origin
3063 (method url-fetch)
3064 (uri (pypi-uri "PyBrowserID" version))
3065 (sha256
3066 (base32
3067 "1qvi79kfb8x9kxkm5lw2mp42hm82cpps1xknmsb5ghkwx1lpc8kc"))))
3068 (build-system python-build-system)
3069 (propagated-inputs
3070 `(("python-requests" ,python-requests)))
3071 (native-inputs
3072 `(("python-mock" ,python-mock)))
3073 (home-page "https://github.com/mozilla/PyBrowserID")
3074 (synopsis "Python library for the BrowserID protocol")
3075 (description
3076 "This is a Python client library for the BrowserID protocol that
3077 underlies Mozilla Persona.")
3078 (license license:mpl2.0)))
3079
3080 (define-public python-pyfxa
3081 (package
3082 (name "python-pyfxa")
3083 (version "0.6.0")
3084 (source
3085 (origin
3086 (method url-fetch)
3087 (uri (pypi-uri "PyFxA" version))
3088 (sha256
3089 (base32
3090 "0axl16fyrz2r88gnw4b12mk7dpkqscv8c4wsc1y5hicl7bsbc4fm"))))
3091 (build-system python-build-system)
3092 (arguments '(#:tests? #f)) ; 17 tests require network access
3093 (propagated-inputs
3094 `(("python-cryptography" ,python-cryptography)
3095 ("python-hawkauthlib" ,python-hawkauthlib)
3096 ("python-pybrowserid" ,python-pybrowserid)
3097 ("python-requests" ,python-requests)
3098 ("python-six" ,python-six)))
3099 (native-inputs
3100 `(("python-grequests" ,python-grequests)
3101 ("python-mock" ,python-mock)
3102 ("python-responses" ,python-responses)
3103 ("python-unittest2" ,python-unittest2)))
3104 (home-page "https://github.com/mozilla/PyFxA")
3105 (synopsis "Firefox Accounts client library for Python")
3106 (description
3107 "This is a Python library for interacting with the Firefox Accounts
3108 ecosystem.")
3109 (license license:mpl2.0)))
3110
3111 (define-public python-hyperlink
3112 (package
3113 (name "python-hyperlink")
3114 (version "19.0.0")
3115 (source
3116 (origin
3117 (method url-fetch)
3118 (uri (pypi-uri "hyperlink" version))
3119 (sha256
3120 (base32
3121 "0m2nhi0j8wmgfscf974wd5v1xfq8mah286hil6npy1ys0m3y7222"))))
3122 (build-system python-build-system)
3123 (propagated-inputs
3124 `(("python-idna" ,python-idna)))
3125 (home-page "https://github.com/python-hyper/hyperlink")
3126 (synopsis "Python module to create immutable URLs according to spec")
3127 (description "This package provides a Python module to create immutable, and
3128 correct URLs for Python according to RFCs 3986 and 3987.")
3129 (license license:expat)))
3130
3131 (define-public python-treq
3132 (package
3133 (name "python-treq")
3134 (version "18.6.0")
3135 (source
3136 (origin
3137 (method url-fetch)
3138 (uri (pypi-uri "treq" version))
3139 (sha256
3140 (base32
3141 "0j4zwq9p1c9piv1vc66nxcv9s6hdinf90jwkbsm91k14npv9zq4i"))))
3142 (build-system python-build-system)
3143 (propagated-inputs
3144 `(("python-attrs" ,python-attrs)
3145 ("python-idna" ,python-idna)
3146 ("python-incremental" ,python-incremental)
3147 ("python-requests" ,python-requests)
3148 ("python-service-identity" ,python-service-identity)
3149 ("python-twisted" ,python-twisted)))
3150 (home-page "https://github.com/twisted/treq")
3151 (synopsis "Requests-like API built on top of twisted.web's Agent")
3152 (description "This package provides an HTTP library inspired by
3153 @code{requests}} but written on top of Twisted's @code{Agents}. It offers a
3154 high level API for making HTTP requests when using Twisted.")
3155 (license license:expat)))
3156
3157 (define-public python-autobahn
3158 (package
3159 (name "python-autobahn")
3160 (version "19.2.1")
3161 (source
3162 (origin
3163 (method url-fetch)
3164 (uri (pypi-uri "autobahn" version))
3165 (sha256
3166 (base32
3167 "1mm7j24ls01c7jb1ad5p5cpyxvzgydiyf8b04ihykh2v8g98j0x7"))))
3168 (build-system python-build-system)
3169 (arguments
3170 ;; The tests fail to run:
3171 ;; https://github.com/crossbario/autobahn-python/issues/1117
3172 `(#:tests? #f))
3173 (propagated-inputs
3174 `(("python-cffi" ,python-cffi)
3175 ("python-twisted" ,python-twisted)
3176 ("python-txaio" ,python-txaio)))
3177 (home-page "https://crossbar.io/autobahn/")
3178 (synopsis "Web Application Messaging Protocol implementation")
3179 (description "This package provides an implementation of the @dfn{Web Application
3180 Messaging Protocol} (WAMP). WAMP connects components in distributed
3181 applications using Publish and Subscribe (PubSub) and routed Remote Procedure
3182 Calls (rRPC). It is ideal for distributed, multi-client and server applications
3183 such as IoT applications or multi-user database-driven business applications.")
3184 (license license:expat)))
3185
3186 (define-public python-ws4py
3187 (package
3188 (name "python-ws4py")
3189 (version "0.5.1")
3190 (source
3191 (origin
3192 (method url-fetch)
3193 (uri (pypi-uri "ws4py" version))
3194 (sha256
3195 (base32
3196 "10slbbf2jm4hpr92jx7kh7mhf48sjl01v2w4d8z3f1p0ybbp7l19"))))
3197 (build-system python-build-system)
3198 (arguments
3199 `(#:phases
3200 (modify-phases %standard-phases
3201 (add-after 'unpack 'python3.7-compatibility
3202 (lambda _
3203 (substitute* '("ws4py/server/tulipserver.py"
3204 "ws4py/async_websocket.py")
3205 (("asyncio.async")
3206 "asyncio.ensure_future"))
3207 #t))
3208 ;; We don't have a package for cherrypy.
3209 (add-after 'unpack 'remove-cherrypy-support
3210 (lambda _
3211 (delete-file "ws4py/server/cherrypyserver.py")
3212 #t)))))
3213 (propagated-inputs
3214 `(("python-gevent" ,python-gevent)
3215 ("python-tornado" ,python-tornado)))
3216 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
3217 (synopsis "WebSocket client and server library")
3218 (description
3219 "This package provides a WebSocket client and server library for
3220 Python.")
3221 (license license:bsd-3)))
3222
3223 ;; kaldi-gstreamer-server does not yet work with python-ws4py > 0.3.2
3224 (define-public python2-ws4py-for-kaldi-gstreamer-server
3225 (package (inherit python-ws4py)
3226 (name "python2-ws4py")
3227 (version "0.3.2")
3228 (source
3229 (origin
3230 (method url-fetch)
3231 (uri (pypi-uri "ws4py" version))
3232 (sha256
3233 (base32
3234 "12ys3dv98awhrxd570vla3hqgzq3avjhq4yafhghhq3a942y1928"))))
3235 (build-system python-build-system)
3236 (arguments
3237 `(#:python ,python-2
3238 #:phases
3239 (modify-phases %standard-phases
3240 ;; We don't have a package for cherrypy.
3241 (add-after 'unpack 'remove-cherrypy-support
3242 (lambda _
3243 (delete-file "ws4py/server/cherrypyserver.py")
3244 #t)))))
3245 (propagated-inputs
3246 `(("python-gevent" ,python2-gevent)
3247 ("python-tornado" ,python2-tornado)))))
3248
3249 (define-public python-slugify
3250 (package
3251 (name "python-slugify")
3252 (version "3.0.4")
3253 (source
3254 (origin
3255 (method url-fetch)
3256 (uri (pypi-uri "python-slugify" version))
3257 (sha256
3258 (base32 "0dv97yi5fq074q5qyqbin09pmi8ixg36caf5nkpw2bqkd8jh6pap"))
3259 (patches
3260 (search-patches "python-slugify-depend-on-unidecode.patch"))))
3261 (native-inputs
3262 `(("python-wheel" ,python-wheel)))
3263 (propagated-inputs
3264 `(("python-unidecode" ,python-unidecode)))
3265 (arguments
3266 `(#:phases
3267 (modify-phases %standard-phases
3268 (replace 'check
3269 (lambda _
3270 (invoke "python" "test.py"))))))
3271 (build-system python-build-system)
3272 (home-page "https://github.com/un33k/python-slugify")
3273 (synopsis "Python Slugify application that handles Unicode")
3274 (description "This package provides a @command{slufigy} command and
3275 library to create slugs from unicode strings while keeping it DRY.")
3276 (license license:expat)))
3277
3278 (define-public python-branca
3279 (package
3280 (name "python-branca")
3281 (version "0.3.1")
3282 (source
3283 (origin
3284 (method url-fetch)
3285 (uri (pypi-uri "branca" version))
3286 (sha256
3287 (base32
3288 "0pmigd521j2228xf8x34vbx0niwvms7xl7za0lymywj0vydjqxiy"))))
3289 (build-system python-build-system)
3290 (propagated-inputs
3291 `(("python-jinja2" ,python-jinja2)
3292 ("python-six" ,python-six)))
3293 (native-inputs
3294 `(("python-pytest" ,python-pytest)))
3295 (home-page "https://github.com/python-visualization/branca")
3296 (synopsis "Generate complex HTML+JS pages with Python")
3297 (description "Generate complex HTML+JS pages with Python")
3298 (license license:expat)))
3299
3300 (define-public python-tinycss2
3301 (package
3302 (name "python-tinycss2")
3303 (version "1.0.2")
3304 (source
3305 (origin
3306 (method url-fetch)
3307 (uri (pypi-uri "tinycss2" version))
3308 (sha256
3309 (base32 "1kw84y09lggji4krkc58jyhsfj31w8npwhznr7lf19d0zbix09v4"))))
3310 (build-system python-build-system)
3311 (arguments
3312 `(#:phases
3313 (modify-phases %standard-phases
3314 (replace 'check
3315 (lambda _ (invoke "pytest"))))))
3316 (propagated-inputs
3317 `(("python-webencodings" ,python-webencodings)))
3318 (native-inputs
3319 `(("python-pytest-flake8" ,python-pytest-flake8)
3320 ("python-pytest-isort" ,python-pytest-isort)
3321 ("python-pytest-runner" ,python-pytest-runner)))
3322 (home-page "https://tinycss2.readthedocs.io/")
3323 (synopsis "Low-level CSS parser for Python")
3324 (description "@code{tinycss2} can parse strings, return Python objects
3325 representing tokens and blocks, and generate CSS strings corresponding to
3326 these objects.
3327
3328 Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
3329 grammar of CSS but doesn’t know specific rules, properties or values supported
3330 in various CSS modules.")
3331 (license license:bsd-3)))
3332
3333 (define-public python-cssselect2
3334 (package
3335 (name "python-cssselect2")
3336 (version "0.2.2")
3337 (source
3338 (origin
3339 (method url-fetch)
3340 (uri (pypi-uri "cssselect2" version))
3341 (sha256
3342 (base32 "0skymzb4ncrm2zdsy80f53vi0arf776lvbp51hzh4ayp1il5lj3h"))))
3343 (build-system python-build-system)
3344 (arguments
3345 `(#:phases
3346 (modify-phases %standard-phases
3347 (replace 'check
3348 (lambda _ (invoke "pytest"))))))
3349 (propagated-inputs
3350 `(("python-tinycss2" ,python-tinycss2)))
3351 (native-inputs
3352 `(("python-pytest-cov" ,python-pytest-cov)
3353 ("python-pytest-flake8" ,python-pytest-flake8)
3354 ("python-pytest-isort" ,python-pytest-isort)
3355 ("python-pytest-runner" ,python-pytest-runner)))
3356 (home-page "https://cssselect2.readthedocs.io/")
3357 (synopsis "CSS selectors for Python ElementTree")
3358 (description "@code{cssselect2} is a straightforward implementation of
3359 CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
3360 ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
3361
3362 Unlike the Python package @code{cssselect}, it does not translate selectors to
3363 XPath and therefore does not have all the correctness corner cases that are
3364 hard or impossible to fix in cssselect.")
3365 (license license:bsd-3)))
3366
3367 (define-public gunicorn
3368 (package
3369 (name "gunicorn")
3370 (version "20.0.0")
3371 (source
3372 (origin
3373 (method url-fetch)
3374 (uri (pypi-uri "gunicorn" version))
3375 (sha256
3376 (base32
3377 "0l1zm8a0vz8ws3lkn8q9a0f93ipdzyvlf2zlwdj5xyadh6jdwsgg"))))
3378 (outputs '("out" "doc"))
3379 (build-system python-build-system)
3380 (arguments
3381 `(#:phases
3382 (modify-phases %standard-phases
3383 (add-after 'build 'build-doc
3384 (lambda _
3385 (invoke "make" "-C" "docs" "PAPER=a4" "html" "info")
3386 (delete-file "docs/build/texinfo/Makefile")
3387 (delete-file "docs/build/texinfo/Gunicorn.texi")
3388 #t))
3389 (replace 'check
3390 (lambda _
3391 (setenv "PYTHONPATH"
3392 (string-append ".:" (getenv "PYTHONPATH")))
3393 ;; Remove test modules failing due to libc not found due to
3394 ;; section '.dynamic' not found in libc.so
3395 (delete-file "tests/test_arbiter.py")
3396 (delete-file "tests/test_config.py")
3397 (delete-file "tests/test_sock.py")
3398 (invoke "pytest")))
3399 (add-after 'install 'install-doc
3400 (lambda* (#:key outputs #:allow-other-keys)
3401 (let* ((doc (string-append (assoc-ref outputs "doc")
3402 "/share/doc/" ,name "-" ,version))
3403 (html (string-append doc "/html"))
3404 (info (string-append doc "/info"))
3405 (examples (string-append doc "/examples")))
3406 (mkdir-p html)
3407 (mkdir-p info)
3408 (mkdir-p examples)
3409 (copy-recursively "docs/build/html" html)
3410 (copy-recursively "docs/build/texinfo" info)
3411 (copy-recursively "examples" examples)
3412 (for-each (lambda (file)
3413 (copy-file file (string-append doc "/" file)))
3414 '("README.rst" "NOTICE" "LICENSE" "THANKS")))
3415 #t)))))
3416 (native-inputs
3417 `(("binutils" ,binutils) ;; for ctypes.util.find_library()
3418 ("python-aiohttp", python-aiohttp)
3419 ("python-pytest" ,python-pytest)
3420 ("python-pytest-cov" ,python-pytest-cov)
3421 ("python-sphinx" ,python-sphinx)
3422 ("texinfo" ,texinfo)))
3423 (home-page "https://gunicorn.org/")
3424 (synopsis "Python WSGI HTTP Server for UNIX")
3425 (description "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
3426 Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
3427 Unicorn project. The Gunicorn server is broadly compatible with
3428 various web frameworks, simply implemented, light on server resources,
3429 and fairly speedy.")
3430 (license license:expat)))
3431
3432 (define-public python-translation-finder
3433 (package
3434 (name "python-translation-finder")
3435 (version "1.7")
3436 (source
3437 (origin
3438 (method url-fetch)
3439 (uri (pypi-uri "translation-finder" version))
3440 (sha256
3441 (base32
3442 "1pcy9z8gmb8x41gjhw9x0lkr0d2mv5mdxcs2hwg6q8mxs857j589"))))
3443 (build-system python-build-system)
3444 (arguments
3445 `(#:phases
3446 (modify-phases %standard-phases
3447 (add-before 'build 'remove-failing-test
3448 (lambda _
3449 (delete-file "translation_finder/test_api.py")
3450 #t)))))
3451 (propagated-inputs
3452 `(("python-chardet" ,python-chardet)
3453 ("python-pathlib2" ,python-pathlib2)
3454 ("python-ruamel.yaml" ,python-ruamel.yaml)
3455 ("python-six" ,python-six)))
3456 (native-inputs
3457 `(("python-codecov" ,python-codecov)
3458 ("python-codacy-coverage" ,python-codacy-coverage)
3459 ("python-pytest-cov" ,python-pytest-cov)
3460 ("python-pytest-runner" ,python-pytest-runner)
3461 ("python-twine" ,python-twine)))
3462 (home-page "https://weblate.org/")
3463 (synopsis "Translation file finder for Weblate")
3464 (description "This package provides a function to find translation file in
3465 the source code of a project. It supports many translation file formats and
3466 is part of the Weblate translation platform.")
3467 (license license:gpl3+)))
3468
3469 (define-public python-gitlab
3470 (package
3471 (name "python-gitlab")
3472 (version "1.15.0")
3473 (source
3474 (origin
3475 (method url-fetch)
3476 (uri (pypi-uri "python-gitlab" version))
3477 (sha256
3478 (base32
3479 "0zl6kz8v8cg1bcy2r78b2snb0lpw0b573gdx2x1ps0nhsh75l4j5"))))
3480 (build-system python-build-system)
3481 (propagated-inputs
3482 `(("python-requests" ,python-requests)
3483 ("python-six" ,python-six)))
3484 (native-inputs
3485 `(("python-httmock" ,python-httmock)
3486 ("python-mock" ,python-mock)))
3487 (home-page
3488 "https://github.com/python-gitlab/python-gitlab")
3489 (synopsis "Interact with GitLab API")
3490 (description "This package provides an extended library for interacting
3491 with GitLab instances through their API.")
3492 (license license:lgpl3+)))
3493
3494 (define-public python-path-and-address
3495 (package
3496 (name "python-path-and-address")
3497 (version "2.0.1")
3498 (source
3499 (origin
3500 ;; The source distributed on PyPI doesn't include tests.
3501 (method git-fetch)
3502 (uri (git-reference
3503 (url "https://github.com/joeyespo/path-and-address")
3504 (commit (string-append "v" version))))
3505 (file-name (git-file-name name version))
3506 (sha256
3507 (base32
3508 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
3509 (build-system python-build-system)
3510 (arguments
3511 `(#:phases
3512 (modify-phases %standard-phases
3513 (replace 'check
3514 (lambda* (#:key inputs outputs #:allow-other-keys)
3515 (add-installed-pythonpath inputs outputs)
3516 (invoke "py.test"))))))
3517 (native-inputs
3518 `(("python-pytest" ,python-pytest)))
3519 (home-page "https://github.com/joeyespo/path-and-address")
3520 (synopsis "Functions for command-line server tools used by humans")
3521 (description "Path-and-address resolves ambiguities of command-line
3522 interfaces, inferring which argument is the path, and which is the address.")
3523 (license license:expat)))
3524
3525 (define-public grip
3526 ;; No release by upstream for quite some time, some bugs fixed since. See:
3527 ;; https://github.com/joeyespo/grip/issues/304
3528 (let ((commit "27a4d6d87ea1d0ea7f7f120de55baabee3de73e3"))
3529 (package
3530 (name "grip")
3531 (version (git-version "4.5.2" "1" commit))
3532 (source
3533 (origin
3534 (method git-fetch)
3535 (uri (git-reference
3536 (url "https://github.com/joeyespo/grip")
3537 (commit commit)))
3538 (file-name (git-file-name name version))
3539 (sha256
3540 (base32
3541 "0kx5hgb3q19i4l18a4vqdq9af390xgpk88lp2ay75qi96k0dc68w"))))
3542 (build-system python-build-system)
3543 (propagated-inputs
3544 `(("python-docopt" ,python-docopt)
3545 ("python-flask" ,python-flask)
3546 ("python-markdown" ,python-markdown)
3547 ("python-path-and-address" ,python-path-and-address)
3548 ("python-pygments" ,python-pygments)
3549 ("python-requests" ,python-requests)))
3550 (native-inputs
3551 `(("python-pytest" ,python-pytest)
3552 ("python-responses" ,python-responses)))
3553 (arguments
3554 `(#:phases
3555 (modify-phases %standard-phases
3556 (replace 'check
3557 (lambda* (#:key inputs outputs #:allow-other-keys)
3558 (add-installed-pythonpath inputs outputs)
3559 (setenv "PATH" (string-append
3560 (getenv "PATH") ":"
3561 (assoc-ref %outputs "out") "/bin"))
3562 (invoke "py.test" "-m" "not assumption"))))))
3563 (home-page "https://github.com/joeyespo/grip")
3564 (synopsis "Preview Markdown files using the GitHub API")
3565 (description "Grip is a command-line server application written in Python
3566 that uses the GitHub Markdown API to render a local Markdown file. The styles
3567 and rendering come directly from GitHub, so you'll know exactly how it will
3568 appear. Changes you make to the file will be instantly reflected in the browser
3569 without requiring a page refresh.")
3570 (license license:expat))))