gnu: nftables: Update to 0.8.1.
[jackhill/guix/guix.git] / gnu / packages / python-web.scm
CommitLineData
1b2f753d
LC
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
3;;; Copyright © 2015, 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
4;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
98c6a025 5;;; Copyright © 2016, 2017 Danny Milosavljevic <dannym+a@scratchpost.org>
1b2f753d
LC
6;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
7;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
8;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
9;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
10;;; Copyright © 2016, 2017 Julien Lepiller <julien@lepiller.eu>
11;;; Copyright © 2016, 2017 ng0 <ng0@infotropique.org>
12;;; Copyright © 2014, 2017 Eric Bavier <bavier@member.fsf.org>
13;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
14;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
15;;; Copyright © 2015, 2016, 2017 Leo Famulari <leo@famulari.name>
16;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
17;;; Copyright © 2016, 2017 Tobias Geerinckx-Rice <me@tobias.gr>
18;;; Copyright © 2015, 2017 Ben Woodcroft <donttrustben@gmail.com>
19;;; Copyright © 2015, 2016 Christopher Allan Webber <cwebber@dustycloud.org>
20;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
21;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
22;;; Copyright © 2016 David Craven <david@craven.ch>
23;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
589e3f4e 24;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
1b2f753d
LC
25;;;
26;;; This file is part of GNU Guix.
27;;;
28;;; GNU Guix is free software; you can redistribute it and/or modify it
29;;; under the terms of the GNU General Public License as published by
30;;; the Free Software Foundation; either version 3 of the License, or (at
31;;; your option) any later version.
32;;;
33;;; GNU Guix is distributed in the hope that it will be useful, but
34;;; WITHOUT ANY WARRANTY; without even the implied warranty of
35;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36;;; GNU General Public License for more details.
37;;;
38;;; You should have received a copy of the GNU General Public License
39;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
40
41(define-module (gnu packages python-web)
42 #:use-module (guix packages)
43 #:use-module (guix download)
44 #:use-module (guix build-system python)
45 #:use-module (gnu packages)
ac257f12 46 #:use-module (gnu packages check)
1b2f753d 47 #:use-module (gnu packages compression)
a8714bf6 48 #:use-module (gnu packages databases)
1b2f753d
LC
49 #:use-module (gnu packages django)
50 #:use-module (gnu packages pkg-config)
51 #:use-module (gnu packages python)
cc6f4912 52 #:use-module (gnu packages python-crypto)
33dc54b0 53 #:use-module (gnu packages time)
1b2f753d
LC
54 #:use-module (gnu packages xml)
55 #:use-module ((guix licenses) #:prefix license:)
56 #:use-module (srfi srfi-1))
57
589e3f4e
LC
58(define-public python-furl
59 (package
60 (name "python-furl")
61 (version "0.5.6")
62 (source
63 (origin
64 (method url-fetch)
65 (uri (pypi-uri "furl" version))
66 (sha256
67 (base32
68 "0lzpfpm686hvz3sr1mcrnd1b3lgmnw8v59gb43wfi98r3b671pqc"))))
69 (build-system python-build-system)
70 (propagated-inputs
71 `(("python-six" ,python-six)
72 ("python-orderedmultidict" ,python-orderedmultidict)))
73 (native-inputs
74 `(("python-pycodestyle" ,python-pycodestyle)))
75 (home-page "https://github.com/gruns/furl")
76 (synopsis "URL manipulation in Python")
77 (description "Furl provides an easy-to-use alternative to the
78@code{urllib} and @code{urlparse} modules for manipulating URLs.")
79 (license license:unlicense)))
80
81(define-public python2-furl
82 (package-with-python2 python-furl))
83
1b2f753d
LC
84(define-public python-httplib2
85 (package
86 (name "python-httplib2")
87 (version "0.9.2")
88 (source
89 (origin
90 (method url-fetch)
91 (uri (pypi-uri "httplib2" version))
92 (sha256
93 (base32
94 "126rsryvw9vhbf3qmsfw9lf4l4xm2srmgs439lgma4cpag4s3ay3"))))
95 (build-system python-build-system)
96 (home-page "https://github.com/jcgregorio/httplib2")
97 (synopsis "Comprehensive HTTP client library")
98 (description
99 "A comprehensive HTTP client library supporting many features left out of
100other HTTP libraries.")
101 (license license:expat)))
102
103(define-public python2-httplib2
104 (package-with-python2 python-httplib2))
105
106(define-public python-sockjs-tornado
107 (package
108 (name "python-sockjs-tornado")
109 (version "1.0.3")
110 (source
111 (origin
112 (method url-fetch)
113 (uri (pypi-uri "sockjs-tornado" version))
114 (sha256
115 (base32
116 "16cff40nniqsyvda1pb2j3b4zwmrw7y2g1vqq78lp20xpmhnwwkd"))))
117 (build-system python-build-system)
118 (arguments
119 `(;; There are no tests, and running the test phase requires missing
120 ;; dependencies
121 #:tests? #f))
122 (propagated-inputs
123 `(("python-tornado" ,python-tornado)))
9be5ecdf 124 (home-page "https://github.com/mrjoes/sockjs-tornado/")
1b2f753d
LC
125 (synopsis
126 "SockJS python server implementation on top of Tornado framework")
127 (description
128 "SockJS-tornado provides the server side counterpart to a SockJS client
129library, through the Tornado framework.
130
131SockJS provides a low latency, full duplex, cross-domain communication channel
132between a web browser and web server.")
133 (license license:expat)))
134
135(define-public python2-sockjs-tornado
136 (package-with-python2 python-sockjs-tornado))
137
138(define-public python-flask-babel
139 (package
140 (name "python-flask-babel")
141 (version "0.11.1")
142 (source
143 (origin
144 (method url-fetch)
145 (uri (pypi-uri "Flask-Babel" version))
146 (sha256
147 (base32
148 "16b80cipdba9xj3jlaiaq6wgrgpjb70w3j01jjy9hbp4k71kd6yj"))))
149 (build-system python-build-system)
150 (propagated-inputs
151 `(("python-flask" ,python-flask)
152 ("python-babel" ,python-babel)
153 ("python-jinja2" ,python-jinja2)
154 ("python-pytz" ,python-pytz)))
155 (home-page "https://github.com/python-babel/flask-babel")
156 (synopsis "Add i18n/l10n support to Flask applications")
157 (description "This package implements internationalization and localization
158support for Flask. This is based on the Python babel module as well as pytz -
159both of which are installed automatically if you install this library.")
160 (license license:bsd-3)))
161
162(define-public python2-flask-babel
163 (package-with-python2 python-flask-babel))
164
165(define-public python-html5lib
166 (package
167 (name "python-html5lib")
168 (version "1.0b10")
169 (source
170 (origin
171 (method url-fetch)
172 (uri (pypi-uri "html5lib" version))
173 (sha256
174 (base32
175 "1yd068a5c00wd0ajq0hqimv7fd82lhrw0w3s01vbhy9bbd6xapqd"))))
176 (build-system python-build-system)
177 (propagated-inputs
178 `(("python-six" ,python-six)
179 ("python-webencodings" ,python-webencodings)))
180 (arguments
181 `(#:test-target "check"))
182 (home-page
183 "https://github.com/html5lib/html5lib-python")
184 (synopsis
185 "Python HTML parser based on the WHATWG HTML specifcation")
186 (description
187 "Html5lib is an HTML parser based on the WHATWG HTML specifcation
188and written in Python.")
189 (license license:expat)))
190
191(define-public python2-html5lib
192 (package-with-python2 python-html5lib))
193
194;; Needed for python-bleach, a dependency of python-notebook
195(define-public python-html5lib-0.9
196 (package
197 (inherit python-html5lib)
198 (version "0.999")
199 (source
200 (origin
201 (method url-fetch)
202 (uri (pypi-uri "html5lib" version))
203 (sha256
204 (base32
205 "17n4zfsj6ynmbwdwviywmj8r6nzr3xvfx2zs0xhndmvm51z7z263"))))))
206
207(define-public python2-html5lib-0.9
208 (package-with-python2 python-html5lib-0.9))
209
210(define-public python-html5-parser
211 (package
212 (name "python-html5-parser")
213 (version "0.4.4")
214 (source (origin
215 (method url-fetch)
216 (uri (pypi-uri "html5-parser" version))
217 (sha256
218 (base32
219 "1d8sxhl41ffh7qlk7wlsy17xw6slzx5v1yna9s72wx5qrpaa3wxr"))))
220 (build-system python-build-system)
221 (native-inputs
222 `(("pkg-config" ,pkg-config)))
223 (inputs
224 `(("libxml2" ,libxml2)))
225 (propagated-inputs
226 `(("python-lxml" ,python-lxml)
227 ("python-beautifulsoup4" ,python-beautifulsoup4)))
228 (home-page "https://html5-parser.readthedocs.io")
229 (synopsis "Fast C-based HTML5 parsing for Python")
230 (description "This package provides a fast implementation of the HTML5
231parsing spec for Python. Parsing is done in C using a variant of the gumbo
232parser. The gumbo parse tree is then transformed into an lxml tree, also in
233C, yielding parse times that can be a thirtieth of the html5lib parse times.")
234 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
235 ;; indicate ASL2.0, including the LICENSE file for the whole project.
236 (license (list license:asl2.0 license:gpl3))))
237
238(define-public python2-html5-parser
239 (package-with-python2 python-html5-parser))
240
241(define-public python-webencodings
242 (package
243 (name "python-webencodings")
244 (version "0.5")
245 (source (origin
246 (method url-fetch)
247 (uri (pypi-uri "webencodings" version))
248 (sha256
249 (base32
250 "015rw7662lkpb9aqiqah2hbizk6w531badqwjpz41rr47glmxid5"))))
251 (build-system python-build-system)
252 (arguments
253 '(#:phases
254 (modify-phases %standard-phases
255 (replace 'check
256 (lambda _
257 (zero? (system* "py.test" "-v" "webencodings/tests.py")))))))
258 (native-inputs
259 `(("python-pytest" ,python-pytest)))
260 (home-page "https://github.com/SimonSapin/python-webencodings")
261 (synopsis "Character encoding aliases for legacy web content")
262 (description
263 "In order to be compatible with legacy web content when interpreting
264something like @code{Content-Type: text/html; charset=latin1}, tools need
265to use a particular set of aliases for encoding labels as well as some
266overriding rules. For example, @code{US-ASCII} and @code{iso-8859-1} on
267the web are actually aliases for @code{windows-1252}, and an @code{UTF-8}
268or @code{UTF-16} BOM takes precedence over any other encoding declaration.
269The WHATWG @url{https://encoding.spec.whatwg.org/,Encoding} standard
270defines all such details so that implementations do not have to
271reverse-engineer each other.
272
273This module implements the Encoding standard and has encoding labels and
274BOM detection, but the actual implementation for encoders and decoders
275is Python’s.")
276 (license license:bsd-3)))
277
278(define-public python2-webencodings
279 (package-with-python2 python-webencodings))
280
281(define-public python-openid
282 (package
283 (name "python-openid")
284 (version "3.0.10")
285 (source
286 (origin
287 (method url-fetch)
288 (uri (pypi-uri "python3-openid" version))
289 (sha256
290 (base32
291 "1x3nh3fycqfn43jp5j5pb4q4y2jxp4mdka4absaa3bc0078qd758"))))
292 (build-system python-build-system)
293 (arguments
294 `(#:phases
295 (modify-phases %standard-phases
296 (replace 'check
297 (lambda _
298 (zero? (system* "./admin/runtests")))))))
299 (properties `((python2-variant . ,(delay python2-openid))))
300 (propagated-inputs
301 `(("python-defusedxml" ,python-defusedxml)))
302 (native-inputs
303 `(("python-psycopg2" ,python-psycopg2)
304 ("python-django" ,python-django)))
305 (home-page "https://github.com/necaris/python3-openid")
306 (synopsis "OpenID support for servers and consumers")
307 (description "This library provides OpenID authentication for Python, both
308for clients and servers.")
309 (license license:asl2.0)))
310
311(define-public python2-openid
312 (package
313 (name "python2-openid")
314 (version "2.2.5")
315 (source
316 (origin
317 (method url-fetch)
318 (uri (pypi-uri "python-openid" version))
319 (sha256
320 (base32
321 "1vvhxlghjan01snfdc4k7ykd80vkyjgizwgg9bncnin8rqz1ricj"))))
322 (build-system python-build-system)
323 (arguments
324 ;; Python 3 support is in `python3-openid`, a separate package.
325 `(#:python ,python-2))
326 (home-page "https://github.com/openid/python-openid")
327 (synopsis "OpenID support for servers and consumers")
328 (description "This library provides OpenID authentication for Python, both
329for clients and servers.")
330 (license license:asl2.0)))
331
332(define-public python-cssutils
333 (package
334 (name "python-cssutils")
335 (version "1.0.1")
336 (source
337 (origin
338 (method url-fetch)
339 (uri (pypi-uri "cssutils" version))
340 (sha256
341 (base32
342 "0qwha9x1wml2qmipbcz03gndnlwhzrjdvw9i09si247a90l8p8fq"))))
343 (build-system python-build-system)
344 (native-inputs
345 `(("unzip" ,unzip))) ; for unpacking the source
346 (arguments
347 `(#:tests? #f)) ;tests require python-pbr < 1.7.0
348 (home-page "http://cthedot.de/cssutils/")
349 (synopsis
350 "CSS Cascading Style Sheets library for Python")
351 (description
352 "Cssutils is a Python package for parsing and building CSS
353Cascading Style Sheets. Currently it provides a DOM only and no rendering
354options.")
355 (license license:lgpl3+)))
356
357(define-public python2-cssutils
358 (package-with-python2 python-cssutils))
359
360(define-public python-cssselect
361 (package
362 (name "python-cssselect")
363 (version "0.9.2")
364 (source
365 (origin
366 (method url-fetch)
367 (uri (pypi-uri "cssselect" version))
368 (sha256
369 (base32
370 "1xg6gbva1yswghiycmgincv6ab4bn7hpm720ndbj40h8xycmnfvi"))))
371 (build-system python-build-system)
372 (arguments
373 ;; tests fail with message
374 ;; AttributeError: 'module' object has no attribute 'tests'
375 `(#:tests? #f))
376 (home-page
377 "https://pythonhosted.org/cssselect/")
378 (synopsis
379 "CSS3 selector parser and translator to XPath 1.0")
380 (description
381 "Cssselect ia a Python module that parses CSS3 Selectors and translates
382them to XPath 1.0 expressions. Such expressions can be used in lxml or
383another XPath engine to find the matching elements in an XML or HTML document.")
384 (license license:bsd-3)))
385
386(define-public python2-cssselect
387 (package-with-python2 python-cssselect))
388
389(define-public python-openid-cla
390 (package
391 (name "python-openid-cla")
392 (version "1.2")
393 (source
394 (origin
395 (method url-fetch)
396 (uri (pypi-uri "python-openid-cla" version))
397 (sha256
398 (base32
399 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
400 (build-system python-build-system)
401 (arguments '(#:tests? #f)) ; No tests.
402 (home-page "https://github.com/puiterwijk/python-openid-cla/")
403 (synopsis "Implementation of the OpenID CLA extension for python-openid")
404 (description "@code{openid-cla} is an implementation of the OpenID
405contributor license agreement extension for python-openid.")
406 (license license:bsd-3)))
407
408(define-public python2-openid-cla
409 (package-with-python2 python-openid-cla))
410
411(define-public python-openid-teams
412 (package
413 (name "python-openid-teams")
414 (version "1.1")
415 (source
416 (origin
417 (method url-fetch)
418 (uri (pypi-uri "python-openid-teams" version))
419 (sha256
420 (base32
421 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
422 (build-system python-build-system)
423 (arguments '(#:tests? #f)) ; No tests.
424 (home-page "https://github.com/puiterwijk/python-openid-teams/")
425 (synopsis "Implementation of the OpenID teams extension for python-openid")
426 (description
427 "@code{openid-teams} is an implementation of the OpenID
428teams extension for python-openid.")
429 (license license:bsd-3)))
430
431(define-public python2-openid-teams
432 (package-with-python2 python-openid-teams))
433
434(define-public python-tornado
435 (package
436 (name "python-tornado")
437 (version "4.5.1")
438 (source
439 (origin
440 (method url-fetch)
441 (uri (pypi-uri "tornado" version))
442 (sha256
443 (base32 "1zbkgcdfq81k298awrm8p0xwbwwn2p3nbizdglzfbkskhai082fv"))))
444 (build-system python-build-system)
445 (arguments
446 '(;; FIXME: Two tests error out with:
447 ;; AssertionError: b'Error in atexit._run_exitfuncs:\nFileNotF[44 chars]ry\n' != b''
448 ;; #:phases
449 ;; (modify-phases %standard-phases
450 ;; (replace 'check
451 ;; (lambda _
452 ;; ;; 'setup.py test' hits an AssertionError on BSD-specific
453 ;; ;; "tornado/platform/kqueue.py". This is the supported method:
454 ;; (zero? (system* "python" "-m" "tornado.test")))))
455 #:tests? #f))
456 (native-inputs
457 `(("python-certifi" ,python-certifi)))
458 (propagated-inputs
459 `(("python-backports-abc" ,python-backports-abc)))
460 (home-page "http://www.tornadoweb.org/")
461 (synopsis "Python web framework and asynchronous networking library")
462 (description
463 "Tornado is a Python web framework and asynchronous networking library,
464originally developed at FriendFeed. By using non-blocking network I/O,
465Tornado can scale to tens of thousands of open connections, making it ideal
466for long polling, WebSockets, and other applications that require a long-lived
467connection to each user.")
468 (license license:asl2.0)
469 (properties `((python2-variant . ,(delay python2-tornado))))))
470
471(define-public python2-tornado
472 (let ((tornado (package-with-python2 (strip-python2-variant python-tornado))))
473 (package (inherit tornado)
474 (propagated-inputs
475 `(("python2-backport-ssl-match-hostname"
476 ,python2-backport-ssl-match-hostname)
477 ("python2-singledispatch" ,python2-singledispatch)
478 ,@(package-propagated-inputs tornado))))))
479
480(define-public python-tornado-http-auth
481 (package
482 (name "python-tornado-http-auth")
483 (version "1.1.0")
484 (source
485 (origin
486 (method url-fetch)
487 (uri (pypi-uri "tornado-http-auth" version))
488 (sha256
489 (base32
490 "0znrgqd7k2s4ia474xizi6h3061zj4sn5n6cq76bkwl3wwshifn5"))))
491 (build-system python-build-system)
492 (propagated-inputs
493 `(("python-tornado" ,python-tornado)))
494 (home-page
495 "https://github.com/gvalkov/tornado-http-auth")
496 (synopsis
497 "Digest and basic authentication module for Tornado")
498 (description
499 "Provides support for adding authentication to services using the Tornado
500web framework, either via the basic or digest authentication schemes.")
501 (license license:asl2.0)))
502
503(define-public python-terminado
504 (package
505 (name "python-terminado")
506 (version "0.6")
507 (source
508 (origin
509 (method url-fetch)
510 (uri (pypi-uri "terminado" version))
511 (sha256
512 (base32
513 "09h1kwi86g5mrk14s4pgbhshd602zry29lnpxamcqz864kva22rc"))))
514 (build-system python-build-system)
515 (propagated-inputs
516 `(("python-tornado" ,python-tornado)
517 ("python-ptyprocess" ,python-ptyprocess)))
518 (native-inputs
519 `(("python-nose" ,python-nose)))
520 (arguments
521 `(#:phases
522 (modify-phases %standard-phases
523 (replace 'check
524 (lambda _
525 (zero? (system* "nosetests")))))))
526 (home-page "https://github.com/takluyver/terminado")
527 (synopsis "Terminals served to term.js using Tornado websockets")
528 (description "This package provides a Tornado websocket backend for the
529term.js Javascript terminal emulator library.")
530 (license license:bsd-2)
531 (properties `((python2-variant . ,(delay python2-terminado))))))
532
533(define-public python2-terminado
534 (let ((terminado (package-with-python2 (strip-python2-variant python-terminado))))
535 (package (inherit terminado)
536 (propagated-inputs
537 `(("python2-backport-ssl-match-hostname"
538 ,python2-backport-ssl-match-hostname)
539 ,@(package-propagated-inputs terminado))))))
540
589e3f4e
LC
541(define-public python-wsgi-intercept
542 (package
543 (name "python-wsgi-intercept")
544 (version "1.2.2")
545 (source (origin
546 (method url-fetch)
547 (uri (string-append
548 "https://pypi.python.org/packages/"
549 "38/76/ebcbc24d0cb77db34520a3ca6ed1bd43ace17d182bbd8dd7d976f1c176fb/"
550 "wsgi_intercept-" version ".tar.gz"))
551 (sha256
552 (base32
553 "0kjj2v2dvmnpdd5h5gk9rzz0f54rhjb0yiz3zg65bmp65slfw65d"))))
554 (build-system python-build-system)
555 (propagated-inputs
556 `(("python-six" ,python-six)))
557 (native-inputs
558 `(("python-pytest" ,python-pytest)
559 ("python-httplib2" ,python-httplib2)
560 ("python-requests" ,python-requests)
561 ("python-urllib3" ,python-urllib3)))
562 (synopsis "Puts a WSGI application in place of a real URI for testing")
563 (description "Wsgi_intercept installs a WSGI application in place of a real
564URI for testing. Testing a WSGI application normally involves starting a
565server at a local host and port, then pointing your test code to that address.
566Instead, this library lets you intercept calls to any specific host/port
567combination and redirect them into a WSGI application importable by your test
568program. Thus, you can avoid spawning multiple processes or threads to test
569your Web app.")
570 (home-page "https://github.com/cdent/wsgi-intercept")
571 (license license:expat)))
572
1b2f753d
LC
573(define-public python-webob
574 (package
575 (name "python-webob")
576 (version "1.5.1")
577 (source
578 (origin
579 (method url-fetch)
580 (uri (pypi-uri "WebOb" version))
581 (sha256
582 (base32
583 "02bhhzijfhv8hmi1i54d4b0v43liwhnywhflvxsv4x3zax9s3afq"))))
584 (build-system python-build-system)
585 (native-inputs
586 `(("python-nose" ,python-nose)))
9be5ecdf 587 (home-page "https://webob.org/")
1b2f753d
LC
588 (synopsis "WSGI request and response object")
589 (description
590 "WebOb provides wrappers around the WSGI request environment, and an
591object to help create WSGI responses.")
592 (license license:expat)))
593
594(define-public python2-webob
595 (package-with-python2 python-webob))
596
597(define-public python-zope-event
598 (package
599 (name "python-zope-event")
600 (version "4.1.0")
601 (source
602 (origin
603 (method url-fetch)
604 (uri (string-append "https://pypi.python.org/packages/source/z"
605 "/zope.event/zope.event-" version ".tar.gz"))
606 (sha256
607 (base32
608 "11p75zpfz3ffhz21nzx9wb23xs993ck5s6hkjcvhswwizni5jynw"))))
609 (build-system python-build-system)
9be5ecdf 610 (home-page "https://pypi.python.org/pypi/zope.event")
1b2f753d
LC
611 (synopsis "Event publishing system for Python")
612 (description "Zope.event provides an event publishing API, intended for
613use by applications which are unaware of any subscribers to their events. It
614is a simple event-dispatching system on which more sophisticated event
615dispatching systems can be built.")
616 (license license:zpl2.1)))
617
618(define-public python2-zope-event
619 (package-with-python2 python-zope-event))
620
621(define-public python-zope-interface
622 (package
623 (name "python-zope-interface")
624 (version "4.1.3")
625 (source
626 (origin
627 (method url-fetch)
628 (uri (string-append "https://pypi.python.org/packages/source/z"
629 "/zope.interface/zope.interface-" version ".tar.gz"))
630 (sha256
631 (base32
632 "0ks8h73b2g4bkad821qbv0wzjppdrwys33i7ka45ik3wxjg1l8if"))))
633 (build-system python-build-system)
634 (native-inputs
635 `(("python-zope-event" ,python-zope-event)))
636 (home-page "https://github.com/zopefoundation/zope.interface")
637 (synopsis "Python implementation of the \"design by contract\"
638methodology")
639 (description "Zope.interface provides an implementation of \"object
640interfaces\" for Python. Interfaces are a mechanism for labeling objects as
641conforming to a given API or contract.")
642 (license license:zpl2.1)))
643
644(define-public python2-zope-interface
645 (package-with-python2 python-zope-interface))
646
647(define-public python-zope-exceptions
648 (package
649 (name "python-zope-exceptions")
650 (version "4.0.8")
651 (source
652 (origin
653 (method url-fetch)
654 (uri (string-append "https://pypi.python.org/packages/source/z"
655 "/zope.exceptions/zope.exceptions-"
656 version ".tar.gz"))
657 (sha256
658 (base32
659 "0zwxaaa66sqxg5k7zcrvs0fbg9ym1njnxnr28dfmchzhwjvwnfzl"))))
660 (build-system python-build-system)
661 (arguments
662 '(#:tests? #f)) ; circular dependency with zope.testrunner
663 (propagated-inputs
664 `(("python-zope-interface" ,python-zope-interface)))
665 (home-page "http://cheeseshop.python.org/pypi/zope.exceptions")
666 (synopsis "Zope exceptions")
667 (description "Zope.exceptions provides general-purpose exception types
668that have uses outside of the Zope framework.")
669 (license license:zpl2.1)))
670
671(define-public python2-zope-exceptions
672 (package-with-python2 python-zope-exceptions))
673
674(define-public python-zope-testing
675 (package
676 (name "python-zope-testing")
677 (version "4.5.0")
678 (source
679 (origin
680 (method url-fetch)
681 (uri (string-append "https://pypi.python.org/packages/source/z"
682 "/zope.testing/zope.testing-" version ".tar.gz"))
683 (sha256
684 (base32
685 "1yvglxhzvhl45mndvn9gskx2ph30zz1bz7rrlyfs62fv2pvih90s"))
686 (modules '((guix build utils)))
687 (snippet
688 '(begin
689 ;; Remove pre-compiled .pyc files backup files from source.
690 (for-each delete-file (find-files "." "(\\.pyc|~)$"))
691 #t))))
692 (build-system python-build-system)
693 (native-inputs
694 `(("python-zope-exceptions" ,python-zope-exceptions)))
695 (propagated-inputs
696 `(("python-zope-interface" ,python-zope-interface)))
9be5ecdf 697 (home-page "https://pypi.python.org/pypi/zope.testing")
1b2f753d
LC
698 (synopsis "Zope testing helpers")
699 (description "Zope.testing provides a number of testing utilities for HTML
700forms, HTTP servers, regular expressions, and more.")
701 (license license:zpl2.1)))
702
703(define-public python2-zope-testing
704 (package-with-python2 python-zope-testing))
705
706(define-public python-zope-testrunner
707 (package
708 (name "python-zope-testrunner")
709 (version "4.4.9")
710 (source
711 (origin
712 (method url-fetch)
713 (uri (string-append "https://pypi.python.org/packages/source/z"
714 "/zope.testrunner/zope.testrunner-"
715 version ".zip"))
716 (sha256
717 (base32
718 "1r7iqknhh55y45f64mz5hghgvzx34h1i11k350s0avx6q8gznja1"))))
719 (build-system python-build-system)
720 (arguments
721 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
722 (native-inputs
723 `(("python-six" ,python-six)
724 ;("python-zope-interface" ,python-zope-interface)
725 ("python-zope-exceptions" ,python-zope-exceptions)
726 ("python-zope-testing" ,python-zope-testing)
727 ("unzip" ,unzip)))
728 (propagated-inputs
729 `(("python-zope-interface" ,python-zope-interface)))
9be5ecdf 730 (home-page "https://pypi.python.org/pypi/zope.testrunner")
1b2f753d
LC
731 (synopsis "Zope testrunner script")
732 (description "Zope.testrunner provides a script for running Python
733tests.")
734 (license license:zpl2.1)))
735
736(define-public python2-zope-testrunner
737 (let ((base (package-with-python2 python-zope-testrunner)))
738 (package
739 (inherit base)
740 (native-inputs
741 (append (package-native-inputs base)
742 `(("python2-subunit" ,python2-subunit)
743 ("python2-mimeparse" ,python2-mimeparse)))))))
744
745(define-public python-zope-i18nmessageid
746 (package
747 (name "python-zope-i18nmessageid")
748 (version "4.0.3")
749 (source
750 (origin
751 (method url-fetch)
752 (uri (string-append
753 "https://pypi.python.org/packages/source/z"
754 "/zope.i18nmessageid/zope.i18nmessageid-"
755 version ".tar.gz"))
756 (sha256
757 (base32
758 "1rslyph0klk58dmjjy4j0jxy21k03azksixc3x2xhqbkv97cmzml"))))
759 (build-system python-build-system)
9be5ecdf 760 (home-page "https://pypi.python.org/pypi/zope.i18nmessageid")
1b2f753d
LC
761 (synopsis "Message identifiers for internationalization")
762 (description "Zope.i18nmessageid provides facilities for declaring
763internationalized messages within program source text.")
764 (license license:zpl2.1)))
765
766(define-public python2-zope-i18nmessageid
767 (package-with-python2 python-zope-i18nmessageid))
768
769(define-public python-zope-schema
770 (package
771 (name "python-zope-schema")
772 (version "4.4.2")
773 (source
774 (origin
775 (method url-fetch)
776 (uri (string-append "https://pypi.python.org/packages/source/z"
777 "/zope.schema/zope.schema-" version ".tar.gz"))
778 (sha256
779 (base32
780 "1p943jdxb587dh7php4vx04qvn7b2877hr4qs5zyckvp5afhhank"))))
781 (build-system python-build-system)
782 (arguments
783 '(#:tests? #f)) ; FIXME: Tests can't find zope.event.
784 (propagated-inputs
785 `(("python-zope-event" ,python-zope-event)
786 ("python-zope-exceptions", python-zope-exceptions)
787 ("python-zope-interface" ,python-zope-interface)))
788 (native-inputs
789 `(("python-zope-testing" ,python-zope-testing)
790 ("python-coverage" ,python-coverage)
791 ("python-nose" ,python-nose)))
9be5ecdf 792 (home-page "https://pypi.python.org/pypi/zope.schema")
1b2f753d
LC
793 (synopsis "Zope data schemas")
794 (description "Zope.scheme provides extensions to zope.interface for
795defining data schemas.")
796 (license license:zpl2.1)))
797
798(define-public python2-zope-schema
799 (package-with-python2 python-zope-schema))
800
801(define-public python-zope-configuration
802 (package
803 (name "python-zope-configuration")
804 (version "4.0.3")
805 (source (origin
806 (method url-fetch)
807 (uri (string-append "https://pypi.python.org/packages/source/z"
808 "/zope.configuration/zope.configuration-"
809 version ".tar.gz"))
810 (sha256
811 (base32
812 "1x9dfqypgympnlm25p9m43xh4qv3p7d75vksv9pzqibrb4cggw5n"))))
813 (build-system python-build-system)
814 (arguments
815 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
816 (propagated-inputs
817 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
818 ("python-zope-schema" ,python-zope-schema)))
9be5ecdf 819 (home-page "https://pypi.python.org/pypi/zope.configuration")
1b2f753d
LC
820 (synopsis "Zope Configuration Markup Language")
821 (description "Zope.configuration implements ZCML, the Zope Configuration
822Markup Language.")
823 (license license:zpl2.1)))
824
825(define-public python2-zope-configuration
826 (package-with-python2 python-zope-configuration))
827
828(define-public python-zope-proxy
829 (package
830 (name "python-zope-proxy")
831 (version "4.1.6")
832 (source
833 (origin
834 (method url-fetch)
835 (uri (string-append "https://pypi.python.org/packages/source/z"
836 "/zope.proxy/zope.proxy-" version ".tar.gz"))
837 (sha256
838 (base32
839 "0pqwwmvm1prhwv1ziv9lp8iirz7xkwb6n2kyj36p2h0ppyyhjnm4"))))
840 (build-system python-build-system)
841 (arguments
842 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
843 (propagated-inputs
844 `(("python-zope-interface" ,python-zope-interface)))
9be5ecdf 845 (home-page "https://pypi.python.org/pypi/zope.proxy")
1b2f753d
LC
846 (synopsis "Generic, transparent proxies")
847 (description "Zope.proxy provides generic, transparent proxies for Python.
848Proxies are special objects which serve as mostly-transparent wrappers around
849another object, intervening in the apparent behavior of the wrapped object
850only when necessary to apply the policy (e.g., access checking, location
851brokering, etc.) for which the proxy is responsible.")
852 (license license:zpl2.1)))
853
854(define-public python2-zope-proxy
855 (package-with-python2 python-zope-proxy))
856
857(define-public python-zope-location
858 (package
859 (name "python-zope-location")
860 (version "4.0.3")
861 (source
862 (origin
863 (method url-fetch)
864 (uri (string-append "https://pypi.python.org/packages/source/z"
865 "/zope.location/zope.location-" version ".tar.gz"))
866 (sha256
867 (base32
868 "1nj9da4ksiyv3h8n2vpzwd0pb03mdsh7zy87hfpx72b6p2zcwg74"))))
869 (build-system python-build-system)
870 (arguments
871 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
872 (propagated-inputs
873 `(("python-zope-proxy" ,python-zope-proxy)
874 ("python-zope-schema" ,python-zope-schema)))
9be5ecdf 875 (home-page "https://pypi.python.org/pypi/zope.location/")
1b2f753d
LC
876 (synopsis "Zope location library")
877 (description "Zope.location implements the concept of \"locations\" in
878Zope3, which are are special objects that have a structural location.")
879 (license license:zpl2.1)))
880
881(define-public python2-zope-location
882 (package-with-python2 python-zope-location))
883
884(define-public python-zope-security
885 (package
886 (name "python-zope-security")
887 (version "4.0.3")
888 (source
889 (origin
890 (method url-fetch)
891 (uri (string-append "https://pypi.python.org/packages/source/z"
892 "/zope.security/zope.security-" version ".tar.gz"))
893 (sha256
894 (base32
895 "14zmf684amc0x32kq05yxnhfqd1cmyhafkw05gn81rn90zjv6ssy"))))
896 (build-system python-build-system)
897 (arguments
898 '(#:tests? #f)) ; FIXME: Tests can't find zope.testrunner.
899 (propagated-inputs
900 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
901 ("python-zope-proxy" ,python-zope-proxy)
902 ("python-zope-schema" ,python-zope-schema)))
903 (native-inputs
904 `(("python-six" ,python-six)
905 ("python-zope-component" ,python-zope-component)
906 ("python-zope-configuration" ,python-zope-configuration)
907 ("python-zope-location" ,python-zope-location)
908 ("python-zope-testrunner" ,python-zope-testrunner)
909 ("python-zope-testing" ,python-zope-testing)))
9be5ecdf 910 (home-page "https://pypi.python.org/pypi/zope.security")
1b2f753d
LC
911 (synopsis "Zope security framework")
912 (description "Zope.security provides a generic mechanism to implement
913security policies on Python objects.")
914 (license license:zpl2.1)))
915
916(define-public python2-zope-security
917 (let ((zope-security (package-with-python2 python-zope-security)))
918 (package (inherit zope-security)
919 (propagated-inputs
920 `(("python2-zope-testrunner" ,python2-zope-testrunner)
921 ,@(alist-delete
922 "python-zope-testrunner"
923 (package-propagated-inputs zope-security)))))))
924
925(define-public python-zope-component
926 (package
927 (name "python-zope-component")
928 (version "4.3.0")
929 (source
930 (origin
931 (method url-fetch)
932 (uri (pypi-uri "zope.component" version))
933 (sha256
934 (base32
935 "1hlvzwj1kcfz1qms1dzhwsshpsf38z9clmyksb1gh41n8k3kchdv"))))
936 (build-system python-build-system)
937 (arguments
938 ;; Skip tests due to circular dependency with python-zope-security.
939 '(#:tests? #f))
940 (native-inputs
941 `(("python-zope-testing" ,python-zope-testing)))
942 (propagated-inputs
943 `(("python-zope-event" ,python-zope-event)
944 ("python-zope-interface" ,python-zope-interface)
945 ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
946 ("python-zope-configuration" ,python-zope-configuration)))
947 (home-page "https://github.com/zopefoundation/zope.component")
948 (synopsis "Zope Component Architecture")
949 (description "Zope.component represents the core of the Zope Component
950Architecture. Together with the zope.interface package, it provides
951facilities for defining, registering and looking up components.")
952 (license license:zpl2.1)))
953
954(define-public python2-zope-component
955 (package-with-python2 python-zope-component))
956
957(define-public python-ndg-httpsclient
958 (package
959 (name "python-ndg-httpsclient")
960 (version "0.4.2")
961 (source (origin
962 (method url-fetch)
963 (uri (pypi-uri "ndg_httpsclient" version))
964 (sha256
965 (base32
966 "1b5qirv46v4dpnmfqviwq42mdwfcby4dxmz0i41wad2337pqf2aq"))))
967 (build-system python-build-system)
968 (arguments
969 '(;; The tests appear to require networking.
970 #:tests? #f))
971 (propagated-inputs
972 `(("python-pyopenssl" ,python-pyopenssl)))
973 (synopsis "HTTPS support for Python's httplib and urllib2")
974 (description "This is a HTTPS client implementation for httplib and urllib2
975based on PyOpenSSL. PyOpenSSL provides a more fully featured SSL implementation
976over the default provided with Python and importantly enables full verification
977of the SSL peer.")
978 (home-page "https://github.com/cedadev/ndg_httpsclient/")
979 (license license:bsd-3)))
980
981;; python2-openssl requires special care, so package-with-python2 is
982;; insufficient.
983(define-public python2-ndg-httpsclient
984 (package (inherit python-ndg-httpsclient)
985 (name "python2-ndg-httpsclient")
986 (arguments `(#:python ,python-2))
987 (propagated-inputs
988 `(("python2-pyopenssl" ,python2-pyopenssl)))))
989
990(define-public python-websocket-client
991 (package
992 (name "python-websocket-client")
993 (version "0.37.0")
994 (source
995 (origin
996 (method url-fetch)
997 (uri (pypi-uri "websocket_client" version))
998 (sha256
999 (base32
1000 "0h9glp1jll3z76ly3kg08aqgxqk0a68p4zi9yn50353bh5nj92v7"))))
1001 (build-system python-build-system)
1002 (propagated-inputs
1003 `(("python-six" ,python-six)))
1004 (home-page "https://github.com/liris/websocket-client")
1005 (synopsis "WebSocket client for Python")
1006 (description "The Websocket-client module provides the low level APIs for
1007WebSocket usage in Python programs.")
1008 (license license:lgpl2.1+)))
1009
1010(define-public python2-websocket-client
1011 (package-with-python2 python-websocket-client))
1012
589e3f4e
LC
1013(define-public python-requests
1014 (package
1015 (name "python-requests")
1016 (version "2.13.0")
1017 (source (origin
1018 (method url-fetch)
1019 (uri (pypi-uri "requests" version))
1020 (sha256
1021 (base32
1022 "1s0wg4any4dsv5l3hqjxqk2zgb7pdbqhy9rhc8kh3aigfq4ws8jp"))))
1023 ;; TODO: unbundle urllib3 and chardet.
1024 (build-system python-build-system)
1025 (arguments
1026 ;; FIXME: Some tests require network access.
1027 '(#:tests? #f))
1028 (home-page "http://python-requests.org/")
1029 (synopsis "Python HTTP library")
1030 (description
1031 "Requests is a Python HTTP client library. It aims to be easier to use
1032than Python’s urllib2 library.")
1033 (license license:asl2.0)))
1034
1035;; Some software requires an older version of Requests, notably Docker
1036;; Compose.
1037(define-public python-requests-2.7
1038 (package (inherit python-requests)
1039 (version "2.7.0")
1040 (source (origin
1041 (method url-fetch)
1042 (uri (pypi-uri "requests" version))
1043 (sha256
1044 (base32
1045 "0gdr9dxm24amxpbyqpbh3lbwxc2i42hnqv50sigx568qssv3v2ir"))))))
1046
1047(define-public python2-requests
1048 (package-with-python2 python-requests))
1049
1b2f753d
LC
1050(define-public python-requests-mock
1051 (package
1052 (name "python-requests-mock")
1053 (version "1.3.0")
1054 (source
1055 (origin
1056 (method url-fetch)
1057 (uri (pypi-uri "requests-mock" version))
1058 (sha256
1059 (base32
1060 "0jr997dvk6zbmhvbpcv3rajrgag69mcsm1ai3w3rgk2jdh6rg1mx"))))
1061 (build-system python-build-system)
1062 (propagated-inputs
1063 `(("python-requests" ,python-requests)
1064 ("python-six" ,python-six)))
1065 (native-inputs
1066 `(("python-pbr" ,python-pbr)
1067 ("python-discover" ,python-discover)
1068 ("python-docutils" ,python-docutils)
1069 ("python-fixtures" ,python-fixtures)
1070 ("python-mock" ,python-mock)
1071 ("python-sphinx" ,python-sphinx)
1072 ("python-testrepository" ,python-testrepository)
1073 ("python-testtools" ,python-testtools)))
1074 (home-page "https://requests-mock.readthedocs.org/")
1075 (synopsis "Mock out responses from the requests package")
1076 (description
1077 "This module provides a building block to stub out the HTTP requests
1078portions of your testing code.")
1079 (properties `((python2-variant . ,(delay python2-requests-mock))))
1080 (license license:asl2.0)))
1081
1082(define-public python2-requests-mock
1083 (package (inherit (package-with-python2
1084 (strip-python2-variant python-requests-mock)))
1085 (arguments
1086 `(#:python ,python-2
1087 ;; FIXME: 'subunit.run discover: error: no such option: --list'
1088 #:tests? #f))))
1089
1090(define-public python-requests-toolbelt
1091 (package
1092 (name "python-requests-toolbelt")
1093 (version "0.8.0")
1094 (source (origin
1095 (method url-fetch)
1096 (uri (pypi-uri "requests-toolbelt" version))
1097 (sha256
1098 (base32
1099 "1dc7l42i4080r8i4m9fj51jx367lqkai170vrv7wd93gdj9k39gn"))))
1100 (build-system python-build-system)
1101 (native-inputs
1102 `(("python-betamax" ,python-betamax)
1103 ("python-mock" ,python-mock)
1104 ("python-pytest" ,python-pytest)))
1105 (propagated-inputs
1106 `(("python-requests" ,python-requests)))
1107 (synopsis "Extensions to python-requests")
1108 (description "This is a toolbelt of useful classes and functions to be used
1109with python-requests.")
1110 (home-page "https://github.com/sigmavirus24/requests-toolbelt")
1111 (license license:asl2.0)))
1112
1113(define-public python2-requests-toolbelt
1114 (package-with-python2 python-requests-toolbelt))
1115
589e3f4e
LC
1116(define-public python-oauthlib
1117 (package
1118 (name "python-oauthlib")
1119 (version "1.0.3")
1120 (source (origin
1121 (method url-fetch)
1122 (uri (pypi-uri "oauthlib" version))
1123 (sha256
1124 (base32
1125 "1bfrj70vdjxjw74khbyh6f0dksv7p5rh2346jnlrffyacd3gwjzg"))))
1126 (build-system python-build-system)
1127 (native-inputs
1128 `(("python-nose" ,python-nose)
1129 ("python-mock" ,python-mock)
1130 ("python-cryptography" ,python-cryptography)
1131 ("python-pyjwt" ,python-pyjwt)
1132 ("python-blinker" ,python-blinker)))
1133 (home-page "https://github.com/idan/oauthlib")
1134 (synopsis "OAuth implementation for Python")
1135 (description
1136 "Oauthlib is a generic, spec-compliant, thorough implementation of the
1137OAuth request-signing logic.")
1138 (license license:bsd-3)
1139 (properties `((python2-variant . ,(delay python2-oauthlib))))))
1140
1141(define-public python2-oauthlib
1142 (let ((base (package-with-python2 (strip-python2-variant python-oauthlib))))
1143 (package
1144 (inherit base)
1145 (native-inputs `(("python2-unittest2" ,python2-unittest2)
1146 ,@(package-native-inputs base))))))
1147
1b2f753d
LC
1148(define-public python-rauth
1149 (package
1150 (name "python-rauth")
1151 (version "0.7.3")
1152 (source
1153 (origin
1154 (method url-fetch)
1155 (uri (pypi-uri "rauth" version))
1156 (sha256
1157 (base32
1158 "02kv8w8l98ky223avyq7vw7x1f2ya9chrm59r77ylq45qb0xnk2j"))))
1159 (build-system python-build-system)
1160 (arguments
1161 `(#:test-target "check"))
1162 (propagated-inputs
1163 `(("python-requests" ,python-requests)))
1164 (home-page "https://github.com/litl/rauth")
1165 (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
1166 (description
1167 "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly. It also
1168provides service wrappers for convenient connection initialization and
1169authenticated session objects providing things like keep-alive.")
1170 (license license:expat)
1171 (properties `((python2-variant . ,(delay python2-rauth))))))
1172
1173(define-public python2-rauth
1174 (let ((base (package-with-python2 (strip-python2-variant python-rauth))))
1175 (package
1176 (inherit base)
1177 (native-inputs `(("python2-unittest2" ,python2-unittest2)
1178 ,@(package-native-inputs base))))))
1179
1180(define-public python-urllib3
1181 (package
1182 (name "python-urllib3")
1183 (version "1.18.1")
1184 (source
1185 (origin
1186 (method url-fetch)
1187 (uri (pypi-uri "urllib3" version))
1188 (sha256
1189 (base32
1190 "1wb8aqnq53vzh2amrv8kc66f3h6fx217y0q62y6n30a64p2yqmam"))))
1191 (build-system python-build-system)
1192 (arguments `(#:tests? #f))
1193 (native-inputs
1194 `(;; some packages for tests
1195 ("python-nose" ,python-nose)
1196 ("python-mock" ,python-mock)
1197 ("python-tornado" ,python-tornado)))
1198 (propagated-inputs
1199 `(;; These 5 inputs are used to build urrlib3[secure]
1200 ("python-certifi" ,python-certifi)
1201 ("python-cryptography" ,python-cryptography) ;
1202 ("python-idna" ,python-idna)
1203 ("python-ipaddress" ,python-ipaddress)
1204 ("python-pyopenssl" ,python-pyopenssl)))
1205 (home-page "https://urllib3.readthedocs.org/")
1206 (synopsis "HTTP library with thread-safe connection pooling")
1207 (description
1208 "Urllib3 supports features left out of urllib and urllib2 libraries. It
1209can reuse the same socket connection for multiple requests, it can POST files,
1210supports url redirection and retries, and also gzip and deflate decoding.")
1211 (license license:expat)))
1212
1213(define-public python2-urllib3
1214 (package-with-python2 python-urllib3))
1215
1216(define-public awscli
1217 (package
1218 (name "awscli")
52b617ff 1219 (version "1.11.185")
1b2f753d
LC
1220 (source
1221 (origin
1222 (method url-fetch)
1223 (uri (pypi-uri name version))
1224 (sha256
1225 (base32
52b617ff 1226 "18rskl6sla456z4hkq2gmmm03fqc4rqw5pfiqdyc7a2v9kljv4ah"))))
1b2f753d
LC
1227 (build-system python-build-system)
1228 (propagated-inputs
1229 `(("python-colorama" ,python-colorama)
1230 ("python-botocore" ,python-botocore)
1231 ("python-s3transfer" ,python-s3transfer)
1232 ("python-docutils" ,python-docutils)
1233 ("python-pyyaml" ,python-pyyaml)
1234 ("python-rsa" ,python-rsa)))
1235 (arguments
1236 ;; FIXME: The 'pypi' release does not contain tests.
1237 '(#:tests? #f))
1238 (home-page "https://aws.amazon.com/cli/")
1239 (synopsis "Command line client for AWS")
1240 (description "AWS CLI provides a unified command line interface to the
1241Amazon Web Services (AWS) API.")
1242 (license license:asl2.0)))
1243
1244(define-public python-wsgiproxy2
1245 (package
1246 (name "python-wsgiproxy2")
1247 (version "0.4.2")
1248 (source
1249 (origin
1250 (method url-fetch)
1251 (uri (pypi-uri "WSGIProxy2" version ".zip"))
1252 (sha256
1253 (base32
1254 "13kf9bdxrc95y9vriaz0viry3ah11nz4rlrykcfvb8nlqpx3dcm4"))))
1255 (build-system python-build-system)
1256 (arguments
1257 '(;; Wsgiproxy2's test suite requires Restkit, which does not yet fully
1258 ;; support Python 3:
1259 ;; https://github.com/benoitc/restkit/issues/140
1260 #:tests? #f))
1261 (native-inputs
1262 `(("unzip" ,unzip)
1263 ("python-nose" ,python-nose)
1264 ("python-coverage" ,python-coverage)))
1265 (propagated-inputs
1266 `(("python-six" ,python-six)
1267 ("python-webob" ,python-webob)))
1268 (home-page
1269 "https://github.com/gawel/WSGIProxy2/")
1270 (synopsis "WSGI Proxy with various http client backends")
1271 (description "WSGI turns HTTP requests into WSGI function calls.
1272WSGIProxy turns WSGI function calls into HTTP requests.
1273It also includes code to sign requests and pass private data,
1274and to spawn subprocesses to handle requests.")
1275 (license license:expat)))
1276
1277(define-public python2-wsgiproxy2
1278 (package-with-python2 python-wsgiproxy2))
1279
1280(define-public python-pastedeploy
1281 (package
1282 (name "python-pastedeploy")
1283 (version "1.5.2")
1284 (source
1285 (origin
1286 (method url-fetch)
1287 (uri (pypi-uri "PasteDeploy" version))
1288 (sha256
1289 (base32
1290 "1jz3m4hq8v6hyhfjz9425nd3nvn52cvbfipdcd72krjmla4qz1fm"))))
1291 (build-system python-build-system)
1292 (native-inputs
1293 `(("python-nose" ,python-nose)))
1294 (home-page "http://pythonpaste.org/deploy/")
1295 (synopsis
1296 "Load, configure, and compose WSGI applications and servers")
1297 (description
1298 "This tool provides code to load WSGI applications and servers from URIs;
1299these URIs can refer to Python Eggs for INI-style configuration files. Paste
1300Script provides commands to serve applications based on this configuration
1301file.")
1302 (license license:expat)))
1303
1304(define-public python2-pastedeploy
1305 (package-with-python2 python-pastedeploy))
1306
1307(define-public python-webtest
1308 (package
1309 (name "python-webtest")
1310 (version "2.0.20")
1311 (source
1312 (origin
1313 (method url-fetch)
1314 (uri (pypi-uri "WebTest" version))
1315 (sha256
1316 (base32
1317 "0bv0qhdjakdsdgj4sk21gnpp8xp8bga4x03p6gjb83ihrsb7n4xv"))))
1318 (build-system python-build-system)
1319 (arguments
1320 `(;; Unfortunately we have to disable tests!
1321 ;; This release of WebTest is pinned to python-nose < 1.3,
1322 ;; but older versions of python-nose are plagued with the following
1323 ;; bug(s), which rears its ugly head during test execution:
1324 ;; https://github.com/nose-devs/nose/issues/759
1325 ;; https://github.com/nose-devs/nose/pull/811
1326 #:tests? #f))
1327 ;; Commented out code is no good, but in this case, once tests
1328 ;; are ready to be enabled again, we should put the following
1329 ;; in place:
1330 ;; (native-inputs
1331 ;; `(("python-nose" ,python-nose) ; technially < 1.3,
1332 ;; ; but see above comment
1333 ;; ("python-coverage" ,python-coverage)
1334 ;; ("python-mock" ,python-mock)
1335 ;; ("python-pastedeploy" ,python-pastedeploy)
1336 ;; ("python-wsgiproxy2" ,python-wsgiproxy2)
1337 ;; ("python-pyquery" ,python-pyquery)))
1338 (propagated-inputs
1339 `(("python-waitress" ,python-waitress)
1340 ("python-webob" ,python-webob)
1341 ("python-six" ,python-six)
1342 ("python-beautifulsoup4" ,python-beautifulsoup4)))
1343 (home-page "http://webtest.pythonpaste.org/")
1344 (synopsis "Helper to test WSGI applications")
1345 (description "Webtest allows you to test your Python web applications
1346without starting an HTTP server. It supports anything that supports the
1347minimum of WSGI.")
1348 (license license:expat)))
1349
1350(define-public python2-webtest
1351 (package-with-python2 python-webtest))
1352
1353(define-public python-flask
1354 (package
1355 (name "python-flask")
1356 (version "0.11.1")
1357 (source (origin
1358 (method url-fetch)
1359 (uri (pypi-uri "Flask" version))
1360 (sha256
1361 (base32
1362 "03kbfll4sj3v5z7r31c7bhfpi11r1np076d4p1k2kg4yzcmkywdl"))))
1363 (build-system python-build-system)
1364 (propagated-inputs
1365 `(("python-itsdangerous" ,python-itsdangerous)
1366 ("python-jinja2" ,python-jinja2)
1367 ("python-click" ,python-click)
1368 ("python-werkzeug" ,python-werkzeug)))
1369 (home-page "https://github.com/mitsuhiko/flask/")
1370 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
1371 (description "Flask is a micro web framework based on the Werkzeug toolkit
1372and Jinja2 template engine. It is called a micro framework because it does not
1373presume or force a developer to use a particular tool or library.")
1374 (license license:bsd-3)))
1375
1376(define-public python2-flask
1377 (package-with-python2 python-flask))
1378
1379(define-public python-flask-wtf
1380 (package
1381 (name "python-flask-wtf")
1382 (version "0.13.1")
1383 (source
1384 (origin
1385 (method url-fetch)
1386 (uri (pypi-uri "Flask-WTF" version))
1387 (sha256
1388 (base32
1389 "04l5743j2dici46038sqlzvf0xzpg8rf7s9ld2x24xv7f4idg990"))))
1390 (build-system python-build-system)
1391 (arguments
1392 '(#:phases
1393 (modify-phases %standard-phases
1394 (add-before 'check 'drop-failing-test
1395 (lambda _
1396 ;; FIXME: This file tries resolving an external server, which
1397 ;; fails. Try to patch out the offending section instead of
1398 ;; deleting the whole thing.
1399 (delete-file "tests/test_recaptcha.py")
1400 #t)))))
1401 (propagated-inputs
1402 `(("python-flask-babel" ,python-flask-babel)
1403 ("python-babel" ,python-babel)
1404 ("python-wtforms" ,python-wtforms)))
1405 (native-inputs
1406 `(("python-nose" ,python-nose)))
1407 (home-page "https://github.com/lepture/flask-wtf")
1408 (synopsis "Simple integration of Flask and WTForms")
1409 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
1410upload, and reCAPTCHA.")
1411 (license license:bsd-3)))
1412
1413(define-public python2-flask-wtf
1414 (package-with-python2 python-flask-wtf))
1415
1416(define-public python-flask-multistatic
1417 (package
1418 (name "python-flask-multistatic")
1419 (version "1.0")
1420 (source
1421 (origin
1422 (method url-fetch)
1423 (uri (pypi-uri "flask-multistatic" version))
1424 (sha256
1425 (base32
1426 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
1427 (build-system python-build-system)
1428 (propagated-inputs
1429 `(("python-flask" ,python-flask)))
1430 (home-page "https://pagure.io/flask-multistatic")
1431 (synopsis "Flask plugin to allow overriding static files")
1432 (description "@code{flask-multistatic} is a flask plugin that adds support
1433for overriding static files.")
1434 (license license:gpl3+)))
1435
1436(define-public python2-flask-multistatic
1437 (package-with-python2 python-flask-multistatic))
1438
1439(define-public python-cookies
1440 (package
1441 (name "python-cookies")
1442 (version "2.2.1")
1443 (source (origin
1444 (method url-fetch)
1445 (uri (pypi-uri "cookies" version))
1446 (sha256
1447 (base32
1448 "13pfndz8vbk4p2a44cfbjsypjarkrall71pgc97glk5fiiw9idnn"))))
1449 (build-system python-build-system)
1450 (arguments
1451 `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
1452 #:tests? #f))
1453 (native-inputs
1454 `(("python-pytest" ,python2-pytest)))
1455 (synopsis "HTTP cookie parser and renderer")
1456 (description "A RFC 6265-compliant HTTP cookie parser and renderer in
1457Python.")
1458 (home-page "https://gitlab.com/sashahart/cookies")
1459 (license license:expat)))
1460
1461(define-public python2-cookies
1462 (package-with-python2 python-cookies))
1463
1464(define-public python-responses
1465 (package
1466 (name "python-responses")
1467 (version "0.5.1")
1468 (source (origin
1469 (method url-fetch)
1470 (uri (pypi-uri "responses" version))
1471 (sha256
1472 (base32
1473 "1spcfxixyk9k7pk82jm6zqkwk031s95lh8q0mz7539jrb7269bcc"))))
1474 (build-system python-build-system)
1475 (arguments
1476 `(;; Test suite is not distributed:
1477 ;; https://github.com/getsentry/responses/issues/38
1478 #:tests? #f))
1479 (native-inputs
1480 `(("python-mock" ,python-mock)))
1481 (propagated-inputs
1482 `(("python-requests" ,python-requests)
1483 ("python-cookies" ,python-cookies)
1484 ("python-six" ,python-six)))
1485 (home-page "https://github.com/getsentry/responses")
1486 (synopsis "Utility for mocking out the `requests` Python library")
1487 (description "A utility library for mocking out the `requests` Python
1488library.")
1489 (license license:asl2.0)))
1490
1491(define-public python2-responses
1492 (package-with-python2 python-responses))
1493
1494(define-public python-geventhttpclient
1495 (package
1496 (name "python-geventhttpclient")
1497 (version "1.3.1")
1498 (source (origin
1499 (method url-fetch)
1500 (uri (pypi-uri "geventhttpclient" version))
1501 (sha256
1502 (base32
1503 "07d0q3wzmml75227r6y6mrl5a0zpf4v9gj0ni5rhbyzmaj4az1xx"))
1504 (modules '((guix build utils)))
1505 (snippet
1506 '(begin
1507 ;; Delete pre-compiled files.
1508 (for-each delete-file (find-files "src/geventhttpclient"
1509 ".*\\.pyc"))
1510 #t))))
1511 (build-system python-build-system)
1512 (arguments
1513 '(#:phases
1514 (modify-phases %standard-phases
1515 (add-after 'unpack 'delete-network-tests
1516 (lambda _
1517 (delete-file "src/geventhttpclient/tests/test_client.py")
1518 #t))
1519 (delete 'check)
1520 (add-after 'install 'check
1521 (lambda* (#:key inputs outputs #:allow-other-keys)
1522 (add-installed-pythonpath inputs outputs)
1523 (zero? (system* "py.test" "src/geventhttpclient/tests" "-v")))))))
1524 (native-inputs
1525 `(("python-pytest" ,python-pytest)))
1526 (propagated-inputs
1527 `(("python-certifi" ,python-certifi)
1528 ("python-gevent" ,python-gevent)
1529 ("python-six" ,python-six)))
1530 (home-page "https://github.com/gwik/geventhttpclient")
1531 (synopsis "HTTP client library for gevent")
1532 (description "@code{python-geventhttpclient} is a high performance,
1533concurrent HTTP client library for python using @code{gevent}.")
1534 (license license:expat)))
1535
1536(define-public python2-geventhttpclient
1537 (package-with-python2 python-geventhttpclient))
1538
1539(define-public python-requests-oauthlib
1540 (package
1541 (name "python-requests-oauthlib")
1542 (version "0.6.2")
1543 (source
1544 (origin
1545 (method url-fetch)
1546 (uri (pypi-uri "requests-oauthlib" version))
1547 (sha256
1548 (base32
1549 "0ykff67sjcl227c23g0rxzfx34rr5bf21kwv0z3zmgk0lfmch7hn"))))
1550 (build-system python-build-system)
1551 (arguments
1552 `(#:phases
1553 (modify-phases %standard-phases
1554 ;; removes tests that require network access
1555 (add-before 'check 'pre-check
1556 (lambda _
1557 (delete-file "tests/test_core.py")
1558 #t)))))
1559 (native-inputs
1560 `(("python-requests-mock" ,python-requests-mock)
1561 ("python-mock" ,python-mock)))
1562 (propagated-inputs
1563 `(("python-oauthlib" ,python-oauthlib)
1564 ("python-requests" ,python-requests)))
1565 (home-page
1566 "https://github.com/requests/requests-oauthlib")
1567 (synopsis
1568 "OAuthlib authentication support for Requests")
1569 (description
1570 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
1571provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
1572 (license license:isc)))
1573
1574(define-public python2-requests-oauthlib
1575 (package-with-python2 python-requests-oauthlib))
1576
1577(define-public python-url
1578 (package
1579 (name "python-url")
1580 (version "0.2.0")
1581 (source (origin
1582 (method url-fetch)
1583 (uri (pypi-uri "url" version))
1584 (sha256
1585 (base32
1586 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
1587 (build-system python-build-system)
1588 (propagated-inputs
1589 `(("python-publicsuffix" ,python-publicsuffix)))
1590 (native-inputs
1591 `(("python-coverage" ,python-coverage)
1592 ("python-nose" ,python-nose)))
1593 (arguments
1594 `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
1595 (home-page "https://github.com/seomoz/url-py")
1596 (synopsis "URL Parsing")
1597 (description "Library for parsing urls.")
1598 (license license:expat)
1599 (properties `((python2-variant . ,(delay python2-url))))))
1600
1601(define-public python2-url
1602 (let ((base (package-with-python2 (strip-python2-variant python-url))))
1603 (package (inherit base)
1604 (propagated-inputs
1605 `(("python2-publicsuffix" ,python2-publicsuffix))))))
1606
1607(define-public python-cachecontrol
1608 (package
1609 (name "python-cachecontrol")
1610 (version "0.11.6")
1611 (source
1612 (origin
1613 (method url-fetch)
1614 ;; Pypi does not have tests.
1615 (uri (string-append
1616 "https://github.com/ionrock/cachecontrol/archive/v"
1617 version ".tar.gz"))
1618 (file-name (string-append name "-" version ".tar.gz"))
1619 (sha256
1620 (base32
1621 "0yj60d0f69a2l8p7y86k4zhzzm6rnxpq74sfl240pry9l0lfw2vw"))))
1622 (build-system python-build-system)
1623 (arguments
1624 `(#:phases
1625 (modify-phases %standard-phases
1626 (replace 'check
1627 (lambda _
1628 ;; Drop test that requires internet access.
1629 (delete-file "tests/test_regressions.py")
1630 (setenv "PYTHONPATH"
1631 (string-append (getcwd) "/build/lib:"
1632 (getenv "PYTHONPATH")))
1633 (zero? (system* "py.test" "-vv")))))))
1634 (native-inputs
1635 `(("python-pytest" ,python-pytest)
1636 ("python-redis" ,python-redis)
1637 ("python-webtest" ,python-webtest)
1638 ("python-mock" ,python-mock)))
1639 (propagated-inputs
1640 `(("python-requests" ,python-requests)
1641 ("python-lockfile" ,python-lockfile)))
1642 (home-page "https://github.com/ionrock/cachecontrol")
1643 (synopsis "The httplib2 caching algorithms for use with requests")
1644 (description "CacheControl is a port of the caching algorithms in
1645@code{httplib2} for use with @code{requests} session objects.")
1646 (license license:asl2.0)))
1647
1648(define-public python2-cachecontrol
1649 (package-with-python2 python-cachecontrol))
1650
1651(define-public python-betamax
1652 (package
1653 (name "python-betamax")
1654 (version "0.8.0")
1655 (source
1656 (origin
1657 (method url-fetch)
1658 (uri (pypi-uri "betamax" version))
1659 (sha256
1660 (base32
1661 "18f8v5gng3j773jlbbzx4rg1i4y2zw3m2l1zpmbvp8bh5a2q1i42"))))
1662 (build-system python-build-system)
1663 (arguments
1664 '(;; Many tests fail because they require networking.
1665 #:tests? #f))
1666 (propagated-inputs
1667 `(("python-requests" ,python-requests)))
1668 (home-page "https://github.com/sigmavirus24/betamax")
1669 (synopsis "Record HTTP interactions with python-requests")
1670 (description "Betamax will record your test suite's HTTP interactions and
1671replay them during future tests. It is designed to work with python-requests.")
1672 (license license:expat)))
1673
1674(define-public python2-betamax
1675 (package-with-python2 python-betamax))
1676
1677(define-public python-betamax-matchers
1678 (package
1679 (name "python-betamax-matchers")
1680 (version "0.4.0")
1681 (source
1682 (origin
1683 (method url-fetch)
1684 (uri (pypi-uri "betamax-matchers" version))
1685 (sha256
1686 (base32
1687 "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
1688 (build-system python-build-system)
1689 (propagated-inputs
1690 `(("python-betamax" ,python-betamax)
1691 ("python-requests-toolbelt" ,python-requests-toolbelt)))
1692 (home-page "https://github.com/sigmavirus24/betamax_matchers")
1693 (synopsis "VCR imitation for python-requests")
1694 (description "@code{betamax-matchers} provides a set of Matchers for
1695Betamax.")
1696 (license license:asl2.0)))
1697
1698(define-public python2-betamax-matchers
1699 (package-with-python2 python-betamax-matchers))
1700
1701(define-public python-s3transfer
1702 (package
1703 (name "python-s3transfer")
1704 (version "0.1.11")
1705 (source (origin
1706 (method url-fetch)
1707 (uri (pypi-uri "s3transfer" version))
1708 (sha256
1709 (base32
1710 "0yfrfnf404cxzn3iswibqjxklsl0b1lwgqiml6pwiqj79a7zbwbn"))))
1711 (build-system python-build-system)
1712 (arguments
1713 `(#:phases
1714 (modify-phases %standard-phases
1715 (replace 'check
1716 (lambda _
1717 ;; 7 of the 'integration' tests require network access or login
1718 ;; credentials.
1719 (zero? (system* "nosetests" "--exclude=integration")))))))
1720 (native-inputs
1721 `(("python-docutils" ,python-docutils)
1722 ("python-mock" ,python-mock)
1723 ("python-nose" ,python-nose)))
1724 (propagated-inputs
1725 `(("python-botocore" ,python-botocore)))
1726 (synopsis "Amazon S3 Transfer Manager")
1727 (description "S3transfer is a Python library for managing Amazon S3
1728transfers.")
1729 (home-page "https://github.com/boto/s3transfer")
1730 (license license:asl2.0)
1731 (properties `((python2-variant . ,(delay python2-s3transfer))))))
1732
1733(define-public python2-s3transfer
1734 (let ((base (package-with-python2 (strip-python2-variant python-s3transfer))))
1735 (package
1736 (inherit base)
1737 (native-inputs
1738 `(("python2-futures" ,python2-futures)
1739 ,@(package-native-inputs base))))))
1740
1741(define-public python-flask-restful
1742 (package
1743 (name "python-flask-restful")
1744 (version "0.3.5")
1745 (source
1746 (origin
1747 (method url-fetch)
1748 (uri (pypi-uri "Flask-RESTful" version))
1749 (sha256
1750 (base32
1751 "0hjcmdb56b7z4bkw848lxfkyrpnkwzmqn2dgnlv12mwvjpzsxr6c"))))
1752 (build-system python-build-system)
1753 (propagated-inputs
1754 `(("python-aniso8601" ,python-aniso8601)
1755 ("python-flask" ,python-flask)
1756 ("python-pycrypto" ,python-pycrypto)
1757 ("python-pytz" ,python-pytz)))
1758 (native-inputs
1759 `(;; Optional dependency of Flask. Tests need it.
1760 ("python-blinker" ,python-blinker)
1761 ("python-mock" ,python-mock) ; For tests
1762 ("python-nose" ,python-nose) ; For tests
1763 ("python-sphinx" ,python-sphinx)))
1764 (home-page
1765 "https://www.github.com/flask-restful/flask-restful/")
1766 (synopsis
1767 "Flask module for creating REST APIs")
1768 (description
1769 "This package contains a Flask module for creating REST APIs.")
1770 (license license:bsd-3)))
1771
1772(define-public python-flask-basicauth
1773 (package
1774 (name "python-flask-basicauth")
1775 (version "0.2.0")
1776 (source
1777 (origin
1778 (method url-fetch)
1779 (uri (pypi-uri "Flask-BasicAuth" version))
1780 (sha256
1781 (base32
1782 "1zq1spkjr4sjdnalpp8wl242kdqyk6fhbnhr8hi4r4f0km4bspnz"))))
1783 (build-system python-build-system)
1784 (propagated-inputs
1785 `(("python-flask" ,python-flask)))
1786 (home-page
1787 "https://github.com/jpvanhal/flask-basicauth")
1788 (synopsis
1789 "HTTP basic access authentication for Flask")
1790 (description
1791 "This package provides HTTP basic access authentication for Flask.")
1792 (license license:bsd-3)))
1793
1794(define-public python-flask-sqlalchemy
1795 (package
1796 (name "python-flask-sqlalchemy")
1797 (version "2.1")
1798 (source
1799 (origin
1800 (method url-fetch)
1801 (uri (pypi-uri "Flask-SQLAlchemy" version))
1802 (sha256
1803 (base32
1804 "1i9ps5d5snih9xlqhrvmi3qfiygkmqzxh92n25kj4pf89kj4s965"))))
1805 (build-system python-build-system)
1806 (propagated-inputs
1807 `(("python-flask" ,python-flask)
1808 ("python-sqlalchemy" ,python-sqlalchemy)))
1809 (home-page
1810 "https://github.com/mitsuhiko/flask-sqlalchemy")
1811 (synopsis
1812 "Module adding SQLAlchemy support to your Flask application")
1813 (description
1814 "This package adds SQLAlchemy support to your Flask application.")
1815 (license license:bsd-3)))
1816
1817(define-public python-flask-restplus
1818 (package
1819 (name "python-flask-restplus")
1820 (version "0.9.2")
1821 (source
1822 (origin
1823 (method url-fetch)
1824 (uri (pypi-uri "flask-restplus" version))
1825 (sha256
1826 (base32
1827 "11his6ii5brpkhld0d5bwzjjw4q3vmplpd6fmgzjrvvklsbk0cf4"))))
1828 (build-system python-build-system)
1829 (arguments
1830 '(#:tests? #f)) ; FIXME: 35/882 tests failing.
1831 ;; #:phases
1832 ;; (modify-phases %standard-phases
1833 ;; (replace 'check
1834 ;; (lambda _
1835 ;; (zero? (system* "nosetests")))))))
1836 (propagated-inputs
1837 `(("python-aniso8601" ,python-aniso8601)
1838 ("python-flask" ,python-flask)
1839 ("python-jsonschema" ,python-jsonschema)
1840 ("python-pytz" ,python-pytz)
1841 ("python-six" ,python-six)))
1842 (native-inputs
1843 `(("python-tzlocal" ,python-tzlocal)
1844 ("python-blinker" ,python-blinker)
1845 ("python-nose" ,python-nose)
1846 ("python-rednose" ,python-rednose)))
1847 (home-page "https://github.com/noirbizarre/flask-restplus")
1848 (synopsis "Framework for documented API development with Flask")
1849 (description "This package provides a framework for API development with
1850the Flask web framework in Python. It is similar to package
1851@code{python-flask-restful} but supports the @code{python-swagger}
1852documentation builder.")
1853 (license license:expat)))
1854
1855(define-public python-flask-restful-swagger
1856 (package
1857 (name "python-flask-restful-swagger")
1858 (version "0.19")
1859 (source
1860 (origin
1861 (method url-fetch)
1862 (uri (pypi-uri "flask-restful-swagger" version))
1863 (sha256
1864 (base32
1865 "16msl8hd5xjmj833bpy264v98cpl5hkw5bgl5gf5vgndxbv3rm6v"))))
1866 (build-system python-build-system)
1867 (propagated-inputs
1868 `(("python-flask-restful" ,python-flask-restful)))
1869 (home-page "https://github.com/rantav/flask-restful-swagger")
1870 (synopsis "Extract Swagger specs from Flask-Restful projects")
1871 (description "This package lets you extract Swagger API documentation
1872specs from your Flask-Restful projects.")
1873 (license license:expat)))
1874
1875(define-public python2-flask-restful-swagger
1876 (package-with-python2 python-flask-restful-swagger))
1877
1878(define-public python-htmlmin
1879 (package
1880 (name "python-htmlmin")
1881 (version "0.1.10")
1882 (source
1883 (origin
1884 (method url-fetch)
1885 (uri (pypi-uri "htmlmin" version))
1886 (sha256
1887 (base32
1888 "0qxa93j3p1ak32qh8d9kshqv8v3z0hkc13dwbhp5cn7sn3xmsp6a"))))
1889 (arguments
1890 `(#:tests? #f)) ;htmlmin has no tests
1891 (build-system python-build-system)
1892 (home-page "https://htmlmin.readthedocs.org/en/latest/")
1893 (synopsis "HTML minifier")
1894 (description "@code{htmlmin} is an HTML minifier that just works.
1895It comes with safe defaults and easily configurable options.")
1896 (license license:bsd-3)))
1897
1898(define-public python2-htmlmin
1899 (package-with-python2 python-htmlmin))
1900
1901(define-public python-flask-htmlmin
1902 (package
1903 (name "python-flask-htmlmin")
1904 (version "1.2")
1905 (source
1906 (origin
1907 (method url-fetch)
1908 (uri (pypi-uri "Flask-HTMLmin" version))
1909 (sha256
1910 (base32
1911 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
1912 (propagated-inputs
1913 `(("python-flask" ,python-flask)
1914 ("python-htmlmin" ,python-htmlmin)))
1915 (build-system python-build-system)
1916 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
1917 (synopsis "HTML response minifier for Flask")
1918 (description
1919 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
1920 (license license:bsd-3)))
1921
1922(define-public python2-flask-htmlmin
1923 (package-with-python2 python-flask-htmlmin))
1924
1925(define-public python-flask-login
1926 (package
1927 (name "python-flask-login")
1928 (version "0.4.0")
1929 (source
1930 (origin
1931 (method url-fetch)
1932 (uri (string-append "https://github.com/maxcountryman/flask-login/archive/"
1933 version ".tar.gz"))
1934 (file-name (string-append name "-" version ".tar.gz"))
1935 (sha256
1936 (base32
1937 "1pdqp7a2gyb7k06xda004x0fi2w66s6kn2i0ndkqndmg12d83f9w"))))
1938 (arguments
1939 ;; Tests fail PEP8 compliance. See:
1940 ;; https://github.com/maxcountryman/flask-login/issues/340
1941 `(#:tests? #f))
1942 (build-system python-build-system)
1943 (home-page "https://github.com/maxcountryman/flask-login")
1944 (synopsis "User session management for Flask")
1945 (description
1946 "@code{Flask-Login} provides user session management for Flask. It
1947handles the common tasks of logging in, logging out, and remembering your
1948users' sessions over extended periods of time.")
1949 (license license:expat)))
1950
1951(define-public python2-flask-login
1952 (package-with-python2 python-flask-login))
1953
1954(define-public python-oauth2client
1955 (package
1956 (name "python-oauth2client")
1957 (version "4.0.0")
1958 (source
1959 (origin
1960 (method url-fetch)
1961 (uri (pypi-uri "oauth2client" version))
1962 (sha256
1963 (base32
1964 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
1965 (build-system python-build-system)
1966 (arguments
1967 `(#:tests? #f))
1968 (propagated-inputs
1969 `(("python-httplib2" ,python-httplib2)
1970 ("python-pyasn1" ,python-pyasn1)
1971 ("python-pyasn1-modules" ,python-pyasn1-modules)
1972 ("python-rsa" ,python-rsa)
1973 ("python-six" ,python-six)))
9be5ecdf 1974 (home-page "https://github.com/google/oauth2client/")
1b2f753d
LC
1975 (synopsis "OAuth 2.0 client library")
1976 (description "@code{python-oauth2client} provides an OAuth 2.0 client
1977library for Python")
1978 (license license:asl2.0)))
1979
1980(define-public python-flask-oidc
1981 (package
1982 (name "python-flask-oidc")
1983 (version "1.1.1")
1984 (source
1985 (origin
1986 (method url-fetch)
1987 (uri (pypi-uri "flask-oidc" version))
1988 (sha256
1989 (base32
1990 "1ay5j0mf174bix7i67hclr95gv16z81fpx0dijvi0gydvdj3ddy2"))))
1991 (build-system python-build-system)
1992 (propagated-inputs
1993 `(("python-flask" ,python-flask)
1994 ("python-itsdangerous" ,python-itsdangerous)
1995 ("python-oauth2client" ,python-oauth2client)
1996 ("python-six" ,python-six)))
1997 (native-inputs
1998 `(("python-nose" ,python-nose)
1999 ("python-mock" ,python-mock)))
2000 (home-page "https://github.com/puiterwijk/flask-oidc")
2001 (synopsis "OpenID Connect extension for Flask")
2002 (description "@code{python-flask-oidc} provides an OpenID Connect extension
2003for Flask.")
2004 (license license:bsd-2)))
2005
2006(define-public python-webassets
2007 (package
2008 (name "python-webassets")
2009 (version "0.12.1")
2010 (source
2011 (origin
2012 (method url-fetch)
2013 (uri (pypi-uri "webassets" version))
2014 (sha256
2015 (base32
2016 "1nrqkpb7z46h2b77xafxihqv3322cwqv6293ngaky4j3ff4cing7"))))
2017 (build-system python-build-system)
2018 (native-inputs
2019 `(("python-jinja2" ,python-jinja2)
2020 ("python-mock" ,python-mock)
2021 ("python-nose" ,python-nose)
2022 ("python-pytest" ,python-pytest)))
2023 (home-page "https://github.com/miracle2k/webassets")
2024 (synopsis "Media asset management")
2025 (description "Merges, minifies and compresses Javascript and CSS files,
2026supporting a variety of different filters, including YUI, jsmin, jspacker or
2027CSS tidy. Also supports URL rewriting in CSS files.")
2028 (license license:bsd-2)))
2029
2030(define-public python-cssmin
2031 (package
2032 (name "python-cssmin")
2033 (version "0.2.0")
2034 (source
2035 (origin
2036 (method url-fetch)
2037 (uri (pypi-uri "cssmin" version))
2038 (sha256
2039 (base32
2040 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
2041 (build-system python-build-system)
2042 (home-page "https://github.com/zacharyvoase/cssmin")
2043 (synopsis "Python port of the YUI CSS Compressor")
2044 (description "Python port of the YUI CSS Compressor.")
2045 (license (list license:expat license:bsd-3))))
2046
2047(define-public python2-cssmin
2048 (package-with-python2 python-cssmin))
2049
2050(define-public python-elasticsearch
2051 (package
2052 (name "python-elasticsearch")
2053 (version "1.0.0")
2054 (source
2055 (origin
2056 (method url-fetch)
2057 (uri (pypi-uri "elasticsearch" version))
2058 (sha256
2059 (base32
2060 "1sdw1r05cw7ihnmng8ra9v968fj7bq6sji8i1dikymsnkcpgc69g"))))
2061 (build-system python-build-system)
2062 (native-inputs
2063 `(("python-mock" ,python-mock)
2064 ("python-nosexcover" ,python-nosexcover)
2065 ("python-pyaml" ,python-pyaml)
2066 ("python-requests" ,python-requests)))
2067 (propagated-inputs
2068 `(("urllib3" ,python-urllib3)))
2069 (arguments
2070 ;; tests require the test_elasticsearch module but it is not distributed.
2071 `(#:tests? #f))
2072 (home-page "https://github.com/elastic/elasticsearch-py")
2073 (synopsis "Low-level client for Elasticsearch")
2074 (description "Official low-level client for Elasticsearch. Its goal is to
2075provide common ground for all Elasticsearch-related code in Python; because of
2076this it tries to be opinion-free and very extendable.")
2077 (license license:expat)))
2078
2079(define-public python2-elasticsearch
2080 (package-with-python2 python-elasticsearch))
2081
2082(define-public python-flask-script
2083 (package
2084 (name "python-flask-script")
2085 (version "2.0.5")
2086 (source
2087 (origin
2088 (method url-fetch)
2089 (uri (pypi-uri "Flask-Script" version))
2090 (sha256
2091 (base32
2092 "0zqh2yq8zk7m9b4xw1ryqmrljkdigfb3hk5155a3b5hkfnn6xxyf"))))
2093 (build-system python-build-system)
2094 (propagated-inputs
2095 `(("python-flask" ,python-flask)
2096 ("python-argcomplete" ,python-argcomplete)
2097 ("python-werkzeug" ,python-werkzeug)))
2098 (native-inputs
2099 `(("python-pytest" ,python-pytest)))
2100 (home-page
9be5ecdf 2101 "https://github.com/smurfix/flask-script")
1b2f753d
LC
2102 (synopsis "Scripting support for Flask")
2103 (description "The Flask-Script extension provides support for writing
2104external scripts in Flask. This includes running a development server,
2105a customised Python shell, scripts to set up your database, cronjobs,
2106and other command-line tasks that belong outside the web application
2107itself.")
2108 (license license:bsd-3)))
2109
2110(define-public python2-flask-script
2111 (package-with-python2 python-flask-script))
2112
2113(define-public python-flask-migrate
2114 (package
2115 (name "python-flask-migrate")
2116 (version "2.0.3")
2117 (source
2118 (origin
2119 (method url-fetch)
2120 (uri (pypi-uri "Flask-Migrate" version))
2121 (sha256
2122 (base32
2123 "107x78lkqsnbg92dld3dkagg07jvchp3ib3y0sivc4ipz6n1y7rk"))))
2124 (build-system python-build-system)
2125 (propagated-inputs
2126 `(("python-flask" ,python-flask)
2127 ("python-alembic" ,python-alembic)
2128 ("python-sqlalchemy" ,python-sqlalchemy)
2129 ("python-flask-script" ,python-flask-script)
2130 ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)))
9be5ecdf 2131 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
1b2f753d
LC
2132 (synopsis "SQLAlchemy database migrations for Flask programs using
2133Alembic")
2134 (description "This package contains SQLAlchemy database migration tools
2135for Flask programs that are using @code{python-alembic}.")
2136 (license license:expat)))
2137
2138(define-public python2-flask-migrate
2139 (package-with-python2 python-flask-migrate))
2140
2141(define-public python-genshi
2142 (package
2143 (name "python-genshi")
2144 (version "0.7")
2145 (source
2146 (origin
2147 (method url-fetch)
2148 (uri (string-append
2149 "https://ftp.edgewall.org/pub/genshi/Genshi-"
2150 version ".tar.gz"))
2151 (patches
2152 (search-patches
2153 ;; The first 4 patches are in the master branch upstream.
2154 ;; See this as a reference https://genshi.edgewall.org/ticket/582
2155 ;; The last 2 are NOT in any branch.
2156 ;; They were sent as attachments to a ticket opened at
2157 ;; https://genshi.edgewall.org/ticket/602#no1
2158 "python-genshi-stripping-of-unsafe-script-tags.patch"
2159 "python-genshi-disable-speedups-on-python-3.3.patch"
2160 "python-genshi-isstring-helper.patch"
2161 "python-genshi-add-support-for-python-3.4-AST.patch"
2162 "python-genshi-fix-tests-on-python-3.5.patch"
2163 "python-genshi-buildable-on-python-2.7.patch"))
2164 (sha256
2165 (base32
2166 "0lkkbp6fbwzv0zda5iqc21rr7rdldkwh3hfabfjl9i4bwq14858x"))))
2167 (build-system python-build-system)
2168 (home-page "https://genshi.edgewall.org/")
2169 (synopsis "Toolkit for generation of output for the web")
2170 (description "Genshi is a Python library that provides an integrated set
2171of components for parsing, generating, and processing HTML, XML or other
2172textual content for output generation on the web.")
2173 (license license:bsd-3)))
2174
2175;; The linter here claims that patch file names should start with the package
2176;; name. But, in this case the patches are inherited from python-genshi with
2177;; the "python-genshi-" prefix instead of "python2-genshi-".
2178(define-public python2-genshi
2179 (package-with-python2 python-genshi))
2180
2181(define-public python-flask-principal
2182 (package
2183 (name "python-flask-principal")
2184 (version "0.4.0")
2185 (source
2186 (origin
2187 (method url-fetch)
2188 (uri (pypi-uri "Flask-Principal" version))
2189 (sha256
2190 (base32
2191 "0lwlr5smz8vfm5h9a9i7da3q1c24xqc6vm9jdywdpgxfbi5i7mpm"))))
2192 (build-system python-build-system)
2193 (propagated-inputs
2194 `(("python-blinker" ,python-blinker)))
2195 (native-inputs
2196 `(("python-flask" ,python-flask)
2197 ("python-nose" ,python-nose)))
2198 (home-page "http://packages.python.org/Flask-Principal/")
2199 (synopsis "Identity management for Flask")
2200 (description "@code{flask_principal} is a identity management library for
2201Flask. It supports managing both authentication and authorization data in a
2202thread-local variable.")
2203 (license license:expat)))
2204
2205(define-public python2-flask-principal
2206 (package-with-python2 python-flask-principal))
2207
2208(define-public python-flask-httpauth
2209 (package
2210 (name "python-flask-httpauth")
2211 (version "3.2.3")
2212 (source
2213 (origin
2214 (method url-fetch)
2215 (uri (pypi-uri "Flask-HTTPAuth" version))
2216 (sha256
2217 (base32
2218 "13gff5w1mqpzm5nccyg02v3ifb9ifqh5k866cssjhghhg6msfjsz"))))
2219 (build-system python-build-system)
2220 (native-inputs
2221 `(("python-flask" ,python-flask)))
9be5ecdf 2222 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
1b2f753d
LC
2223 (synopsis "Basic and Digest HTTP authentication for Flask routes")
2224 (description "@code{flask_httpauth} provides Basic and Digest HTTP
2225authentication for Flask routes.")
2226 (license license:expat)))
2227
2228(define-public python2-flask-httpauth
2229 (package-with-python2 python-flask-httpauth))
2230
2231(define-public python-uritemplate
2232 (package
2233 (name "python-uritemplate")
2234 (version "3.0.0")
2235 (source
2236 (origin
2237 (method url-fetch)
2238 (uri (pypi-uri "uritemplate" version))
2239 (sha256
2240 (base32
2241 "0781gm9g34wa0asc19dx81ng0nqq07igzv3bbvdqmz13pv7469n0"))))
2242 (build-system python-build-system)
2243 (home-page "https://uritemplate.readthedocs.org")
2244 (synopsis "Library to deal with URI Templates")
2245 (description "@code{uritemplate} provides Python library to deal with URI
2246Templates.")
2247 (license license:bsd-2)))
2248
2249(define-public python2-uritemplate
2250 (package-with-python2 python-uritemplate))
2251
589e3f4e
LC
2252(define-public python-publicsuffix
2253 (package
2254 (name "python-publicsuffix")
2255 (version "1.1.0")
2256 (source (origin
2257 (method url-fetch)
2258 (uri (pypi-uri "publicsuffix" version))
2259 (sha256
2260 (base32
2261 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
2262 (build-system python-build-system)
2263 (arguments
2264 `(#:tests? #f)) ; tests use the internet
2265 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
2266 (synopsis "Get suffix for a domain name")
2267 (description "Get a public suffix for a domain name using the Public Suffix
2268List.")
2269 (license license:expat)))
2270
2271(define-public python2-publicsuffix
2272 (package-with-python2 python-publicsuffix))
2273
2274(define-public python-publicsuffix2
2275 (package
2276 (name "python-publicsuffix2")
2277 (version "2.20160818")
2278 (source
2279 (origin
2280 (method url-fetch)
2281 (uri (pypi-uri "publicsuffix2" version ".tar.bz2"))
2282 (sha256
2283 (base32
2284 "1bb55yka9vkn7i6y1kjzxa516kh6v4gsrxa90w5wdz5p5n968r68"))))
2285 (build-system python-build-system)
2286 (arguments
2287 '(#:tests? #f)) ; The test suite requires network access.
2288 (home-page "https://github.com/pombredanne/python-publicsuffix2")
2289 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
2290 (description "Get a public suffix for a domain name using the Public Suffix
2291List. Forked from and using the same API as the publicsuffix package.")
2292 (license (list license:expat license:mpl2.0))))
2293
2294(define-public python2-publicsuffix2
2295 (package-with-python2 python-publicsuffix2))
98c6a025
RW
2296
2297(define-public python-werkzeug
2298 (package
2299 (name "python-werkzeug")
2300 (version "0.11.15")
2301 (source
2302 (origin
2303 (method url-fetch)
2304 (uri (pypi-uri "Werkzeug" version))
2305 (sha256
2306 (base32
2307 "1h5wycw8yj7q0grqsjnsqflmrlsdagvl2j4dsgdncci6mjc7fpa5"))))
2308 (build-system python-build-system)
2309 (native-inputs
2310 `(("python-pytest" ,python-pytest)))
2311 (home-page "http://werkzeug.pocoo.org/")
2312 (synopsis "Utilities for WSGI applications")
2313 (description "One of the most advanced WSGI utility modules. It includes a
2314powerful debugger, full-featured request and response objects, HTTP utilities to
2315handle entity tags, cache control headers, HTTP dates, cookie handling, file
2316uploads, a powerful URL routing system and a bunch of community-contributed
2317addon modules.")
2318 (license license:x11)))
2319
2320(define-public python2-werkzeug
2321 (package-with-python2 python-werkzeug))
2322
2323(define-public python-bottle
2324 (package
2325 (name "python-bottle")
2326 (version "0.12.13")
2327 (source
2328 (origin
2329 (method url-fetch)
2330 (uri (pypi-uri "bottle" version))
2331 (sha256
2332 (base32
2333 "0m9k2a7yxvggc4kw8fsvj381vgsvfcdshg5nzy6vwrxiw2p53drr"))))
2334 (build-system python-build-system)
2335 (home-page "http://bottlepy.org/")
2336 (synopsis "WSGI framework for small web-applications.")
2337 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
2338 (license license:expat)))
2339
2340(define-public python2-bottle
2341 (package-with-python2 python-bottle))
2342
2343(define-public python-wtforms
2344 (package
2345 (name "python-wtforms")
2346 (version "2.1")
2347 (source
2348 (origin
2349 (method url-fetch)
2350 (uri (pypi-uri "WTForms" version ".zip"))
2351 (sha256
2352 (base32
2353 "0vyl26y9cg409cfyj8rhqxazsdnd0jipgjw06civhrd53yyi1pzz"))))
2354 (build-system python-build-system)
2355 (arguments
2356 '(#:phases
2357 (modify-phases %standard-phases
2358 (add-after 'unpack 'remove-django-test
2359 ;; Don't fail the tests when the inputs for the optional tests cannot be found.
2360 (lambda _
2361 (substitute*
2362 "tests/runtests.py"
2363 (("'ext_django.tests', 'ext_sqlalchemy', 'ext_dateutil', 'locale_babel'") "")
2364 (("sys.stderr.write(\"### Disabled test '%s', dependency not found\n\" % name)") ""))
2365 #t)))))
2366 (native-inputs
2367 `(("unzip" ,unzip)))
2368 (home-page "http://wtforms.simplecodes.com/")
2369 (synopsis
2370 "Form validation and rendering library for Python web development")
2371 (description
2372 "WTForms is a flexible forms validation and rendering library
2373for Python web development. It is very similar to the web form API
2374available in Django, but is a standalone package.")
2375 (license license:bsd-3)))
2376
2377(define-public python2-wtforms
2378 (package-with-python2 python-wtforms))
2379
2380(define-public python-paste
2381 (package
2382 (name "python-paste")
2383 (version "2.0.3")
2384 (source
2385 (origin
2386 (method url-fetch)
2387 (uri (pypi-uri "Paste" version))
2388 (sha256
2389 (base32
2390 "062jk0nlxf6lb2wwj6zc20rlvrwsnikpkh90y0dn8cjch93s6ii3"))
2391 (patches (search-patches "python-paste-remove-website-test.patch"
2392 "python-paste-remove-timing-test.patch"))))
2393 (build-system python-build-system)
2394 (native-inputs
2395 `(("python-nose" ,python-nose)))
2396 (propagated-inputs
2397 `(("python-six" ,python-six)))
2398 (home-page "http://pythonpaste.org")
2399 (synopsis
2400 "Python web development tools, focusing on WSGI")
2401 (description
2402 "Paste provides a variety of web development tools and middleware which
2403can be nested together to build web applications. Paste's design closely
2404follows ideas flowing from WSGI (Web Standard Gateway Interface).")
2405 (license license:expat)))
2406
2407(define-public python2-paste
2408 (package-with-python2 python-paste))
2409
2410(define-public python-pastescript
2411 (package
2412 (name "python-pastescript")
2413 (version "2.0.2")
2414 (source
2415 (origin
2416 (method url-fetch)
2417 (uri (pypi-uri "PasteScript" version))
2418 (sha256
2419 (base32
2420 "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"))))
2421 (build-system python-build-system)
2422 (native-inputs
2423 `(("python-nose" ,python-nose)))
2424 (propagated-inputs
2425 `(("python-paste" ,python-paste)
2426 ("python-pastedeploy" ,python-pastedeploy)))
2427 (home-page "http://pythonpaste.org/script/")
2428 (arguments
2429 '(;; Unfortunately, this requires the latest unittest2,
2430 ;; but that requires traceback2 which requires linecache2 which requires
2431 ;; unittest2. So we're skipping tests for now.
2432 ;; (Note: Apparently linetest2 only needs unittest2 for its tests,
2433 ;; so in theory we could get around this situation somehow.)
2434 #:tests? #f))
2435 (synopsis
2436 "Pluggable command line tool for serving web applications and more")
2437 (description
2438 "PasteScript is a plugin-friendly command line tool which provides a
2439variety of features, from launching web applications to bootstrapping project
2440layouts.")
2441 (license license:expat)))
2442
2443(define-public python2-pastescript
2444 (package-with-python2 python-pastescript))