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