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