gnu: Add python-querystring-parser.
[jackhill/guix/guix.git] / gnu / packages / python-web.scm
CommitLineData
1b2f753d
LC
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
255a2062 3;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
1b2f753d 4;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
98c6a025 5;;; Copyright © 2016, 2017 Danny Milosavljevic <dannym+a@scratchpost.org>
b9f3046e 6;;; Copyright © 2013, 2014, 2015, 2016, 2020 Andreas Enge <andreas@enge.fr>
abbb1530 7;;; Copyright © 2016, 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
fecd3250 8;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
1b2f753d 9;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
18d18ee1 10;;; Copyright © 2016, 2017, 2020 Julien Lepiller <julien@lepiller.eu>
3c986a7d 11;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
1b2f753d
LC
12;;; Copyright © 2014, 2017 Eric Bavier <bavier@member.fsf.org>
13;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
14;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
68460fbb 15;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
df122333 16;;; Copyright © 2016, 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
df01360f 17;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
1b2f753d
LC
18;;; Copyright © 2015, 2017 Ben Woodcroft <donttrustben@gmail.com>
19;;; Copyright © 2015, 2016 Christopher Allan Webber <cwebber@dustycloud.org>
20;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
21;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
22;;; Copyright © 2016 David Craven <david@craven.ch>
23;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
589e3f4e 24;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
eaa8292e 25;;; Copyright © 2017 Mark Meyer <mark@ofosos.org>
c5964611 26;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
2bdb5716 27;;; Copyright © 2018, 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
1ceca46b 28;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
a4cfdab5 29;;; Copyright © 2018, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
93d3360a 30;;; Copyright © 2019 Vagrant Cascadian <vagrant@debian.org>
dcfa0acd 31;;; Copyright © 2019 Brendan Tildesley <mail@brendan.scot>
6543bc80 32;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
70876b07 33;;; Copyright © 2019, 2020 Tanguy Le Carrour <tanguy@bioneland.org>
0021363d 34;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
e524b577 35;;; Copyright © 2020 Evan Straw <evan.straw99@gmail.com>
c5963597 36;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
82bd276d 37;;; Copyright © 2020 Holger Peters <holger.peters@posteo.de>
f1a83356 38;;; Copyright © 2020 Noisytoot <noisytoot@gmail.com>
e91c0cd8 39;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
03239548 40;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
679d5e6b 41;;; Copyright © 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
1b2f753d
LC
42;;;
43;;; This file is part of GNU Guix.
44;;;
45;;; GNU Guix is free software; you can redistribute it and/or modify it
46;;; under the terms of the GNU General Public License as published by
47;;; the Free Software Foundation; either version 3 of the License, or (at
48;;; your option) any later version.
49;;;
50;;; GNU Guix is distributed in the hope that it will be useful, but
51;;; WITHOUT ANY WARRANTY; without even the implied warranty of
52;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
53;;; GNU General Public License for more details.
54;;;
55;;; You should have received a copy of the GNU General Public License
56;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
57
58(define-module (gnu packages python-web)
59 #:use-module (guix packages)
60 #:use-module (guix download)
7c8b1bf6 61 #:use-module (guix git-download)
1b2f753d 62 #:use-module (guix build-system python)
e3e74e40 63 #:use-module (guix utils)
1b2f753d 64 #:use-module (gnu packages)
a7469d16 65 #:use-module (gnu packages base)
ac257f12 66 #:use-module (gnu packages check)
1b2f753d 67 #:use-module (gnu packages compression)
eaa8292e 68 #:use-module (gnu packages curl)
a8714bf6 69 #:use-module (gnu packages databases)
1b2f753d 70 #:use-module (gnu packages django)
4b92dac2 71 #:use-module (gnu packages groff)
5438adea 72 #:use-module (gnu packages libevent)
951c7093 73 #:use-module (gnu packages libffi)
1b2f753d
LC
74 #:use-module (gnu packages pkg-config)
75 #:use-module (gnu packages python)
df122333 76 #:use-module (gnu packages python-check)
32bf0331 77 #:use-module (gnu packages python-compression)
cc6f4912 78 #:use-module (gnu packages python-crypto)
44d10b1f 79 #:use-module (gnu packages python-xyz)
18d18ee1 80 #:use-module (gnu packages serialization)
9d0c291e 81 #:use-module (gnu packages sphinx)
a7469d16 82 #:use-module (gnu packages texinfo)
eaa8292e 83 #:use-module (gnu packages tls)
33dc54b0 84 #:use-module (gnu packages time)
56a5ef4c 85 #:use-module (gnu packages web)
1b2f753d
LC
86 #:use-module (gnu packages xml)
87 #:use-module ((guix licenses) #:prefix license:)
88 #:use-module (srfi srfi-1))
89
321ba568
NG
90(define-public python-aiohttp
91 (package
92 (name "python-aiohttp")
3e0b0220 93 (version "3.6.3")
321ba568
NG
94 (source
95 (origin
96 (method url-fetch)
97 (uri (pypi-uri "aiohttp" version))
98 (sha256
3e0b0220 99 (base32 "0i9n7h8n06m2d8ryqyk4fv1si1m44ibq7blbfaxq46vx7jydg339"))
44dbd856 100 (patches (search-patches "python-aiohttp-3.6.2-no-warning-fail.patch"))))
321ba568
NG
101 (build-system python-build-system)
102 (arguments
44dbd856
LDB
103 '(#:phases
104 (modify-phases %standard-phases
105 (add-after 'unpack 'fix-tests
106 (lambda _
107 ;; disable brotli tests, because we’re not providing that optional library
108 (substitute* "tests/test_http_parser.py"
109 ((" async def test_feed_eof_no_err_brotli")
110 " @pytest.mark.xfail\n async def test_feed_eof_no_err_brotli"))
111 ;; make sure the timestamp of this file is > 1990, because a few
112 ;; tests like test_static_file_if_modified_since_past_date depend on it
113 (invoke "touch" "-d" "2020-01-01" "tests/data.unknown_mime_type")
9962b877
MB
114
115 ;; FIXME: These tests are failing due to deprecation warnings
116 ;; in Python 3.8. Remove this when updating to aiohttp >= 3.7.
117 ;; https://github.com/aio-libs/aiohttp/issues/4477
118 ;; https://github.com/aio-libs/aiohttp/issues/4525
119 (with-directory-excursion "tests"
120 (for-each delete-file '("test_client_session.py"
121 "test_multipart.py"
122 "test_web_middleware.py"
123 "test_web_protocol.py"
124 "test_web_urldispatcher.py")))
44dbd856 125 #t)))))
321ba568
NG
126 (propagated-inputs
127 `(("python-aiodns" ,python-aiodns)
128 ("python-async-timeout" ,python-async-timeout)
129 ("python-attrs" ,python-attrs)
130 ("python-chardet" ,python-chardet)
131 ("python-idna-ssl" ,python-idna-ssl)
132 ("python-multidict" ,python-multidict)
133 ("python-yarl" ,python-yarl)))
44dbd856
LDB
134 (native-inputs
135 `(("python-pytest-runner" ,python-pytest-runner)
136 ("python-pytest-xdit" ,python-pytest-xdist)
137 ("python-pytest-timeout" ,python-pytest-timeout)
138 ("python-pytest-forked" ,python-pytest-forked)
139 ("python-pytest-mock" ,python-pytest-mock)
140 ("gunicorn" ,gunicorn-bootstrap)
141 ("python-freezegun" ,python-freezegun)
142 ("python-async-generator" ,python-async-generator)))
321ba568
NG
143 (home-page "https://github.com/aio-libs/aiohttp/")
144 (synopsis "Async HTTP client/server framework (asyncio)")
145 (description "@code{aiohttp} is an asynchronous HTTP client/server
146framework.
147
148Its main features are:
149@itemize
150@item Supports both client and server side of HTTP protocol.
151@item Supports both client and server Web-Sockets out-of-the-box without the
152Callback Hell.
153@item Web-server has middlewares and pluggable routing.
154@end itemize")
155 (license license:asl2.0)))
156
20310a7e
VC
157(define-public python-aiohttp-socks
158 (package
159 (name "python-aiohttp-socks")
160 (version "0.2.2")
161 (source
162 (origin
163 (method url-fetch)
164 (uri (pypi-uri "aiohttp_socks" version))
165 (sha256
166 (base32
167 "0473702jk66xrgpm28wbdgpnak4v0dh2qmdjw7ky7hf3lwwqkggf"))))
168 (build-system python-build-system)
169 (propagated-inputs
170 `(("python-aiohttp" ,python-aiohttp)))
171 (home-page "https://github.com/romis2012/aiohttp-socks")
172 (synopsis "SOCKS proxy connector for aiohttp")
173 (description "This package provides a SOCKS proxy connector for
174aiohttp. It supports SOCKS4(a) and SOCKS5.")
175 (license license:asl2.0)))
176
f90f4c9c
NG
177(define-public python-aiodns
178 (package
179 (name "python-aiodns")
180 (version "1.1.1")
181 (source
182 (origin
183 (method url-fetch)
184 (uri (pypi-uri "aiodns" version))
185 (sha256
186 (base32
187 "1snr5paql8dgvc676n8xq460wypjsb1xj53cf3px1s4wczf7lryq"))))
188 (build-system python-build-system)
8ed0c567 189 (propagated-inputs
f90f4c9c
NG
190 `(("python-pycares" ,python-pycares)))
191 (arguments
192 `(#:tests? #f)) ;tests require internet access
702a1012 193 (home-page "https://github.com/saghul/aiodns")
f90f4c9c
NG
194 (synopsis "Simple DNS resolver for asyncio")
195 (description "@code{aiodns} provides a simple way for doing
196asynchronous DNS resolutions with a synchronous looking interface by
197using @url{https://github.com/saghul/pycares,pycares}.")
198 (license license:expat)))
199
93d3360a
VC
200(define-public python-aiorpcx
201 (package
202 (name "python-aiorpcx")
c31302fd 203 (version "0.18.3")
93d3360a
VC
204 (source
205 (origin
206 (method url-fetch)
207 (uri (pypi-uri "aiorpcX" version))
208 (sha256
209 (base32
c31302fd 210 "0k545hc7wl6sh1svydzbv6x7sx5pig2pqkl3yxs9riwmvzawx9xp"))))
93d3360a
VC
211 (build-system python-build-system)
212 (propagated-inputs
213 `(("python-attrs" ,python-attrs)))
214 (home-page "https://github.com/kyuupichan/aiorpcX")
215 (synopsis "Generic asyncio RPC implementation")
216 (description
bd105b78
AB
217 "The aiorpcX library is a generic asyncio implementation of RPC suitable
218for an application that is a client, server or both.
93d3360a
VC
219
220The package includes a module with full coverage of JSON RPC versions 1.0 and
2212.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
222comes with a SOCKS proxy client.")
223 (license (list license:expat license:bsd-2))))
224
b2eafc7d
MB
225(define-public python-asgiref
226 (package
227 (name "python-asgiref")
228 (version "3.2.10")
229 (source (origin
230 (method url-fetch)
231 (uri (pypi-uri "asgiref" version))
232 (sha256
233 (base32
234 "06kg3hnnvh7qg0w9amkvk1hd6n6bs055r04b7if6ipa7w4g92lby"))))
235 (build-system python-build-system)
236 (arguments
237 '(#:phases (modify-phases %standard-phases
238 (replace 'check
239 (lambda _
240 (setenv "PYTHONPATH"
241 (string-append "./build/lib:"
242 (getenv "PYTHONPATH")))
243 (invoke "pytest" "-vv"))))))
244 (native-inputs
245 `(("python-pytest" ,python-pytest)
246 ("python-pytest-asyncio" ,python-pytest-asyncio)))
247 (home-page "https://github.com/django/asgiref/")
248 (synopsis "ASGI specs, helper code, and adapters")
249 (description
250 "ASGI is a standard for Python asynchronous web apps and servers to
251communicate with each other, and positioned as an asynchronous successor to
252WSGI. This package includes libraries for implementing ASGI servers.")
253 (license license:bsd-3)))
254
7f93dc3d
MB
255(define-public python-css-html-js-minify
256 (package
257 (name "python-css-html-js-minify")
258 (version "2.5.5")
259 (source (origin
260 (method url-fetch)
261 (uri (pypi-uri "css-html-js-minify" version ".zip"))
262 (sha256
263 (base32
264 "0v3l2dqdk2y4r6ax259gs4ij1zzm9yxg6491s6254vs9w3vi37sa"))))
265 (build-system python-build-system)
266 ;; XXX: The git repository has no tags, and the PyPI releases do not
267 ;; contain tests.
268 (arguments '(#:tests? #f))
269 (native-inputs `(("unzip" ,unzip)))
270 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
271 (synopsis "CSS/HTML/JS minifier")
272 (description
273 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
274 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
275 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
276 ;; looks like the user can choose a license.
277 (license (list license:gpl3+ license:lgpl3+ license:expat))))
278
bb840999
MC
279(define-public python-falcon
280 (package
281 (name "python-falcon")
45838753 282 (version "2.0.0")
bb840999
MC
283 (source
284 (origin
285 (method url-fetch)
286 (uri (pypi-uri "falcon" version))
287 (sha256
288 (base32
45838753
EF
289 "1z6mqfv574x6jiawf67ib52g4kk20c2x7xk7wrn1573b8v7r79gf"))
290 (modules '((guix build utils)))
291 (snippet
292 '(begin
293 (delete-file-recursively "falcon/vendor")
294 (substitute* "setup.py"
295 ((".*falcon\\.vendor\\.mimeparse.*") ""))
296 (substitute* '("falcon/media/handlers.py"
297 "falcon/request.py")
298 (("from falcon\\.vendor ") ""))
299 (substitute* "falcon.egg-info/SOURCES.txt"
300 (("falcon/vendor.*") ""))
301 #t))))
bb840999
MC
302 (build-system python-build-system)
303 (arguments
304 `(#:phases
305 (modify-phases %standard-phases
306 (replace 'check
45838753
EF
307 (lambda* (#:key inputs outputs #:allow-other-keys)
308 ;; Skip orjson, which requires rust to build.
309 (substitute* "tests/test_media_handlers.py"
310 (("== 'CPython") "!= 'CPython"))
311 (add-installed-pythonpath inputs outputs)
312 (invoke "pytest" "--ignore" "falcon"))))))
bb840999 313 (propagated-inputs
45838753 314 `(("python-mimeparse" ,python-mimeparse)))
bb840999
MC
315 (native-inputs
316 `(("python-cython" ,python-cython) ;for faster binaries
45838753
EF
317 ("python-mujson" ,python-mujson)
318 ("python-msgpack" ,python-msgpack)
bb840999 319 ("python-pytest" ,python-pytest)
45838753 320 ("python-pytest-runner" ,python-pytest-runner)
bb840999 321 ("python-pyyaml" ,python-pyyaml)
45838753 322 ("python-rapidjson" ,python-rapidjson)
bb840999
MC
323 ("python-requests" ,python-requests)
324 ("python-testtools" ,python-testtools)
45838753 325 ("python-ujson" ,python-ujson)))
bb840999
MC
326 (home-page "https://falconframework.org")
327 (synopsis
328 "Web framework for building APIs and application backends")
329 (description
330 "Falcon is a web API framework for building microservices, application
331backends and higher-level frameworks. Among its features are:
332@itemize
333@item Optimized and extensible code base
334@item Routing via URI templates and REST-inspired resource
335classes
336@item Access to headers and bodies through request and response
337classes
338@item Request processing via middleware components and hooks
339@item Idiomatic HTTP error responses
340@item Straightforward exception handling
341@item Unit testing support through WSGI helpers and mocks
342@item Compatible with both CPython and PyPy
343@item Cython support for better performance when used with CPython
344@end itemize")
45838753 345 (properties `((python2-variant . ,(delay python2-falcon))))
bb840999
MC
346 (license license:asl2.0)))
347
348(define-public python2-falcon
45838753
EF
349 (let ((falcon (package-with-python2 (strip-python2-variant python-falcon))))
350 (package
351 (inherit falcon)
352 (native-inputs
353 (alist-delete "python-rapidjson" (package-native-inputs falcon))))))
bb840999 354
66a9f08b
MC
355(define-public python-falcon-cors
356 (package
357 (name "python-falcon-cors")
358 (version "1.1.7")
359 (source
360 (origin
361 (method url-fetch)
362 (uri (pypi-uri "falcon-cors" version))
363 (sha256
364 (base32
365 "12pym7hwsbd8b0c1azn95nas8gm3f1qpr6lpyx0958xm65ffr20p"))))
366 (build-system python-build-system)
367 (native-inputs
368 `(("python-falcon" ,python-falcon)))
369 (home-page
370 "https://github.com/lwcolton/falcon-cors")
371 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
372 (description "This middleware provides @dfn{cross-origin resource
373sharing} (CORS) support for Falcon. It allows applying a specially crafted
374CORS object to the incoming requests, enabling the ability to serve resources
375over a different origin than that of the web application.")
376 (license license:asl2.0)))
377
378(define-public python2-falcon-cors
379 (package-with-python2 python-falcon-cors))
380
589e3f4e
LC
381(define-public python-furl
382 (package
383 (name "python-furl")
f55152ce 384 (version "2.0.0")
589e3f4e
LC
385 (source
386 (origin
387 (method url-fetch)
388 (uri (pypi-uri "furl" version))
389 (sha256
390 (base32
f55152ce 391 "1v2lakx03d5w8954a39ki44xv5mllnq0a0avhxykv9hrzg0yvjpx"))))
589e3f4e
LC
392 (build-system python-build-system)
393 (propagated-inputs
394 `(("python-six" ,python-six)
395 ("python-orderedmultidict" ,python-orderedmultidict)))
396 (native-inputs
f55152ce 397 `(("python-flake8" ,python-flake8)))
589e3f4e
LC
398 (home-page "https://github.com/gruns/furl")
399 (synopsis "URL manipulation in Python")
400 (description "Furl provides an easy-to-use alternative to the
401@code{urllib} and @code{urlparse} modules for manipulating URLs.")
402 (license license:unlicense)))
403
404(define-public python2-furl
405 (package-with-python2 python-furl))
406
1b2f753d
LC
407(define-public python-httplib2
408 (package
409 (name "python-httplib2")
410 (version "0.9.2")
411 (source
412 (origin
413 (method url-fetch)
414 (uri (pypi-uri "httplib2" version))
415 (sha256
416 (base32
417 "126rsryvw9vhbf3qmsfw9lf4l4xm2srmgs439lgma4cpag4s3ay3"))))
418 (build-system python-build-system)
419 (home-page "https://github.com/jcgregorio/httplib2")
420 (synopsis "Comprehensive HTTP client library")
421 (description
422 "A comprehensive HTTP client library supporting many features left out of
423other HTTP libraries.")
424 (license license:expat)))
425
426(define-public python2-httplib2
427 (package-with-python2 python-httplib2))
428
dabcfc6d
TLC
429(define-public httpie
430 (package
431 (name "httpie")
70876b07 432 (version "2.3.0")
dabcfc6d
TLC
433 (source
434 (origin
435 (method url-fetch)
436 (uri (pypi-uri "httpie" version))
437 (sha256
438 (base32
70876b07 439 "15ngl3yc186gkgqdx8iav9bpj8gxjpzz26y32z92jwyhj4cmfh6m"))))
dabcfc6d
TLC
440 (build-system python-build-system)
441 (arguments
442 ;; The tests attempt to access external web servers, so we cannot run them.
443 '(#:tests? #f))
444 (propagated-inputs
445 `(("python-colorama" ,python-colorama)
446 ("python-pygments" ,python-pygments)
70876b07
TLC
447 ("python-requests" ,python-requests)
448 ("python-requests-toolbelt" ,python-requests-toolbelt-0.9.1)))
449 (home-page "https://httpie.io")
dabcfc6d
TLC
450 (synopsis "cURL-like tool for humans")
451 (description
452 "A command line HTTP client with an intuitive UI, JSON support,
453syntax highlighting, wget-like downloads, plugins, and more. It consists of
454a single http command designed for painless debugging and interaction with
455HTTP servers, RESTful APIs, and web services.")
3fe3ae7e
TLC
456 ;; This was fixed in 1.0.3.
457 (properties `((lint-hidden-cve . ("CVE-2019-10751"))))
dabcfc6d
TLC
458 (license license:bsd-3)))
459
7a82ceb7
BT
460(define-public python-html2text
461 (package
462 (name "python-html2text")
ee45483c 463 (version "2020.1.16")
7a82ceb7
BT
464 (source
465 (origin
466 (method url-fetch)
467 (uri (pypi-uri "html2text" version))
468 (sha256
469 (base32
ee45483c 470 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
7a82ceb7 471 (build-system python-build-system)
4907b615
EF
472 (arguments
473 '(#:phases
474 (modify-phases %standard-phases
475 (replace 'check
476 (lambda _
477 (invoke "pytest" "test/"))))))
478 (native-inputs
479 `(("python-pytest" ,python-pytest)))
480 (home-page "https://github.com/Alir3z4/html2text")
7a82ceb7
BT
481 (synopsis "Convert HTML into plain text")
482 (description "html2text takes HTML and converts it into plain ASCII text
483which is also valid markdown. html2text was originally written by Aaron
484Swartz.")
485 (license license:gpl3+)))
486
487(define-public python2-html2text
cc055349
MB
488 (let ((base (package-with-python2 python-html2text)))
489 (package
490 (inherit base)
491 ;; This is the last version with support for Python 2.
492 (version "2019.8.11")
493 (source (origin
494 (method url-fetch)
495 (uri (pypi-uri "html2text" version))
496 (sha256
497 (base32
498 "0ppgjplg06kmv9sj0x8p7acczcq2mcfgk1jdjwm4w5w40b0vj5pm")))))))
7a82ceb7 499
56a5ef4c
TGR
500(define-public python-mechanicalsoup
501 (package
502 (name "python-mechanicalsoup")
503 (version "0.11.0")
504 (source
505 (origin
506 (method url-fetch)
507 (uri (pypi-uri "MechanicalSoup" version))
508 (sha256
509 (base32 "0k59wwk75q7nz6i6gynvzhagy02ql0bv7py3qqcwgjw7607yq4i7"))))
510 (build-system python-build-system)
511 (arguments
512 ;; TODO: Enable tests when python-flake8@3.5 hits master.
513 `(#:tests? #f))
514 (propagated-inputs
515 `(("python-beautifulsoup4" ,python-beautifulsoup4)
516 ("python-lxml" ,python-lxml)
517 ("python-requests" ,python-requests)
518 ("python-six" ,python-six)))
519 ;; (native-inputs
520 ;; ;; For tests.
521 ;; `(("python-pytest-flake8" ,python-pytest-flake8)
522 ;; ("python-pytest-httpbin" ,python-pytest-httpbin)
523 ;; ("python-pytest-mock" ,python-pytest-mock)
524 ;; ("python-pytest-runner" ,python-pytest-runner)
525 ;; ("python-requests-mock" ,python-requests-mock)))
526 (home-page "https://mechanicalsoup.readthedocs.io/")
527 (synopsis "Python library for automating website interaction")
528 (description
529 "MechanicalSoup is a Python library for automating interaction with
530websites. It automatically stores and sends cookies, follows redirects, and can
531follow links and submit forms. It doesn’t do JavaScript.")
532 (license license:expat)))
533
534(define-public python2-mechanicalsoup
535 (package-with-python2 python-mechanicalsoup))
536
03239548
VM
537(define-public python-hyperframe
538 (package
539 (name "python-hyperframe")
540 (version "5.2.0")
541 (source
542 (origin
543 (method url-fetch)
544 (uri (pypi-uri "hyperframe" version))
545 (sha256
546 (base32 "07xlf44l1cw0ghxx46sbmkgzil8vqv8kxwy42ywikiy35izw3xd9"))))
547 (build-system python-build-system)
548 (arguments
549 `(#:phases
550 (modify-phases %standard-phases
551 (replace 'check
552 (lambda* (#:key inputs outputs #:allow-other-keys)
553 (add-installed-pythonpath inputs outputs)
554 (invoke "pytest" "-vv" "test"))))))
555 (native-inputs
556 `(("python-pytest" ,python-pytest)))
557 (home-page "https://github.com/python-hyper/hyperframe")
558 (synopsis "HTTP/2 framing layer for Python")
559 (description
560 "This library contains the HTTP/2 framing code used in the hyper project.
561It provides a pure-Python codebase that is capable of decoding a binary stream
562into HTTP/2 frames.")
563 (license license:expat)))
564
22d11240
VM
565(define-public python-hpack
566 (package
567 (name "python-hpack")
568 (version "3.0.0")
569 (source
570 (origin
571 ;; PyPI tarball is missing some files necessary for the tests.
572 (method git-fetch)
573 (uri (git-reference
574 (url "https://github.com/python-hyper/hpack")
575 (commit (string-append "v" version))))
576 (file-name (git-file-name name version))
577 (sha256
578 (base32 "0w8hkz50a6lzkmgi41ryicm0mh9ca9cx29pm3s0xlpn0vs29xrmd"))))
579 (build-system python-build-system)
580 (arguments
581 `(#:phases
582 (modify-phases %standard-phases
583 (replace 'check
584 (lambda* (#:key inputs outputs #:allow-other-keys)
585 (add-installed-pythonpath inputs outputs)
586 (invoke "pytest" "-vv" "test" "-k"
587 ;; This test will be fixed in the next version. See:
588 ;; https://github.com/python-hyper/hpack/issues/168.
589 "not test_get_by_index_out_of_range"))))))
590 (native-inputs
591 `(("python-pytest" ,python-pytest)))
592 (home-page "https://hyper.rtfd.org")
593 (synopsis "Pure-Python HPACK header compression")
594 (description
595 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
596for use in Python programs that implement HTTP/2.")
597 (license license:expat)))
598
fc9be8db
VM
599(define-public python-h11
600 (package
601 (name "python-h11")
602 (version "0.9.0")
603 (source
604 (origin
605 (method url-fetch)
606 (uri (pypi-uri "h11" version))
607 (sha256
608 (base32 "1qfad70h59hya21vrzz8dqyyaiqhac0anl2dx3s3k80gpskvrm1k"))))
609 (build-system python-build-system)
610 (arguments
611 `(#:phases
612 (modify-phases %standard-phases
613 (replace 'check
614 (lambda _
615 (invoke "pytest" "-vv"))))))
616 (native-inputs
617 `(("python-pytest" ,python-pytest)))
618 (home-page "https://github.com/python-hyper/h11")
619 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
620 (description
621 "This is a little HTTP/1.1 library written from scratch in Python, heavily
622inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
623code whatsoever. This means you can hook h11 up to your favorite network API,
624and that could be anything you want.")
625 (license license:expat)))
626
f8380178
VM
627(define-public python-h2
628 (package
629 (name "python-h2")
630 (version "3.2.0")
631 (source
632 (origin
633 (method url-fetch)
634 (uri (pypi-uri "h2" version))
635 (sha256
636 (base32 "051gg30aca26rdxsmr9svwqm06pdz9bv21ch4n0lgi7jsvml2pw7"))))
637 (build-system python-build-system)
638 (arguments
639 `(#:phases
640 (modify-phases %standard-phases
641 (replace 'check
642 (lambda* (#:key inputs outputs #:allow-other-keys)
643 (add-installed-pythonpath inputs outputs)
644 (invoke "pytest" "-vv" "test"))))))
645 (native-inputs
646 `(("python-pytest" ,python-pytest)))
647 (propagated-inputs
648 `(("python-hpack" ,python-hpack)
649 ("python-hyperframe" ,python-hyperframe)))
650 (home-page "https://github.com/python-hyper/hyper-h2")
651 (synopsis "HTTP/2 State-Machine based protocol implementation")
652 (description
653 "This module contains a pure-Python implementation of a HTTP/2 protocol
654stack. It does not provide a parsing layer, a network layer, or any rules
655about concurrency. Instead, it's a purely in-memory solution, defined in
656terms of data actions and HTTP/2 frames. This is one building block of a full
657Python HTTP implementation.")
658 (license license:expat)))
659
1b2f753d
LC
660(define-public python-sockjs-tornado
661 (package
662 (name "python-sockjs-tornado")
c381d4bb 663 (version "1.0.6")
1b2f753d
LC
664 (source
665 (origin
666 (method url-fetch)
667 (uri (pypi-uri "sockjs-tornado" version))
668 (sha256
669 (base32
c381d4bb 670 "15dgv6hw6c7h3m310alw1h6p5443lrm9pyqhcv2smc13fz1v04pc"))))
1b2f753d
LC
671 (build-system python-build-system)
672 (arguments
673 `(;; There are no tests, and running the test phase requires missing
674 ;; dependencies
675 #:tests? #f))
676 (propagated-inputs
677 `(("python-tornado" ,python-tornado)))
9be5ecdf 678 (home-page "https://github.com/mrjoes/sockjs-tornado/")
1b2f753d 679 (synopsis
1f7fe26f 680 "SockJS Python server implementation on top of the Tornado framework")
1b2f753d 681 (description
1f7fe26f 682 "SockJS-tornado provides the server-side counterpart to a SockJS client
1b2f753d
LC
683library, through the Tornado framework.
684
1f7fe26f 685SockJS provides a low-latency, full-duplex, cross-domain communication channel
1b2f753d
LC
686between a web browser and web server.")
687 (license license:expat)))
688
689(define-public python2-sockjs-tornado
690 (package-with-python2 python-sockjs-tornado))
691
692(define-public python-flask-babel
693 (package
694 (name "python-flask-babel")
33901ed8 695 (version "1.0.0")
1b2f753d
LC
696 (source
697 (origin
698 (method url-fetch)
699 (uri (pypi-uri "Flask-Babel" version))
700 (sha256
701 (base32
33901ed8 702 "0gmb165vkwv5v7dxsxa2i3zhafns0fh938m2zdcrv4d8z5l099yn"))))
1b2f753d 703 (build-system python-build-system)
33901ed8
MB
704 (arguments
705 '(#:phases (modify-phases %standard-phases
706 (replace 'check
707 (lambda _
708 (with-directory-excursion "tests"
709 (invoke "python" "tests.py")))))))
1b2f753d
LC
710 (propagated-inputs
711 `(("python-flask" ,python-flask)
712 ("python-babel" ,python-babel)
713 ("python-jinja2" ,python-jinja2)
714 ("python-pytz" ,python-pytz)))
715 (home-page "https://github.com/python-babel/flask-babel")
716 (synopsis "Add i18n/l10n support to Flask applications")
717 (description "This package implements internationalization and localization
718support for Flask. This is based on the Python babel module as well as pytz -
719both of which are installed automatically if you install this library.")
720 (license license:bsd-3)))
721
722(define-public python2-flask-babel
723 (package-with-python2 python-flask-babel))
724
725(define-public python-html5lib
726 (package
727 (name "python-html5lib")
4ef80b2f 728 (version "1.0.1")
1b2f753d
LC
729 (source
730 (origin
731 (method url-fetch)
732 (uri (pypi-uri "html5lib" version))
733 (sha256
734 (base32
4ef80b2f 735 "0dipzfrycv6j1jw82v9b7d8lzggx3x8xngx6l4xrqkxwvg7hvjv6"))))
1b2f753d
LC
736 (build-system python-build-system)
737 (propagated-inputs
738 `(("python-six" ,python-six)
739 ("python-webencodings" ,python-webencodings)))
740 (arguments
741 `(#:test-target "check"))
742 (home-page
743 "https://github.com/html5lib/html5lib-python")
744 (synopsis
7230f6d5 745 "Python HTML parser based on the WHATWG HTML specification")
1b2f753d 746 (description
7230f6d5 747 "Html5lib is an HTML parser based on the WHATWG HTML specification
1b2f753d
LC
748and written in Python.")
749 (license license:expat)))
750
751(define-public python2-html5lib
752 (package-with-python2 python-html5lib))
753
754;; Needed for python-bleach, a dependency of python-notebook
755(define-public python-html5lib-0.9
756 (package
757 (inherit python-html5lib)
758 (version "0.999")
759 (source
760 (origin
761 (method url-fetch)
762 (uri (pypi-uri "html5lib" version))
763 (sha256
764 (base32
765 "17n4zfsj6ynmbwdwviywmj8r6nzr3xvfx2zs0xhndmvm51z7z263"))))))
766
767(define-public python2-html5lib-0.9
768 (package-with-python2 python-html5lib-0.9))
769
770(define-public python-html5-parser
771 (package
772 (name "python-html5-parser")
7b7b3cef 773 (version "0.4.9")
1b2f753d
LC
774 (source (origin
775 (method url-fetch)
776 (uri (pypi-uri "html5-parser" version))
777 (sha256
778 (base32
7b7b3cef 779 "13yl3vnf3sxl05m0nhpngnrz3g1jvyahd33lys3m3hfb91l8zzi5"))))
1b2f753d
LC
780 (build-system python-build-system)
781 (native-inputs
782 `(("pkg-config" ,pkg-config)))
783 (inputs
784 `(("libxml2" ,libxml2)))
785 (propagated-inputs
786 `(("python-lxml" ,python-lxml)
787 ("python-beautifulsoup4" ,python-beautifulsoup4)))
788 (home-page "https://html5-parser.readthedocs.io")
789 (synopsis "Fast C-based HTML5 parsing for Python")
790 (description "This package provides a fast implementation of the HTML5
791parsing spec for Python. Parsing is done in C using a variant of the gumbo
792parser. The gumbo parse tree is then transformed into an lxml tree, also in
793C, yielding parse times that can be a thirtieth of the html5lib parse times.")
794 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
795 ;; indicate ASL2.0, including the LICENSE file for the whole project.
796 (license (list license:asl2.0 license:gpl3))))
797
798(define-public python2-html5-parser
799 (package-with-python2 python-html5-parser))
800
eaa8292e
MM
801(define-public python-pycurl
802 (package
803 (name "python-pycurl")
3b4bb631 804 (version "7.43.0.5")
eaa8292e
MM
805 (source
806 (origin
807 (method url-fetch)
808 (uri (string-append "https://dl.bintray.com/pycurl/pycurl/pycurl-"
809 version ".tar.gz"))
810 (sha256
3b4bb631 811 (base32 "1cwlb76vddqp2mxqvjbhf367caddzy82rhangddjjhjqaj8x4zgc"))))
eaa8292e
MM
812 (build-system python-build-system)
813 (arguments
814 ;; The tests attempt to access external web servers, so we cannot run
815 ;; them. Furthermore, they are skipped altogether when using Python 2.
60667159
MB
816 '(#:tests? #f
817 #:phases (modify-phases %standard-phases
818 (add-before 'build 'configure-tls-backend
819 (lambda _
820 ;; XXX: PycURL fails to automatically determine which TLS
821 ;; backend to use when cURL is built with --disable-static.
822 ;; See setup.py and <https://github.com/pycurl/pycurl/pull/147>.
823 (setenv "PYCURL_SSL_LIBRARY" "gnutls")
824 #t)))))
eaa8292e
MM
825 (native-inputs
826 `(("python-nose" ,python-nose)
827 ("python-bottle" ,python-bottle)))
828 (inputs
829 `(("curl" ,curl)
830 ("gnutls" ,gnutls)))
831 (home-page "http://pycurl.io/")
832 (synopsis "Lightweight Python wrapper around libcurl")
833 (description "Pycurl is a lightweight wrapper around libcurl. It provides
834high-speed transfers via libcurl and frequently outperforms alternatives.")
835
836 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
837 ;; under the terms of LGPLv2.1+ or Expat.
838 (license (list license:lgpl2.1+ license:expat))))
839
840(define-public python2-pycurl
841 (package-with-python2 python-pycurl))
842
1b2f753d
LC
843(define-public python-webencodings
844 (package
845 (name "python-webencodings")
b0a2c9cb 846 (version "0.5.1")
1b2f753d
LC
847 (source (origin
848 (method url-fetch)
849 (uri (pypi-uri "webencodings" version))
850 (sha256
851 (base32
b0a2c9cb 852 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
1b2f753d
LC
853 (build-system python-build-system)
854 (arguments
855 '(#:phases
856 (modify-phases %standard-phases
857 (replace 'check
858 (lambda _
12adfdf0
TGR
859 (invoke "py.test" "-v" "webencodings/tests.py")
860 #t)))))
1b2f753d
LC
861 (native-inputs
862 `(("python-pytest" ,python-pytest)))
863 (home-page "https://github.com/SimonSapin/python-webencodings")
864 (synopsis "Character encoding aliases for legacy web content")
865 (description
866 "In order to be compatible with legacy web content when interpreting
867something like @code{Content-Type: text/html; charset=latin1}, tools need
868to use a particular set of aliases for encoding labels as well as some
869overriding rules. For example, @code{US-ASCII} and @code{iso-8859-1} on
a40f732b 870the web are actually aliases for @code{windows-1252}, and a @code{UTF-8}
1b2f753d
LC
871or @code{UTF-16} BOM takes precedence over any other encoding declaration.
872The WHATWG @url{https://encoding.spec.whatwg.org/,Encoding} standard
873defines all such details so that implementations do not have to
874reverse-engineer each other.
875
876This module implements the Encoding standard and has encoding labels and
877BOM detection, but the actual implementation for encoders and decoders
878is Python’s.")
879 (license license:bsd-3)))
880
881(define-public python2-webencodings
882 (package-with-python2 python-webencodings))
883
884(define-public python-openid
885 (package
886 (name "python-openid")
a05b7f6a 887 (version "3.2.0")
1b2f753d
LC
888 (source
889 (origin
890 (method url-fetch)
891 (uri (pypi-uri "python3-openid" version))
892 (sha256
893 (base32
a05b7f6a 894 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
1b2f753d
LC
895 (build-system python-build-system)
896 (arguments
897 `(#:phases
898 (modify-phases %standard-phases
899 (replace 'check
900 (lambda _
10275b74
EF
901 (invoke "coverage" "run" "-m"
902 "unittest" "openid.test.test_suite"))))))
1b2f753d
LC
903 (properties `((python2-variant . ,(delay python2-openid))))
904 (propagated-inputs
905 `(("python-defusedxml" ,python-defusedxml)))
906 (native-inputs
10275b74
EF
907 `(("python-coverage" ,python-coverage)
908 ("python-psycopg2" ,python-psycopg2)
1b2f753d
LC
909 ("python-django" ,python-django)))
910 (home-page "https://github.com/necaris/python3-openid")
911 (synopsis "OpenID support for servers and consumers")
912 (description "This library provides OpenID authentication for Python, both
913for clients and servers.")
914 (license license:asl2.0)))
915
916(define-public python2-openid
917 (package
918 (name "python2-openid")
919 (version "2.2.5")
920 (source
921 (origin
922 (method url-fetch)
923 (uri (pypi-uri "python-openid" version))
924 (sha256
925 (base32
926 "1vvhxlghjan01snfdc4k7ykd80vkyjgizwgg9bncnin8rqz1ricj"))))
927 (build-system python-build-system)
928 (arguments
929 ;; Python 3 support is in `python3-openid`, a separate package.
9597c550
JL
930 `(#:python ,python-2
931 ;; Tests aren't initialized correctly.
932 #:tests? #f))
1b2f753d
LC
933 (home-page "https://github.com/openid/python-openid")
934 (synopsis "OpenID support for servers and consumers")
935 (description "This library provides OpenID authentication for Python, both
936for clients and servers.")
937 (license license:asl2.0)))
938
939(define-public python-cssutils
940 (package
941 (name "python-cssutils")
3c5658c5 942 (version "1.0.2")
1b2f753d
LC
943 (source
944 (origin
945 (method url-fetch)
946 (uri (pypi-uri "cssutils" version))
947 (sha256
948 (base32
3c5658c5 949 "1bxchrbqzapwijap0yhlxdil1w9bmwvgx77aizlkhc2mcxjg1z52"))))
1b2f753d
LC
950 (build-system python-build-system)
951 (native-inputs
3c5658c5 952 `(("unzip" ,unzip))) ; for unpacking the source
1b2f753d 953 (arguments
3c5658c5 954 `(#:tests? #f)) ; tests require python-pbr < 1.7.0
1b2f753d
LC
955 (home-page "http://cthedot.de/cssutils/")
956 (synopsis
957 "CSS Cascading Style Sheets library for Python")
958 (description
959 "Cssutils is a Python package for parsing and building CSS
960Cascading Style Sheets. Currently it provides a DOM only and no rendering
961options.")
962 (license license:lgpl3+)))
963
964(define-public python2-cssutils
965 (package-with-python2 python-cssutils))
966
02eb70bd
BT
967(define-public python-css-parser
968 (package
969 (inherit python-cssutils)
970 (name "python-css-parser")
3e16b3c4 971 (version "1.0.6")
02eb70bd
BT
972 (source
973 (origin
974 (method url-fetch)
975 (uri (pypi-uri "css-parser" version ".tar.gz"))
976 (sha256
3e16b3c4 977 (base32 "0bmg4kiiir6pj9x3sd12x4dz2c1xpp2bn5nn60fxnbk2lnl4im2f"))))
02eb70bd
BT
978 (home-page "https://github.com/ebook-utils/css-parser")
979 (synopsis "Fork of cssutils modified for parsing ebooks")
980 (description
2dee1495
TGR
981 "Css-parser is a Python package for parsing and building CSS
982Cascading Style Sheets. Currently it provides a DOM only and no rendering
983options.
984
985It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
986cssutils not receiving updates as of 1.0.2.")
02eb70bd
BT
987 (license license:lgpl3+)))
988
989(define-public python2-css-parser
990 (package-with-python2 python-css-parser))
991
1b2f753d
LC
992(define-public python-cssselect
993 (package
994 (name "python-cssselect")
59e646ab
MB
995 (version "1.1.0")
996 (source (origin
997 ;; The PyPI release does not contain tests.
998 (method git-fetch)
999 (uri (git-reference
1000 (url "https://github.com/scrapy/cssselect")
1001 (commit (string-append "v" version))))
1002 (file-name (git-file-name name version))
1003 (sha256
1004 (base32
1005 "0xslrnhbrmgakp4xg6k26qffay3kqffp3a2z2sk27c65rwxa79kc"))))
1b2f753d
LC
1006 (build-system python-build-system)
1007 (arguments
59e646ab
MB
1008 `(#:phases (modify-phases %standard-phases
1009 (replace 'check
1010 (lambda _
1011 (invoke "pytest" "-vv"))))))
1012 (native-inputs
1013 `(("python-lxml" ,python-lxml)
1014 ("python-pytest" ,python-pytest)))
1015 (home-page "https://github.com/scrapy/cssselect")
1016 (synopsis "CSS3 selector parser and translator to XPath 1.0")
1b2f753d 1017 (description
59e646ab 1018 "Cssselect ia a Python module that parses CSS3 Selectors and translates
1b2f753d
LC
1019them to XPath 1.0 expressions. Such expressions can be used in lxml or
1020another XPath engine to find the matching elements in an XML or HTML document.")
1021 (license license:bsd-3)))
1022
1023(define-public python2-cssselect
1024 (package-with-python2 python-cssselect))
1025
abbb1530
MB
1026(define-public python-databricks-cli
1027 (package
1028 (name "python-databricks-cli")
1029 (version "0.14.0")
1030 (home-page "https://github.com/databricks/databricks-cli")
1031 (source (origin
1032 (method git-fetch)
1033 (uri (git-reference (url home-page) (commit version)))
1034 (file-name (git-file-name name version))
1035 (sha256
1036 (base32
1037 "0imwpfda2pxix1rx0nlqs48v58icfw065nsv53rpg0dw4bw9x2wi"))))
1038 (build-system python-build-system)
1039 (arguments
1040 `(#:phases (modify-phases %standard-phases
1041 (replace 'check
1042 (lambda _
1043 (setenv "PYTHONPATH"
1044 (string-append "./build/lib:"
1045 (getenv "PYTHONPATH")))
1046 (invoke "pytest" "tests" "-vv"
1047 ;; XXX: This fails with newer Pytest
1048 ;; (upstream uses Pytest 3..).
1049 "-k" "not test_get_request_with_list"))))))
1050 (native-inputs
1051 `(;; For tests.
1052 ("python-decorator" ,python-decorator)
1053 ("python-mock" ,python-mock)
1054 ("python-pytest" ,python-pytest)
1055 ("python-requests-mock" ,python-requests-mock)))
1056 (propagated-inputs
1057 `(("python-click" ,python-click)
1058 ("python-configparser" ,python-configparser)
1059 ("python-requests" ,python-requests)
1060 ("python-six" ,python-six)
1061 ("python-tabulate" ,python-tabulate)))
1062 (synopsis "Command line interface for Databricks")
1063 (description
1064 "The Databricks Command Line Interface is a tool which provides an easy
1065to use interface to the Databricks platform. The CLI is built on top of the
1066Databricks REST APIs.")
1067 (license license:asl2.0)))
1068
1b2f753d
LC
1069(define-public python-openid-cla
1070 (package
1071 (name "python-openid-cla")
1072 (version "1.2")
1073 (source
1074 (origin
1075 (method url-fetch)
1076 (uri (pypi-uri "python-openid-cla" version))
1077 (sha256
1078 (base32
1079 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
1080 (build-system python-build-system)
1081 (arguments '(#:tests? #f)) ; No tests.
1082 (home-page "https://github.com/puiterwijk/python-openid-cla/")
1083 (synopsis "Implementation of the OpenID CLA extension for python-openid")
1084 (description "@code{openid-cla} is an implementation of the OpenID
1085contributor license agreement extension for python-openid.")
1086 (license license:bsd-3)))
1087
1088(define-public python2-openid-cla
1089 (package-with-python2 python-openid-cla))
1090
1091(define-public python-openid-teams
1092 (package
1093 (name "python-openid-teams")
1094 (version "1.1")
1095 (source
1096 (origin
1097 (method url-fetch)
1098 (uri (pypi-uri "python-openid-teams" version))
1099 (sha256
1100 (base32
1101 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
1102 (build-system python-build-system)
1103 (arguments '(#:tests? #f)) ; No tests.
1104 (home-page "https://github.com/puiterwijk/python-openid-teams/")
1105 (synopsis "Implementation of the OpenID teams extension for python-openid")
1106 (description
1107 "@code{openid-teams} is an implementation of the OpenID
1108teams extension for python-openid.")
1109 (license license:bsd-3)))
1110
1111(define-public python2-openid-teams
1112 (package-with-python2 python-openid-teams))
1113
e87b063f
VM
1114(define-public python-priority
1115 (package
1116 (name "python-priority")
1117 (version "1.3.0")
1118 (source
1119 (origin
1120 (method url-fetch)
1121 (uri (pypi-uri "priority" version))
1122 (sha256
1123 (base32 "1gpzn9k9zgks0iw5wdmad9b4dry8haiz2sbp6gycpjkzdld9dhbb"))))
1124 (build-system python-build-system)
1125 (arguments
1126 `(#:phases
1127 (modify-phases %standard-phases
1128 (replace 'check
1129 (lambda* (#:key inputs outputs #:allow-other-keys)
1130 (add-installed-pythonpath inputs outputs)
1131 (invoke "pytest" "-vv" "test" "-k"
1132 ;; This test exceeded the Hypothesis deadline.
1133 "not test_period_of_repetition"))))))
1134 (native-inputs
1135 `(("python-hypothesis" ,python-hypothesis)
1136 ("python-pytest" ,python-pytest)
1137 ("python-pytest-cov" ,python-pytest-cov)
1138 ("python-pytest-xdist" ,python-pytest-xdist)))
1139 (home-page "https://python-hyper.org/projects/priority/en/latest/")
1140 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
1141 (description
1142 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
1143set out in RFC 7540 Section 5.3 (Stream Priority).")
1144 (license license:expat)))
1145
3ede1e4d
VM
1146(define-public python-wsproto
1147 (package
1148 (name "python-wsproto")
1149 (version "0.15.0")
1150 (source
1151 (origin
1152 (method url-fetch)
1153 (uri (pypi-uri "wsproto" version))
1154 (sha256
1155 (base32 "17gsxlli4w8am1wwwl3k90hpdfa213ax40ycbbvb7hjx1v1rhiv1"))))
1156 (build-system python-build-system)
1157 (arguments
1158 `(#:phases
1159 (modify-phases %standard-phases
1160 (replace 'check
1161 (lambda* (#:key inputs outputs #:allow-other-keys)
1162 (add-installed-pythonpath inputs outputs)
1163 (invoke "pytest" "-vv" "test"))))))
1164 (native-inputs
1165 `(("python-pytest" ,python-pytest)))
1166 (propagated-inputs
1167 `(("python-h11" ,python-h11)))
1168 (home-page "https://github.com/python-hyper/wsproto/")
1169 (synopsis "WebSockets state-machine based protocol implementation")
1170 (description
1171 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
1172stack. It's written from the ground up to be embeddable in whatever program you
1173choose to use, ensuring that you can communicate via WebSockets, as defined in
1174RFC6455, regardless of your programming paradigm.")
1175 (license license:expat)))
1176
6a1f3593
VM
1177(define-public python-hypercorn
1178 (package
1179 (name "python-hypercorn")
1180 (version "0.10.2")
1181 (source
1182 (origin
1183 (method url-fetch)
1184 (uri (pypi-uri "Hypercorn" version))
1185 (sha256
1186 (base32 "15dgy47a18w2ls3hwykra1cyf7yzxmfjqnsqml482p12cxr2xwqr"))))
1187 (build-system python-build-system)
1188 (arguments
1189 `(#:phases
1190 (modify-phases %standard-phases
1191 (replace 'check
1192 (lambda* (#:key inputs outputs #:allow-other-keys)
1193 (add-installed-pythonpath inputs outputs)
1194 (invoke "pytest" "-vv"))))))
1195 (propagated-inputs
1196 `(("python-h11" ,python-h11)
1197 ("python-h2" ,python-h2)
1198 ("python-priority" ,python-priority)
1199 ("python-toml" ,python-toml)
1200 ("python-typing-extensions" ,python-typing-extensions)
1201 ("python-wsproto" ,python-wsproto)))
1202 (native-inputs
1203 `(("python-hypothesis" ,python-hypothesis)
1204 ("python-mock" ,python-mock)
1205 ("python-pytest" ,python-pytest)
1206 ("python-pytest-asyncio" ,python-pytest-asyncio)
1207 ("python-pytest-cov" ,python-pytest-cov)
1208 ("python-pytest-trio" ,python-pytest-trio)
1209 ("python-trio" ,python-trio)))
1210 (home-page "https://gitlab.com/pgjones/hypercorn/")
1211 (synopsis "ASGI Server based on Hyper libraries")
1212 (description
1213 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
1214wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
1215WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It can
1216utilise asyncio, uvloop, or trio worker types.")
1217 (license license:expat)))
1218
0e4f87cb
MB
1219(define-public python-querystring-parser
1220 (package
1221 (name "python-querystring-parser")
1222 (version "1.2.4")
1223 (source (origin
1224 (method url-fetch)
1225 (uri (pypi-uri "querystring_parser" version))
1226 (sha256
1227 (base32
1228 "0qlar8a0wa003hm2z6wcpb625r6vjj0a70rsni9h8lz0zwfcwkv4"))))
1229 (build-system python-build-system)
1230 (arguments
1231 `(#:phases (modify-phases %standard-phases
1232 (replace 'check
1233 (lambda _
1234 ;; XXX FIXME: This test is broken with Python 3.7:
1235 ;; https://github.com/bernii/querystring-parser/issues/35
1236 (substitute* "querystring_parser/tests.py"
1237 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
1238 "True"))
1239 (invoke "python" "querystring_parser/tests.py"))))))
1240 (propagated-inputs
1241 `(("python-six" ,python-six)))
1242 (home-page "https://github.com/bernii/querystring-parser")
1243 (synopsis "QueryString parser that correctly handles nested dictionaries")
1244 (description
1245 "This package provides a query string parser for Python and Django
1246projects that correctly creates nested dictionaries from sent form/querystring
1247data.")
1248 (license license:expat)))
1249
1b2f753d
LC
1250(define-public python-tornado
1251 (package
1252 (name "python-tornado")
3fcaf42a 1253 (version "5.1.1")
1b2f753d
LC
1254 (source
1255 (origin
1256 (method url-fetch)
1257 (uri (pypi-uri "tornado" version))
1258 (sha256
3fcaf42a
EF
1259 (base32
1260 "02clqk2116jbnq8lnaqmdw3p52nqrd9ib59r4xz2ll43fpcmhlaf"))))
1b2f753d
LC
1261 (build-system python-build-system)
1262 (arguments
1263 '(;; FIXME: Two tests error out with:
1264 ;; AssertionError: b'Error in atexit._run_exitfuncs:\nFileNotF[44 chars]ry\n' != b''
1265 ;; #:phases
1266 ;; (modify-phases %standard-phases
1267 ;; (replace 'check
1268 ;; (lambda _
1269 ;; ;; 'setup.py test' hits an AssertionError on BSD-specific
1270 ;; ;; "tornado/platform/kqueue.py". This is the supported method:
3fcaf42a 1271 ;; (invoke "python" "-m" "tornado.test.runtests")
12adfdf0 1272 ;; #t)))
1b2f753d
LC
1273 #:tests? #f))
1274 (native-inputs
1275 `(("python-certifi" ,python-certifi)))
3fcaf42a 1276 (home-page "https://www.tornadoweb.org/")
1b2f753d
LC
1277 (synopsis "Python web framework and asynchronous networking library")
1278 (description
1279 "Tornado is a Python web framework and asynchronous networking library,
1280originally developed at FriendFeed. By using non-blocking network I/O,
1281Tornado can scale to tens of thousands of open connections, making it ideal
1282for long polling, WebSockets, and other applications that require a long-lived
1283connection to each user.")
1284 (license license:asl2.0)
1285 (properties `((python2-variant . ,(delay python2-tornado))))))
1286
73950470
RW
1287(define-public python-tornado-6
1288 (package
1289 (name "python-tornado")
1290 (version "6.0.4")
1291 (source
1292 (origin
1293 (method url-fetch)
1294 (uri (pypi-uri "tornado" version))
1295 (sha256
1296 (base32
1297 "1p5n7sw4580pkybywg93p8ddqdj9lhhy72rzswfa801vlidx9qhg"))))
1298 (build-system python-build-system)
1299 (arguments
1300 '(#:phases
1301 (modify-phases %standard-phases
1302 (replace 'check
1303 (lambda _
1304 (invoke "python" "-m" "tornado.test.runtests")
1305 #t)))))
1306 (native-inputs
1307 `(("python-certifi" ,python-certifi)))
1308 (home-page "https://www.tornadoweb.org/")
1309 (synopsis "Python web framework and asynchronous networking library")
1310 (description
1311 "Tornado is a Python web framework and asynchronous networking library,
1312originally developed at FriendFeed. By using non-blocking network I/O,
1313Tornado can scale to tens of thousands of open connections, making it ideal
1314for long polling, WebSockets, and other applications that require a long-lived
1315connection to each user.")
1316 (license license:asl2.0)))
1317
1b2f753d
LC
1318(define-public python2-tornado
1319 (let ((tornado (package-with-python2 (strip-python2-variant python-tornado))))
1320 (package (inherit tornado)
1321 (propagated-inputs
1322 `(("python2-backport-ssl-match-hostname"
1323 ,python2-backport-ssl-match-hostname)
3fcaf42a 1324 ("python2-backports-abc" ,python2-backports-abc)
1b2f753d
LC
1325 ("python2-singledispatch" ,python2-singledispatch)
1326 ,@(package-propagated-inputs tornado))))))
1327
1328(define-public python-tornado-http-auth
1329 (package
1330 (name "python-tornado-http-auth")
5051ef95 1331 (version "1.1.1")
1b2f753d
LC
1332 (source
1333 (origin
1334 (method url-fetch)
1335 (uri (pypi-uri "tornado-http-auth" version))
1336 (sha256
5051ef95 1337 (base32 "0hyc5f0a09i5yb99pk4bxpg6w9ichbrb5cv7hc9hff7rxd8w0v0x"))))
1b2f753d
LC
1338 (build-system python-build-system)
1339 (propagated-inputs
1340 `(("python-tornado" ,python-tornado)))
5051ef95
TGR
1341 (home-page "https://github.com/gvalkov/tornado-http-auth")
1342 (synopsis "Digest and basic authentication module for Tornado")
1b2f753d
LC
1343 (description
1344 "Provides support for adding authentication to services using the Tornado
1345web framework, either via the basic or digest authentication schemes.")
1346 (license license:asl2.0)))
1347
1348(define-public python-terminado
1349 (package
1350 (name "python-terminado")
d47b21c6 1351 (version "0.8.1")
1b2f753d
LC
1352 (source
1353 (origin
1354 (method url-fetch)
1355 (uri (pypi-uri "terminado" version))
1356 (sha256
1357 (base32
d47b21c6 1358 "0yh69k6579g848rmjyllb5h75pkvgcy27r1l3yzgkf33wnnzkasm"))))
1b2f753d
LC
1359 (build-system python-build-system)
1360 (propagated-inputs
1361 `(("python-tornado" ,python-tornado)
1362 ("python-ptyprocess" ,python-ptyprocess)))
1363 (native-inputs
1364 `(("python-nose" ,python-nose)))
1365 (arguments
1366 `(#:phases
1367 (modify-phases %standard-phases
1368 (replace 'check
d47b21c6 1369 (lambda _ (invoke "nosetests") #t)))))
1b2f753d
LC
1370 (home-page "https://github.com/takluyver/terminado")
1371 (synopsis "Terminals served to term.js using Tornado websockets")
1372 (description "This package provides a Tornado websocket backend for the
1373term.js Javascript terminal emulator library.")
1374 (license license:bsd-2)
1375 (properties `((python2-variant . ,(delay python2-terminado))))))
1376
1377(define-public python2-terminado
1378 (let ((terminado (package-with-python2 (strip-python2-variant python-terminado))))
1379 (package (inherit terminado)
1380 (propagated-inputs
1381 `(("python2-backport-ssl-match-hostname"
1382 ,python2-backport-ssl-match-hostname)
94249db8 1383 ("python2-futures" ,python2-futures)
1b2f753d
LC
1384 ,@(package-propagated-inputs terminado))))))
1385
589e3f4e
LC
1386(define-public python-wsgi-intercept
1387 (package
1388 (name "python-wsgi-intercept")
1389 (version "1.2.2")
1390 (source (origin
1391 (method url-fetch)
2b221866 1392 (uri (pypi-uri "wsgi_intercept" version))
589e3f4e
LC
1393 (sha256
1394 (base32
1395 "0kjj2v2dvmnpdd5h5gk9rzz0f54rhjb0yiz3zg65bmp65slfw65d"))))
1396 (build-system python-build-system)
1397 (propagated-inputs
1398 `(("python-six" ,python-six)))
1399 (native-inputs
1400 `(("python-pytest" ,python-pytest)
1401 ("python-httplib2" ,python-httplib2)
1402 ("python-requests" ,python-requests)
1403 ("python-urllib3" ,python-urllib3)))
1404 (synopsis "Puts a WSGI application in place of a real URI for testing")
1405 (description "Wsgi_intercept installs a WSGI application in place of a real
1406URI for testing. Testing a WSGI application normally involves starting a
1407server at a local host and port, then pointing your test code to that address.
1408Instead, this library lets you intercept calls to any specific host/port
1409combination and redirect them into a WSGI application importable by your test
1410program. Thus, you can avoid spawning multiple processes or threads to test
1411your Web app.")
1412 (home-page "https://github.com/cdent/wsgi-intercept")
1413 (license license:expat)))
1414
1b2f753d
LC
1415(define-public python-webob
1416 (package
1417 (name "python-webob")
712190ed 1418 (version "1.8.6")
1b2f753d
LC
1419 (source
1420 (origin
1421 (method url-fetch)
1422 (uri (pypi-uri "WebOb" version))
1423 (sha256
1424 (base32
712190ed 1425 "026i3z99nr3px75isa9mbnky5i7rffiv4d124h5kxfjjsxz92fma"))))
1b2f753d
LC
1426 (build-system python-build-system)
1427 (native-inputs
1428 `(("python-nose" ,python-nose)))
9be5ecdf 1429 (home-page "https://webob.org/")
1b2f753d
LC
1430 (synopsis "WSGI request and response object")
1431 (description
1432 "WebOb provides wrappers around the WSGI request environment, and an
1433object to help create WSGI responses.")
1434 (license license:expat)))
1435
1436(define-public python2-webob
1437 (package-with-python2 python-webob))
1438
1439(define-public python-zope-event
1440 (package
1441 (name "python-zope-event")
7b43d3a7 1442 (version "4.4")
1b2f753d
LC
1443 (source
1444 (origin
1445 (method url-fetch)
da501c49 1446 (uri (pypi-uri "zope.event" version))
1b2f753d
LC
1447 (sha256
1448 (base32
7b43d3a7 1449 "1ksbc726av9xacml6jhcfyn828hlhb9xlddpx6fcvnlvmpmpvhk9"))))
1b2f753d 1450 (build-system python-build-system)
e85af137 1451 (home-page "https://pypi.org/project/zope.event/")
1b2f753d
LC
1452 (synopsis "Event publishing system for Python")
1453 (description "Zope.event provides an event publishing API, intended for
1454use by applications which are unaware of any subscribers to their events. It
1455is a simple event-dispatching system on which more sophisticated event
1456dispatching systems can be built.")
1457 (license license:zpl2.1)))
1458
1459(define-public python2-zope-event
1460 (package-with-python2 python-zope-event))
1461
1462(define-public python-zope-interface
1463 (package
1464 (name "python-zope-interface")
6de5b0f0 1465 (version "5.1.0")
1b2f753d
LC
1466 (source
1467 (origin
1468 (method url-fetch)
ba93e239 1469 (uri (pypi-uri "zope.interface" version))
1b2f753d
LC
1470 (sha256
1471 (base32
6de5b0f0 1472 "03nrl6b8cb600dnnh46y149awvrm0gxyqgwq5hdw3lvys8mw9r20"))))
1b2f753d 1473 (build-system python-build-system)
6de5b0f0 1474 (arguments '(#:tests? #f)) ; test suite can't find python-zope-testing
1b2f753d 1475 (native-inputs
6de5b0f0
EF
1476 `(("python-coverage" ,python-coverage)
1477 ("python-nose" ,python-nose)
1478 ("python-zope-event" ,python-zope-event)
1479 ("python-zope-testing" ,python-zope-testing)))
1b2f753d
LC
1480 (home-page "https://github.com/zopefoundation/zope.interface")
1481 (synopsis "Python implementation of the \"design by contract\"
1482methodology")
1483 (description "Zope.interface provides an implementation of \"object
1484interfaces\" for Python. Interfaces are a mechanism for labeling objects as
1485conforming to a given API or contract.")
1486 (license license:zpl2.1)))
1487
1488(define-public python2-zope-interface
1489 (package-with-python2 python-zope-interface))
1490
1491(define-public python-zope-exceptions
1492 (package
1493 (name "python-zope-exceptions")
845717bb 1494 (version "4.4")
1b2f753d
LC
1495 (source
1496 (origin
1497 (method url-fetch)
3d010466 1498 (uri (pypi-uri "zope.exceptions" version))
1b2f753d
LC
1499 (sha256
1500 (base32
845717bb 1501 "1nkgfwawswmyc6i0b8g3ymvja4mb507m8yhid8s4rbxq3dmqhwhd"))))
1b2f753d
LC
1502 (build-system python-build-system)
1503 (arguments
6ae5d5da
EF
1504 '(#:phases
1505 (modify-phases %standard-phases
1506 (replace 'check
1507 (lambda _
1508 (invoke "zope-testrunner" "--test-path=src"))))))
1509 (native-inputs
1510 `(("python-zope-testrunner" ,python-zope-testrunner-bootstrap)))
1b2f753d
LC
1511 (propagated-inputs
1512 `(("python-zope-interface" ,python-zope-interface)))
b07e73a2 1513 (home-page "https://pypi.org/project/zope.exceptions/")
1b2f753d
LC
1514 (synopsis "Zope exceptions")
1515 (description "Zope.exceptions provides general-purpose exception types
1516that have uses outside of the Zope framework.")
1517 (license license:zpl2.1)))
1518
7dc36cdc
EF
1519(define-public python-zope-exceptions-bootstrap
1520 (package
1521 (inherit python-zope-exceptions)
1522 (arguments `(#:tests? #f))
1523 (propagated-inputs `())
1524 (native-inputs `())
1525 (properties `((hidden? . #t)))))
1526
1b2f753d
LC
1527(define-public python2-zope-exceptions
1528 (package-with-python2 python-zope-exceptions))
1529
1530(define-public python-zope-testing
1531 (package
1532 (name "python-zope-testing")
16839ec3 1533 (version "4.7")
1b2f753d
LC
1534 (source
1535 (origin
1536 (method url-fetch)
f9a6457d 1537 (uri (pypi-uri "zope.testing" version))
1b2f753d
LC
1538 (sha256
1539 (base32
16839ec3 1540 "1sh3c3i0m8n8fnhqiry0bk3rr356i56ry7calmn57s1pvv8yhsyn"))))
1b2f753d 1541 (build-system python-build-system)
e85af137 1542 (home-page "https://pypi.org/project/zope.testing/")
1b2f753d
LC
1543 (synopsis "Zope testing helpers")
1544 (description "Zope.testing provides a number of testing utilities for HTML
1545forms, HTTP servers, regular expressions, and more.")
1546 (license license:zpl2.1)))
1547
1548(define-public python2-zope-testing
1549 (package-with-python2 python-zope-testing))
1550
1551(define-public python-zope-testrunner
1552 (package
1553 (name "python-zope-testrunner")
3c23ae88 1554 (version "5.2")
1b2f753d
LC
1555 (source
1556 (origin
1557 (method url-fetch)
ddacd13d 1558 (uri (pypi-uri "zope.testrunner" version))
1b2f753d
LC
1559 (sha256
1560 (base32
3c23ae88 1561 "0jyyf1dcz156q95x2y7yw2v420q2xn3cff0c5aci7hmdmcbn0gc7"))))
1b2f753d
LC
1562 (build-system python-build-system)
1563 (arguments
1564 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
1565 (native-inputs
ddacd13d
MB
1566 `(("python-zope-testing" ,python-zope-testing)))
1567 (propagated-inputs
1b2f753d 1568 `(("python-six" ,python-six)
1b2f753d 1569 ("python-zope-exceptions" ,python-zope-exceptions)
ddacd13d 1570 ("python-zope-interface" ,python-zope-interface)))
e85af137 1571 (home-page "https://pypi.org/project/zope.testrunner/")
1b2f753d
LC
1572 (synopsis "Zope testrunner script")
1573 (description "Zope.testrunner provides a script for running Python
1574tests.")
1575 (license license:zpl2.1)))
1576
2f938b63
EF
1577(define-public python-zope-testrunner-bootstrap
1578 (package
1579 (inherit python-zope-testrunner)
1580 (arguments `(#:tests? #f))
1581 (propagated-inputs
1582 `(("python-six" ,python-six)
1583 ("python-zope-exceptions" ,python-zope-exceptions-bootstrap)))
1584 (properties `((hidden? . #t)))))
1585
1b2f753d 1586(define-public python2-zope-testrunner
ddacd13d 1587 (package-with-python2 python-zope-testrunner))
1b2f753d
LC
1588
1589(define-public python-zope-i18nmessageid
1590 (package
1591 (name "python-zope-i18nmessageid")
ce4b7a44 1592 (version "5.0.1")
1b2f753d
LC
1593 (source
1594 (origin
1595 (method url-fetch)
8a84d796 1596 (uri (pypi-uri "zope.i18nmessageid" version))
1b2f753d
LC
1597 (sha256
1598 (base32
ce4b7a44 1599 "0ndhn4w1qgwkfbwf9vm2bgq418z5g0wmfsgl0d9nz62cd0mi8d4m"))))
1b2f753d 1600 (build-system python-build-system)
ce4b7a44
MB
1601 (native-inputs
1602 `(("python-coverage" ,python-coverage)
1603 ("python-zope-testrunner" ,python-zope-testrunner)))
1604 (propagated-inputs
1605 `(("python-six" ,python-six)))
e85af137 1606 (home-page "https://pypi.org/project/zope.i18nmessageid/")
1b2f753d
LC
1607 (synopsis "Message identifiers for internationalization")
1608 (description "Zope.i18nmessageid provides facilities for declaring
1609internationalized messages within program source text.")
1610 (license license:zpl2.1)))
1611
1612(define-public python2-zope-i18nmessageid
1613 (package-with-python2 python-zope-i18nmessageid))
1614
1615(define-public python-zope-schema
1616 (package
1617 (name "python-zope-schema")
9c2e6516 1618 (version "6.0.0")
1b2f753d
LC
1619 (source
1620 (origin
1621 (method url-fetch)
ab9e1740 1622 (uri (pypi-uri "zope.schema" version))
1b2f753d
LC
1623 (sha256
1624 (base32
9c2e6516 1625 "09jg47bxhfg1ahr1jxb5y0cbiszyk1j6fn1r1r7s6svjl3lbryr0"))))
1b2f753d
LC
1626 (build-system python-build-system)
1627 (arguments
9c2e6516
EF
1628 `(#:phases
1629 (modify-phases %standard-phases
1630 (replace 'check
1631 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
1632 (add-installed-pythonpath inputs outputs)
1633 (if tests?
1634 (invoke "zope-testrunner" "--test-path=src")
1635 #t))))))
1b2f753d
LC
1636 (propagated-inputs
1637 `(("python-zope-event" ,python-zope-event)
1b2f753d
LC
1638 ("python-zope-interface" ,python-zope-interface)))
1639 (native-inputs
a1e9c929
MB
1640 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
1641 ("python-zope-testing" ,python-zope-testing)
1642 ("python-zope-testrunner" ,python-zope-testrunner)))
e85af137 1643 (home-page "https://pypi.org/project/zope.schema/")
1b2f753d
LC
1644 (synopsis "Zope data schemas")
1645 (description "Zope.scheme provides extensions to zope.interface for
1646defining data schemas.")
1647 (license license:zpl2.1)))
1648
1649(define-public python2-zope-schema
1650 (package-with-python2 python-zope-schema))
1651
1652(define-public python-zope-configuration
1653 (package
1654 (name "python-zope-configuration")
047c1f24 1655 (version "4.4.0")
1b2f753d
LC
1656 (source (origin
1657 (method url-fetch)
cdf14a67 1658 (uri (pypi-uri "zope.configuration" version))
1b2f753d
LC
1659 (sha256
1660 (base32
047c1f24 1661 "0g6vrl7y27z9cj5xyrww9xlzk4npj55mgmlrcd9d2nj08jn2pw79"))))
1b2f753d 1662 (build-system python-build-system)
2585304c 1663 (native-inputs
047c1f24
EF
1664 `(("python-manuel" ,python-manuel)
1665 ("python-zope-testing" ,python-zope-testing)
2585304c 1666 ("python-zope-testrunner" ,python-zope-testrunner)))
1b2f753d
LC
1667 (propagated-inputs
1668 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
2585304c 1669 ("python-zope-interface" ,python-zope-interface)
1b2f753d 1670 ("python-zope-schema" ,python-zope-schema)))
e85af137 1671 (home-page "https://pypi.org/project/zope.configuration/")
1b2f753d
LC
1672 (synopsis "Zope Configuration Markup Language")
1673 (description "Zope.configuration implements ZCML, the Zope Configuration
1674Markup Language.")
1675 (license license:zpl2.1)))
1676
b25d148f
EF
1677(define-public python-zope-configuration-bootstrap
1678 (package
1679 (inherit python-zope-configuration)
1680 (arguments `(#:tests? #f))
1681 (native-inputs `())
1682 (properties `((hidden? . #t)))))
1683
1b2f753d
LC
1684(define-public python2-zope-configuration
1685 (package-with-python2 python-zope-configuration))
1686
3f795cf8
EF
1687(define-public python-zope-copy
1688 (package
1689 (name "python-zope-copy")
1690 (version "4.2")
1691 (source
1692 (origin
1693 (method url-fetch)
1694 (uri (pypi-uri "zope.copy" version))
1695 (sha256
1696 (base32
1697 "06m75434krl57n6p73c2qj55k5i3fixg887j8ss01ih6zw4rvfs7"))))
1698 (build-system python-build-system)
1699 (arguments
1700 '(#:phases
1701 (modify-phases %standard-phases
1702 (replace 'check
1703 (lambda _
1704 (invoke "zope-testrunner" "--test-path=src" "\\[]"))))))
1705 (propagated-inputs
1706 `(("python-zope-interface" ,python-zope-interface)))
1707 (native-inputs
1708 `(("python-zope-component" ,python-zope-component-bootstrap)
1709 ("python-zope-location" ,python-zope-location-bootstrap)
1710 ("python-zope-testing" ,python-zope-testing)
1711 ("python-zope-testrunner" ,python-zope-testrunner)))
1712 (home-page "https://github.com/zopefoundation/zope.copy")
1713 (synopsis "Pluggable object copying mechanism")
1714 (description
1715 "This package provides a pluggable mechanism for copying persistent objects.")
1716 (license license:zpl2.1)))
1717
1b2f753d
LC
1718(define-public python-zope-proxy
1719 (package
1720 (name "python-zope-proxy")
556eec71 1721 (version "4.3.5")
1b2f753d
LC
1722 (source
1723 (origin
1724 (method url-fetch)
510cacc7 1725 (uri (pypi-uri "zope.proxy" version))
1b2f753d
LC
1726 (sha256
1727 (base32
556eec71 1728 "14h7nyfbl5vpfk0rbviy4ygdfx0yx5kncvg6jpbdb0dhwna0ssm6"))))
1b2f753d 1729 (build-system python-build-system)
a3a7a033 1730 (native-inputs
9085a0c9
EF
1731 `(("python-zope-security" ,python-zope-security-bootstrap)
1732 ("python-zope-testrunner" ,python-zope-testrunner)))
1b2f753d
LC
1733 (propagated-inputs
1734 `(("python-zope-interface" ,python-zope-interface)))
e85af137 1735 (home-page "https://pypi.org/project/zope.proxy/")
1b2f753d
LC
1736 (synopsis "Generic, transparent proxies")
1737 (description "Zope.proxy provides generic, transparent proxies for Python.
1738Proxies are special objects which serve as mostly-transparent wrappers around
1739another object, intervening in the apparent behavior of the wrapped object
1740only when necessary to apply the policy (e.g., access checking, location
1741brokering, etc.) for which the proxy is responsible.")
1742 (license license:zpl2.1)))
1743
f3d446cc
EF
1744(define-public python-zope-proxy-bootstrap
1745 (package
1746 (inherit python-zope-proxy)
1747 (arguments `(#:tests? #f))
1748 (native-inputs `())
1749 (properties `((hidden? . #t)))))
1750
1b2f753d
LC
1751(define-public python2-zope-proxy
1752 (package-with-python2 python-zope-proxy))
1753
404d4915
EF
1754(define-public python-zope-hookable
1755 (package
1756 (name "python-zope-hookable")
1757 (version "5.0.1")
1758 (source
1759 (origin
1760 (method url-fetch)
1761 (uri (pypi-uri "zope.hookable" version))
1762 (sha256
1763 (base32
1764 "0hc82lfr7bk53nvbxvjkibkarngyrzgfk2i6bg8wshl0ly0pdl19"))))
1765 (build-system python-build-system)
1766 (native-inputs
1767 `(("python-coverage" ,python-coverage)
1768 ("python-zope-testing" ,python-zope-testing)))
1769 (home-page "https://github.com/zopefoundation/zope.hookable")
1770 (synopsis "Zope hookable")
1771 (description "This package supports the efficient creation of hookable
1772objects, which are callable objects that are meant to be optionally replaced.
1773The idea is that you create a function that does some default thing and make i
1774hookable. Later, someone can modify what it does by calling its sethook method
1775and changing its implementation. All users of the function, including those
1776that imported it, will see the change.")
1777 (license license:zpl2.1)))
1778
1b2f753d
LC
1779(define-public python-zope-location
1780 (package
1781 (name "python-zope-location")
386d2fd1 1782 (version "4.2")
1b2f753d
LC
1783 (source
1784 (origin
1785 (method url-fetch)
6e6bbc02 1786 (uri (pypi-uri "zope.location" version))
1b2f753d
LC
1787 (sha256
1788 (base32
386d2fd1 1789 "1b40pzl8v00d583d3gsxv1qjdw2dhghlgkbgxl3m07d5r3izj857"))))
1b2f753d
LC
1790 (build-system python-build-system)
1791 (arguments
1792 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
386d2fd1
MB
1793 (native-inputs
1794 `(("python-zope-testrunner" ,python-zope-testrunner)))
1b2f753d 1795 (propagated-inputs
386d2fd1
MB
1796 `(("python-zope-interface" ,python-zope-interface)
1797 ("python-zope-proxy" ,python-zope-proxy)
1b2f753d 1798 ("python-zope-schema" ,python-zope-schema)))
e85af137 1799 (home-page "https://pypi.org/project/zope.location/")
1b2f753d
LC
1800 (synopsis "Zope location library")
1801 (description "Zope.location implements the concept of \"locations\" in
1802Zope3, which are are special objects that have a structural location.")
1803 (license license:zpl2.1)))
1804
50566124
EF
1805(define-public python-zope-location-bootstrap
1806 (package
1807 (inherit python-zope-location)
1808 (arguments `(#:tests? #f))
1809 (native-inputs `())
1810 (properties `((hidden? . #t)))))
1811
1b2f753d
LC
1812(define-public python2-zope-location
1813 (package-with-python2 python-zope-location))
1814
1815(define-public python-zope-security
1816 (package
1817 (name "python-zope-security")
4874cae6 1818 (version "5.1.1")
1b2f753d
LC
1819 (source
1820 (origin
1821 (method url-fetch)
fc283a5e 1822 (uri (pypi-uri "zope.security" version))
1b2f753d
LC
1823 (sha256
1824 (base32
4874cae6 1825 "11lfw67cigscfax9c5j63xcvz2qcj724zx5fcdqyc94am2glim0h"))))
1b2f753d 1826 (build-system python-build-system)
1b2f753d 1827 (propagated-inputs
e26e084f
MB
1828 `(("python-zope-component" ,python-zope-component)
1829 ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
1830 ("python-zope-interface" ,python-zope-interface)
1831 ("python-zope-location" ,python-zope-location)
1b2f753d
LC
1832 ("python-zope-proxy" ,python-zope-proxy)
1833 ("python-zope-schema" ,python-zope-schema)))
1834 (native-inputs
4874cae6
EF
1835 `(("python-btrees" ,python-btrees)
1836 ("python-zope-component" ,python-zope-component-bootstrap)
1837 ("python-zope-configuration" ,python-zope-configuration-bootstrap)
1838 ("python-zope-location" ,python-zope-location-bootstrap)
1839 ("python-zope-testing" ,python-zope-testing)
1840 ("python-zope-testrunner" ,python-zope-testrunner)))
e85af137 1841 (home-page "https://pypi.org/project/zope.security/")
1b2f753d
LC
1842 (synopsis "Zope security framework")
1843 (description "Zope.security provides a generic mechanism to implement
1844security policies on Python objects.")
1845 (license license:zpl2.1)))
1846
e2ba910e
EF
1847(define-public python-zope-security-bootstrap
1848 (package
1849 (inherit python-zope-security)
1850 (arguments `(#:tests? #f))
1851 (propagated-inputs
1852 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
1853 ("python-zope-interface" ,python-zope-interface)
1854 ("python-zope-proxy" ,python-zope-proxy-bootstrap)
1855 ("python-zope-schema" ,python-zope-schema)))
1856 (native-inputs `())
1857 (properties `((hidden? . #t)))))
1858
1b2f753d 1859(define-public python2-zope-security
e26e084f 1860 (package-with-python2 python-zope-security))
1b2f753d
LC
1861
1862(define-public python-zope-component
1863 (package
1864 (name "python-zope-component")
256e8a82 1865 (version "4.6.2")
1b2f753d
LC
1866 (source
1867 (origin
1868 (method url-fetch)
1869 (uri (pypi-uri "zope.component" version))
1870 (sha256
1871 (base32
256e8a82 1872 "14iwp95hh6q5dj4k9h1iw75cbp89bs27nany4dinyglb44c8jqli"))))
1b2f753d
LC
1873 (build-system python-build-system)
1874 (arguments
256e8a82
EF
1875 '(#:phases
1876 (modify-phases %standard-phases
1877 (replace 'check
1878 (lambda* (#:key inputs outputs #:allow-other-keys)
1879 (add-installed-pythonpath inputs outputs)
1880 (invoke "python" "setup.py" "test"))))))
1b2f753d 1881 (native-inputs
256e8a82
EF
1882 `(("python-persistent" ,python-persistent)
1883 ("python-zope-configuration" ,python-zope-configuration-bootstrap)
1b2f753d 1884 ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
256e8a82
EF
1885 ("python-zope-location" ,python-zope-location-bootstrap)
1886 ("python-zope-proxy" ,python-zope-proxy-bootstrap)
1887 ("python-zope-security" ,python-zope-security-bootstrap)
1888 ("python-zope-testing" ,python-zope-testing)
1889 ("python-zope-testrunner" ,python-zope-testrunner)))
1890 (propagated-inputs
1891 `(("python-zope-deferredimport" ,python-zope-deferredimport)
1892 ("python-zope-deprecation" ,python-zope-deprecation)
1893 ("python-zope-event" ,python-zope-event)
1894 ("python-zope-hookable" ,python-zope-hookable)
1895 ("python-zope-interface" ,python-zope-interface)))
1b2f753d
LC
1896 (home-page "https://github.com/zopefoundation/zope.component")
1897 (synopsis "Zope Component Architecture")
1898 (description "Zope.component represents the core of the Zope Component
1899Architecture. Together with the zope.interface package, it provides
1900facilities for defining, registering and looking up components.")
1901 (license license:zpl2.1)))
1902
24ba0d37
EF
1903(define-public python-zope-component-bootstrap
1904 (package
1905 (inherit python-zope-component)
1906 (arguments `(#:tests? #f))
1907 (native-inputs `())
1908 (properties `((hidden? . #t)))))
1909
1b2f753d
LC
1910(define-public python2-zope-component
1911 (package-with-python2 python-zope-component))
1912
2ed6491f
EF
1913(define-public python-zope-deferredimport
1914 (package
1915 (name "python-zope-deferredimport")
1916 (version "4.3.1")
1917 (source
1918 (origin
1919 (method url-fetch)
1920 (uri (pypi-uri "zope.deferredimport" version))
1921 (sha256
1922 (base32
1923 "1q89v54dwniiqypjbwywwdfjdr4kdkqlyqsgrpplgvsygdg39cjp"))))
1924 (build-system python-build-system)
1925 (propagated-inputs
1926 `(("python-zope-proxy" ,python-zope-proxy)))
1927 (native-inputs
1928 `(("python-zope-testrunner" ,python-zope-testrunner)))
1929 (home-page "https://github.com/zopefoundation/zope.deferredimport")
1930 (synopsis "Defer imports until used by code")
1931 (description
1932 "Often, especially for package modules, you want to import names for
1933convenience, but not actually perform the imports until necessary. The
1934@code{zope.deferredimport} package provided facilities for defining names in
1935modules that will be imported from somewhere else when used. You can also cause
1936deprecation warnings to be issued when a variable is used.")
1937 (license license:zpl2.1)))
1938
1b2f753d
LC
1939(define-public python-ndg-httpsclient
1940 (package
1941 (name "python-ndg-httpsclient")
57d5d3da 1942 (version "0.5.1")
1b2f753d
LC
1943 (source (origin
1944 (method url-fetch)
1945 (uri (pypi-uri "ndg_httpsclient" version))
1946 (sha256
1947 (base32
57d5d3da 1948 "0412b7i1s4vj7lz9r72nmb28h9syd4q2x89bdirkkc3a6z8awbyp"))))
1b2f753d
LC
1949 (build-system python-build-system)
1950 (arguments
1951 '(;; The tests appear to require networking.
1952 #:tests? #f))
1953 (propagated-inputs
1954 `(("python-pyopenssl" ,python-pyopenssl)))
1955 (synopsis "HTTPS support for Python's httplib and urllib2")
1956 (description "This is a HTTPS client implementation for httplib and urllib2
eed0f1e8
TGR
1957based on PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation
1958over the default provided with Python and, importantly, enables full
1959verification of the SSL peer.")
1b2f753d
LC
1960 (home-page "https://github.com/cedadev/ndg_httpsclient/")
1961 (license license:bsd-3)))
1962
1963;; python2-openssl requires special care, so package-with-python2 is
1964;; insufficient.
1965(define-public python2-ndg-httpsclient
1966 (package (inherit python-ndg-httpsclient)
1967 (name "python2-ndg-httpsclient")
e3e74e40
TGR
1968 (arguments
1969 (substitute-keyword-arguments (package-arguments python-ndg-httpsclient)
1970 ((#:python _) python-2)))
1b2f753d
LC
1971 (propagated-inputs
1972 `(("python2-pyopenssl" ,python2-pyopenssl)))))
1973
1974(define-public python-websocket-client
1975 (package
1976 (name "python-websocket-client")
354d27e5 1977 (version "0.54.0")
1b2f753d
LC
1978 (source
1979 (origin
1980 (method url-fetch)
1981 (uri (pypi-uri "websocket_client" version))
1982 (sha256
1983 (base32
354d27e5 1984 "0j88zmikaypf38lvpkf4aaxrjp9j07dmy5ghj7kli0fv3p4n45g5"))))
1b2f753d
LC
1985 (build-system python-build-system)
1986 (propagated-inputs
1987 `(("python-six" ,python-six)))
1988 (home-page "https://github.com/liris/websocket-client")
1989 (synopsis "WebSocket client for Python")
1990 (description "The Websocket-client module provides the low level APIs for
1991WebSocket usage in Python programs.")
354d27e5 1992 (properties `((python2-variant . ,(delay python2-websocket-client))))
1b2f753d
LC
1993 (license license:lgpl2.1+)))
1994
1995(define-public python2-websocket-client
354d27e5
EF
1996 (let ((base (package-with-python2
1997 (strip-python2-variant python-websocket-client))))
1998 (package
1999 (inherit base)
2000 (native-inputs
2001 `(("python2-backport-ssl-match-hostname"
2002 ,python2-backport-ssl-match-hostname)
2003 ,@(package-native-inputs base))))))
1b2f753d 2004
b9f3046e
AE
2005(define-public python-purl
2006 (package
2007 (name "python-purl")
2008 (version "1.5")
2009 (source
2010 (origin
2011 (method url-fetch)
2012 (uri (pypi-uri "purl" version))
2013 (sha256
2014 (base32
2015 "15ibnz1xrh5msmn04j0nr00sz4n7jwx6cwd6zlx99kkz3vpin53m"))))
2016 (build-system python-build-system)
2017 (propagated-inputs `(("python-six" ,python-six)))
2018 (home-page
2019 "https://github.com/codeinthehole/purl")
2020 (synopsis
2021 "Python package for URL manipulation")
2022 (description
2023 "Purl is a Python package for handling URLs.")
2024 (license license:expat)))
2025
e1e577e0
VM
2026(define-public python-apiron
2027 (package
2028 (name "python-apiron")
2029 (version "5.1.0")
2030 (source
2031 (origin
2032 (method url-fetch)
2033 (uri (pypi-uri "apiron" version))
2034 (sha256
2035 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
2036 (build-system python-build-system)
2037 (arguments
2038 `(#:phases
2039 (modify-phases %standard-phases
2040 (replace 'check
2041 (lambda* (#:key inputs outputs #:allow-other-keys)
2042 (add-installed-pythonpath inputs outputs)
2043 (invoke "pytest" "-vv" "--cov" "-k"
2044 ;; This test tries to connect to the internet.
2045 "not test_call"))))))
2046 (propagated-inputs
2047 `(("python-requests" ,python-requests)))
2048 (native-inputs
2049 `(("python-pytest" ,python-pytest)
2050 ("python-pytest-cov" ,python-pytest-cov)))
2051 (home-page "https://github.com/ithaka/apiron")
2052 (synopsis "Python wrapper for interacting with RESTful APIs")
2053 (description
2054 "@code{apiron} provides a declarative, structured configuration of
2055services and endpoints with a unified interface for interacting with RESTful
2056APIs.")
2057 (license license:expat)))
2058
7802875a
VM
2059(define-public python-beren
2060 (package
2061 (name "python-beren")
2062 (version "0.7.0")
2063 (source
2064 (origin
2065 (method url-fetch)
2066 (uri (pypi-uri "beren" version))
2067 (sha256
2068 (base32 "1v3mdwfqsyza892zvs124ym9w1bkng1j56b7l4dwfjir3723xcgf"))))
2069 (build-system python-build-system)
2070 (arguments
2071 ;; The test tries to open a connection to a remote server.
2072 `(#:tests? #f))
2073 (propagated-inputs
2074 `(("python-apiron" ,python-apiron)))
2075 (home-page "https://github.com/teffalump/beren")
2076 (synopsis "REST client for Orthanc DICOM servers")
2077 (description
2078 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
2079 (license license:gpl3+)))
2080
589e3f4e
LC
2081(define-public python-requests
2082 (package
2083 (name "python-requests")
45f01bc0 2084 (version "2.23.0")
589e3f4e
LC
2085 (source (origin
2086 (method url-fetch)
2087 (uri (pypi-uri "requests" version))
2088 (sha256
2089 (base32
45f01bc0 2090 "1rhpg0jb08v0gd7f19jjiwlcdnxpmqi1fhvw7r4s9avddi4kvx5k"))))
589e3f4e 2091 (build-system python-build-system)
85ef07c4
MB
2092 (propagated-inputs
2093 `(("python-certifi" ,python-certifi)
2094 ("python-chardet" ,python-chardet)
2095 ("python-idna" ,python-idna)
2096 ("python-urllib3" ,python-urllib3)))
589e3f4e
LC
2097 (arguments
2098 ;; FIXME: Some tests require network access.
2099 '(#:tests? #f))
2100 (home-page "http://python-requests.org/")
2101 (synopsis "Python HTTP library")
2102 (description
2103 "Requests is a Python HTTP client library. It aims to be easier to use
2104than Python’s urllib2 library.")
2105 (license license:asl2.0)))
2106
97f0bd7d
JM
2107;; Some software requires an older version of Requests, notably Docker/Docker
2108;; Compose.
2109(define-public python-requests-2.20
2110 (package (inherit python-requests)
2111 (version "2.20.1")
2112 (source (origin
2113 (method url-fetch)
2114 (uri (pypi-uri "requests" version))
2115 (sha256
2116 (base32
2117 "0qzj6cgv3k9wyj7wlxgz7xq0cfg4jbbkfm24pp8dnhczwl31527a"))))
2118 (propagated-inputs
2119 `(("python-urllib3" ,python-urllib3-1.24)
2120 ("python-idna" ,python-idna-2.7)
2121 ,@(package-propagated-inputs python-requests)))))
2122
589e3f4e
LC
2123(define-public python2-requests
2124 (package-with-python2 python-requests))
2125
c5963597
AT
2126(define-public python-requests_ntlm
2127 (package
2128 (name "python-requests_ntlm")
2129 (version "1.1.0")
2130 (source
2131 (origin
2132 (method url-fetch)
2133 (uri (pypi-uri "requests_ntlm" version))
2134 (sha256
2135 (base32
2136 "0wgbqzaq9w7bas16b7brdb75f91bh3275fb459093bk1ihpck2ci"))))
2137 (build-system python-build-system)
2138 (propagated-inputs
2139 `(("python-cryptography" ,python-cryptography)
2140 ("python-ntlm-auth" ,python-ntlm-auth)
2141 ("python-requests" ,python-requests)))
2142 (home-page "https://github.com/requests/requests-ntlm")
2143 (synopsis
2144 "NTLM authentication support for Requests")
2145 (description
2146 "This package allows for HTTP NTLM authentication using the requests
2147library.")
2148 (license license:isc)))
2149
1b2f753d
LC
2150(define-public python-requests-mock
2151 (package
2152 (name "python-requests-mock")
47ed9ec3 2153 (version "1.8.0")
1b2f753d
LC
2154 (source
2155 (origin
2156 (method url-fetch)
2157 (uri (pypi-uri "requests-mock" version))
2158 (sha256
2159 (base32
47ed9ec3 2160 "09nj8fmyj7xz2mgwyvbw0fl9zybmx2d3qd2hf529vvjc9s24d3z6"))))
1b2f753d
LC
2161 (build-system python-build-system)
2162 (propagated-inputs
2163 `(("python-requests" ,python-requests)
2164 ("python-six" ,python-six)))
2165 (native-inputs
2166 `(("python-pbr" ,python-pbr)
2167 ("python-discover" ,python-discover)
2168 ("python-docutils" ,python-docutils)
2169 ("python-fixtures" ,python-fixtures)
2170 ("python-mock" ,python-mock)
47ed9ec3
AE
2171 ("python-purl" ,python-purl)
2172 ("python-pytest" ,python-pytest)
1b2f753d 2173 ("python-sphinx" ,python-sphinx)
47ed9ec3 2174 ("python-testrepository" ,python-testrepository)))
1b2f753d
LC
2175 (home-page "https://requests-mock.readthedocs.org/")
2176 (synopsis "Mock out responses from the requests package")
2177 (description
2178 "This module provides a building block to stub out the HTTP requests
2179portions of your testing code.")
2180 (properties `((python2-variant . ,(delay python2-requests-mock))))
2181 (license license:asl2.0)))
2182
2183(define-public python2-requests-mock
2184 (package (inherit (package-with-python2
2185 (strip-python2-variant python-requests-mock)))
2186 (arguments
2187 `(#:python ,python-2
2188 ;; FIXME: 'subunit.run discover: error: no such option: --list'
2189 #:tests? #f))))
2190
2191(define-public python-requests-toolbelt
2192 (package
2193 (name "python-requests-toolbelt")
2194 (version "0.8.0")
2195 (source (origin
2196 (method url-fetch)
2197 (uri (pypi-uri "requests-toolbelt" version))
2198 (sha256
2199 (base32
2200 "1dc7l42i4080r8i4m9fj51jx367lqkai170vrv7wd93gdj9k39gn"))))
2201 (build-system python-build-system)
2202 (native-inputs
2203 `(("python-betamax" ,python-betamax)
2204 ("python-mock" ,python-mock)
2205 ("python-pytest" ,python-pytest)))
2206 (propagated-inputs
2207 `(("python-requests" ,python-requests)))
2208 (synopsis "Extensions to python-requests")
2209 (description "This is a toolbelt of useful classes and functions to be used
2210with python-requests.")
2211 (home-page "https://github.com/sigmavirus24/requests-toolbelt")
2212 (license license:asl2.0)))
2213
2214(define-public python2-requests-toolbelt
2215 (package-with-python2 python-requests-toolbelt))
2216
c0055507
LP
2217(define-public python-requests-toolbelt-0.9.1
2218 (package
2219 (inherit python-requests-toolbelt)
2220 (version "0.9.1")
2221 (source (origin
2222 (method url-fetch)
2223 (uri (pypi-uri "requests-toolbelt" version))
2224 (sha256
2225 (base32
2226 "1h3gm88dcjbd7gm229a7x5qkkhnsqsjz0m0l2xyavm2ab3a8k04n"))))
2227 (arguments
2228 `(;; FIXME: Some tests require network access.
2229 #:tests? #f))))
2230
a9687356
KH
2231(define-public python-requests-ftp
2232 (package
2233 (name "python-requests-ftp")
2234 (version "0.3.1")
2235 (source
2236 (origin
2237 (method url-fetch)
2238 (uri (pypi-uri "requests-ftp" version))
2239 (sha256
2240 (base32
2241 "0yh5v21v36dsjsgv4y9dx4mmz35741l5jf6pbq9w19d8rfsww13m"))))
2242 (build-system python-build-system)
2243 (propagated-inputs
2244 `(("python-requests" ,python-requests)))
2245 (home-page
2246 "https://github.com/Lukasa/requests-ftp")
2247 (synopsis "FTP Transport Adapter for Requests")
2248 (description
2249 "Requests-FTP is an implementation of a simple FTP transport
2250adapter for use with the Requests library.")
2251 (license license:asl2.0)))
2252
589e3f4e
LC
2253(define-public python-oauthlib
2254 (package
2255 (name "python-oauthlib")
2eb74175 2256 (version "3.1.0")
589e3f4e
LC
2257 (source (origin
2258 (method url-fetch)
2259 (uri (pypi-uri "oauthlib" version))
2260 (sha256
2261 (base32
2eb74175 2262 "12gqnabwck30gdlpwm6af3s28qm9p2yc7b1w8s4fk9ncbz1irr5y"))))
589e3f4e 2263 (build-system python-build-system)
c8a7cc69
MB
2264 (arguments
2265 `(#:phases (modify-phases %standard-phases
2266 (replace 'check
2267 (lambda _
2268 (invoke "pytest" "-vv"))))))
589e3f4e 2269 (native-inputs
c8a7cc69
MB
2270 `(("python-pytest" ,python-pytest)
2271 ("python-pytest-cov" ,python-pytest-cov)
e7c67f1b
MB
2272 ("python-mock" ,python-mock)))
2273 (propagated-inputs
2274 `(("python-cryptography" ,python-cryptography)
589e3f4e
LC
2275 ("python-pyjwt" ,python-pyjwt)
2276 ("python-blinker" ,python-blinker)))
5f7e3ac0 2277 (home-page "https://github.com/oauthlib/oauthlib")
589e3f4e
LC
2278 (synopsis "OAuth implementation for Python")
2279 (description
2280 "Oauthlib is a generic, spec-compliant, thorough implementation of the
2281OAuth request-signing logic.")
c8a7cc69 2282 (license license:bsd-3)))
589e3f4e
LC
2283
2284(define-public python2-oauthlib
c8a7cc69 2285 (package-with-python2 python-oauthlib))
589e3f4e 2286
1b2f753d
LC
2287(define-public python-rauth
2288 (package
2289 (name "python-rauth")
2290 (version "0.7.3")
2291 (source
2292 (origin
2293 (method url-fetch)
2294 (uri (pypi-uri "rauth" version))
2295 (sha256
2296 (base32
2297 "02kv8w8l98ky223avyq7vw7x1f2ya9chrm59r77ylq45qb0xnk2j"))))
2298 (build-system python-build-system)
2299 (arguments
2300 `(#:test-target "check"))
2301 (propagated-inputs
2302 `(("python-requests" ,python-requests)))
2303 (home-page "https://github.com/litl/rauth")
2304 (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
2305 (description
2306 "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly. It also
2307provides service wrappers for convenient connection initialization and
2308authenticated session objects providing things like keep-alive.")
2309 (license license:expat)
2310 (properties `((python2-variant . ,(delay python2-rauth))))))
2311
2312(define-public python2-rauth
2313 (let ((base (package-with-python2 (strip-python2-variant python-rauth))))
2314 (package
2315 (inherit base)
2316 (native-inputs `(("python2-unittest2" ,python2-unittest2)
2317 ,@(package-native-inputs base))))))
2318
2319(define-public python-urllib3
2320 (package
2321 (name "python-urllib3")
21cbde9f 2322 (version "1.25.9")
1b2f753d
LC
2323 (source
2324 (origin
2325 (method url-fetch)
2326 (uri (pypi-uri "urllib3" version))
2327 (sha256
2328 (base32
21cbde9f 2329 "09rmjqm5syhhc8fx3v06h3yv6cqy0b1081jg8wm5grpwpr72j61h"))))
1b2f753d
LC
2330 (build-system python-build-system)
2331 (arguments `(#:tests? #f))
1b2f753d
LC
2332 (propagated-inputs
2333 `(;; These 5 inputs are used to build urrlib3[secure]
2334 ("python-certifi" ,python-certifi)
20c5e2f4 2335 ("python-cryptography" ,python-cryptography)
1b2f753d
LC
2336 ("python-idna" ,python-idna)
2337 ("python-ipaddress" ,python-ipaddress)
20c5e2f4
EF
2338 ("python-pyopenssl" ,python-pyopenssl)
2339 ("python-pysocks" ,python-pysocks)))
2340 (home-page "https://urllib3.readthedocs.io/")
1b2f753d
LC
2341 (synopsis "HTTP library with thread-safe connection pooling")
2342 (description
2343 "Urllib3 supports features left out of urllib and urllib2 libraries. It
2344can reuse the same socket connection for multiple requests, it can POST files,
2345supports url redirection and retries, and also gzip and deflate decoding.")
2346 (license license:expat)))
2347
7deb0868
JM
2348;; Some software requires an older version of urllib3, notably Docker.
2349(define-public python-urllib3-1.24
2350 (package (inherit python-urllib3)
2351 (version "1.24.3")
2352 (source (origin
2353 (method url-fetch)
2354 (uri (pypi-uri "urllib3" version))
2355 (sha256
2356 (base32
2357 "1x0slqrv6kixkbcdnxbglvjliwhc1payavxjvk8fvbqjrnasd4r3"))))))
2358
2359
1b2f753d
LC
2360(define-public python2-urllib3
2361 (package-with-python2 python-urllib3))
2362
2363(define-public awscli
2364 (package
8343ae2b 2365 ;; Note: updating awscli typically requires updating botocore as well.
e524b577 2366 (name "awscli")
6dfaa681 2367 (version "1.18.183")
e524b577
ES
2368 (source
2369 (origin
2370 (method url-fetch)
2371 (uri (pypi-uri name version))
2372 (sha256
2373 (base32
6dfaa681 2374 "0n1pmdl33r1v8qnrcg08ihvri9zm4fvsp14605vwmlkxvs8nb7s5"))))
e524b577
ES
2375 (build-system python-build-system)
2376 (arguments
2377 ;; FIXME: The 'pypi' release does not contain tests.
2378 '(#:tests? #f
2379 #:phases
2380 (modify-phases %standard-phases
2381 (add-after 'unpack 'fix-reference-to-groff
2382 (lambda _
2383 (substitute* "awscli/help.py"
2384 (("if not self._exists_on_path\\('groff'\\):") "")
2385 (("raise ExecutableNotFoundError\\('groff'\\)") "")
2386 (("cmdline = \\['groff'")
2387 (string-append "cmdline = ['" (which "groff") "'")))
2388 #t)))))
2389 (propagated-inputs
2390 `(("python-colorama" ,python-colorama)
2391 ("python-botocore" ,python-botocore)
2392 ("python-s3transfer" ,python-s3transfer)
2393 ("python-docutils" ,python-docutils)
2394 ("python-pyyaml" ,python-pyyaml)
2395 ("python-rsa" ,python-rsa)))
2396 (native-inputs
2397 `(("groff" ,groff)))
2398 (home-page "https://aws.amazon.com/cli/")
2399 (synopsis "Command line client for AWS")
2400 (description "AWS CLI provides a unified command line interface to the
1b2f753d 2401Amazon Web Services (AWS) API.")
e524b577 2402 (license license:asl2.0)))
1b2f753d
LC
2403
2404(define-public python-wsgiproxy2
2405 (package
2406 (name "python-wsgiproxy2")
8fbccd48 2407 (version "0.4.6")
1b2f753d
LC
2408 (source
2409 (origin
2410 (method url-fetch)
e38a8012 2411 (uri (pypi-uri "WSGIProxy2" version ".tar.gz"))
1b2f753d 2412 (sha256
8fbccd48 2413 (base32 "16jch5nic0hia28lps3c678s9s9mjdq8n87igxncjg0rpi5adqnf"))))
1b2f753d 2414 (build-system python-build-system)
1b2f753d 2415 (native-inputs
e38a8012 2416 `(("python-webtest" ,python-webtest)))
1b2f753d 2417 (propagated-inputs
e38a8012
TGR
2418 `(("python-requests" ,python-requests)
2419 ("python-six" ,python-six)
2420 ("python-urllib3" ,python-urllib3)
1b2f753d 2421 ("python-webob" ,python-webob)))
e38a8012 2422 (home-page "https://github.com/gawel/WSGIProxy2/")
1b2f753d
LC
2423 (synopsis "WSGI Proxy with various http client backends")
2424 (description "WSGI turns HTTP requests into WSGI function calls.
2425WSGIProxy turns WSGI function calls into HTTP requests.
2426It also includes code to sign requests and pass private data,
2427and to spawn subprocesses to handle requests.")
2428 (license license:expat)))
2429
2430(define-public python2-wsgiproxy2
2431 (package-with-python2 python-wsgiproxy2))
2432
2433(define-public python-pastedeploy
2434 (package
2435 (name "python-pastedeploy")
cf4fafc4 2436 (version "2.1.1")
1b2f753d
LC
2437 (source
2438 (origin
2439 (method url-fetch)
2440 (uri (pypi-uri "PasteDeploy" version))
2441 (sha256
cf4fafc4 2442 (base32 "05s88qdjdwd9d9qs13fap7nqgxs7qs5qfzzjbrc5va13k2mxdskd"))))
1b2f753d 2443 (build-system python-build-system)
82bd276d
HP
2444 (arguments
2445 '(#:test-target "pytest"))
1b2f753d 2446 (native-inputs
82bd276d
HP
2447 `(("python-pytest" ,python-pytest)
2448 ("python-pytest-runner" ,python-pytest-runner)))
63b06670 2449 (home-page "https://pylonsproject.org/")
1b2f753d
LC
2450 (synopsis
2451 "Load, configure, and compose WSGI applications and servers")
2452 (description
2453 "This tool provides code to load WSGI applications and servers from URIs;
2454these URIs can refer to Python Eggs for INI-style configuration files. Paste
2455Script provides commands to serve applications based on this configuration
2456file.")
2457 (license license:expat)))
2458
2459(define-public python2-pastedeploy
2460 (package-with-python2 python-pastedeploy))
2461
2462(define-public python-webtest
2463 (package
2464 (name "python-webtest")
0596a7af 2465 (version "2.0.33")
1b2f753d
LC
2466 (source
2467 (origin
2468 (method url-fetch)
2469 (uri (pypi-uri "WebTest" version))
2470 (sha256
2471 (base32
0596a7af 2472 "1l3z0cwqslsf4rcrhi2gr8kdfh74wn2dw76376i4g9i38gz8wd21"))))
1b2f753d
LC
2473 (build-system python-build-system)
2474 (arguments
0596a7af
TGR
2475 ;; Tests require python-pyquery, which creates a circular dependency.
2476 `(#:tests? #f))
1b2f753d
LC
2477 (propagated-inputs
2478 `(("python-waitress" ,python-waitress)
2479 ("python-webob" ,python-webob)
2480 ("python-six" ,python-six)
2481 ("python-beautifulsoup4" ,python-beautifulsoup4)))
63b06670 2482 (home-page "https://docs.pylonsproject.org/projects/webtest/")
1b2f753d
LC
2483 (synopsis "Helper to test WSGI applications")
2484 (description "Webtest allows you to test your Python web applications
2485without starting an HTTP server. It supports anything that supports the
2486minimum of WSGI.")
2487 (license license:expat)))
2488
2489(define-public python2-webtest
2490 (package-with-python2 python-webtest))
2491
2492(define-public python-flask
2493 (package
2494 (name "python-flask")
67dbc06d 2495 (version "1.1.2")
1b2f753d
LC
2496 (source (origin
2497 (method url-fetch)
205eb40e 2498 (uri (pypi-uri "Flask" version))
1b2f753d
LC
2499 (sha256
2500 (base32
67dbc06d 2501 "0q3h295izcil7lswkzfnyg3k5gq4hpmqmpl6i7s5m1n9szi1myjf"))))
1b2f753d 2502 (build-system python-build-system)
47403955
EF
2503 (arguments
2504 '(#:phases
2505 (modify-phases %standard-phases
2506 (replace 'check
2507 (lambda _
15af040c
MB
2508 (setenv "PYTHONPATH" (string-append "./build/lib:"
2509 (getenv "PYTHONPATH")))
2510 (invoke "pytest" "-vv" "tests"))))))
47403955
EF
2511 (native-inputs
2512 `(("python-pytest" ,python-pytest)))
1b2f753d
LC
2513 (propagated-inputs
2514 `(("python-itsdangerous" ,python-itsdangerous)
2515 ("python-jinja2" ,python-jinja2)
2516 ("python-click" ,python-click)
2517 ("python-werkzeug" ,python-werkzeug)))
67eda45b 2518 (home-page "https://www.palletsprojects.com/p/flask/")
1b2f753d
LC
2519 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
2520 (description "Flask is a micro web framework based on the Werkzeug toolkit
2521and Jinja2 template engine. It is called a micro framework because it does not
2522presume or force a developer to use a particular tool or library.")
2523 (license license:bsd-3)))
2524
2525(define-public python2-flask
2526 (package-with-python2 python-flask))
2527
2528(define-public python-flask-wtf
2529 (package
2530 (name "python-flask-wtf")
8f29817e 2531 (version "0.14.3")
1b2f753d
LC
2532 (source
2533 (origin
2534 (method url-fetch)
2535 (uri (pypi-uri "Flask-WTF" version))
2536 (sha256
2537 (base32
8f29817e 2538 "086pvg2x69n0nczcq7frknfjd8am1zdy8qqpva1sanwb02hf65yl"))))
1b2f753d
LC
2539 (build-system python-build-system)
2540 (arguments
2541 '(#:phases
2542 (modify-phases %standard-phases
8f29817e 2543 (replace 'check
1b2f753d 2544 (lambda _
8f29817e
MB
2545 (setenv "PYTHONPATH" (string-append "./build/lib:"
2546 (getenv "PYTHONPATH")))
2547 (invoke "pytest" "-vv"))))))
1b2f753d
LC
2548 (propagated-inputs
2549 `(("python-flask-babel" ,python-flask-babel)
2550 ("python-babel" ,python-babel)
2551 ("python-wtforms" ,python-wtforms)))
2552 (native-inputs
8f29817e 2553 `(("python-pytest" ,python-pytest)))
1b2f753d
LC
2554 (home-page "https://github.com/lepture/flask-wtf")
2555 (synopsis "Simple integration of Flask and WTForms")
2556 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
2557upload, and reCAPTCHA.")
2558 (license license:bsd-3)))
2559
2560(define-public python2-flask-wtf
2561 (package-with-python2 python-flask-wtf))
2562
2563(define-public python-flask-multistatic
2564 (package
2565 (name "python-flask-multistatic")
2566 (version "1.0")
2567 (source
2568 (origin
2569 (method url-fetch)
2570 (uri (pypi-uri "flask-multistatic" version))
2571 (sha256
2572 (base32
2573 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
2574 (build-system python-build-system)
2575 (propagated-inputs
2576 `(("python-flask" ,python-flask)))
2577 (home-page "https://pagure.io/flask-multistatic")
2578 (synopsis "Flask plugin to allow overriding static files")
2579 (description "@code{flask-multistatic} is a flask plugin that adds support
2580for overriding static files.")
2581 (license license:gpl3+)))
2582
2583(define-public python2-flask-multistatic
2584 (package-with-python2 python-flask-multistatic))
2585
2586(define-public python-cookies
2587 (package
2588 (name "python-cookies")
2589 (version "2.2.1")
2590 (source (origin
2591 (method url-fetch)
2592 (uri (pypi-uri "cookies" version))
2593 (sha256
2594 (base32
2595 "13pfndz8vbk4p2a44cfbjsypjarkrall71pgc97glk5fiiw9idnn"))))
2596 (build-system python-build-system)
2597 (arguments
2598 `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
2599 #:tests? #f))
2600 (native-inputs
cb18f2bf 2601 `(("python-pytest" ,python-pytest)))
1b2f753d
LC
2602 (synopsis "HTTP cookie parser and renderer")
2603 (description "A RFC 6265-compliant HTTP cookie parser and renderer in
2604Python.")
2605 (home-page "https://gitlab.com/sashahart/cookies")
2606 (license license:expat)))
2607
2608(define-public python2-cookies
2609 (package-with-python2 python-cookies))
2610
2611(define-public python-responses
2612 (package
2613 (name "python-responses")
ef8c83bd 2614 (version "0.10.6")
1b2f753d
LC
2615 (source (origin
2616 (method url-fetch)
2617 (uri (pypi-uri "responses" version))
2618 (sha256
2619 (base32
ef8c83bd 2620 "147pacwkkqy3qf3hr33fnl1xbzgw0zsm3qppvvy9qhq8h069qbah"))))
1b2f753d
LC
2621 (build-system python-build-system)
2622 (arguments
2623 `(;; Test suite is not distributed:
2624 ;; https://github.com/getsentry/responses/issues/38
2625 #:tests? #f))
2626 (native-inputs
2627 `(("python-mock" ,python-mock)))
2628 (propagated-inputs
2629 `(("python-requests" ,python-requests)
2630 ("python-cookies" ,python-cookies)
2631 ("python-six" ,python-six)))
2632 (home-page "https://github.com/getsentry/responses")
2633 (synopsis "Utility for mocking out the `requests` Python library")
2634 (description "A utility library for mocking out the `requests` Python
2635library.")
2636 (license license:asl2.0)))
2637
2638(define-public python2-responses
2639 (package-with-python2 python-responses))
2640
d08b3258
RW
2641(define-public python-grequests
2642 (package
2643 (name "python-grequests")
2644 (version "0.3.0")
2645 (source
2646 (origin
2647 (method url-fetch)
2648 (uri (pypi-uri "grequests" version))
2649 (sha256
2650 (base32
2651 "1j9icncllbkv7x5719b20mx670c6q1jrdx1sakskkarvx3pc8h8g"))))
2652 (build-system python-build-system)
2653 (propagated-inputs
2654 `(("python-gevent" ,python-gevent)
2655 ("python-requests" ,python-requests)))
2656 (native-inputs
054153b2
CLW
2657 `(("python-nose" ,python-nose)
2658 ("python-zope.interface" ,python-zope-interface)
2659 ("python-zope.event" ,python-zope-event)))
d08b3258
RW
2660 (home-page "https://github.com/kennethreitz/grequests")
2661 (synopsis "Python library for asynchronous HTTP requests")
2662 (description "GRequests is a Python library that allows you to use
2663@code{Requests} with @code{Gevent} to make asynchronous HTTP Requests easily")
2664 (license license:bsd-2)))
2665
1b2f753d
LC
2666(define-public python-geventhttpclient
2667 (package
2668 (name "python-geventhttpclient")
2669 (version "1.3.1")
2670 (source (origin
2671 (method url-fetch)
2672 (uri (pypi-uri "geventhttpclient" version))
2673 (sha256
2674 (base32
2675 "07d0q3wzmml75227r6y6mrl5a0zpf4v9gj0ni5rhbyzmaj4az1xx"))
2676 (modules '((guix build utils)))
2677 (snippet
2678 '(begin
2679 ;; Delete pre-compiled files.
2680 (for-each delete-file (find-files "src/geventhttpclient"
2681 ".*\\.pyc"))
2682 #t))))
2683 (build-system python-build-system)
2684 (arguments
2685 '(#:phases
2686 (modify-phases %standard-phases
2687 (add-after 'unpack 'delete-network-tests
2688 (lambda _
2689 (delete-file "src/geventhttpclient/tests/test_client.py")
2690 #t))
6ac6c1d2 2691 (replace 'check
1b2f753d
LC
2692 (lambda* (#:key inputs outputs #:allow-other-keys)
2693 (add-installed-pythonpath inputs outputs)
0e02e819
MB
2694 (invoke "py.test" "src/geventhttpclient/tests" "-v"
2695 ;; Append the test modules to sys.path to avoid
2696 ;; namespace conflict which breaks SSL tests.
6ac6c1d2
MB
2697 "--import-mode=append"
2698 ;; XXX: Disable test fails with Python 3.8:
2699 ;; https://github.com/gwik/geventhttpclient/issues/119
2700 "-k" (string-append "not test_cookielib_compatibility"))
12adfdf0 2701 #t)))))
1b2f753d
LC
2702 (native-inputs
2703 `(("python-pytest" ,python-pytest)))
2704 (propagated-inputs
2705 `(("python-certifi" ,python-certifi)
2706 ("python-gevent" ,python-gevent)
2707 ("python-six" ,python-six)))
2708 (home-page "https://github.com/gwik/geventhttpclient")
2709 (synopsis "HTTP client library for gevent")
2710 (description "@code{python-geventhttpclient} is a high performance,
2711concurrent HTTP client library for python using @code{gevent}.")
2712 (license license:expat)))
2713
2714(define-public python2-geventhttpclient
2715 (package-with-python2 python-geventhttpclient))
2716
2717(define-public python-requests-oauthlib
2718 (package
2719 (name "python-requests-oauthlib")
395c142e 2720 (version "1.2.0")
1b2f753d
LC
2721 (source
2722 (origin
2723 (method url-fetch)
2724 (uri (pypi-uri "requests-oauthlib" version))
2725 (sha256
2726 (base32
395c142e 2727 "0mrglgcvq7k48pf27s4gifdk0za8xmgpf55jy15yjj471qrk6rdx"))))
1b2f753d
LC
2728 (build-system python-build-system)
2729 (arguments
2730 `(#:phases
2731 (modify-phases %standard-phases
2732 ;; removes tests that require network access
2733 (add-before 'check 'pre-check
2734 (lambda _
2735 (delete-file "tests/test_core.py")
2736 #t)))))
2737 (native-inputs
6b4a6c20
JL
2738 `(("python-pyjwt" ,python-pyjwt)
2739 ("python-requests-mock" ,python-requests-mock)
1b2f753d
LC
2740 ("python-mock" ,python-mock)))
2741 (propagated-inputs
2742 `(("python-oauthlib" ,python-oauthlib)
2743 ("python-requests" ,python-requests)))
2744 (home-page
2745 "https://github.com/requests/requests-oauthlib")
2746 (synopsis
2747 "OAuthlib authentication support for Requests")
2748 (description
2749 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
2750provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
2751 (license license:isc)))
2752
2753(define-public python2-requests-oauthlib
2754 (package-with-python2 python-requests-oauthlib))
2755
2756(define-public python-url
2757 (package
2758 (name "python-url")
2759 (version "0.2.0")
2760 (source (origin
2761 (method url-fetch)
2762 (uri (pypi-uri "url" version))
2763 (sha256
2764 (base32
2765 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
2766 (build-system python-build-system)
2767 (propagated-inputs
2768 `(("python-publicsuffix" ,python-publicsuffix)))
2769 (native-inputs
2770 `(("python-coverage" ,python-coverage)
2771 ("python-nose" ,python-nose)))
2772 (arguments
2773 `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
2774 (home-page "https://github.com/seomoz/url-py")
2775 (synopsis "URL Parsing")
2776 (description "Library for parsing urls.")
2777 (license license:expat)
2778 (properties `((python2-variant . ,(delay python2-url))))))
2779
2780(define-public python2-url
2781 (let ((base (package-with-python2 (strip-python2-variant python-url))))
2782 (package (inherit base)
2783 (propagated-inputs
2784 `(("python2-publicsuffix" ,python2-publicsuffix))))))
2785
2786(define-public python-cachecontrol
2787 (package
2788 (name "python-cachecontrol")
2015767c 2789 (version "0.12.5")
1b2f753d
LC
2790 (source
2791 (origin
6e00b1ea 2792 (method git-fetch)
1b2f753d 2793 ;; Pypi does not have tests.
6e00b1ea
MB
2794 (uri (git-reference
2795 (url "https://github.com/ionrock/cachecontrol")
2796 (commit (string-append "v" version))))
2797 (file-name (git-file-name name version))
1b2f753d
LC
2798 (sha256
2799 (base32
2015767c 2800 "03lgc65sl04n0cgzmmgg99bk83f9i6k8yrmcd4hpl46q1pymn0kz"))))
1b2f753d
LC
2801 (build-system python-build-system)
2802 (arguments
2015767c
TLC
2803 ;; Versions > 0.11.6 depend on CherryPy for testing.
2804 ;; It's too much work to package CherryPy for now.
2805 `(#:tests? #f))
1b2f753d
LC
2806 (propagated-inputs
2807 `(("python-requests" ,python-requests)
6dcbd20a 2808 ("python-msgpack" ,python-msgpack)
1b2f753d
LC
2809 ("python-lockfile" ,python-lockfile)))
2810 (home-page "https://github.com/ionrock/cachecontrol")
2811 (synopsis "The httplib2 caching algorithms for use with requests")
2812 (description "CacheControl is a port of the caching algorithms in
2813@code{httplib2} for use with @code{requests} session objects.")
2814 (license license:asl2.0)))
2815
2816(define-public python2-cachecontrol
2817 (package-with-python2 python-cachecontrol))
2818
2819(define-public python-betamax
2820 (package
2821 (name "python-betamax")
98516883 2822 (version "0.8.1")
1b2f753d
LC
2823 (source
2824 (origin
2825 (method url-fetch)
2826 (uri (pypi-uri "betamax" version))
2827 (sha256
2828 (base32
98516883 2829 "1hki1c2vs7adq7zr56wi6i5bhrkia4s2ywpv2c98ibnczz709w2v"))))
1b2f753d
LC
2830 (build-system python-build-system)
2831 (arguments
2832 '(;; Many tests fail because they require networking.
2833 #:tests? #f))
2834 (propagated-inputs
2835 `(("python-requests" ,python-requests)))
2836 (home-page "https://github.com/sigmavirus24/betamax")
2837 (synopsis "Record HTTP interactions with python-requests")
2838 (description "Betamax will record your test suite's HTTP interactions and
2839replay them during future tests. It is designed to work with python-requests.")
2840 (license license:expat)))
2841
2842(define-public python2-betamax
2843 (package-with-python2 python-betamax))
2844
2845(define-public python-betamax-matchers
2846 (package
2847 (name "python-betamax-matchers")
2848 (version "0.4.0")
2849 (source
2850 (origin
2851 (method url-fetch)
2852 (uri (pypi-uri "betamax-matchers" version))
2853 (sha256
2854 (base32
2855 "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
2856 (build-system python-build-system)
2857 (propagated-inputs
2858 `(("python-betamax" ,python-betamax)
2859 ("python-requests-toolbelt" ,python-requests-toolbelt)))
2860 (home-page "https://github.com/sigmavirus24/betamax_matchers")
2861 (synopsis "VCR imitation for python-requests")
2862 (description "@code{betamax-matchers} provides a set of Matchers for
2863Betamax.")
2864 (license license:asl2.0)))
2865
2866(define-public python2-betamax-matchers
2867 (package-with-python2 python-betamax-matchers))
2868
2869(define-public python-s3transfer
2870 (package
2871 (name "python-s3transfer")
108fa826 2872 (version "0.3.3")
1b2f753d
LC
2873 (source (origin
2874 (method url-fetch)
2875 (uri (pypi-uri "s3transfer" version))
2876 (sha256
2877 (base32
108fa826 2878 "1nzp5kwmy9669334shcz9ipg89jgpdqhrmbkgdg18r7wmvi3f6lj"))))
1b2f753d
LC
2879 (build-system python-build-system)
2880 (arguments
2881 `(#:phases
2882 (modify-phases %standard-phases
c63bd847
CB
2883 (add-after 'unpack 'patch
2884 (lambda _
2885 ;; There's a small issue with one test with Python 3.8, this
2886 ;; change has been suggested upstream:
2887 ;; https://github.com/boto/s3transfer/pull/164
2888 (substitute* "tests/unit/test_s3transfer.py"
2889 (("super\\(FailedDownloadParts, self\\)\\.submit\\(function\\)")
2890 "futures.Future()"))
2891 #t))
1b2f753d
LC
2892 (replace 'check
2893 (lambda _
5d367537
RW
2894 ;; Some of the 'integration' tests require network access or
2895 ;; login credentials.
12adfdf0
TGR
2896 (invoke "nosetests" "--exclude=integration")
2897 #t)))))
1b2f753d
LC
2898 (native-inputs
2899 `(("python-docutils" ,python-docutils)
2900 ("python-mock" ,python-mock)
2901 ("python-nose" ,python-nose)))
2902 (propagated-inputs
5d367537
RW
2903 `(("python-botocore" ,python-botocore)
2904 ("python-urllib3" ,python-urllib3)))
1b2f753d
LC
2905 (synopsis "Amazon S3 Transfer Manager")
2906 (description "S3transfer is a Python library for managing Amazon S3
2907transfers.")
2908 (home-page "https://github.com/boto/s3transfer")
2909 (license license:asl2.0)
2910 (properties `((python2-variant . ,(delay python2-s3transfer))))))
2911
2912(define-public python2-s3transfer
2913 (let ((base (package-with-python2 (strip-python2-variant python-s3transfer))))
2914 (package
2915 (inherit base)
2916 (native-inputs
2917 `(("python2-futures" ,python2-futures)
2918 ,@(package-native-inputs base))))))
2919
9c98d588
CB
2920(define-public python-slimit
2921 (package
2922 (name "python-slimit")
2923 (version "0.8.1")
2924 (source
2925 (origin
2926 (method url-fetch)
2927 (uri (pypi-uri "slimit" version ".zip"))
2928 (sha256
2929 (base32
2930 "02vj2x728rs1127q2nc27frrqra4fczivnb7gch6n5lzi7pxqczl"))))
2931 (build-system python-build-system)
2932 (native-inputs
2933 `(("unzip" ,unzip)))
2934 (propagated-inputs
2935 `(("python-ply" ,python-ply)))
2936 (home-page "https://slimit.readthedocs.io/")
2937 (synopsis "JavaScript minifier, parser and lexer written in Python")
2938 (description
2939 "SlimIt is a JavaScript minifier written in Python. It compiles
2940JavaScript into more compact code so that it downloads and runs faster.
2941SlimIt also provides a library that includes a JavaScript parser, lexer,
2942pretty printer and a tree visitor.")
2943 (license license:expat)))
2944
1b2f753d
LC
2945(define-public python-flask-restful
2946 (package
2947 (name "python-flask-restful")
0a044f75 2948 (version "0.3.8")
1b2f753d
LC
2949 (source
2950 (origin
2951 (method url-fetch)
2952 (uri (pypi-uri "Flask-RESTful" version))
0a044f75 2953 (patches (search-patches "python-flask-restful-werkzeug-compat.patch"))
1b2f753d 2954 (sha256
4f8be6d9 2955 (base32
0a044f75 2956 "05b9lzx5yc3wgml2bcq50lq35h66m8zpj6dc9advcb5z3acsbaay"))))
1b2f753d
LC
2957 (build-system python-build-system)
2958 (propagated-inputs
2959 `(("python-aniso8601" ,python-aniso8601)
2960 ("python-flask" ,python-flask)
2961 ("python-pycrypto" ,python-pycrypto)
2962 ("python-pytz" ,python-pytz)))
2963 (native-inputs
2964 `(;; Optional dependency of Flask. Tests need it.
2965 ("python-blinker" ,python-blinker)
2966 ("python-mock" ,python-mock) ; For tests
0a044f75 2967 ("python-nose" ,python-nose))) ;for tests
1b2f753d
LC
2968 (home-page
2969 "https://www.github.com/flask-restful/flask-restful/")
2970 (synopsis
2971 "Flask module for creating REST APIs")
2972 (description
2973 "This package contains a Flask module for creating REST APIs.")
2974 (license license:bsd-3)))
2975
2976(define-public python-flask-basicauth
2977 (package
2978 (name "python-flask-basicauth")
2979 (version "0.2.0")
2980 (source
c410e9e5
MC
2981 (origin
2982 (method url-fetch)
2983 (uri (pypi-uri "Flask-BasicAuth" version))
2984 (sha256
2985 (base32
2986 "1zq1spkjr4sjdnalpp8wl242kdqyk6fhbnhr8hi4r4f0km4bspnz"))))
1b2f753d 2987 (build-system python-build-system)
a4cfdab5
MC
2988 (arguments
2989 `(#:phases (modify-phases %standard-phases
2990 (add-after 'unpack 'fix-imports
2991 (lambda _
2992 (substitute* '("docs/index.rst"
2993 "docs/conf.py"
2994 "flask_basicauth.py"
2995 "test_basicauth.py")
2996 (("flask\\.ext\\.basicauth")
2997 "flask_basicauth"))
2998 #t)))))
1b2f753d
LC
2999 (propagated-inputs
3000 `(("python-flask" ,python-flask)))
c410e9e5
MC
3001 (home-page "https://github.com/jpvanhal/flask-basicauth")
3002 (synopsis "HTTP basic access authentication for Flask")
1b2f753d 3003 (description
c410e9e5 3004 "This package provides HTTP basic access authentication for Flask.")
1b2f753d
LC
3005 (license license:bsd-3)))
3006
d1b103e1
DM
3007(define-public python-flask-htpasswd
3008 (package
3009 (name "python-flask-htpasswd")
3010 (version "0.3.1")
3011 (source
3012 (origin
3013 (method url-fetch)
3014 (uri (pypi-uri "flask-htpasswd" version))
3015 (sha256
3016 (base32
3017 "14q1y1y9i9bhabdnwd25jqzc4ljli23smxfyyh8abxz1vq93pxra"))))
3018 (build-system python-build-system)
3019 (propagated-inputs
3020 `(("python-flask" ,python-flask)
3021 ("python-itsdangerous" ,python-itsdangerous)
3022 ("python-passlib" ,python-passlib)
3023 ("python-tox" ,python-tox)))
702a1012 3024 (home-page "https://github.com/carsongee/flask-htpasswd")
d1b103e1
DM
3025 (synopsis "Basic authentication via htpasswd files in Flask applications")
3026 (description "This package provides Basic authentication via
3027@file{htpasswd} files and access_token authentication in Flask
3028applications.")
3029 (license license:bsd-3)))
3030
1b2f753d
LC
3031(define-public python-flask-sqlalchemy
3032 (package
3033 (name "python-flask-sqlalchemy")
310f8349 3034 (version "2.4.4")
aa6d7de6
MB
3035 (source (origin
3036 (method url-fetch)
3037 (uri (pypi-uri "Flask-SQLAlchemy" version))
3038 (sha256
3039 (base32
310f8349 3040 "1rgsj49gnx361hnb3vn6c1h17497qh22yc3r70l1r6w0mw71bixz"))))
1b2f753d
LC
3041 (build-system python-build-system)
3042 (propagated-inputs
3043 `(("python-flask" ,python-flask)
3044 ("python-sqlalchemy" ,python-sqlalchemy)))
aa6d7de6
MB
3045 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
3046 (synopsis "Module adding SQLAlchemy support to your Flask application")
1b2f753d 3047 (description
aa6d7de6 3048 "This package adds SQLAlchemy support to your Flask application.")
1b2f753d
LC
3049 (license license:bsd-3)))
3050
3051(define-public python-flask-restplus
3052 (package
3053 (name "python-flask-restplus")
3054 (version "0.9.2")
3055 (source
3056 (origin
3057 (method url-fetch)
3058 (uri (pypi-uri "flask-restplus" version))
3059 (sha256
3060 (base32
3061 "11his6ii5brpkhld0d5bwzjjw4q3vmplpd6fmgzjrvvklsbk0cf4"))))
3062 (build-system python-build-system)
3063 (arguments
3064 '(#:tests? #f)) ; FIXME: 35/882 tests failing.
3065 ;; #:phases
3066 ;; (modify-phases %standard-phases
3067 ;; (replace 'check
3068 ;; (lambda _
12adfdf0
TGR
3069 ;; (invoke "nosetests")
3070 ;; #t)))))
1b2f753d
LC
3071 (propagated-inputs
3072 `(("python-aniso8601" ,python-aniso8601)
3073 ("python-flask" ,python-flask)
3074 ("python-jsonschema" ,python-jsonschema)
3075 ("python-pytz" ,python-pytz)
3076 ("python-six" ,python-six)))
3077 (native-inputs
3078 `(("python-tzlocal" ,python-tzlocal)
3079 ("python-blinker" ,python-blinker)
3080 ("python-nose" ,python-nose)
3081 ("python-rednose" ,python-rednose)))
3082 (home-page "https://github.com/noirbizarre/flask-restplus")
3083 (synopsis "Framework for documented API development with Flask")
3084 (description "This package provides a framework for API development with
3085the Flask web framework in Python. It is similar to package
3086@code{python-flask-restful} but supports the @code{python-swagger}
3087documentation builder.")
3088 (license license:expat)))
3089
3090(define-public python-flask-restful-swagger
3091 (package
3092 (name "python-flask-restful-swagger")
e5b4b802 3093 (version "0.20.1")
1b2f753d
LC
3094 (source
3095 (origin
3096 (method url-fetch)
3097 (uri (pypi-uri "flask-restful-swagger" version))
3098 (sha256
3099 (base32
e5b4b802 3100 "1p66f98b5zpypnnz56pxpbirchqj6aniw6qyrp8h572l0dn9xlvq"))))
1b2f753d 3101 (build-system python-build-system)
e5b4b802 3102 (arguments '(#:tests? #f)) ;no tests
1b2f753d
LC
3103 (propagated-inputs
3104 `(("python-flask-restful" ,python-flask-restful)))
3105 (home-page "https://github.com/rantav/flask-restful-swagger")
3106 (synopsis "Extract Swagger specs from Flask-Restful projects")
3107 (description "This package lets you extract Swagger API documentation
3108specs from your Flask-Restful projects.")
3109 (license license:expat)))
3110
3111(define-public python2-flask-restful-swagger
3112 (package-with-python2 python-flask-restful-swagger))
3113
3114(define-public python-htmlmin
3115 (package
3116 (name "python-htmlmin")
05075433 3117 (version "0.1.12")
1b2f753d
LC
3118 (source
3119 (origin
3120 (method url-fetch)
3121 (uri (pypi-uri "htmlmin" version))
3122 (sha256
3123 (base32
05075433 3124 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
1b2f753d 3125 (arguments
05075433 3126 `(#:tests? #f)) ; no tests
1b2f753d
LC
3127 (build-system python-build-system)
3128 (home-page "https://htmlmin.readthedocs.org/en/latest/")
3129 (synopsis "HTML minifier")
3130 (description "@code{htmlmin} is an HTML minifier that just works.
3131It comes with safe defaults and easily configurable options.")
3132 (license license:bsd-3)))
3133
3134(define-public python2-htmlmin
3135 (package-with-python2 python-htmlmin))
3136
3137(define-public python-flask-htmlmin
3138 (package
3139 (name "python-flask-htmlmin")
3140 (version "1.2")
3141 (source
3142 (origin
3143 (method url-fetch)
3144 (uri (pypi-uri "Flask-HTMLmin" version))
3145 (sha256
3146 (base32
3147 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
3148 (propagated-inputs
3149 `(("python-flask" ,python-flask)
3150 ("python-htmlmin" ,python-htmlmin)))
3151 (build-system python-build-system)
3152 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
3153 (synopsis "HTML response minifier for Flask")
3154 (description
3155 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
3156 (license license:bsd-3)))
3157
3158(define-public python2-flask-htmlmin
3159 (package-with-python2 python-flask-htmlmin))
3160
90b9c5ad
CB
3161(define-public python-jsmin
3162 (package
3163 (name "python-jsmin")
3164 (version "2.2.2")
3165 (source
3166 (origin
3167 (method url-fetch)
3168 (uri (pypi-uri "jsmin" version))
3169 (sha256
3170 (base32
3171 "0fsmqbjvpxvff0984x7c0y8xmf49ax9mncz48b9xjx8wrnr9kpxn"))))
3172 (build-system python-build-system)
3173 (home-page "https://github.com/tikitu/jsmin/")
3174 (synopsis "Python JavaScript minifier")
3175 (description
3176 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
3177on the command line.")
3178 (license license:expat)))
3179
1b2f753d
LC
3180(define-public python-flask-login
3181 (package
3182 (name "python-flask-login")
4393dafd 3183 (version "0.5.0")
1b2f753d
LC
3184 (source
3185 (origin
79374801
TGR
3186 (method git-fetch)
3187 (uri (git-reference
b0e7b699 3188 (url "https://github.com/maxcountryman/flask-login")
79374801
TGR
3189 (commit version)))
3190 (file-name (git-file-name name version))
1b2f753d 3191 (sha256
4393dafd 3192 (base32 "11ac924w0y4m0kf3mxnxdlidy88jfa7njw5yyrq16dvnx4iwd8gg"))))
1b2f753d 3193 (build-system python-build-system)
d6ab1d0a
TGR
3194 (propagated-inputs
3195 `(("python-flask" ,python-flask)))
3196 (native-inputs
3197 ;; For tests.
3198 `(("python-blinker" ,python-blinker)
4393dafd 3199 ("python-coverage" ,python-coverage)
d6ab1d0a 3200 ("python-mock" ,python-mock)
4393dafd 3201 ("python-pycodestyle" ,python-pycodestyle)
d6ab1d0a 3202 ("python-pyflakes" ,python-pyflakes)
4393dafd 3203 ("python-pytest" ,python-pytest)
d6ab1d0a
TGR
3204 ("python-semantic-version" ,python-semantic-version)
3205 ("python-werkzeug" ,python-werkzeug)))
1b2f753d
LC
3206 (home-page "https://github.com/maxcountryman/flask-login")
3207 (synopsis "User session management for Flask")
3208 (description
3209 "@code{Flask-Login} provides user session management for Flask. It
3210handles the common tasks of logging in, logging out, and remembering your
3211users' sessions over extended periods of time.")
3212 (license license:expat)))
3213
3214(define-public python2-flask-login
3215 (package-with-python2 python-flask-login))
3216
3217(define-public python-oauth2client
3218 (package
3219 (name "python-oauth2client")
3220 (version "4.0.0")
3221 (source
3222 (origin
3223 (method url-fetch)
3224 (uri (pypi-uri "oauth2client" version))
3225 (sha256
3226 (base32
3227 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
3228 (build-system python-build-system)
3229 (arguments
3230 `(#:tests? #f))
3231 (propagated-inputs
3232 `(("python-httplib2" ,python-httplib2)
3233 ("python-pyasn1" ,python-pyasn1)
3234 ("python-pyasn1-modules" ,python-pyasn1-modules)
3235 ("python-rsa" ,python-rsa)
3236 ("python-six" ,python-six)))
9be5ecdf 3237 (home-page "https://github.com/google/oauth2client/")
1b2f753d
LC
3238 (synopsis "OAuth 2.0 client library")
3239 (description "@code{python-oauth2client} provides an OAuth 2.0 client
3240library for Python")
3241 (license license:asl2.0)))
3242
1ceca46b
MO
3243(define-public python2-oauth2client
3244 (package-with-python2 python-oauth2client))
3245
1b2f753d
LC
3246(define-public python-flask-oidc
3247 (package
3248 (name "python-flask-oidc")
3249 (version "1.1.1")
3250 (source
3251 (origin
3252 (method url-fetch)
3253 (uri (pypi-uri "flask-oidc" version))
3254 (sha256
3255 (base32
3256 "1ay5j0mf174bix7i67hclr95gv16z81fpx0dijvi0gydvdj3ddy2"))))
3257 (build-system python-build-system)
3258 (propagated-inputs
3259 `(("python-flask" ,python-flask)
3260 ("python-itsdangerous" ,python-itsdangerous)
3261 ("python-oauth2client" ,python-oauth2client)
3262 ("python-six" ,python-six)))
3263 (native-inputs
3264 `(("python-nose" ,python-nose)
3265 ("python-mock" ,python-mock)))
3266 (home-page "https://github.com/puiterwijk/flask-oidc")
3267 (synopsis "OpenID Connect extension for Flask")
3268 (description "@code{python-flask-oidc} provides an OpenID Connect extension
3269for Flask.")
3270 (license license:bsd-2)))
3271
3272(define-public python-webassets
3273 (package
3274 (name "python-webassets")
e2ac59f9 3275 (version "2.0")
1b2f753d
LC
3276 (source
3277 (origin
3278 (method url-fetch)
3279 (uri (pypi-uri "webassets" version))
3280 (sha256
3281 (base32
e2ac59f9 3282 "1kc1042jydgk54xpgcp0r1ib4gys91nhy285jzfcxj3pfqrk4w8n"))))
1b2f753d 3283 (build-system python-build-system)
e2ac59f9
MB
3284 (arguments
3285 '(#:phases (modify-phases %standard-phases
3286 (add-before 'check 'disable-some-tests
3287 (lambda _
3288 ;; This test requires 'postcss' and 'babel' which are
3289 ;; not yet available in Guix.
3290 (delete-file "tests/test_filters.py")
3291 #t))
3292 (replace 'check
3293 (lambda _
3294 (setenv "PYTHONPATH"
3295 (string-append "./build/lib:"
3296 (getenv "PYTHONPATH")))
3297 (invoke "pytest" "-vv"))))))
1b2f753d
LC
3298 (native-inputs
3299 `(("python-jinja2" ,python-jinja2)
3300 ("python-mock" ,python-mock)
3301 ("python-nose" ,python-nose)
3302 ("python-pytest" ,python-pytest)))
3303 (home-page "https://github.com/miracle2k/webassets")
3304 (synopsis "Media asset management")
3305 (description "Merges, minifies and compresses Javascript and CSS files,
3306supporting a variety of different filters, including YUI, jsmin, jspacker or
3307CSS tidy. Also supports URL rewriting in CSS files.")
3308 (license license:bsd-2)))
3309
3310(define-public python-cssmin
3311 (package
3312 (name "python-cssmin")
3313 (version "0.2.0")
3314 (source
3315 (origin
3316 (method url-fetch)
3317 (uri (pypi-uri "cssmin" version))
3318 (sha256
3319 (base32
3320 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
3321 (build-system python-build-system)
3322 (home-page "https://github.com/zacharyvoase/cssmin")
3323 (synopsis "Python port of the YUI CSS Compressor")
3324 (description "Python port of the YUI CSS Compressor.")
3325 (license (list license:expat license:bsd-3))))
3326
3327(define-public python2-cssmin
3328 (package-with-python2 python-cssmin))
3329
3330(define-public python-elasticsearch
3331 (package
3332 (name "python-elasticsearch")
3e313792 3333 (version "7.1.0")
1b2f753d
LC
3334 (source
3335 (origin
3336 (method url-fetch)
3337 (uri (pypi-uri "elasticsearch" version))
3338 (sha256
3339 (base32
3e313792 3340 "0rnjvlhw4v3vg14l519qliy1s1zpmx3827q0xfviwvk42rr7hh01"))))
1b2f753d
LC
3341 (build-system python-build-system)
3342 (native-inputs
3343 `(("python-mock" ,python-mock)
3344 ("python-nosexcover" ,python-nosexcover)
3345 ("python-pyaml" ,python-pyaml)
3346 ("python-requests" ,python-requests)))
3347 (propagated-inputs
3348 `(("urllib3" ,python-urllib3)))
3349 (arguments
3350 ;; tests require the test_elasticsearch module but it is not distributed.
3351 `(#:tests? #f))
3352 (home-page "https://github.com/elastic/elasticsearch-py")
3353 (synopsis "Low-level client for Elasticsearch")
3354 (description "Official low-level client for Elasticsearch. Its goal is to
3355provide common ground for all Elasticsearch-related code in Python; because of
3356this it tries to be opinion-free and very extendable.")
3357 (license license:expat)))
3358
3359(define-public python2-elasticsearch
3360 (package-with-python2 python-elasticsearch))
3361
3362(define-public python-flask-script
3363 (package
3364 (name "python-flask-script")
6a192184 3365 (version "2.0.6")
1b2f753d
LC
3366 (source
3367 (origin
3368 (method url-fetch)
3369 (uri (pypi-uri "Flask-Script" version))
3370 (sha256
3371 (base32
6a192184 3372 "0r8w2v89nj6b9p91p495cga5m72a673l2wc0hp0zqk05j4yrc9b4"))))
1b2f753d 3373 (build-system python-build-system)
c8535731
DM
3374 (arguments
3375 `(#:phases
3376 (modify-phases %standard-phases
3377 (add-after 'unpack 'patch-tests
3378 (lambda _
3379 (substitute* "tests.py"
3380 (("flask\\.ext\\.script") "flask_script"))
3381 #t)))))
1b2f753d
LC
3382 (propagated-inputs
3383 `(("python-flask" ,python-flask)
3384 ("python-argcomplete" ,python-argcomplete)
3385 ("python-werkzeug" ,python-werkzeug)))
3386 (native-inputs
3387 `(("python-pytest" ,python-pytest)))
3388 (home-page
9be5ecdf 3389 "https://github.com/smurfix/flask-script")
1b2f753d
LC
3390 (synopsis "Scripting support for Flask")
3391 (description "The Flask-Script extension provides support for writing
3392external scripts in Flask. This includes running a development server,
3393a customised Python shell, scripts to set up your database, cronjobs,
3394and other command-line tasks that belong outside the web application
3395itself.")
3396 (license license:bsd-3)))
3397
3398(define-public python2-flask-script
3399 (package-with-python2 python-flask-script))
3400
3401(define-public python-flask-migrate
3402 (package
3403 (name "python-flask-migrate")
b85822ea 3404 (version "2.5.3")
1b2f753d
LC
3405 (source
3406 (origin
3407 (method url-fetch)
3408 (uri (pypi-uri "Flask-Migrate" version))
3409 (sha256
3410 (base32
b85822ea 3411 "1vip9ww6l18dxffjsggm83k71zkvihxpnhaswpv8klh95s6517d6"))))
1b2f753d
LC
3412 (build-system python-build-system)
3413 (propagated-inputs
3414 `(("python-flask" ,python-flask)
3415 ("python-alembic" ,python-alembic)
3416 ("python-sqlalchemy" ,python-sqlalchemy)
3417 ("python-flask-script" ,python-flask-script)
3418 ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)))
9be5ecdf 3419 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
1b2f753d
LC
3420 (synopsis "SQLAlchemy database migrations for Flask programs using
3421Alembic")
3422 (description "This package contains SQLAlchemy database migration tools
3423for Flask programs that are using @code{python-alembic}.")
3424 (license license:expat)))
3425
1b2f753d
LC
3426(define-public python-genshi
3427 (package
3428 (name "python-genshi")
658505d7 3429 (version "0.7.3")
1b2f753d
LC
3430 (source
3431 (origin
7c8b1bf6
TGR
3432 (method git-fetch)
3433 (uri (git-reference
b0e7b699 3434 (url "https://github.com/edgewall/genshi")
7c8b1bf6
TGR
3435 (commit version)))
3436 (file-name (git-file-name name version))
1b2f753d 3437 (sha256
658505d7 3438 (base32 "04bw7nd4wyn8ixnhik57hny2xpjjpn80k5hp6691inix5gc6rxaf"))))
1b2f753d
LC
3439 (build-system python-build-system)
3440 (home-page "https://genshi.edgewall.org/")
3441 (synopsis "Toolkit for generation of output for the web")
3442 (description "Genshi is a Python library that provides an integrated set
3443of components for parsing, generating, and processing HTML, XML or other
3444textual content for output generation on the web.")
3445 (license license:bsd-3)))
3446
1b2f753d
LC
3447(define-public python2-genshi
3448 (package-with-python2 python-genshi))
3449
3450(define-public python-flask-principal
3451 (package
3452 (name "python-flask-principal")
3453 (version "0.4.0")
3454 (source
3455 (origin
3456 (method url-fetch)
3457 (uri (pypi-uri "Flask-Principal" version))
3458 (sha256
3459 (base32
3460 "0lwlr5smz8vfm5h9a9i7da3q1c24xqc6vm9jdywdpgxfbi5i7mpm"))))
3461 (build-system python-build-system)
3462 (propagated-inputs
3463 `(("python-blinker" ,python-blinker)))
3464 (native-inputs
3465 `(("python-flask" ,python-flask)
3466 ("python-nose" ,python-nose)))
02510c6c 3467 (home-page "https://pythonhosted.org/Flask-Principal/")
1b2f753d
LC
3468 (synopsis "Identity management for Flask")
3469 (description "@code{flask_principal} is a identity management library for
3470Flask. It supports managing both authentication and authorization data in a
3471thread-local variable.")
3472 (license license:expat)))
3473
3474(define-public python2-flask-principal
3475 (package-with-python2 python-flask-principal))
3476
3477(define-public python-flask-httpauth
3478 (package
3479 (name "python-flask-httpauth")
3480 (version "3.2.3")
3481 (source
3482 (origin
3483 (method url-fetch)
3484 (uri (pypi-uri "Flask-HTTPAuth" version))
3485 (sha256
3486 (base32
3487 "13gff5w1mqpzm5nccyg02v3ifb9ifqh5k866cssjhghhg6msfjsz"))))
3488 (build-system python-build-system)
3489 (native-inputs
3490 `(("python-flask" ,python-flask)))
9be5ecdf 3491 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
1b2f753d
LC
3492 (synopsis "Basic and Digest HTTP authentication for Flask routes")
3493 (description "@code{flask_httpauth} provides Basic and Digest HTTP
3494authentication for Flask routes.")
3495 (license license:expat)))
3496
3497(define-public python2-flask-httpauth
3498 (package-with-python2 python-flask-httpauth))
3499
3500(define-public python-uritemplate
3501 (package
3502 (name "python-uritemplate")
a13b5220 3503 (version "3.0.1")
1b2f753d
LC
3504 (source
3505 (origin
3506 (method url-fetch)
3507 (uri (pypi-uri "uritemplate" version))
3508 (sha256
3509 (base32
a13b5220 3510 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))
1b2f753d
LC
3511 (build-system python-build-system)
3512 (home-page "https://uritemplate.readthedocs.org")
3513 (synopsis "Library to deal with URI Templates")
3514 (description "@code{uritemplate} provides Python library to deal with URI
3515Templates.")
3516 (license license:bsd-2)))
3517
3518(define-public python2-uritemplate
3519 (package-with-python2 python-uritemplate))
3520
589e3f4e
LC
3521(define-public python-publicsuffix
3522 (package
3523 (name "python-publicsuffix")
3524 (version "1.1.0")
3525 (source (origin
3526 (method url-fetch)
3527 (uri (pypi-uri "publicsuffix" version))
3528 (sha256
3529 (base32
3530 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
3531 (build-system python-build-system)
3532 (arguments
3533 `(#:tests? #f)) ; tests use the internet
3534 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
3535 (synopsis "Get suffix for a domain name")
3536 (description "Get a public suffix for a domain name using the Public Suffix
3537List.")
3538 (license license:expat)))
3539
3540(define-public python2-publicsuffix
3541 (package-with-python2 python-publicsuffix))
3542
3543(define-public python-publicsuffix2
3544 (package
3545 (name "python-publicsuffix2")
df01360f 3546 (version "2.20191221")
589e3f4e
LC
3547 (source
3548 (origin
3549 (method url-fetch)
df01360f 3550 (uri (pypi-uri "publicsuffix2" version))
589e3f4e 3551 (sha256
df01360f 3552 (base32 "0yzysvfj1najr1mb4pcqrbmjir3xpb69rlffln95a3cdm8qwry00"))))
589e3f4e
LC
3553 (build-system python-build-system)
3554 (arguments
df01360f
TGR
3555 '(#:phases
3556 (modify-phases %standard-phases
3557 (add-after 'unpack 'ignore-maintainer-inputs
3558 (lambda _
3559 ;; Comment out a demand for python-requests, which is used only by
3560 ;; the unused ‘update_psl’ helper command.
3561 (substitute* "setup.py"
3562 (("'requests " match)
2b829898 3563 (format #f "# ~a" match)))
df01360f
TGR
3564 #t)))
3565 #:tests? #f)) ; the test suite requires network access
589e3f4e
LC
3566 (home-page "https://github.com/pombredanne/python-publicsuffix2")
3567 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
3568 (description "Get a public suffix for a domain name using the Public Suffix
3569List. Forked from and using the same API as the publicsuffix package.")
3570 (license (list license:expat license:mpl2.0))))
3571
3572(define-public python2-publicsuffix2
3573 (package-with-python2 python-publicsuffix2))
98c6a025
RW
3574
3575(define-public python-werkzeug
3576 (package
3577 (name "python-werkzeug")
44b88565 3578 (version "1.0.0")
98c6a025
RW
3579 (source
3580 (origin
3581 (method url-fetch)
44b88565 3582 (uri (pypi-uri "Werkzeug" version))
98c6a025
RW
3583 (sha256
3584 (base32
44b88565 3585 "15kh0z61klp62mrc1prka13xsshxn0rsp1j1s2964iw86yisi6qn"))))
98c6a025 3586 (build-system python-build-system)
c5e110ce
EF
3587 (arguments
3588 '(#:phases
3589 (modify-phases %standard-phases
3590 (delete 'check)
3591 (add-after 'install 'check
3592 (lambda* (#:key inputs outputs #:allow-other-keys)
3593 (add-installed-pythonpath inputs outputs)
3594 (invoke "python" "-m" "pytest"))))))
3595 (propagated-inputs
3596 `(("python-requests" ,python-requests)))
98c6a025 3597 (native-inputs
44b88565
MB
3598 `(("python-pytest" ,python-pytest)
3599 ("python-pytest-timeout" ,python-pytest-timeout)))
c5e110ce 3600 (home-page "https://www.palletsprojects.org/p/werkzeug/")
98c6a025
RW
3601 (synopsis "Utilities for WSGI applications")
3602 (description "One of the most advanced WSGI utility modules. It includes a
3603powerful debugger, full-featured request and response objects, HTTP utilities to
3604handle entity tags, cache control headers, HTTP dates, cookie handling, file
3605uploads, a powerful URL routing system and a bunch of community-contributed
3606addon modules.")
3607 (license license:x11)))
3608
3609(define-public python2-werkzeug
3610 (package-with-python2 python-werkzeug))
3611
3612(define-public python-bottle
3613 (package
3614 (name "python-bottle")
6fa2ea47 3615 (version "0.12.19")
98c6a025
RW
3616 (source
3617 (origin
3618 (method url-fetch)
3619 (uri (pypi-uri "bottle" version))
3620 (sha256
6fa2ea47 3621 (base32 "0b6s50vc4iad97b6bb3xnyrgajb3nj6n6jbr5p54a4vapky3zmx9"))))
98c6a025 3622 (build-system python-build-system)
9d693489 3623 (home-page "https://bottlepy.org/")
98c6a025
RW
3624 (synopsis "WSGI framework for small web-applications.")
3625 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
3626 (license license:expat)))
3627
3628(define-public python2-bottle
3629 (package-with-python2 python-bottle))
3630
3631(define-public python-wtforms
3632 (package
3633 (name "python-wtforms")
3634 (version "2.1")
3635 (source
3636 (origin
3637 (method url-fetch)
3638 (uri (pypi-uri "WTForms" version ".zip"))
3639 (sha256
3640 (base32
3641 "0vyl26y9cg409cfyj8rhqxazsdnd0jipgjw06civhrd53yyi1pzz"))))
3642 (build-system python-build-system)
3643 (arguments
3644 '(#:phases
3645 (modify-phases %standard-phases
3646 (add-after 'unpack 'remove-django-test
3647 ;; Don't fail the tests when the inputs for the optional tests cannot be found.
3648 (lambda _
3649 (substitute*
3650 "tests/runtests.py"
3651 (("'ext_django.tests', 'ext_sqlalchemy', 'ext_dateutil', 'locale_babel'") "")
3652 (("sys.stderr.write(\"### Disabled test '%s', dependency not found\n\" % name)") ""))
3653 #t)))))
3654 (native-inputs
3655 `(("unzip" ,unzip)))
3656 (home-page "http://wtforms.simplecodes.com/")
3657 (synopsis
3658 "Form validation and rendering library for Python web development")
3659 (description
3660 "WTForms is a flexible forms validation and rendering library
3661for Python web development. It is very similar to the web form API
3662available in Django, but is a standalone package.")
3663 (license license:bsd-3)))
3664
3665(define-public python2-wtforms
3666 (package-with-python2 python-wtforms))
3667
3668(define-public python-paste
3669 (package
3670 (name "python-paste")
ce50403f 3671 (version "3.0.6")
98c6a025
RW
3672 (source
3673 (origin
3674 (method url-fetch)
3675 (uri (pypi-uri "Paste" version))
3676 (sha256
3677 (base32
ce50403f 3678 "14lbi9asn5agsdf7r97prkjpz7amgmp529lbvfhf0nv881xczah6"))
95176544
EF
3679 (patches (search-patches "python-paste-remove-timing-test.patch"))
3680 (modules '((guix build utils)))
3681 (snippet
3682 '(begin
3683 ;; This test calls out to the internet.
3684 (delete-file "tests/test_proxy.py") #t))))
98c6a025
RW
3685 (build-system python-build-system)
3686 (native-inputs
95176544
EF
3687 `(("python-pytest" ,python-pytest)
3688 ("python-pytest-runner" ,python-pytest-runner)
3689 ("python-nose" ,python-nose)))
98c6a025
RW
3690 (propagated-inputs
3691 `(("python-six" ,python-six)))
63b06670 3692 (home-page "https://pythonpaste.readthedocs.io/")
98c6a025
RW
3693 (synopsis
3694 "Python web development tools, focusing on WSGI")
3695 (description
3696 "Paste provides a variety of web development tools and middleware which
3697can be nested together to build web applications. Paste's design closely
3698follows ideas flowing from WSGI (Web Standard Gateway Interface).")
3699 (license license:expat)))
3700
3701(define-public python2-paste
3702 (package-with-python2 python-paste))
3703
3704(define-public python-pastescript
3705 (package
3706 (name "python-pastescript")
3707 (version "2.0.2")
3708 (source
3709 (origin
3710 (method url-fetch)
3711 (uri (pypi-uri "PasteScript" version))
3712 (sha256
3713 (base32
3714 "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"))))
3715 (build-system python-build-system)
3716 (native-inputs
3717 `(("python-nose" ,python-nose)))
3718 (propagated-inputs
3719 `(("python-paste" ,python-paste)
3720 ("python-pastedeploy" ,python-pastedeploy)))
63b06670
TGR
3721 (home-page (string-append "https://web.archive.org/web/20161025192515/"
3722 "http://pythonpaste.org/script/"))
98c6a025
RW
3723 (arguments
3724 '(;; Unfortunately, this requires the latest unittest2,
3725 ;; but that requires traceback2 which requires linecache2 which requires
3726 ;; unittest2. So we're skipping tests for now.
3727 ;; (Note: Apparently linetest2 only needs unittest2 for its tests,
3728 ;; so in theory we could get around this situation somehow.)
3729 #:tests? #f))
3730 (synopsis
3731 "Pluggable command line tool for serving web applications and more")
3732 (description
3733 "PasteScript is a plugin-friendly command line tool which provides a
3734variety of features, from launching web applications to bootstrapping project
3735layouts.")
3736 (license license:expat)))
3737
3738(define-public python2-pastescript
3739 (package-with-python2 python-pastescript))
c5964611
3740
3741(define-public python2-urlgrabber
3742 (package
3743 (name "python2-urlgrabber")
3744 (version "3.10.2")
3745 (source
3746 (origin
3747 (method url-fetch)
3748 (uri (pypi-uri "urlgrabber" version))
3749 (sha256
3750 (base32 "0w1h7hlsq406bxfy2pn4i9bd003bwl0q9b7p03z3g6yl0d21ddq5"))))
3751 (build-system python-build-system)
3752 (arguments `(#:python ,python-2)) ; urlgrabber supports python2 only
3753 (home-page "http://urlgrabber.baseurl.org")
3754 (synopsis "High-level cross protocol url-grabber")
3755 (description "@code{urlgrabber} is Python2 library that unifies access to
3756files available on web, FTP or locally. It supports HTTP, FTP and file://
3757protocols, it supports features like HTTP keep-alive, reget, throttling and
3758more.")
3759 (license license:lgpl2.1+)))
3760
85ccc0c2
NG
3761(define-public python-pycares
3762 (package
3763 (name "python-pycares")
3764 (version "2.3.0")
3765 (source
3766 (origin
3767 (method url-fetch)
3768 (uri (pypi-uri "pycares" version))
3769 (sha256
3770 (base32
3771 "0h4fxw5drrhfyslzmfpljk0qnnpbhhb20hnnndzahhbwylyw1x1n"))))
3772 (build-system python-build-system)
3773 (arguments
3774 `(#:tests? #f)) ;tests require internet access
702a1012 3775 (home-page "https://github.com/saghul/pycares")
85ccc0c2
NG
3776 (synopsis "Python interface for @code{c-ares}")
3777 (description "@code{pycares} is a Python module which provides an
3778interface to @code{c-ares}, a C library that performs DNS requests and
3779name resolutions asynchronously.")
3780 (license license:expat)))
2eccb414
NG
3781
3782(define-public python-yarl
3783 (package
3784 (name "python-yarl")
3785 (version "1.1.1")
3786 (source
3787 (origin
3788 (method url-fetch)
3789 (uri (pypi-uri "yarl" version))
3790 (sha256
3791 (base32
3792 "1s6z13g8vgxfkkqwhn6imnm7pl7ky9arv4jygnn6bcndcbidg7d6"))))
3793 (build-system python-build-system)
3794 (native-inputs
3795 `(("python-pytest" ,python-pytest)
3796 ("python-pytest-runner" ,python-pytest-runner)))
3797 (propagated-inputs
3798 `(("python-idna" ,python-idna)
3799 ("python-multidict" ,python-multidict)))
3800 (home-page "https://github.com/aio-libs/yarl/")
3801 (synopsis "Yet another URL library")
3802 (description "@code{yarl} module provides handy @code{URL} class
3803for URL parsing and changing.")
3804 (license license:asl2.0)))
961bcdf5
MO
3805
3806(define-public python-google-api-client
3807 (package
3808 (name "python-google-api-client")
3809 (version "1.6.7")
3810 (source
3811 (origin
3812 (method url-fetch)
3813 (uri (pypi-uri "google-api-python-client" version))
3814 (sha256
3815 (base32
3816 "1wpbbbxfpy9mwxdy3kn352cb590ladv574j1aa2l4grjdqw3ln05"))))
3817 (build-system python-build-system)
3818 (arguments
3819 '(#:tests? #f)) ; tests require internet access
3820 (native-inputs
3821 `(("python-httplib2" ,python-httplib2)
3822 ("python-six" ,python-six)
3823 ("python-oauth2client" ,python-oauth2client)
3824 ("python-uritemplate" ,python-uritemplate)))
3825 (home-page "https://github.com/google/google-api-python-client")
3826 (synopsis "Core Python library for accessing Google APIs")
3827 (description "Python client library for Google's discovery based APIs")
3828 (license license:asl2.0)))
3829
3830(define-public python2-google-api-client
3831 (package-with-python2 python-google-api-client))
0750f344
RW
3832
3833(define-public python-hawkauthlib
3834 (package
3835 (name "python-hawkauthlib")
3836 (version "2.0.0")
3837 (source
3838 (origin
3839 (method url-fetch)
3840 (uri (pypi-uri "hawkauthlib" version))
3841 (sha256
3842 (base32
3843 "03ai47s4h8nfnrf25shbfvkm1b9n1ccd4nmmj280sg1fayi69zgg"))))
3844 (build-system python-build-system)
3845 (propagated-inputs
3846 `(("python-requests" ,python-requests)
3847 ("python-webob" ,python-webob)))
3848 (home-page "https://github.com/mozilla-services/hawkauthlib")
3849 (synopsis "Hawk Access Authentication protocol")
3850 (description
3851 "This is a low-level Python library for implementing Hawk Access Authentication,
3852a simple HTTP request-signing scheme.")
3853 (license license:mpl2.0)))
084e14cc
RW
3854
3855(define-public python-pybrowserid
3856 (package
3857 (name "python-pybrowserid")
3858 (version "0.14.0")
3859 (source
3860 (origin
3861 (method url-fetch)
3862 (uri (pypi-uri "PyBrowserID" version))
3863 (sha256
3864 (base32
3865 "1qvi79kfb8x9kxkm5lw2mp42hm82cpps1xknmsb5ghkwx1lpc8kc"))))
3866 (build-system python-build-system)
3867 (propagated-inputs
3868 `(("python-requests" ,python-requests)))
3869 (native-inputs
3870 `(("python-mock" ,python-mock)))
3871 (home-page "https://github.com/mozilla/PyBrowserID")
3872 (synopsis "Python library for the BrowserID protocol")
3873 (description
3874 "This is a Python client library for the BrowserID protocol that
3875underlies Mozilla Persona.")
3876 (license license:mpl2.0)))
f45bb3cc
RW
3877
3878(define-public python-pyfxa
3879 (package
3880 (name "python-pyfxa")
3881 (version "0.6.0")
3882 (source
3883 (origin
3884 (method url-fetch)
3885 (uri (pypi-uri "PyFxA" version))
3886 (sha256
3887 (base32
3888 "0axl16fyrz2r88gnw4b12mk7dpkqscv8c4wsc1y5hicl7bsbc4fm"))))
3889 (build-system python-build-system)
3890 (arguments '(#:tests? #f)) ; 17 tests require network access
3891 (propagated-inputs
3892 `(("python-cryptography" ,python-cryptography)
3893 ("python-hawkauthlib" ,python-hawkauthlib)
3894 ("python-pybrowserid" ,python-pybrowserid)
3895 ("python-requests" ,python-requests)
3896 ("python-six" ,python-six)))
3897 (native-inputs
3898 `(("python-grequests" ,python-grequests)
3899 ("python-mock" ,python-mock)
3900 ("python-responses" ,python-responses)
3901 ("python-unittest2" ,python-unittest2)))
3902 (home-page "https://github.com/mozilla/PyFxA")
3903 (synopsis "Firefox Accounts client library for Python")
3904 (description
3905 "This is a Python library for interacting with the Firefox Accounts
3906ecosystem.")
3907 (license license:mpl2.0)))
68460fbb
LF
3908
3909(define-public python-hyperlink
3910 (package
3911 (name "python-hyperlink")
431a0d26 3912 (version "19.0.0")
68460fbb
LF
3913 (source
3914 (origin
3915 (method url-fetch)
3916 (uri (pypi-uri "hyperlink" version))
3917 (sha256
3918 (base32
431a0d26 3919 "0m2nhi0j8wmgfscf974wd5v1xfq8mah286hil6npy1ys0m3y7222"))))
68460fbb
LF
3920 (build-system python-build-system)
3921 (propagated-inputs
3922 `(("python-idna" ,python-idna)))
3923 (home-page "https://github.com/python-hyper/hyperlink")
3924 (synopsis "Python module to create immutable URLs according to spec")
3925 (description "This package provides a Python module to create immutable, and
3926correct URLs for Python according to RFCs 3986 and 3987.")
3927 (license license:expat)))
00adbac6
LF
3928
3929(define-public python-treq
3930 (package
3931 (name "python-treq")
3932 (version "18.6.0")
3933 (source
3934 (origin
3935 (method url-fetch)
3936 (uri (pypi-uri "treq" version))
3937 (sha256
3938 (base32
3939 "0j4zwq9p1c9piv1vc66nxcv9s6hdinf90jwkbsm91k14npv9zq4i"))))
3940 (build-system python-build-system)
3941 (propagated-inputs
3942 `(("python-attrs" ,python-attrs)
3943 ("python-idna" ,python-idna)
3944 ("python-incremental" ,python-incremental)
3945 ("python-requests" ,python-requests)
3946 ("python-service-identity" ,python-service-identity)
3947 ("python-twisted" ,python-twisted)))
3948 (home-page "https://github.com/twisted/treq")
3949 (synopsis "Requests-like API built on top of twisted.web's Agent")
3950 (description "This package provides an HTTP library inspired by
3951@code{requests}} but written on top of Twisted's @code{Agents}. It offers a
3952high level API for making HTTP requests when using Twisted.")
3953 (license license:expat)))
951c7093
LF
3954
3955(define-public python-autobahn
3956 (package
3957 (name "python-autobahn")
3958 (version "19.2.1")
3959 (source
3960 (origin
3961 (method url-fetch)
3962 (uri (pypi-uri "autobahn" version))
3963 (sha256
3964 (base32
3965 "1mm7j24ls01c7jb1ad5p5cpyxvzgydiyf8b04ihykh2v8g98j0x7"))))
3966 (build-system python-build-system)
3967 (arguments
3968 ;; The tests fail to run:
3969 ;; https://github.com/crossbario/autobahn-python/issues/1117
3970 `(#:tests? #f))
3971 (propagated-inputs
3972 `(("python-cffi" ,python-cffi)
3973 ("python-twisted" ,python-twisted)
3974 ("python-txaio" ,python-txaio)))
3975 (home-page "https://crossbar.io/autobahn/")
3976 (synopsis "Web Application Messaging Protocol implementation")
3977 (description "This package provides an implementation of the @dfn{Web Application
3978Messaging Protocol} (WAMP). WAMP connects components in distributed
3979applications using Publish and Subscribe (PubSub) and routed Remote Procedure
3980Calls (rRPC). It is ideal for distributed, multi-client and server applications
3981such as IoT applications or multi-user database-driven business applications.")
3982 (license license:expat)))
526b1efb
RW
3983
3984(define-public python-ws4py
3985 (package
3986 (name "python-ws4py")
3987 (version "0.5.1")
3988 (source
3989 (origin
3990 (method url-fetch)
3991 (uri (pypi-uri "ws4py" version))
3992 (sha256
3993 (base32
3994 "10slbbf2jm4hpr92jx7kh7mhf48sjl01v2w4d8z3f1p0ybbp7l19"))))
3995 (build-system python-build-system)
3996 (arguments
3997 `(#:phases
3998 (modify-phases %standard-phases
3999 (add-after 'unpack 'python3.7-compatibility
4000 (lambda _
4001 (substitute* '("ws4py/server/tulipserver.py"
4002 "ws4py/async_websocket.py")
4003 (("asyncio.async")
4004 "asyncio.ensure_future"))
4005 #t))
4006 ;; We don't have a package for cherrypy.
4007 (add-after 'unpack 'remove-cherrypy-support
4008 (lambda _
4009 (delete-file "ws4py/server/cherrypyserver.py")
4010 #t)))))
4011 (propagated-inputs
4012 `(("python-gevent" ,python-gevent)
4013 ("python-tornado" ,python-tornado)))
4014 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
4015 (synopsis "WebSocket client and server library")
4016 (description
4017 "This package provides a WebSocket client and server library for
4018Python.")
4019 (license license:bsd-3)))
57e4592f 4020
6543bc80
PL
4021(define-public python-slugify
4022 (package
4023 (name "python-slugify")
4da627a3 4024 (version "4.0.1")
6543bc80
PL
4025 (source
4026 (origin
4027 (method url-fetch)
4028 (uri (pypi-uri "python-slugify" version))
4029 (sha256
4da627a3 4030 (base32 "0w22fapghmzk3xdasc4dn7h8sl58l08d1h5zbf72dh80drv1g9b9"))))
6543bc80
PL
4031 (propagated-inputs
4032 `(("python-unidecode" ,python-unidecode)))
4033 (arguments
4034 `(#:phases
4035 (modify-phases %standard-phases
4036 (replace 'check
4037 (lambda _
4038 (invoke "python" "test.py"))))))
4039 (build-system python-build-system)
4040 (home-page "https://github.com/un33k/python-slugify")
4041 (synopsis "Python Slugify application that handles Unicode")
4042 (description "This package provides a @command{slufigy} command and
4043library to create slugs from unicode strings while keeping it DRY.")
4044 (license license:expat)))
2bdb5716
NG
4045
4046(define-public python-branca
4047 (package
4048 (name "python-branca")
4049 (version "0.3.1")
4050 (source
4051 (origin
4052 (method url-fetch)
4053 (uri (pypi-uri "branca" version))
4054 (sha256
4055 (base32
4056 "0pmigd521j2228xf8x34vbx0niwvms7xl7za0lymywj0vydjqxiy"))))
4057 (build-system python-build-system)
4058 (propagated-inputs
4059 `(("python-jinja2" ,python-jinja2)
4060 ("python-six" ,python-six)))
4061 (native-inputs
4062 `(("python-pytest" ,python-pytest)))
4063 (home-page "https://github.com/python-visualization/branca")
4064 (synopsis "Generate complex HTML+JS pages with Python")
4065 (description "Generate complex HTML+JS pages with Python")
4066 (license license:expat)))
4067
df122333
HG
4068(define-public python-tinycss2
4069 (package
4070 (name "python-tinycss2")
4071 (version "1.0.2")
4072 (source
4073 (origin
4074 (method url-fetch)
4075 (uri (pypi-uri "tinycss2" version))
15076369 4076 (patches (search-patches "python-tinycss2-flake8-compat.patch"))
df122333
HG
4077 (sha256
4078 (base32 "1kw84y09lggji4krkc58jyhsfj31w8npwhznr7lf19d0zbix09v4"))))
4079 (build-system python-build-system)
4080 (arguments
4081 `(#:phases
4082 (modify-phases %standard-phases
4083 (replace 'check
4084 (lambda _ (invoke "pytest"))))))
4085 (propagated-inputs
4086 `(("python-webencodings" ,python-webencodings)))
4087 (native-inputs
4088 `(("python-pytest-flake8" ,python-pytest-flake8)
4089 ("python-pytest-isort" ,python-pytest-isort)
4090 ("python-pytest-runner" ,python-pytest-runner)))
4091 (home-page "https://tinycss2.readthedocs.io/")
4092 (synopsis "Low-level CSS parser for Python")
4093 (description "@code{tinycss2} can parse strings, return Python objects
4094representing tokens and blocks, and generate CSS strings corresponding to
4095these objects.
4096
4097Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
4098grammar of CSS but doesn’t know specific rules, properties or values supported
4099in various CSS modules.")
4100 (license license:bsd-3)))
4101
7d3f481b
HG
4102(define-public python-cssselect2
4103 (package
4104 (name "python-cssselect2")
4105 (version "0.2.2")
4106 (source
4107 (origin
4108 (method url-fetch)
4109 (uri (pypi-uri "cssselect2" version))
4110 (sha256
4111 (base32 "0skymzb4ncrm2zdsy80f53vi0arf776lvbp51hzh4ayp1il5lj3h"))))
4112 (build-system python-build-system)
4113 (arguments
4114 `(#:phases
4115 (modify-phases %standard-phases
4116 (replace 'check
4117 (lambda _ (invoke "pytest"))))))
4118 (propagated-inputs
4119 `(("python-tinycss2" ,python-tinycss2)))
4120 (native-inputs
4121 `(("python-pytest-cov" ,python-pytest-cov)
4122 ("python-pytest-flake8" ,python-pytest-flake8)
4123 ("python-pytest-isort" ,python-pytest-isort)
4124 ("python-pytest-runner" ,python-pytest-runner)))
4125 (home-page "https://cssselect2.readthedocs.io/")
4126 (synopsis "CSS selectors for Python ElementTree")
4127 (description "@code{cssselect2} is a straightforward implementation of
4128CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
4129ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
4130
4131Unlike the Python package @code{cssselect}, it does not translate selectors to
4132XPath and therefore does not have all the correctness corner cases that are
4133hard or impossible to fix in cssselect.")
4134 (license license:bsd-3)))
a7469d16 4135
5438adea
VM
4136(define-public python-uvloop
4137 (package
4138 (name "python-uvloop")
4139 (version "0.14.0")
4140 (source
4141 (origin
4142 (method url-fetch)
4143 (uri (pypi-uri "uvloop" version))
4144 (sha256
4145 (base32 "07j678z9gf41j98w72ysrnb5sa41pl5yxd7ib17lcwfxqz0cjfhj"))))
4146 (build-system python-build-system)
4147 (arguments
4148 '(#:tests? #f ;FIXME: tests hang and with some errors in the way
4149 #:phases
4150 (modify-phases %standard-phases
4151 (add-after 'unpack 'preparations
4152 (lambda _
4153 ;; Use packaged libuv.
4154 (substitute* "setup.py" (("self.use_system_libuv = False")
4155 "self.use_system_libuv = True"))
4156 #t)))))
4157 (native-inputs
4158 `(("python-aiohttp" ,python-aiohttp)
4159 ("python-cython" ,python-cython)
4160 ("python-flake8" ,python-flake8)
4161 ("python-psutil" ,python-psutil)
4162 ("python-pyopenssl" ,python-pyopenssl)
4163 ("python-twine" ,python-twine)))
4164 (inputs
4165 `(("libuv" ,libuv)))
4166 (home-page "https://github.com/MagicStack/uvloop")
4167 (synopsis "Fast implementation of asyncio event loop on top of libuv")
4168 (description
4169 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
4170event loop. It is implemented in Cython and uses libuv under the hood.")
4171 (license license:expat)))
4172
a7469d16
HG
4173(define-public gunicorn
4174 (package
4175 (name "gunicorn")
ecceef27 4176 (version "20.0.4")
a7469d16
HG
4177 (source
4178 (origin
4179 (method url-fetch)
4180 (uri (pypi-uri "gunicorn" version))
4181 (sha256
4182 (base32
ecceef27 4183 "09n6fc019bgrvph1s5h1lwhn2avcsprw6ncd203qhra3i8mvn10r"))))
a7469d16
HG
4184 (outputs '("out" "doc"))
4185 (build-system python-build-system)
4186 (arguments
4187 `(#:phases
4188 (modify-phases %standard-phases
4189 (add-after 'build 'build-doc
4190 (lambda _
4191 (invoke "make" "-C" "docs" "PAPER=a4" "html" "info")
4192 (delete-file "docs/build/texinfo/Makefile")
4193 (delete-file "docs/build/texinfo/Gunicorn.texi")
4194 #t))
4195 (replace 'check
4196 (lambda _
4197 (setenv "PYTHONPATH"
4198 (string-append ".:" (getenv "PYTHONPATH")))
a7469d16
HG
4199 (invoke "pytest")))
4200 (add-after 'install 'install-doc
4201 (lambda* (#:key outputs #:allow-other-keys)
4202 (let* ((doc (string-append (assoc-ref outputs "doc")
4203 "/share/doc/" ,name "-" ,version))
4204 (html (string-append doc "/html"))
4205 (info (string-append doc "/info"))
4206 (examples (string-append doc "/examples")))
4207 (mkdir-p html)
4208 (mkdir-p info)
4209 (mkdir-p examples)
4210 (copy-recursively "docs/build/html" html)
4211 (copy-recursively "docs/build/texinfo" info)
4212 (copy-recursively "examples" examples)
4213 (for-each (lambda (file)
4214 (copy-file file (string-append doc "/" file)))
4215 '("README.rst" "NOTICE" "LICENSE" "THANKS")))
4216 #t)))))
4217 (native-inputs
4218 `(("binutils" ,binutils) ;; for ctypes.util.find_library()
1628d57b 4219 ("python-aiohttp" ,python-aiohttp)
a7469d16
HG
4220 ("python-pytest" ,python-pytest)
4221 ("python-pytest-cov" ,python-pytest-cov)
4222 ("python-sphinx" ,python-sphinx)
4223 ("texinfo" ,texinfo)))
06dfce79 4224 (home-page "https://gunicorn.org/")
a7469d16
HG
4225 (synopsis "Python WSGI HTTP Server for UNIX")
4226 (description "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
4227Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
4228Unicorn project. The Gunicorn server is broadly compatible with
4229various web frameworks, simply implemented, light on server resources,
4230and fairly speedy.")
4231 (license license:expat)))
18d18ee1 4232
44dbd856
LDB
4233;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
4234;; its tests
4235(define-public gunicorn-bootstrap
4236 (package
4237 (inherit gunicorn)
4238 (name "gunicorn")
f4a2f049
EF
4239 (arguments `(#:tests? #f))
4240 (properties '((hidden? . #t)))
44dbd856
LDB
4241 (native-inputs `())))
4242
c66a16bb
VM
4243(define-public python-httptools
4244 (package
4245 (name "python-httptools")
4246 (version "0.1.1")
4247 (source
4248 (origin
4249 ;; PyPI tarball comes with a vendored http-parser and no tests.
4250 (method git-fetch)
4251 (uri (git-reference
4252 (url "https://github.com/MagicStack/httptools")
4253 (commit (string-append "v" version))))
4254 (file-name (git-file-name name version))
4255 (sha256
4256 (base32 "0g08128x2ixsiwrzskxc6c8ymgzs39wbzr5mhy0mjk30q9pqqv77"))))
4257 (build-system python-build-system)
4258 (arguments
4259 '(#:phases
4260 (modify-phases %standard-phases
4261 (add-after 'unpack 'preparations
4262 (lambda _
4263 ;; Skip a failing test (AssertionError). Bug report:
4264 ;; https://github.com/MagicStack/httptools/issues/10.
4265 (substitute* "tests/test_parser.py"
4266 ((" def test_parser_response_1")
4267 (string-append
4268 " @unittest.skip(\"Disabled.\")\n"
4269 " def test_parser_response_1")))
4270 ;; Use packaged http-parser.
4271 (substitute* "setup.py" (("self.use_system_http_parser = False")
4272 "self.use_system_http_parser = True"))
4273 ;; This path is hardcoded. Hardcode our own.
4274 (substitute* "httptools/parser/cparser.pxd"
4275 (("../../vendor/http-parser")
4276 (string-append (assoc-ref %build-inputs "http-parser")
4277 "/include")))
4278 ;; Don't force Cython version.
4279 (substitute* "setup.py" (("Cython==") "Cython>="))
4280 #t)))))
4281 (native-inputs
4282 `(("python-cython" ,python-cython)
4283 ("python-pytest" ,python-pytest)))
4284 (inputs
4285 `(("http-parser" ,http-parser)))
4286 (home-page "https://github.com/MagicStack/httptools")
4287 (synopsis "Collection of framework independent HTTP protocol utils")
4288 (description
4289 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
4290 (license license:expat)))
4291
f3c9c2fb
VM
4292(define-public python-uvicorn
4293 (package
4294 (name "python-uvicorn")
4295 (version "0.11.8")
4296 (source
4297 (origin
4298 ;; PyPI tarball has no tests.
4299 (method git-fetch)
4300 (uri (git-reference
4301 (url "https://github.com/encode/uvicorn")
4302 (commit version)))
4303 (file-name (git-file-name name version))
4304 (sha256
4305 (base32 "00iidg5ysp7k00bw3kmkvr8mghnh4jdi0p2ryiarhryf8wz2r3fy"))))
4306 (build-system python-build-system)
4307 (arguments
4308 `(#:phases
4309 (modify-phases %standard-phases
4310 (replace 'check
4311 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4312 (add-installed-pythonpath inputs outputs)
4313 (invoke "pytest" "-vv"))))))
4314 (native-inputs
4315 `(("python-black" ,python-black)
4316 ("python-codecov" ,python-codecov)
4317 ("python-flake8" ,python-flake8)
4318 ("python-isort" ,python-isort)
4319 ("python-mypy" ,python-mypy)
4320 ("python-pytest" ,python-pytest)
4321 ("python-pytest-cov" ,python-pytest-cov)
4322 ("python-pytest-mock" ,python-pytest-mock)
4323 ("python-requests" ,python-requests)))
4324 (propagated-inputs
4325 `(("python-click" ,python-click)
4326 ("python-h11" ,python-h11)
4327 ("python-httptools" ,python-httptools)
4328 ("python-pyyaml" ,python-pyyaml)
4329 ("python-uvloop" ,python-uvloop)
4330 ("python-watchgod" ,python-watchgod)
4331 ("python-websockets" ,python-websockets)
4332 ("python-wsproto" ,python-wsproto)))
4333 (home-page "https://github.com/encode/uvicorn")
4334 (synopsis "Fast ASGI server implementation")
4335 (description
4336 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
4337and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
4338for HTTP/2 is planned.")
4339 (license license:bsd-3)))
4340
18d18ee1
JL
4341(define-public python-translation-finder
4342 (package
4343 (name "python-translation-finder")
4344 (version "1.7")
4345 (source
4346 (origin
4347 (method url-fetch)
4348 (uri (pypi-uri "translation-finder" version))
4349 (sha256
4350 (base32
4351 "1pcy9z8gmb8x41gjhw9x0lkr0d2mv5mdxcs2hwg6q8mxs857j589"))))
4352 (build-system python-build-system)
4353 (arguments
4354 `(#:phases
4355 (modify-phases %standard-phases
4356 (add-before 'build 'remove-failing-test
4357 (lambda _
4358 (delete-file "translation_finder/test_api.py")
4359 #t)))))
4360 (propagated-inputs
4361 `(("python-chardet" ,python-chardet)
4362 ("python-pathlib2" ,python-pathlib2)
4363 ("python-ruamel.yaml" ,python-ruamel.yaml)
4364 ("python-six" ,python-six)))
4365 (native-inputs
4366 `(("python-codecov" ,python-codecov)
4367 ("python-codacy-coverage" ,python-codacy-coverage)
4368 ("python-pytest-cov" ,python-pytest-cov)
4369 ("python-pytest-runner" ,python-pytest-runner)
4370 ("python-twine" ,python-twine)))
4371 (home-page "https://weblate.org/")
4372 (synopsis "Translation file finder for Weblate")
4373 (description "This package provides a function to find translation file in
4374the source code of a project. It supports many translation file formats and
4375is part of the Weblate translation platform.")
4376 (license license:gpl3+)))
ad429e0d
JL
4377
4378(define-public python-gitlab
4379 (package
4380 (name "python-gitlab")
4381 (version "1.15.0")
4382 (source
4383 (origin
4384 (method url-fetch)
4385 (uri (pypi-uri "python-gitlab" version))
4386 (sha256
4387 (base32
4388 "0zl6kz8v8cg1bcy2r78b2snb0lpw0b573gdx2x1ps0nhsh75l4j5"))))
4389 (build-system python-build-system)
4390 (propagated-inputs
4391 `(("python-requests" ,python-requests)
4392 ("python-six" ,python-six)))
4393 (native-inputs
4394 `(("python-httmock" ,python-httmock)
4395 ("python-mock" ,python-mock)))
4396 (home-page
4397 "https://github.com/python-gitlab/python-gitlab")
4398 (synopsis "Interact with GitLab API")
4399 (description "This package provides an extended library for interacting
4400with GitLab instances through their API.")
4401 (license license:lgpl3+)))
0021363d
JK
4402
4403(define-public python-path-and-address
4404 (package
4405 (name "python-path-and-address")
4406 (version "2.0.1")
4407 (source
4408 (origin
4409 ;; The source distributed on PyPI doesn't include tests.
4410 (method git-fetch)
4411 (uri (git-reference
4412 (url "https://github.com/joeyespo/path-and-address")
4413 (commit (string-append "v" version))))
4414 (file-name (git-file-name name version))
4415 (sha256
4416 (base32
4417 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
4418 (build-system python-build-system)
4419 (arguments
4420 `(#:phases
4421 (modify-phases %standard-phases
4422 (replace 'check
4423 (lambda* (#:key inputs outputs #:allow-other-keys)
4424 (add-installed-pythonpath inputs outputs)
4425 (invoke "py.test"))))))
4426 (native-inputs
4427 `(("python-pytest" ,python-pytest)))
4428 (home-page "https://github.com/joeyespo/path-and-address")
4429 (synopsis "Functions for command-line server tools used by humans")
4430 (description "Path-and-address resolves ambiguities of command-line
4431interfaces, inferring which argument is the path, and which is the address.")
4432 (license license:expat)))
52e7bcfd
JK
4433
4434(define-public grip
4435 ;; No release by upstream for quite some time, some bugs fixed since. See:
4436 ;; https://github.com/joeyespo/grip/issues/304
4437 (let ((commit "27a4d6d87ea1d0ea7f7f120de55baabee3de73e3"))
4438 (package
4439 (name "grip")
4440 (version (git-version "4.5.2" "1" commit))
4441 (source
4442 (origin
4443 (method git-fetch)
4444 (uri (git-reference
4445 (url "https://github.com/joeyespo/grip")
4446 (commit commit)))
4447 (file-name (git-file-name name version))
4448 (sha256
4449 (base32
4450 "0kx5hgb3q19i4l18a4vqdq9af390xgpk88lp2ay75qi96k0dc68w"))))
4451 (build-system python-build-system)
4452 (propagated-inputs
4453 `(("python-docopt" ,python-docopt)
4454 ("python-flask" ,python-flask)
4455 ("python-markdown" ,python-markdown)
4456 ("python-path-and-address" ,python-path-and-address)
4457 ("python-pygments" ,python-pygments)
4458 ("python-requests" ,python-requests)))
4459 (native-inputs
4460 `(("python-pytest" ,python-pytest)
4461 ("python-responses" ,python-responses)))
4462 (arguments
4463 `(#:phases
4464 (modify-phases %standard-phases
4465 (replace 'check
4466 (lambda* (#:key inputs outputs #:allow-other-keys)
4467 (add-installed-pythonpath inputs outputs)
4468 (setenv "PATH" (string-append
4469 (getenv "PATH") ":"
4470 (assoc-ref %outputs "out") "/bin"))
4471 (invoke "py.test" "-m" "not assumption"))))))
4472 (home-page "https://github.com/joeyespo/grip")
4473 (synopsis "Preview Markdown files using the GitHub API")
4474 (description "Grip is a command-line server application written in Python
4475that uses the GitHub Markdown API to render a local Markdown file. The styles
4476and rendering come directly from GitHub, so you'll know exactly how it will
4477appear. Changes you make to the file will be instantly reflected in the browser
4478without requiring a page refresh.")
4479 (license license:expat))))
d08782d1
RW
4480
4481(define-public python-port-for
4482 (package
4483 (name "python-port-for")
4484 (version "0.4")
4485 (source
4486 (origin
4487 (method url-fetch)
4488 (uri (pypi-uri "port-for" version))
4489 (sha256
4490 (base32
4491 "1pncxlj25ggw99r0ijfbkq70gd7cbhqdx5ivsxy4jdp0z14cpda7"))))
4492 (build-system python-build-system)
4493 (arguments
4494 `(#:phases
4495 (modify-phases %standard-phases
4496 (add-after 'unpack 'use-urllib3
4497 (lambda _
4498 (substitute* "port_for/_download_ranges.py"
4499 (("urllib2") "urllib3"))
4500 #t)))))
4501 (propagated-inputs
4502 `(("python-urllib3" ,python-urllib3)))
4503 (native-inputs
4504 `(("python-mock" ,python-mock)))
4505 (home-page "https://github.com/kmike/port-for/")
4506 (synopsis "TCP localhost port finder and association manager")
4507 (description
4508 "This package provides a utility that helps with local TCP ports
4509management. It can find an unused TCP localhost port and remember the
4510association.")
4511 (license license:expat)))
d0e0b865
RW
4512
4513(define-public python-livereload
4514 (package
4515 (name "python-livereload")
4516 (version "2.6.1")
4517 (source
4518 (origin
4519 (method url-fetch)
4520 (uri (pypi-uri "livereload" version))
4521 (sha256
4522 (base32
4523 "0rhggz185bxc3zjnfpmhcvibyzi86i624za1lfh7x7ajsxw4y9c9"))))
4524 (build-system python-build-system)
4525 (propagated-inputs
4526 `(("python-six" ,python-six)
4527 ("python-tornado" ,python-tornado)))
4528 (home-page "https://github.com/lepture/python-livereload")
4529 (synopsis "Python LiveReload")
4530 (description
4531 "Python LiveReload provides a command line utility, @command{livereload},
4532for starting a web server in a directory. It can trigger arbitrary commands
4533and serve updated contents upon changes to the directory.")
4534 (license license:bsd-3)))
f1a83356
RN
4535
4536(define-public python-vf-1
4537 (package
4538 (name "python-vf-1")
4539 (version "0.0.11")
4540 (source
4541 (origin
4542 (method url-fetch)
4543 (uri (pypi-uri "VF-1" version))
4544 (sha256
4545 (base32
4546 "0xlqsaxsiayk1sd07kpz8abbcnab582y29a1y4882fq6j4gma5xi"))))
4547 (build-system python-build-system)
4548 (home-page "https://github.com/solderpunk/VF-1")
4549 (synopsis "Command line gopher client")
4550 (description "@code{VF-1} is a command line gopher client with
4551@acronym{TLS, Transport Layer Security} support.")
4552 (license license:bsd-2)))
e91c0cd8 4553
7a802501
VM
4554(define-public python-httpcore
4555 (package
4556 (name "python-httpcore")
a9d9dbfd 4557 (version "0.11.0")
7a802501
VM
4558 (source
4559 (origin
4560 ;; PyPI tarball does not contain tests.
4561 (method git-fetch)
4562 (uri (git-reference
4563 (url "https://github.com/encode/httpcore")
4564 (commit version)))
4565 (file-name (git-file-name name version))
4566 (sha256
a9d9dbfd 4567 (base32 "01bhajcxqgkdzg7b7x0fqs2lwcfsajlgqwi1nlxx58jss7g2kxn9"))))
7a802501
VM
4568 (build-system python-build-system)
4569 (arguments
4570 `(#:phases
4571 (modify-phases %standard-phases
4572 (add-after 'unpack 'remove-unavailable-tests
4573 (lambda _
4574 ;; These tests require 'mitmproxy' which is not packaged.
4575 (for-each (lambda (f)
4576 (delete-file f))
4577 '("tests/conftest.py"
4578 "tests/sync_tests/test_interfaces.py"
4579 "tests/async_tests/test_interfaces.py"))
4580 #t))
4581 (add-after 'remove-unavailable-tests 'force-h11-version
4582 ;; Allow build with h11 >= 0.10.
4583 (lambda _
4584 (substitute* "setup.py" (("h11>=0.8,<0.10") "h11"))
4585 #t))
4586 (replace 'check
4587 (lambda* (#:key inputs outputs #:allow-other-keys)
4588 (add-installed-pythonpath inputs outputs)
4589 (invoke "pytest" "-vv" "--cov=httpcore"
4590 "--cov=tests" "tests"))))))
4591 (native-inputs
4592 `(;; ("mitmproxy" ,mitmproxy) ;; TODO: Package this.
4593 ("python-autoflake" ,python-autoflake)
4594 ("python-flake8" ,python-flake8)
4595 ("python-flake8-bugbear" ,python-flake8-bugbear)
4596 ("python-flake8-pie" ,python-flake8-pie)
4597 ("python-isort" ,python-isort)
4598 ("python-mypy" ,python-mypy)
4599 ("python-pytest" ,python-pytest)
4600 ("python-pytest-asyncio" ,python-pytest-asyncio)
4601 ("python-pytest-cov" ,python-pytest-cov)
4602 ("python-pytest-trio" ,python-pytest-trio)
4603 ("python-uvicorn" ,python-uvicorn)
4604 ("python-trustme" ,python-trustme)))
4605 (propagated-inputs
4606 `(("python-h11" ,python-h11)
4607 ("python-h2" ,python-h2)
4608 ("python-sniffio" ,python-sniffio)
4609 ("python-trio" ,python-trio)
4610 ("python-trio-typing" ,python-trio-typing)))
4611 (home-page "https://github.com/encode/httpcore")
4612 (synopsis "Minimal, low-level HTTP client")
4613 (description
4614 "HTTP Core provides a minimal and low-level HTTP client, which does one
4615thing only: send HTTP requests.
4616
4617Some things HTTP Core does do:
4618
4619@itemize
4620@item Sending HTTP requests.
4621@item Provides both sync and async interfaces.
4622@item Supports HTTP/1.1 and HTTP/2.
4623@item Async backend support for asyncio and trio.
4624@item Automatic connection pooling.
4625@item HTTP(S) proxy support.
4626@end itemize")
4627 (license license:bsd-3)))
4628
32bf0331
VM
4629(define-public python-httpx
4630 (package
4631 (name "python-httpx")
58d74394 4632 (version "0.15.4")
32bf0331
VM
4633 (source
4634 (origin
4635 ;; PyPI tarball does not contain tests.
4636 (method git-fetch)
4637 (uri (git-reference
4638 (url "https://github.com/encode/httpx")
4639 (commit version)))
4640 (file-name (git-file-name name version))
4641 (sha256
58d74394 4642 (base32 "1qr91xw6jxynvihmw953bi5446ssm9ffmb2c4nhfa77v7883sp21"))))
32bf0331
VM
4643 (build-system python-build-system)
4644 (arguments
4645 `(#:phases
4646 (modify-phases %standard-phases
4647 (replace 'check
4648 (lambda _
4649 (invoke "pytest" "-vv" "-k"
421b94ec
VM
4650 ;; These tests try to open an outgoing connection.
4651 (string-append
4652 "not test_connect_timeout"
4653 " and not test_that_send_cause_async_client_to_be_not_"
4654 "closed"
4655 " and not test_that_async_client_caused_warning_when_"
4656 "being_deleted"
4657 " and not test_that_send_cause_client_to_be_not_closed"
4658 " and not test_async_proxy_close"
4659 " and not test_sync_proxy_close")))))))
32bf0331
VM
4660 (native-inputs
4661 `(("python-autoflake" ,python-autoflake)
4662 ("python-black" ,python-black)
4663 ("python-cryptography" ,python-cryptography)
4664 ("python-flake8" ,python-flake8)
4665 ("python-flake8-bugbear" ,python-flake8-bugbear)
4666 ("python-flake8-pie" ,python-flake8-pie)
4667 ("python-isort" ,python-isort)
4668 ("python-mypy" ,python-mypy)
4669 ("python-pytest" ,python-pytest)
4670 ("python-pytest-asyncio" ,python-pytest-asyncio)
4671 ("python-pytest-trio" ,python-pytest-trio)
4672 ("python-pytest-cov" ,python-pytest-cov)
4673 ("python-trio" ,python-trio)
4674 ("python-trio-typing" ,python-trio-typing)
4675 ("python-trustme" ,python-trustme)
4676 ("python-uvicorn" ,python-uvicorn)))
4677 (propagated-inputs
4678 `(("python-brotli" ,python-brotli)
4679 ("python-certifi" ,python-certifi)
4680 ("python-chardet" ,python-chardet)
4681 ("python-httpcore" ,python-httpcore)
4682 ("python-idna" ,python-idna)
4683 ("python-rfc3986" ,python-rfc3986)
4684 ("python-sniffio" ,python-sniffio)))
58d74394 4685 (home-page "https://www.python-httpx.org/")
32bf0331
VM
4686 (synopsis "HTTP client for Python")
4687 (description
4688 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
4689and async APIs, and support for both HTTP/1.1 and HTTP/2.
4690
4691HTTPX builds on the well-established usability of requests, and gives you:
4692
4693@itemize
4694@item A broadly requests-compatible API.
4695@item Standard synchronous interface, but with async support if you need it.
4696@item HTTP/1.1 and HTTP/2 support.
4697@item Ability to make requests directly to WSGI applications or ASGI applications.
4698@item Strict timeouts everywhere.
4699@item Fully type annotated.
4700@item 99% test coverage.
4701@end itemize
4702
4703Plus all the standard features of requests:
4704
4705@itemize
4706@item International Domains and URLs
4707@item Keep-Alive & Connection Pooling
4708@item Sessions with Cookie Persistence
4709@item Browser-style SSL Verification
4710@item Basic/Digest Authentication
4711@item Elegant Key/Value Cookies
4712@item Automatic Decompression
4713@item Automatic Content Decoding
4714@item Unicode Response Bodies
4715@item Multipart File Uploads
4716@item HTTP(S) Proxy Support
4717@item Connection Timeouts
4718@item Streaming Downloads
4719@item .netrc Support
4720@item Chunked Requests
4721@end itemize")
4722 (license license:bsd-3)))
4723
e91c0cd8
EK
4724(define-public python-websockets
4725 (package
4726 (name "python-websockets")
4727 (version "8.1")
4728 (source
4729 (origin
4730 (method url-fetch)
4731 (uri (pypi-uri "websockets" version))
4732 (sha256
4733 (base32
4734 "03s3ml6sbki24aajllf8aily0xzrn929zxi84p50zkkbikdd4raw"))))
4735 (build-system python-build-system)
4736 (arguments '(#:tests? #f)) ; Tests not included in release tarball.
4737 (home-page "https://github.com/aaugustin/websockets")
4738 (synopsis
4739 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
4740 (description
4741 "@code{websockets} is a library for building WebSocket servers and clients
4742in Python with a focus on correctness and simplicity.
4743
4744Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
4745it provides an elegant coroutine-based API.")
4746 (license license:bsd-3)))
1130e8c8
EK
4747
4748(define-public python-selenium
4749 (package
4750 (name "python-selenium")
4751 (version "3.141.0")
4752 (source
4753 (origin
4754 (method url-fetch)
4755 (uri (pypi-uri "selenium" version))
4756 (sha256
4757 (base32
4758 "039hf9knvl4s3hp21bzwsp1g5ri9gxsh504dp48lc6nr1av35byy"))))
4759 (build-system python-build-system)
4760 (propagated-inputs
4761 `(("python-urllib3" ,python-urllib3)))
4762 (home-page
4763 "https://github.com/SeleniumHQ/selenium/")
4764 (synopsis "Python bindings for Selenium")
4765 (description "Selenium enables web browser automation.
4766Selenium specifically provides infrastructure for the W3C WebDriver specification
4767— a platform and language-neutral coding interface compatible with all
4768major web browsers.")
4769 (license license:asl2.0)))
255a2062
EF
4770
4771(define-public python-rapidjson
4772 (package
4773 (name "python-rapidjson")
4774 (version "0.9.1")
4775 (source
4776 (origin
4777 (method url-fetch)
4778 (uri (pypi-uri "python-rapidjson" version))
4779 (sha256
4780 (base32
4781 "18cl2dhx3gds5vg52jxmh9wjlbiy8dx06c3n482rfpdi9dzbv05d"))
4782 (modules '((guix build utils)))
4783 (snippet
4784 '(begin (delete-file-recursively "rapidjson") #t))))
4785 (build-system python-build-system)
4786 (arguments
4787 `(#:configure-flags
4788 (list (string-append "--rj-include-dir="
4789 (assoc-ref %build-inputs "rapidjson")
4790 "/include/rapidjson"))
4791 #:phases
4792 (modify-phases %standard-phases
4793 (replace 'build
4794 (lambda* (#:key inputs #:allow-other-keys)
4795 (invoke "python" "setup.py" "build"
4796 (string-append "--rj-include-dir="
4797 (assoc-ref %build-inputs "rapidjson")
4798 "/include/rapidjson"))))
4799 (replace 'check
4800 (lambda* (#:key inputs outputs #:allow-other-keys)
4801 (add-installed-pythonpath inputs outputs)
4802 ;; Some tests are broken.
4803 (delete-file "tests/test_base_types.py")
4804 (delete-file "tests/test_validator.py")
4805 (invoke "python" "-m" "pytest" "tests"))))))
4806 (native-inputs
4807 `(("rapidjson" ,rapidjson)
4808 ("python-pytest" ,python-pytest)
4809 ("python-pytz" ,python-pytz)))
4810 (home-page "https://github.com/python-rapidjson/python-rapidjson")
4811 (synopsis "Python wrapper around rapidjson")
4812 (description "This package provides a python wrapper around rapidjson.")
4813 (license license:expat)))
44935b2e
HP
4814
4815(define-public python-venusian
4816 (package
4817 (name "python-venusian")
4818 (version "3.0.0")
4819 (source
4820 (origin
4821 (method url-fetch)
4822 (uri (pypi-uri "venusian" version))
4823 (sha256
4824 (base32 "0f7f67dkgxxcjfhpdd5frb9pszkf04lyzzpn5069q0xi89r2p17n"))))
4825 (build-system python-build-system)
4826 (native-inputs
4827 `(("python-pytest" ,python-pytest)
4828 ("python-runner" ,python-pytest-runner)
4829 ("python-pytest-cov" ,python-pytest-cov)))
4830 (arguments '(#:test-target "pytest"))
4831 (home-page "https://docs.pylonsproject.org/projects/venusian")
7230f6d5 4832 (synopsis "Library for deferring decorator actions")
44935b2e
HP
4833 (description
4834 "Venusian is a library which allows framework authors to defer decorator
4835actions. Instead of taking actions when a function (or class) decorator is
4836executed at import time, you can defer the action usually taken by the
4837decorator until a separate scan phase.")
4838 (license license:repoze)))
a9daf35c
HP
4839
4840(define-public python-zope-deprecation
4841 (package
4842 (name "python-zope-deprecation")
4843 (version "4.4.0")
4844 (source (origin
4845 (method url-fetch)
4846 (uri (pypi-uri "zope.deprecation" version))
4847 (sha256
4848 (base32
4849 "1pz2cv7gv9y1r3m0bdv7ks1alagmrn5msm5spwdzkb2by0w36i8d"))))
4850 (build-system python-build-system)
4851 (native-inputs `())
4852 (propagated-inputs `())
4853 (home-page "https://zopedeprecation.readthedocs.io/")
4854 (synopsis "Function for marking deprecations")
4855 (description "The @code{zope.deprecation} module provides a function for
4856marking modules, classes, functions, methods and properties as deprecated,
4857displaying warnings when usaged in application code.")
4858 (license license:zpl2.1)))
c557ae13
HP
4859
4860(define-public python-translationstring
4861 (package
4862 (name "python-translationstring")
4863 (version "1.3")
4864 (source (origin
4865 (method url-fetch)
4866 (uri (pypi-uri "translationstring" version))
4867 (sha256
4868 (base32
4869 "0bdpcnd9pv0131dl08h4zbcwmgc45lyvq3pa224xwan5b3x4rr2f"))))
4870 (build-system python-build-system)
4871 (home-page "http://docs.pylonsproject.org/projects/translationstring")
4872 (synopsis "Internationalization tooling for the Pylons project")
4873 (description "This package provides a library used by various Pylons
4874project packages for internationalization (i18n) duties related to
4875translation.")
4876 (license license:repoze)))
79ddf25b
HP
4877
4878(define-public python-plaster
4879 (package
4880 (name "python-plaster")
4881 (version "1.0")
4882 (source (origin
4883 (method url-fetch)
4884 (uri (pypi-uri "plaster" version))
4885 (sha256
4886 (base32
4887 "1hy8k0nv2mxq94y5aysk6hjk9ryb4bsd13g83m60hcyzxz3wflc3"))))
4888 (build-system python-build-system)
4889 (native-inputs
4890 `(("python-pytest" ,python-pytest)))
4891 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
4892 (synopsis "Configuration loader for multiple config file formats")
4893 (description
4894 "Plaster is a loader interface around multiple config file formats. It
4895exists to define a common API for applications to use when they wish to load
4896configuration. The library itself does not aim to handle anything except a
4897basic API that applications may use to find and load configuration settings.
4898Any specific constraints should be implemented in a pluggable loader which can
4899be registered via an entrypoint.")
4900 (license license:repoze)))
804b7722
HP
4901
4902(define-public python-plaster-pastedeploy
4903 (package
4904 (name "python-plaster-pastedeploy")
4905 (version "0.7")
4906 (source (origin
4907 (method url-fetch)
4908 (uri (pypi-uri "plaster_pastedeploy" version))
4909 (sha256
4910 (base32
4911 "1zg7gcsvc1kzay1ry5p699rg2qavfsxqwl17mqxzr0gzw6j9679r"))))
4912 (build-system python-build-system)
4913 (native-inputs
4914 `(("python-pytest" ,python-pytest)))
4915 (propagated-inputs
4916 `(("python-plaster" ,python-plaster)
4917 ("python-pastedeploy" ,python-pastedeploy)))
4918 (home-page "https://github.com/Pylons/plaster_pastedeploy")
4919 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
4920 (description
4921 "This plugin for @code{python-plaster} adds support for PasteDeploy
4922syntax, it provides a plaster @code{Loader} object that can parse ini files
4923according to the standard set by PasteDeploy ")
4924 (license license:expat)))
8bfc0512
HP
4925
4926(define-public python-hupper
4927 (package
4928 (name "python-hupper")
4929 (version "1.10.2")
4930 (source (origin
4931 (method url-fetch)
4932 (uri (pypi-uri "hupper" version))
4933 (sha256
4934 (base32
4935 "0am0p6g5cz6xmcaf04xq8q6dzdd9qz0phj6gcmpsckf2mcyza61q"))))
4936 (build-system python-build-system)
4937 (arguments '(#:test-target "pytest"))
4938 (native-inputs
4939 `(("python-pytest" ,python-pytest)
4940 ("python-pytest-runner" ,python-pytest-runner)
4941 ("python-watchdog" ,python-watchdog)
4942 ("python-mock" ,python-mock)
4943 ("python-pytest-cov" ,python-pytest-cov)))
4944 (propagated-inputs
4945 `(("python-pytz" ,python-pytz)))
4946 (home-page "https://readthedocs.org/projects/hupper")
4947 (synopsis "Integrated process monitor tracking changes to imported Python files")
4948 (description
4949 "Hupper is an integrated process monitor that will track changes to any
4950imported Python files in sys.modules as well as custom paths. When files are
4951changed the process is restarted.")
4952 (license license:expat)))
90f44ee4
HP
4953
4954(define-public python-pyramid
4955 (package
4956 (name "python-pyramid")
4957 (version "1.10.4")
4958 (source (origin
4959 (method url-fetch)
4960 (uri (pypi-uri "pyramid" version))
4961 (sha256
4962 (base32
4963 "0rkxs1ajycg2zh1c94xlmls56mx5m161sn8112skj0amza6cn36q"))))
4964 (build-system python-build-system)
4965 (propagated-inputs
4966 `(("python-hupper" ,python-hupper)
4967 ("python-plaster-pastedeploy" ,python-plaster-pastedeploy)
4968 ("python-translationstring" ,python-translationstring)
4969 ("python-venusian" ,python-venusian)
4970 ("python-webob" ,python-webob)
4971 ("python-zope-deprecation" ,python-zope-deprecation)
4972 ("python-zope-interface" ,python-zope-interface)
4973 ("python-webtest" ,python-webtest)
4974 ("python-zope-component" ,python-zope-component)
4975 ("python-plaster" ,python-plaster)))
4976 (home-page "https://trypyramid.com/")
4977 (synopsis "Python web-framework suitable for small and large sites")
4978 (description
4979 "Pyramid makes it easy to write web applications. From minimal
4980request/response web apps to larger, grown applications.")
4981 (license license:repoze)))
1e3cf9de
EK
4982
4983(define-public python-random-user-agent
4984 (package
4985 (name "python-random-user-agent")
4986 (version "1.0.1")
4987 (source
4988 (origin
4989 (method url-fetch)
4990 (uri (pypi-uri "random_user_agent" version))
4991 (sha256
4992 (base32
4993 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
4994 (build-system python-build-system)
4995 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
4996 (synopsis "List of user agents")
4997 (description
4998 "This package provides a list of user agents, from a collection of more
4999than 326,000 known user-agents. Users can pick a random one, or select one
5000based on filters.")
5001 (license license:expat)))
24297a9a
EK
5002
5003(define-public python-flask-restx
5004 (package
5005 (name "python-flask-restx")
5006 (version "0.2.0")
5007 (source
5008 ;; We fetch from the Git repo because there are no tests in the PyPI
5009 ;; archive.
5010 (origin
5011 (method git-fetch)
5012 (uri (git-reference
5013 (url "https://github.com/python-restx/flask-restx")
5014 (commit version)))
5015 (file-name (git-file-name name version))
5016 (sha256
5017 (base32 "0xf2vkmdngp9cv9klznizai4byxjcf0iqh1pr4b83nann0jxqwy7"))))
5018 (build-system python-build-system)
5019 (propagated-inputs
5020 `(("python-aniso8601" ,python-aniso8601)
5021 ("python-flask" ,python-flask)
5022 ("python-jsonschema" ,python-jsonschema)
5023 ("python-pytz" ,python-pytz)))
5024 (native-inputs
5025 `(("python-blinker" ,python-blinker)
5026 ("python-faker" ,python-faker)
5027 ("python-pytest" ,python-pytest)
5028 ("python-pytest-benchmark"
5029 ,python-pytest-benchmark)
5030 ("python-pytest-flask" ,python-pytest-flask)
5031 ("python-pytest-mock" ,python-pytest-mock)))
5032 (arguments
5033 `(#:phases
5034 (modify-phases %standard-phases
5035 (replace 'check
5036 (lambda _
5037 (invoke "pytest" "--benchmark-skip" "-k"
5038 ;; Those tests need internet access
5039 "not test_check and not test_valid_value_check"))))))
5040 (home-page "https://github.com/python-restx/flask-restx")
5041 (synopsis
5042 "Framework for fast, easy and documented API development with Flask")
5043 (description
5044 "Flask-RESTX is an extension for Flask that adds support for quickly building
5045REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
5046 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
5047decorators and tools to describe your API and expose its documentation properly using
5048Swagger.")
5049 (license license:bsd-3)))
b5635267
EF
5050
5051(define-public python-manuel
5052 (package
5053 (name "python-manuel")
5054 (version "1.10.1")
5055 (source
5056 (origin
5057 (method url-fetch)
5058 (uri (pypi-uri "manuel" version))
5059 (sha256
5060 (base32
5061 "1bdzay7j70fly5fy6wbdi8fbrxjrrlxnxnw226rwry1c8a351rpy"))))
5062 (build-system python-build-system)
5063 (propagated-inputs
5064 `(("python-six" ,python-six)))
5065 (native-inputs
5066 `(("python-zope-testing" ,python-zope-testing)))
5067 (home-page "https://pypi.org/project/manuel/")
5068 (synopsis "Build tested documentation")
5069 (description
5070 "Manuel lets you mix and match traditional doctests with custom test syntax.")
5071 (license license:asl2.0)))
54b040a3
EF
5072
5073(define-public python-persistent
5074 (package
5075 (name "python-persistent")
5076 (version "4.6.4")
5077 (source
5078 (origin
5079 (method url-fetch)
5080 (uri (pypi-uri "persistent" version))
5081 (sha256
5082 (base32
5083 "0imm9ji03lhkpcfmhid7x5209ix8g2rlgki9ik1qxks4b8sm8gzq"))))
5084 (build-system python-build-system)
5085 (propagated-inputs
5086 `(("python-cffi" ,python-cffi)
5087 ("python-zope-interface" ,python-zope-interface)))
5088 (native-inputs
5089 `(("python-manuel" ,python-manuel)
5090 ("python-zope-testrunner" ,python-zope-testrunner)))
5091 (home-page "https://github.com/zopefoundation/persistent/")
5092 (synopsis "Translucent persistent objects")
5093 (description "This package contains a generic persistence implementation for
5094Python. It forms the core protocol for making objects interact
5095\"transparently\" with a database such as the ZODB.")
5096 (license license:zpl2.1)))
79c36951
EF
5097
5098(define-public python-btrees
5099 (package
5100 (name "python-btrees")
5101 (version "4.7.2")
5102 (source
5103 (origin
5104 (method url-fetch)
5105 (uri (pypi-uri "BTrees" version))
5106 (sha256
5107 (base32
5108 "0iiq0g9k1g6qgqq84q9h6639vlvzznk1rgdm0rfcnnqkbkmsbr3w"))))
5109 (build-system python-build-system)
5110 (propagated-inputs
5111 `(("python-persistent" ,python-persistent)
5112 ("python-zope-interface" ,python-zope-interface)))
5113 (native-inputs
5114 `(("python-persistent" ,python-persistent)
5115 ("python-transaction" ,python-transaction)
5116 ("python-zope-testrunner" ,python-zope-testrunner)))
5117 (home-page "https://github.com/zopefoundation/BTrees")
5118 (synopsis "Scalable persistent object containers")
5119 (description
5120 "This package contains a set of persistent object containers built around a
5121modified BTree data structure. The trees are optimized for use inside ZODB's
5122\"optimistic concurrency\" paradigm, and include explicit resolution of
5123conflicts detected by that mechanism.")
5124 (license license:zpl2.1)))
7d55bc5e
EF
5125
5126(define-public python-transaction
5127 (package
5128 (name "python-transaction")
5129 (version "3.0.0")
5130 (source
5131 (origin
5132 (method url-fetch)
5133 (uri (pypi-uri "transaction" version))
5134 (sha256
5135 (base32
5136 "0bdaks31bgfh78wnj3sij24bfysmqk25crsis6amz8kzrc0d82iv"))))
5137 (build-system python-build-system)
5138 (propagated-inputs
5139 `(("python-zope-interface" ,python-zope-interface)))
5140 (native-inputs
5141 `(("python-coverage" ,python-coverage)
5142 ("python-mock" ,python-mock)
5143 ("python-nose" ,python-nose)))
5144 (home-page "https://github.com/zopefoundation/transaction")
5145 (synopsis "Transaction management for Python")
5146 (description "This package contains a generic transaction implementation
5147for Python. It is mainly used by the ZODB.")
5148 (license license:zpl2.1)))
97a01170
EF
5149
5150(define-public python-robot-detection
5151 (package
5152 (name "python-robot-detection")
5153 (version "0.4")
5154 (source
5155 (origin
5156 (method url-fetch)
5157 (uri (pypi-uri "robot-detection" version))
5158 (sha256
5159 (base32
5160 "1xd2jm3yn31bnk1kqzggils2rxj26ylxsfz3ap7bhr3ilhnbg3rx"))))
5161 (build-system python-build-system)
5162 (arguments '(#:tests? #f)) ; Tests not shipped in pypi release.
5163 (propagated-inputs `(("python-six" ,python-six)))
5164 (home-page "https://github.com/rory/robot-detection")
5165 (synopsis "Detect web crawlers")
5166 (description
5167 "@code{robot_detection} is a python module to detect if a given HTTP User
5168Agent is a web crawler. It uses the list of registered robots from
5169@url{http://www.robotstxt.org}.")
5170 (license license:gpl3+)))
88b2c1aa
EF
5171
5172(define-public python-pysolr
5173 (package
5174 (name "python-pysolr")
5175 (version "3.9.0")
5176 (source
5177 (origin
5178 (method url-fetch)
5179 (uri (pypi-uri "pysolr" version))
5180 (sha256
5181 (base32
5182 "1rj5jmscvxjwcmlfi6hmkj44l4x6n3ln5p7d8d18j566hzmmzw3f"))))
5183 (build-system python-build-system)
5184 (arguments
5185 '(#:tests? #f)) ; Tests require network access.
5186 (propagated-inputs
5187 `(("python-requests" ,python-requests)))
5188 (native-inputs
5189 `(("python-setuptools-scm" ,python-setuptools-scm)))
5190 (home-page "https://github.com/django-haystack/pysolr/")
5191 (synopsis "Lightweight python wrapper for Apache Solr")
5192 (description
5193 "This module provides an interface that queries the Apache Solr server
5194using a pure Python implementation.")
5195 (license license:bsd-3)))
ab8c707d
EF
5196
5197(define-public python-http-ece
5198 (package
5199 (name "python-http-ece")
5200 (version "1.1.0")
5201 (source
5202 (origin
5203 (method git-fetch)
5204 (uri (git-reference
5205 (url "https://github.com/web-push-libs/encrypted-content-encoding")
5206 (commit (string-append "v" version))))
5207 (file-name (git-file-name name version))
5208 (sha256
5209 (base32
5210 "0bp4cc0xc123i72h80ax3qz3ixfwx3j7pw343kc7i6kdvfi8klx7"))))
5211 (build-system python-build-system)
5212 (arguments
5213 `(#:phases
5214 (modify-phases %standard-phases
5215 (add-after 'unpack 'change-directory
5216 (lambda _ (chdir "python") #t)))))
5217 (propagated-inputs
5218 `(("python-cryptography" ,python-cryptography)))
5219 (native-inputs
5220 `(("python-coverage" ,python-coverage)
5221 ("python-flake8" ,python-flake8)
5222 ("python-mock" ,python-mock)
5223 ("python-nose" ,python-nose)))
5224 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
5225 (synopsis "Encrypted Content Encoding for HTTP")
5226 (description
5227 "This package provices a simple implementation of Encrypted Content
5228Encoding for HTTP.")
5229 (license license:expat)))
23c68bd9
LP
5230
5231(define-public python-cloudscraper
5232 (package
5233 (name "python-cloudscraper")
8c39cfd0 5234 (version "1.2.48")
23c68bd9
LP
5235 (source
5236 (origin
5237 (method url-fetch)
5238 (uri (pypi-uri "cloudscraper" version))
5239 (sha256
8c39cfd0 5240 (base32 "0qjxzb0z5bprvmdhx42ayqhlhi2h49d9dwc0vvycj817s71f2sxv"))
23c68bd9
LP
5241 (modules '((guix build utils)))
5242 (snippet
5243 '(with-directory-excursion "cloudscraper"
5244 (for-each delete-file
5245 '("captcha/2captcha.py"
5246 "captcha/9kw.py"
5247 "captcha/anticaptcha.py"
5248 "captcha/deathbycaptcha.py"
5249 "interpreters/js2py.py"
5250 "interpreters/v8.py"))
73b30573
TGR
5251 (substitute* "__init__.py"
5252 ;; Perhaps it's a joke, but don't promote proprietary software.
5253 (("([Th]is feature is not available) in the .*'" _ prefix)
5254 (string-append prefix ".'")))
23c68bd9
LP
5255 #t))))
5256 (build-system python-build-system)
5257 (propagated-inputs
5258 `(("python-requests" ,python-requests)
5259 ("python-requests-toolbelt" ,python-requests-toolbelt-0.9.1)
5260 ("python-pyparsing" ,python-pyparsing-2.4.7)))
5261 (native-inputs
5262 `(("python-pytest" ,python-pytest)))
5263 (home-page "https://github.com/venomous/cloudscraper")
5264 (synopsis "Cloudflare anti-bot bypass")
5265 (description
5266 "This module acts as a webbrowser solving Cloudflare's Javascript
5267challenges.")
5268 (license license:expat)))
52c86fe8
RAM
5269
5270(define-public python-imap-tools
5271 (package
5272 (name "python-imap-tools")
e220b778 5273 (version "0.29.0")
52c86fe8
RAM
5274 (source
5275 (origin
5276 (method url-fetch)
5277 (uri (pypi-uri "imap_tools" version))
5278 (sha256
5279 (base32
e220b778 5280 "0x122jwpc74wwyw2rsv2fvh6p12y31019ndfr9717jzjkj2d3lhb"))))
52c86fe8
RAM
5281 (build-system python-build-system)
5282 (arguments '(#:tests? #f)) ; tests require internet access
5283 (home-page "https://github.com/ikvk/imap_tools")
5284 (synopsis "Work with email and mailbox by IMAP")
5285 (description
5286 "This Python library provides tools to deal with email and mailboxes
5287over IMAP:
5288
5289@itemize
5290@item Parsed email message attributes
5291@item Query builder for searching emails
5292@item Work with emails in folders (copy, delete, flag, move, seen)
5293@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
5294@end itemize")
5295 (license license:asl2.0)))