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