gnu: Add python-priority.
[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
1b2f753d
LC
1062(define-public python-tornado
1063 (package
1064 (name "python-tornado")
3fcaf42a 1065 (version "5.1.1")
1b2f753d
LC
1066 (source
1067 (origin
1068 (method url-fetch)
1069 (uri (pypi-uri "tornado" version))
1070 (sha256
3fcaf42a
EF
1071 (base32
1072 "02clqk2116jbnq8lnaqmdw3p52nqrd9ib59r4xz2ll43fpcmhlaf"))))
1b2f753d
LC
1073 (build-system python-build-system)
1074 (arguments
1075 '(;; FIXME: Two tests error out with:
1076 ;; AssertionError: b'Error in atexit._run_exitfuncs:\nFileNotF[44 chars]ry\n' != b''
1077 ;; #:phases
1078 ;; (modify-phases %standard-phases
1079 ;; (replace 'check
1080 ;; (lambda _
1081 ;; ;; 'setup.py test' hits an AssertionError on BSD-specific
1082 ;; ;; "tornado/platform/kqueue.py". This is the supported method:
3fcaf42a 1083 ;; (invoke "python" "-m" "tornado.test.runtests")
12adfdf0 1084 ;; #t)))
1b2f753d
LC
1085 #:tests? #f))
1086 (native-inputs
1087 `(("python-certifi" ,python-certifi)))
3fcaf42a 1088 (home-page "https://www.tornadoweb.org/")
1b2f753d
LC
1089 (synopsis "Python web framework and asynchronous networking library")
1090 (description
1091 "Tornado is a Python web framework and asynchronous networking library,
1092originally developed at FriendFeed. By using non-blocking network I/O,
1093Tornado can scale to tens of thousands of open connections, making it ideal
1094for long polling, WebSockets, and other applications that require a long-lived
1095connection to each user.")
1096 (license license:asl2.0)
1097 (properties `((python2-variant . ,(delay python2-tornado))))))
1098
73950470
RW
1099(define-public python-tornado-6
1100 (package
1101 (name "python-tornado")
1102 (version "6.0.4")
1103 (source
1104 (origin
1105 (method url-fetch)
1106 (uri (pypi-uri "tornado" version))
1107 (sha256
1108 (base32
1109 "1p5n7sw4580pkybywg93p8ddqdj9lhhy72rzswfa801vlidx9qhg"))))
1110 (build-system python-build-system)
1111 (arguments
1112 '(#:phases
1113 (modify-phases %standard-phases
1114 (replace 'check
1115 (lambda _
1116 (invoke "python" "-m" "tornado.test.runtests")
1117 #t)))))
1118 (native-inputs
1119 `(("python-certifi" ,python-certifi)))
1120 (home-page "https://www.tornadoweb.org/")
1121 (synopsis "Python web framework and asynchronous networking library")
1122 (description
1123 "Tornado is a Python web framework and asynchronous networking library,
1124originally developed at FriendFeed. By using non-blocking network I/O,
1125Tornado can scale to tens of thousands of open connections, making it ideal
1126for long polling, WebSockets, and other applications that require a long-lived
1127connection to each user.")
1128 (license license:asl2.0)))
1129
1b2f753d
LC
1130(define-public python2-tornado
1131 (let ((tornado (package-with-python2 (strip-python2-variant python-tornado))))
1132 (package (inherit tornado)
1133 (propagated-inputs
1134 `(("python2-backport-ssl-match-hostname"
1135 ,python2-backport-ssl-match-hostname)
3fcaf42a 1136 ("python2-backports-abc" ,python2-backports-abc)
1b2f753d
LC
1137 ("python2-singledispatch" ,python2-singledispatch)
1138 ,@(package-propagated-inputs tornado))))))
1139
1140(define-public python-tornado-http-auth
1141 (package
1142 (name "python-tornado-http-auth")
5051ef95 1143 (version "1.1.1")
1b2f753d
LC
1144 (source
1145 (origin
1146 (method url-fetch)
1147 (uri (pypi-uri "tornado-http-auth" version))
1148 (sha256
5051ef95 1149 (base32 "0hyc5f0a09i5yb99pk4bxpg6w9ichbrb5cv7hc9hff7rxd8w0v0x"))))
1b2f753d
LC
1150 (build-system python-build-system)
1151 (propagated-inputs
1152 `(("python-tornado" ,python-tornado)))
5051ef95
TGR
1153 (home-page "https://github.com/gvalkov/tornado-http-auth")
1154 (synopsis "Digest and basic authentication module for Tornado")
1b2f753d
LC
1155 (description
1156 "Provides support for adding authentication to services using the Tornado
1157web framework, either via the basic or digest authentication schemes.")
1158 (license license:asl2.0)))
1159
1160(define-public python-terminado
1161 (package
1162 (name "python-terminado")
d47b21c6 1163 (version "0.8.1")
1b2f753d
LC
1164 (source
1165 (origin
1166 (method url-fetch)
1167 (uri (pypi-uri "terminado" version))
1168 (sha256
1169 (base32
d47b21c6 1170 "0yh69k6579g848rmjyllb5h75pkvgcy27r1l3yzgkf33wnnzkasm"))))
1b2f753d
LC
1171 (build-system python-build-system)
1172 (propagated-inputs
1173 `(("python-tornado" ,python-tornado)
1174 ("python-ptyprocess" ,python-ptyprocess)))
1175 (native-inputs
1176 `(("python-nose" ,python-nose)))
1177 (arguments
1178 `(#:phases
1179 (modify-phases %standard-phases
1180 (replace 'check
d47b21c6 1181 (lambda _ (invoke "nosetests") #t)))))
1b2f753d
LC
1182 (home-page "https://github.com/takluyver/terminado")
1183 (synopsis "Terminals served to term.js using Tornado websockets")
1184 (description "This package provides a Tornado websocket backend for the
1185term.js Javascript terminal emulator library.")
1186 (license license:bsd-2)
1187 (properties `((python2-variant . ,(delay python2-terminado))))))
1188
1189(define-public python2-terminado
1190 (let ((terminado (package-with-python2 (strip-python2-variant python-terminado))))
1191 (package (inherit terminado)
1192 (propagated-inputs
1193 `(("python2-backport-ssl-match-hostname"
1194 ,python2-backport-ssl-match-hostname)
94249db8 1195 ("python2-futures" ,python2-futures)
1b2f753d
LC
1196 ,@(package-propagated-inputs terminado))))))
1197
589e3f4e
LC
1198(define-public python-wsgi-intercept
1199 (package
1200 (name "python-wsgi-intercept")
1201 (version "1.2.2")
1202 (source (origin
1203 (method url-fetch)
2b221866 1204 (uri (pypi-uri "wsgi_intercept" version))
589e3f4e
LC
1205 (sha256
1206 (base32
1207 "0kjj2v2dvmnpdd5h5gk9rzz0f54rhjb0yiz3zg65bmp65slfw65d"))))
1208 (build-system python-build-system)
1209 (propagated-inputs
1210 `(("python-six" ,python-six)))
1211 (native-inputs
1212 `(("python-pytest" ,python-pytest)
1213 ("python-httplib2" ,python-httplib2)
1214 ("python-requests" ,python-requests)
1215 ("python-urllib3" ,python-urllib3)))
1216 (synopsis "Puts a WSGI application in place of a real URI for testing")
1217 (description "Wsgi_intercept installs a WSGI application in place of a real
1218URI for testing. Testing a WSGI application normally involves starting a
1219server at a local host and port, then pointing your test code to that address.
1220Instead, this library lets you intercept calls to any specific host/port
1221combination and redirect them into a WSGI application importable by your test
1222program. Thus, you can avoid spawning multiple processes or threads to test
1223your Web app.")
1224 (home-page "https://github.com/cdent/wsgi-intercept")
1225 (license license:expat)))
1226
1b2f753d
LC
1227(define-public python-webob
1228 (package
1229 (name "python-webob")
712190ed 1230 (version "1.8.6")
1b2f753d
LC
1231 (source
1232 (origin
1233 (method url-fetch)
1234 (uri (pypi-uri "WebOb" version))
1235 (sha256
1236 (base32
712190ed 1237 "026i3z99nr3px75isa9mbnky5i7rffiv4d124h5kxfjjsxz92fma"))))
1b2f753d
LC
1238 (build-system python-build-system)
1239 (native-inputs
1240 `(("python-nose" ,python-nose)))
9be5ecdf 1241 (home-page "https://webob.org/")
1b2f753d
LC
1242 (synopsis "WSGI request and response object")
1243 (description
1244 "WebOb provides wrappers around the WSGI request environment, and an
1245object to help create WSGI responses.")
1246 (license license:expat)))
1247
1248(define-public python2-webob
1249 (package-with-python2 python-webob))
1250
1251(define-public python-zope-event
1252 (package
1253 (name "python-zope-event")
7b43d3a7 1254 (version "4.4")
1b2f753d
LC
1255 (source
1256 (origin
1257 (method url-fetch)
da501c49 1258 (uri (pypi-uri "zope.event" version))
1b2f753d
LC
1259 (sha256
1260 (base32
7b43d3a7 1261 "1ksbc726av9xacml6jhcfyn828hlhb9xlddpx6fcvnlvmpmpvhk9"))))
1b2f753d 1262 (build-system python-build-system)
e85af137 1263 (home-page "https://pypi.org/project/zope.event/")
1b2f753d
LC
1264 (synopsis "Event publishing system for Python")
1265 (description "Zope.event provides an event publishing API, intended for
1266use by applications which are unaware of any subscribers to their events. It
1267is a simple event-dispatching system on which more sophisticated event
1268dispatching systems can be built.")
1269 (license license:zpl2.1)))
1270
1271(define-public python2-zope-event
1272 (package-with-python2 python-zope-event))
1273
1274(define-public python-zope-interface
1275 (package
1276 (name "python-zope-interface")
6de5b0f0 1277 (version "5.1.0")
1b2f753d
LC
1278 (source
1279 (origin
1280 (method url-fetch)
ba93e239 1281 (uri (pypi-uri "zope.interface" version))
1b2f753d
LC
1282 (sha256
1283 (base32
6de5b0f0 1284 "03nrl6b8cb600dnnh46y149awvrm0gxyqgwq5hdw3lvys8mw9r20"))))
1b2f753d 1285 (build-system python-build-system)
6de5b0f0 1286 (arguments '(#:tests? #f)) ; test suite can't find python-zope-testing
1b2f753d 1287 (native-inputs
6de5b0f0
EF
1288 `(("python-coverage" ,python-coverage)
1289 ("python-nose" ,python-nose)
1290 ("python-zope-event" ,python-zope-event)
1291 ("python-zope-testing" ,python-zope-testing)))
1b2f753d
LC
1292 (home-page "https://github.com/zopefoundation/zope.interface")
1293 (synopsis "Python implementation of the \"design by contract\"
1294methodology")
1295 (description "Zope.interface provides an implementation of \"object
1296interfaces\" for Python. Interfaces are a mechanism for labeling objects as
1297conforming to a given API or contract.")
1298 (license license:zpl2.1)))
1299
1300(define-public python2-zope-interface
1301 (package-with-python2 python-zope-interface))
1302
1303(define-public python-zope-exceptions
1304 (package
1305 (name "python-zope-exceptions")
845717bb 1306 (version "4.4")
1b2f753d
LC
1307 (source
1308 (origin
1309 (method url-fetch)
3d010466 1310 (uri (pypi-uri "zope.exceptions" version))
1b2f753d
LC
1311 (sha256
1312 (base32
845717bb 1313 "1nkgfwawswmyc6i0b8g3ymvja4mb507m8yhid8s4rbxq3dmqhwhd"))))
1b2f753d
LC
1314 (build-system python-build-system)
1315 (arguments
6ae5d5da
EF
1316 '(#:phases
1317 (modify-phases %standard-phases
1318 (replace 'check
1319 (lambda _
1320 (invoke "zope-testrunner" "--test-path=src"))))))
1321 (native-inputs
1322 `(("python-zope-testrunner" ,python-zope-testrunner-bootstrap)))
1b2f753d
LC
1323 (propagated-inputs
1324 `(("python-zope-interface" ,python-zope-interface)))
b07e73a2 1325 (home-page "https://pypi.org/project/zope.exceptions/")
1b2f753d
LC
1326 (synopsis "Zope exceptions")
1327 (description "Zope.exceptions provides general-purpose exception types
1328that have uses outside of the Zope framework.")
1329 (license license:zpl2.1)))
1330
7dc36cdc
EF
1331(define-public python-zope-exceptions-bootstrap
1332 (package
1333 (inherit python-zope-exceptions)
1334 (arguments `(#:tests? #f))
1335 (propagated-inputs `())
1336 (native-inputs `())
1337 (properties `((hidden? . #t)))))
1338
1b2f753d
LC
1339(define-public python2-zope-exceptions
1340 (package-with-python2 python-zope-exceptions))
1341
1342(define-public python-zope-testing
1343 (package
1344 (name "python-zope-testing")
16839ec3 1345 (version "4.7")
1b2f753d
LC
1346 (source
1347 (origin
1348 (method url-fetch)
f9a6457d 1349 (uri (pypi-uri "zope.testing" version))
1b2f753d
LC
1350 (sha256
1351 (base32
16839ec3 1352 "1sh3c3i0m8n8fnhqiry0bk3rr356i56ry7calmn57s1pvv8yhsyn"))))
1b2f753d 1353 (build-system python-build-system)
e85af137 1354 (home-page "https://pypi.org/project/zope.testing/")
1b2f753d
LC
1355 (synopsis "Zope testing helpers")
1356 (description "Zope.testing provides a number of testing utilities for HTML
1357forms, HTTP servers, regular expressions, and more.")
1358 (license license:zpl2.1)))
1359
1360(define-public python2-zope-testing
1361 (package-with-python2 python-zope-testing))
1362
1363(define-public python-zope-testrunner
1364 (package
1365 (name "python-zope-testrunner")
3c23ae88 1366 (version "5.2")
1b2f753d
LC
1367 (source
1368 (origin
1369 (method url-fetch)
ddacd13d 1370 (uri (pypi-uri "zope.testrunner" version))
1b2f753d
LC
1371 (sha256
1372 (base32
3c23ae88 1373 "0jyyf1dcz156q95x2y7yw2v420q2xn3cff0c5aci7hmdmcbn0gc7"))))
1b2f753d
LC
1374 (build-system python-build-system)
1375 (arguments
1376 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
1377 (native-inputs
ddacd13d
MB
1378 `(("python-zope-testing" ,python-zope-testing)))
1379 (propagated-inputs
1b2f753d 1380 `(("python-six" ,python-six)
1b2f753d 1381 ("python-zope-exceptions" ,python-zope-exceptions)
ddacd13d 1382 ("python-zope-interface" ,python-zope-interface)))
e85af137 1383 (home-page "https://pypi.org/project/zope.testrunner/")
1b2f753d
LC
1384 (synopsis "Zope testrunner script")
1385 (description "Zope.testrunner provides a script for running Python
1386tests.")
1387 (license license:zpl2.1)))
1388
2f938b63
EF
1389(define-public python-zope-testrunner-bootstrap
1390 (package
1391 (inherit python-zope-testrunner)
1392 (arguments `(#:tests? #f))
1393 (propagated-inputs
1394 `(("python-six" ,python-six)
1395 ("python-zope-exceptions" ,python-zope-exceptions-bootstrap)))
1396 (properties `((hidden? . #t)))))
1397
1b2f753d 1398(define-public python2-zope-testrunner
ddacd13d 1399 (package-with-python2 python-zope-testrunner))
1b2f753d
LC
1400
1401(define-public python-zope-i18nmessageid
1402 (package
1403 (name "python-zope-i18nmessageid")
ce4b7a44 1404 (version "5.0.1")
1b2f753d
LC
1405 (source
1406 (origin
1407 (method url-fetch)
8a84d796 1408 (uri (pypi-uri "zope.i18nmessageid" version))
1b2f753d
LC
1409 (sha256
1410 (base32
ce4b7a44 1411 "0ndhn4w1qgwkfbwf9vm2bgq418z5g0wmfsgl0d9nz62cd0mi8d4m"))))
1b2f753d 1412 (build-system python-build-system)
ce4b7a44
MB
1413 (native-inputs
1414 `(("python-coverage" ,python-coverage)
1415 ("python-zope-testrunner" ,python-zope-testrunner)))
1416 (propagated-inputs
1417 `(("python-six" ,python-six)))
e85af137 1418 (home-page "https://pypi.org/project/zope.i18nmessageid/")
1b2f753d
LC
1419 (synopsis "Message identifiers for internationalization")
1420 (description "Zope.i18nmessageid provides facilities for declaring
1421internationalized messages within program source text.")
1422 (license license:zpl2.1)))
1423
1424(define-public python2-zope-i18nmessageid
1425 (package-with-python2 python-zope-i18nmessageid))
1426
1427(define-public python-zope-schema
1428 (package
1429 (name "python-zope-schema")
9c2e6516 1430 (version "6.0.0")
1b2f753d
LC
1431 (source
1432 (origin
1433 (method url-fetch)
ab9e1740 1434 (uri (pypi-uri "zope.schema" version))
1b2f753d
LC
1435 (sha256
1436 (base32
9c2e6516 1437 "09jg47bxhfg1ahr1jxb5y0cbiszyk1j6fn1r1r7s6svjl3lbryr0"))))
1b2f753d
LC
1438 (build-system python-build-system)
1439 (arguments
9c2e6516
EF
1440 `(#:phases
1441 (modify-phases %standard-phases
1442 (replace 'check
1443 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
1444 (add-installed-pythonpath inputs outputs)
1445 (if tests?
1446 (invoke "zope-testrunner" "--test-path=src")
1447 #t))))))
1b2f753d
LC
1448 (propagated-inputs
1449 `(("python-zope-event" ,python-zope-event)
1b2f753d
LC
1450 ("python-zope-interface" ,python-zope-interface)))
1451 (native-inputs
a1e9c929
MB
1452 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
1453 ("python-zope-testing" ,python-zope-testing)
1454 ("python-zope-testrunner" ,python-zope-testrunner)))
e85af137 1455 (home-page "https://pypi.org/project/zope.schema/")
1b2f753d
LC
1456 (synopsis "Zope data schemas")
1457 (description "Zope.scheme provides extensions to zope.interface for
1458defining data schemas.")
1459 (license license:zpl2.1)))
1460
1461(define-public python2-zope-schema
1462 (package-with-python2 python-zope-schema))
1463
1464(define-public python-zope-configuration
1465 (package
1466 (name "python-zope-configuration")
047c1f24 1467 (version "4.4.0")
1b2f753d
LC
1468 (source (origin
1469 (method url-fetch)
cdf14a67 1470 (uri (pypi-uri "zope.configuration" version))
1b2f753d
LC
1471 (sha256
1472 (base32
047c1f24 1473 "0g6vrl7y27z9cj5xyrww9xlzk4npj55mgmlrcd9d2nj08jn2pw79"))))
1b2f753d 1474 (build-system python-build-system)
2585304c 1475 (native-inputs
047c1f24
EF
1476 `(("python-manuel" ,python-manuel)
1477 ("python-zope-testing" ,python-zope-testing)
2585304c 1478 ("python-zope-testrunner" ,python-zope-testrunner)))
1b2f753d
LC
1479 (propagated-inputs
1480 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
2585304c 1481 ("python-zope-interface" ,python-zope-interface)
1b2f753d 1482 ("python-zope-schema" ,python-zope-schema)))
e85af137 1483 (home-page "https://pypi.org/project/zope.configuration/")
1b2f753d
LC
1484 (synopsis "Zope Configuration Markup Language")
1485 (description "Zope.configuration implements ZCML, the Zope Configuration
1486Markup Language.")
1487 (license license:zpl2.1)))
1488
b25d148f
EF
1489(define-public python-zope-configuration-bootstrap
1490 (package
1491 (inherit python-zope-configuration)
1492 (arguments `(#:tests? #f))
1493 (native-inputs `())
1494 (properties `((hidden? . #t)))))
1495
1b2f753d
LC
1496(define-public python2-zope-configuration
1497 (package-with-python2 python-zope-configuration))
1498
3f795cf8
EF
1499(define-public python-zope-copy
1500 (package
1501 (name "python-zope-copy")
1502 (version "4.2")
1503 (source
1504 (origin
1505 (method url-fetch)
1506 (uri (pypi-uri "zope.copy" version))
1507 (sha256
1508 (base32
1509 "06m75434krl57n6p73c2qj55k5i3fixg887j8ss01ih6zw4rvfs7"))))
1510 (build-system python-build-system)
1511 (arguments
1512 '(#:phases
1513 (modify-phases %standard-phases
1514 (replace 'check
1515 (lambda _
1516 (invoke "zope-testrunner" "--test-path=src" "\\[]"))))))
1517 (propagated-inputs
1518 `(("python-zope-interface" ,python-zope-interface)))
1519 (native-inputs
1520 `(("python-zope-component" ,python-zope-component-bootstrap)
1521 ("python-zope-location" ,python-zope-location-bootstrap)
1522 ("python-zope-testing" ,python-zope-testing)
1523 ("python-zope-testrunner" ,python-zope-testrunner)))
1524 (home-page "https://github.com/zopefoundation/zope.copy")
1525 (synopsis "Pluggable object copying mechanism")
1526 (description
1527 "This package provides a pluggable mechanism for copying persistent objects.")
1528 (license license:zpl2.1)))
1529
1b2f753d
LC
1530(define-public python-zope-proxy
1531 (package
1532 (name "python-zope-proxy")
556eec71 1533 (version "4.3.5")
1b2f753d
LC
1534 (source
1535 (origin
1536 (method url-fetch)
510cacc7 1537 (uri (pypi-uri "zope.proxy" version))
1b2f753d
LC
1538 (sha256
1539 (base32
556eec71 1540 "14h7nyfbl5vpfk0rbviy4ygdfx0yx5kncvg6jpbdb0dhwna0ssm6"))))
1b2f753d 1541 (build-system python-build-system)
a3a7a033 1542 (native-inputs
9085a0c9
EF
1543 `(("python-zope-security" ,python-zope-security-bootstrap)
1544 ("python-zope-testrunner" ,python-zope-testrunner)))
1b2f753d
LC
1545 (propagated-inputs
1546 `(("python-zope-interface" ,python-zope-interface)))
e85af137 1547 (home-page "https://pypi.org/project/zope.proxy/")
1b2f753d
LC
1548 (synopsis "Generic, transparent proxies")
1549 (description "Zope.proxy provides generic, transparent proxies for Python.
1550Proxies are special objects which serve as mostly-transparent wrappers around
1551another object, intervening in the apparent behavior of the wrapped object
1552only when necessary to apply the policy (e.g., access checking, location
1553brokering, etc.) for which the proxy is responsible.")
1554 (license license:zpl2.1)))
1555
f3d446cc
EF
1556(define-public python-zope-proxy-bootstrap
1557 (package
1558 (inherit python-zope-proxy)
1559 (arguments `(#:tests? #f))
1560 (native-inputs `())
1561 (properties `((hidden? . #t)))))
1562
1b2f753d
LC
1563(define-public python2-zope-proxy
1564 (package-with-python2 python-zope-proxy))
1565
404d4915
EF
1566(define-public python-zope-hookable
1567 (package
1568 (name "python-zope-hookable")
1569 (version "5.0.1")
1570 (source
1571 (origin
1572 (method url-fetch)
1573 (uri (pypi-uri "zope.hookable" version))
1574 (sha256
1575 (base32
1576 "0hc82lfr7bk53nvbxvjkibkarngyrzgfk2i6bg8wshl0ly0pdl19"))))
1577 (build-system python-build-system)
1578 (native-inputs
1579 `(("python-coverage" ,python-coverage)
1580 ("python-zope-testing" ,python-zope-testing)))
1581 (home-page "https://github.com/zopefoundation/zope.hookable")
1582 (synopsis "Zope hookable")
1583 (description "This package supports the efficient creation of hookable
1584objects, which are callable objects that are meant to be optionally replaced.
1585The idea is that you create a function that does some default thing and make i
1586hookable. Later, someone can modify what it does by calling its sethook method
1587and changing its implementation. All users of the function, including those
1588that imported it, will see the change.")
1589 (license license:zpl2.1)))
1590
1b2f753d
LC
1591(define-public python-zope-location
1592 (package
1593 (name "python-zope-location")
386d2fd1 1594 (version "4.2")
1b2f753d
LC
1595 (source
1596 (origin
1597 (method url-fetch)
6e6bbc02 1598 (uri (pypi-uri "zope.location" version))
1b2f753d
LC
1599 (sha256
1600 (base32
386d2fd1 1601 "1b40pzl8v00d583d3gsxv1qjdw2dhghlgkbgxl3m07d5r3izj857"))))
1b2f753d
LC
1602 (build-system python-build-system)
1603 (arguments
1604 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
386d2fd1
MB
1605 (native-inputs
1606 `(("python-zope-testrunner" ,python-zope-testrunner)))
1b2f753d 1607 (propagated-inputs
386d2fd1
MB
1608 `(("python-zope-interface" ,python-zope-interface)
1609 ("python-zope-proxy" ,python-zope-proxy)
1b2f753d 1610 ("python-zope-schema" ,python-zope-schema)))
e85af137 1611 (home-page "https://pypi.org/project/zope.location/")
1b2f753d
LC
1612 (synopsis "Zope location library")
1613 (description "Zope.location implements the concept of \"locations\" in
1614Zope3, which are are special objects that have a structural location.")
1615 (license license:zpl2.1)))
1616
50566124
EF
1617(define-public python-zope-location-bootstrap
1618 (package
1619 (inherit python-zope-location)
1620 (arguments `(#:tests? #f))
1621 (native-inputs `())
1622 (properties `((hidden? . #t)))))
1623
1b2f753d
LC
1624(define-public python2-zope-location
1625 (package-with-python2 python-zope-location))
1626
1627(define-public python-zope-security
1628 (package
1629 (name "python-zope-security")
4874cae6 1630 (version "5.1.1")
1b2f753d
LC
1631 (source
1632 (origin
1633 (method url-fetch)
fc283a5e 1634 (uri (pypi-uri "zope.security" version))
1b2f753d
LC
1635 (sha256
1636 (base32
4874cae6 1637 "11lfw67cigscfax9c5j63xcvz2qcj724zx5fcdqyc94am2glim0h"))))
1b2f753d 1638 (build-system python-build-system)
1b2f753d 1639 (propagated-inputs
e26e084f
MB
1640 `(("python-zope-component" ,python-zope-component)
1641 ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
1642 ("python-zope-interface" ,python-zope-interface)
1643 ("python-zope-location" ,python-zope-location)
1b2f753d
LC
1644 ("python-zope-proxy" ,python-zope-proxy)
1645 ("python-zope-schema" ,python-zope-schema)))
1646 (native-inputs
4874cae6
EF
1647 `(("python-btrees" ,python-btrees)
1648 ("python-zope-component" ,python-zope-component-bootstrap)
1649 ("python-zope-configuration" ,python-zope-configuration-bootstrap)
1650 ("python-zope-location" ,python-zope-location-bootstrap)
1651 ("python-zope-testing" ,python-zope-testing)
1652 ("python-zope-testrunner" ,python-zope-testrunner)))
e85af137 1653 (home-page "https://pypi.org/project/zope.security/")
1b2f753d
LC
1654 (synopsis "Zope security framework")
1655 (description "Zope.security provides a generic mechanism to implement
1656security policies on Python objects.")
1657 (license license:zpl2.1)))
1658
e2ba910e
EF
1659(define-public python-zope-security-bootstrap
1660 (package
1661 (inherit python-zope-security)
1662 (arguments `(#:tests? #f))
1663 (propagated-inputs
1664 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
1665 ("python-zope-interface" ,python-zope-interface)
1666 ("python-zope-proxy" ,python-zope-proxy-bootstrap)
1667 ("python-zope-schema" ,python-zope-schema)))
1668 (native-inputs `())
1669 (properties `((hidden? . #t)))))
1670
1b2f753d 1671(define-public python2-zope-security
e26e084f 1672 (package-with-python2 python-zope-security))
1b2f753d
LC
1673
1674(define-public python-zope-component
1675 (package
1676 (name "python-zope-component")
256e8a82 1677 (version "4.6.2")
1b2f753d
LC
1678 (source
1679 (origin
1680 (method url-fetch)
1681 (uri (pypi-uri "zope.component" version))
1682 (sha256
1683 (base32
256e8a82 1684 "14iwp95hh6q5dj4k9h1iw75cbp89bs27nany4dinyglb44c8jqli"))))
1b2f753d
LC
1685 (build-system python-build-system)
1686 (arguments
256e8a82
EF
1687 '(#:phases
1688 (modify-phases %standard-phases
1689 (replace 'check
1690 (lambda* (#:key inputs outputs #:allow-other-keys)
1691 (add-installed-pythonpath inputs outputs)
1692 (invoke "python" "setup.py" "test"))))))
1b2f753d 1693 (native-inputs
256e8a82
EF
1694 `(("python-persistent" ,python-persistent)
1695 ("python-zope-configuration" ,python-zope-configuration-bootstrap)
1b2f753d 1696 ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
256e8a82
EF
1697 ("python-zope-location" ,python-zope-location-bootstrap)
1698 ("python-zope-proxy" ,python-zope-proxy-bootstrap)
1699 ("python-zope-security" ,python-zope-security-bootstrap)
1700 ("python-zope-testing" ,python-zope-testing)
1701 ("python-zope-testrunner" ,python-zope-testrunner)))
1702 (propagated-inputs
1703 `(("python-zope-deferredimport" ,python-zope-deferredimport)
1704 ("python-zope-deprecation" ,python-zope-deprecation)
1705 ("python-zope-event" ,python-zope-event)
1706 ("python-zope-hookable" ,python-zope-hookable)
1707 ("python-zope-interface" ,python-zope-interface)))
1b2f753d
LC
1708 (home-page "https://github.com/zopefoundation/zope.component")
1709 (synopsis "Zope Component Architecture")
1710 (description "Zope.component represents the core of the Zope Component
1711Architecture. Together with the zope.interface package, it provides
1712facilities for defining, registering and looking up components.")
1713 (license license:zpl2.1)))
1714
24ba0d37
EF
1715(define-public python-zope-component-bootstrap
1716 (package
1717 (inherit python-zope-component)
1718 (arguments `(#:tests? #f))
1719 (native-inputs `())
1720 (properties `((hidden? . #t)))))
1721
1b2f753d
LC
1722(define-public python2-zope-component
1723 (package-with-python2 python-zope-component))
1724
2ed6491f
EF
1725(define-public python-zope-deferredimport
1726 (package
1727 (name "python-zope-deferredimport")
1728 (version "4.3.1")
1729 (source
1730 (origin
1731 (method url-fetch)
1732 (uri (pypi-uri "zope.deferredimport" version))
1733 (sha256
1734 (base32
1735 "1q89v54dwniiqypjbwywwdfjdr4kdkqlyqsgrpplgvsygdg39cjp"))))
1736 (build-system python-build-system)
1737 (propagated-inputs
1738 `(("python-zope-proxy" ,python-zope-proxy)))
1739 (native-inputs
1740 `(("python-zope-testrunner" ,python-zope-testrunner)))
1741 (home-page "https://github.com/zopefoundation/zope.deferredimport")
1742 (synopsis "Defer imports until used by code")
1743 (description
1744 "Often, especially for package modules, you want to import names for
1745convenience, but not actually perform the imports until necessary. The
1746@code{zope.deferredimport} package provided facilities for defining names in
1747modules that will be imported from somewhere else when used. You can also cause
1748deprecation warnings to be issued when a variable is used.")
1749 (license license:zpl2.1)))
1750
1b2f753d
LC
1751(define-public python-ndg-httpsclient
1752 (package
1753 (name "python-ndg-httpsclient")
57d5d3da 1754 (version "0.5.1")
1b2f753d
LC
1755 (source (origin
1756 (method url-fetch)
1757 (uri (pypi-uri "ndg_httpsclient" version))
1758 (sha256
1759 (base32
57d5d3da 1760 "0412b7i1s4vj7lz9r72nmb28h9syd4q2x89bdirkkc3a6z8awbyp"))))
1b2f753d
LC
1761 (build-system python-build-system)
1762 (arguments
1763 '(;; The tests appear to require networking.
1764 #:tests? #f))
1765 (propagated-inputs
1766 `(("python-pyopenssl" ,python-pyopenssl)))
1767 (synopsis "HTTPS support for Python's httplib and urllib2")
1768 (description "This is a HTTPS client implementation for httplib and urllib2
eed0f1e8
TGR
1769based on PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation
1770over the default provided with Python and, importantly, enables full
1771verification of the SSL peer.")
1b2f753d
LC
1772 (home-page "https://github.com/cedadev/ndg_httpsclient/")
1773 (license license:bsd-3)))
1774
1775;; python2-openssl requires special care, so package-with-python2 is
1776;; insufficient.
1777(define-public python2-ndg-httpsclient
1778 (package (inherit python-ndg-httpsclient)
1779 (name "python2-ndg-httpsclient")
e3e74e40
TGR
1780 (arguments
1781 (substitute-keyword-arguments (package-arguments python-ndg-httpsclient)
1782 ((#:python _) python-2)))
1b2f753d
LC
1783 (propagated-inputs
1784 `(("python2-pyopenssl" ,python2-pyopenssl)))))
1785
1786(define-public python-websocket-client
1787 (package
1788 (name "python-websocket-client")
354d27e5 1789 (version "0.54.0")
1b2f753d
LC
1790 (source
1791 (origin
1792 (method url-fetch)
1793 (uri (pypi-uri "websocket_client" version))
1794 (sha256
1795 (base32
354d27e5 1796 "0j88zmikaypf38lvpkf4aaxrjp9j07dmy5ghj7kli0fv3p4n45g5"))))
1b2f753d
LC
1797 (build-system python-build-system)
1798 (propagated-inputs
1799 `(("python-six" ,python-six)))
1800 (home-page "https://github.com/liris/websocket-client")
1801 (synopsis "WebSocket client for Python")
1802 (description "The Websocket-client module provides the low level APIs for
1803WebSocket usage in Python programs.")
354d27e5 1804 (properties `((python2-variant . ,(delay python2-websocket-client))))
1b2f753d
LC
1805 (license license:lgpl2.1+)))
1806
1807(define-public python2-websocket-client
354d27e5
EF
1808 (let ((base (package-with-python2
1809 (strip-python2-variant python-websocket-client))))
1810 (package
1811 (inherit base)
1812 (native-inputs
1813 `(("python2-backport-ssl-match-hostname"
1814 ,python2-backport-ssl-match-hostname)
1815 ,@(package-native-inputs base))))))
1b2f753d 1816
589e3f4e
LC
1817(define-public python-requests
1818 (package
1819 (name "python-requests")
45f01bc0 1820 (version "2.23.0")
589e3f4e
LC
1821 (source (origin
1822 (method url-fetch)
1823 (uri (pypi-uri "requests" version))
1824 (sha256
1825 (base32
45f01bc0 1826 "1rhpg0jb08v0gd7f19jjiwlcdnxpmqi1fhvw7r4s9avddi4kvx5k"))))
589e3f4e 1827 (build-system python-build-system)
85ef07c4
MB
1828 (propagated-inputs
1829 `(("python-certifi" ,python-certifi)
1830 ("python-chardet" ,python-chardet)
1831 ("python-idna" ,python-idna)
1832 ("python-urllib3" ,python-urllib3)))
589e3f4e
LC
1833 (arguments
1834 ;; FIXME: Some tests require network access.
1835 '(#:tests? #f))
1836 (home-page "http://python-requests.org/")
1837 (synopsis "Python HTTP library")
1838 (description
1839 "Requests is a Python HTTP client library. It aims to be easier to use
1840than Python’s urllib2 library.")
1841 (license license:asl2.0)))
1842
97f0bd7d
JM
1843;; Some software requires an older version of Requests, notably Docker/Docker
1844;; Compose.
1845(define-public python-requests-2.20
1846 (package (inherit python-requests)
1847 (version "2.20.1")
1848 (source (origin
1849 (method url-fetch)
1850 (uri (pypi-uri "requests" version))
1851 (sha256
1852 (base32
1853 "0qzj6cgv3k9wyj7wlxgz7xq0cfg4jbbkfm24pp8dnhczwl31527a"))))
1854 (propagated-inputs
1855 `(("python-urllib3" ,python-urllib3-1.24)
1856 ("python-idna" ,python-idna-2.7)
1857 ,@(package-propagated-inputs python-requests)))))
1858
589e3f4e
LC
1859;; Some software requires an older version of Requests, notably Docker
1860;; Compose.
1861(define-public python-requests-2.7
1862 (package (inherit python-requests)
1863 (version "2.7.0")
1864 (source (origin
1865 (method url-fetch)
1866 (uri (pypi-uri "requests" version))
1867 (sha256
1868 (base32
1869 "0gdr9dxm24amxpbyqpbh3lbwxc2i42hnqv50sigx568qssv3v2ir"))))))
1870
1871(define-public python2-requests
1872 (package-with-python2 python-requests))
1873
c5963597
AT
1874(define-public python-requests_ntlm
1875 (package
1876 (name "python-requests_ntlm")
1877 (version "1.1.0")
1878 (source
1879 (origin
1880 (method url-fetch)
1881 (uri (pypi-uri "requests_ntlm" version))
1882 (sha256
1883 (base32
1884 "0wgbqzaq9w7bas16b7brdb75f91bh3275fb459093bk1ihpck2ci"))))
1885 (build-system python-build-system)
1886 (propagated-inputs
1887 `(("python-cryptography" ,python-cryptography)
1888 ("python-ntlm-auth" ,python-ntlm-auth)
1889 ("python-requests" ,python-requests)))
1890 (home-page "https://github.com/requests/requests-ntlm")
1891 (synopsis
1892 "NTLM authentication support for Requests")
1893 (description
1894 "This package allows for HTTP NTLM authentication using the requests
1895library.")
1896 (license license:isc)))
1897
1b2f753d
LC
1898(define-public python-requests-mock
1899 (package
1900 (name "python-requests-mock")
1901 (version "1.3.0")
1902 (source
1903 (origin
1904 (method url-fetch)
1905 (uri (pypi-uri "requests-mock" version))
1906 (sha256
1907 (base32
1908 "0jr997dvk6zbmhvbpcv3rajrgag69mcsm1ai3w3rgk2jdh6rg1mx"))))
1909 (build-system python-build-system)
1910 (propagated-inputs
1911 `(("python-requests" ,python-requests)
1912 ("python-six" ,python-six)))
1913 (native-inputs
1914 `(("python-pbr" ,python-pbr)
1915 ("python-discover" ,python-discover)
1916 ("python-docutils" ,python-docutils)
1917 ("python-fixtures" ,python-fixtures)
1918 ("python-mock" ,python-mock)
1919 ("python-sphinx" ,python-sphinx)
1920 ("python-testrepository" ,python-testrepository)
1921 ("python-testtools" ,python-testtools)))
1922 (home-page "https://requests-mock.readthedocs.org/")
1923 (synopsis "Mock out responses from the requests package")
1924 (description
1925 "This module provides a building block to stub out the HTTP requests
1926portions of your testing code.")
1927 (properties `((python2-variant . ,(delay python2-requests-mock))))
1928 (license license:asl2.0)))
1929
1930(define-public python2-requests-mock
1931 (package (inherit (package-with-python2
1932 (strip-python2-variant python-requests-mock)))
1933 (arguments
1934 `(#:python ,python-2
1935 ;; FIXME: 'subunit.run discover: error: no such option: --list'
1936 #:tests? #f))))
1937
1938(define-public python-requests-toolbelt
1939 (package
1940 (name "python-requests-toolbelt")
1941 (version "0.8.0")
1942 (source (origin
1943 (method url-fetch)
1944 (uri (pypi-uri "requests-toolbelt" version))
1945 (sha256
1946 (base32
1947 "1dc7l42i4080r8i4m9fj51jx367lqkai170vrv7wd93gdj9k39gn"))))
1948 (build-system python-build-system)
1949 (native-inputs
1950 `(("python-betamax" ,python-betamax)
1951 ("python-mock" ,python-mock)
1952 ("python-pytest" ,python-pytest)))
1953 (propagated-inputs
1954 `(("python-requests" ,python-requests)))
1955 (synopsis "Extensions to python-requests")
1956 (description "This is a toolbelt of useful classes and functions to be used
1957with python-requests.")
1958 (home-page "https://github.com/sigmavirus24/requests-toolbelt")
1959 (license license:asl2.0)))
1960
1961(define-public python2-requests-toolbelt
1962 (package-with-python2 python-requests-toolbelt))
1963
589e3f4e
LC
1964(define-public python-oauthlib
1965 (package
1966 (name "python-oauthlib")
c8a7cc69 1967 (version "3.0.1")
589e3f4e
LC
1968 (source (origin
1969 (method url-fetch)
1970 (uri (pypi-uri "oauthlib" version))
1971 (sha256
1972 (base32
c8a7cc69 1973 "163jg4a8f7c5ki655grrr47kgljy12wri3qly7ijf64sk1fjrqqc"))))
589e3f4e 1974 (build-system python-build-system)
c8a7cc69
MB
1975 (arguments
1976 `(#:phases (modify-phases %standard-phases
1977 (replace 'check
1978 (lambda _
1979 (invoke "pytest" "-vv"))))))
589e3f4e 1980 (native-inputs
c8a7cc69
MB
1981 `(("python-pytest" ,python-pytest)
1982 ("python-pytest-cov" ,python-pytest-cov)
e7c67f1b
MB
1983 ("python-mock" ,python-mock)))
1984 (propagated-inputs
1985 `(("python-cryptography" ,python-cryptography)
589e3f4e
LC
1986 ("python-pyjwt" ,python-pyjwt)
1987 ("python-blinker" ,python-blinker)))
5f7e3ac0 1988 (home-page "https://github.com/oauthlib/oauthlib")
589e3f4e
LC
1989 (synopsis "OAuth implementation for Python")
1990 (description
1991 "Oauthlib is a generic, spec-compliant, thorough implementation of the
1992OAuth request-signing logic.")
c8a7cc69 1993 (license license:bsd-3)))
589e3f4e
LC
1994
1995(define-public python2-oauthlib
c8a7cc69 1996 (package-with-python2 python-oauthlib))
589e3f4e 1997
1b2f753d
LC
1998(define-public python-rauth
1999 (package
2000 (name "python-rauth")
2001 (version "0.7.3")
2002 (source
2003 (origin
2004 (method url-fetch)
2005 (uri (pypi-uri "rauth" version))
2006 (sha256
2007 (base32
2008 "02kv8w8l98ky223avyq7vw7x1f2ya9chrm59r77ylq45qb0xnk2j"))))
2009 (build-system python-build-system)
2010 (arguments
2011 `(#:test-target "check"))
2012 (propagated-inputs
2013 `(("python-requests" ,python-requests)))
2014 (home-page "https://github.com/litl/rauth")
2015 (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
2016 (description
2017 "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly. It also
2018provides service wrappers for convenient connection initialization and
2019authenticated session objects providing things like keep-alive.")
2020 (license license:expat)
2021 (properties `((python2-variant . ,(delay python2-rauth))))))
2022
2023(define-public python2-rauth
2024 (let ((base (package-with-python2 (strip-python2-variant python-rauth))))
2025 (package
2026 (inherit base)
2027 (native-inputs `(("python2-unittest2" ,python2-unittest2)
2028 ,@(package-native-inputs base))))))
2029
2030(define-public python-urllib3
2031 (package
2032 (name "python-urllib3")
21cbde9f 2033 (version "1.25.9")
1b2f753d
LC
2034 (source
2035 (origin
2036 (method url-fetch)
2037 (uri (pypi-uri "urllib3" version))
2038 (sha256
2039 (base32
21cbde9f 2040 "09rmjqm5syhhc8fx3v06h3yv6cqy0b1081jg8wm5grpwpr72j61h"))))
1b2f753d
LC
2041 (build-system python-build-system)
2042 (arguments `(#:tests? #f))
1b2f753d
LC
2043 (propagated-inputs
2044 `(;; These 5 inputs are used to build urrlib3[secure]
2045 ("python-certifi" ,python-certifi)
20c5e2f4 2046 ("python-cryptography" ,python-cryptography)
1b2f753d
LC
2047 ("python-idna" ,python-idna)
2048 ("python-ipaddress" ,python-ipaddress)
20c5e2f4
EF
2049 ("python-pyopenssl" ,python-pyopenssl)
2050 ("python-pysocks" ,python-pysocks)))
2051 (home-page "https://urllib3.readthedocs.io/")
1b2f753d
LC
2052 (synopsis "HTTP library with thread-safe connection pooling")
2053 (description
2054 "Urllib3 supports features left out of urllib and urllib2 libraries. It
2055can reuse the same socket connection for multiple requests, it can POST files,
2056supports url redirection and retries, and also gzip and deflate decoding.")
2057 (license license:expat)))
2058
7deb0868
JM
2059;; Some software requires an older version of urllib3, notably Docker.
2060(define-public python-urllib3-1.24
2061 (package (inherit python-urllib3)
2062 (version "1.24.3")
2063 (source (origin
2064 (method url-fetch)
2065 (uri (pypi-uri "urllib3" version))
2066 (sha256
2067 (base32
2068 "1x0slqrv6kixkbcdnxbglvjliwhc1payavxjvk8fvbqjrnasd4r3"))))))
2069
2070
1b2f753d
LC
2071(define-public python2-urllib3
2072 (package-with-python2 python-urllib3))
2073
2074(define-public awscli
2075 (package
e524b577
ES
2076 (name "awscli")
2077 (version "1.18.6")
2078 (source
2079 (origin
2080 (method url-fetch)
2081 (uri (pypi-uri name version))
2082 (sha256
2083 (base32
2084 "0p479mfs9r0m82a217pap8156ijwvhv6r3kqa4k267gd05wgvygm"))))
2085 (build-system python-build-system)
2086 (arguments
2087 ;; FIXME: The 'pypi' release does not contain tests.
2088 '(#:tests? #f
2089 #:phases
2090 (modify-phases %standard-phases
2091 (add-after 'unpack 'fix-reference-to-groff
2092 (lambda _
2093 (substitute* "awscli/help.py"
2094 (("if not self._exists_on_path\\('groff'\\):") "")
2095 (("raise ExecutableNotFoundError\\('groff'\\)") "")
2096 (("cmdline = \\['groff'")
2097 (string-append "cmdline = ['" (which "groff") "'")))
2098 #t)))))
2099 (propagated-inputs
2100 `(("python-colorama" ,python-colorama)
2101 ("python-botocore" ,python-botocore)
2102 ("python-s3transfer" ,python-s3transfer)
2103 ("python-docutils" ,python-docutils)
2104 ("python-pyyaml" ,python-pyyaml)
2105 ("python-rsa" ,python-rsa)))
2106 (native-inputs
2107 `(("groff" ,groff)))
2108 (home-page "https://aws.amazon.com/cli/")
2109 (synopsis "Command line client for AWS")
2110 (description "AWS CLI provides a unified command line interface to the
1b2f753d 2111Amazon Web Services (AWS) API.")
e524b577 2112 (license license:asl2.0)))
1b2f753d
LC
2113
2114(define-public python-wsgiproxy2
2115 (package
2116 (name "python-wsgiproxy2")
8fbccd48 2117 (version "0.4.6")
1b2f753d
LC
2118 (source
2119 (origin
2120 (method url-fetch)
e38a8012 2121 (uri (pypi-uri "WSGIProxy2" version ".tar.gz"))
1b2f753d 2122 (sha256
8fbccd48 2123 (base32 "16jch5nic0hia28lps3c678s9s9mjdq8n87igxncjg0rpi5adqnf"))))
1b2f753d 2124 (build-system python-build-system)
1b2f753d 2125 (native-inputs
e38a8012 2126 `(("python-webtest" ,python-webtest)))
1b2f753d 2127 (propagated-inputs
e38a8012
TGR
2128 `(("python-requests" ,python-requests)
2129 ("python-six" ,python-six)
2130 ("python-urllib3" ,python-urllib3)
1b2f753d 2131 ("python-webob" ,python-webob)))
e38a8012 2132 (home-page "https://github.com/gawel/WSGIProxy2/")
1b2f753d
LC
2133 (synopsis "WSGI Proxy with various http client backends")
2134 (description "WSGI turns HTTP requests into WSGI function calls.
2135WSGIProxy turns WSGI function calls into HTTP requests.
2136It also includes code to sign requests and pass private data,
2137and to spawn subprocesses to handle requests.")
2138 (license license:expat)))
2139
2140(define-public python2-wsgiproxy2
2141 (package-with-python2 python-wsgiproxy2))
2142
2143(define-public python-pastedeploy
2144 (package
2145 (name "python-pastedeploy")
82bd276d 2146 (version "2.1.0")
1b2f753d
LC
2147 (source
2148 (origin
2149 (method url-fetch)
2150 (uri (pypi-uri "PasteDeploy" version))
2151 (sha256
82bd276d 2152 (base32 "16qsq5y6mryslmbp5pn35x4z8z3ndp5rpgl42h226879nrw9hmg7"))))
1b2f753d 2153 (build-system python-build-system)
82bd276d
HP
2154 (arguments
2155 '(#:test-target "pytest"))
1b2f753d 2156 (native-inputs
82bd276d
HP
2157 `(("python-pytest" ,python-pytest)
2158 ("python-pytest-runner" ,python-pytest-runner)))
63b06670 2159 (home-page "https://pylonsproject.org/")
1b2f753d
LC
2160 (synopsis
2161 "Load, configure, and compose WSGI applications and servers")
2162 (description
2163 "This tool provides code to load WSGI applications and servers from URIs;
2164these URIs can refer to Python Eggs for INI-style configuration files. Paste
2165Script provides commands to serve applications based on this configuration
2166file.")
2167 (license license:expat)))
2168
2169(define-public python2-pastedeploy
2170 (package-with-python2 python-pastedeploy))
2171
2172(define-public python-webtest
2173 (package
2174 (name "python-webtest")
0596a7af 2175 (version "2.0.33")
1b2f753d
LC
2176 (source
2177 (origin
2178 (method url-fetch)
2179 (uri (pypi-uri "WebTest" version))
2180 (sha256
2181 (base32
0596a7af 2182 "1l3z0cwqslsf4rcrhi2gr8kdfh74wn2dw76376i4g9i38gz8wd21"))))
1b2f753d
LC
2183 (build-system python-build-system)
2184 (arguments
0596a7af
TGR
2185 ;; Tests require python-pyquery, which creates a circular dependency.
2186 `(#:tests? #f))
1b2f753d
LC
2187 (propagated-inputs
2188 `(("python-waitress" ,python-waitress)
2189 ("python-webob" ,python-webob)
2190 ("python-six" ,python-six)
2191 ("python-beautifulsoup4" ,python-beautifulsoup4)))
63b06670 2192 (home-page "https://docs.pylonsproject.org/projects/webtest/")
1b2f753d
LC
2193 (synopsis "Helper to test WSGI applications")
2194 (description "Webtest allows you to test your Python web applications
2195without starting an HTTP server. It supports anything that supports the
2196minimum of WSGI.")
2197 (license license:expat)))
2198
2199(define-public python2-webtest
2200 (package-with-python2 python-webtest))
2201
2202(define-public python-flask
2203 (package
2204 (name "python-flask")
67dbc06d 2205 (version "1.1.2")
1b2f753d
LC
2206 (source (origin
2207 (method url-fetch)
205eb40e 2208 (uri (pypi-uri "Flask" version))
1b2f753d
LC
2209 (sha256
2210 (base32
67dbc06d 2211 "0q3h295izcil7lswkzfnyg3k5gq4hpmqmpl6i7s5m1n9szi1myjf"))))
1b2f753d 2212 (build-system python-build-system)
47403955
EF
2213 (arguments
2214 '(#:phases
2215 (modify-phases %standard-phases
2216 (replace 'check
2217 (lambda _
15af040c
MB
2218 (setenv "PYTHONPATH" (string-append "./build/lib:"
2219 (getenv "PYTHONPATH")))
2220 (invoke "pytest" "-vv" "tests"))))))
47403955
EF
2221 (native-inputs
2222 `(("python-pytest" ,python-pytest)))
1b2f753d
LC
2223 (propagated-inputs
2224 `(("python-itsdangerous" ,python-itsdangerous)
2225 ("python-jinja2" ,python-jinja2)
2226 ("python-click" ,python-click)
2227 ("python-werkzeug" ,python-werkzeug)))
67eda45b 2228 (home-page "https://www.palletsprojects.com/p/flask/")
1b2f753d
LC
2229 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
2230 (description "Flask is a micro web framework based on the Werkzeug toolkit
2231and Jinja2 template engine. It is called a micro framework because it does not
2232presume or force a developer to use a particular tool or library.")
2233 (license license:bsd-3)))
2234
2235(define-public python2-flask
2236 (package-with-python2 python-flask))
2237
2238(define-public python-flask-wtf
2239 (package
2240 (name "python-flask-wtf")
8f29817e 2241 (version "0.14.3")
1b2f753d
LC
2242 (source
2243 (origin
2244 (method url-fetch)
2245 (uri (pypi-uri "Flask-WTF" version))
2246 (sha256
2247 (base32
8f29817e 2248 "086pvg2x69n0nczcq7frknfjd8am1zdy8qqpva1sanwb02hf65yl"))))
1b2f753d
LC
2249 (build-system python-build-system)
2250 (arguments
2251 '(#:phases
2252 (modify-phases %standard-phases
8f29817e 2253 (replace 'check
1b2f753d 2254 (lambda _
8f29817e
MB
2255 (setenv "PYTHONPATH" (string-append "./build/lib:"
2256 (getenv "PYTHONPATH")))
2257 (invoke "pytest" "-vv"))))))
1b2f753d
LC
2258 (propagated-inputs
2259 `(("python-flask-babel" ,python-flask-babel)
2260 ("python-babel" ,python-babel)
2261 ("python-wtforms" ,python-wtforms)))
2262 (native-inputs
8f29817e 2263 `(("python-pytest" ,python-pytest)))
1b2f753d
LC
2264 (home-page "https://github.com/lepture/flask-wtf")
2265 (synopsis "Simple integration of Flask and WTForms")
2266 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
2267upload, and reCAPTCHA.")
2268 (license license:bsd-3)))
2269
2270(define-public python2-flask-wtf
2271 (package-with-python2 python-flask-wtf))
2272
2273(define-public python-flask-multistatic
2274 (package
2275 (name "python-flask-multistatic")
2276 (version "1.0")
2277 (source
2278 (origin
2279 (method url-fetch)
2280 (uri (pypi-uri "flask-multistatic" version))
2281 (sha256
2282 (base32
2283 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
2284 (build-system python-build-system)
2285 (propagated-inputs
2286 `(("python-flask" ,python-flask)))
2287 (home-page "https://pagure.io/flask-multistatic")
2288 (synopsis "Flask plugin to allow overriding static files")
2289 (description "@code{flask-multistatic} is a flask plugin that adds support
2290for overriding static files.")
2291 (license license:gpl3+)))
2292
2293(define-public python2-flask-multistatic
2294 (package-with-python2 python-flask-multistatic))
2295
2296(define-public python-cookies
2297 (package
2298 (name "python-cookies")
2299 (version "2.2.1")
2300 (source (origin
2301 (method url-fetch)
2302 (uri (pypi-uri "cookies" version))
2303 (sha256
2304 (base32
2305 "13pfndz8vbk4p2a44cfbjsypjarkrall71pgc97glk5fiiw9idnn"))))
2306 (build-system python-build-system)
2307 (arguments
2308 `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
2309 #:tests? #f))
2310 (native-inputs
cb18f2bf 2311 `(("python-pytest" ,python-pytest)))
1b2f753d
LC
2312 (synopsis "HTTP cookie parser and renderer")
2313 (description "A RFC 6265-compliant HTTP cookie parser and renderer in
2314Python.")
2315 (home-page "https://gitlab.com/sashahart/cookies")
2316 (license license:expat)))
2317
2318(define-public python2-cookies
2319 (package-with-python2 python-cookies))
2320
2321(define-public python-responses
2322 (package
2323 (name "python-responses")
ef8c83bd 2324 (version "0.10.6")
1b2f753d
LC
2325 (source (origin
2326 (method url-fetch)
2327 (uri (pypi-uri "responses" version))
2328 (sha256
2329 (base32
ef8c83bd 2330 "147pacwkkqy3qf3hr33fnl1xbzgw0zsm3qppvvy9qhq8h069qbah"))))
1b2f753d
LC
2331 (build-system python-build-system)
2332 (arguments
2333 `(;; Test suite is not distributed:
2334 ;; https://github.com/getsentry/responses/issues/38
2335 #:tests? #f))
2336 (native-inputs
2337 `(("python-mock" ,python-mock)))
2338 (propagated-inputs
2339 `(("python-requests" ,python-requests)
2340 ("python-cookies" ,python-cookies)
2341 ("python-six" ,python-six)))
2342 (home-page "https://github.com/getsentry/responses")
2343 (synopsis "Utility for mocking out the `requests` Python library")
2344 (description "A utility library for mocking out the `requests` Python
2345library.")
2346 (license license:asl2.0)))
2347
2348(define-public python2-responses
2349 (package-with-python2 python-responses))
2350
d08b3258
RW
2351(define-public python-grequests
2352 (package
2353 (name "python-grequests")
2354 (version "0.3.0")
2355 (source
2356 (origin
2357 (method url-fetch)
2358 (uri (pypi-uri "grequests" version))
2359 (sha256
2360 (base32
2361 "1j9icncllbkv7x5719b20mx670c6q1jrdx1sakskkarvx3pc8h8g"))))
2362 (build-system python-build-system)
2363 (propagated-inputs
2364 `(("python-gevent" ,python-gevent)
2365 ("python-requests" ,python-requests)))
2366 (native-inputs
054153b2
CLW
2367 `(("python-nose" ,python-nose)
2368 ("python-zope.interface" ,python-zope-interface)
2369 ("python-zope.event" ,python-zope-event)))
d08b3258
RW
2370 (home-page "https://github.com/kennethreitz/grequests")
2371 (synopsis "Python library for asynchronous HTTP requests")
2372 (description "GRequests is a Python library that allows you to use
2373@code{Requests} with @code{Gevent} to make asynchronous HTTP Requests easily")
2374 (license license:bsd-2)))
2375
1b2f753d
LC
2376(define-public python-geventhttpclient
2377 (package
2378 (name "python-geventhttpclient")
2379 (version "1.3.1")
2380 (source (origin
2381 (method url-fetch)
2382 (uri (pypi-uri "geventhttpclient" version))
2383 (sha256
2384 (base32
2385 "07d0q3wzmml75227r6y6mrl5a0zpf4v9gj0ni5rhbyzmaj4az1xx"))
2386 (modules '((guix build utils)))
2387 (snippet
2388 '(begin
2389 ;; Delete pre-compiled files.
2390 (for-each delete-file (find-files "src/geventhttpclient"
2391 ".*\\.pyc"))
2392 #t))))
2393 (build-system python-build-system)
2394 (arguments
2395 '(#:phases
2396 (modify-phases %standard-phases
2397 (add-after 'unpack 'delete-network-tests
2398 (lambda _
2399 (delete-file "src/geventhttpclient/tests/test_client.py")
2400 #t))
6ac6c1d2 2401 (replace 'check
1b2f753d
LC
2402 (lambda* (#:key inputs outputs #:allow-other-keys)
2403 (add-installed-pythonpath inputs outputs)
0e02e819
MB
2404 (invoke "py.test" "src/geventhttpclient/tests" "-v"
2405 ;; Append the test modules to sys.path to avoid
2406 ;; namespace conflict which breaks SSL tests.
6ac6c1d2
MB
2407 "--import-mode=append"
2408 ;; XXX: Disable test fails with Python 3.8:
2409 ;; https://github.com/gwik/geventhttpclient/issues/119
2410 "-k" (string-append "not test_cookielib_compatibility"))
12adfdf0 2411 #t)))))
1b2f753d
LC
2412 (native-inputs
2413 `(("python-pytest" ,python-pytest)))
2414 (propagated-inputs
2415 `(("python-certifi" ,python-certifi)
2416 ("python-gevent" ,python-gevent)
2417 ("python-six" ,python-six)))
2418 (home-page "https://github.com/gwik/geventhttpclient")
2419 (synopsis "HTTP client library for gevent")
2420 (description "@code{python-geventhttpclient} is a high performance,
2421concurrent HTTP client library for python using @code{gevent}.")
2422 (license license:expat)))
2423
2424(define-public python2-geventhttpclient
2425 (package-with-python2 python-geventhttpclient))
2426
2427(define-public python-requests-oauthlib
2428 (package
2429 (name "python-requests-oauthlib")
395c142e 2430 (version "1.2.0")
1b2f753d
LC
2431 (source
2432 (origin
2433 (method url-fetch)
2434 (uri (pypi-uri "requests-oauthlib" version))
2435 (sha256
2436 (base32
395c142e 2437 "0mrglgcvq7k48pf27s4gifdk0za8xmgpf55jy15yjj471qrk6rdx"))))
1b2f753d
LC
2438 (build-system python-build-system)
2439 (arguments
2440 `(#:phases
2441 (modify-phases %standard-phases
2442 ;; removes tests that require network access
2443 (add-before 'check 'pre-check
2444 (lambda _
2445 (delete-file "tests/test_core.py")
2446 #t)))))
2447 (native-inputs
6b4a6c20
JL
2448 `(("python-pyjwt" ,python-pyjwt)
2449 ("python-requests-mock" ,python-requests-mock)
1b2f753d
LC
2450 ("python-mock" ,python-mock)))
2451 (propagated-inputs
2452 `(("python-oauthlib" ,python-oauthlib)
2453 ("python-requests" ,python-requests)))
2454 (home-page
2455 "https://github.com/requests/requests-oauthlib")
2456 (synopsis
2457 "OAuthlib authentication support for Requests")
2458 (description
2459 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
2460provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
2461 (license license:isc)))
2462
2463(define-public python2-requests-oauthlib
2464 (package-with-python2 python-requests-oauthlib))
2465
2466(define-public python-url
2467 (package
2468 (name "python-url")
2469 (version "0.2.0")
2470 (source (origin
2471 (method url-fetch)
2472 (uri (pypi-uri "url" version))
2473 (sha256
2474 (base32
2475 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
2476 (build-system python-build-system)
2477 (propagated-inputs
2478 `(("python-publicsuffix" ,python-publicsuffix)))
2479 (native-inputs
2480 `(("python-coverage" ,python-coverage)
2481 ("python-nose" ,python-nose)))
2482 (arguments
2483 `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
2484 (home-page "https://github.com/seomoz/url-py")
2485 (synopsis "URL Parsing")
2486 (description "Library for parsing urls.")
2487 (license license:expat)
2488 (properties `((python2-variant . ,(delay python2-url))))))
2489
2490(define-public python2-url
2491 (let ((base (package-with-python2 (strip-python2-variant python-url))))
2492 (package (inherit base)
2493 (propagated-inputs
2494 `(("python2-publicsuffix" ,python2-publicsuffix))))))
2495
2496(define-public python-cachecontrol
2497 (package
2498 (name "python-cachecontrol")
2015767c 2499 (version "0.12.5")
1b2f753d
LC
2500 (source
2501 (origin
6e00b1ea 2502 (method git-fetch)
1b2f753d 2503 ;; Pypi does not have tests.
6e00b1ea
MB
2504 (uri (git-reference
2505 (url "https://github.com/ionrock/cachecontrol")
2506 (commit (string-append "v" version))))
2507 (file-name (git-file-name name version))
1b2f753d
LC
2508 (sha256
2509 (base32
2015767c 2510 "03lgc65sl04n0cgzmmgg99bk83f9i6k8yrmcd4hpl46q1pymn0kz"))))
1b2f753d
LC
2511 (build-system python-build-system)
2512 (arguments
2015767c
TLC
2513 ;; Versions > 0.11.6 depend on CherryPy for testing.
2514 ;; It's too much work to package CherryPy for now.
2515 `(#:tests? #f))
1b2f753d
LC
2516 (propagated-inputs
2517 `(("python-requests" ,python-requests)
6dcbd20a 2518 ("python-msgpack" ,python-msgpack)
1b2f753d
LC
2519 ("python-lockfile" ,python-lockfile)))
2520 (home-page "https://github.com/ionrock/cachecontrol")
2521 (synopsis "The httplib2 caching algorithms for use with requests")
2522 (description "CacheControl is a port of the caching algorithms in
2523@code{httplib2} for use with @code{requests} session objects.")
2524 (license license:asl2.0)))
2525
2526(define-public python2-cachecontrol
2527 (package-with-python2 python-cachecontrol))
2528
2529(define-public python-betamax
2530 (package
2531 (name "python-betamax")
98516883 2532 (version "0.8.1")
1b2f753d
LC
2533 (source
2534 (origin
2535 (method url-fetch)
2536 (uri (pypi-uri "betamax" version))
2537 (sha256
2538 (base32
98516883 2539 "1hki1c2vs7adq7zr56wi6i5bhrkia4s2ywpv2c98ibnczz709w2v"))))
1b2f753d
LC
2540 (build-system python-build-system)
2541 (arguments
2542 '(;; Many tests fail because they require networking.
2543 #:tests? #f))
2544 (propagated-inputs
2545 `(("python-requests" ,python-requests)))
2546 (home-page "https://github.com/sigmavirus24/betamax")
2547 (synopsis "Record HTTP interactions with python-requests")
2548 (description "Betamax will record your test suite's HTTP interactions and
2549replay them during future tests. It is designed to work with python-requests.")
2550 (license license:expat)))
2551
2552(define-public python2-betamax
2553 (package-with-python2 python-betamax))
2554
2555(define-public python-betamax-matchers
2556 (package
2557 (name "python-betamax-matchers")
2558 (version "0.4.0")
2559 (source
2560 (origin
2561 (method url-fetch)
2562 (uri (pypi-uri "betamax-matchers" version))
2563 (sha256
2564 (base32
2565 "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
2566 (build-system python-build-system)
2567 (propagated-inputs
2568 `(("python-betamax" ,python-betamax)
2569 ("python-requests-toolbelt" ,python-requests-toolbelt)))
2570 (home-page "https://github.com/sigmavirus24/betamax_matchers")
2571 (synopsis "VCR imitation for python-requests")
2572 (description "@code{betamax-matchers} provides a set of Matchers for
2573Betamax.")
2574 (license license:asl2.0)))
2575
2576(define-public python2-betamax-matchers
2577 (package-with-python2 python-betamax-matchers))
2578
2579(define-public python-s3transfer
2580 (package
2581 (name "python-s3transfer")
5d367537 2582 (version "0.2.0")
1b2f753d
LC
2583 (source (origin
2584 (method url-fetch)
2585 (uri (pypi-uri "s3transfer" version))
2586 (sha256
2587 (base32
5d367537 2588 "08fhj73b1ai52hrs2q3nggshq3pswn1gq8ch3m009cb2v2vmqggj"))))
1b2f753d
LC
2589 (build-system python-build-system)
2590 (arguments
2591 `(#:phases
2592 (modify-phases %standard-phases
c63bd847
CB
2593 (add-after 'unpack 'patch
2594 (lambda _
2595 ;; There's a small issue with one test with Python 3.8, this
2596 ;; change has been suggested upstream:
2597 ;; https://github.com/boto/s3transfer/pull/164
2598 (substitute* "tests/unit/test_s3transfer.py"
2599 (("super\\(FailedDownloadParts, self\\)\\.submit\\(function\\)")
2600 "futures.Future()"))
2601 #t))
1b2f753d
LC
2602 (replace 'check
2603 (lambda _
5d367537
RW
2604 ;; Some of the 'integration' tests require network access or
2605 ;; login credentials.
12adfdf0
TGR
2606 (invoke "nosetests" "--exclude=integration")
2607 #t)))))
1b2f753d
LC
2608 (native-inputs
2609 `(("python-docutils" ,python-docutils)
2610 ("python-mock" ,python-mock)
2611 ("python-nose" ,python-nose)))
2612 (propagated-inputs
5d367537
RW
2613 `(("python-botocore" ,python-botocore)
2614 ("python-urllib3" ,python-urllib3)))
1b2f753d
LC
2615 (synopsis "Amazon S3 Transfer Manager")
2616 (description "S3transfer is a Python library for managing Amazon S3
2617transfers.")
2618 (home-page "https://github.com/boto/s3transfer")
2619 (license license:asl2.0)
2620 (properties `((python2-variant . ,(delay python2-s3transfer))))))
2621
2622(define-public python2-s3transfer
2623 (let ((base (package-with-python2 (strip-python2-variant python-s3transfer))))
2624 (package
2625 (inherit base)
2626 (native-inputs
2627 `(("python2-futures" ,python2-futures)
2628 ,@(package-native-inputs base))))))
2629
9c98d588
CB
2630(define-public python-slimit
2631 (package
2632 (name "python-slimit")
2633 (version "0.8.1")
2634 (source
2635 (origin
2636 (method url-fetch)
2637 (uri (pypi-uri "slimit" version ".zip"))
2638 (sha256
2639 (base32
2640 "02vj2x728rs1127q2nc27frrqra4fczivnb7gch6n5lzi7pxqczl"))))
2641 (build-system python-build-system)
2642 (native-inputs
2643 `(("unzip" ,unzip)))
2644 (propagated-inputs
2645 `(("python-ply" ,python-ply)))
2646 (home-page "https://slimit.readthedocs.io/")
2647 (synopsis "JavaScript minifier, parser and lexer written in Python")
2648 (description
2649 "SlimIt is a JavaScript minifier written in Python. It compiles
2650JavaScript into more compact code so that it downloads and runs faster.
2651SlimIt also provides a library that includes a JavaScript parser, lexer,
2652pretty printer and a tree visitor.")
2653 (license license:expat)))
2654
1b2f753d
LC
2655(define-public python-flask-restful
2656 (package
2657 (name "python-flask-restful")
0a044f75 2658 (version "0.3.8")
1b2f753d
LC
2659 (source
2660 (origin
2661 (method url-fetch)
2662 (uri (pypi-uri "Flask-RESTful" version))
0a044f75 2663 (patches (search-patches "python-flask-restful-werkzeug-compat.patch"))
1b2f753d 2664 (sha256
4f8be6d9 2665 (base32
0a044f75 2666 "05b9lzx5yc3wgml2bcq50lq35h66m8zpj6dc9advcb5z3acsbaay"))))
1b2f753d
LC
2667 (build-system python-build-system)
2668 (propagated-inputs
2669 `(("python-aniso8601" ,python-aniso8601)
2670 ("python-flask" ,python-flask)
2671 ("python-pycrypto" ,python-pycrypto)
2672 ("python-pytz" ,python-pytz)))
2673 (native-inputs
2674 `(;; Optional dependency of Flask. Tests need it.
2675 ("python-blinker" ,python-blinker)
2676 ("python-mock" ,python-mock) ; For tests
0a044f75 2677 ("python-nose" ,python-nose))) ;for tests
1b2f753d
LC
2678 (home-page
2679 "https://www.github.com/flask-restful/flask-restful/")
2680 (synopsis
2681 "Flask module for creating REST APIs")
2682 (description
2683 "This package contains a Flask module for creating REST APIs.")
2684 (license license:bsd-3)))
2685
2686(define-public python-flask-basicauth
2687 (package
2688 (name "python-flask-basicauth")
2689 (version "0.2.0")
2690 (source
2691 (origin
2692 (method url-fetch)
2693 (uri (pypi-uri "Flask-BasicAuth" version))
2694 (sha256
2695 (base32
2696 "1zq1spkjr4sjdnalpp8wl242kdqyk6fhbnhr8hi4r4f0km4bspnz"))))
2697 (build-system python-build-system)
2698 (propagated-inputs
2699 `(("python-flask" ,python-flask)))
2700 (home-page
2701 "https://github.com/jpvanhal/flask-basicauth")
2702 (synopsis
2703 "HTTP basic access authentication for Flask")
2704 (description
2705 "This package provides HTTP basic access authentication for Flask.")
2706 (license license:bsd-3)))
2707
d1b103e1
DM
2708(define-public python-flask-htpasswd
2709 (package
2710 (name "python-flask-htpasswd")
2711 (version "0.3.1")
2712 (source
2713 (origin
2714 (method url-fetch)
2715 (uri (pypi-uri "flask-htpasswd" version))
2716 (sha256
2717 (base32
2718 "14q1y1y9i9bhabdnwd25jqzc4ljli23smxfyyh8abxz1vq93pxra"))))
2719 (build-system python-build-system)
2720 (propagated-inputs
2721 `(("python-flask" ,python-flask)
2722 ("python-itsdangerous" ,python-itsdangerous)
2723 ("python-passlib" ,python-passlib)
2724 ("python-tox" ,python-tox)))
702a1012 2725 (home-page "https://github.com/carsongee/flask-htpasswd")
d1b103e1
DM
2726 (synopsis "Basic authentication via htpasswd files in Flask applications")
2727 (description "This package provides Basic authentication via
2728@file{htpasswd} files and access_token authentication in Flask
2729applications.")
2730 (license license:bsd-3)))
2731
1b2f753d
LC
2732(define-public python-flask-sqlalchemy
2733 (package
2734 (name "python-flask-sqlalchemy")
310f8349 2735 (version "2.4.4")
aa6d7de6
MB
2736 (source (origin
2737 (method url-fetch)
2738 (uri (pypi-uri "Flask-SQLAlchemy" version))
2739 (sha256
2740 (base32
310f8349 2741 "1rgsj49gnx361hnb3vn6c1h17497qh22yc3r70l1r6w0mw71bixz"))))
1b2f753d
LC
2742 (build-system python-build-system)
2743 (propagated-inputs
2744 `(("python-flask" ,python-flask)
2745 ("python-sqlalchemy" ,python-sqlalchemy)))
aa6d7de6
MB
2746 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
2747 (synopsis "Module adding SQLAlchemy support to your Flask application")
1b2f753d 2748 (description
aa6d7de6 2749 "This package adds SQLAlchemy support to your Flask application.")
1b2f753d
LC
2750 (license license:bsd-3)))
2751
2752(define-public python-flask-restplus
2753 (package
2754 (name "python-flask-restplus")
2755 (version "0.9.2")
2756 (source
2757 (origin
2758 (method url-fetch)
2759 (uri (pypi-uri "flask-restplus" version))
2760 (sha256
2761 (base32
2762 "11his6ii5brpkhld0d5bwzjjw4q3vmplpd6fmgzjrvvklsbk0cf4"))))
2763 (build-system python-build-system)
2764 (arguments
2765 '(#:tests? #f)) ; FIXME: 35/882 tests failing.
2766 ;; #:phases
2767 ;; (modify-phases %standard-phases
2768 ;; (replace 'check
2769 ;; (lambda _
12adfdf0
TGR
2770 ;; (invoke "nosetests")
2771 ;; #t)))))
1b2f753d
LC
2772 (propagated-inputs
2773 `(("python-aniso8601" ,python-aniso8601)
2774 ("python-flask" ,python-flask)
2775 ("python-jsonschema" ,python-jsonschema)
2776 ("python-pytz" ,python-pytz)
2777 ("python-six" ,python-six)))
2778 (native-inputs
2779 `(("python-tzlocal" ,python-tzlocal)
2780 ("python-blinker" ,python-blinker)
2781 ("python-nose" ,python-nose)
2782 ("python-rednose" ,python-rednose)))
2783 (home-page "https://github.com/noirbizarre/flask-restplus")
2784 (synopsis "Framework for documented API development with Flask")
2785 (description "This package provides a framework for API development with
2786the Flask web framework in Python. It is similar to package
2787@code{python-flask-restful} but supports the @code{python-swagger}
2788documentation builder.")
2789 (license license:expat)))
2790
2791(define-public python-flask-restful-swagger
2792 (package
2793 (name "python-flask-restful-swagger")
e5b4b802 2794 (version "0.20.1")
1b2f753d
LC
2795 (source
2796 (origin
2797 (method url-fetch)
2798 (uri (pypi-uri "flask-restful-swagger" version))
2799 (sha256
2800 (base32
e5b4b802 2801 "1p66f98b5zpypnnz56pxpbirchqj6aniw6qyrp8h572l0dn9xlvq"))))
1b2f753d 2802 (build-system python-build-system)
e5b4b802 2803 (arguments '(#:tests? #f)) ;no tests
1b2f753d
LC
2804 (propagated-inputs
2805 `(("python-flask-restful" ,python-flask-restful)))
2806 (home-page "https://github.com/rantav/flask-restful-swagger")
2807 (synopsis "Extract Swagger specs from Flask-Restful projects")
2808 (description "This package lets you extract Swagger API documentation
2809specs from your Flask-Restful projects.")
2810 (license license:expat)))
2811
2812(define-public python2-flask-restful-swagger
2813 (package-with-python2 python-flask-restful-swagger))
2814
2815(define-public python-htmlmin
2816 (package
2817 (name "python-htmlmin")
05075433 2818 (version "0.1.12")
1b2f753d
LC
2819 (source
2820 (origin
2821 (method url-fetch)
2822 (uri (pypi-uri "htmlmin" version))
2823 (sha256
2824 (base32
05075433 2825 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
1b2f753d 2826 (arguments
05075433 2827 `(#:tests? #f)) ; no tests
1b2f753d
LC
2828 (build-system python-build-system)
2829 (home-page "https://htmlmin.readthedocs.org/en/latest/")
2830 (synopsis "HTML minifier")
2831 (description "@code{htmlmin} is an HTML minifier that just works.
2832It comes with safe defaults and easily configurable options.")
2833 (license license:bsd-3)))
2834
2835(define-public python2-htmlmin
2836 (package-with-python2 python-htmlmin))
2837
2838(define-public python-flask-htmlmin
2839 (package
2840 (name "python-flask-htmlmin")
2841 (version "1.2")
2842 (source
2843 (origin
2844 (method url-fetch)
2845 (uri (pypi-uri "Flask-HTMLmin" version))
2846 (sha256
2847 (base32
2848 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
2849 (propagated-inputs
2850 `(("python-flask" ,python-flask)
2851 ("python-htmlmin" ,python-htmlmin)))
2852 (build-system python-build-system)
2853 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
2854 (synopsis "HTML response minifier for Flask")
2855 (description
2856 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
2857 (license license:bsd-3)))
2858
2859(define-public python2-flask-htmlmin
2860 (package-with-python2 python-flask-htmlmin))
2861
90b9c5ad
CB
2862(define-public python-jsmin
2863 (package
2864 (name "python-jsmin")
2865 (version "2.2.2")
2866 (source
2867 (origin
2868 (method url-fetch)
2869 (uri (pypi-uri "jsmin" version))
2870 (sha256
2871 (base32
2872 "0fsmqbjvpxvff0984x7c0y8xmf49ax9mncz48b9xjx8wrnr9kpxn"))))
2873 (build-system python-build-system)
2874 (home-page "https://github.com/tikitu/jsmin/")
2875 (synopsis "Python JavaScript minifier")
2876 (description
2877 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
2878on the command line.")
2879 (license license:expat)))
2880
1b2f753d
LC
2881(define-public python-flask-login
2882 (package
2883 (name "python-flask-login")
4393dafd 2884 (version "0.5.0")
1b2f753d
LC
2885 (source
2886 (origin
79374801
TGR
2887 (method git-fetch)
2888 (uri (git-reference
b0e7b699 2889 (url "https://github.com/maxcountryman/flask-login")
79374801
TGR
2890 (commit version)))
2891 (file-name (git-file-name name version))
1b2f753d 2892 (sha256
4393dafd 2893 (base32 "11ac924w0y4m0kf3mxnxdlidy88jfa7njw5yyrq16dvnx4iwd8gg"))))
1b2f753d 2894 (build-system python-build-system)
d6ab1d0a
TGR
2895 (propagated-inputs
2896 `(("python-flask" ,python-flask)))
2897 (native-inputs
2898 ;; For tests.
2899 `(("python-blinker" ,python-blinker)
4393dafd 2900 ("python-coverage" ,python-coverage)
d6ab1d0a 2901 ("python-mock" ,python-mock)
4393dafd 2902 ("python-pycodestyle" ,python-pycodestyle)
d6ab1d0a 2903 ("python-pyflakes" ,python-pyflakes)
4393dafd 2904 ("python-pytest" ,python-pytest)
d6ab1d0a
TGR
2905 ("python-semantic-version" ,python-semantic-version)
2906 ("python-werkzeug" ,python-werkzeug)))
1b2f753d
LC
2907 (home-page "https://github.com/maxcountryman/flask-login")
2908 (synopsis "User session management for Flask")
2909 (description
2910 "@code{Flask-Login} provides user session management for Flask. It
2911handles the common tasks of logging in, logging out, and remembering your
2912users' sessions over extended periods of time.")
2913 (license license:expat)))
2914
2915(define-public python2-flask-login
2916 (package-with-python2 python-flask-login))
2917
2918(define-public python-oauth2client
2919 (package
2920 (name "python-oauth2client")
2921 (version "4.0.0")
2922 (source
2923 (origin
2924 (method url-fetch)
2925 (uri (pypi-uri "oauth2client" version))
2926 (sha256
2927 (base32
2928 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
2929 (build-system python-build-system)
2930 (arguments
2931 `(#:tests? #f))
2932 (propagated-inputs
2933 `(("python-httplib2" ,python-httplib2)
2934 ("python-pyasn1" ,python-pyasn1)
2935 ("python-pyasn1-modules" ,python-pyasn1-modules)
2936 ("python-rsa" ,python-rsa)
2937 ("python-six" ,python-six)))
9be5ecdf 2938 (home-page "https://github.com/google/oauth2client/")
1b2f753d
LC
2939 (synopsis "OAuth 2.0 client library")
2940 (description "@code{python-oauth2client} provides an OAuth 2.0 client
2941library for Python")
2942 (license license:asl2.0)))
2943
1ceca46b
MO
2944(define-public python2-oauth2client
2945 (package-with-python2 python-oauth2client))
2946
1b2f753d
LC
2947(define-public python-flask-oidc
2948 (package
2949 (name "python-flask-oidc")
2950 (version "1.1.1")
2951 (source
2952 (origin
2953 (method url-fetch)
2954 (uri (pypi-uri "flask-oidc" version))
2955 (sha256
2956 (base32
2957 "1ay5j0mf174bix7i67hclr95gv16z81fpx0dijvi0gydvdj3ddy2"))))
2958 (build-system python-build-system)
2959 (propagated-inputs
2960 `(("python-flask" ,python-flask)
2961 ("python-itsdangerous" ,python-itsdangerous)
2962 ("python-oauth2client" ,python-oauth2client)
2963 ("python-six" ,python-six)))
2964 (native-inputs
2965 `(("python-nose" ,python-nose)
2966 ("python-mock" ,python-mock)))
2967 (home-page "https://github.com/puiterwijk/flask-oidc")
2968 (synopsis "OpenID Connect extension for Flask")
2969 (description "@code{python-flask-oidc} provides an OpenID Connect extension
2970for Flask.")
2971 (license license:bsd-2)))
2972
2973(define-public python-webassets
2974 (package
2975 (name "python-webassets")
2976 (version "0.12.1")
2977 (source
2978 (origin
2979 (method url-fetch)
2980 (uri (pypi-uri "webassets" version))
2981 (sha256
2982 (base32
2983 "1nrqkpb7z46h2b77xafxihqv3322cwqv6293ngaky4j3ff4cing7"))))
2984 (build-system python-build-system)
2985 (native-inputs
2986 `(("python-jinja2" ,python-jinja2)
2987 ("python-mock" ,python-mock)
2988 ("python-nose" ,python-nose)
2989 ("python-pytest" ,python-pytest)))
2990 (home-page "https://github.com/miracle2k/webassets")
2991 (synopsis "Media asset management")
2992 (description "Merges, minifies and compresses Javascript and CSS files,
2993supporting a variety of different filters, including YUI, jsmin, jspacker or
2994CSS tidy. Also supports URL rewriting in CSS files.")
2995 (license license:bsd-2)))
2996
2997(define-public python-cssmin
2998 (package
2999 (name "python-cssmin")
3000 (version "0.2.0")
3001 (source
3002 (origin
3003 (method url-fetch)
3004 (uri (pypi-uri "cssmin" version))
3005 (sha256
3006 (base32
3007 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
3008 (build-system python-build-system)
3009 (home-page "https://github.com/zacharyvoase/cssmin")
3010 (synopsis "Python port of the YUI CSS Compressor")
3011 (description "Python port of the YUI CSS Compressor.")
3012 (license (list license:expat license:bsd-3))))
3013
3014(define-public python2-cssmin
3015 (package-with-python2 python-cssmin))
3016
3017(define-public python-elasticsearch
3018 (package
3019 (name "python-elasticsearch")
3e313792 3020 (version "7.1.0")
1b2f753d
LC
3021 (source
3022 (origin
3023 (method url-fetch)
3024 (uri (pypi-uri "elasticsearch" version))
3025 (sha256
3026 (base32
3e313792 3027 "0rnjvlhw4v3vg14l519qliy1s1zpmx3827q0xfviwvk42rr7hh01"))))
1b2f753d
LC
3028 (build-system python-build-system)
3029 (native-inputs
3030 `(("python-mock" ,python-mock)
3031 ("python-nosexcover" ,python-nosexcover)
3032 ("python-pyaml" ,python-pyaml)
3033 ("python-requests" ,python-requests)))
3034 (propagated-inputs
3035 `(("urllib3" ,python-urllib3)))
3036 (arguments
3037 ;; tests require the test_elasticsearch module but it is not distributed.
3038 `(#:tests? #f))
3039 (home-page "https://github.com/elastic/elasticsearch-py")
3040 (synopsis "Low-level client for Elasticsearch")
3041 (description "Official low-level client for Elasticsearch. Its goal is to
3042provide common ground for all Elasticsearch-related code in Python; because of
3043this it tries to be opinion-free and very extendable.")
3044 (license license:expat)))
3045
3046(define-public python2-elasticsearch
3047 (package-with-python2 python-elasticsearch))
3048
3049(define-public python-flask-script
3050 (package
3051 (name "python-flask-script")
6a192184 3052 (version "2.0.6")
1b2f753d
LC
3053 (source
3054 (origin
3055 (method url-fetch)
3056 (uri (pypi-uri "Flask-Script" version))
3057 (sha256
3058 (base32
6a192184 3059 "0r8w2v89nj6b9p91p495cga5m72a673l2wc0hp0zqk05j4yrc9b4"))))
1b2f753d 3060 (build-system python-build-system)
c8535731
DM
3061 (arguments
3062 `(#:phases
3063 (modify-phases %standard-phases
3064 (add-after 'unpack 'patch-tests
3065 (lambda _
3066 (substitute* "tests.py"
3067 (("flask\\.ext\\.script") "flask_script"))
3068 #t)))))
1b2f753d
LC
3069 (propagated-inputs
3070 `(("python-flask" ,python-flask)
3071 ("python-argcomplete" ,python-argcomplete)
3072 ("python-werkzeug" ,python-werkzeug)))
3073 (native-inputs
3074 `(("python-pytest" ,python-pytest)))
3075 (home-page
9be5ecdf 3076 "https://github.com/smurfix/flask-script")
1b2f753d
LC
3077 (synopsis "Scripting support for Flask")
3078 (description "The Flask-Script extension provides support for writing
3079external scripts in Flask. This includes running a development server,
3080a customised Python shell, scripts to set up your database, cronjobs,
3081and other command-line tasks that belong outside the web application
3082itself.")
3083 (license license:bsd-3)))
3084
3085(define-public python2-flask-script
3086 (package-with-python2 python-flask-script))
3087
3088(define-public python-flask-migrate
3089 (package
3090 (name "python-flask-migrate")
b85822ea 3091 (version "2.5.3")
1b2f753d
LC
3092 (source
3093 (origin
3094 (method url-fetch)
3095 (uri (pypi-uri "Flask-Migrate" version))
3096 (sha256
3097 (base32
b85822ea 3098 "1vip9ww6l18dxffjsggm83k71zkvihxpnhaswpv8klh95s6517d6"))))
1b2f753d
LC
3099 (build-system python-build-system)
3100 (propagated-inputs
3101 `(("python-flask" ,python-flask)
3102 ("python-alembic" ,python-alembic)
3103 ("python-sqlalchemy" ,python-sqlalchemy)
3104 ("python-flask-script" ,python-flask-script)
3105 ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)))
9be5ecdf 3106 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
1b2f753d
LC
3107 (synopsis "SQLAlchemy database migrations for Flask programs using
3108Alembic")
3109 (description "This package contains SQLAlchemy database migration tools
3110for Flask programs that are using @code{python-alembic}.")
3111 (license license:expat)))
3112
1b2f753d
LC
3113(define-public python-genshi
3114 (package
3115 (name "python-genshi")
658505d7 3116 (version "0.7.3")
1b2f753d
LC
3117 (source
3118 (origin
7c8b1bf6
TGR
3119 (method git-fetch)
3120 (uri (git-reference
b0e7b699 3121 (url "https://github.com/edgewall/genshi")
7c8b1bf6
TGR
3122 (commit version)))
3123 (file-name (git-file-name name version))
1b2f753d 3124 (sha256
658505d7 3125 (base32 "04bw7nd4wyn8ixnhik57hny2xpjjpn80k5hp6691inix5gc6rxaf"))))
1b2f753d
LC
3126 (build-system python-build-system)
3127 (home-page "https://genshi.edgewall.org/")
3128 (synopsis "Toolkit for generation of output for the web")
3129 (description "Genshi is a Python library that provides an integrated set
3130of components for parsing, generating, and processing HTML, XML or other
3131textual content for output generation on the web.")
3132 (license license:bsd-3)))
3133
1b2f753d
LC
3134(define-public python2-genshi
3135 (package-with-python2 python-genshi))
3136
3137(define-public python-flask-principal
3138 (package
3139 (name "python-flask-principal")
3140 (version "0.4.0")
3141 (source
3142 (origin
3143 (method url-fetch)
3144 (uri (pypi-uri "Flask-Principal" version))
3145 (sha256
3146 (base32
3147 "0lwlr5smz8vfm5h9a9i7da3q1c24xqc6vm9jdywdpgxfbi5i7mpm"))))
3148 (build-system python-build-system)
3149 (propagated-inputs
3150 `(("python-blinker" ,python-blinker)))
3151 (native-inputs
3152 `(("python-flask" ,python-flask)
3153 ("python-nose" ,python-nose)))
02510c6c 3154 (home-page "https://pythonhosted.org/Flask-Principal/")
1b2f753d
LC
3155 (synopsis "Identity management for Flask")
3156 (description "@code{flask_principal} is a identity management library for
3157Flask. It supports managing both authentication and authorization data in a
3158thread-local variable.")
3159 (license license:expat)))
3160
3161(define-public python2-flask-principal
3162 (package-with-python2 python-flask-principal))
3163
3164(define-public python-flask-httpauth
3165 (package
3166 (name "python-flask-httpauth")
3167 (version "3.2.3")
3168 (source
3169 (origin
3170 (method url-fetch)
3171 (uri (pypi-uri "Flask-HTTPAuth" version))
3172 (sha256
3173 (base32
3174 "13gff5w1mqpzm5nccyg02v3ifb9ifqh5k866cssjhghhg6msfjsz"))))
3175 (build-system python-build-system)
3176 (native-inputs
3177 `(("python-flask" ,python-flask)))
9be5ecdf 3178 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
1b2f753d
LC
3179 (synopsis "Basic and Digest HTTP authentication for Flask routes")
3180 (description "@code{flask_httpauth} provides Basic and Digest HTTP
3181authentication for Flask routes.")
3182 (license license:expat)))
3183
3184(define-public python2-flask-httpauth
3185 (package-with-python2 python-flask-httpauth))
3186
3187(define-public python-uritemplate
3188 (package
3189 (name "python-uritemplate")
3190 (version "3.0.0")
3191 (source
3192 (origin
3193 (method url-fetch)
3194 (uri (pypi-uri "uritemplate" version))
3195 (sha256
3196 (base32
3197 "0781gm9g34wa0asc19dx81ng0nqq07igzv3bbvdqmz13pv7469n0"))))
3198 (build-system python-build-system)
3199 (home-page "https://uritemplate.readthedocs.org")
3200 (synopsis "Library to deal with URI Templates")
3201 (description "@code{uritemplate} provides Python library to deal with URI
3202Templates.")
3203 (license license:bsd-2)))
3204
3205(define-public python2-uritemplate
3206 (package-with-python2 python-uritemplate))
3207
589e3f4e
LC
3208(define-public python-publicsuffix
3209 (package
3210 (name "python-publicsuffix")
3211 (version "1.1.0")
3212 (source (origin
3213 (method url-fetch)
3214 (uri (pypi-uri "publicsuffix" version))
3215 (sha256
3216 (base32
3217 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
3218 (build-system python-build-system)
3219 (arguments
3220 `(#:tests? #f)) ; tests use the internet
3221 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
3222 (synopsis "Get suffix for a domain name")
3223 (description "Get a public suffix for a domain name using the Public Suffix
3224List.")
3225 (license license:expat)))
3226
3227(define-public python2-publicsuffix
3228 (package-with-python2 python-publicsuffix))
3229
3230(define-public python-publicsuffix2
3231 (package
3232 (name "python-publicsuffix2")
df01360f 3233 (version "2.20191221")
589e3f4e
LC
3234 (source
3235 (origin
3236 (method url-fetch)
df01360f 3237 (uri (pypi-uri "publicsuffix2" version))
589e3f4e 3238 (sha256
df01360f 3239 (base32 "0yzysvfj1najr1mb4pcqrbmjir3xpb69rlffln95a3cdm8qwry00"))))
589e3f4e
LC
3240 (build-system python-build-system)
3241 (arguments
df01360f
TGR
3242 '(#:phases
3243 (modify-phases %standard-phases
3244 (add-after 'unpack 'ignore-maintainer-inputs
3245 (lambda _
3246 ;; Comment out a demand for python-requests, which is used only by
3247 ;; the unused ‘update_psl’ helper command.
3248 (substitute* "setup.py"
3249 (("'requests " match)
2b829898 3250 (format #f "# ~a" match)))
df01360f
TGR
3251 #t)))
3252 #:tests? #f)) ; the test suite requires network access
589e3f4e
LC
3253 (home-page "https://github.com/pombredanne/python-publicsuffix2")
3254 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
3255 (description "Get a public suffix for a domain name using the Public Suffix
3256List. Forked from and using the same API as the publicsuffix package.")
3257 (license (list license:expat license:mpl2.0))))
3258
3259(define-public python2-publicsuffix2
3260 (package-with-python2 python-publicsuffix2))
98c6a025
RW
3261
3262(define-public python-werkzeug
3263 (package
3264 (name "python-werkzeug")
44b88565 3265 (version "1.0.0")
98c6a025
RW
3266 (source
3267 (origin
3268 (method url-fetch)
44b88565 3269 (uri (pypi-uri "Werkzeug" version))
98c6a025
RW
3270 (sha256
3271 (base32
44b88565 3272 "15kh0z61klp62mrc1prka13xsshxn0rsp1j1s2964iw86yisi6qn"))))
98c6a025 3273 (build-system python-build-system)
c5e110ce
EF
3274 (arguments
3275 '(#:phases
3276 (modify-phases %standard-phases
3277 (delete 'check)
3278 (add-after 'install 'check
3279 (lambda* (#:key inputs outputs #:allow-other-keys)
3280 (add-installed-pythonpath inputs outputs)
3281 (invoke "python" "-m" "pytest"))))))
3282 (propagated-inputs
3283 `(("python-requests" ,python-requests)))
98c6a025 3284 (native-inputs
44b88565
MB
3285 `(("python-pytest" ,python-pytest)
3286 ("python-pytest-timeout" ,python-pytest-timeout)))
c5e110ce 3287 (home-page "https://www.palletsprojects.org/p/werkzeug/")
98c6a025
RW
3288 (synopsis "Utilities for WSGI applications")
3289 (description "One of the most advanced WSGI utility modules. It includes a
3290powerful debugger, full-featured request and response objects, HTTP utilities to
3291handle entity tags, cache control headers, HTTP dates, cookie handling, file
3292uploads, a powerful URL routing system and a bunch of community-contributed
3293addon modules.")
3294 (license license:x11)))
3295
3296(define-public python2-werkzeug
3297 (package-with-python2 python-werkzeug))
3298
3299(define-public python-bottle
3300 (package
3301 (name "python-bottle")
007af2fb 3302 (version "0.12.18")
98c6a025
RW
3303 (source
3304 (origin
3305 (method url-fetch)
3306 (uri (pypi-uri "bottle" version))
3307 (sha256
3308 (base32
007af2fb 3309 "17pn43kzr7m6czjbm4nda7kzs4ap9mmb30qfbhifyzas2i5vf688"))))
98c6a025
RW
3310 (build-system python-build-system)
3311 (home-page "http://bottlepy.org/")
3312 (synopsis "WSGI framework for small web-applications.")
3313 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
3314 (license license:expat)))
3315
3316(define-public python2-bottle
3317 (package-with-python2 python-bottle))
3318
3319(define-public python-wtforms
3320 (package
3321 (name "python-wtforms")
3322 (version "2.1")
3323 (source
3324 (origin
3325 (method url-fetch)
3326 (uri (pypi-uri "WTForms" version ".zip"))
3327 (sha256
3328 (base32
3329 "0vyl26y9cg409cfyj8rhqxazsdnd0jipgjw06civhrd53yyi1pzz"))))
3330 (build-system python-build-system)
3331 (arguments
3332 '(#:phases
3333 (modify-phases %standard-phases
3334 (add-after 'unpack 'remove-django-test
3335 ;; Don't fail the tests when the inputs for the optional tests cannot be found.
3336 (lambda _
3337 (substitute*
3338 "tests/runtests.py"
3339 (("'ext_django.tests', 'ext_sqlalchemy', 'ext_dateutil', 'locale_babel'") "")
3340 (("sys.stderr.write(\"### Disabled test '%s', dependency not found\n\" % name)") ""))
3341 #t)))))
3342 (native-inputs
3343 `(("unzip" ,unzip)))
3344 (home-page "http://wtforms.simplecodes.com/")
3345 (synopsis
3346 "Form validation and rendering library for Python web development")
3347 (description
3348 "WTForms is a flexible forms validation and rendering library
3349for Python web development. It is very similar to the web form API
3350available in Django, but is a standalone package.")
3351 (license license:bsd-3)))
3352
3353(define-public python2-wtforms
3354 (package-with-python2 python-wtforms))
3355
3356(define-public python-paste
3357 (package
3358 (name "python-paste")
ce50403f 3359 (version "3.0.6")
98c6a025
RW
3360 (source
3361 (origin
3362 (method url-fetch)
3363 (uri (pypi-uri "Paste" version))
3364 (sha256
3365 (base32
ce50403f 3366 "14lbi9asn5agsdf7r97prkjpz7amgmp529lbvfhf0nv881xczah6"))
95176544
EF
3367 (patches (search-patches "python-paste-remove-timing-test.patch"))
3368 (modules '((guix build utils)))
3369 (snippet
3370 '(begin
3371 ;; This test calls out to the internet.
3372 (delete-file "tests/test_proxy.py") #t))))
98c6a025
RW
3373 (build-system python-build-system)
3374 (native-inputs
95176544
EF
3375 `(("python-pytest" ,python-pytest)
3376 ("python-pytest-runner" ,python-pytest-runner)
3377 ("python-nose" ,python-nose)))
98c6a025
RW
3378 (propagated-inputs
3379 `(("python-six" ,python-six)))
63b06670 3380 (home-page "https://pythonpaste.readthedocs.io/")
98c6a025
RW
3381 (synopsis
3382 "Python web development tools, focusing on WSGI")
3383 (description
3384 "Paste provides a variety of web development tools and middleware which
3385can be nested together to build web applications. Paste's design closely
3386follows ideas flowing from WSGI (Web Standard Gateway Interface).")
3387 (license license:expat)))
3388
3389(define-public python2-paste
3390 (package-with-python2 python-paste))
3391
3392(define-public python-pastescript
3393 (package
3394 (name "python-pastescript")
3395 (version "2.0.2")
3396 (source
3397 (origin
3398 (method url-fetch)
3399 (uri (pypi-uri "PasteScript" version))
3400 (sha256
3401 (base32
3402 "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"))))
3403 (build-system python-build-system)
3404 (native-inputs
3405 `(("python-nose" ,python-nose)))
3406 (propagated-inputs
3407 `(("python-paste" ,python-paste)
3408 ("python-pastedeploy" ,python-pastedeploy)))
63b06670
TGR
3409 (home-page (string-append "https://web.archive.org/web/20161025192515/"
3410 "http://pythonpaste.org/script/"))
98c6a025
RW
3411 (arguments
3412 '(;; Unfortunately, this requires the latest unittest2,
3413 ;; but that requires traceback2 which requires linecache2 which requires
3414 ;; unittest2. So we're skipping tests for now.
3415 ;; (Note: Apparently linetest2 only needs unittest2 for its tests,
3416 ;; so in theory we could get around this situation somehow.)
3417 #:tests? #f))
3418 (synopsis
3419 "Pluggable command line tool for serving web applications and more")
3420 (description
3421 "PasteScript is a plugin-friendly command line tool which provides a
3422variety of features, from launching web applications to bootstrapping project
3423layouts.")
3424 (license license:expat)))
3425
3426(define-public python2-pastescript
3427 (package-with-python2 python-pastescript))
c5964611
3428
3429(define-public python2-urlgrabber
3430 (package
3431 (name "python2-urlgrabber")
3432 (version "3.10.2")
3433 (source
3434 (origin
3435 (method url-fetch)
3436 (uri (pypi-uri "urlgrabber" version))
3437 (sha256
3438 (base32 "0w1h7hlsq406bxfy2pn4i9bd003bwl0q9b7p03z3g6yl0d21ddq5"))))
3439 (build-system python-build-system)
3440 (arguments `(#:python ,python-2)) ; urlgrabber supports python2 only
3441 (home-page "http://urlgrabber.baseurl.org")
3442 (synopsis "High-level cross protocol url-grabber")
3443 (description "@code{urlgrabber} is Python2 library that unifies access to
3444files available on web, FTP or locally. It supports HTTP, FTP and file://
3445protocols, it supports features like HTTP keep-alive, reget, throttling and
3446more.")
3447 (license license:lgpl2.1+)))
3448
85ccc0c2
NG
3449(define-public python-pycares
3450 (package
3451 (name "python-pycares")
3452 (version "2.3.0")
3453 (source
3454 (origin
3455 (method url-fetch)
3456 (uri (pypi-uri "pycares" version))
3457 (sha256
3458 (base32
3459 "0h4fxw5drrhfyslzmfpljk0qnnpbhhb20hnnndzahhbwylyw1x1n"))))
3460 (build-system python-build-system)
3461 (arguments
3462 `(#:tests? #f)) ;tests require internet access
702a1012 3463 (home-page "https://github.com/saghul/pycares")
85ccc0c2
NG
3464 (synopsis "Python interface for @code{c-ares}")
3465 (description "@code{pycares} is a Python module which provides an
3466interface to @code{c-ares}, a C library that performs DNS requests and
3467name resolutions asynchronously.")
3468 (license license:expat)))
2eccb414
NG
3469
3470(define-public python-yarl
3471 (package
3472 (name "python-yarl")
3473 (version "1.1.1")
3474 (source
3475 (origin
3476 (method url-fetch)
3477 (uri (pypi-uri "yarl" version))
3478 (sha256
3479 (base32
3480 "1s6z13g8vgxfkkqwhn6imnm7pl7ky9arv4jygnn6bcndcbidg7d6"))))
3481 (build-system python-build-system)
3482 (native-inputs
3483 `(("python-pytest" ,python-pytest)
3484 ("python-pytest-runner" ,python-pytest-runner)))
3485 (propagated-inputs
3486 `(("python-idna" ,python-idna)
3487 ("python-multidict" ,python-multidict)))
3488 (home-page "https://github.com/aio-libs/yarl/")
3489 (synopsis "Yet another URL library")
3490 (description "@code{yarl} module provides handy @code{URL} class
3491for URL parsing and changing.")
3492 (license license:asl2.0)))
961bcdf5
MO
3493
3494(define-public python-google-api-client
3495 (package
3496 (name "python-google-api-client")
3497 (version "1.6.7")
3498 (source
3499 (origin
3500 (method url-fetch)
3501 (uri (pypi-uri "google-api-python-client" version))
3502 (sha256
3503 (base32
3504 "1wpbbbxfpy9mwxdy3kn352cb590ladv574j1aa2l4grjdqw3ln05"))))
3505 (build-system python-build-system)
3506 (arguments
3507 '(#:tests? #f)) ; tests require internet access
3508 (native-inputs
3509 `(("python-httplib2" ,python-httplib2)
3510 ("python-six" ,python-six)
3511 ("python-oauth2client" ,python-oauth2client)
3512 ("python-uritemplate" ,python-uritemplate)))
3513 (home-page "https://github.com/google/google-api-python-client")
3514 (synopsis "Core Python library for accessing Google APIs")
3515 (description "Python client library for Google's discovery based APIs")
3516 (license license:asl2.0)))
3517
3518(define-public python2-google-api-client
3519 (package-with-python2 python-google-api-client))
0750f344
RW
3520
3521(define-public python-hawkauthlib
3522 (package
3523 (name "python-hawkauthlib")
3524 (version "2.0.0")
3525 (source
3526 (origin
3527 (method url-fetch)
3528 (uri (pypi-uri "hawkauthlib" version))
3529 (sha256
3530 (base32
3531 "03ai47s4h8nfnrf25shbfvkm1b9n1ccd4nmmj280sg1fayi69zgg"))))
3532 (build-system python-build-system)
3533 (propagated-inputs
3534 `(("python-requests" ,python-requests)
3535 ("python-webob" ,python-webob)))
3536 (home-page "https://github.com/mozilla-services/hawkauthlib")
3537 (synopsis "Hawk Access Authentication protocol")
3538 (description
3539 "This is a low-level Python library for implementing Hawk Access Authentication,
3540a simple HTTP request-signing scheme.")
3541 (license license:mpl2.0)))
084e14cc
RW
3542
3543(define-public python-pybrowserid
3544 (package
3545 (name "python-pybrowserid")
3546 (version "0.14.0")
3547 (source
3548 (origin
3549 (method url-fetch)
3550 (uri (pypi-uri "PyBrowserID" version))
3551 (sha256
3552 (base32
3553 "1qvi79kfb8x9kxkm5lw2mp42hm82cpps1xknmsb5ghkwx1lpc8kc"))))
3554 (build-system python-build-system)
3555 (propagated-inputs
3556 `(("python-requests" ,python-requests)))
3557 (native-inputs
3558 `(("python-mock" ,python-mock)))
3559 (home-page "https://github.com/mozilla/PyBrowserID")
3560 (synopsis "Python library for the BrowserID protocol")
3561 (description
3562 "This is a Python client library for the BrowserID protocol that
3563underlies Mozilla Persona.")
3564 (license license:mpl2.0)))
f45bb3cc
RW
3565
3566(define-public python-pyfxa
3567 (package
3568 (name "python-pyfxa")
3569 (version "0.6.0")
3570 (source
3571 (origin
3572 (method url-fetch)
3573 (uri (pypi-uri "PyFxA" version))
3574 (sha256
3575 (base32
3576 "0axl16fyrz2r88gnw4b12mk7dpkqscv8c4wsc1y5hicl7bsbc4fm"))))
3577 (build-system python-build-system)
3578 (arguments '(#:tests? #f)) ; 17 tests require network access
3579 (propagated-inputs
3580 `(("python-cryptography" ,python-cryptography)
3581 ("python-hawkauthlib" ,python-hawkauthlib)
3582 ("python-pybrowserid" ,python-pybrowserid)
3583 ("python-requests" ,python-requests)
3584 ("python-six" ,python-six)))
3585 (native-inputs
3586 `(("python-grequests" ,python-grequests)
3587 ("python-mock" ,python-mock)
3588 ("python-responses" ,python-responses)
3589 ("python-unittest2" ,python-unittest2)))
3590 (home-page "https://github.com/mozilla/PyFxA")
3591 (synopsis "Firefox Accounts client library for Python")
3592 (description
3593 "This is a Python library for interacting with the Firefox Accounts
3594ecosystem.")
3595 (license license:mpl2.0)))
68460fbb
LF
3596
3597(define-public python-hyperlink
3598 (package
3599 (name "python-hyperlink")
431a0d26 3600 (version "19.0.0")
68460fbb
LF
3601 (source
3602 (origin
3603 (method url-fetch)
3604 (uri (pypi-uri "hyperlink" version))
3605 (sha256
3606 (base32
431a0d26 3607 "0m2nhi0j8wmgfscf974wd5v1xfq8mah286hil6npy1ys0m3y7222"))))
68460fbb
LF
3608 (build-system python-build-system)
3609 (propagated-inputs
3610 `(("python-idna" ,python-idna)))
3611 (home-page "https://github.com/python-hyper/hyperlink")
3612 (synopsis "Python module to create immutable URLs according to spec")
3613 (description "This package provides a Python module to create immutable, and
3614correct URLs for Python according to RFCs 3986 and 3987.")
3615 (license license:expat)))
00adbac6
LF
3616
3617(define-public python-treq
3618 (package
3619 (name "python-treq")
3620 (version "18.6.0")
3621 (source
3622 (origin
3623 (method url-fetch)
3624 (uri (pypi-uri "treq" version))
3625 (sha256
3626 (base32
3627 "0j4zwq9p1c9piv1vc66nxcv9s6hdinf90jwkbsm91k14npv9zq4i"))))
3628 (build-system python-build-system)
3629 (propagated-inputs
3630 `(("python-attrs" ,python-attrs)
3631 ("python-idna" ,python-idna)
3632 ("python-incremental" ,python-incremental)
3633 ("python-requests" ,python-requests)
3634 ("python-service-identity" ,python-service-identity)
3635 ("python-twisted" ,python-twisted)))
3636 (home-page "https://github.com/twisted/treq")
3637 (synopsis "Requests-like API built on top of twisted.web's Agent")
3638 (description "This package provides an HTTP library inspired by
3639@code{requests}} but written on top of Twisted's @code{Agents}. It offers a
3640high level API for making HTTP requests when using Twisted.")
3641 (license license:expat)))
951c7093
LF
3642
3643(define-public python-autobahn
3644 (package
3645 (name "python-autobahn")
3646 (version "19.2.1")
3647 (source
3648 (origin
3649 (method url-fetch)
3650 (uri (pypi-uri "autobahn" version))
3651 (sha256
3652 (base32
3653 "1mm7j24ls01c7jb1ad5p5cpyxvzgydiyf8b04ihykh2v8g98j0x7"))))
3654 (build-system python-build-system)
3655 (arguments
3656 ;; The tests fail to run:
3657 ;; https://github.com/crossbario/autobahn-python/issues/1117
3658 `(#:tests? #f))
3659 (propagated-inputs
3660 `(("python-cffi" ,python-cffi)
3661 ("python-twisted" ,python-twisted)
3662 ("python-txaio" ,python-txaio)))
3663 (home-page "https://crossbar.io/autobahn/")
3664 (synopsis "Web Application Messaging Protocol implementation")
3665 (description "This package provides an implementation of the @dfn{Web Application
3666Messaging Protocol} (WAMP). WAMP connects components in distributed
3667applications using Publish and Subscribe (PubSub) and routed Remote Procedure
3668Calls (rRPC). It is ideal for distributed, multi-client and server applications
3669such as IoT applications or multi-user database-driven business applications.")
3670 (license license:expat)))
526b1efb
RW
3671
3672(define-public python-ws4py
3673 (package
3674 (name "python-ws4py")
3675 (version "0.5.1")
3676 (source
3677 (origin
3678 (method url-fetch)
3679 (uri (pypi-uri "ws4py" version))
3680 (sha256
3681 (base32
3682 "10slbbf2jm4hpr92jx7kh7mhf48sjl01v2w4d8z3f1p0ybbp7l19"))))
3683 (build-system python-build-system)
3684 (arguments
3685 `(#:phases
3686 (modify-phases %standard-phases
3687 (add-after 'unpack 'python3.7-compatibility
3688 (lambda _
3689 (substitute* '("ws4py/server/tulipserver.py"
3690 "ws4py/async_websocket.py")
3691 (("asyncio.async")
3692 "asyncio.ensure_future"))
3693 #t))
3694 ;; We don't have a package for cherrypy.
3695 (add-after 'unpack 'remove-cherrypy-support
3696 (lambda _
3697 (delete-file "ws4py/server/cherrypyserver.py")
3698 #t)))))
3699 (propagated-inputs
3700 `(("python-gevent" ,python-gevent)
3701 ("python-tornado" ,python-tornado)))
3702 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
3703 (synopsis "WebSocket client and server library")
3704 (description
3705 "This package provides a WebSocket client and server library for
3706Python.")
3707 (license license:bsd-3)))
57e4592f 3708
6543bc80
PL
3709(define-public python-slugify
3710 (package
3711 (name "python-slugify")
4da627a3 3712 (version "4.0.1")
6543bc80
PL
3713 (source
3714 (origin
3715 (method url-fetch)
3716 (uri (pypi-uri "python-slugify" version))
3717 (sha256
4da627a3 3718 (base32 "0w22fapghmzk3xdasc4dn7h8sl58l08d1h5zbf72dh80drv1g9b9"))))
6543bc80
PL
3719 (propagated-inputs
3720 `(("python-unidecode" ,python-unidecode)))
3721 (arguments
3722 `(#:phases
3723 (modify-phases %standard-phases
3724 (replace 'check
3725 (lambda _
3726 (invoke "python" "test.py"))))))
3727 (build-system python-build-system)
3728 (home-page "https://github.com/un33k/python-slugify")
3729 (synopsis "Python Slugify application that handles Unicode")
3730 (description "This package provides a @command{slufigy} command and
3731library to create slugs from unicode strings while keeping it DRY.")
3732 (license license:expat)))
2bdb5716
NG
3733
3734(define-public python-branca
3735 (package
3736 (name "python-branca")
3737 (version "0.3.1")
3738 (source
3739 (origin
3740 (method url-fetch)
3741 (uri (pypi-uri "branca" version))
3742 (sha256
3743 (base32
3744 "0pmigd521j2228xf8x34vbx0niwvms7xl7za0lymywj0vydjqxiy"))))
3745 (build-system python-build-system)
3746 (propagated-inputs
3747 `(("python-jinja2" ,python-jinja2)
3748 ("python-six" ,python-six)))
3749 (native-inputs
3750 `(("python-pytest" ,python-pytest)))
3751 (home-page "https://github.com/python-visualization/branca")
3752 (synopsis "Generate complex HTML+JS pages with Python")
3753 (description "Generate complex HTML+JS pages with Python")
3754 (license license:expat)))
3755
df122333
HG
3756(define-public python-tinycss2
3757 (package
3758 (name "python-tinycss2")
3759 (version "1.0.2")
3760 (source
3761 (origin
3762 (method url-fetch)
3763 (uri (pypi-uri "tinycss2" version))
15076369 3764 (patches (search-patches "python-tinycss2-flake8-compat.patch"))
df122333
HG
3765 (sha256
3766 (base32 "1kw84y09lggji4krkc58jyhsfj31w8npwhznr7lf19d0zbix09v4"))))
3767 (build-system python-build-system)
3768 (arguments
3769 `(#:phases
3770 (modify-phases %standard-phases
3771 (replace 'check
3772 (lambda _ (invoke "pytest"))))))
3773 (propagated-inputs
3774 `(("python-webencodings" ,python-webencodings)))
3775 (native-inputs
3776 `(("python-pytest-flake8" ,python-pytest-flake8)
3777 ("python-pytest-isort" ,python-pytest-isort)
3778 ("python-pytest-runner" ,python-pytest-runner)))
3779 (home-page "https://tinycss2.readthedocs.io/")
3780 (synopsis "Low-level CSS parser for Python")
3781 (description "@code{tinycss2} can parse strings, return Python objects
3782representing tokens and blocks, and generate CSS strings corresponding to
3783these objects.
3784
3785Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
3786grammar of CSS but doesn’t know specific rules, properties or values supported
3787in various CSS modules.")
3788 (license license:bsd-3)))
3789
7d3f481b
HG
3790(define-public python-cssselect2
3791 (package
3792 (name "python-cssselect2")
3793 (version "0.2.2")
3794 (source
3795 (origin
3796 (method url-fetch)
3797 (uri (pypi-uri "cssselect2" version))
3798 (sha256
3799 (base32 "0skymzb4ncrm2zdsy80f53vi0arf776lvbp51hzh4ayp1il5lj3h"))))
3800 (build-system python-build-system)
3801 (arguments
3802 `(#:phases
3803 (modify-phases %standard-phases
3804 (replace 'check
3805 (lambda _ (invoke "pytest"))))))
3806 (propagated-inputs
3807 `(("python-tinycss2" ,python-tinycss2)))
3808 (native-inputs
3809 `(("python-pytest-cov" ,python-pytest-cov)
3810 ("python-pytest-flake8" ,python-pytest-flake8)
3811 ("python-pytest-isort" ,python-pytest-isort)
3812 ("python-pytest-runner" ,python-pytest-runner)))
3813 (home-page "https://cssselect2.readthedocs.io/")
3814 (synopsis "CSS selectors for Python ElementTree")
3815 (description "@code{cssselect2} is a straightforward implementation of
3816CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
3817ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
3818
3819Unlike the Python package @code{cssselect}, it does not translate selectors to
3820XPath and therefore does not have all the correctness corner cases that are
3821hard or impossible to fix in cssselect.")
3822 (license license:bsd-3)))
a7469d16
HG
3823
3824(define-public gunicorn
3825 (package
3826 (name "gunicorn")
ecceef27 3827 (version "20.0.4")
a7469d16
HG
3828 (source
3829 (origin
3830 (method url-fetch)
3831 (uri (pypi-uri "gunicorn" version))
3832 (sha256
3833 (base32
ecceef27 3834 "09n6fc019bgrvph1s5h1lwhn2avcsprw6ncd203qhra3i8mvn10r"))))
a7469d16
HG
3835 (outputs '("out" "doc"))
3836 (build-system python-build-system)
3837 (arguments
3838 `(#:phases
3839 (modify-phases %standard-phases
3840 (add-after 'build 'build-doc
3841 (lambda _
3842 (invoke "make" "-C" "docs" "PAPER=a4" "html" "info")
3843 (delete-file "docs/build/texinfo/Makefile")
3844 (delete-file "docs/build/texinfo/Gunicorn.texi")
3845 #t))
3846 (replace 'check
3847 (lambda _
3848 (setenv "PYTHONPATH"
3849 (string-append ".:" (getenv "PYTHONPATH")))
a7469d16
HG
3850 (invoke "pytest")))
3851 (add-after 'install 'install-doc
3852 (lambda* (#:key outputs #:allow-other-keys)
3853 (let* ((doc (string-append (assoc-ref outputs "doc")
3854 "/share/doc/" ,name "-" ,version))
3855 (html (string-append doc "/html"))
3856 (info (string-append doc "/info"))
3857 (examples (string-append doc "/examples")))
3858 (mkdir-p html)
3859 (mkdir-p info)
3860 (mkdir-p examples)
3861 (copy-recursively "docs/build/html" html)
3862 (copy-recursively "docs/build/texinfo" info)
3863 (copy-recursively "examples" examples)
3864 (for-each (lambda (file)
3865 (copy-file file (string-append doc "/" file)))
3866 '("README.rst" "NOTICE" "LICENSE" "THANKS")))
3867 #t)))))
3868 (native-inputs
3869 `(("binutils" ,binutils) ;; for ctypes.util.find_library()
3870 ("python-aiohttp", python-aiohttp)
3871 ("python-pytest" ,python-pytest)
3872 ("python-pytest-cov" ,python-pytest-cov)
3873 ("python-sphinx" ,python-sphinx)
3874 ("texinfo" ,texinfo)))
06dfce79 3875 (home-page "https://gunicorn.org/")
a7469d16
HG
3876 (synopsis "Python WSGI HTTP Server for UNIX")
3877 (description "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
3878Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
3879Unicorn project. The Gunicorn server is broadly compatible with
3880various web frameworks, simply implemented, light on server resources,
3881and fairly speedy.")
3882 (license license:expat)))
18d18ee1 3883
44dbd856
LDB
3884;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
3885;; its tests
3886(define-public gunicorn-bootstrap
3887 (package
3888 (inherit gunicorn)
3889 (name "gunicorn")
f4a2f049
EF
3890 (arguments `(#:tests? #f))
3891 (properties '((hidden? . #t)))
44dbd856
LDB
3892 (native-inputs `())))
3893
18d18ee1
JL
3894(define-public python-translation-finder
3895 (package
3896 (name "python-translation-finder")
3897 (version "1.7")
3898 (source
3899 (origin
3900 (method url-fetch)
3901 (uri (pypi-uri "translation-finder" version))
3902 (sha256
3903 (base32
3904 "1pcy9z8gmb8x41gjhw9x0lkr0d2mv5mdxcs2hwg6q8mxs857j589"))))
3905 (build-system python-build-system)
3906 (arguments
3907 `(#:phases
3908 (modify-phases %standard-phases
3909 (add-before 'build 'remove-failing-test
3910 (lambda _
3911 (delete-file "translation_finder/test_api.py")
3912 #t)))))
3913 (propagated-inputs
3914 `(("python-chardet" ,python-chardet)
3915 ("python-pathlib2" ,python-pathlib2)
3916 ("python-ruamel.yaml" ,python-ruamel.yaml)
3917 ("python-six" ,python-six)))
3918 (native-inputs
3919 `(("python-codecov" ,python-codecov)
3920 ("python-codacy-coverage" ,python-codacy-coverage)
3921 ("python-pytest-cov" ,python-pytest-cov)
3922 ("python-pytest-runner" ,python-pytest-runner)
3923 ("python-twine" ,python-twine)))
3924 (home-page "https://weblate.org/")
3925 (synopsis "Translation file finder for Weblate")
3926 (description "This package provides a function to find translation file in
3927the source code of a project. It supports many translation file formats and
3928is part of the Weblate translation platform.")
3929 (license license:gpl3+)))
ad429e0d
JL
3930
3931(define-public python-gitlab
3932 (package
3933 (name "python-gitlab")
3934 (version "1.15.0")
3935 (source
3936 (origin
3937 (method url-fetch)
3938 (uri (pypi-uri "python-gitlab" version))
3939 (sha256
3940 (base32
3941 "0zl6kz8v8cg1bcy2r78b2snb0lpw0b573gdx2x1ps0nhsh75l4j5"))))
3942 (build-system python-build-system)
3943 (propagated-inputs
3944 `(("python-requests" ,python-requests)
3945 ("python-six" ,python-six)))
3946 (native-inputs
3947 `(("python-httmock" ,python-httmock)
3948 ("python-mock" ,python-mock)))
3949 (home-page
3950 "https://github.com/python-gitlab/python-gitlab")
3951 (synopsis "Interact with GitLab API")
3952 (description "This package provides an extended library for interacting
3953with GitLab instances through their API.")
3954 (license license:lgpl3+)))
0021363d
JK
3955
3956(define-public python-path-and-address
3957 (package
3958 (name "python-path-and-address")
3959 (version "2.0.1")
3960 (source
3961 (origin
3962 ;; The source distributed on PyPI doesn't include tests.
3963 (method git-fetch)
3964 (uri (git-reference
3965 (url "https://github.com/joeyespo/path-and-address")
3966 (commit (string-append "v" version))))
3967 (file-name (git-file-name name version))
3968 (sha256
3969 (base32
3970 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
3971 (build-system python-build-system)
3972 (arguments
3973 `(#:phases
3974 (modify-phases %standard-phases
3975 (replace 'check
3976 (lambda* (#:key inputs outputs #:allow-other-keys)
3977 (add-installed-pythonpath inputs outputs)
3978 (invoke "py.test"))))))
3979 (native-inputs
3980 `(("python-pytest" ,python-pytest)))
3981 (home-page "https://github.com/joeyespo/path-and-address")
3982 (synopsis "Functions for command-line server tools used by humans")
3983 (description "Path-and-address resolves ambiguities of command-line
3984interfaces, inferring which argument is the path, and which is the address.")
3985 (license license:expat)))
52e7bcfd
JK
3986
3987(define-public grip
3988 ;; No release by upstream for quite some time, some bugs fixed since. See:
3989 ;; https://github.com/joeyespo/grip/issues/304
3990 (let ((commit "27a4d6d87ea1d0ea7f7f120de55baabee3de73e3"))
3991 (package
3992 (name "grip")
3993 (version (git-version "4.5.2" "1" commit))
3994 (source
3995 (origin
3996 (method git-fetch)
3997 (uri (git-reference
3998 (url "https://github.com/joeyespo/grip")
3999 (commit commit)))
4000 (file-name (git-file-name name version))
4001 (sha256
4002 (base32
4003 "0kx5hgb3q19i4l18a4vqdq9af390xgpk88lp2ay75qi96k0dc68w"))))
4004 (build-system python-build-system)
4005 (propagated-inputs
4006 `(("python-docopt" ,python-docopt)
4007 ("python-flask" ,python-flask)
4008 ("python-markdown" ,python-markdown)
4009 ("python-path-and-address" ,python-path-and-address)
4010 ("python-pygments" ,python-pygments)
4011 ("python-requests" ,python-requests)))
4012 (native-inputs
4013 `(("python-pytest" ,python-pytest)
4014 ("python-responses" ,python-responses)))
4015 (arguments
4016 `(#:phases
4017 (modify-phases %standard-phases
4018 (replace 'check
4019 (lambda* (#:key inputs outputs #:allow-other-keys)
4020 (add-installed-pythonpath inputs outputs)
4021 (setenv "PATH" (string-append
4022 (getenv "PATH") ":"
4023 (assoc-ref %outputs "out") "/bin"))
4024 (invoke "py.test" "-m" "not assumption"))))))
4025 (home-page "https://github.com/joeyespo/grip")
4026 (synopsis "Preview Markdown files using the GitHub API")
4027 (description "Grip is a command-line server application written in Python
4028that uses the GitHub Markdown API to render a local Markdown file. The styles
4029and rendering come directly from GitHub, so you'll know exactly how it will
4030appear. Changes you make to the file will be instantly reflected in the browser
4031without requiring a page refresh.")
4032 (license license:expat))))
d08782d1
RW
4033
4034(define-public python-port-for
4035 (package
4036 (name "python-port-for")
4037 (version "0.4")
4038 (source
4039 (origin
4040 (method url-fetch)
4041 (uri (pypi-uri "port-for" version))
4042 (sha256
4043 (base32
4044 "1pncxlj25ggw99r0ijfbkq70gd7cbhqdx5ivsxy4jdp0z14cpda7"))))
4045 (build-system python-build-system)
4046 (arguments
4047 `(#:phases
4048 (modify-phases %standard-phases
4049 (add-after 'unpack 'use-urllib3
4050 (lambda _
4051 (substitute* "port_for/_download_ranges.py"
4052 (("urllib2") "urllib3"))
4053 #t)))))
4054 (propagated-inputs
4055 `(("python-urllib3" ,python-urllib3)))
4056 (native-inputs
4057 `(("python-mock" ,python-mock)))
4058 (home-page "https://github.com/kmike/port-for/")
4059 (synopsis "TCP localhost port finder and association manager")
4060 (description
4061 "This package provides a utility that helps with local TCP ports
4062management. It can find an unused TCP localhost port and remember the
4063association.")
4064 (license license:expat)))
d0e0b865
RW
4065
4066(define-public python-livereload
4067 (package
4068 (name "python-livereload")
4069 (version "2.6.1")
4070 (source
4071 (origin
4072 (method url-fetch)
4073 (uri (pypi-uri "livereload" version))
4074 (sha256
4075 (base32
4076 "0rhggz185bxc3zjnfpmhcvibyzi86i624za1lfh7x7ajsxw4y9c9"))))
4077 (build-system python-build-system)
4078 (propagated-inputs
4079 `(("python-six" ,python-six)
4080 ("python-tornado" ,python-tornado)))
4081 (home-page "https://github.com/lepture/python-livereload")
4082 (synopsis "Python LiveReload")
4083 (description
4084 "Python LiveReload provides a command line utility, @command{livereload},
4085for starting a web server in a directory. It can trigger arbitrary commands
4086and serve updated contents upon changes to the directory.")
4087 (license license:bsd-3)))
f1a83356
RN
4088
4089(define-public python-vf-1
4090 (package
4091 (name "python-vf-1")
4092 (version "0.0.11")
4093 (source
4094 (origin
4095 (method url-fetch)
4096 (uri (pypi-uri "VF-1" version))
4097 (sha256
4098 (base32
4099 "0xlqsaxsiayk1sd07kpz8abbcnab582y29a1y4882fq6j4gma5xi"))))
4100 (build-system python-build-system)
4101 (home-page "https://github.com/solderpunk/VF-1")
4102 (synopsis "Command line gopher client")
4103 (description "@code{VF-1} is a command line gopher client with
4104@acronym{TLS, Transport Layer Security} support.")
4105 (license license:bsd-2)))
e91c0cd8
EK
4106
4107(define-public python-websockets
4108 (package
4109 (name "python-websockets")
4110 (version "8.1")
4111 (source
4112 (origin
4113 (method url-fetch)
4114 (uri (pypi-uri "websockets" version))
4115 (sha256
4116 (base32
4117 "03s3ml6sbki24aajllf8aily0xzrn929zxi84p50zkkbikdd4raw"))))
4118 (build-system python-build-system)
4119 (arguments '(#:tests? #f)) ; Tests not included in release tarball.
4120 (home-page "https://github.com/aaugustin/websockets")
4121 (synopsis
4122 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
4123 (description
4124 "@code{websockets} is a library for building WebSocket servers and clients
4125in Python with a focus on correctness and simplicity.
4126
4127Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
4128it provides an elegant coroutine-based API.")
4129 (license license:bsd-3)))
1130e8c8
EK
4130
4131(define-public python-selenium
4132 (package
4133 (name "python-selenium")
4134 (version "3.141.0")
4135 (source
4136 (origin
4137 (method url-fetch)
4138 (uri (pypi-uri "selenium" version))
4139 (sha256
4140 (base32
4141 "039hf9knvl4s3hp21bzwsp1g5ri9gxsh504dp48lc6nr1av35byy"))))
4142 (build-system python-build-system)
4143 (propagated-inputs
4144 `(("python-urllib3" ,python-urllib3)))
4145 (home-page
4146 "https://github.com/SeleniumHQ/selenium/")
4147 (synopsis "Python bindings for Selenium")
4148 (description "Selenium enables web browser automation.
4149Selenium specifically provides infrastructure for the W3C WebDriver specification
4150— a platform and language-neutral coding interface compatible with all
4151major web browsers.")
4152 (license license:asl2.0)))
255a2062
EF
4153
4154(define-public python-rapidjson
4155 (package
4156 (name "python-rapidjson")
4157 (version "0.9.1")
4158 (source
4159 (origin
4160 (method url-fetch)
4161 (uri (pypi-uri "python-rapidjson" version))
4162 (sha256
4163 (base32
4164 "18cl2dhx3gds5vg52jxmh9wjlbiy8dx06c3n482rfpdi9dzbv05d"))
4165 (modules '((guix build utils)))
4166 (snippet
4167 '(begin (delete-file-recursively "rapidjson") #t))))
4168 (build-system python-build-system)
4169 (arguments
4170 `(#:configure-flags
4171 (list (string-append "--rj-include-dir="
4172 (assoc-ref %build-inputs "rapidjson")
4173 "/include/rapidjson"))
4174 #:phases
4175 (modify-phases %standard-phases
4176 (replace 'build
4177 (lambda* (#:key inputs #:allow-other-keys)
4178 (invoke "python" "setup.py" "build"
4179 (string-append "--rj-include-dir="
4180 (assoc-ref %build-inputs "rapidjson")
4181 "/include/rapidjson"))))
4182 (replace 'check
4183 (lambda* (#:key inputs outputs #:allow-other-keys)
4184 (add-installed-pythonpath inputs outputs)
4185 ;; Some tests are broken.
4186 (delete-file "tests/test_base_types.py")
4187 (delete-file "tests/test_validator.py")
4188 (invoke "python" "-m" "pytest" "tests"))))))
4189 (native-inputs
4190 `(("rapidjson" ,rapidjson)
4191 ("python-pytest" ,python-pytest)
4192 ("python-pytz" ,python-pytz)))
4193 (home-page "https://github.com/python-rapidjson/python-rapidjson")
4194 (synopsis "Python wrapper around rapidjson")
4195 (description "This package provides a python wrapper around rapidjson.")
4196 (license license:expat)))
44935b2e
HP
4197
4198(define-public python-venusian
4199 (package
4200 (name "python-venusian")
4201 (version "3.0.0")
4202 (source
4203 (origin
4204 (method url-fetch)
4205 (uri (pypi-uri "venusian" version))
4206 (sha256
4207 (base32 "0f7f67dkgxxcjfhpdd5frb9pszkf04lyzzpn5069q0xi89r2p17n"))))
4208 (build-system python-build-system)
4209 (native-inputs
4210 `(("python-pytest" ,python-pytest)
4211 ("python-runner" ,python-pytest-runner)
4212 ("python-pytest-cov" ,python-pytest-cov)))
4213 (arguments '(#:test-target "pytest"))
4214 (home-page "https://docs.pylonsproject.org/projects/venusian")
4215 (synopsis "Library for defering decorator actions")
4216 (description
4217 "Venusian is a library which allows framework authors to defer decorator
4218actions. Instead of taking actions when a function (or class) decorator is
4219executed at import time, you can defer the action usually taken by the
4220decorator until a separate scan phase.")
4221 (license license:repoze)))
a9daf35c
HP
4222
4223(define-public python-zope-deprecation
4224 (package
4225 (name "python-zope-deprecation")
4226 (version "4.4.0")
4227 (source (origin
4228 (method url-fetch)
4229 (uri (pypi-uri "zope.deprecation" version))
4230 (sha256
4231 (base32
4232 "1pz2cv7gv9y1r3m0bdv7ks1alagmrn5msm5spwdzkb2by0w36i8d"))))
4233 (build-system python-build-system)
4234 (native-inputs `())
4235 (propagated-inputs `())
4236 (home-page "https://zopedeprecation.readthedocs.io/")
4237 (synopsis "Function for marking deprecations")
4238 (description "The @code{zope.deprecation} module provides a function for
4239marking modules, classes, functions, methods and properties as deprecated,
4240displaying warnings when usaged in application code.")
4241 (license license:zpl2.1)))
c557ae13
HP
4242
4243(define-public python-translationstring
4244 (package
4245 (name "python-translationstring")
4246 (version "1.3")
4247 (source (origin
4248 (method url-fetch)
4249 (uri (pypi-uri "translationstring" version))
4250 (sha256
4251 (base32
4252 "0bdpcnd9pv0131dl08h4zbcwmgc45lyvq3pa224xwan5b3x4rr2f"))))
4253 (build-system python-build-system)
4254 (home-page "http://docs.pylonsproject.org/projects/translationstring")
4255 (synopsis "Internationalization tooling for the Pylons project")
4256 (description "This package provides a library used by various Pylons
4257project packages for internationalization (i18n) duties related to
4258translation.")
4259 (license license:repoze)))
79ddf25b
HP
4260
4261(define-public python-plaster
4262 (package
4263 (name "python-plaster")
4264 (version "1.0")
4265 (source (origin
4266 (method url-fetch)
4267 (uri (pypi-uri "plaster" version))
4268 (sha256
4269 (base32
4270 "1hy8k0nv2mxq94y5aysk6hjk9ryb4bsd13g83m60hcyzxz3wflc3"))))
4271 (build-system python-build-system)
4272 (native-inputs
4273 `(("python-pytest" ,python-pytest)))
4274 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
4275 (synopsis "Configuration loader for multiple config file formats")
4276 (description
4277 "Plaster is a loader interface around multiple config file formats. It
4278exists to define a common API for applications to use when they wish to load
4279configuration. The library itself does not aim to handle anything except a
4280basic API that applications may use to find and load configuration settings.
4281Any specific constraints should be implemented in a pluggable loader which can
4282be registered via an entrypoint.")
4283 (license license:repoze)))
804b7722
HP
4284
4285(define-public python-plaster-pastedeploy
4286 (package
4287 (name "python-plaster-pastedeploy")
4288 (version "0.7")
4289 (source (origin
4290 (method url-fetch)
4291 (uri (pypi-uri "plaster_pastedeploy" version))
4292 (sha256
4293 (base32
4294 "1zg7gcsvc1kzay1ry5p699rg2qavfsxqwl17mqxzr0gzw6j9679r"))))
4295 (build-system python-build-system)
4296 (native-inputs
4297 `(("python-pytest" ,python-pytest)))
4298 (propagated-inputs
4299 `(("python-plaster" ,python-plaster)
4300 ("python-pastedeploy" ,python-pastedeploy)))
4301 (home-page "https://github.com/Pylons/plaster_pastedeploy")
4302 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
4303 (description
4304 "This plugin for @code{python-plaster} adds support for PasteDeploy
4305syntax, it provides a plaster @code{Loader} object that can parse ini files
4306according to the standard set by PasteDeploy ")
4307 (license license:expat)))
8bfc0512
HP
4308
4309(define-public python-hupper
4310 (package
4311 (name "python-hupper")
4312 (version "1.10.2")
4313 (source (origin
4314 (method url-fetch)
4315 (uri (pypi-uri "hupper" version))
4316 (sha256
4317 (base32
4318 "0am0p6g5cz6xmcaf04xq8q6dzdd9qz0phj6gcmpsckf2mcyza61q"))))
4319 (build-system python-build-system)
4320 (arguments '(#:test-target "pytest"))
4321 (native-inputs
4322 `(("python-pytest" ,python-pytest)
4323 ("python-pytest-runner" ,python-pytest-runner)
4324 ("python-watchdog" ,python-watchdog)
4325 ("python-mock" ,python-mock)
4326 ("python-pytest-cov" ,python-pytest-cov)))
4327 (propagated-inputs
4328 `(("python-pytz" ,python-pytz)))
4329 (home-page "https://readthedocs.org/projects/hupper")
4330 (synopsis "Integrated process monitor tracking changes to imported Python files")
4331 (description
4332 "Hupper is an integrated process monitor that will track changes to any
4333imported Python files in sys.modules as well as custom paths. When files are
4334changed the process is restarted.")
4335 (license license:expat)))
90f44ee4
HP
4336
4337(define-public python-pyramid
4338 (package
4339 (name "python-pyramid")
4340 (version "1.10.4")
4341 (source (origin
4342 (method url-fetch)
4343 (uri (pypi-uri "pyramid" version))
4344 (sha256
4345 (base32
4346 "0rkxs1ajycg2zh1c94xlmls56mx5m161sn8112skj0amza6cn36q"))))
4347 (build-system python-build-system)
4348 (propagated-inputs
4349 `(("python-hupper" ,python-hupper)
4350 ("python-plaster-pastedeploy" ,python-plaster-pastedeploy)
4351 ("python-translationstring" ,python-translationstring)
4352 ("python-venusian" ,python-venusian)
4353 ("python-webob" ,python-webob)
4354 ("python-zope-deprecation" ,python-zope-deprecation)
4355 ("python-zope-interface" ,python-zope-interface)
4356 ("python-webtest" ,python-webtest)
4357 ("python-zope-component" ,python-zope-component)
4358 ("python-plaster" ,python-plaster)))
4359 (home-page "https://trypyramid.com/")
4360 (synopsis "Python web-framework suitable for small and large sites")
4361 (description
4362 "Pyramid makes it easy to write web applications. From minimal
4363request/response web apps to larger, grown applications.")
4364 (license license:repoze)))
1e3cf9de
EK
4365
4366(define-public python-random-user-agent
4367 (package
4368 (name "python-random-user-agent")
4369 (version "1.0.1")
4370 (source
4371 (origin
4372 (method url-fetch)
4373 (uri (pypi-uri "random_user_agent" version))
4374 (sha256
4375 (base32
4376 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
4377 (build-system python-build-system)
4378 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
4379 (synopsis "List of user agents")
4380 (description
4381 "This package provides a list of user agents, from a collection of more
4382than 326,000 known user-agents. Users can pick a random one, or select one
4383based on filters.")
4384 (license license:expat)))
24297a9a
EK
4385
4386(define-public python-flask-restx
4387 (package
4388 (name "python-flask-restx")
4389 (version "0.2.0")
4390 (source
4391 ;; We fetch from the Git repo because there are no tests in the PyPI
4392 ;; archive.
4393 (origin
4394 (method git-fetch)
4395 (uri (git-reference
4396 (url "https://github.com/python-restx/flask-restx")
4397 (commit version)))
4398 (file-name (git-file-name name version))
4399 (sha256
4400 (base32 "0xf2vkmdngp9cv9klznizai4byxjcf0iqh1pr4b83nann0jxqwy7"))))
4401 (build-system python-build-system)
4402 (propagated-inputs
4403 `(("python-aniso8601" ,python-aniso8601)
4404 ("python-flask" ,python-flask)
4405 ("python-jsonschema" ,python-jsonschema)
4406 ("python-pytz" ,python-pytz)))
4407 (native-inputs
4408 `(("python-blinker" ,python-blinker)
4409 ("python-faker" ,python-faker)
4410 ("python-pytest" ,python-pytest)
4411 ("python-pytest-benchmark"
4412 ,python-pytest-benchmark)
4413 ("python-pytest-flask" ,python-pytest-flask)
4414 ("python-pytest-mock" ,python-pytest-mock)))
4415 (arguments
4416 `(#:phases
4417 (modify-phases %standard-phases
4418 (replace 'check
4419 (lambda _
4420 (invoke "pytest" "--benchmark-skip" "-k"
4421 ;; Those tests need internet access
4422 "not test_check and not test_valid_value_check"))))))
4423 (home-page "https://github.com/python-restx/flask-restx")
4424 (synopsis
4425 "Framework for fast, easy and documented API development with Flask")
4426 (description
4427 "Flask-RESTX is an extension for Flask that adds support for quickly building
4428REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
4429 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
4430decorators and tools to describe your API and expose its documentation properly using
4431Swagger.")
4432 (license license:bsd-3)))
b5635267
EF
4433
4434(define-public python-manuel
4435 (package
4436 (name "python-manuel")
4437 (version "1.10.1")
4438 (source
4439 (origin
4440 (method url-fetch)
4441 (uri (pypi-uri "manuel" version))
4442 (sha256
4443 (base32
4444 "1bdzay7j70fly5fy6wbdi8fbrxjrrlxnxnw226rwry1c8a351rpy"))))
4445 (build-system python-build-system)
4446 (propagated-inputs
4447 `(("python-six" ,python-six)))
4448 (native-inputs
4449 `(("python-zope-testing" ,python-zope-testing)))
4450 (home-page "https://pypi.org/project/manuel/")
4451 (synopsis "Build tested documentation")
4452 (description
4453 "Manuel lets you mix and match traditional doctests with custom test syntax.")
4454 (license license:asl2.0)))
54b040a3
EF
4455
4456(define-public python-persistent
4457 (package
4458 (name "python-persistent")
4459 (version "4.6.4")
4460 (source
4461 (origin
4462 (method url-fetch)
4463 (uri (pypi-uri "persistent" version))
4464 (sha256
4465 (base32
4466 "0imm9ji03lhkpcfmhid7x5209ix8g2rlgki9ik1qxks4b8sm8gzq"))))
4467 (build-system python-build-system)
4468 (propagated-inputs
4469 `(("python-cffi" ,python-cffi)
4470 ("python-zope-interface" ,python-zope-interface)))
4471 (native-inputs
4472 `(("python-manuel" ,python-manuel)
4473 ("python-zope-testrunner" ,python-zope-testrunner)))
4474 (home-page "https://github.com/zopefoundation/persistent/")
4475 (synopsis "Translucent persistent objects")
4476 (description "This package contains a generic persistence implementation for
4477Python. It forms the core protocol for making objects interact
4478\"transparently\" with a database such as the ZODB.")
4479 (license license:zpl2.1)))
79c36951
EF
4480
4481(define-public python-btrees
4482 (package
4483 (name "python-btrees")
4484 (version "4.7.2")
4485 (source
4486 (origin
4487 (method url-fetch)
4488 (uri (pypi-uri "BTrees" version))
4489 (sha256
4490 (base32
4491 "0iiq0g9k1g6qgqq84q9h6639vlvzznk1rgdm0rfcnnqkbkmsbr3w"))))
4492 (build-system python-build-system)
4493 (propagated-inputs
4494 `(("python-persistent" ,python-persistent)
4495 ("python-zope-interface" ,python-zope-interface)))
4496 (native-inputs
4497 `(("python-persistent" ,python-persistent)
4498 ("python-transaction" ,python-transaction)
4499 ("python-zope-testrunner" ,python-zope-testrunner)))
4500 (home-page "https://github.com/zopefoundation/BTrees")
4501 (synopsis "Scalable persistent object containers")
4502 (description
4503 "This package contains a set of persistent object containers built around a
4504modified BTree data structure. The trees are optimized for use inside ZODB's
4505\"optimistic concurrency\" paradigm, and include explicit resolution of
4506conflicts detected by that mechanism.")
4507 (license license:zpl2.1)))
7d55bc5e
EF
4508
4509(define-public python-transaction
4510 (package
4511 (name "python-transaction")
4512 (version "3.0.0")
4513 (source
4514 (origin
4515 (method url-fetch)
4516 (uri (pypi-uri "transaction" version))
4517 (sha256
4518 (base32
4519 "0bdaks31bgfh78wnj3sij24bfysmqk25crsis6amz8kzrc0d82iv"))))
4520 (build-system python-build-system)
4521 (propagated-inputs
4522 `(("python-zope-interface" ,python-zope-interface)))
4523 (native-inputs
4524 `(("python-coverage" ,python-coverage)
4525 ("python-mock" ,python-mock)
4526 ("python-nose" ,python-nose)))
4527 (home-page "https://github.com/zopefoundation/transaction")
4528 (synopsis "Transaction management for Python")
4529 (description "This package contains a generic transaction implementation
4530for Python. It is mainly used by the ZODB.")
4531 (license license:zpl2.1)))
97a01170
EF
4532
4533(define-public python-robot-detection
4534 (package
4535 (name "python-robot-detection")
4536 (version "0.4")
4537 (source
4538 (origin
4539 (method url-fetch)
4540 (uri (pypi-uri "robot-detection" version))
4541 (sha256
4542 (base32
4543 "1xd2jm3yn31bnk1kqzggils2rxj26ylxsfz3ap7bhr3ilhnbg3rx"))))
4544 (build-system python-build-system)
4545 (arguments '(#:tests? #f)) ; Tests not shipped in pypi release.
4546 (propagated-inputs `(("python-six" ,python-six)))
4547 (home-page "https://github.com/rory/robot-detection")
4548 (synopsis "Detect web crawlers")
4549 (description
4550 "@code{robot_detection} is a python module to detect if a given HTTP User
4551Agent is a web crawler. It uses the list of registered robots from
4552@url{http://www.robotstxt.org}.")
4553 (license license:gpl3+)))
88b2c1aa
EF
4554
4555(define-public python-pysolr
4556 (package
4557 (name "python-pysolr")
4558 (version "3.9.0")
4559 (source
4560 (origin
4561 (method url-fetch)
4562 (uri (pypi-uri "pysolr" version))
4563 (sha256
4564 (base32
4565 "1rj5jmscvxjwcmlfi6hmkj44l4x6n3ln5p7d8d18j566hzmmzw3f"))))
4566 (build-system python-build-system)
4567 (arguments
4568 '(#:tests? #f)) ; Tests require network access.
4569 (propagated-inputs
4570 `(("python-requests" ,python-requests)))
4571 (native-inputs
4572 `(("python-setuptools-scm" ,python-setuptools-scm)))
4573 (home-page "https://github.com/django-haystack/pysolr/")
4574 (synopsis "Lightweight python wrapper for Apache Solr")
4575 (description
4576 "This module provides an interface that queries the Apache Solr server
4577using a pure Python implementation.")
4578 (license license:bsd-3)))
ab8c707d
EF
4579
4580(define-public python-http-ece
4581 (package
4582 (name "python-http-ece")
4583 (version "1.1.0")
4584 (source
4585 (origin
4586 (method git-fetch)
4587 (uri (git-reference
4588 (url "https://github.com/web-push-libs/encrypted-content-encoding")
4589 (commit (string-append "v" version))))
4590 (file-name (git-file-name name version))
4591 (sha256
4592 (base32
4593 "0bp4cc0xc123i72h80ax3qz3ixfwx3j7pw343kc7i6kdvfi8klx7"))))
4594 (build-system python-build-system)
4595 (arguments
4596 `(#:phases
4597 (modify-phases %standard-phases
4598 (add-after 'unpack 'change-directory
4599 (lambda _ (chdir "python") #t)))))
4600 (propagated-inputs
4601 `(("python-cryptography" ,python-cryptography)))
4602 (native-inputs
4603 `(("python-coverage" ,python-coverage)
4604 ("python-flake8" ,python-flake8)
4605 ("python-mock" ,python-mock)
4606 ("python-nose" ,python-nose)))
4607 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
4608 (synopsis "Encrypted Content Encoding for HTTP")
4609 (description
4610 "This package provices a simple implementation of Encrypted Content
4611Encoding for HTTP.")
4612 (license license:expat)))