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