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