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