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