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