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