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