projects/guix·blob version-1.0.1 · refs

3144 lines · 108.1 KiB

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