8056c862bd54c38773e764383f04c2c366b44ce3
[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 "1.0.2")
1587 (source (origin
1588 (method url-fetch)
1589 (uri (pypi-uri "flask" version))
1590 (sha256
1591 (base32
1592 "0j6f4a9rpfh25k1gp7azqhnni4mb4fgy50jammgjgddw1l3w0w92"))))
1593 (build-system python-build-system)
1594 (arguments
1595 '(#:phases
1596 (modify-phases %standard-phases
1597 (replace 'check
1598 (lambda _
1599 (invoke "python" "-m" "pytest"))))))
1600 (native-inputs
1601 `(("python-pytest" ,python-pytest)))
1602 (propagated-inputs
1603 `(("python-itsdangerous" ,python-itsdangerous)
1604 ("python-jinja2" ,python-jinja2)
1605 ("python-click" ,python-click)
1606 ("python-werkzeug" ,python-werkzeug)))
1607 (home-page "https://www.palletsprojects.com/p/flask/")
1608 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
1609 (description "Flask is a micro web framework based on the Werkzeug toolkit
1610 and Jinja2 template engine. It is called a micro framework because it does not
1611 presume or force a developer to use a particular tool or library.")
1612 (license license:bsd-3)))
1613
1614 (define-public python2-flask
1615 (package-with-python2 python-flask))
1616
1617 (define-public python-flask-wtf
1618 (package
1619 (name "python-flask-wtf")
1620 (version "0.13.1")
1621 (source
1622 (origin
1623 (method url-fetch)
1624 (uri (pypi-uri "Flask-WTF" version))
1625 (sha256
1626 (base32
1627 "04l5743j2dici46038sqlzvf0xzpg8rf7s9ld2x24xv7f4idg990"))))
1628 (build-system python-build-system)
1629 (arguments
1630 '(#:phases
1631 (modify-phases %standard-phases
1632 (add-before 'check 'drop-failing-test
1633 (lambda _
1634 ;; FIXME: This file tries resolving an external server, which
1635 ;; fails. Try to patch out the offending section instead of
1636 ;; deleting the whole thing.
1637 (delete-file "tests/test_recaptcha.py")
1638 #t)))))
1639 (propagated-inputs
1640 `(("python-flask-babel" ,python-flask-babel)
1641 ("python-babel" ,python-babel)
1642 ("python-wtforms" ,python-wtforms)))
1643 (native-inputs
1644 `(("python-nose" ,python-nose)))
1645 (home-page "https://github.com/lepture/flask-wtf")
1646 (synopsis "Simple integration of Flask and WTForms")
1647 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
1648 upload, and reCAPTCHA.")
1649 (license license:bsd-3)))
1650
1651 (define-public python2-flask-wtf
1652 (package-with-python2 python-flask-wtf))
1653
1654 (define-public python-flask-multistatic
1655 (package
1656 (name "python-flask-multistatic")
1657 (version "1.0")
1658 (source
1659 (origin
1660 (method url-fetch)
1661 (uri (pypi-uri "flask-multistatic" version))
1662 (sha256
1663 (base32
1664 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
1665 (build-system python-build-system)
1666 (propagated-inputs
1667 `(("python-flask" ,python-flask)))
1668 (home-page "https://pagure.io/flask-multistatic")
1669 (synopsis "Flask plugin to allow overriding static files")
1670 (description "@code{flask-multistatic} is a flask plugin that adds support
1671 for overriding static files.")
1672 (license license:gpl3+)))
1673
1674 (define-public python2-flask-multistatic
1675 (package-with-python2 python-flask-multistatic))
1676
1677 (define-public python-cookies
1678 (package
1679 (name "python-cookies")
1680 (version "2.2.1")
1681 (source (origin
1682 (method url-fetch)
1683 (uri (pypi-uri "cookies" version))
1684 (sha256
1685 (base32
1686 "13pfndz8vbk4p2a44cfbjsypjarkrall71pgc97glk5fiiw9idnn"))))
1687 (build-system python-build-system)
1688 (arguments
1689 `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
1690 #:tests? #f))
1691 (native-inputs
1692 `(("python-pytest" ,python2-pytest)))
1693 (synopsis "HTTP cookie parser and renderer")
1694 (description "A RFC 6265-compliant HTTP cookie parser and renderer in
1695 Python.")
1696 (home-page "https://gitlab.com/sashahart/cookies")
1697 (license license:expat)))
1698
1699 (define-public python2-cookies
1700 (package-with-python2 python-cookies))
1701
1702 (define-public python-responses
1703 (package
1704 (name "python-responses")
1705 (version "0.5.1")
1706 (source (origin
1707 (method url-fetch)
1708 (uri (pypi-uri "responses" version))
1709 (sha256
1710 (base32
1711 "1spcfxixyk9k7pk82jm6zqkwk031s95lh8q0mz7539jrb7269bcc"))))
1712 (build-system python-build-system)
1713 (arguments
1714 `(;; Test suite is not distributed:
1715 ;; https://github.com/getsentry/responses/issues/38
1716 #:tests? #f))
1717 (native-inputs
1718 `(("python-mock" ,python-mock)))
1719 (propagated-inputs
1720 `(("python-requests" ,python-requests)
1721 ("python-cookies" ,python-cookies)
1722 ("python-six" ,python-six)))
1723 (home-page "https://github.com/getsentry/responses")
1724 (synopsis "Utility for mocking out the `requests` Python library")
1725 (description "A utility library for mocking out the `requests` Python
1726 library.")
1727 (license license:asl2.0)))
1728
1729 (define-public python2-responses
1730 (package-with-python2 python-responses))
1731
1732 (define-public python-grequests
1733 (package
1734 (name "python-grequests")
1735 (version "0.3.0")
1736 (source
1737 (origin
1738 (method url-fetch)
1739 (uri (pypi-uri "grequests" version))
1740 (sha256
1741 (base32
1742 "1j9icncllbkv7x5719b20mx670c6q1jrdx1sakskkarvx3pc8h8g"))))
1743 (build-system python-build-system)
1744 (propagated-inputs
1745 `(("python-gevent" ,python-gevent)
1746 ("python-requests" ,python-requests)))
1747 (native-inputs
1748 `(("python-nose" ,python-nose)))
1749 (home-page "https://github.com/kennethreitz/grequests")
1750 (synopsis "Python library for asynchronous HTTP requests")
1751 (description "GRequests is a Python library that allows you to use
1752 @code{Requests} with @code{Gevent} to make asynchronous HTTP Requests easily")
1753 (license license:bsd-2)))
1754
1755 (define-public python-geventhttpclient
1756 (package
1757 (name "python-geventhttpclient")
1758 (version "1.3.1")
1759 (source (origin
1760 (method url-fetch)
1761 (uri (pypi-uri "geventhttpclient" version))
1762 (sha256
1763 (base32
1764 "07d0q3wzmml75227r6y6mrl5a0zpf4v9gj0ni5rhbyzmaj4az1xx"))
1765 (modules '((guix build utils)))
1766 (snippet
1767 '(begin
1768 ;; Delete pre-compiled files.
1769 (for-each delete-file (find-files "src/geventhttpclient"
1770 ".*\\.pyc"))
1771 #t))))
1772 (build-system python-build-system)
1773 (arguments
1774 '(#:phases
1775 (modify-phases %standard-phases
1776 (add-after 'unpack 'delete-network-tests
1777 (lambda _
1778 (delete-file "src/geventhttpclient/tests/test_client.py")
1779 #t))
1780 (delete 'check)
1781 (add-after 'install 'check
1782 (lambda* (#:key inputs outputs #:allow-other-keys)
1783 (add-installed-pythonpath inputs outputs)
1784 (invoke "py.test" "src/geventhttpclient/tests" "-v"
1785 ;; Append the test modules to sys.path to avoid
1786 ;; namespace conflict which breaks SSL tests.
1787 "--import-mode=append")
1788 #t)))))
1789 (native-inputs
1790 `(("python-pytest" ,python-pytest)))
1791 (propagated-inputs
1792 `(("python-certifi" ,python-certifi)
1793 ("python-gevent" ,python-gevent)
1794 ("python-six" ,python-six)))
1795 (home-page "https://github.com/gwik/geventhttpclient")
1796 (synopsis "HTTP client library for gevent")
1797 (description "@code{python-geventhttpclient} is a high performance,
1798 concurrent HTTP client library for python using @code{gevent}.")
1799 (license license:expat)))
1800
1801 (define-public python2-geventhttpclient
1802 (package-with-python2 python-geventhttpclient))
1803
1804 (define-public python-requests-oauthlib
1805 (package
1806 (name "python-requests-oauthlib")
1807 (version "0.6.2")
1808 (source
1809 (origin
1810 (method url-fetch)
1811 (uri (pypi-uri "requests-oauthlib" version))
1812 (sha256
1813 (base32
1814 "0ykff67sjcl227c23g0rxzfx34rr5bf21kwv0z3zmgk0lfmch7hn"))))
1815 (build-system python-build-system)
1816 (arguments
1817 `(#:phases
1818 (modify-phases %standard-phases
1819 ;; removes tests that require network access
1820 (add-before 'check 'pre-check
1821 (lambda _
1822 (delete-file "tests/test_core.py")
1823 #t)))))
1824 (native-inputs
1825 `(("python-requests-mock" ,python-requests-mock)
1826 ("python-mock" ,python-mock)))
1827 (propagated-inputs
1828 `(("python-oauthlib" ,python-oauthlib)
1829 ("python-requests" ,python-requests)))
1830 (home-page
1831 "https://github.com/requests/requests-oauthlib")
1832 (synopsis
1833 "OAuthlib authentication support for Requests")
1834 (description
1835 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
1836 provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
1837 (license license:isc)))
1838
1839 (define-public python2-requests-oauthlib
1840 (package-with-python2 python-requests-oauthlib))
1841
1842 (define-public python-url
1843 (package
1844 (name "python-url")
1845 (version "0.2.0")
1846 (source (origin
1847 (method url-fetch)
1848 (uri (pypi-uri "url" version))
1849 (sha256
1850 (base32
1851 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
1852 (build-system python-build-system)
1853 (propagated-inputs
1854 `(("python-publicsuffix" ,python-publicsuffix)))
1855 (native-inputs
1856 `(("python-coverage" ,python-coverage)
1857 ("python-nose" ,python-nose)))
1858 (arguments
1859 `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
1860 (home-page "https://github.com/seomoz/url-py")
1861 (synopsis "URL Parsing")
1862 (description "Library for parsing urls.")
1863 (license license:expat)
1864 (properties `((python2-variant . ,(delay python2-url))))))
1865
1866 (define-public python2-url
1867 (let ((base (package-with-python2 (strip-python2-variant python-url))))
1868 (package (inherit base)
1869 (propagated-inputs
1870 `(("python2-publicsuffix" ,python2-publicsuffix))))))
1871
1872 (define-public python-cachecontrol
1873 (package
1874 (name "python-cachecontrol")
1875 (version "0.11.6")
1876 (source
1877 (origin
1878 (method url-fetch)
1879 ;; Pypi does not have tests.
1880 (uri (string-append
1881 "https://github.com/ionrock/cachecontrol/archive/v"
1882 version ".tar.gz"))
1883 (file-name (string-append name "-" version ".tar.gz"))
1884 (sha256
1885 (base32
1886 "0yj60d0f69a2l8p7y86k4zhzzm6rnxpq74sfl240pry9l0lfw2vw"))))
1887 (build-system python-build-system)
1888 (arguments
1889 `(#:phases
1890 (modify-phases %standard-phases
1891 (replace 'check
1892 (lambda _
1893 ;; Drop test that requires internet access.
1894 (delete-file "tests/test_regressions.py")
1895 (setenv "PYTHONPATH"
1896 (string-append (getcwd) "/build/lib:"
1897 (getenv "PYTHONPATH")))
1898 (invoke "py.test" "-vv")
1899 #t)))))
1900 (native-inputs
1901 `(("python-pytest" ,python-pytest)
1902 ("python-redis" ,python-redis)
1903 ("python-webtest" ,python-webtest)
1904 ("python-mock" ,python-mock)))
1905 (propagated-inputs
1906 `(("python-requests" ,python-requests)
1907 ("python-lockfile" ,python-lockfile)))
1908 (home-page "https://github.com/ionrock/cachecontrol")
1909 (synopsis "The httplib2 caching algorithms for use with requests")
1910 (description "CacheControl is a port of the caching algorithms in
1911 @code{httplib2} for use with @code{requests} session objects.")
1912 (license license:asl2.0)))
1913
1914 (define-public python2-cachecontrol
1915 (package-with-python2 python-cachecontrol))
1916
1917 (define-public python-betamax
1918 (package
1919 (name "python-betamax")
1920 (version "0.8.1")
1921 (source
1922 (origin
1923 (method url-fetch)
1924 (uri (pypi-uri "betamax" version))
1925 (sha256
1926 (base32
1927 "1hki1c2vs7adq7zr56wi6i5bhrkia4s2ywpv2c98ibnczz709w2v"))))
1928 (build-system python-build-system)
1929 (arguments
1930 '(;; Many tests fail because they require networking.
1931 #:tests? #f))
1932 (propagated-inputs
1933 `(("python-requests" ,python-requests)))
1934 (home-page "https://github.com/sigmavirus24/betamax")
1935 (synopsis "Record HTTP interactions with python-requests")
1936 (description "Betamax will record your test suite's HTTP interactions and
1937 replay them during future tests. It is designed to work with python-requests.")
1938 (license license:expat)))
1939
1940 (define-public python2-betamax
1941 (package-with-python2 python-betamax))
1942
1943 (define-public python-betamax-matchers
1944 (package
1945 (name "python-betamax-matchers")
1946 (version "0.4.0")
1947 (source
1948 (origin
1949 (method url-fetch)
1950 (uri (pypi-uri "betamax-matchers" version))
1951 (sha256
1952 (base32
1953 "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
1954 (build-system python-build-system)
1955 (propagated-inputs
1956 `(("python-betamax" ,python-betamax)
1957 ("python-requests-toolbelt" ,python-requests-toolbelt)))
1958 (home-page "https://github.com/sigmavirus24/betamax_matchers")
1959 (synopsis "VCR imitation for python-requests")
1960 (description "@code{betamax-matchers} provides a set of Matchers for
1961 Betamax.")
1962 (license license:asl2.0)))
1963
1964 (define-public python2-betamax-matchers
1965 (package-with-python2 python-betamax-matchers))
1966
1967 (define-public python-s3transfer
1968 (package
1969 (name "python-s3transfer")
1970 (version "0.1.13")
1971 (source (origin
1972 (method url-fetch)
1973 (uri (pypi-uri "s3transfer" version))
1974 (sha256
1975 (base32
1976 "1harvyn1s8v54n1w5h7c0lg4bgjh68aylhg28s8n174q53h1ip4h"))))
1977 (build-system python-build-system)
1978 (arguments
1979 `(#:phases
1980 (modify-phases %standard-phases
1981 (replace 'check
1982 (lambda _
1983 ;; 7 of the 'integration' tests require network access or login
1984 ;; credentials.
1985 (invoke "nosetests" "--exclude=integration")
1986 #t)))))
1987 (native-inputs
1988 `(("python-docutils" ,python-docutils)
1989 ("python-mock" ,python-mock)
1990 ("python-nose" ,python-nose)))
1991 (propagated-inputs
1992 `(("python-botocore" ,python-botocore)))
1993 (synopsis "Amazon S3 Transfer Manager")
1994 (description "S3transfer is a Python library for managing Amazon S3
1995 transfers.")
1996 (home-page "https://github.com/boto/s3transfer")
1997 (license license:asl2.0)
1998 (properties `((python2-variant . ,(delay python2-s3transfer))))))
1999
2000 (define-public python2-s3transfer
2001 (let ((base (package-with-python2 (strip-python2-variant python-s3transfer))))
2002 (package
2003 (inherit base)
2004 (native-inputs
2005 `(("python2-futures" ,python2-futures)
2006 ,@(package-native-inputs base))))))
2007
2008 (define-public python-slimit
2009 (package
2010 (name "python-slimit")
2011 (version "0.8.1")
2012 (source
2013 (origin
2014 (method url-fetch)
2015 (uri (pypi-uri "slimit" version ".zip"))
2016 (sha256
2017 (base32
2018 "02vj2x728rs1127q2nc27frrqra4fczivnb7gch6n5lzi7pxqczl"))))
2019 (build-system python-build-system)
2020 (native-inputs
2021 `(("unzip" ,unzip)))
2022 (propagated-inputs
2023 `(("python-ply" ,python-ply)))
2024 (home-page "https://slimit.readthedocs.io/")
2025 (synopsis "JavaScript minifier, parser and lexer written in Python")
2026 (description
2027 "SlimIt is a JavaScript minifier written in Python. It compiles
2028 JavaScript into more compact code so that it downloads and runs faster.
2029 SlimIt also provides a library that includes a JavaScript parser, lexer,
2030 pretty printer and a tree visitor.")
2031 (license license:expat)))
2032
2033 (define-public python-flask-restful
2034 (package
2035 (name "python-flask-restful")
2036 (version "0.3.5")
2037 (source
2038 (origin
2039 (method url-fetch)
2040 (uri (pypi-uri "Flask-RESTful" version))
2041 (sha256
2042 (base32
2043 "0hjcmdb56b7z4bkw848lxfkyrpnkwzmqn2dgnlv12mwvjpzsxr6c"))))
2044 (build-system python-build-system)
2045 (propagated-inputs
2046 `(("python-aniso8601" ,python-aniso8601)
2047 ("python-flask" ,python-flask)
2048 ("python-pycrypto" ,python-pycrypto)
2049 ("python-pytz" ,python-pytz)))
2050 (native-inputs
2051 `(;; Optional dependency of Flask. Tests need it.
2052 ("python-blinker" ,python-blinker)
2053 ("python-mock" ,python-mock) ; For tests
2054 ("python-nose" ,python-nose) ; For tests
2055 ("python-sphinx" ,python-sphinx)))
2056 (home-page
2057 "https://www.github.com/flask-restful/flask-restful/")
2058 (synopsis
2059 "Flask module for creating REST APIs")
2060 (description
2061 "This package contains a Flask module for creating REST APIs.")
2062 (license license:bsd-3)))
2063
2064 (define-public python-flask-basicauth
2065 (package
2066 (name "python-flask-basicauth")
2067 (version "0.2.0")
2068 (source
2069 (origin
2070 (method url-fetch)
2071 (uri (pypi-uri "Flask-BasicAuth" version))
2072 (sha256
2073 (base32
2074 "1zq1spkjr4sjdnalpp8wl242kdqyk6fhbnhr8hi4r4f0km4bspnz"))))
2075 (build-system python-build-system)
2076 (propagated-inputs
2077 `(("python-flask" ,python-flask)))
2078 (home-page
2079 "https://github.com/jpvanhal/flask-basicauth")
2080 (synopsis
2081 "HTTP basic access authentication for Flask")
2082 (description
2083 "This package provides HTTP basic access authentication for Flask.")
2084 (license license:bsd-3)))
2085
2086 (define-public python-flask-sqlalchemy
2087 (package
2088 (name "python-flask-sqlalchemy")
2089 (version "2.1")
2090 (source
2091 (origin
2092 (method url-fetch)
2093 (uri (pypi-uri "Flask-SQLAlchemy" version))
2094 (sha256
2095 (base32
2096 "1i9ps5d5snih9xlqhrvmi3qfiygkmqzxh92n25kj4pf89kj4s965"))))
2097 (build-system python-build-system)
2098 (propagated-inputs
2099 `(("python-flask" ,python-flask)
2100 ("python-sqlalchemy" ,python-sqlalchemy)))
2101 (home-page
2102 "https://github.com/mitsuhiko/flask-sqlalchemy")
2103 (synopsis
2104 "Module adding SQLAlchemy support to your Flask application")
2105 (description
2106 "This package adds SQLAlchemy support to your Flask application.")
2107 (license license:bsd-3)))
2108
2109 (define-public python-flask-restplus
2110 (package
2111 (name "python-flask-restplus")
2112 (version "0.9.2")
2113 (source
2114 (origin
2115 (method url-fetch)
2116 (uri (pypi-uri "flask-restplus" version))
2117 (sha256
2118 (base32
2119 "11his6ii5brpkhld0d5bwzjjw4q3vmplpd6fmgzjrvvklsbk0cf4"))))
2120 (build-system python-build-system)
2121 (arguments
2122 '(#:tests? #f)) ; FIXME: 35/882 tests failing.
2123 ;; #:phases
2124 ;; (modify-phases %standard-phases
2125 ;; (replace 'check
2126 ;; (lambda _
2127 ;; (invoke "nosetests")
2128 ;; #t)))))
2129 (propagated-inputs
2130 `(("python-aniso8601" ,python-aniso8601)
2131 ("python-flask" ,python-flask)
2132 ("python-jsonschema" ,python-jsonschema)
2133 ("python-pytz" ,python-pytz)
2134 ("python-six" ,python-six)))
2135 (native-inputs
2136 `(("python-tzlocal" ,python-tzlocal)
2137 ("python-blinker" ,python-blinker)
2138 ("python-nose" ,python-nose)
2139 ("python-rednose" ,python-rednose)))
2140 (home-page "https://github.com/noirbizarre/flask-restplus")
2141 (synopsis "Framework for documented API development with Flask")
2142 (description "This package provides a framework for API development with
2143 the Flask web framework in Python. It is similar to package
2144 @code{python-flask-restful} but supports the @code{python-swagger}
2145 documentation builder.")
2146 (license license:expat)))
2147
2148 (define-public python-flask-restful-swagger
2149 (package
2150 (name "python-flask-restful-swagger")
2151 (version "0.19")
2152 (source
2153 (origin
2154 (method url-fetch)
2155 (uri (pypi-uri "flask-restful-swagger" version))
2156 (sha256
2157 (base32
2158 "16msl8hd5xjmj833bpy264v98cpl5hkw5bgl5gf5vgndxbv3rm6v"))))
2159 (build-system python-build-system)
2160 (propagated-inputs
2161 `(("python-flask-restful" ,python-flask-restful)))
2162 (home-page "https://github.com/rantav/flask-restful-swagger")
2163 (synopsis "Extract Swagger specs from Flask-Restful projects")
2164 (description "This package lets you extract Swagger API documentation
2165 specs from your Flask-Restful projects.")
2166 (license license:expat)))
2167
2168 (define-public python2-flask-restful-swagger
2169 (package-with-python2 python-flask-restful-swagger))
2170
2171 (define-public python-htmlmin
2172 (package
2173 (name "python-htmlmin")
2174 (version "0.1.12")
2175 (source
2176 (origin
2177 (method url-fetch)
2178 (uri (pypi-uri "htmlmin" version))
2179 (sha256
2180 (base32
2181 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
2182 (arguments
2183 `(#:tests? #f)) ; no tests
2184 (build-system python-build-system)
2185 (home-page "https://htmlmin.readthedocs.org/en/latest/")
2186 (synopsis "HTML minifier")
2187 (description "@code{htmlmin} is an HTML minifier that just works.
2188 It comes with safe defaults and easily configurable options.")
2189 (license license:bsd-3)))
2190
2191 (define-public python2-htmlmin
2192 (package-with-python2 python-htmlmin))
2193
2194 (define-public python-flask-htmlmin
2195 (package
2196 (name "python-flask-htmlmin")
2197 (version "1.2")
2198 (source
2199 (origin
2200 (method url-fetch)
2201 (uri (pypi-uri "Flask-HTMLmin" version))
2202 (sha256
2203 (base32
2204 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
2205 (propagated-inputs
2206 `(("python-flask" ,python-flask)
2207 ("python-htmlmin" ,python-htmlmin)))
2208 (build-system python-build-system)
2209 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
2210 (synopsis "HTML response minifier for Flask")
2211 (description
2212 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
2213 (license license:bsd-3)))
2214
2215 (define-public python2-flask-htmlmin
2216 (package-with-python2 python-flask-htmlmin))
2217
2218 (define-public python-jsmin
2219 (package
2220 (name "python-jsmin")
2221 (version "2.2.2")
2222 (source
2223 (origin
2224 (method url-fetch)
2225 (uri (pypi-uri "jsmin" version))
2226 (sha256
2227 (base32
2228 "0fsmqbjvpxvff0984x7c0y8xmf49ax9mncz48b9xjx8wrnr9kpxn"))))
2229 (build-system python-build-system)
2230 (home-page "https://github.com/tikitu/jsmin/")
2231 (synopsis "Python JavaScript minifier")
2232 (description
2233 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
2234 on the command line.")
2235 (license license:expat)))
2236
2237 (define-public python-flask-login
2238 (package
2239 (name "python-flask-login")
2240 (version "0.4.1")
2241 (source
2242 (origin
2243 (method git-fetch)
2244 (uri (git-reference
2245 (url "https://github.com/maxcountryman/flask-login.git")
2246 (commit version)))
2247 (file-name (git-file-name name version))
2248 (sha256
2249 (base32 "1rj0qwyxapxnp84fi4lhmvh3d91fdiwz7hibw77x3d5i72knqaa9"))))
2250 (arguments
2251 `(#:phases
2252 (modify-phases %standard-phases
2253 (add-before 'check 'avoid-yanc
2254 ;; Work around '.nosetests-real: error: no such option: --with-yanc'.
2255 (lambda _
2256 (setenv "NOCOLOR" "set")
2257 #t)))))
2258 (build-system python-build-system)
2259 (propagated-inputs
2260 `(("python-flask" ,python-flask)))
2261 (native-inputs
2262 ;; For tests.
2263 `(("python-blinker" ,python-blinker)
2264 ("python-mock" ,python-mock)
2265 ("python-nose" ,python-nose)
2266 ("python-pep8" ,python-pep8)
2267 ("python-pyflakes" ,python-pyflakes)
2268 ("python-semantic-version" ,python-semantic-version)
2269 ("python-werkzeug" ,python-werkzeug)))
2270 (home-page "https://github.com/maxcountryman/flask-login")
2271 (synopsis "User session management for Flask")
2272 (description
2273 "@code{Flask-Login} provides user session management for Flask. It
2274 handles the common tasks of logging in, logging out, and remembering your
2275 users' sessions over extended periods of time.")
2276 (license license:expat)))
2277
2278 (define-public python2-flask-login
2279 (package-with-python2 python-flask-login))
2280
2281 (define-public python-oauth2client
2282 (package
2283 (name "python-oauth2client")
2284 (version "4.0.0")
2285 (source
2286 (origin
2287 (method url-fetch)
2288 (uri (pypi-uri "oauth2client" version))
2289 (sha256
2290 (base32
2291 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
2292 (build-system python-build-system)
2293 (arguments
2294 `(#:tests? #f))
2295 (propagated-inputs
2296 `(("python-httplib2" ,python-httplib2)
2297 ("python-pyasn1" ,python-pyasn1)
2298 ("python-pyasn1-modules" ,python-pyasn1-modules)
2299 ("python-rsa" ,python-rsa)
2300 ("python-six" ,python-six)))
2301 (home-page "https://github.com/google/oauth2client/")
2302 (synopsis "OAuth 2.0 client library")
2303 (description "@code{python-oauth2client} provides an OAuth 2.0 client
2304 library for Python")
2305 (license license:asl2.0)))
2306
2307 (define-public python2-oauth2client
2308 (package-with-python2 python-oauth2client))
2309
2310 (define-public python-flask-oidc
2311 (package
2312 (name "python-flask-oidc")
2313 (version "1.1.1")
2314 (source
2315 (origin
2316 (method url-fetch)
2317 (uri (pypi-uri "flask-oidc" version))
2318 (sha256
2319 (base32
2320 "1ay5j0mf174bix7i67hclr95gv16z81fpx0dijvi0gydvdj3ddy2"))))
2321 (build-system python-build-system)
2322 (propagated-inputs
2323 `(("python-flask" ,python-flask)
2324 ("python-itsdangerous" ,python-itsdangerous)
2325 ("python-oauth2client" ,python-oauth2client)
2326 ("python-six" ,python-six)))
2327 (native-inputs
2328 `(("python-nose" ,python-nose)
2329 ("python-mock" ,python-mock)))
2330 (home-page "https://github.com/puiterwijk/flask-oidc")
2331 (synopsis "OpenID Connect extension for Flask")
2332 (description "@code{python-flask-oidc} provides an OpenID Connect extension
2333 for Flask.")
2334 (license license:bsd-2)))
2335
2336 (define-public python-webassets
2337 (package
2338 (name "python-webassets")
2339 (version "0.12.1")
2340 (source
2341 (origin
2342 (method url-fetch)
2343 (uri (pypi-uri "webassets" version))
2344 (sha256
2345 (base32
2346 "1nrqkpb7z46h2b77xafxihqv3322cwqv6293ngaky4j3ff4cing7"))))
2347 (build-system python-build-system)
2348 (native-inputs
2349 `(("python-jinja2" ,python-jinja2)
2350 ("python-mock" ,python-mock)
2351 ("python-nose" ,python-nose)
2352 ("python-pytest" ,python-pytest)))
2353 (home-page "https://github.com/miracle2k/webassets")
2354 (synopsis "Media asset management")
2355 (description "Merges, minifies and compresses Javascript and CSS files,
2356 supporting a variety of different filters, including YUI, jsmin, jspacker or
2357 CSS tidy. Also supports URL rewriting in CSS files.")
2358 (license license:bsd-2)))
2359
2360 (define-public python-cssmin
2361 (package
2362 (name "python-cssmin")
2363 (version "0.2.0")
2364 (source
2365 (origin
2366 (method url-fetch)
2367 (uri (pypi-uri "cssmin" version))
2368 (sha256
2369 (base32
2370 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
2371 (build-system python-build-system)
2372 (home-page "https://github.com/zacharyvoase/cssmin")
2373 (synopsis "Python port of the YUI CSS Compressor")
2374 (description "Python port of the YUI CSS Compressor.")
2375 (license (list license:expat license:bsd-3))))
2376
2377 (define-public python2-cssmin
2378 (package-with-python2 python-cssmin))
2379
2380 (define-public python-elasticsearch
2381 (package
2382 (name "python-elasticsearch")
2383 (version "6.1.1")
2384 (source
2385 (origin
2386 (method url-fetch)
2387 (uri (pypi-uri "elasticsearch" version))
2388 (sha256
2389 (base32
2390 "1kjxl45yvvgfb5fmamx0kfsfg9pzphiqrwbkns3s28r1w7ya74cd"))))
2391 (build-system python-build-system)
2392 (native-inputs
2393 `(("python-mock" ,python-mock)
2394 ("python-nosexcover" ,python-nosexcover)
2395 ("python-pyaml" ,python-pyaml)
2396 ("python-requests" ,python-requests)))
2397 (propagated-inputs
2398 `(("urllib3" ,python-urllib3)))
2399 (arguments
2400 ;; tests require the test_elasticsearch module but it is not distributed.
2401 `(#:tests? #f))
2402 (home-page "https://github.com/elastic/elasticsearch-py")
2403 (synopsis "Low-level client for Elasticsearch")
2404 (description "Official low-level client for Elasticsearch. Its goal is to
2405 provide common ground for all Elasticsearch-related code in Python; because of
2406 this it tries to be opinion-free and very extendable.")
2407 (license license:expat)))
2408
2409 (define-public python2-elasticsearch
2410 (package-with-python2 python-elasticsearch))
2411
2412 (define-public python-flask-script
2413 (package
2414 (name "python-flask-script")
2415 (version "2.0.6")
2416 (source
2417 (origin
2418 (method url-fetch)
2419 (uri (pypi-uri "Flask-Script" version))
2420 (sha256
2421 (base32
2422 "0r8w2v89nj6b9p91p495cga5m72a673l2wc0hp0zqk05j4yrc9b4"))))
2423 (build-system python-build-system)
2424 (propagated-inputs
2425 `(("python-flask" ,python-flask)
2426 ("python-argcomplete" ,python-argcomplete)
2427 ("python-werkzeug" ,python-werkzeug)))
2428 (native-inputs
2429 `(("python-pytest" ,python-pytest)))
2430 (home-page
2431 "https://github.com/smurfix/flask-script")
2432 (synopsis "Scripting support for Flask")
2433 (description "The Flask-Script extension provides support for writing
2434 external scripts in Flask. This includes running a development server,
2435 a customised Python shell, scripts to set up your database, cronjobs,
2436 and other command-line tasks that belong outside the web application
2437 itself.")
2438 (license license:bsd-3)))
2439
2440 (define-public python2-flask-script
2441 (package-with-python2 python-flask-script))
2442
2443 (define-public python-flask-migrate
2444 (package
2445 (name "python-flask-migrate")
2446 (version "2.0.3")
2447 (source
2448 (origin
2449 (method url-fetch)
2450 (uri (pypi-uri "Flask-Migrate" version))
2451 (sha256
2452 (base32
2453 "107x78lkqsnbg92dld3dkagg07jvchp3ib3y0sivc4ipz6n1y7rk"))))
2454 (build-system python-build-system)
2455 (propagated-inputs
2456 `(("python-flask" ,python-flask)
2457 ("python-alembic" ,python-alembic)
2458 ("python-sqlalchemy" ,python-sqlalchemy)
2459 ("python-flask-script" ,python-flask-script)
2460 ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)))
2461 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
2462 (synopsis "SQLAlchemy database migrations for Flask programs using
2463 Alembic")
2464 (description "This package contains SQLAlchemy database migration tools
2465 for Flask programs that are using @code{python-alembic}.")
2466 (license license:expat)))
2467
2468 (define-public python2-flask-migrate
2469 (package-with-python2 python-flask-migrate))
2470
2471 (define-public python-genshi
2472 (package
2473 (name "python-genshi")
2474 (version "0.7.1")
2475 (source
2476 (origin
2477 (method git-fetch)
2478 (uri (git-reference
2479 (url "https://github.com/edgewall/genshi.git")
2480 (commit version)))
2481 (file-name (git-file-name name version))
2482 (sha256
2483 (base32 "01fx8fnpay5w048ppyjivg2dgfpp5rybn07y3pfsgj2knram3nhl"))))
2484 (build-system python-build-system)
2485 (home-page "https://genshi.edgewall.org/")
2486 (synopsis "Toolkit for generation of output for the web")
2487 (description "Genshi is a Python library that provides an integrated set
2488 of components for parsing, generating, and processing HTML, XML or other
2489 textual content for output generation on the web.")
2490 (license license:bsd-3)))
2491
2492 (define-public python2-genshi
2493 (package-with-python2 python-genshi))
2494
2495 (define-public python-flask-principal
2496 (package
2497 (name "python-flask-principal")
2498 (version "0.4.0")
2499 (source
2500 (origin
2501 (method url-fetch)
2502 (uri (pypi-uri "Flask-Principal" version))
2503 (sha256
2504 (base32
2505 "0lwlr5smz8vfm5h9a9i7da3q1c24xqc6vm9jdywdpgxfbi5i7mpm"))))
2506 (build-system python-build-system)
2507 (propagated-inputs
2508 `(("python-blinker" ,python-blinker)))
2509 (native-inputs
2510 `(("python-flask" ,python-flask)
2511 ("python-nose" ,python-nose)))
2512 (home-page "http://packages.python.org/Flask-Principal/")
2513 (synopsis "Identity management for Flask")
2514 (description "@code{flask_principal} is a identity management library for
2515 Flask. It supports managing both authentication and authorization data in a
2516 thread-local variable.")
2517 (license license:expat)))
2518
2519 (define-public python2-flask-principal
2520 (package-with-python2 python-flask-principal))
2521
2522 (define-public python-flask-httpauth
2523 (package
2524 (name "python-flask-httpauth")
2525 (version "3.2.3")
2526 (source
2527 (origin
2528 (method url-fetch)
2529 (uri (pypi-uri "Flask-HTTPAuth" version))
2530 (sha256
2531 (base32
2532 "13gff5w1mqpzm5nccyg02v3ifb9ifqh5k866cssjhghhg6msfjsz"))))
2533 (build-system python-build-system)
2534 (native-inputs
2535 `(("python-flask" ,python-flask)))
2536 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
2537 (synopsis "Basic and Digest HTTP authentication for Flask routes")
2538 (description "@code{flask_httpauth} provides Basic and Digest HTTP
2539 authentication for Flask routes.")
2540 (license license:expat)))
2541
2542 (define-public python2-flask-httpauth
2543 (package-with-python2 python-flask-httpauth))
2544
2545 (define-public python-uritemplate
2546 (package
2547 (name "python-uritemplate")
2548 (version "3.0.0")
2549 (source
2550 (origin
2551 (method url-fetch)
2552 (uri (pypi-uri "uritemplate" version))
2553 (sha256
2554 (base32
2555 "0781gm9g34wa0asc19dx81ng0nqq07igzv3bbvdqmz13pv7469n0"))))
2556 (build-system python-build-system)
2557 (home-page "https://uritemplate.readthedocs.org")
2558 (synopsis "Library to deal with URI Templates")
2559 (description "@code{uritemplate} provides Python library to deal with URI
2560 Templates.")
2561 (license license:bsd-2)))
2562
2563 (define-public python2-uritemplate
2564 (package-with-python2 python-uritemplate))
2565
2566 (define-public python-publicsuffix
2567 (package
2568 (name "python-publicsuffix")
2569 (version "1.1.0")
2570 (source (origin
2571 (method url-fetch)
2572 (uri (pypi-uri "publicsuffix" version))
2573 (sha256
2574 (base32
2575 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
2576 (build-system python-build-system)
2577 (arguments
2578 `(#:tests? #f)) ; tests use the internet
2579 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
2580 (synopsis "Get suffix for a domain name")
2581 (description "Get a public suffix for a domain name using the Public Suffix
2582 List.")
2583 (license license:expat)))
2584
2585 (define-public python2-publicsuffix
2586 (package-with-python2 python-publicsuffix))
2587
2588 (define-public python-publicsuffix2
2589 (package
2590 (name "python-publicsuffix2")
2591 (version "2.20160818")
2592 (source
2593 (origin
2594 (method url-fetch)
2595 (uri (pypi-uri "publicsuffix2" version ".tar.bz2"))
2596 (sha256
2597 (base32
2598 "1bb55yka9vkn7i6y1kjzxa516kh6v4gsrxa90w5wdz5p5n968r68"))))
2599 (build-system python-build-system)
2600 (arguments
2601 '(#:tests? #f)) ; The test suite requires network access.
2602 (home-page "https://github.com/pombredanne/python-publicsuffix2")
2603 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
2604 (description "Get a public suffix for a domain name using the Public Suffix
2605 List. Forked from and using the same API as the publicsuffix package.")
2606 (license (list license:expat license:mpl2.0))))
2607
2608 (define-public python2-publicsuffix2
2609 (package-with-python2 python-publicsuffix2))
2610
2611 (define-public python-werkzeug
2612 (package
2613 (name "python-werkzeug")
2614 (version "0.14.1")
2615 (source
2616 (origin
2617 (method url-fetch)
2618 (uri (pypi-uri "werkzeug" version))
2619 (sha256
2620 (base32
2621 "0z2m4snn1vc9518r2vzgdj1nc90kcgi60wijvd29yvcp85ypmzf3"))))
2622 (build-system python-build-system)
2623 (arguments
2624 '(#:phases
2625 (modify-phases %standard-phases
2626 (delete 'check)
2627 (add-after 'install 'check
2628 (lambda* (#:key inputs outputs #:allow-other-keys)
2629 (add-installed-pythonpath inputs outputs)
2630 (invoke "python" "-m" "pytest"))))))
2631 (propagated-inputs
2632 `(("python-requests" ,python-requests)))
2633 (native-inputs
2634 `(("python-pytest" ,python-pytest)))
2635 (home-page "https://www.palletsprojects.org/p/werkzeug/")
2636 (synopsis "Utilities for WSGI applications")
2637 (description "One of the most advanced WSGI utility modules. It includes a
2638 powerful debugger, full-featured request and response objects, HTTP utilities to
2639 handle entity tags, cache control headers, HTTP dates, cookie handling, file
2640 uploads, a powerful URL routing system and a bunch of community-contributed
2641 addon modules.")
2642 (license license:x11)))
2643
2644 (define-public python2-werkzeug
2645 (package-with-python2 python-werkzeug))
2646
2647 (define-public python-bottle
2648 (package
2649 (name "python-bottle")
2650 (version "0.12.13")
2651 (source
2652 (origin
2653 (method url-fetch)
2654 (uri (pypi-uri "bottle" version))
2655 (sha256
2656 (base32
2657 "0m9k2a7yxvggc4kw8fsvj381vgsvfcdshg5nzy6vwrxiw2p53drr"))))
2658 (build-system python-build-system)
2659 (home-page "http://bottlepy.org/")
2660 (synopsis "WSGI framework for small web-applications.")
2661 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
2662 (license license:expat)))
2663
2664 (define-public python2-bottle
2665 (package-with-python2 python-bottle))
2666
2667 (define-public python-wtforms
2668 (package
2669 (name "python-wtforms")
2670 (version "2.1")
2671 (source
2672 (origin
2673 (method url-fetch)
2674 (uri (pypi-uri "WTForms" version ".zip"))
2675 (sha256
2676 (base32
2677 "0vyl26y9cg409cfyj8rhqxazsdnd0jipgjw06civhrd53yyi1pzz"))))
2678 (build-system python-build-system)
2679 (arguments
2680 '(#:phases
2681 (modify-phases %standard-phases
2682 (add-after 'unpack 'remove-django-test
2683 ;; Don't fail the tests when the inputs for the optional tests cannot be found.
2684 (lambda _
2685 (substitute*
2686 "tests/runtests.py"
2687 (("'ext_django.tests', 'ext_sqlalchemy', 'ext_dateutil', 'locale_babel'") "")
2688 (("sys.stderr.write(\"### Disabled test '%s', dependency not found\n\" % name)") ""))
2689 #t)))))
2690 (native-inputs
2691 `(("unzip" ,unzip)))
2692 (home-page "http://wtforms.simplecodes.com/")
2693 (synopsis
2694 "Form validation and rendering library for Python web development")
2695 (description
2696 "WTForms is a flexible forms validation and rendering library
2697 for Python web development. It is very similar to the web form API
2698 available in Django, but is a standalone package.")
2699 (license license:bsd-3)))
2700
2701 (define-public python2-wtforms
2702 (package-with-python2 python-wtforms))
2703
2704 (define-public python-paste
2705 (package
2706 (name "python-paste")
2707 (version "3.0.4")
2708 (source
2709 (origin
2710 (method url-fetch)
2711 (uri (pypi-uri "Paste" version))
2712 (sha256
2713 (base32
2714 "01w26w9jyfkh0mfydhfz3dwy3pj3fw7mzvj0lna3vs8hyx1hwl0n"))
2715 (patches (search-patches "python-paste-remove-timing-test.patch"))
2716 (modules '((guix build utils)))
2717 (snippet
2718 '(begin
2719 ;; This test calls out to the internet.
2720 (delete-file "tests/test_proxy.py") #t))))
2721 (build-system python-build-system)
2722 (native-inputs
2723 `(("python-pytest" ,python-pytest)
2724 ("python-pytest-runner" ,python-pytest-runner)
2725 ("python-nose" ,python-nose)))
2726 (propagated-inputs
2727 `(("python-six" ,python-six)))
2728 (home-page "http://pythonpaste.org")
2729 (synopsis
2730 "Python web development tools, focusing on WSGI")
2731 (description
2732 "Paste provides a variety of web development tools and middleware which
2733 can be nested together to build web applications. Paste's design closely
2734 follows ideas flowing from WSGI (Web Standard Gateway Interface).")
2735 (license license:expat)))
2736
2737 (define-public python2-paste
2738 (package-with-python2 python-paste))
2739
2740 (define-public python-pastescript
2741 (package
2742 (name "python-pastescript")
2743 (version "2.0.2")
2744 (source
2745 (origin
2746 (method url-fetch)
2747 (uri (pypi-uri "PasteScript" version))
2748 (sha256
2749 (base32
2750 "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"))))
2751 (build-system python-build-system)
2752 (native-inputs
2753 `(("python-nose" ,python-nose)))
2754 (propagated-inputs
2755 `(("python-paste" ,python-paste)
2756 ("python-pastedeploy" ,python-pastedeploy)))
2757 (home-page "http://pythonpaste.org/script/")
2758 (arguments
2759 '(;; Unfortunately, this requires the latest unittest2,
2760 ;; but that requires traceback2 which requires linecache2 which requires
2761 ;; unittest2. So we're skipping tests for now.
2762 ;; (Note: Apparently linetest2 only needs unittest2 for its tests,
2763 ;; so in theory we could get around this situation somehow.)
2764 #:tests? #f))
2765 (synopsis
2766 "Pluggable command line tool for serving web applications and more")
2767 (description
2768 "PasteScript is a plugin-friendly command line tool which provides a
2769 variety of features, from launching web applications to bootstrapping project
2770 layouts.")
2771 (license license:expat)))
2772
2773 (define-public python2-pastescript
2774 (package-with-python2 python-pastescript))
2775
2776 (define-public python2-urlgrabber
2777 (package
2778 (name "python2-urlgrabber")
2779 (version "3.10.2")
2780 (source
2781 (origin
2782 (method url-fetch)
2783 (uri (pypi-uri "urlgrabber" version))
2784 (sha256
2785 (base32 "0w1h7hlsq406bxfy2pn4i9bd003bwl0q9b7p03z3g6yl0d21ddq5"))))
2786 (build-system python-build-system)
2787 (arguments `(#:python ,python-2)) ; urlgrabber supports python2 only
2788 (home-page "http://urlgrabber.baseurl.org")
2789 (synopsis "High-level cross protocol url-grabber")
2790 (description "@code{urlgrabber} is Python2 library that unifies access to
2791 files available on web, FTP or locally. It supports HTTP, FTP and file://
2792 protocols, it supports features like HTTP keep-alive, reget, throttling and
2793 more.")
2794 (license license:lgpl2.1+)))
2795
2796 (define-public python-pycares
2797 (package
2798 (name "python-pycares")
2799 (version "2.3.0")
2800 (source
2801 (origin
2802 (method url-fetch)
2803 (uri (pypi-uri "pycares" version))
2804 (sha256
2805 (base32
2806 "0h4fxw5drrhfyslzmfpljk0qnnpbhhb20hnnndzahhbwylyw1x1n"))))
2807 (build-system python-build-system)
2808 (arguments
2809 `(#:tests? #f)) ;tests require internet access
2810 (home-page "http://github.com/saghul/pycares")
2811 (synopsis "Python interface for @code{c-ares}")
2812 (description "@code{pycares} is a Python module which provides an
2813 interface to @code{c-ares}, a C library that performs DNS requests and
2814 name resolutions asynchronously.")
2815 (license license:expat)))
2816
2817 (define-public python-yarl
2818 (package
2819 (name "python-yarl")
2820 (version "1.1.1")
2821 (source
2822 (origin
2823 (method url-fetch)
2824 (uri (pypi-uri "yarl" version))
2825 (sha256
2826 (base32
2827 "1s6z13g8vgxfkkqwhn6imnm7pl7ky9arv4jygnn6bcndcbidg7d6"))))
2828 (build-system python-build-system)
2829 (native-inputs
2830 `(("python-pytest" ,python-pytest)
2831 ("python-pytest-runner" ,python-pytest-runner)))
2832 (propagated-inputs
2833 `(("python-idna" ,python-idna)
2834 ("python-multidict" ,python-multidict)))
2835 (home-page "https://github.com/aio-libs/yarl/")
2836 (synopsis "Yet another URL library")
2837 (description "@code{yarl} module provides handy @code{URL} class
2838 for URL parsing and changing.")
2839 (license license:asl2.0)))
2840
2841 (define-public python-google-api-client
2842 (package
2843 (name "python-google-api-client")
2844 (version "1.6.7")
2845 (source
2846 (origin
2847 (method url-fetch)
2848 (uri (pypi-uri "google-api-python-client" version))
2849 (sha256
2850 (base32
2851 "1wpbbbxfpy9mwxdy3kn352cb590ladv574j1aa2l4grjdqw3ln05"))))
2852 (build-system python-build-system)
2853 (arguments
2854 '(#:tests? #f)) ; tests require internet access
2855 (native-inputs
2856 `(("python-httplib2" ,python-httplib2)
2857 ("python-six" ,python-six)
2858 ("python-oauth2client" ,python-oauth2client)
2859 ("python-uritemplate" ,python-uritemplate)))
2860 (home-page "https://github.com/google/google-api-python-client")
2861 (synopsis "Core Python library for accessing Google APIs")
2862 (description "Python client library for Google's discovery based APIs")
2863 (license license:asl2.0)))
2864
2865 (define-public python2-google-api-client
2866 (package-with-python2 python-google-api-client))
2867
2868 (define-public python-hawkauthlib
2869 (package
2870 (name "python-hawkauthlib")
2871 (version "2.0.0")
2872 (source
2873 (origin
2874 (method url-fetch)
2875 (uri (pypi-uri "hawkauthlib" version))
2876 (sha256
2877 (base32
2878 "03ai47s4h8nfnrf25shbfvkm1b9n1ccd4nmmj280sg1fayi69zgg"))))
2879 (build-system python-build-system)
2880 (propagated-inputs
2881 `(("python-requests" ,python-requests)
2882 ("python-webob" ,python-webob)))
2883 (home-page "https://github.com/mozilla-services/hawkauthlib")
2884 (synopsis "Hawk Access Authentication protocol")
2885 (description
2886 "This is a low-level Python library for implementing Hawk Access Authentication,
2887 a simple HTTP request-signing scheme.")
2888 (license license:mpl2.0)))
2889
2890 (define-public python-pybrowserid
2891 (package
2892 (name "python-pybrowserid")
2893 (version "0.14.0")
2894 (source
2895 (origin
2896 (method url-fetch)
2897 (uri (pypi-uri "PyBrowserID" version))
2898 (sha256
2899 (base32
2900 "1qvi79kfb8x9kxkm5lw2mp42hm82cpps1xknmsb5ghkwx1lpc8kc"))))
2901 (build-system python-build-system)
2902 (propagated-inputs
2903 `(("python-requests" ,python-requests)))
2904 (native-inputs
2905 `(("python-mock" ,python-mock)))
2906 (home-page "https://github.com/mozilla/PyBrowserID")
2907 (synopsis "Python library for the BrowserID protocol")
2908 (description
2909 "This is a Python client library for the BrowserID protocol that
2910 underlies Mozilla Persona.")
2911 (license license:mpl2.0)))
2912
2913 (define-public python-pyfxa
2914 (package
2915 (name "python-pyfxa")
2916 (version "0.6.0")
2917 (source
2918 (origin
2919 (method url-fetch)
2920 (uri (pypi-uri "PyFxA" version))
2921 (sha256
2922 (base32
2923 "0axl16fyrz2r88gnw4b12mk7dpkqscv8c4wsc1y5hicl7bsbc4fm"))))
2924 (build-system python-build-system)
2925 (arguments '(#:tests? #f)) ; 17 tests require network access
2926 (propagated-inputs
2927 `(("python-cryptography" ,python-cryptography)
2928 ("python-hawkauthlib" ,python-hawkauthlib)
2929 ("python-pybrowserid" ,python-pybrowserid)
2930 ("python-requests" ,python-requests)
2931 ("python-six" ,python-six)))
2932 (native-inputs
2933 `(("python-grequests" ,python-grequests)
2934 ("python-mock" ,python-mock)
2935 ("python-responses" ,python-responses)
2936 ("python-unittest2" ,python-unittest2)))
2937 (home-page "https://github.com/mozilla/PyFxA")
2938 (synopsis "Firefox Accounts client library for Python")
2939 (description
2940 "This is a Python library for interacting with the Firefox Accounts
2941 ecosystem.")
2942 (license license:mpl2.0)))