projects/guix·blob version-1.4.0 · refs

8133 lines · 292.4 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Christopher Baines <[email protected]>
5;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
6;;; Copyright © 2013, 2014, 2015, 2016, 2020 Andreas Enge <[email protected]>
7;;; Copyright © 2016, 2017, 2019-2022 Marius Bakke <[email protected]>
8;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <[email protected]>
9;;; Copyright © 2017, 2021 Roel Janssen <[email protected]>
10;;; Copyright © 2016, 2017, 2020 Julien Lepiller <[email protected]>
11;;; Copyright © 2016, 2017 Nikita <[email protected]>
12;;; Copyright © 2014, 2017, 2021 Eric Bavier <[email protected]>
13;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
14;;; Copyright © 2015 Cyril Roelandt <[email protected]>
15;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
16;;; Copyright © 2016, 2019, 2022 Hartmut Goebel <[email protected]>
17;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <[email protected]>
18;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
19;;; Copyright © 2015, 2016 Christine Lemmer-Webber <[email protected]>
20;;; Copyright © 2017 Adriano Peluso <[email protected]>
21;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
22;;; Copyright © 2016 David Craven <[email protected]>
23;;; Copyright © 2017 Oleg Pykhalov <[email protected]>
24;;; Copyright © 2015, 2016 David Thompson <[email protected]>
25;;; Copyright © 2017 Mark Meyer <[email protected]>
26;;; Copyright © 2018 Tomáš Čech <[email protected]>
27;;; Copyright © 2018, 2019, 2021 Nicolas Goaziou <[email protected]>
28;;; Copyright © 2018 Mathieu Othacehe <[email protected]>
29;;; Copyright © 2018, 2020, 2021, 2022 Maxim Cournoyer <[email protected]>
30;;; Copyright © 2019 Vagrant Cascadian <[email protected]>
31;;; Copyright © 2019 Brendan Tildesley <[email protected]>
32;;; Copyright © 2019 Pierre Langlois <[email protected]>
33;;; Copyright © 2019, 2020 Tanguy Le Carrour <[email protected]>
34;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
35;;; Copyright © 2020 Evan Straw <[email protected]>
36;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
37;;; Copyright © 2020 Holger Peters <[email protected]>
38;;; Copyright © 2020 Noisytoot <[email protected]>
39;;; Copyright © 2020 Edouard Klein <[email protected]>
40;;; Copyright © 2020, 2021, 2022 Vinicius Monego <[email protected]>
41;;; Copyright © 2020 Konrad Hinsen <[email protected]>
42;;; Copyright © 2020, 2022 Giacomo Leidi <[email protected]>
43;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
44;;; Copyright © 2021 Greg Hogan <[email protected]>
45;;; Copyright © 2021 Maxime Devos <[email protected]>
46;;; Copyright © 2021 Pradana Aumars <[email protected]>
47;;; Copyright © 2021, 2022 Arun Isaac <[email protected]>
48;;; Copyright © 2021, 2022 jgart <[email protected]>
49;;; Copyright © 2021 Alice Brenon <[email protected]>
50;;; Copyright © 2022 John Kehayias <[email protected]>
51;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email protected]>
52;;; Copyright © 2022 Felix Gruber <[email protected]>
53;;; Copyright © 2022 Peter Polidoro <[email protected]>
54;;; Copyright © 2022 Antero Mejr <[email protected]>
55;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
56;;; Copyright © 2022 Nicolas Graves <[email protected]>
57;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
58;;; Copyright © 2022 msimonin <[email protected]>
59;;; Copyright © 2022 Michael Rohleder <[email protected]>
60;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
61;;;
62;;; This file is part of GNU Guix.
63;;;
64;;; GNU Guix is free software; you can redistribute it and/or modify it
65;;; under the terms of the GNU General Public License as published by
66;;; the Free Software Foundation; either version 3 of the License, or (at
67;;; your option) any later version.
68;;;
69;;; GNU Guix is distributed in the hope that it will be useful, but
70;;; WITHOUT ANY WARRANTY; without even the implied warranty of
71;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
72;;; GNU General Public License for more details.
73;;;
74;;; You should have received a copy of the GNU General Public License
75;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
76
77(define-module (gnu packages python-web)
78 #:use-module (guix packages)
79 #:use-module (guix download)
80 #:use-module (guix git-download)
81 #:use-module (guix build-system copy)
82 #:use-module (guix build-system pyproject)
83 #:use-module (guix build-system python)
84 #:use-module (guix gexp)
85 #:use-module (guix utils)
86 #:use-module (gnu packages)
87 #:use-module (gnu packages admin)
88 #:use-module (gnu packages base)
89 #:use-module (gnu packages bash)
90 #:use-module (gnu packages check)
91 #:use-module (gnu packages compression)
92 #:use-module (gnu packages curl)
93 #:use-module (gnu packages databases)
94 #:use-module (gnu packages django)
95 #:use-module (gnu packages freedesktop)
96 #:use-module (gnu packages gnupg)
97 #:use-module (gnu packages graphviz)
98 #:use-module (gnu packages groff)
99 #:use-module (gnu packages libevent)
100 #:use-module (gnu packages libffi)
101 #:use-module (gnu packages node)
102 #:use-module (gnu packages openstack)
103 #:use-module (gnu packages pcre)
104 #:use-module (gnu packages protobuf)
105 #:use-module (gnu packages pkg-config)
106 #:use-module (gnu packages python)
107 #:use-module (gnu packages python-build)
108 #:use-module (gnu packages python-check)
109 #:use-module (gnu packages python-crypto)
110 #:use-module (gnu packages python-science)
111 #:use-module (gnu packages python-xyz)
112 #:use-module (gnu packages qt)
113 #:use-module (gnu packages rdf)
114 #:use-module (gnu packages rpc)
115 #:use-module (gnu packages serialization)
116 #:use-module (gnu packages sphinx)
117 #:use-module (gnu packages texinfo)
118 #:use-module (gnu packages tls)
119 #:use-module (gnu packages time)
120 #:use-module (gnu packages web)
121 #:use-module (gnu packages xml)
122 #:use-module ((guix licenses) #:prefix license:)
123 #:use-module (srfi srfi-1))
124
125(define-public python-lazr-restfulclient
126 (package
127 (name "python-lazr-restfulclient")
128 (version "0.14.4")
129 (source
130 (origin
131 (method url-fetch)
132 (uri (pypi-uri "lazr.restfulclient" version))
133 (sha256
134 (base32 "11yhlqmdf2cqbdfzn8gdmzvmcivh4fflr18zf412sflvfjrdc3xz"))))
135 (build-system python-build-system)
136 ;; Disable the test suite to avoid the lazr.authentication requirement,
137 ;; which requires the ancient 'oauth', a Python 2 only library.
138 (arguments (list #:tests? #f))
139 (propagated-inputs
140 (list python-distro
141 python-httplib2
142 python-oauthlib
143 python-wadllib))
144 (home-page "https://launchpad.net/lazr.restfulclient")
145 (synopsis "Web client Python library extending wadlib")
146 (description "This package provides a programmable client library that
147adds functionality on top of @code{wadlib}.")
148 (license license:lgpl3+)))
149
150(define-public python-launchpadlib
151 (package
152 (name "python-launchpadlib")
153 (version "1.10.16")
154 (source
155 (origin
156 (method url-fetch)
157 (uri (pypi-uri "launchpadlib" version))
158 (sha256
159 (base32 "106aixwchwyb100wlf4cnj1vgsi2d7x40ps8xv8az27r6qwv3x0d"))))
160 (build-system python-build-system)
161 (arguments
162 (list #:phases #~(modify-phases %standard-phases
163 (add-before 'check 'set-home
164 (lambda _
165 ;; Tests require a writable home.
166 (setenv "HOME" "/tmp"))))))
167 (propagated-inputs
168 (list python-httplib2
169 python-keyring
170 python-lazr-restfulclient
171 python-lazr-uri))
172 (native-inputs (list python-mock python-testresources python-wadllib))
173 (home-page "https://help.launchpad.net/API/launchpadlib")
174 (synopsis "Python client library for Launchpad's web service")
175 (description "@code{launchpadlib} is a Python library that allows
176scripting Launchpad via its the web service API.")
177 (license license:lgpl3+)))
178
179(define-public python-lazr-uri
180 (package
181 (name "python-lazr-uri")
182 (version "1.0.6")
183 (source
184 (origin
185 (method url-fetch)
186 (uri (pypi-uri "lazr.uri" version))
187 (sha256
188 (base32 "0r44rw0bj5mayhqwfwj1dnrjgzj1lrh7ishiddd1vygnrczqa9jh"))))
189 (build-system python-build-system)
190 (native-inputs (list python-zope-testrunner))
191 (home-page "https://launchpad.net/lazr.uri")
192 (synopsis "Python URI manipulation library")
193 (description "This Python package provides a self-contained, easily
194reusable library for parsing, manipulating, and generating URIs.")
195 (license license:lgpl3)))
196
197(define-public python-prawcore
198 (package
199 (name "python-prawcore")
200 (version "2.3.0")
201 (source
202 (origin
203 (method url-fetch)
204 (uri (pypi-uri "prawcore" version))
205 (sha256
206 (base32 "0vgmhjddqxnz5vy70dyqvakak51fg1nk6j3xavkc83d8nzacrwfs"))))
207 (build-system python-build-system)
208 (native-inputs
209 (list python-betamax
210 python-betamax-matchers
211 python-betamax-serializers
212 python-mock
213 python-pytest
214 python-testfixtures))
215 (propagated-inputs
216 (list python-requests))
217 (synopsis "Core component of PRAW")
218 (description "PRAWcore is a low-level communication layer used by PRAW.")
219 (home-page "https://praw.readthedocs.io/en/latest/")
220 (license license:bsd-2)))
221
222(define-public python-praw
223 (package
224 (name "python-praw")
225 (version "7.6.1")
226 (source
227 (origin
228 (method url-fetch)
229 (uri (pypi-uri "praw" version))
230 (sha256
231 (base32 "17pvdlcasr08p5hb1x7shjh8yvn621lzm0bvnwd3b1r1qpzrbz07"))))
232 (build-system python-build-system)
233 (arguments
234 `(#:phases
235 (modify-phases %standard-phases
236 (add-after 'unpack 'disable-failing-tests
237 (lambda _
238 (with-directory-excursion "tests"
239 ;; Integration tests depend on files that are not included.
240 (for-each delete-file-recursively
241 '("integration/models" "unit/models"))
242 ;; The configuration file does not seem to exist.
243 (delete-file "unit/test_config.py"))))
244 (replace 'check
245 (lambda* (#:key tests? #:allow-other-keys)
246 (when tests?
247 (invoke "pytest" "-k"
248 ;; These tests depend on test files that don't exist.
249 (string-append "not test_bad_request_without_json_text_plain_response"
250 " and not test_bad_request_without_json_text_html_response"))))))))
251 (native-inputs
252 (list python-betamax python-betamax-matchers python-pytest))
253 (propagated-inputs
254 (list python-prawcore python-update-checker python-websocket-client))
255 (synopsis "Python Reddit API Wrapper")
256 (description "PRAW is a Python package that allows for simple access to
257Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
258API rules.")
259 (home-page "https://praw.readthedocs.io/en/latest/")
260 (license license:bsd-2)))
261
262(define-public python-frozenlist
263 (package
264 (name "python-frozenlist")
265 (version "1.2.0")
266 (source
267 (origin
268 (method url-fetch)
269 (uri (pypi-uri "frozenlist" version))
270 (sha256
271 (base32 "1pkr23by7pk9lsmsh0wiqirpkq3f1f08b0615nbzysn51bk1n838"))))
272 (build-system python-build-system)
273 (arguments
274 '(#:phases
275 (modify-phases %standard-phases
276 (replace 'check
277 (lambda* (#:key tests? #:allow-other-keys)
278 (when tests?
279 (invoke "pytest" "tests")))))))
280 (native-inputs (list python-pytest))
281 (home-page "https://github.com/aio-libs/frozenlist")
282 (synopsis "List-like data structure for Python")
283 (description "@code{frozenlist.FrozenList} is a list-like structure which
284implements @code{collections.abc.MutableSequence}. It can be made immutable
285by calling @code{FrozenList.freeze}.")
286 (license license:asl2.0)))
287
288(define-public python-aiosignal
289 (package
290 (name "python-aiosignal")
291 (version "1.2.0")
292 (source
293 (origin
294 (method url-fetch)
295 (uri (pypi-uri "aiosignal" version))
296 (sha256
297 (base32 "1wkxbdgw07ay8yzx3pg1jcm46p3d21rfb5g4k17ysz3vdkdngvbq"))))
298 (build-system python-build-system)
299 (arguments
300 '(#:phases
301 (modify-phases %standard-phases
302 (replace 'check
303 (lambda* (#:key tests? #:allow-other-keys)
304 (when tests?
305 (invoke "pytest" "tests")))))))
306 (propagated-inputs (list python-frozenlist))
307 (native-inputs (list python-pytest python-pytest-asyncio))
308 (home-page "https://github.com/aio-libs/aiosignal")
309 (synopsis "Callback manager for Python @code{asyncio} projects")
310 (description "This Python module provides @code{Signal}, an abstraction to
311register asynchronous callbacks. The @code{Signal} abstraction can be used
312for adding, removing and dropping callbacks.")
313 (license license:asl2.0)))
314
315(define-public python-aiohttp
316 (package
317 (name "python-aiohttp")
318 (version "3.8.1")
319 (source
320 (origin
321 (method url-fetch)
322 (uri (pypi-uri "aiohttp" version))
323 (sha256
324 (base32 "0y3m1dzl4h6frg8vys0fc3m83ijd1plfpihv3kvmxqadlphp2m7w"))
325 (snippet
326 #~(begin
327 (use-modules ((guix build utils)))
328 ;; TODO: Unbundle the llhttp sources.
329 ;; (delete-file-recursively "vendor")
330 (delete-file "aiohttp/_helpers.c")
331 (delete-file "aiohttp/_http_parser.c")
332 (delete-file "aiohttp/_http_writer.c")
333 (delete-file "aiohttp/_websocket.c")))))
334 (build-system python-build-system)
335 (arguments
336 '(#:phases
337 (modify-phases %standard-phases
338 (add-after 'unpack 'fix-tests
339 (lambda _
340 ;; disable brotli tests, because we’re not providing that optional library
341 (substitute* "tests/test_http_parser.py"
342 ((" async def test_feed_eof_no_err_brotli")
343 " @pytest.mark.xfail\n async def test_feed_eof_no_err_brotli"))
344 ;; make sure the timestamp of this file is > 1990, because a few
345 ;; tests like test_static_file_if_modified_since_past_date depend on it
346 (let ((late-90s (* 60 60 24 365 30)))
347 (utime "tests/data.unknown_mime_type" late-90s late-90s))
348
349 ;; Disable test that attempts to access httpbin.org.
350 (substitute* "tests/test_formdata.py"
351 (("async def test_mark_formdata_as_processed.*" all)
352 (string-append "@pytest.mark.xfail\n" all)))
353
354 ;; Don't test the aiohttp pytest plugin to avoid a dependency loop.
355 (delete-file "tests/test_pytest_plugin.py")))
356 (add-before 'build 'cythonize
357 (lambda _
358 ;; Adapted from the Makefile.
359 (with-directory-excursion "aiohttp"
360 (for-each
361 (lambda (file)
362 (invoke "cython" "-3"
363 file "-I" "."))
364 (find-files "." "_.*\\.pyx$")))))
365 (replace 'check
366 (lambda* (#:key tests? #:allow-other-keys)
367 (let ((skipped-tests
368 (string-append
369 ;; This test probably requires to be run with the
370 ;; library loaded from the the build directory.
371 "not test_c_parser_loaded and "
372 ;; TODO: These tests fail with recent versions of Pytest
373 ;; and the fix is difficult to backport:
374 ;; https://github.com/aio-libs/aiohttp/pull/6872
375 ;; Re-enable after 3.9.
376 "not test_session_close_awaitable and "
377 "not test_async_with_session and "
378 "not test_close_run_until_complete_not_deprecated and "
379 ;; Disable the following tests as they require
380 ;; networking.
381 "not TestDeflateBuffer and "
382 "not test_client_session_timeout_zero and "
383 "not test_empty_body and "
384 "not test_mark_formdata_as_processed[pyloop] and "
385 "not test_receive_runtime_err[pyloop]")))
386 (when tests?
387 ;; This tests requires the 'proxy.py' module, not yet
388 ;; packaged.
389 (delete-file "tests/test_proxy_functional.py")
390 ;; Sometimes tests fail when run in parallel.
391 (or
392 (invoke "pytest" "-vv"
393 ;; Disable loading the aiohttp coverage plugin
394 ;; to avoid a circular dependency (code coverage
395 ;; is not very interesting to us anyway).
396 "-o" "addopts=''" "--ignore=aiohttp"
397 "-n" (number->string (parallel-job-count))
398 "-k" skipped-tests)
399 (invoke "pytest" "-vv"
400 "-o" "addopts=''" "--ignore=aiohttp"
401 "-k" skipped-tests)))))))))
402 (propagated-inputs
403 (list python-aiodns
404 python-aiosignal
405 python-attrs
406 python-async-timeout
407 python-charset-normalizer
408 python-frozenlist
409 python-idna-ssl
410 python-multidict
411 python-typing-extensions
412 python-yarl))
413 (native-inputs
414 (list gunicorn-bootstrap
415 python-async-generator
416 python-cython
417 python-freezegun
418 python-pytest
419 python-pytest-mock
420 python-pytest-xdist
421 python-re-assert))
422 (home-page "https://github.com/aio-libs/aiohttp/")
423 (synopsis "Async HTTP client/server framework (asyncio)")
424 (description "@code{aiohttp} is an asynchronous HTTP client/server
425framework.
426
427Its main features are:
428@itemize
429@item Supports both client and server side of HTTP protocol.
430@item Supports both client and server Web-Sockets out-of-the-box without the
431Callback Hell.
432@item Web-server has middlewares and pluggable routing.
433@end itemize")
434 (license license:asl2.0)))
435
436(define-public python-aiohttp-socks
437 (package
438 (name "python-aiohttp-socks")
439 (version "0.7.1")
440 (source
441 (origin
442 (method url-fetch)
443 (uri (pypi-uri "aiohttp_socks" version))
444 (sha256
445 (base32
446 "06il43dv6qm858af841vq9qadw6h7qsfs06nnwagmwqyi72cl592"))))
447 (build-system python-build-system)
448 (propagated-inputs
449 (list python-aiohttp python-attrs python-socks))
450 (home-page "https://github.com/romis2012/aiohttp-socks")
451 (synopsis "SOCKS proxy connector for aiohttp")
452 (description "This package provides a SOCKS proxy connector for
453aiohttp. It supports SOCKS4(a) and SOCKS5.")
454 (license license:asl2.0)))
455
456(define-public python-aiodns
457 (package
458 (name "python-aiodns")
459 (version "1.1.1")
460 (source
461 (origin
462 (method url-fetch)
463 (uri (pypi-uri "aiodns" version))
464 (sha256
465 (base32
466 "1snr5paql8dgvc676n8xq460wypjsb1xj53cf3px1s4wczf7lryq"))))
467 (build-system python-build-system)
468 (propagated-inputs
469 (list python-pycares))
470 (arguments
471 `(#:tests? #f)) ;tests require internet access
472 (home-page "https://github.com/saghul/aiodns")
473 (synopsis "Simple DNS resolver for asyncio")
474 (description "@code{aiodns} provides a simple way for doing
475asynchronous DNS resolutions with a synchronous looking interface by
476using @url{https://github.com/saghul/pycares,pycares}.")
477 (license license:expat)))
478
479(define-public python-aiorpcx
480 (package
481 (name "python-aiorpcx")
482 (version "0.22.1")
483 (source
484 (origin
485 (method url-fetch)
486 (uri (pypi-uri "aiorpcX" version))
487 (sha256
488 (base32
489 "0lx54bcinp44fmr8q4bbffsqbkg8kdcwykf9i5jj0bj3sfzgf9k0"))))
490 (build-system python-build-system)
491 (propagated-inputs
492 (list python-attrs))
493 (home-page "https://github.com/kyuupichan/aiorpcX")
494 (synopsis "Generic asyncio RPC implementation")
495 (description
496 "The aiorpcX library is a generic asyncio implementation of RPC suitable
497for an application that is a client, server or both.
498
499The package includes a module with full coverage of JSON RPC versions 1.0 and
5002.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
501comes with a SOCKS proxy client.")
502 (license (list license:expat license:bsd-2))))
503
504(define-public python-aiorpcx-0.18
505 (package
506 (inherit python-aiorpcx)
507 (version "0.18.7")
508 (source
509 (origin
510 (method url-fetch)
511 (uri (pypi-uri "aiorpcX" version))
512 (sha256
513 (base32
514 "1rswrspv27x33xa5bnhrkjqzhv0sknv5kd7pl1vidw9d2z4rx2l0"))))))
515
516(define-public python-asgiref
517 (package
518 (name "python-asgiref")
519 (version "3.4.1")
520 (source (origin
521 (method url-fetch)
522 (uri (pypi-uri "asgiref" version))
523 (sha256
524 (base32 "1saqgpgbdvb8awzm0f0640j0im55hkrfzvcw683cgqw4ni3apwaf"))))
525 (build-system python-build-system)
526 (arguments
527 '(#:phases
528 (modify-phases %standard-phases
529 (replace 'check
530 (lambda* (#:key tests? #:allow-other-keys)
531 (when tests?
532 (invoke "pytest" "-vv")))))))
533 (native-inputs
534 (list python-pytest python-pytest-asyncio))
535 (home-page "https://github.com/django/asgiref/")
536 (synopsis "ASGI specs, helper code, and adapters")
537 (description
538 "ASGI is a standard for Python asynchronous web apps and servers to
539communicate with each other, and positioned as an asynchronous successor to
540WSGI. This package includes libraries for implementing ASGI servers.")
541 (license license:bsd-3)))
542
543(define-public python-css-html-js-minify
544 (package
545 (name "python-css-html-js-minify")
546 (version "2.5.5")
547 (source (origin
548 (method url-fetch)
549 (uri (pypi-uri "css-html-js-minify" version ".zip"))
550 (sha256
551 (base32
552 "0v3l2dqdk2y4r6ax259gs4ij1zzm9yxg6491s6254vs9w3vi37sa"))))
553 (build-system python-build-system)
554 ;; XXX: The git repository has no tags, and the PyPI releases do not
555 ;; contain tests.
556 (arguments '(#:tests? #f))
557 (native-inputs (list unzip))
558 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
559 (synopsis "CSS/HTML/JS minifier")
560 (description
561 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
562 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
563 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
564 ;; looks like the user can choose a license.
565 (license (list license:gpl3+ license:lgpl3+ license:expat))))
566
567(define-public python-aws-sam-translator
568 (package
569 (name "python-aws-sam-translator")
570 (version "1.51.0")
571 (source (origin
572 (method url-fetch)
573 (uri (pypi-uri "aws-sam-translator" version))
574 (sha256
575 (base32
576 "1ywzchc3nk13xh593j7b14qp3y0fdx7cfbdhnm34p39av66xffac"))))
577 (build-system python-build-system)
578 (arguments
579 `(;; XXX: Tests are not distributed with the PyPI archive, and would
580 ;; introduce a circular dependency on python-cfn-lint.
581 #:tests? #f
582 #:phases (modify-phases %standard-phases
583 (add-after 'unpack 'loosen-requirements
584 (lambda _
585 ;; The package needlessly specifies exact versions
586 ;; of dependencies, when it works fine with others.
587 (substitute* "requirements/base.txt"
588 (("(.*)(~=[0-9\\.]+)" all package version)
589 package)))))))
590 (propagated-inputs
591 (list python-boto3 python-jsonschema python-six))
592 (home-page "https://github.com/aws/serverless-application-model")
593 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
594 (description
595 "AWS SAM Translator is a library that transform @dfn{Serverless Application
596Model} (SAM) templates into AWS CloudFormation templates.")
597 (license license:asl2.0)))
598
599(define-public python-aws-xray-sdk
600 (package
601 (name "python-aws-xray-sdk")
602 (version "2.9.0")
603 (home-page "https://github.com/aws/aws-xray-sdk-python")
604 (source (origin
605 (method git-fetch)
606 (uri (git-reference (url home-page) (commit version)))
607 (file-name (git-file-name name version))
608 (sha256
609 (base32
610 "04fyik5axbilj2g9fzhhw8ch8xfn7iai3j6myk7z4g26m1mrhxsi"))))
611 (build-system python-build-system)
612 (arguments
613 `(#:phases (modify-phases %standard-phases
614 (add-after 'unpack 'disable-tests
615 (lambda _
616 (for-each delete-file
617 '(;; These tests require packages not yet in Guix.
618 "tests/ext/aiobotocore/test_aiobotocore.py"
619 "tests/ext/aiohttp/test_middleware.py"
620 "tests/ext/pg8000/test_pg8000.py"
621 "tests/ext/psycopg2/test_psycopg2.py"
622 "tests/ext/pymysql/test_pymysql.py"
623 "tests/ext/pynamodb/test_pynamodb.py"
624 "tests/ext/sqlalchemy_core/test_postgres.py"
625 "tests/test_async_recorder.py"
626
627 ;; FIXME: Why is this failing?
628 "tests/test_patcher.py"
629
630 ;; TODO: How to configure Django for these tests.
631 "tests/ext/django/test_db.py"
632 "tests/ext/django/test_middleware.py"
633 "tests/ext/django/test_settings.py"
634
635 ;; These tests want to access httpbin.org.
636 "tests/ext/requests/test_requests.py"
637 "tests/ext/httplib/test_httplib.py"
638 "tests/ext/aiohttp/test_client.py"))))
639 (replace 'check
640 (lambda _
641 ;; Allow "import tests.utils" to work as expected.
642 (setenv "PYTHONPATH" (getcwd))
643 (invoke "pytest" "-vv" "tests"
644 "-k"
645 ;; These tests fail because "fixture 'benchmark'
646 ;; not found"
647 (string-append
648 "not test_pkgutil_static_read"
649 " and not test_pkg_resources_static_read")))))))
650 (native-inputs
651 (list ;; These are required for the test suite.
652 python-bottle
653 python-flask
654 python-flask-sqlalchemy
655 python-pymysql
656 python-pytest
657 python-pytest-aiohttp
658 python-requests
659 python-sqlalchemy
660 python-webtest))
661 (propagated-inputs
662 (list python-aiohttp
663 python-botocore
664 python-future
665 python-jsonpickle
666 python-urllib3
667 python-wrapt))
668 (synopsis "Profile applications on AWS X-Ray")
669 (description
670 "The AWS X-Ray SDK for Python enables Python developers to record and
671emit information from within their applications to the AWS X-Ray service.")
672 (license license:asl2.0)))
673
674(define-public python-cbor2
675 (package
676 (name "python-cbor2")
677 (version "5.4.2.post1")
678 (source
679 (origin
680 (method url-fetch)
681 (uri (pypi-uri "cbor2" version))
682 (sha256
683 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
684 (build-system python-build-system)
685 (arguments
686 (list
687 #:phases
688 #~(modify-phases %standard-phases
689 (replace 'check
690 (lambda* (#:key tests? #:allow-other-keys)
691 (when tests?
692 (invoke "pytest" "-vv")))))))
693 (native-inputs (list python-pytest python-pytest-cov python-setuptools-scm))
694 (home-page "https://github.com/agronholm/cbor2")
695 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
696 (description "This Python library provides encoding and decoding for the
697Concise Binary Object
698Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
6998949}) serialization format. The specification is fully compatible with the
700original RFC 7049. Among its features are:
701@itemize
702@item Simple API like the @code{json} or @code{pickle} modules.
703@item Support many CBOR tags with stdlib objects.
704@item Generic tag decoding.
705@item Shared value references including cyclic references.
706@item String references compact encoding with repeated strings replaced with
707indices.
708@item Optional C module backend tested on big- and little-endian architectures.
709@item Extensible tagged value handling using tag_hook and object_hook on
710decode and default on encode.
711@end itemize")
712 (license license:expat)))
713
714(define-public python-cfn-lint
715 (package
716 (name "python-cfn-lint")
717 (version "0.65.0")
718 (home-page "https://github.com/aws-cloudformation/cfn-lint")
719 (source (origin
720 (method git-fetch)
721 (uri (git-reference
722 (url home-page)
723 (commit (string-append "v" version))))
724 (file-name (git-file-name name version))
725 (sha256
726 (base32
727 "1rfacp39jssrbchrzb49vwrqyzhx5v7jfcgngqnb9r7qfs4bwi3w"))))
728 (build-system python-build-system)
729 (arguments
730 `(#:phases
731 (modify-phases %standard-phases
732 (add-after 'unpack 'skip-network-test
733 (lambda _
734 ;; This test requires networking.
735 (substitute* "test/unit/module/formatters/test_formatters.py"
736 (("def test_sarif_formatter") "def _test_sarif_formatter"))))
737 (replace 'check
738 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
739 (when tests?
740 (let ((out (assoc-ref outputs "out")))
741 ;; Remove test for the documentation update scripts
742 ;; to avoid a dependency on 'git'.
743 (delete-file
744 "test/unit/module/maintenance/test_update_documentation.py")
745 (delete-file
746 "test/unit/module/maintenance/test_update_resource_specs.py")
747 (add-installed-pythonpath inputs outputs)
748 (setenv "PATH" (string-append out "/bin:"
749 (getenv "PATH")))
750 (invoke "python" "-m" "unittest" "discover"
751 "-s" "test"))))))))
752 (native-inputs
753 (list python-pydot python-mock))
754 (propagated-inputs
755 (list python-aws-sam-translator
756 python-importlib-resources
757 python-jschema-to-python
758 python-jsonpatch
759 python-jsonschema
760 python-junit-xml
761 python-networkx
762 python-pyyaml
763 python-sarif-om
764 python-six))
765 (synopsis "Validate CloudFormation templates")
766 (description
767 "This package lets you validate CloudFormation YAML/JSON templates against
768the CloudFormation spec and additional checks. Includes checking valid values
769for resource properties and best practices.")
770 (license license:expat)))
771
772(define-public python-jschema-to-python
773 (package
774 (name "python-jschema-to-python")
775 (version "1.2.3")
776 (source (origin
777 (method url-fetch)
778 (uri (pypi-uri "jschema_to_python" version))
779 (sha256
780 (base32
781 "14cvaiwm56g0v6p7zviikaa5i9ln3yqy910jmp60hirhbpz19zvn"))))
782 (build-system python-build-system)
783 (propagated-inputs (list python-attrs python-jsonpickle python-pbr))
784 (native-inputs (list python-pytest))
785 (home-page "https://github.com/microsoft/jschema-to-python")
786 (synopsis "Generate Python classes from a JSON schema")
787 (description "This package generates source code for Python classes from a
788@url{http://jschema.org,JSchema} JSON schema.")
789 (license license:expat)))
790
791(define-public python-sarif-om
792 (package
793 (name "python-sarif-om")
794 (version "1.0.4")
795 (source (origin
796 (method url-fetch)
797 (uri (pypi-uri "sarif_om" version))
798 (sha256
799 (base32
800 "167gb8xjm0310km3w1s12bqldbv7zyklkr4j5900vq4361ml2pyd"))))
801 (build-system python-build-system)
802 (propagated-inputs (list python-attrs))
803 (native-inputs (list python-pbr))
804 (home-page "https://github.com/microsoft/sarif-python-om")
805 (synopsis "Python implementation of the SARIF 2.1.0 object model")
806 (description "This module contains classes for the object model defined
807by the @url{https://sarifweb.azurewebsites.net,Static Analysis Results
808Interchange Format (SARIF)} file format.")
809 (license license:expat)))
810
811(define-public python-falcon
812 (package
813 (name "python-falcon")
814 (version "3.1.0")
815 (source
816 (origin
817 ;; Use git, as there are some test files missing from the PyPI release,
818 ;; such as 'examples' directory.
819 (method git-fetch)
820 (uri (git-reference
821 (url "https://github.com/falconry/falcon")
822 (commit version)))
823 (file-name (git-file-name name version))
824 (modules '((guix build utils)))
825 (snippet
826 '(begin
827 (delete-file-recursively "falcon/vendor")
828 (substitute* "setup.py"
829 ((".*falcon\\.vendor\\.mimeparse.*") ""))
830 (substitute* '("falcon/media/handlers.py"
831 "falcon/request.py"
832 "tests/test_deps.py")
833 (("from falcon\\.vendor ") "")
834 (("mimeparse.mimeparse") "mimeparse"))))
835 (sha256
836 (base32
837 "17k31d8avl63xsr6fzvmkxcsm7gnz5dqpgsz65psm1lpc38c79k3"))))
838 (build-system python-build-system)
839 (arguments
840 `(#:phases
841 (modify-phases %standard-phases
842 (replace 'check
843 (lambda* (#:key inputs outputs #:allow-other-keys)
844 ;; Skip orjson, which requires rust to build.
845 (substitute* "tests/test_media_handlers.py"
846 (("== 'CPython") "!= 'CPython"))
847 (setenv "HOME" "/tmp")
848 (invoke "pytest" "-vv" "tests"))))))
849 (propagated-inputs
850 (list python-mimeparse))
851 (native-inputs
852 (list python-aiofiles
853 python-cbor2
854 python-cython ;for faster binaries
855 python-fakeredis
856 python-httpx
857 python-mujson
858 python-msgpack
859 python-pecan
860 python-pillow
861 python-pytest
862 python-pytest-asyncio
863 python-pytest-runner
864 python-pyyaml
865 python-rapidjson
866 python-requests
867 python-testtools
868 python-ujson
869 python-websockets))
870 (home-page "https://falconframework.org")
871 (synopsis "Web framework for building APIs and application backends")
872 (description "Falcon is a web API framework for building microservices,
873application backends and higher-level frameworks. Among its features are:
874@itemize
875@item Optimized and extensible code base
876@item Routing via URI templates and REST-inspired resource
877classes
878@item Access to headers and bodies through request and response
879classes
880@item Request processing via middleware components and hooks
881@item Idiomatic HTTP error responses
882@item Straightforward exception handling
883@item Unit testing support through WSGI helpers and mocks
884@item Compatible with both CPython and PyPy
885@item Cython support for better performance when used with CPython
886@end itemize")
887 (license license:asl2.0)))
888
889(define-public python-falcon-cors
890 (package
891 (name "python-falcon-cors")
892 (version "1.1.7")
893 (source
894 (origin
895 (method url-fetch)
896 (uri (pypi-uri "falcon-cors" version))
897 (sha256
898 (base32
899 "12pym7hwsbd8b0c1azn95nas8gm3f1qpr6lpyx0958xm65ffr20p"))))
900 (build-system python-build-system)
901 (native-inputs
902 (list python-falcon))
903 (home-page
904 "https://github.com/lwcolton/falcon-cors")
905 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
906 (description "This middleware provides @dfn{cross-origin resource
907sharing} (CORS) support for Falcon. It allows applying a specially crafted
908CORS object to the incoming requests, enabling the ability to serve resources
909over a different origin than that of the web application.")
910 (license license:asl2.0)))
911
912(define-public python-furl
913 (package
914 (name "python-furl")
915 (version "2.1.3")
916 (source
917 (origin
918 (method url-fetch)
919 (uri (pypi-uri "furl" version))
920 (sha256
921 (base32
922 "0knc76pm8pzigs3bpx9fccfsfxqrgblqphar46hq9i364vz8hqas"))))
923 (build-system python-build-system)
924 (propagated-inputs
925 (list python-six python-orderedmultidict))
926 (native-inputs
927 (list python-flake8))
928 (home-page "https://github.com/gruns/furl")
929 (synopsis "URL manipulation in Python")
930 (description "Furl provides an easy-to-use alternative to the
931@code{urllib} and @code{urlparse} modules for manipulating URLs.")
932 (license license:unlicense)))
933
934(define-public python-httplib2
935 (package
936 (name "python-httplib2")
937 (version "0.9.2")
938 (source
939 (origin
940 (method url-fetch)
941 (uri (pypi-uri "httplib2" version))
942 (sha256
943 (base32
944 "126rsryvw9vhbf3qmsfw9lf4l4xm2srmgs439lgma4cpag4s3ay3"))))
945 (build-system python-build-system)
946 (home-page "https://github.com/jcgregorio/httplib2")
947 (synopsis "Comprehensive HTTP client library")
948 (description
949 "A comprehensive HTTP client library supporting many features left out of
950other HTTP libraries.")
951 (license license:expat)))
952
953(define-public httpie
954 (package
955 (name "httpie")
956 (version "3.2.1")
957 (source
958 (origin
959 (method url-fetch)
960 (uri (pypi-uri "httpie" version))
961 (sha256
962 (base32
963 "1v736y2h7lcyrnxs9y5sf4xwzgll7pc2s6r3ny929mm8lcn07h69"))))
964 (build-system python-build-system)
965 (arguments
966 ;; The tests attempt to access external web servers, so we cannot run them.
967 '(#:tests? #f))
968 (propagated-inputs
969 (list python-colorama
970 python-pygments
971 python-requests
972 python-requests-toolbelt
973 python-pysocks
974 python-charset-normalizer
975 python-defusedxml
976 python-rich
977 python-multidict))
978 (home-page "https://httpie.io")
979 (synopsis "cURL-like tool for humans")
980 (description
981 "A command line HTTP client with an intuitive UI, JSON support,
982syntax highlighting, wget-like downloads, plugins, and more. It consists of
983a single http command designed for painless debugging and interaction with
984HTTP servers, RESTful APIs, and web services.")
985 ;; This was fixed in 1.0.3.
986 (properties `((lint-hidden-cve . ("CVE-2019-10751"))))
987 (license license:bsd-3)))
988
989(define-public parfive
990 (package
991 (name "parfive")
992 (version "2.0.1")
993 (source (origin
994 (method url-fetch)
995 (uri (pypi-uri "parfive" version))
996 (sha256
997 (base32
998 "19dcbb6g56l5s3ih0bhs3p4acgc0gf4zdzpj4w87m69li2nhmgpx"))))
999 (build-system python-build-system)
1000 (arguments
1001 (list #:phases #~(modify-phases %standard-phases
1002 (add-before 'check 'disable-test-requiring-network
1003 (lambda _
1004 (substitute* "parfive/tests/test_downloader.py"
1005 (("def test_ftp")
1006 "def __off_test_ftp"))))
1007 (replace 'check
1008 (lambda* (#:key tests? #:allow-other-keys)
1009 (when tests?
1010 (invoke "python" "-m" "pytest" "-vvv" "parfive")))))))
1011 (propagated-inputs (list python-aiofiles python-aioftp python-aiohttp
1012 python-tqdm))
1013 (native-inputs (list python-pytest
1014 python-pytest-asyncio
1015 python-pytest-cov
1016 python-pytest-localserver
1017 python-pytest-socket
1018 python-setuptools-scm))
1019 (home-page "https://parfive.readthedocs.io/")
1020 (synopsis "HTTP and FTP parallel file downloader")
1021 (description
1022 "This package provides CLI tool and Python library @code{parallel} file
1023downloader using asyncio. parfive can handle downloading multiple files in
1024parallel as well as downloading each file in a number of chunks.
1025
1026asciicast demo of parfive parfive works by creating a downloader object,
1027appending files to it and then running the download. parfive has a synchronous
1028API, but uses asyncio to paralellise downloading the files.")
1029 (license license:expat)))
1030
1031(define-public python-html2text
1032 (package
1033 (name "python-html2text")
1034 (version "2020.1.16")
1035 (source
1036 (origin
1037 (method url-fetch)
1038 (uri (pypi-uri "html2text" version))
1039 (sha256
1040 (base32
1041 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
1042 (build-system python-build-system)
1043 (arguments
1044 '(#:phases
1045 (modify-phases %standard-phases
1046 (replace 'check
1047 (lambda _
1048 (invoke "pytest" "test/"))))))
1049 (native-inputs
1050 (list python-pytest))
1051 (home-page "https://github.com/Alir3z4/html2text")
1052 (synopsis "Convert HTML into plain text")
1053 (description "html2text takes HTML and converts it into plain ASCII text
1054which is also valid markdown. html2text was originally written by Aaron
1055Swartz.")
1056 (license license:gpl3+)))
1057
1058(define-public python-jose
1059 (package
1060 (name "python-jose")
1061 (version "3.3.0")
1062 (home-page "https://github.com/mpdavis/python-jose")
1063 (source (origin
1064 (method git-fetch)
1065 (uri (git-reference (url home-page) (commit version)))
1066 (file-name (git-file-name name version))
1067 (sha256
1068 (base32
1069 "18whsdpllg8574ma4r0qawkgw4nam6lsf63pi6761j38rvl84lg9"))))
1070 (build-system python-build-system)
1071 (arguments
1072 `(#:phases
1073 (modify-phases %standard-phases
1074 (replace 'check
1075 (lambda* (#:key tests? #:allow-other-keys)
1076 (if tests?
1077 (invoke "pytest" "-vv")
1078 (format #t "test suite not run~%"))
1079 #t)))))
1080 (native-inputs
1081 (list ;; All native inputs are for tests.
1082 python-pyasn1 python-pytest python-pytest-cov
1083 python-pytest-runner))
1084 (propagated-inputs
1085 (list python-cryptography python-ecdsa python-rsa python-six))
1086 (synopsis "JOSE implementation in Python")
1087 (description
1088 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
1089- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
1090JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
1091content using a variety of algorithms.")
1092 (license license:expat)))
1093
1094(define-public python-pyscss
1095 (package
1096 (name "python-pyscss")
1097 (version "1.3.7")
1098 (source
1099 (origin
1100 (method git-fetch) ; no tests in PyPI release
1101 (uri (git-reference
1102 (url "https://github.com/Kronuz/pyScss")
1103 (commit version)))
1104 (file-name (git-file-name name version))
1105 (sha256
1106 (base32 "0701hziiiw67blafgpmjhzspmrss8mfvif7fw0rs8fikddwwc9g6"))))
1107 (build-system python-build-system)
1108 (arguments
1109 ;; XXX: error in test collection, possible incompatibility with Pytest 6.
1110 `(#:tests? #f
1111 #:phases
1112 (modify-phases %standard-phases
1113 (replace 'check
1114 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
1115 (when tests?
1116 (add-installed-pythonpath inputs outputs)
1117 (invoke "python" "-m" "pytest" "--pyargs" "scss")))))))
1118 (native-inputs
1119 (list python-pytest python-pytest-cov))
1120 (inputs
1121 (list pcre))
1122 (home-page "https://github.com/Kronuz/pyScss")
1123 (synopsis "Scss compiler for Python")
1124 (description "@code{pyScss} is a compiler for Sass, a superset language of
1125CSS3 that adds programming capabilities and some other syntactic sugar.")
1126 (license license:expat)))
1127
1128(define-public python-jsonpickle
1129 (package
1130 (name "python-jsonpickle")
1131 (version "1.5.2")
1132 (source (origin
1133 (method url-fetch)
1134 (uri (pypi-uri "jsonpickle" version))
1135 (sha256
1136 (base32
1137 "0n93h9b9ad58lxdfbvgsh4b25mkg146qikzcgghyc75vjk7rp2cy"))))
1138 (build-system python-build-system)
1139 (arguments
1140 `(#:phases (modify-phases %standard-phases
1141 (replace 'check
1142 (lambda _
1143 (invoke "pytest" "-vv"
1144 ;; Prevent running the flake8 and black
1145 ;; pytest plugins, which only tests style
1146 ;; and frequently causes harmless failures.
1147 "-o" "addopts=''"))))))
1148 (native-inputs
1149 (list python-setuptools-scm
1150 python-toml ;XXX: for setuptools_scm[toml]
1151 ;; For tests.
1152 python-numpy
1153 python-pandas
1154 python-pytest))
1155 (home-page "https://jsonpickle.github.io/")
1156 (synopsis "Serialize object graphs into JSON")
1157 (description
1158 "This package provides a Python library for serializing any arbitrary
1159object graph to and from JSON.")
1160 (license license:bsd-3)))
1161
1162(define-public python-mechanicalsoup
1163 (package
1164 (name "python-mechanicalsoup")
1165 (version "1.0.0")
1166 (source
1167 (origin
1168 (method url-fetch)
1169 (uri (pypi-uri "MechanicalSoup" version))
1170 (sha256
1171 (base32 "01sddjxy3rznh63hnl5lbv1hhk6xyiviwmkiw4x7v4ap35fb3lrp"))))
1172 (build-system python-build-system)
1173 (propagated-inputs
1174 (list python-beautifulsoup4 python-lxml python-requests python-six))
1175 (native-inputs
1176 (list python-pytest-cov
1177 python-pytest-flake8
1178 python-pytest-httpbin
1179 python-pytest-mock
1180 python-pytest-runner
1181 python-requests-mock))
1182 (home-page "https://mechanicalsoup.readthedocs.io/")
1183 (synopsis "Python library for automating website interaction")
1184 (description
1185 "MechanicalSoup is a Python library for automating interaction with
1186websites. It automatically stores and sends cookies, follows redirects, and can
1187follow links and submit forms. It doesn’t do JavaScript.")
1188 (license license:expat)))
1189
1190(define-public python-hyperframe
1191 (package
1192 (name "python-hyperframe")
1193 (version "6.0.1")
1194 (source
1195 (origin
1196 (method url-fetch)
1197 (uri (pypi-uri "hyperframe" version))
1198 (sha256
1199 (base32 "055951gyhnjqpa2al52rj34g8yrls9inyn56n7nfkj0x4d300ldf"))))
1200 (build-system python-build-system)
1201 (arguments
1202 `(#:phases
1203 (modify-phases %standard-phases
1204 (replace 'check
1205 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
1206 (when tests?
1207 (add-installed-pythonpath inputs outputs)
1208 (invoke "pytest" "-vv" "test")))))))
1209 (native-inputs
1210 (list python-pytest))
1211 (home-page "https://github.com/python-hyper/hyperframe")
1212 (synopsis "HTTP/2 framing layer for Python")
1213 (description
1214 "This library contains the HTTP/2 framing code used in the hyper project.
1215It provides a pure-Python codebase that is capable of decoding a binary stream
1216into HTTP/2 frames.")
1217 (license license:expat)))
1218
1219(define-public python-hpack
1220 (package
1221 (name "python-hpack")
1222 (version "4.0.0")
1223 (source
1224 (origin
1225 ;; PyPI tarball is missing some files necessary for the tests.
1226 (method git-fetch)
1227 (uri (git-reference
1228 (url "https://github.com/python-hyper/hpack")
1229 (commit (string-append "v" version))))
1230 (file-name (git-file-name name version))
1231 (sha256
1232 (base32 "11qdayvz5a8zlzdcdm37f2z1fgnl67pz6j8xj2dz5rfa5lds29yq"))))
1233 (build-system python-build-system)
1234 (arguments
1235 `(#:phases
1236 (modify-phases %standard-phases
1237 (replace 'check
1238 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
1239 (when tests?
1240 (add-installed-pythonpath inputs outputs)
1241 (invoke "pytest" "-vv" "test")))))))
1242 (native-inputs
1243 (list python-pytest))
1244 (home-page "https://hyper.rtfd.org")
1245 (synopsis "Pure-Python HPACK header compression")
1246 (description
1247 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
1248for use in Python programs that implement HTTP/2.")
1249 (license license:expat)))
1250
1251(define-public python-h11
1252 (package
1253 (name "python-h11")
1254 (version "0.12.0")
1255 (source
1256 (origin
1257 (method url-fetch)
1258 (uri (pypi-uri "h11" version))
1259 (sha256
1260 (base32 "0hk0nll6qazsambp3kl8cxxsbl4gv5y9252qadyk0jky0sv2q8j7"))))
1261 (build-system python-build-system)
1262 (arguments
1263 `(#:phases
1264 (modify-phases %standard-phases
1265 (replace 'check
1266 (lambda* (#:key tests? #:allow-other-keys)
1267 (when tests?
1268 (invoke "pytest" "-vv")))))))
1269 (native-inputs
1270 (list python-pytest))
1271 (home-page "https://github.com/python-hyper/h11")
1272 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
1273 (description
1274 "This is a little HTTP/1.1 library written from scratch in Python, heavily
1275inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
1276code whatsoever. This means you can hook h11 up to your favorite network API,
1277and that could be anything you want.")
1278 (license license:expat)))
1279
1280(define-public python-h2
1281 (package
1282 (name "python-h2")
1283 (version "4.1.0")
1284 (source
1285 (origin
1286 (method url-fetch)
1287 (uri (pypi-uri "h2" version))
1288 (sha256
1289 (base32 "1fraip114fm1ha5w37pdc0sk8dn9pb0ck267zrwwpap7zc4clfm8"))))
1290 (build-system python-build-system)
1291 (arguments
1292 `(#:phases
1293 (modify-phases %standard-phases
1294 (replace 'check
1295 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
1296 (when tests?
1297 (add-installed-pythonpath inputs outputs)
1298 (invoke "python" "-m" "pytest" "-vv" "test")))))))
1299 (native-inputs
1300 (list python-hypothesis-next python-pytest))
1301 (propagated-inputs
1302 (list python-hpack python-hyperframe))
1303 (home-page "https://github.com/python-hyper/h2")
1304 (synopsis "HTTP/2 State-Machine based protocol implementation")
1305 (description
1306 "This module contains a pure-Python implementation of a HTTP/2 protocol
1307stack. It does not provide a parsing layer, a network layer, or any rules
1308about concurrency. Instead, it's a purely in-memory solution, defined in
1309terms of data actions and HTTP/2 frames. This is one building block of a full
1310Python HTTP implementation.")
1311 (license license:expat)))
1312
1313(define-public python-sockjs-tornado
1314 (package
1315 (name "python-sockjs-tornado")
1316 (version "1.0.6")
1317 (source
1318 (origin
1319 (method url-fetch)
1320 (uri (pypi-uri "sockjs-tornado" version))
1321 (sha256
1322 (base32
1323 "15dgv6hw6c7h3m310alw1h6p5443lrm9pyqhcv2smc13fz1v04pc"))))
1324 (build-system python-build-system)
1325 (arguments
1326 `(;; There are no tests, and running the test phase requires missing
1327 ;; dependencies
1328 #:tests? #f))
1329 (propagated-inputs
1330 (list python-tornado))
1331 (home-page "https://github.com/mrjoes/sockjs-tornado/")
1332 (synopsis
1333 "SockJS Python server implementation on top of the Tornado framework")
1334 (description
1335 "SockJS-tornado provides the server-side counterpart to a SockJS client
1336library, through the Tornado framework.
1337
1338SockJS provides a low-latency, full-duplex, cross-domain communication channel
1339between a web browser and web server.")
1340 (license license:expat)))
1341
1342(define-public python-flask-assets
1343 (package
1344 (name "python-flask-assets")
1345 (version "2.0")
1346 (source
1347 (origin
1348 (method url-fetch)
1349 (uri (pypi-uri "Flask-Assets" version))
1350 (sha256
1351 (base32 "1hmqldxc7zciksmcl35jx0wbyrrxc7vk2a57mmmd8i07whsymz8x"))))
1352 (build-system python-build-system)
1353 (arguments
1354 ;; Tests require python-flask-script which is incompatible with Flask2.
1355 `(#:tests? #f))
1356 (propagated-inputs
1357 (list python-flask python-webassets))
1358 (home-page "https://github.com/miracle2k/flask-assets")
1359 (synopsis "Asset management for Flask")
1360 (description "This package integrates @code{webassets} with Flask, adding
1361support for merging, minifying and compiling CSS and Javascript files.")
1362 (license license:bsd-2)))
1363
1364(define-public python-flask-babel
1365 (package
1366 (name "python-flask-babel")
1367 (version "2.0.0")
1368 (source
1369 (origin
1370 (method url-fetch)
1371 (uri (pypi-uri "Flask-Babel" version))
1372 (sha256
1373 (base32
1374 "0z95v77vib5il8hphyh16n7i15a2gmc06i615vm346ifvdfg9ypr"))))
1375 (build-system python-build-system)
1376 (propagated-inputs
1377 (list python-flask python-babel python-jinja2 python-pytz))
1378 (home-page "https://github.com/python-babel/flask-babel")
1379 (synopsis "Add i18n/l10n support to Flask applications")
1380 (description "This package implements internationalization and localization
1381support for Flask. This is based on the Python babel module as well as pytz -
1382both of which are installed automatically if you install this library.")
1383 (license license:bsd-3)))
1384
1385(define-public python-flask-cors
1386 (package
1387 (name "python-flask-cors")
1388 (version "3.0.10")
1389 (source (origin
1390 (method url-fetch)
1391 (uri (pypi-uri "Flask-Cors" version))
1392 (sha256
1393 (base32
1394 "1pl16615fn1pc5n0vdrqlxm45mqsdjjxqv3gfkrs111v7wwkj25n"))))
1395 (build-system python-build-system)
1396 (native-inputs
1397 (list python-flask python-nose python-packaging))
1398 (propagated-inputs
1399 (list python-six))
1400 (home-page "https://flask-cors.readthedocs.io/en/latest/")
1401 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
1402 (description
1403 "This package provides a Flask extension for handling @acronym{CORS,Cross
1404Origin Resource Sharing}, making cross-origin AJAX possible.")
1405 (license license:expat)))
1406
1407(define-public python-flask-markdown
1408 (package
1409 (name "python-flask-markdown")
1410 (version "0.3")
1411 (source
1412 (origin
1413 (method url-fetch)
1414 (uri (pypi-uri "Flask-Markdown" version))
1415 (sha256
1416 (base32
1417 "0l32ikv4f7va926jlq4f7gx0xid247bhlxl6bd9av5dk8ljz1hyq"))))
1418 (build-system python-build-system)
1419 (arguments
1420 '(#:tests? #f)) ; Tests seem to be incompatible with latest python
1421 (propagated-inputs
1422 (list python-markdown python-flask))
1423 (native-inputs
1424 (list python-nose))
1425 (home-page "https://github.com/dcolish/flask-markdown")
1426 (synopsis "Small extension to help with using Markdown in Flask")
1427 (description
1428 "Flask-Markdown supports several extensions for Markdown and integrates
1429into Jinja2 by default.")
1430 (license license:bsd-3)))
1431
1432(define-public python-flask-misaka
1433 (package
1434 (name "python-flask-misaka")
1435 (version "1.0.0")
1436 (source
1437 (origin
1438 (method url-fetch)
1439 (uri (pypi-uri "Flask-Misaka" version))
1440 (sha256
1441 (base32
1442 "12gm6hq3lvlj0ddw8p6lk5pky8jk3pw758ihffjl49shnnzc68zl"))))
1443 (build-system python-build-system)
1444 (native-inputs
1445 (list python-coverage python-mock))
1446 (propagated-inputs
1447 (list python-flask python-misaka))
1448 (home-page "https://github.com/singingwolfboy/flask-misaka/")
1449 (synopsis "Flask interface to Misaka, a Markdown parsing library")
1450 (description
1451 "This package provides an interface between the Flask web framework and
1452the Misaka Markdown parser.")
1453 (license license:expat)))
1454
1455(define-public python-flask-session
1456 (package
1457 (name "python-flask-session")
1458 (version "0.4.0")
1459 (source
1460 (origin
1461 (method url-fetch)
1462 (uri (pypi-uri "Flask-Session" version))
1463 (sha256
1464 (base32
1465 "0ihzlhdhss8f93p3njzva9rdm7kmhaakdlzz680wmi583wr59vf9"))))
1466 (build-system python-build-system)
1467 (arguments
1468 '(#:tests? #f)) ; Tests require the various storage backends to be present
1469 (propagated-inputs
1470 (list python-cachelib python-flask))
1471 (home-page "https://github.com/fengsp/flask-session")
1472 (synopsis "Adds server-side session support to your Flask application")
1473 (description
1474 "Flask-Session is an extension for Flask that adds support for
1475Server-side sessions, with a variety of different backends for session
1476storage.")
1477 (license license:bsd-3)))
1478
1479(define-public python-html5lib
1480 (package
1481 (name "python-html5lib")
1482 (version "1.1")
1483 (source
1484 (origin
1485 (method url-fetch)
1486 (uri (pypi-uri "html5lib" version))
1487 (sha256
1488 (base32
1489 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
1490 (build-system python-build-system)
1491 (propagated-inputs
1492 (list python-six python-webencodings
1493 ;; Required by Calibre 5.
1494 python-chardet))
1495 (arguments
1496 `(#:test-target "check"))
1497 (home-page
1498 "https://github.com/html5lib/html5lib-python")
1499 (synopsis
1500 "Python HTML parser based on the WHATWG HTML specification")
1501 (description
1502 "Html5lib is an HTML parser based on the WHATWG HTML specification
1503and written in Python.")
1504 (license license:expat)))
1505
1506(define-public python-html5-parser
1507 (package
1508 (name "python-html5-parser")
1509 (version "0.4.10")
1510 (source (origin
1511 (method url-fetch)
1512 (uri (pypi-uri "html5-parser" version))
1513 (sha256
1514 (base32
1515 "195wgxls3df7djry9cz3p2k9644l6bfd66fczbaw55fsq0c48agr"))))
1516 (build-system python-build-system)
1517 (native-inputs
1518 (list pkg-config))
1519 (inputs
1520 (list libxml2))
1521 (propagated-inputs
1522 (list python-lxml python-beautifulsoup4 python-chardet))
1523 (home-page "https://html5-parser.readthedocs.io")
1524 (synopsis "Fast C-based HTML5 parsing for Python")
1525 (description "This package provides a fast implementation of the HTML5
1526parsing spec for Python. Parsing is done in C using a variant of the gumbo
1527parser. The gumbo parse tree is then transformed into an lxml tree, also in
1528C, yielding parse times that can be a thirtieth of the html5lib parse times.")
1529 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
1530 ;; indicate ASL2.0, including the LICENSE file for the whole project.
1531 (license (list license:asl2.0 license:gpl3))))
1532
1533(define-public python-minio
1534 (package
1535 (name "python-minio")
1536 (version "7.1.9")
1537 (source (origin
1538 (method url-fetch)
1539 (uri (pypi-uri "minio" version))
1540 (sha256
1541 (base32
1542 "02nh865xbf2glxvcy70ir6gkcwqxl119zryfc70q7w0yjvkg64d7"))))
1543 (build-system python-build-system)
1544 (arguments
1545 '(#:phases (modify-phases %standard-phases
1546 (add-before 'check 'disable-failing-tests
1547 (lambda _
1548 ;; This test requires network access.
1549 (delete-file "tests/unit/credentials_test.py"))))))
1550 (native-inputs
1551 (list python-faker python-mock python-nose))
1552 (propagated-inputs
1553 (list python-certifi python-dateutil python-pytz python-urllib3))
1554 (home-page "https://github.com/minio/minio-py")
1555 (synopsis "Programmatically access Amazon S3 from Python")
1556 (description
1557 "This package provides a Python library for interacting with any
1558Amazon S3 compatible object storage server.")
1559 (license license:asl2.0)))
1560
1561(define-public python-pycurl
1562 (package
1563 (name "python-pycurl")
1564 (version "7.43.0.5")
1565 (source
1566 (origin
1567 (method url-fetch)
1568 (uri (pypi-uri "pycurl" version))
1569 (sha256
1570 (base32 "1cwlb76vddqp2mxqvjbhf367caddzy82rhangddjjhjqaj8x4zgc"))))
1571 (build-system python-build-system)
1572 (arguments
1573 ;; The tests attempt to access external web servers, so we cannot run
1574 ;; them. Furthermore, they are skipped altogether when using Python 2.
1575 '(#:tests? #f
1576 #:phases (modify-phases %standard-phases
1577 (add-before 'build 'configure-tls-backend
1578 (lambda _
1579 ;; XXX: PycURL fails to automatically determine which TLS
1580 ;; backend to use when cURL is built with --disable-static.
1581 ;; See setup.py and <https://github.com/pycurl/pycurl/pull/147>.
1582 (setenv "PYCURL_SSL_LIBRARY" "gnutls")
1583 #t)))))
1584 (native-inputs
1585 (list python-nose python-bottle))
1586 (inputs
1587 (list curl gnutls))
1588 (home-page "http://pycurl.io/")
1589 (synopsis "Lightweight Python wrapper around libcurl")
1590 (description "Pycurl is a lightweight wrapper around libcurl. It provides
1591high-speed transfers via libcurl and frequently outperforms alternatives.")
1592
1593 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
1594 ;; under the terms of LGPLv2.1+ or Expat.
1595 (license (list license:lgpl2.1+ license:expat))))
1596
1597(define-public python-webencodings
1598 (package
1599 (name "python-webencodings")
1600 (version "0.5.1")
1601 (source (origin
1602 (method url-fetch)
1603 (uri (pypi-uri "webencodings" version))
1604 (sha256
1605 (base32
1606 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
1607 (build-system python-build-system)
1608 (arguments
1609 '(#:phases
1610 (modify-phases %standard-phases
1611 (replace 'check
1612 (lambda _
1613 (invoke "py.test" "-v" "webencodings/tests.py")
1614 #t)))))
1615 (native-inputs
1616 (list python-pytest))
1617 (home-page "https://github.com/SimonSapin/python-webencodings")
1618 (synopsis "Character encoding aliases for legacy web content")
1619 (description
1620 "In order to be compatible with legacy web content when interpreting
1621something like @code{Content-Type: text/html; charset=latin1}, tools need
1622to use a particular set of aliases for encoding labels as well as some
1623overriding rules. For example, @code{US-ASCII} and @code{iso-8859-1} on
1624the web are actually aliases for @code{windows-1252}, and a @code{UTF-8}
1625or @code{UTF-16} BOM takes precedence over any other encoding declaration.
1626The WHATWG @url{https://encoding.spec.whatwg.org/,Encoding} standard
1627defines all such details so that implementations do not have to
1628reverse-engineer each other.
1629
1630This module implements the Encoding standard and has encoding labels and
1631BOM detection, but the actual implementation for encoders and decoders
1632is Python’s.")
1633 (license license:bsd-3)))
1634
1635(define-public python-openapi-schema-validator
1636 (package
1637 (name "python-openapi-schema-validator")
1638 (version "0.2.3")
1639 (source
1640 (origin
1641 (method git-fetch) ;no tests in pypi release
1642 (uri (git-reference
1643 (url "https://github.com/p1c2u/openapi-schema-validator")
1644 (commit version)))
1645 (file-name (git-file-name name version))
1646 (sha256
1647 (base32
1648 "1swm8h74nhg63nxk347blwq9f1qn6iiq3zisndcvm7axkq3pc2df"))))
1649 (build-system pyproject-build-system)
1650 (arguments
1651 (list
1652 #:phases
1653 #~(modify-phases %standard-phases
1654 (add-after 'unpack 'remove-coverage-pytest-options
1655 (lambda _
1656 (substitute* "pyproject.toml"
1657 (("^--cov.*") "")))))))
1658 (native-inputs (list python-poetry-core python-pytest))
1659 (propagated-inputs
1660 (list python-isodate
1661 python-jsonschema
1662 python-rfc3339-validator
1663 python-strict-rfc3339))
1664 (home-page "https://github.com/p1c2u/openapi-schema-validator")
1665 (synopsis "OpenAPI schema validation library for Python")
1666 (description "Openapi-schema-validator is a Python library that validates
1667a schema against:
1668@itemize
1669@item OpenAPI Schema Specification v3.0 which is an extended subset of the
1670JSON Schema Specification Wright Draft 00.
1671@item OpenAPI Schema Specification v3.1 which is an extended superset of the
1672JSON Schema Specification Draft 2020-12.
1673@end itemize")
1674 (license license:bsd-3)))
1675
1676(define-public python-openapi-spec-validator
1677 (package
1678 (name "python-openapi-spec-validator")
1679 (version "0.4.0")
1680 (source
1681 (origin
1682 (method git-fetch) ;no tests in pypi release
1683 (uri (git-reference
1684 (url "https://github.com/p1c2u/openapi-spec-validator")
1685 (commit version)))
1686 (file-name (git-file-name name version))
1687 (sha256
1688 (base32
1689 "1q09sjh4hsc0c8yqbd97h5mp6rwh427y6zyn8kv8wljk6sa0fs4q"))))
1690 (build-system pyproject-build-system)
1691 (arguments
1692 (list
1693 ;; The example tests attempt to fetch resources from the Internet
1694 ;; (see: https://github.com/p1c2u/openapi-spec-validator/issues/151).
1695 #:test-flags #~'("-k" "not Example and not Exampe")
1696 #:phases
1697 #~(modify-phases %standard-phases
1698 (add-after 'unpack 'remove-coverage-pytest-options
1699 (lambda _
1700 (substitute* "pyproject.toml"
1701 (("^--cov.*") "")))))))
1702 (native-inputs (list python-poetry-core python-pytest))
1703 (propagated-inputs
1704 (list python-jsonschema
1705 python-openapi-schema-validator
1706 python-pyyaml
1707 python-requests
1708 python-setuptools))
1709 (home-page "https://github.com/p1c2u/openapi-spec-validator")
1710 (synopsis "OpenAPI spec validator")
1711 (description "OpenAPI Spec Validator is a Python library that validates an
1712OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
17133.0 and OpenAPI 3.1 specifications. The validator aims to check for full
1714compliance with the specification.")
1715 (license license:asl2.0)))
1716
1717(define-public python-openapi-core
1718 (package
1719 (name "python-openapi-core")
1720 (version "0.14.2")
1721 (source
1722 (origin
1723 (method git-fetch)
1724 (uri (git-reference
1725 (url "https://github.com/p1c2u/openapi-core")
1726 (commit version)))
1727 (file-name (git-file-name name version))
1728 (sha256
1729 (base32
1730 "1npsibyf8zx6z230yl19kyap8g25kqvgm7z1w6rm6jxv58yqsp7r"))))
1731 (build-system python-build-system)
1732 (arguments
1733 (list
1734 #:phases
1735 #~(modify-phases %standard-phases
1736 (replace 'check
1737 (lambda* (#:key tests? #:allow-other-keys)
1738 (when tests?
1739 (invoke "pytest" "-vv" "tests/unit"
1740 ;; Ignore Pytest configuration in setup.cfg that adds
1741 ;; unwanted flake8 and coverage options.
1742 "-c" "/dev/null"
1743 ;; This tests fails due to changes in Pytest; fixed
1744 ;; but not yet released upstream
1745 ;; (https://github.com/p1c2u/openapi-core/issues/158).
1746 "-k" "not test_string_format_invalid_value")))))))
1747 (native-inputs (list python-django
1748 python-falcon
1749 python-flask
1750 python-poetry-core
1751 python-pypa-build
1752 python-pytest
1753 python-responses))
1754 (propagated-inputs
1755 (list python-attrs
1756 python-dictpath
1757 python-isodate
1758 python-jsonschema
1759 python-lazy-object-proxy
1760 python-more-itertools
1761 python-openapi-schema-validator
1762 python-openapi-spec-validator
1763 python-parse
1764 python-six
1765 python-werkzeug))
1766 (home-page "https://github.com/p1c2u/openapi-core")
1767 (synopsis "OpenAPI core library")
1768 (description "Openapi-core is a Python library that adds client-side and
1769server-side support for the OpenAPI Specification v3. It has features such
1770as:
1771@itemize
1772@item Validation of requests and responses
1773@item Schema casting and unmarshalling
1774@item Media type and parameters deserialization
1775@item Security providers (API keys, Cookie, Basic and Bearer HTTP
1776authentications)
1777@item Custom deserializers and formats
1778@item Integration with libraries and frameworks.
1779@end itemize")
1780 (license license:bsd-3)))
1781
1782(define-public python-openid
1783 (package
1784 (name "python-openid")
1785 (version "3.2.0")
1786 (source
1787 (origin
1788 (method url-fetch)
1789 (uri (pypi-uri "python3-openid" version))
1790 (sha256
1791 (base32
1792 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
1793 (build-system python-build-system)
1794 (arguments
1795 `(#:phases
1796 (modify-phases %standard-phases
1797 (replace 'check
1798 (lambda* (#:key tests? #:allow-other-keys)
1799 (when tests?
1800 (invoke "coverage" "run" "-m"
1801 "unittest" "openid.test.test_suite")))))))
1802 (propagated-inputs
1803 (list python-defusedxml))
1804 (native-inputs
1805 (list python-coverage python-psycopg2 python-django))
1806 (home-page "https://github.com/necaris/python3-openid")
1807 (synopsis "OpenID support for servers and consumers")
1808 (description "This library provides OpenID authentication for Python, both
1809for clients and servers.")
1810 (license license:asl2.0)))
1811
1812(define-public python-cssutils
1813 (package
1814 (name "python-cssutils")
1815 (version "1.0.2")
1816 (source
1817 (origin
1818 (method url-fetch)
1819 (uri (pypi-uri "cssutils" version))
1820 (sha256
1821 (base32
1822 "1bxchrbqzapwijap0yhlxdil1w9bmwvgx77aizlkhc2mcxjg1z52"))))
1823 (build-system python-build-system)
1824 (native-inputs
1825 (list unzip)) ; for unpacking the source
1826 (arguments
1827 `(#:tests? #f)) ; tests require python-pbr < 1.7.0
1828 (home-page "http://cthedot.de/cssutils/")
1829 (synopsis
1830 "CSS Cascading Style Sheets library for Python")
1831 (description
1832 "Cssutils is a Python package for parsing and building CSS
1833Cascading Style Sheets. Currently it provides a DOM only and no rendering
1834options.")
1835 (license license:lgpl3+)))
1836
1837(define-public python-css-parser
1838 (package
1839 (inherit python-cssutils)
1840 (name "python-css-parser")
1841 (version "1.0.7")
1842 (source
1843 (origin
1844 (method url-fetch)
1845 (uri (pypi-uri "css-parser" version ".tar.gz"))
1846 (sha256
1847 (base32 "1ldv9s3an4pgk7b5x6z07rw9b5fdrasdldnf22829pb26b39dq15"))))
1848 (home-page "https://github.com/ebook-utils/css-parser")
1849 (synopsis "Fork of cssutils modified for parsing ebooks")
1850 (description
1851 "Css-parser is a Python package for parsing and building CSS
1852Cascading Style Sheets. Currently it provides a DOM only and no rendering
1853options.
1854
1855It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
1856cssutils not receiving updates as of 1.0.2.")
1857 (license license:lgpl3+)))
1858
1859(define-public python-cssselect
1860 (package
1861 (name "python-cssselect")
1862 (version "1.1.0")
1863 (source (origin
1864 ;; The PyPI release does not contain tests.
1865 (method git-fetch)
1866 (uri (git-reference
1867 (url "https://github.com/scrapy/cssselect")
1868 (commit (string-append "v" version))))
1869 (file-name (git-file-name name version))
1870 (sha256
1871 (base32
1872 "0xslrnhbrmgakp4xg6k26qffay3kqffp3a2z2sk27c65rwxa79kc"))))
1873 (build-system python-build-system)
1874 (arguments
1875 `(#:phases (modify-phases %standard-phases
1876 (replace 'check
1877 (lambda _
1878 (invoke "pytest" "-vv"))))))
1879 (native-inputs
1880 (list python-lxml python-pytest))
1881 (home-page "https://github.com/scrapy/cssselect")
1882 (synopsis "CSS3 selector parser and translator to XPath 1.0")
1883 (description
1884 "Cssselect ia a Python module that parses CSS3 Selectors and translates
1885them to XPath 1.0 expressions. Such expressions can be used in lxml or
1886another XPath engine to find the matching elements in an XML or HTML document.")
1887 (license license:bsd-3)))
1888
1889(define-public python-databricks-cli
1890 (package
1891 (name "python-databricks-cli")
1892 (version "0.17.0")
1893 (home-page "https://github.com/databricks/databricks-cli")
1894 (source (origin
1895 (method git-fetch)
1896 (uri (git-reference (url home-page) (commit version)))
1897 (file-name (git-file-name name version))
1898 (sha256
1899 (base32
1900 "1qwbxnx64kw7lrzlyx3hfbnjxpc19cqvvj0gcrkqpyjsgd08vja0"))))
1901 (build-system python-build-system)
1902 (arguments
1903 '(#:phases (modify-phases %standard-phases
1904 (replace 'check
1905 (lambda _
1906 (invoke "pytest" "tests" "-vv"))))))
1907 (native-inputs
1908 ;; For tests.
1909 (list python-decorator
1910 python-mock
1911 python-pytest
1912 python-requests-mock))
1913 (propagated-inputs
1914 (list python-click
1915 python-oauthlib
1916 python-pyjwt
1917 python-requests
1918 python-six
1919 python-tabulate))
1920 (synopsis "Command line interface for Databricks")
1921 (description
1922 "The Databricks Command Line Interface is a tool which provides an easy
1923to use interface to the Databricks platform. The CLI is built on top of the
1924Databricks REST APIs.")
1925 (license license:asl2.0)))
1926
1927(define-public python-openid-cla
1928 (package
1929 (name "python-openid-cla")
1930 (version "1.2")
1931 (source
1932 (origin
1933 (method url-fetch)
1934 (uri (pypi-uri "python-openid-cla" version))
1935 (sha256
1936 (base32
1937 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
1938 (build-system python-build-system)
1939 (arguments '(#:tests? #f)) ; No tests.
1940 (home-page "https://github.com/puiterwijk/python-openid-cla/")
1941 (synopsis "Implementation of the OpenID CLA extension for python-openid")
1942 (description "@code{openid-cla} is an implementation of the OpenID
1943contributor license agreement extension for python-openid.")
1944 (license license:bsd-3)))
1945
1946(define-public python-openid-teams
1947 (package
1948 (name "python-openid-teams")
1949 (version "1.1")
1950 (source
1951 (origin
1952 (method url-fetch)
1953 (uri (pypi-uri "python-openid-teams" version))
1954 (sha256
1955 (base32
1956 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
1957 (build-system python-build-system)
1958 (arguments '(#:tests? #f)) ; No tests.
1959 (home-page "https://github.com/puiterwijk/python-openid-teams/")
1960 (synopsis "Implementation of the OpenID teams extension for python-openid")
1961 (description
1962 "@code{openid-teams} is an implementation of the OpenID
1963teams extension for python-openid.")
1964 (license license:bsd-3)))
1965
1966(define-public python-priority
1967 (package
1968 (name "python-priority")
1969 (version "1.3.0")
1970 (source
1971 (origin
1972 (method url-fetch)
1973 (uri (pypi-uri "priority" version))
1974 (sha256
1975 (base32 "1gpzn9k9zgks0iw5wdmad9b4dry8haiz2sbp6gycpjkzdld9dhbb"))))
1976 (build-system python-build-system)
1977 (arguments
1978 `(#:phases
1979 (modify-phases %standard-phases
1980 (replace 'check
1981 (lambda* (#:key inputs outputs #:allow-other-keys)
1982 (add-installed-pythonpath inputs outputs)
1983 (invoke "pytest" "-vv" "test" "-k"
1984 ;; This test exceeded the Hypothesis deadline.
1985 "not test_period_of_repetition"))))))
1986 (native-inputs
1987 (list python-hypothesis python-pytest python-pytest-cov
1988 python-pytest-xdist))
1989 (home-page "https://python-hyper.org/projects/priority/en/latest/")
1990 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
1991 (description
1992 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
1993set out in RFC 7540 Section 5.3 (Stream Priority).")
1994 (license license:expat)))
1995
1996(define-public python-wsproto
1997 (package
1998 (name "python-wsproto")
1999 (version "0.15.0")
2000 (source
2001 (origin
2002 (method url-fetch)
2003 (uri (pypi-uri "wsproto" version))
2004 (sha256
2005 (base32 "17gsxlli4w8am1wwwl3k90hpdfa213ax40ycbbvb7hjx1v1rhiv1"))))
2006 (build-system python-build-system)
2007 (arguments
2008 `(#:phases
2009 (modify-phases %standard-phases
2010 (replace 'check
2011 (lambda* (#:key inputs outputs #:allow-other-keys)
2012 (add-installed-pythonpath inputs outputs)
2013 (invoke "pytest" "-vv" "test"))))))
2014 (native-inputs
2015 (list python-pytest))
2016 (propagated-inputs
2017 (list python-h11))
2018 (home-page "https://github.com/python-hyper/wsproto/")
2019 (synopsis "WebSockets state-machine based protocol implementation")
2020 (description
2021 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
2022stack. It's written from the ground up to be embeddable in whatever program you
2023choose to use, ensuring that you can communicate via WebSockets, as defined in
2024RFC6455, regardless of your programming paradigm.")
2025 (license license:expat)))
2026
2027(define-public hypercorn
2028 (package
2029 (name "hypercorn")
2030 (version "0.11.2")
2031 (source
2032 (origin
2033 (method url-fetch)
2034 (uri (pypi-uri "Hypercorn" version))
2035 (sha256
2036 (base32 "16kai5d12f05jr89mj611zslxqri4cd7ixcgd6yhl211qlcyg8av"))))
2037 (build-system python-build-system)
2038 (arguments
2039 `(#:phases
2040 (modify-phases %standard-phases
2041 (replace 'check
2042 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
2043 (when tests?
2044 (add-installed-pythonpath inputs outputs)
2045 (invoke "python" "-m" "pytest")))))))
2046 ;; Propagate because Hypercorn also exposes functionality over a module.
2047 (propagated-inputs
2048 (list python-h11
2049 python-h2
2050 python-priority
2051 python-toml
2052 python-typing-extensions
2053 python-wsproto))
2054 (native-inputs
2055 (list python-hypothesis
2056 python-mock
2057 python-pytest
2058 python-pytest-asyncio
2059 python-pytest-cov
2060 python-pytest-trio
2061 python-trio))
2062 (home-page "https://gitlab.com/pgjones/hypercorn/")
2063 (synopsis "ASGI Server based on Hyper libraries")
2064 (description
2065 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
2066wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
2067WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It can
2068utilise asyncio, uvloop, or trio worker types.")
2069 (license license:expat)))
2070
2071(define-public python-hypercorn
2072 (deprecated-package "python-hypercorn" hypercorn))
2073
2074(define-public python-querystring-parser
2075 (package
2076 (name "python-querystring-parser")
2077 (version "1.2.4")
2078 (source (origin
2079 (method url-fetch)
2080 (uri (pypi-uri "querystring_parser" version))
2081 (sha256
2082 (base32
2083 "0qlar8a0wa003hm2z6wcpb625r6vjj0a70rsni9h8lz0zwfcwkv4"))))
2084 (build-system python-build-system)
2085 (arguments
2086 `(#:phases (modify-phases %standard-phases
2087 (replace 'check
2088 (lambda _
2089 ;; XXX FIXME: This test is broken with Python 3.7:
2090 ;; https://github.com/bernii/querystring-parser/issues/35
2091 (substitute* "querystring_parser/tests.py"
2092 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
2093 "True"))
2094 (invoke "python" "querystring_parser/tests.py"))))))
2095 (propagated-inputs
2096 (list python-six))
2097 (home-page "https://github.com/bernii/querystring-parser")
2098 (synopsis "QueryString parser that correctly handles nested dictionaries")
2099 (description
2100 "This package provides a query string parser for Python and Django
2101projects that correctly creates nested dictionaries from sent form/querystring
2102data.")
2103 (license license:expat)))
2104
2105(define-public python-tornado
2106 (package
2107 (name "python-tornado")
2108 (version "5.1.1")
2109 (source
2110 (origin
2111 (method url-fetch)
2112 (uri (pypi-uri "tornado" version))
2113 (sha256
2114 (base32
2115 "02clqk2116jbnq8lnaqmdw3p52nqrd9ib59r4xz2ll43fpcmhlaf"))))
2116 (build-system python-build-system)
2117 (arguments
2118 '(;; FIXME: Two tests error out with:
2119 ;; AssertionError: b'Error in atexit._run_exitfuncs:\nFileNotF[44 chars]ry\n' != b''
2120 ;; #:phases
2121 ;; (modify-phases %standard-phases
2122 ;; (replace 'check
2123 ;; (lambda _
2124 ;; ;; 'setup.py test' hits an AssertionError on BSD-specific
2125 ;; ;; "tornado/platform/kqueue.py". This is the supported method:
2126 ;; (invoke "python" "-m" "tornado.test.runtests")
2127 ;; #t)))
2128 #:tests? #f))
2129 (native-inputs
2130 (list python-certifi))
2131 (home-page "https://www.tornadoweb.org/")
2132 (synopsis "Python web framework and asynchronous networking library")
2133 (description
2134 "Tornado is a Python web framework and asynchronous networking library,
2135originally developed at FriendFeed. By using non-blocking network I/O,
2136Tornado can scale to tens of thousands of open connections, making it ideal
2137for long polling, WebSockets, and other applications that require a long-lived
2138connection to each user.")
2139 (license license:asl2.0)))
2140
2141(define-public python-tornado-6
2142 (package
2143 (name "python-tornado")
2144 (version "6.1")
2145 (source
2146 (origin
2147 (method url-fetch)
2148 (uri (pypi-uri "tornado" version))
2149 (sha256
2150 (base32
2151 "14cpzdv6p6qvk6vn02krdh5rcfdi174ifdbr5s6lcnymgcfyiiik"))))
2152 (build-system python-build-system)
2153 (arguments
2154 '(#:phases
2155 (modify-phases %standard-phases
2156 (replace 'check
2157 (lambda* (#:key tests? #:allow-other-keys)
2158 (when tests?
2159 (setenv "ASYNC_TEST_TIMEOUT" "25") ; Like in tox.ini.
2160 (invoke "python" "-m" "tornado.test.runtests")))))))
2161 (native-inputs
2162 (list python-certifi))
2163 (home-page "https://www.tornadoweb.org/")
2164 (synopsis "Python web framework and asynchronous networking library")
2165 (description
2166 "Tornado is a Python web framework and asynchronous networking library,
2167originally developed at FriendFeed. By using non-blocking network I/O,
2168Tornado can scale to tens of thousands of open connections, making it ideal
2169for long polling, WebSockets, and other applications that require a long-lived
2170connection to each user.")
2171 (license license:asl2.0)))
2172
2173(define-public python-tornado-http-auth
2174 (package
2175 (name "python-tornado-http-auth")
2176 (version "1.1.1")
2177 (source
2178 (origin
2179 (method url-fetch)
2180 (uri (pypi-uri "tornado-http-auth" version))
2181 (sha256
2182 (base32 "0hyc5f0a09i5yb99pk4bxpg6w9ichbrb5cv7hc9hff7rxd8w0v0x"))))
2183 (build-system python-build-system)
2184 (propagated-inputs
2185 (list python-tornado))
2186 (home-page "https://github.com/gvalkov/tornado-http-auth")
2187 (synopsis "Digest and basic authentication module for Tornado")
2188 (description
2189 "Provides support for adding authentication to services using the Tornado
2190web framework, either via the basic or digest authentication schemes.")
2191 (license license:asl2.0)))
2192
2193(define-public python-terminado
2194 (package
2195 (name "python-terminado")
2196 (version "0.10.0")
2197 (source
2198 (origin
2199 (method url-fetch)
2200 (uri (pypi-uri "terminado" version))
2201 (sha256
2202 (base32
2203 "1smvra3sc9sg64w49kfn5yhagshq3x55839748ck5dvxvk4hgza6"))))
2204 (build-system python-build-system)
2205 (propagated-inputs
2206 (list python-tornado-6 python-ptyprocess))
2207 (native-inputs
2208 (list python-pytest))
2209 (arguments
2210 `(#:phases
2211 (modify-phases %standard-phases
2212 (replace 'check
2213 (lambda _ (invoke "pytest" "-vv"))))))
2214 (home-page "https://github.com/jupyter/terminado")
2215 (synopsis "Terminals served to term.js using Tornado websockets")
2216 (description "This package provides a Tornado websocket backend for the
2217term.js Javascript terminal emulator library.")
2218 (license license:bsd-2)))
2219
2220(define-public python-wsgi-intercept
2221 (package
2222 (name "python-wsgi-intercept")
2223 (version "1.2.2")
2224 (source (origin
2225 (method url-fetch)
2226 (uri (pypi-uri "wsgi_intercept" version))
2227 (sha256
2228 (base32
2229 "0kjj2v2dvmnpdd5h5gk9rzz0f54rhjb0yiz3zg65bmp65slfw65d"))))
2230 (build-system python-build-system)
2231 (propagated-inputs
2232 (list python-six))
2233 (native-inputs
2234 (list python-pytest python-httplib2 python-requests python-urllib3))
2235 (synopsis "Puts a WSGI application in place of a real URI for testing")
2236 (description "Wsgi_intercept installs a WSGI application in place of a real
2237URI for testing. Testing a WSGI application normally involves starting a
2238server at a local host and port, then pointing your test code to that address.
2239Instead, this library lets you intercept calls to any specific host/port
2240combination and redirect them into a WSGI application importable by your test
2241program. Thus, you can avoid spawning multiple processes or threads to test
2242your Web app.")
2243 (home-page "https://github.com/cdent/wsgi-intercept")
2244 (license license:expat)))
2245
2246(define-public python-webob
2247 (package
2248 (name "python-webob")
2249 (version "1.8.6")
2250 (source
2251 (origin
2252 (method url-fetch)
2253 (uri (pypi-uri "WebOb" version))
2254 (sha256
2255 (base32
2256 "026i3z99nr3px75isa9mbnky5i7rffiv4d124h5kxfjjsxz92fma"))))
2257 (build-system python-build-system)
2258 (native-inputs
2259 (list python-nose))
2260 (home-page "https://webob.org/")
2261 (synopsis "WSGI request and response object")
2262 (description
2263 "WebOb provides wrappers around the WSGI request environment, and an
2264object to help create WSGI responses.")
2265 (license license:expat)))
2266
2267(define-public python-zope-event
2268 (package
2269 (name "python-zope-event")
2270 (version "4.4")
2271 (source
2272 (origin
2273 (method url-fetch)
2274 (uri (pypi-uri "zope.event" version))
2275 (sha256
2276 (base32
2277 "1ksbc726av9xacml6jhcfyn828hlhb9xlddpx6fcvnlvmpmpvhk9"))))
2278 (build-system python-build-system)
2279 (home-page "https://pypi.org/project/zope.event/")
2280 (synopsis "Event publishing system for Python")
2281 (description "Zope.event provides an event publishing API, intended for
2282use by applications which are unaware of any subscribers to their events. It
2283is a simple event-dispatching system on which more sophisticated event
2284dispatching systems can be built.")
2285 (license license:zpl2.1)))
2286
2287(define-public python-zope-interface
2288 (package
2289 (name "python-zope-interface")
2290 (version "5.1.0")
2291 (source
2292 (origin
2293 (method url-fetch)
2294 (uri (pypi-uri "zope.interface" version))
2295 (sha256
2296 (base32
2297 "03nrl6b8cb600dnnh46y149awvrm0gxyqgwq5hdw3lvys8mw9r20"))))
2298 (build-system python-build-system)
2299 (arguments '(#:tests? #f)) ; test suite can't find python-zope-testing
2300 (native-inputs
2301 (list python-coverage python-nose python-zope-event
2302 python-zope-testing))
2303 (home-page "https://github.com/zopefoundation/zope.interface")
2304 (synopsis "Python implementation of the \"design by contract\"
2305methodology")
2306 (description "Zope.interface provides an implementation of \"object
2307interfaces\" for Python. Interfaces are a mechanism for labeling objects as
2308conforming to a given API or contract.")
2309 (license license:zpl2.1)))
2310
2311(define-public python-zope-exceptions
2312 (package
2313 (name "python-zope-exceptions")
2314 (version "4.4")
2315 (source
2316 (origin
2317 (method url-fetch)
2318 (uri (pypi-uri "zope.exceptions" version))
2319 (sha256
2320 (base32
2321 "1nkgfwawswmyc6i0b8g3ymvja4mb507m8yhid8s4rbxq3dmqhwhd"))))
2322 (build-system python-build-system)
2323 (arguments
2324 '(#:phases
2325 (modify-phases %standard-phases
2326 (replace 'check
2327 (lambda* (#:key tests? #:allow-other-keys)
2328 (if tests?
2329 (invoke "zope-testrunner" "--test-path=src")
2330 (format #t "test suite not run~%")))))))
2331 (native-inputs
2332 `(("python-zope-testrunner" ,python-zope-testrunner-bootstrap)))
2333 (propagated-inputs
2334 (list python-zope-interface))
2335 (home-page "https://pypi.org/project/zope.exceptions/")
2336 (synopsis "Zope exceptions")
2337 (description "Zope.exceptions provides general-purpose exception types
2338that have uses outside of the Zope framework.")
2339 (license license:zpl2.1)))
2340
2341(define (python-zope-bootstrap-package orig)
2342 (package
2343 (inherit orig)
2344 (name (string-append (package-name orig) "-bootstrap"))
2345 (arguments
2346 (if (null? (package-arguments orig))
2347 `(#:tests? #f
2348 #:phases (modify-phases %standard-phases
2349 (delete 'sanity-check)))
2350 (substitute-keyword-arguments (package-arguments orig)
2351 ((#:tests? _ #f) #f)
2352 ((#:phases phases '%standard-phases)
2353 `(modify-phases ,phases
2354 (delete 'sanity-check))))))
2355 (propagated-inputs `())
2356 (native-inputs `())
2357 (properties `((hidden? . #t)))))
2358
2359(define-public python-zope-exceptions-bootstrap
2360 (python-zope-bootstrap-package python-zope-exceptions))
2361
2362(define-public python-zope-testing
2363 (package
2364 (name "python-zope-testing")
2365 (version "4.7")
2366 (source
2367 (origin
2368 (method url-fetch)
2369 (uri (pypi-uri "zope.testing" version))
2370 (sha256
2371 (base32
2372 "1sh3c3i0m8n8fnhqiry0bk3rr356i56ry7calmn57s1pvv8yhsyn"))))
2373 (build-system python-build-system)
2374 (home-page "https://pypi.org/project/zope.testing/")
2375 (synopsis "Zope testing helpers")
2376 (description "Zope.testing provides a number of testing utilities for HTML
2377forms, HTTP servers, regular expressions, and more.")
2378 (license license:zpl2.1)))
2379
2380(define-public python-zope-testrunner
2381 (package
2382 (name "python-zope-testrunner")
2383 (version "5.2")
2384 (source
2385 (origin
2386 (method url-fetch)
2387 (uri (pypi-uri "zope.testrunner" version))
2388 (sha256
2389 (base32
2390 "0jyyf1dcz156q95x2y7yw2v420q2xn3cff0c5aci7hmdmcbn0gc7"))))
2391 (build-system python-build-system)
2392 (arguments
2393 '(#:tests? #f ;FIXME: Tests can't find zope.interface.
2394 #:phases
2395 (modify-phases %standard-phases
2396 (add-after 'unpack 'remove-problematic-test
2397 (lambda _
2398 ;; This test contains invalid syntax, which breaks bytecode
2399 ;; compilation. For simplicity just remove it.
2400 (delete-file
2401 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py"))))))
2402 (native-inputs
2403 (list python-zope-testing))
2404 (propagated-inputs
2405 (list python-six python-zope-exceptions python-zope-interface))
2406 (home-page "https://pypi.org/project/zope.testrunner/")
2407 (synopsis "Zope testrunner script")
2408 (description "Zope.testrunner provides a script for running Python
2409tests.")
2410 (license license:zpl2.1)))
2411
2412(define-public python-zope-testrunner-bootstrap
2413 (package
2414 (inherit (python-zope-bootstrap-package python-zope-testrunner))
2415 (propagated-inputs
2416 `(("python-six" ,python-six)
2417 ("python-zope-exceptions" ,python-zope-exceptions-bootstrap)))
2418 (properties `((hidden? . #t)))))
2419
2420(define-public python-zope-i18nmessageid
2421 (package
2422 (name "python-zope-i18nmessageid")
2423 (version "5.0.1")
2424 (source
2425 (origin
2426 (method url-fetch)
2427 (uri (pypi-uri "zope.i18nmessageid" version))
2428 (sha256
2429 (base32
2430 "0ndhn4w1qgwkfbwf9vm2bgq418z5g0wmfsgl0d9nz62cd0mi8d4m"))))
2431 (build-system python-build-system)
2432 (native-inputs
2433 (list python-coverage python-zope-testrunner))
2434 (propagated-inputs
2435 (list python-six))
2436 (home-page "https://pypi.org/project/zope.i18nmessageid/")
2437 (synopsis "Message identifiers for internationalization")
2438 (description "Zope.i18nmessageid provides facilities for declaring
2439internationalized messages within program source text.")
2440 (license license:zpl2.1)))
2441
2442(define-public python-zope-schema
2443 (package
2444 (name "python-zope-schema")
2445 (version "6.0.0")
2446 (source
2447 (origin
2448 (method url-fetch)
2449 (uri (pypi-uri "zope.schema" version))
2450 (sha256
2451 (base32
2452 "09jg47bxhfg1ahr1jxb5y0cbiszyk1j6fn1r1r7s6svjl3lbryr0"))))
2453 (build-system python-build-system)
2454 (arguments
2455 `(#:phases
2456 (modify-phases %standard-phases
2457 (replace 'check
2458 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
2459 (add-installed-pythonpath inputs outputs)
2460 (if tests?
2461 (invoke "zope-testrunner" "--test-path=src")
2462 #t))))))
2463 (propagated-inputs
2464 (list python-zope-event python-zope-interface))
2465 (native-inputs
2466 (list python-zope-i18nmessageid python-zope-testing
2467 python-zope-testrunner))
2468 (home-page "https://pypi.org/project/zope.schema/")
2469 (synopsis "Zope data schemas")
2470 (description "Zope.scheme provides extensions to zope.interface for
2471defining data schemas.")
2472 (license license:zpl2.1)))
2473
2474(define-public python-zope-sqlalchemy
2475 (package
2476 (name "python-zope-sqlalchemy")
2477 (version "1.6")
2478 (source (origin
2479 (method url-fetch)
2480 (uri (pypi-uri "zope.sqlalchemy" version))
2481 (sha256
2482 (base32
2483 "1azm2awl2ra10xl6wps3yvy14jk2rpzvsyfsb9cncm97aydbwlww"))))
2484 (build-system python-build-system)
2485 (propagated-inputs
2486 (list python-sqlalchemy
2487 python-transaction
2488 python-zope-interface))
2489 (native-inputs (list python-zope-testing))
2490 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
2491 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
2492 (description "The aim of this package is to unify the plethora of existing
2493packages integrating SQLAlchemy with Zope's transaction management. As such,
2494it only provides a data manager and makes no attempt to define a @i{zopeish}
2495way to configure engines.")
2496 (license license:zpl2.1)))
2497
2498(define-public python-zope-configuration
2499 (package
2500 (name "python-zope-configuration")
2501 (version "4.4.0")
2502 (source (origin
2503 (method url-fetch)
2504 (uri (pypi-uri "zope.configuration" version))
2505 (sha256
2506 (base32
2507 "0g6vrl7y27z9cj5xyrww9xlzk4npj55mgmlrcd9d2nj08jn2pw79"))))
2508 (build-system python-build-system)
2509 (native-inputs
2510 (list python-manuel python-zope-testing python-zope-testrunner))
2511 (propagated-inputs
2512 (list python-zope-i18nmessageid python-zope-interface
2513 python-zope-schema))
2514 (home-page "https://pypi.org/project/zope.configuration/")
2515 (synopsis "Zope Configuration Markup Language")
2516 (description "Zope.configuration implements ZCML, the Zope Configuration
2517Markup Language.")
2518 (license license:zpl2.1)))
2519
2520(define-public python-zope-configuration-bootstrap
2521 (python-zope-bootstrap-package python-zope-configuration))
2522
2523(define-public python-zope-copy
2524 (package
2525 (name "python-zope-copy")
2526 (version "4.2")
2527 (source
2528 (origin
2529 (method url-fetch)
2530 (uri (pypi-uri "zope.copy" version))
2531 (sha256
2532 (base32
2533 "06m75434krl57n6p73c2qj55k5i3fixg887j8ss01ih6zw4rvfs7"))))
2534 (build-system python-build-system)
2535 (arguments
2536 '(#:phases
2537 (modify-phases %standard-phases
2538 (replace 'check
2539 (lambda _
2540 (invoke "zope-testrunner" "--test-path=src" "\\[]"))))))
2541 (propagated-inputs
2542 (list python-zope-interface))
2543 (native-inputs
2544 `(("python-zope-component" ,python-zope-component-bootstrap)
2545 ("python-zope-location" ,python-zope-location-bootstrap)
2546 ("python-zope-testing" ,python-zope-testing)
2547 ("python-zope-testrunner" ,python-zope-testrunner)))
2548 (home-page "https://github.com/zopefoundation/zope.copy")
2549 (synopsis "Pluggable object copying mechanism")
2550 (description
2551 "This package provides a pluggable mechanism for copying persistent objects.")
2552 (license license:zpl2.1)))
2553
2554(define-public python-zope-proxy
2555 (package
2556 (name "python-zope-proxy")
2557 (version "4.3.5")
2558 (source
2559 (origin
2560 (method url-fetch)
2561 (uri (pypi-uri "zope.proxy" version))
2562 (sha256
2563 (base32
2564 "14h7nyfbl5vpfk0rbviy4ygdfx0yx5kncvg6jpbdb0dhwna0ssm6"))))
2565 (build-system python-build-system)
2566 (native-inputs
2567 (list python-zope-security-bootstrap python-zope-testrunner))
2568 (propagated-inputs
2569 (list python-zope-interface))
2570 (home-page "https://pypi.org/project/zope.proxy/")
2571 (synopsis "Generic, transparent proxies")
2572 (description "Zope.proxy provides generic, transparent proxies for Python.
2573Proxies are special objects which serve as mostly-transparent wrappers around
2574another object, intervening in the apparent behavior of the wrapped object
2575only when necessary to apply the policy (e.g., access checking, location
2576brokering, etc.) for which the proxy is responsible.")
2577 (license license:zpl2.1)))
2578
2579(define-public python-zope-proxy-bootstrap
2580 (python-zope-bootstrap-package python-zope-proxy))
2581
2582(define-public python-zope-hookable
2583 (package
2584 (name "python-zope-hookable")
2585 (version "5.0.1")
2586 (source
2587 (origin
2588 (method url-fetch)
2589 (uri (pypi-uri "zope.hookable" version))
2590 (sha256
2591 (base32
2592 "0hc82lfr7bk53nvbxvjkibkarngyrzgfk2i6bg8wshl0ly0pdl19"))))
2593 (build-system python-build-system)
2594 (native-inputs
2595 (list python-coverage python-zope-testing))
2596 (home-page "https://github.com/zopefoundation/zope.hookable")
2597 (synopsis "Zope hookable")
2598 (description "This package supports the efficient creation of hookable
2599objects, which are callable objects that are meant to be optionally replaced.
2600The idea is that you create a function that does some default thing and make i
2601hookable. Later, someone can modify what it does by calling its sethook method
2602and changing its implementation. All users of the function, including those
2603that imported it, will see the change.")
2604 (license license:zpl2.1)))
2605
2606(define-public python-zope-location
2607 (package
2608 (name "python-zope-location")
2609 (version "4.2")
2610 (source
2611 (origin
2612 (method url-fetch)
2613 (uri (pypi-uri "zope.location" version))
2614 (sha256
2615 (base32
2616 "1b40pzl8v00d583d3gsxv1qjdw2dhghlgkbgxl3m07d5r3izj857"))))
2617 (build-system python-build-system)
2618 (arguments
2619 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
2620 (native-inputs
2621 (list python-zope-testrunner))
2622 (propagated-inputs
2623 (list python-zope-interface python-zope-proxy python-zope-schema))
2624 (home-page "https://pypi.org/project/zope.location/")
2625 (synopsis "Zope location library")
2626 (description "Zope.location implements the concept of \"locations\" in
2627Zope3, which are are special objects that have a structural location.")
2628 (license license:zpl2.1)))
2629
2630(define-public python-zope-location-bootstrap
2631 (python-zope-bootstrap-package python-zope-location))
2632
2633(define-public python-zope-security
2634 (package
2635 (name "python-zope-security")
2636 (version "5.1.1")
2637 (source
2638 (origin
2639 (method url-fetch)
2640 (uri (pypi-uri "zope.security" version))
2641 (sha256
2642 (base32
2643 "11lfw67cigscfax9c5j63xcvz2qcj724zx5fcdqyc94am2glim0h"))))
2644 (build-system python-build-system)
2645 (propagated-inputs
2646 (list python-zope-component
2647 python-zope-i18nmessageid
2648 python-zope-interface
2649 python-zope-location
2650 python-zope-proxy
2651 python-zope-schema))
2652 (native-inputs
2653 (list python-btrees
2654 python-zope-component-bootstrap
2655 python-zope-configuration-bootstrap
2656 python-zope-location-bootstrap
2657 python-zope-testing
2658 python-zope-testrunner))
2659 (home-page "https://pypi.org/project/zope.security/")
2660 (synopsis "Zope security framework")
2661 (description "Zope.security provides a generic mechanism to implement
2662security policies on Python objects.")
2663 (license license:zpl2.1)))
2664
2665(define-public python-zope-security-bootstrap
2666 (package
2667 (inherit (python-zope-bootstrap-package python-zope-security))
2668 (propagated-inputs
2669 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
2670 ("python-zope-interface" ,python-zope-interface)
2671 ("python-zope-proxy" ,python-zope-proxy-bootstrap)
2672 ("python-zope-schema" ,python-zope-schema)))))
2673
2674(define-public python-zope-component
2675 (package
2676 (name "python-zope-component")
2677 (version "4.6.2")
2678 (source
2679 (origin
2680 (method url-fetch)
2681 (uri (pypi-uri "zope.component" version))
2682 (sha256
2683 (base32
2684 "14iwp95hh6q5dj4k9h1iw75cbp89bs27nany4dinyglb44c8jqli"))))
2685 (build-system python-build-system)
2686 (arguments
2687 '(#:phases
2688 (modify-phases %standard-phases
2689 (replace 'check
2690 (lambda* (#:key tests? #:allow-other-keys)
2691 (if tests?
2692 (invoke "python" "setup.py" "test")
2693 (format #t "test suite not run~%")))))))
2694 (native-inputs
2695 `(("python-persistent" ,python-persistent)
2696 ("python-zope-configuration" ,python-zope-configuration-bootstrap)
2697 ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
2698 ("python-zope-location" ,python-zope-location-bootstrap)
2699 ("python-zope-proxy" ,python-zope-proxy-bootstrap)
2700 ("python-zope-security" ,python-zope-security-bootstrap)
2701 ("python-zope-testing" ,python-zope-testing)
2702 ("python-zope-testrunner" ,python-zope-testrunner)))
2703 (propagated-inputs
2704 (list python-zope-deferredimport python-zope-deprecation
2705 python-zope-event python-zope-hookable python-zope-interface))
2706 (home-page "https://github.com/zopefoundation/zope.component")
2707 (synopsis "Zope Component Architecture")
2708 (description "Zope.component represents the core of the Zope Component
2709Architecture. Together with the zope.interface package, it provides
2710facilities for defining, registering and looking up components.")
2711 (license license:zpl2.1)))
2712
2713(define-public python-zope-component-bootstrap
2714 (python-zope-bootstrap-package python-zope-component))
2715
2716(define-public python-zope-deferredimport
2717 (package
2718 (name "python-zope-deferredimport")
2719 (version "4.3.1")
2720 (source
2721 (origin
2722 (method url-fetch)
2723 (uri (pypi-uri "zope.deferredimport" version))
2724 (sha256
2725 (base32
2726 "1q89v54dwniiqypjbwywwdfjdr4kdkqlyqsgrpplgvsygdg39cjp"))))
2727 (build-system python-build-system)
2728 (propagated-inputs
2729 (list python-zope-proxy))
2730 (native-inputs
2731 (list python-zope-testrunner))
2732 (home-page "https://github.com/zopefoundation/zope.deferredimport")
2733 (synopsis "Defer imports until used by code")
2734 (description
2735 "Often, especially for package modules, you want to import names for
2736convenience, but not actually perform the imports until necessary. The
2737@code{zope.deferredimport} package provided facilities for defining names in
2738modules that will be imported from somewhere else when used. You can also cause
2739deprecation warnings to be issued when a variable is used.")
2740 (license license:zpl2.1)))
2741
2742(define-public python-ndg-httpsclient
2743 (package
2744 (name "python-ndg-httpsclient")
2745 (version "0.5.1")
2746 (source (origin
2747 (method url-fetch)
2748 (uri (pypi-uri "ndg_httpsclient" version))
2749 (sha256
2750 (base32
2751 "0412b7i1s4vj7lz9r72nmb28h9syd4q2x89bdirkkc3a6z8awbyp"))))
2752 (build-system python-build-system)
2753 (arguments
2754 '(;; The tests appear to require networking.
2755 #:tests? #f))
2756 (propagated-inputs
2757 (list python-pyasn1 python-pyopenssl))
2758 (synopsis "HTTPS support for Python's httplib and urllib2")
2759 (description "This is a HTTPS client implementation for httplib and urllib2
2760based on PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation
2761over the default provided with Python and, importantly, enables full
2762verification of the SSL peer.")
2763 (home-page "https://github.com/cedadev/ndg_httpsclient/")
2764 (license license:bsd-3)))
2765
2766(define-public python-websocket-client
2767 (package
2768 (name "python-websocket-client")
2769 (version "1.2.3")
2770 (source
2771 (origin
2772 (method url-fetch)
2773 (uri (pypi-uri "websocket-client" version))
2774 (sha256
2775 (base32 "1xba9z6b211pandrlk2l5p8wj6gn7yfkpq1sxfbqjl6c19n8258k"))))
2776 (build-system python-build-system)
2777 (arguments
2778 `(#:phases
2779 (modify-phases %standard-phases
2780 (add-after 'unpack 'skip-network-test
2781 (lambda _
2782 ;; This test requires networking.
2783 (substitute* "websocket/tests/test_http.py"
2784 (("def testConnect") "def _testConnect"))))
2785 (replace 'check
2786 (lambda* (#:key tests? #:allow-other-keys)
2787 (when tests?
2788 (invoke "pytest" "-vv" "websocket/tests")))))))
2789 (native-inputs
2790 (list python-pysocks python-pytest python-websockets))
2791 (home-page "https://github.com/websocket-client/websocket-client")
2792 (synopsis "WebSocket client for Python")
2793 (description "The Websocket-client module provides the low level APIs for
2794WebSocket usage in Python programs.")
2795 (license license:lgpl2.1+)))
2796
2797(define-public python-websocket-client-0.59
2798 (package
2799 (inherit python-websocket-client)
2800 (version "0.59.0")
2801 (source
2802 (origin
2803 (method url-fetch)
2804 (uri (pypi-uri "websocket-client" version))
2805 (sha256
2806 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))))
2807
2808(define-public python-purl
2809 (package
2810 (name "python-purl")
2811 (version "1.5")
2812 (source
2813 (origin
2814 (method url-fetch)
2815 (uri (pypi-uri "purl" version))
2816 (sha256
2817 (base32
2818 "15ibnz1xrh5msmn04j0nr00sz4n7jwx6cwd6zlx99kkz3vpin53m"))))
2819 (build-system python-build-system)
2820 (propagated-inputs (list python-six))
2821 (home-page
2822 "https://github.com/codeinthehole/purl")
2823 (synopsis
2824 "Python package for URL manipulation")
2825 (description
2826 "Purl is a Python package for handling URLs.")
2827 (license license:expat)))
2828
2829(define-public python-apiron
2830 (package
2831 (name "python-apiron")
2832 (version "5.1.0")
2833 (source
2834 (origin
2835 (method url-fetch)
2836 (uri (pypi-uri "apiron" version))
2837 (sha256
2838 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
2839 (build-system python-build-system)
2840 (arguments
2841 `(#:phases
2842 (modify-phases %standard-phases
2843 (replace 'check
2844 (lambda* (#:key inputs outputs #:allow-other-keys)
2845 (add-installed-pythonpath inputs outputs)
2846 (invoke "pytest" "-vv" "--cov" "-k"
2847 ;; This test tries to connect to the internet.
2848 "not test_call"))))))
2849 (propagated-inputs
2850 (list python-requests))
2851 (native-inputs
2852 (list python-pytest python-pytest-cov))
2853 (home-page "https://github.com/ithaka/apiron")
2854 (synopsis "Python wrapper for interacting with RESTful APIs")
2855 (description
2856 "@code{apiron} provides a declarative, structured configuration of
2857services and endpoints with a unified interface for interacting with RESTful
2858APIs.")
2859 (license license:expat)))
2860
2861(define-public python-beren
2862 (package
2863 (name "python-beren")
2864 (version "0.7.0")
2865 (source
2866 (origin
2867 (method url-fetch)
2868 (uri (pypi-uri "beren" version))
2869 (sha256
2870 (base32 "1v3mdwfqsyza892zvs124ym9w1bkng1j56b7l4dwfjir3723xcgf"))))
2871 (build-system python-build-system)
2872 (arguments
2873 ;; The test tries to open a connection to a remote server.
2874 `(#:tests? #f))
2875 (propagated-inputs
2876 (list python-apiron))
2877 (home-page "https://github.com/teffalump/beren")
2878 (synopsis "REST client for Orthanc DICOM servers")
2879 (description
2880 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
2881 (license license:gpl3+)))
2882
2883(define-public python-requests
2884 (package
2885 (name "python-requests")
2886 (version "2.28.1")
2887 (source (origin
2888 (method url-fetch)
2889 (uri (pypi-uri "requests" version))
2890 (sha256
2891 (base32
2892 "10vrr7bijzrypvms3g2sgz8vya7f9ymmcv423ikampgy0aqrjmbw"))))
2893 (build-system python-build-system)
2894 (propagated-inputs
2895 (list python-certifi
2896 python-charset-normalizer
2897 python-idna
2898 python-urllib3))
2899 (arguments
2900 ;; FIXME: Some tests require network access.
2901 '(#:tests? #f))
2902 (home-page "http://python-requests.org/")
2903 (synopsis "Python HTTP library")
2904 (description
2905 "Requests is a Python HTTP client library. It aims to be easier to use
2906than Python’s urllib2 library.")
2907 (license license:asl2.0)))
2908
2909(define-public python-requests-kerberos
2910 (package
2911 (name "python-requests-kerberos")
2912 (version "0.14.0")
2913 (source (origin
2914 (method url-fetch)
2915 (uri (pypi-uri "requests-kerberos" version))
2916 (sha256
2917 (base32
2918 "1lbgjs779cjxhz07lfl9dbyp3qfh8a3ir2393042wfg518jd3afd"))))
2919 (build-system python-build-system)
2920 (propagated-inputs (list python-cryptography python-pyspnego
2921 python-requests))
2922 (home-page "https://github.com/requests/requests-kerberos")
2923 (synopsis "Kerberos authentication handler for python-requests")
2924 (description "This package provides a Kerberos authentication handler for
2925python-requests.")
2926 (license license:isc)))
2927
2928(define-public python-requests-unixsocket
2929 (package
2930 (name "python-requests-unixsocket")
2931 (version "0.2.0")
2932 (source
2933 (origin
2934 (method url-fetch)
2935 (uri (pypi-uri "requests-unixsocket" version))
2936 (sha256
2937 (base32
2938 "1sn12y4fw1qki5gxy9wg45gmdrxhrndwfndfjxhpiky3mwh1lp4y"))))
2939 (build-system python-build-system)
2940 (arguments
2941 '(#:phases
2942 (modify-phases %standard-phases
2943 (add-after 'unpack 'relax-requirements
2944 (lambda _
2945 (substitute* "test-requirements.txt"
2946 (("(.*)==(.*)" _ name) (string-append name "\n")))))
2947 (replace 'check
2948 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
2949 ;; Avoid a deprecation error.
2950 (substitute* "pytest.ini"
2951 (("--pep8") ""))
2952 (when tests?
2953 (add-installed-pythonpath inputs outputs)
2954 (invoke "pytest" "-vv")))))))
2955 (propagated-inputs
2956 (list python-pbr python-requests python-urllib3))
2957 (native-inputs
2958 (list python-apipkg
2959 python-appdirs
2960 python-execnet
2961 python-packaging
2962 python-pep8
2963 python-py
2964 python-pyparsing
2965 python-pytest
2966 python-pytest-cache
2967 python-pytest-pep8
2968 python-six
2969 python-waitress))
2970 (home-page "https://github.com/msabramo/requests-unixsocket")
2971 (synopsis "Talk HTTP via a UNIX domain socket")
2972 (description
2973 "This Python package lets you use the @code{requests} library to talk
2974HTTP via a UNIX domain socket.")
2975 (license license:asl2.0)))
2976
2977(define-public python-requests_ntlm
2978 (package
2979 (name "python-requests_ntlm")
2980 (version "1.1.0")
2981 (source
2982 (origin
2983 (method url-fetch)
2984 (uri (pypi-uri "requests_ntlm" version))
2985 (sha256
2986 (base32
2987 "0wgbqzaq9w7bas16b7brdb75f91bh3275fb459093bk1ihpck2ci"))))
2988 (build-system python-build-system)
2989 (propagated-inputs
2990 (list python-cryptography python-ntlm-auth python-requests))
2991 (home-page "https://github.com/requests/requests-ntlm")
2992 (synopsis
2993 "NTLM authentication support for Requests")
2994 (description
2995 "This package allows for HTTP NTLM authentication using the requests
2996library.")
2997 (license license:isc)))
2998
2999(define-public python-requests-mock
3000 (package
3001 (name "python-requests-mock")
3002 (version "1.8.0")
3003 (source
3004 (origin
3005 (method url-fetch)
3006 (uri (pypi-uri "requests-mock" version))
3007 (sha256
3008 (base32
3009 "09nj8fmyj7xz2mgwyvbw0fl9zybmx2d3qd2hf529vvjc9s24d3z6"))))
3010 (build-system python-build-system)
3011 (propagated-inputs
3012 (list python-requests python-six))
3013 (native-inputs
3014 (list python-pbr
3015 python-discover
3016 python-docutils
3017 python-fixtures
3018 python-mock
3019 python-purl
3020 python-pytest
3021 python-sphinx
3022 python-testrepository))
3023 (home-page "https://requests-mock.readthedocs.org/")
3024 (synopsis "Mock out responses from the requests package")
3025 (description
3026 "This module provides a building block to stub out the HTTP requests
3027portions of your testing code.")
3028 (license license:asl2.0)))
3029
3030(define-public python-requests-toolbelt
3031 (package
3032 (name "python-requests-toolbelt")
3033 (version "0.9.1")
3034 (source (origin
3035 (method url-fetch)
3036 (uri (pypi-uri "requests-toolbelt" version))
3037 (sha256
3038 (base32
3039 "1h3gm88dcjbd7gm229a7x5qkkhnsqsjz0m0l2xyavm2ab3a8k04n"))))
3040 (build-system python-build-system)
3041 (arguments
3042 '(#:phases (modify-phases %standard-phases
3043 (add-after 'unpack 'delete-problematic-tests
3044 (lambda _
3045 ;; Fails because of expired certificate.
3046 (delete-file "tests/test_x509_adapter.py")
3047 ;; Fails due to networking (socket.gaierror: [Errno -2]
3048 ;; Name or service not known).
3049 (delete-file "tests/test_multipart_encoder.py"))))))
3050 (native-inputs
3051 (list python-betamax python-mock python-pytest))
3052 (propagated-inputs
3053 (list python-requests))
3054 (synopsis "Extensions to python-requests")
3055 (description "This is a toolbelt of useful classes and functions to be used
3056with python-requests.")
3057 (home-page "https://github.com/requests/toolbelt/")
3058 (license license:asl2.0)))
3059
3060(define-public python-requests-ftp
3061 (package
3062 (name "python-requests-ftp")
3063 (version "0.3.1")
3064 (source
3065 (origin
3066 (method url-fetch)
3067 (uri (pypi-uri "requests-ftp" version))
3068 (sha256
3069 (base32
3070 "0yh5v21v36dsjsgv4y9dx4mmz35741l5jf6pbq9w19d8rfsww13m"))))
3071 (build-system python-build-system)
3072 (propagated-inputs
3073 (list python-requests))
3074 (home-page
3075 "https://github.com/Lukasa/requests-ftp")
3076 (synopsis "FTP Transport Adapter for Requests")
3077 (description
3078 "Requests-FTP is an implementation of a simple FTP transport
3079adapter for use with the Requests library.")
3080 (license license:asl2.0)))
3081
3082(define-public python-aioftp
3083 (package
3084 (name "python-aioftp")
3085 (version "0.21.4")
3086 (source (origin
3087 (method url-fetch)
3088 (uri (pypi-uri "aioftp" version))
3089 (sha256
3090 (base32
3091 "1f8vql2j2b3ykqyh5bxzsp8x5f2if2c1ya232ld3hz3cc7a2dfr8"))))
3092 (build-system python-build-system)
3093 (arguments
3094 (list #:phases #~(modify-phases %standard-phases
3095 (replace 'check
3096 (lambda* (#:key tests? #:allow-other-keys)
3097 (when tests?
3098 (invoke "pytest" "-vvv")))))))
3099 (native-inputs (list python-async-timeout python-pytest
3100 python-pytest-asyncio python-pytest-cov
3101 python-trustme))
3102 (propagated-inputs (list python-siosocks))
3103 (home-page "https://aioftp.readthedocs.io/")
3104 (synopsis "FTP client/server for asyncio in Python")
3105 (description
3106 "FTP client and server for asyncio (Python 3) Library implementing FTP
3107protocol, both client and server for Python asyncio module.
3108
3109 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
3110 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
3111 REST, LIST (as fallback).
3112
3113 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
3114 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
3115 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
3116 (license license:asl2.0)))
3117
3118(define-public python-msal
3119 (package
3120 (name "python-msal")
3121 (version "1.18.0")
3122 (home-page
3123 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
3124 (source (origin
3125 (method git-fetch)
3126 ;; Pypi does not have tests.
3127 (uri (git-reference (url home-page) (commit version)))
3128 (file-name (git-file-name name version))
3129 (sha256
3130 (base32
3131 "02d9vlvp08q1yffgn7a0y19451py1jly67q5ld6m2d9xidbrvac1"))))
3132 (build-system python-build-system)
3133 (arguments
3134 ;; Tests (all?) rely on network access and only some can be disabled by
3135 ;; setting the environment variable TRAVIS_TAG.
3136 (list #:tests? #f))
3137 (native-inputs (list python-mock))
3138 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
3139 (synopsis "Microsoft Authentication Library (MSAL) for Python")
3140 (description
3141 "The Microsoft Authentication Library for Python enables applications to
3142integrate with the Microsoft identity platform. It allows you to sign in
3143users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
3144Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
3145Microsoft Graph or your own APIs registered with the Microsoft identity
3146platform. It is built using industry standard OAuth2 and OpenID Connect
3147protocols.")
3148 (license license:expat)))
3149
3150(define-public oauth2ms
3151 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
3152 (revision "0"))
3153 (package
3154 (name "oauth2ms")
3155 (version (git-version "0.0.0" revision commit))
3156 (source (origin
3157 (method git-fetch)
3158 (uri (git-reference
3159 (url "https://github.com/harishkrupo/oauth2ms")
3160 (commit commit)))
3161 (file-name (git-file-name name version))
3162 (sha256
3163 (base32
3164 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
3165 (build-system copy-build-system)
3166 (arguments
3167 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
3168 ("." #$(string-append "share/doc/" name "-"
3169 version "/")
3170 #:include-regexp ("\\.org$")))
3171 #:phases #~(modify-phases %standard-phases
3172 (add-after 'install 'wrap-pythonpath
3173 (lambda* (#:key inputs outputs #:allow-other-keys)
3174 (let ((path (getenv "GUIX_PYTHONPATH")))
3175 (wrap-program (string-append #$output
3176 "/bin/oauth2ms")
3177 `("GUIX_PYTHONPATH" ":" prefix
3178 (,path)))))))))
3179 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
3180 (home-page "https://github.com/harishkrupo/oauth2ms")
3181 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
3182 (description
3183 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
3184endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
3185used as authentication in IMAP mail servers.")
3186 (license license:asl2.0))))
3187
3188(define-public python-oauthlib
3189 (package
3190 (name "python-oauthlib")
3191 (version "3.1.0")
3192 (source (origin
3193 (method url-fetch)
3194 (uri (pypi-uri "oauthlib" version))
3195 (sha256
3196 (base32
3197 "12gqnabwck30gdlpwm6af3s28qm9p2yc7b1w8s4fk9ncbz1irr5y"))))
3198 (build-system python-build-system)
3199 (arguments
3200 `(#:phases (modify-phases %standard-phases
3201 (replace 'check
3202 (lambda _
3203 (invoke "pytest" "-vv"))))))
3204 (native-inputs
3205 (list python-pytest python-pytest-cov python-mock))
3206 (propagated-inputs
3207 (list python-cryptography python-pyjwt python-blinker))
3208 (home-page "https://github.com/oauthlib/oauthlib")
3209 (synopsis "OAuth implementation for Python")
3210 (description
3211 "Oauthlib is a generic, spec-compliant, thorough implementation of the
3212OAuth request-signing logic.")
3213 (license license:bsd-3)))
3214
3215(define-public python-rauth
3216 (package
3217 (name "python-rauth")
3218 (version "0.7.3")
3219 (source
3220 (origin
3221 (method url-fetch)
3222 (uri (pypi-uri "rauth" version))
3223 (sha256
3224 (base32
3225 "02kv8w8l98ky223avyq7vw7x1f2ya9chrm59r77ylq45qb0xnk2j"))))
3226 (build-system python-build-system)
3227 (arguments
3228 `(#:test-target "check"))
3229 (propagated-inputs
3230 (list python-requests))
3231 (home-page "https://github.com/litl/rauth")
3232 (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
3233 (description
3234 "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly. It also
3235provides service wrappers for convenient connection initialization and
3236authenticated session objects providing things like keep-alive.")
3237 (license license:expat)))
3238
3239(define-public python-unalix
3240 (package
3241 (name "python-unalix")
3242 (version "0.9")
3243 (source
3244 (origin
3245 ;; There's only a wheel on PyPI.
3246 (method git-fetch)
3247 (uri (git-reference
3248 (url "https://github.com/AmanoTeam/Unalix")
3249 (commit (string-append "v" version))))
3250 (file-name (git-file-name name version))
3251 (sha256
3252 (base32 "0h8wc1axv26h753a8brc6dccqndx005c2bhr09gwg5c1hj9zsfml"))))
3253 (build-system python-build-system)
3254 (native-inputs (list python-pytest))
3255 (arguments
3256 '(#:phases
3257 (modify-phases %standard-phases
3258 (replace 'check
3259 (lambda* (#:key tests? #:allow-other-keys)
3260 (when tests?
3261 (invoke "pytest")))))))
3262 (home-page "https://pypi.org/project/Unalix/")
3263 (synopsis "Python library for removing tracking fields from URLs")
3264 (description "Unalix is a library written in Python implementing the
3265specification used by the @url{https://github.com/ClearURLs/Addon, ClearURLs}
3266addon for removing tracking fields from URLs.")
3267 (license license:lgpl3+)))
3268
3269(define-public python-urllib3
3270 (package
3271 (name "python-urllib3")
3272 (version "1.26.9")
3273 (source
3274 (origin
3275 (method url-fetch)
3276 (uri (pypi-uri "urllib3" version))
3277 (sha256
3278 (base32
3279 "13j4mkk6vgix4bixfqk3fhydsl3r5f61z94ss4fmwsl0fxjg3fma"))))
3280 (build-system python-build-system)
3281 (arguments `(#:tests? #f))
3282 (propagated-inputs
3283 (list ;; These 5 inputs are used to build urrlib3[secure]
3284 python-certifi
3285 python-cryptography
3286 python-idna
3287 python-pyopenssl
3288 python-pysocks))
3289 (home-page "https://urllib3.readthedocs.io/")
3290 (synopsis "HTTP library with thread-safe connection pooling")
3291 (description
3292 "Urllib3 supports features left out of urllib and urllib2 libraries. It
3293can reuse the same socket connection for multiple requests, it can POST files,
3294supports url redirection and retries, and also gzip and deflate decoding.")
3295 (license license:expat)))
3296
3297(define-public awscli
3298 (package
3299 ;; Note: updating awscli typically requires updating botocore as well.
3300 (name "awscli")
3301 (version "1.22.90")
3302 (source
3303 (origin
3304 (method url-fetch)
3305 (uri (pypi-uri name version))
3306 (sha256
3307 (base32
3308 "0ky4ax4xh7s8w1l0hwc7w9ii8afvh9nib3kz09qhiqdinxzrlv54"))))
3309 (build-system python-build-system)
3310 (arguments
3311 ;; FIXME: The 'pypi' release does not contain tests.
3312 '(#:tests? #f
3313 #:phases
3314 (modify-phases %standard-phases
3315 (add-after 'unpack 'use-recent-pyyaml
3316 (lambda _
3317 (substitute* '("awscli.egg-info/requires.txt"
3318 "setup.cfg"
3319 "setup.py")
3320 (("<5.5") "<=6"))))
3321 (add-after 'unpack 'fix-reference-to-groff
3322 (lambda* (#:key inputs #:allow-other-keys)
3323 (substitute* "awscli/help.py"
3324 (("if not self._exists_on_path\\('groff'\\):") "")
3325 (("raise ExecutableNotFoundError\\('groff'\\)") "")
3326 (("cmdline = \\['groff'")
3327 (string-append "cmdline = ['"
3328 (search-input-file inputs "bin/groff")
3329 "'"))))))))
3330 (inputs
3331 (list groff
3332 python-colorama-for-awscli
3333 python-botocore
3334 python-s3transfer
3335 python-docutils-0.15
3336 python-pyyaml
3337 python-rsa))
3338 (home-page "https://aws.amazon.com/cli/")
3339 (synopsis "Command line client for AWS")
3340 (description "AWS CLI provides a unified command line interface to the
3341Amazon Web Services (AWS) API.")
3342 (license license:asl2.0)))
3343
3344(define-public awscli-2
3345 (package
3346 (inherit awscli)
3347 (name "awscli")
3348 (version "2.2.0")
3349 (source
3350 (origin
3351 (method url-fetch)
3352 (uri (pypi-uri (string-append name "v2") version))
3353 (sha256
3354 (base32
3355 "0g1icsy2l4n540gnhliypy830dfp08hpfc3rk12dlxgc9v3ra4wl"))))
3356 (arguments
3357 ;; FIXME: The 'pypi' release does not contain tests.
3358 '(#:tests? #f))
3359 (inputs
3360 (list python-importlib-resources
3361 python-executor))))
3362
3363
3364(define-public python-wsgiproxy2
3365 (package
3366 (name "python-wsgiproxy2")
3367 (version "0.4.6")
3368 (source
3369 (origin
3370 (method url-fetch)
3371 (uri (pypi-uri "WSGIProxy2" version ".tar.gz"))
3372 (sha256
3373 (base32 "16jch5nic0hia28lps3c678s9s9mjdq8n87igxncjg0rpi5adqnf"))))
3374 (build-system python-build-system)
3375 (native-inputs
3376 (list python-webtest))
3377 (propagated-inputs
3378 (list python-requests python-six python-urllib3 python-webob))
3379 (home-page "https://github.com/gawel/WSGIProxy2/")
3380 (synopsis "WSGI Proxy with various http client backends")
3381 (description "WSGI turns HTTP requests into WSGI function calls.
3382WSGIProxy turns WSGI function calls into HTTP requests.
3383It also includes code to sign requests and pass private data,
3384and to spawn subprocesses to handle requests.")
3385 (license license:expat)))
3386
3387(define-public python-pastedeploy
3388 (package
3389 (name "python-pastedeploy")
3390 (version "2.1.1")
3391 (source
3392 (origin
3393 (method url-fetch)
3394 (uri (pypi-uri "PasteDeploy" version))
3395 (sha256
3396 (base32 "05s88qdjdwd9d9qs13fap7nqgxs7qs5qfzzjbrc5va13k2mxdskd"))))
3397 (build-system python-build-system)
3398 (arguments
3399 '(#:test-target "pytest"))
3400 (native-inputs
3401 (list python-pytest python-pytest-runner))
3402 (home-page "https://pylonsproject.org/")
3403 (synopsis
3404 "Load, configure, and compose WSGI applications and servers")
3405 (description
3406 "This tool provides code to load WSGI applications and servers from URIs;
3407these URIs can refer to Python Eggs for INI-style configuration files. Paste
3408Script provides commands to serve applications based on this configuration
3409file.")
3410 (license license:expat)))
3411
3412(define-public python-webtest
3413 (package
3414 (name "python-webtest")
3415 (version "2.0.35")
3416 (source
3417 (origin
3418 (method url-fetch)
3419 (uri (pypi-uri "WebTest" version))
3420 (sha256
3421 (base32 "11xhgdj251zkvz5w30fvspii08ki2vrpr1im9sph1wmlnasnihda"))))
3422 (build-system python-build-system)
3423 (arguments
3424 ;; Tests require python-pyquery, which creates a circular dependency.
3425 `(#:tests? #f))
3426 (propagated-inputs
3427 (list python-waitress python-webob python-six python-beautifulsoup4))
3428 (home-page "https://docs.pylonsproject.org/projects/webtest/")
3429 (synopsis "Helper to test WSGI applications")
3430 (description "Webtest allows you to test your Python web applications
3431without starting an HTTP server. It supports anything that supports the
3432minimum of WSGI.")
3433 (license license:expat)))
3434
3435(define-public python-flask
3436 (package
3437 (name "python-flask")
3438 (version "2.1.1")
3439 (source (origin
3440 (method url-fetch)
3441 (uri (pypi-uri "Flask" version))
3442 (sha256
3443 (base32
3444 "1j0rjly2yhbm566lq2s8543fs7fz86f77abps539djcfalzbvjd8"))))
3445 (build-system python-build-system)
3446 (arguments
3447 '(#:phases
3448 (modify-phases %standard-phases
3449 (replace 'check
3450 (lambda* (#:key tests? #:allow-other-keys)
3451 (when tests?
3452 (invoke "pytest" "-vv" "tests")))))))
3453 (native-inputs
3454 (list python-pytest))
3455 (propagated-inputs
3456 (list python-asgiref ;async extra
3457 python-click
3458 python-importlib-metadata
3459 python-itsdangerous
3460 python-jinja2
3461 python-werkzeug))
3462 (home-page "https://palletsprojects.com/p/flask/")
3463 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
3464 (description "Flask is a micro web framework based on the Werkzeug toolkit
3465and Jinja2 template engine. It is called a micro framework because it does not
3466presume or force a developer to use a particular tool or library.")
3467 (license license:bsd-3)))
3468
3469(define-public python-flask-wtf
3470 (package
3471 (name "python-flask-wtf")
3472 (version "1.0.1")
3473 (source
3474 (origin
3475 (method url-fetch)
3476 (uri (pypi-uri "Flask-WTF" version))
3477 (sha256
3478 (base32
3479 "1jd614662r6ifh4svs8zfwm4k8bal5z3n6pq607bas8gxrpmrzil"))))
3480 (build-system python-build-system)
3481 (arguments
3482 '(#:phases
3483 (modify-phases %standard-phases
3484 (replace 'check
3485 (lambda _
3486 (invoke "pytest" "-vv"))))))
3487 (propagated-inputs
3488 (list python-flask python-itsdangerous python-wtforms))
3489 (native-inputs
3490 (list python-pytest))
3491 (home-page "https://github.com/lepture/flask-wtf")
3492 (synopsis "Simple integration of Flask and WTForms")
3493 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
3494upload, and reCAPTCHA.")
3495 (license license:bsd-3)))
3496
3497(define-public python-flask-multistatic
3498 (package
3499 (name "python-flask-multistatic")
3500 (version "1.0")
3501 (source
3502 (origin
3503 (method url-fetch)
3504 (uri (pypi-uri "flask-multistatic" version))
3505 (sha256
3506 (base32
3507 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
3508 (build-system python-build-system)
3509 (propagated-inputs
3510 (list python-flask))
3511 (home-page "https://pagure.io/flask-multistatic")
3512 (synopsis "Flask plugin to allow overriding static files")
3513 (description "@code{flask-multistatic} is a flask plugin that adds support
3514for overriding static files.")
3515 (license license:gpl3+)))
3516
3517(define-public python-cookies
3518 (package
3519 (name "python-cookies")
3520 (version "2.2.1")
3521 (source (origin
3522 (method url-fetch)
3523 (uri (pypi-uri "cookies" version))
3524 (sha256
3525 (base32
3526 "13pfndz8vbk4p2a44cfbjsypjarkrall71pgc97glk5fiiw9idnn"))))
3527 (build-system python-build-system)
3528 (arguments
3529 `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
3530 #:tests? #f))
3531 (native-inputs
3532 (list python-pytest))
3533 (synopsis "HTTP cookie parser and renderer")
3534 (description "A RFC 6265-compliant HTTP cookie parser and renderer in
3535Python.")
3536 (home-page "https://gitlab.com/sashahart/cookies")
3537 (license license:expat)))
3538
3539(define-public python-responses
3540 (package
3541 (name "python-responses")
3542 (version "0.10.6")
3543 (source (origin
3544 (method url-fetch)
3545 (uri (pypi-uri "responses" version))
3546 (sha256
3547 (base32
3548 "147pacwkkqy3qf3hr33fnl1xbzgw0zsm3qppvvy9qhq8h069qbah"))))
3549 (build-system python-build-system)
3550 (arguments
3551 `(;; Test suite is not distributed:
3552 ;; https://github.com/getsentry/responses/issues/38
3553 #:tests? #f))
3554 (native-inputs
3555 (list python-mock))
3556 (propagated-inputs
3557 (list python-requests python-cookies python-six))
3558 (home-page "https://github.com/getsentry/responses")
3559 (synopsis "Utility for mocking out the `requests` Python library")
3560 (description "A utility library for mocking out the `requests` Python
3561library.")
3562 (license license:asl2.0)))
3563
3564(define-public python-grequests
3565 (package
3566 (name "python-grequests")
3567 (version "0.3.0")
3568 (source
3569 (origin
3570 (method url-fetch)
3571 (uri (pypi-uri "grequests" version))
3572 (sha256
3573 (base32
3574 "1j9icncllbkv7x5719b20mx670c6q1jrdx1sakskkarvx3pc8h8g"))))
3575 (build-system python-build-system)
3576 (propagated-inputs
3577 (list python-gevent python-requests))
3578 (native-inputs
3579 (list python-nose python-zope-interface python-zope-event))
3580 (home-page "https://github.com/kennethreitz/grequests")
3581 (synopsis "Python library for asynchronous HTTP requests")
3582 (description "GRequests is a Python library that allows you to use
3583@code{Requests} with @code{Gevent} to make asynchronous HTTP Requests easily")
3584 (license license:bsd-2)))
3585
3586(define-public python-dpkt
3587 (package
3588 (name "python-dpkt")
3589 (version "1.9.4")
3590 (source
3591 (origin
3592 (method url-fetch)
3593 (uri (pypi-uri "dpkt" version))
3594 (sha256
3595 (base32
3596 "1d28r8pmhzjjd6hrn1xcddinfhwv8lcl1s59ygmqa8kfmz5pkrgl"))))
3597 (build-system python-build-system)
3598 (home-page "https://github.com/kbandla/dpkt")
3599 (synopsis "Packet generator and parser for TCP/IP protocols")
3600 (description "The dpkt module is a fast, simple packet generator and parser
3601for the basic TCP/IP protocols.")
3602 (license license:bsd-3)))
3603
3604(define-public python-geventhttpclient
3605 (package
3606 (name "python-geventhttpclient")
3607 (version "1.5.3")
3608 (source (origin
3609 (method url-fetch)
3610 (uri (pypi-uri "geventhttpclient" version))
3611 (sha256
3612 (base32
3613 "104p14p67xa5gch8dy2zqmzmjra31fflk1c1alrry8dp8bzwj3nq"))
3614 (modules '((guix build utils)))
3615 (snippet
3616 '(begin
3617 ;; Delete pre-compiled files.
3618 (for-each delete-file (find-files "src/geventhttpclient"
3619 ".*\\.pyc"))))))
3620 (build-system python-build-system)
3621 (arguments
3622 '(#:phases
3623 (modify-phases %standard-phases
3624 (add-after 'unpack 'delete-network-tests
3625 (lambda _
3626 (delete-file "src/geventhttpclient/tests/test_client.py")))
3627 (add-after 'unpack 'fix-compatibility-issue
3628 ;; See: https://github.com/gwik/geventhttpclient/issues/137.
3629 (lambda _
3630 (substitute* "src/geventhttpclient/tests/test_ssl.py"
3631 ((".*sock.last_seen_sni = None.*")
3632 ""))))
3633 (replace 'check
3634 (lambda* (#:key tests? #:allow-other-keys)
3635 (when tests?
3636 (invoke "pytest" "src/geventhttpclient/tests" "-v"
3637 ;; Append the test modules to sys.path to avoid
3638 ;; namespace conflict which breaks SSL tests.
3639 "--import-mode=append")))))))
3640 (native-inputs
3641 (list python-dpkt python-pytest))
3642 (propagated-inputs
3643 (list python-brotli python-certifi python-gevent python-six))
3644 (home-page "https://github.com/gwik/geventhttpclient")
3645 (synopsis "HTTP client library for gevent")
3646 (description "@code{python-geventhttpclient} is a high performance,
3647concurrent HTTP client library for python using @code{gevent}.")
3648 (license license:expat)))
3649
3650(define-public python-requests-oauthlib
3651 (package
3652 (name "python-requests-oauthlib")
3653 (version "1.2.0")
3654 (source
3655 (origin
3656 (method url-fetch)
3657 (uri (pypi-uri "requests-oauthlib" version))
3658 (sha256
3659 (base32
3660 "0mrglgcvq7k48pf27s4gifdk0za8xmgpf55jy15yjj471qrk6rdx"))))
3661 (build-system python-build-system)
3662 (arguments
3663 `(#:phases
3664 (modify-phases %standard-phases
3665 ;; removes tests that require network access
3666 (add-before 'check 'pre-check
3667 (lambda _
3668 (delete-file "tests/test_core.py")
3669 #t)))))
3670 (native-inputs
3671 (list python-pyjwt python-requests-mock python-mock))
3672 (propagated-inputs
3673 (list python-oauthlib python-requests))
3674 (home-page
3675 "https://github.com/requests/requests-oauthlib")
3676 (synopsis
3677 "OAuthlib authentication support for Requests")
3678 (description
3679 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
3680provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
3681 (license license:isc)))
3682
3683(define-public python-url
3684 (package
3685 (name "python-url")
3686 (version "0.2.0")
3687 (source (origin
3688 (method url-fetch)
3689 (uri (pypi-uri "url" version))
3690 (sha256
3691 (base32
3692 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
3693 (build-system python-build-system)
3694 (propagated-inputs
3695 (list python-publicsuffix))
3696 (native-inputs
3697 (list python-coverage python-nose))
3698 (arguments
3699 `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
3700 (home-page "https://github.com/seomoz/url-py")
3701 (synopsis "URL Parsing")
3702 (description "Library for parsing urls.")
3703 (license license:expat)))
3704
3705(define-public python-cachecontrol
3706 (package
3707 (name "python-cachecontrol")
3708 (version "0.12.10")
3709 (source
3710 (origin
3711 (method git-fetch)
3712 ;; Pypi does not have tests.
3713 (uri (git-reference
3714 (url "https://github.com/ionrock/cachecontrol")
3715 (commit (string-append "v" version))))
3716 (file-name (git-file-name name version))
3717 (sha256
3718 (base32
3719 "0fviacb13h72l5c77p35lgr6kvlidfdb9xsicg3v6lblmp9cn2ws"))))
3720 (build-system python-build-system)
3721 (arguments
3722 ;; Versions > 0.11.6 depend on CherryPy for testing.
3723 ;; It's too much work to package CherryPy for now.
3724 `(#:tests? #f))
3725 (propagated-inputs
3726 (list python-requests python-msgpack python-lockfile))
3727 (home-page "https://github.com/ionrock/cachecontrol")
3728 (synopsis "The httplib2 caching algorithms for use with requests")
3729 (description "CacheControl is a port of the caching algorithms in
3730@code{httplib2} for use with @code{requests} session objects.")
3731 (license license:asl2.0)))
3732
3733(define-public python-cachecontrol-0.11
3734 (package
3735 (inherit python-cachecontrol)
3736 (name "python-cachecontrol")
3737 (version "0.11.7")
3738 (source
3739 (origin
3740 (method url-fetch)
3741 (uri (pypi-uri "CacheControl" version))
3742 (sha256
3743 (base32
3744 "07jsfhlbcwgqg6ayz8nznzaqg5rmxqblbzxz1qvg5wc44pcjjy4g"))))))
3745
3746(define-public python-betamax
3747 (package
3748 (name "python-betamax")
3749 (version "0.8.1")
3750 (source
3751 (origin
3752 (method url-fetch)
3753 (uri (pypi-uri "betamax" version))
3754 (sha256
3755 (base32
3756 "1hki1c2vs7adq7zr56wi6i5bhrkia4s2ywpv2c98ibnczz709w2v"))))
3757 (build-system python-build-system)
3758 (arguments
3759 '(;; Many tests fail because they require networking.
3760 #:tests? #f))
3761 (propagated-inputs
3762 (list python-requests))
3763 (home-page "https://github.com/sigmavirus24/betamax")
3764 (synopsis "Record HTTP interactions with python-requests")
3765 (description "Betamax will record your test suite's HTTP interactions and
3766replay them during future tests. It is designed to work with python-requests.")
3767 (license license:expat)))
3768
3769(define-public python-betamax-matchers
3770 (package
3771 (name "python-betamax-matchers")
3772 (version "0.4.0")
3773 (source
3774 (origin
3775 (method url-fetch)
3776 (uri (pypi-uri "betamax-matchers" version))
3777 (sha256
3778 (base32
3779 "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
3780 (build-system python-build-system)
3781 (propagated-inputs
3782 (list python-betamax python-requests-toolbelt))
3783 (home-page "https://github.com/sigmavirus24/betamax_matchers")
3784 (synopsis "VCR imitation for python-requests")
3785 (description "@code{betamax-matchers} provides a set of Matchers for
3786Betamax.")
3787 (license license:asl2.0)))
3788
3789(define-public python-betamax-serializers
3790 (package
3791 (name "python-betamax-serializers")
3792 (version "0.2.1")
3793 (source
3794 (origin
3795 (method url-fetch)
3796 (uri (pypi-uri "betamax-serializers" version))
3797 (sha256
3798 (base32 "0ja9isbjmzzhxdj69s0kdsvw8nkp073w6an6a4liy5vk3fdl2p1l"))))
3799 (build-system python-build-system)
3800 (propagated-inputs
3801 (list python-betamax python-pyyaml))
3802 (synopsis "Set of third-party serializers for Betamax")
3803 (description "Betamax-Serializers are an experimental set of Serializers for
3804Betamax that may possibly end up in the main package.")
3805 (home-page "https://gitlab.com/betamax/serializers")
3806 (license license:asl2.0)))
3807
3808(define-public python-s3transfer
3809 (package
3810 (name "python-s3transfer")
3811 (version "0.5.0")
3812 (source (origin
3813 (method url-fetch)
3814 (uri (pypi-uri "s3transfer" version))
3815 (sha256
3816 (base32
3817 "0k6sc956yrrv9b4laa0r79jhxajpyxr21jcd1ka8m1n53lz85vah"))))
3818 (build-system python-build-system)
3819 (arguments
3820 `(#:phases
3821 (modify-phases %standard-phases
3822 (replace 'check
3823 (lambda* (#:key tests? #:allow-other-keys)
3824 (when tests?
3825 ;; Some of the 'integration' tests require network access or
3826 ;; login credentials.
3827 (invoke "nosetests" "--exclude=integration")))))))
3828 (native-inputs
3829 (list python-docutils python-mock python-nose))
3830 (propagated-inputs
3831 (list python-botocore python-urllib3))
3832 (synopsis "Amazon S3 Transfer Manager")
3833 (description "S3transfer is a Python library for managing Amazon S3
3834transfers.")
3835 (home-page "https://github.com/boto/s3transfer")
3836 (license license:asl2.0)))
3837
3838(define-public python-slimit
3839 (package
3840 (name "python-slimit")
3841 (version "0.8.1")
3842 (source
3843 (origin
3844 (method url-fetch)
3845 (uri (pypi-uri "slimit" version ".zip"))
3846 (sha256
3847 (base32
3848 "02vj2x728rs1127q2nc27frrqra4fczivnb7gch6n5lzi7pxqczl"))))
3849 (build-system python-build-system)
3850 (native-inputs
3851 (list unzip))
3852 (propagated-inputs
3853 (list python-ply))
3854 (home-page "https://slimit.readthedocs.io/")
3855 (synopsis "JavaScript minifier, parser and lexer written in Python")
3856 (description
3857 "SlimIt is a JavaScript minifier written in Python. It compiles
3858JavaScript into more compact code so that it downloads and runs faster.
3859SlimIt also provides a library that includes a JavaScript parser, lexer,
3860pretty printer and a tree visitor.")
3861 (license license:expat)))
3862
3863(define-public python-flask-restful
3864 (package
3865 (name "python-flask-restful")
3866 (version "0.3.8")
3867 (source
3868 (origin
3869 (method url-fetch)
3870 (uri (pypi-uri "Flask-RESTful" version))
3871 (patches (search-patches "python-flask-restful-werkzeug-compat.patch"))
3872 (sha256
3873 (base32
3874 "05b9lzx5yc3wgml2bcq50lq35h66m8zpj6dc9advcb5z3acsbaay"))))
3875 (build-system python-build-system)
3876 (arguments
3877 `(#:phases
3878 (modify-phases %standard-phases
3879 (add-after 'unpack 'fix-imports
3880 (lambda _
3881 (substitute* "flask_restful/__init__.py"
3882 (("flask\\.helpers") "flask.scaffold")))))))
3883 (propagated-inputs
3884 (list python-aniso8601 python-flask python-pytz))
3885 (native-inputs
3886 (list ;; Optional dependency of Flask. Tests need it.
3887 python-blinker python-mock ; For tests
3888 python-nose)) ;for tests
3889 (home-page
3890 "https://www.github.com/flask-restful/flask-restful/")
3891 (synopsis
3892 "Flask module for creating REST APIs")
3893 (description
3894 "This package contains a Flask module for creating REST APIs.")
3895 (license license:bsd-3)))
3896
3897(define-public python-flask-basicauth
3898 (package
3899 (name "python-flask-basicauth")
3900 (version "0.2.0")
3901 (source
3902 (origin
3903 (method url-fetch)
3904 (uri (pypi-uri "Flask-BasicAuth" version))
3905 (sha256
3906 (base32
3907 "1zq1spkjr4sjdnalpp8wl242kdqyk6fhbnhr8hi4r4f0km4bspnz"))))
3908 (build-system python-build-system)
3909 (arguments
3910 `(#:phases (modify-phases %standard-phases
3911 (add-after 'unpack 'fix-imports
3912 (lambda _
3913 (substitute* '("docs/index.rst"
3914 "docs/conf.py"
3915 "flask_basicauth.py"
3916 "test_basicauth.py")
3917 (("flask\\.ext\\.basicauth")
3918 "flask_basicauth"))
3919 #t)))))
3920 (propagated-inputs
3921 (list python-flask))
3922 (home-page "https://github.com/jpvanhal/flask-basicauth")
3923 (synopsis "HTTP basic access authentication for Flask")
3924 (description
3925 "This package provides HTTP basic access authentication for Flask.")
3926 (license license:bsd-3)))
3927
3928(define-public python-flask-htpasswd
3929 (package
3930 (name "python-flask-htpasswd")
3931 (version "0.3.1")
3932 (source
3933 (origin
3934 (method url-fetch)
3935 (uri (pypi-uri "flask-htpasswd" version))
3936 (sha256
3937 (base32
3938 "14q1y1y9i9bhabdnwd25jqzc4ljli23smxfyyh8abxz1vq93pxra"))))
3939 (build-system python-build-system)
3940 (propagated-inputs
3941 (list python-flask python-itsdangerous python-passlib python-tox))
3942 (home-page "https://github.com/carsongee/flask-htpasswd")
3943 (synopsis "Basic authentication via htpasswd files in Flask applications")
3944 (description "This package provides Basic authentication via
3945@file{htpasswd} files and access_token authentication in Flask
3946applications.")
3947 (license license:bsd-3)))
3948
3949(define-public python-flask-sqlalchemy
3950 (package
3951 (name "python-flask-sqlalchemy")
3952 (version "2.5.1")
3953 (source (origin
3954 (method url-fetch)
3955 (uri (pypi-uri "Flask-SQLAlchemy" version))
3956 (sha256
3957 (base32
3958 "04jrx4sjrz1b20j38qk4qin975xwz30krzq59rfv3b3w7ss49nib"))))
3959 (build-system python-build-system)
3960 (propagated-inputs
3961 (list python-flask python-sqlalchemy))
3962 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
3963 (synopsis "Module adding SQLAlchemy support to your Flask application")
3964 (description
3965 "This package adds SQLAlchemy support to your Flask application.")
3966 (license license:bsd-3)))
3967
3968(define-public python-flask-restful-swagger
3969 (package
3970 (name "python-flask-restful-swagger")
3971 (version "0.20.1")
3972 (source
3973 (origin
3974 (method url-fetch)
3975 (uri (pypi-uri "flask-restful-swagger" version))
3976 (sha256
3977 (base32
3978 "1p66f98b5zpypnnz56pxpbirchqj6aniw6qyrp8h572l0dn9xlvq"))))
3979 (build-system python-build-system)
3980 (arguments '(#:tests? #f)) ;no tests
3981 (propagated-inputs
3982 (list python-flask-restful))
3983 (home-page "https://github.com/rantav/flask-restful-swagger")
3984 (synopsis "Extract Swagger specs from Flask-Restful projects")
3985 (description "This package lets you extract Swagger API documentation
3986specs from your Flask-Restful projects.")
3987 (license license:expat)))
3988
3989(define-public python-htmlmin
3990 (package
3991 (name "python-htmlmin")
3992 (version "0.1.12")
3993 (source
3994 (origin
3995 (method url-fetch)
3996 (uri (pypi-uri "htmlmin" version))
3997 (sha256
3998 (base32
3999 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
4000 (arguments
4001 `(#:tests? #f)) ; no tests
4002 (build-system python-build-system)
4003 (home-page "https://htmlmin.readthedocs.org/en/latest/")
4004 (synopsis "HTML minifier")
4005 (description "@code{htmlmin} is an HTML minifier that just works.
4006It comes with safe defaults and easily configurable options.")
4007 (license license:bsd-3)))
4008
4009(define-public python-flask-htmlmin
4010 (package
4011 (name "python-flask-htmlmin")
4012 (version "1.2")
4013 (source
4014 (origin
4015 (method url-fetch)
4016 (uri (pypi-uri "Flask-HTMLmin" version))
4017 (sha256
4018 (base32
4019 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
4020 (propagated-inputs
4021 (list python-flask python-htmlmin))
4022 (build-system python-build-system)
4023 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
4024 (synopsis "HTML response minifier for Flask")
4025 (description
4026 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
4027 (license license:bsd-3)))
4028
4029(define-public python-jsmin
4030 (package
4031 (name "python-jsmin")
4032 (version "3.0.1")
4033 (source
4034 (origin
4035 (method url-fetch)
4036 (uri (pypi-uri "jsmin" version))
4037 (sha256
4038 (base32
4039 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
4040 (build-system python-build-system)
4041 (home-page "https://github.com/tikitu/jsmin/")
4042 (synopsis "Python JavaScript minifier")
4043 (description
4044 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
4045on the command line.")
4046 (license license:expat)))
4047
4048(define-public python-flask-login
4049 (package
4050 (name "python-flask-login")
4051 (version "0.6.0")
4052 (source
4053 (origin
4054 (method git-fetch)
4055 (uri (git-reference
4056 (url "https://github.com/maxcountryman/flask-login")
4057 (commit version)))
4058 (file-name (git-file-name name version))
4059 (sha256
4060 (base32 "12yw01ccgjn9c88cbkrd6k1ykjxd8fxip2b1isvxjirphnlqhn9g"))))
4061 (build-system python-build-system)
4062 (arguments
4063 (list #:phases
4064 #~(modify-phases %standard-phases
4065 (replace 'check
4066 (lambda* (#:key tests? #:allow-other-keys)
4067 (when tests?
4068 (invoke "pytest" "-vv" "-c" "/dev/null")))))))
4069 (propagated-inputs
4070 (list python-flask))
4071 (native-inputs
4072 ;; For tests.
4073 (list python-blinker
4074 python-mock
4075 python-pytest
4076 python-semantic-version
4077 python-werkzeug))
4078 (home-page "https://github.com/maxcountryman/flask-login")
4079 (synopsis "User session management for Flask")
4080 (description
4081 "@code{Flask-Login} provides user session management for Flask. It
4082handles the common tasks of logging in, logging out, and remembering your
4083users' sessions over extended periods of time.")
4084 (license license:expat)))
4085
4086(define-public python-oauth2client
4087 (package
4088 (name "python-oauth2client")
4089 (version "4.0.0")
4090 (source
4091 (origin
4092 (method url-fetch)
4093 (uri (pypi-uri "oauth2client" version))
4094 (sha256
4095 (base32
4096 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
4097 (build-system python-build-system)
4098 (arguments
4099 `(#:tests? #f))
4100 (propagated-inputs
4101 (list python-httplib2 python-pyasn1 python-pyasn1-modules python-rsa
4102 python-six))
4103 (home-page "https://github.com/google/oauth2client/")
4104 (synopsis "OAuth 2.0 client library")
4105 (description "@code{python-oauth2client} provides an OAuth 2.0 client
4106library for Python")
4107 (license license:asl2.0)))
4108
4109(define-public python-flask-oidc
4110 (package
4111 (name "python-flask-oidc")
4112 (version "1.4.0")
4113 (source
4114 (origin
4115 (method url-fetch)
4116 (uri (pypi-uri "flask-oidc" version))
4117 (sha256
4118 (base32
4119 "0klgwpn2iy5y7011xh2c8zkryxdwkpxh7qjs3hp5cynl748ia4hc"))))
4120 (build-system python-build-system)
4121 (arguments
4122 (list #:phases
4123 #~(modify-phases %standard-phases
4124 (replace 'check
4125 (lambda* (#:key tests? #:allow-other-keys)
4126 (when tests?
4127 (invoke "nosetests")))))))
4128 (propagated-inputs
4129 (list python-flask python-itsdangerous python-oauth2client
4130 python-six))
4131 (native-inputs
4132 (list python-nose python-mock))
4133 (home-page "https://github.com/puiterwijk/flask-oidc")
4134 (synopsis "OpenID Connect extension for Flask")
4135 (description "@code{python-flask-oidc} provides an OpenID Connect extension
4136for Flask.")
4137 (license license:bsd-2)))
4138
4139(define-public python-webassets
4140 (package
4141 (name "python-webassets")
4142 (version "2.0")
4143 (source
4144 (origin
4145 (method url-fetch)
4146 (uri (pypi-uri "webassets" version))
4147 (sha256
4148 (base32
4149 "1kc1042jydgk54xpgcp0r1ib4gys91nhy285jzfcxj3pfqrk4w8n"))))
4150 (build-system python-build-system)
4151 (arguments
4152 '(#:phases (modify-phases %standard-phases
4153 (add-before 'check 'adjust-tests
4154 (lambda _
4155 ;; Fix for Python 3.9 compatibility.
4156 (substitute* "tests/test_script.py"
4157 (("self\\.t\\.isAlive")
4158 "self.t.is_alive"))
4159 ;; This test requires 'postcss' and 'babel' which are
4160 ;; not yet available in Guix.
4161 (delete-file "tests/test_filters.py")))
4162 (replace 'check
4163 (lambda _
4164 (invoke "pytest" "-vv"))))))
4165 (native-inputs
4166 (list python-jinja2 python-mock python-nose python-pytest))
4167 (home-page "https://github.com/miracle2k/webassets")
4168 (synopsis "Media asset management")
4169 (description "Merges, minifies and compresses Javascript and CSS files,
4170supporting a variety of different filters, including YUI, jsmin, jspacker or
4171CSS tidy. Also supports URL rewriting in CSS files.")
4172 (license license:bsd-2)))
4173
4174(define-public python-cssmin
4175 (package
4176 (name "python-cssmin")
4177 (version "0.2.0")
4178 (source
4179 (origin
4180 (method url-fetch)
4181 (uri (pypi-uri "cssmin" version))
4182 (sha256
4183 (base32
4184 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
4185 (build-system python-build-system)
4186 (home-page "https://github.com/zacharyvoase/cssmin")
4187 (synopsis "Python port of the YUI CSS Compressor")
4188 (description "Python port of the YUI CSS Compressor.")
4189 (license (list license:expat license:bsd-3))))
4190
4191(define-public python-elasticsearch
4192 (package
4193 (name "python-elasticsearch")
4194 (version "7.13.4")
4195 (source
4196 (origin
4197 (method url-fetch)
4198 (uri (pypi-uri "elasticsearch" version))
4199 (sha256
4200 (base32
4201 "1q38w9nh2j2yi82d8rhzb57597l4lq5zx7xzfg45xf7ffrgsipaj"))))
4202 (build-system python-build-system)
4203 (propagated-inputs
4204 (list python-certifi python-urllib3))
4205 (arguments
4206 ;; tests require the test_elasticsearch module but it is not distributed.
4207 `(#:tests? #f))
4208 (home-page "https://github.com/elastic/elasticsearch-py")
4209 (synopsis "Low-level client for Elasticsearch")
4210 (description "Official low-level client for Elasticsearch. Its goal is to
4211provide common ground for all Elasticsearch-related code in Python; because of
4212this it tries to be opinion-free and very extendable.")
4213 (license license:expat)))
4214
4215(define-public python-engineio
4216 (package
4217 (name "python-engineio")
4218 (version "4.0.1")
4219 (source
4220 (origin
4221 (method url-fetch)
4222 (uri (pypi-uri "python-engineio" version))
4223 (sha256
4224 (base32
4225 "0xqkjjxbxakz9fd7v94rkr2r5r9nrkap2c3gf3abbd0j6ld5qmxv"))))
4226 (build-system python-build-system)
4227 (propagated-inputs
4228 (list python-aiohttp python-requests python-websocket-client))
4229 (arguments '(#:tests? #f)) ; Tests not included in release tarball.
4230 (home-page "https://github.com/miguelgrinberg/python-engineio/")
4231 (synopsis "Engine.IO server")
4232 (description "Python implementation of the Engine.IO realtime client and
4233server.")
4234 (license license:expat)))
4235
4236(define-public python-flask-migrate
4237 (package
4238 (name "python-flask-migrate")
4239 (version "3.1.0")
4240 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
4241 (source (origin
4242 (method git-fetch)
4243 (uri (git-reference (url home-page)
4244 (commit (string-append "v" version))))
4245 (file-name (git-file-name name version))
4246 (sha256
4247 (base32
4248 "0zj7qpknvlhrh4fsp5sx4fwyx3sp41ynclka992zympm3xym9zyq"))))
4249 (build-system python-build-system)
4250 (propagated-inputs
4251 (list python-flask python-alembic python-flask-sqlalchemy))
4252 (synopsis "SQLAlchemy database migrations for Flask programs using
4253Alembic")
4254 (description "This package contains SQLAlchemy database migration tools
4255for Flask programs that are using @code{python-alembic}.")
4256 (license license:expat)))
4257
4258(define-public python-genshi
4259 (package
4260 (name "python-genshi")
4261 (version "0.7.5")
4262 (source
4263 (origin
4264 (method git-fetch)
4265 (uri (git-reference
4266 (url "https://github.com/edgewall/genshi")
4267 (commit version)))
4268 (file-name (git-file-name name version))
4269 (sha256
4270 (base32 "04i0caywiwrgw09grz988n15qr9lr31d9n6a529p8v80cy1fv23c"))))
4271 (propagated-inputs
4272 (list python-six))
4273 (build-system python-build-system)
4274 (home-page "https://genshi.edgewall.org/")
4275 (synopsis "Toolkit for generation of output for the web")
4276 (description "Genshi is a Python library that provides an integrated set
4277of components for parsing, generating, and processing HTML, XML or other
4278textual content for output generation on the web.")
4279 (license license:bsd-3)))
4280
4281(define-public python-flask-principal
4282 (package
4283 (name "python-flask-principal")
4284 (version "0.4.0")
4285 (source
4286 (origin
4287 (method url-fetch)
4288 (uri (pypi-uri "Flask-Principal" version))
4289 (sha256
4290 (base32
4291 "0lwlr5smz8vfm5h9a9i7da3q1c24xqc6vm9jdywdpgxfbi5i7mpm"))))
4292 (build-system python-build-system)
4293 (propagated-inputs
4294 (list python-blinker))
4295 (native-inputs
4296 (list python-flask python-nose))
4297 (home-page "https://pythonhosted.org/Flask-Principal/")
4298 (synopsis "Identity management for Flask")
4299 (description "@code{flask_principal} is a identity management library for
4300Flask. It supports managing both authentication and authorization data in a
4301thread-local variable.")
4302 (license license:expat)))
4303
4304(define-public python-flask-httpauth
4305 (package
4306 (name "python-flask-httpauth")
4307 (version "3.2.3")
4308 (source
4309 (origin
4310 (method url-fetch)
4311 (uri (pypi-uri "Flask-HTTPAuth" version))
4312 (sha256
4313 (base32
4314 "13gff5w1mqpzm5nccyg02v3ifb9ifqh5k866cssjhghhg6msfjsz"))))
4315 (build-system python-build-system)
4316 (native-inputs
4317 (list python-flask))
4318 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
4319 (synopsis "Basic and Digest HTTP authentication for Flask routes")
4320 (description "@code{flask_httpauth} provides Basic and Digest HTTP
4321authentication for Flask routes.")
4322 (license license:expat)))
4323
4324(define-public python-uritemplate
4325 (package
4326 (name "python-uritemplate")
4327 (version "4.1.1")
4328 (source
4329 (origin
4330 (method url-fetch)
4331 (uri (pypi-uri "uritemplate" version))
4332 (sha256
4333 (base32
4334 "1w14a775d92mx9pdhb5zimifpfr2lfcn0vfdpjagcy9vbkyfsij3"))))
4335 (build-system python-build-system)
4336 (home-page "https://uritemplate.readthedocs.org")
4337 (synopsis "Library to deal with URI Templates")
4338 (description "@code{uritemplate} provides Python library to deal with URI
4339Templates.")
4340 ;; The software is made available under the terms of *either* of the
4341 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
4342 ;; are made under *both* licenses (excerpt from the LICENSE file).
4343 (license (list license:bsd-2 license:asl2.0))))
4344
4345(define-public python-publicsuffix
4346 (package
4347 (name "python-publicsuffix")
4348 (version "1.1.0")
4349 (source (origin
4350 (method url-fetch)
4351 (uri (pypi-uri "publicsuffix" version))
4352 (sha256
4353 (base32
4354 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
4355 (build-system python-build-system)
4356 (arguments
4357 `(#:tests? #f)) ; tests use the internet
4358 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
4359 (synopsis "Get suffix for a domain name")
4360 (description "Get a public suffix for a domain name using the Public Suffix
4361List.")
4362 (license license:expat)))
4363
4364(define-public python-publicsuffix2
4365 (package
4366 (name "python-publicsuffix2")
4367 (version "2.20191221")
4368 (source
4369 (origin
4370 (method url-fetch)
4371 (uri (pypi-uri "publicsuffix2" version))
4372 (sha256
4373 (base32 "0yzysvfj1najr1mb4pcqrbmjir3xpb69rlffln95a3cdm8qwry00"))))
4374 (build-system python-build-system)
4375 (arguments
4376 '(#:phases
4377 (modify-phases %standard-phases
4378 (add-after 'unpack 'ignore-maintainer-inputs
4379 (lambda _
4380 ;; Comment out a demand for python-requests, which is used only by
4381 ;; the unused ‘update_psl’ helper command.
4382 (substitute* "setup.py"
4383 (("'requests " match)
4384 (format #f "# ~a" match)))
4385 #t)))
4386 #:tests? #f)) ; the test suite requires network access
4387 (home-page "https://github.com/pombredanne/python-publicsuffix2")
4388 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
4389 (description "Get a public suffix for a domain name using the Public Suffix
4390List. Forked from and using the same API as the publicsuffix package.")
4391 (license (list license:expat license:mpl2.0))))
4392
4393(define-public python-werkzeug
4394 (package
4395 (name "python-werkzeug")
4396 (version "2.0.2")
4397 (source
4398 (origin
4399 (method url-fetch)
4400 (uri (pypi-uri "Werkzeug" version))
4401 (sha256
4402 (base32
4403 "16nvv9dh37ssf5pkny9yj2li0n6wyzsygh8a9i86r3gfipybcaxa"))))
4404 (build-system python-build-system)
4405 (arguments
4406 '(#:phases
4407 (modify-phases %standard-phases
4408 (replace 'check
4409 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
4410 (when tests?
4411 (add-installed-pythonpath inputs outputs)
4412 (invoke "python" "-m" "pytest"
4413 ;; Test tries to use the network.
4414 "-k not test_reloader_sys_path")))))))
4415 (propagated-inputs
4416 (list python-requests))
4417 (native-inputs
4418 (list python-pytest python-pytest-timeout python-pytest-xprocess))
4419 (home-page "https://palletsprojects.com/p/werkzeug/")
4420 (synopsis "Utilities for WSGI applications")
4421 (description "One of the most advanced WSGI utility modules. It includes a
4422powerful debugger, full-featured request and response objects, HTTP utilities to
4423handle entity tags, cache control headers, HTTP dates, cookie handling, file
4424uploads, a powerful URL routing system and a bunch of community-contributed
4425addon modules.")
4426 (license license:x11)))
4427
4428(define-public python-werkzeug-1.0
4429 (package
4430 (inherit python-werkzeug)
4431 (version "1.0.1")
4432 (source (origin
4433 (method url-fetch)
4434 (uri (pypi-uri "Werkzeug" version))
4435 (sha256
4436 (base32
4437 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
4438 (patches (search-patches "python-werkzeug-tests.patch"))))
4439 (arguments
4440 '(#:phases
4441 (modify-phases %standard-phases
4442 (delete 'check)
4443 (add-after 'install 'check
4444 (lambda* (#:key inputs outputs #:allow-other-keys)
4445 (add-installed-pythonpath inputs outputs)
4446 (invoke "python" "-m" "pytest"))))))
4447 (propagated-inputs
4448 (list python-requests))
4449 (native-inputs
4450 (list python-pytest python-pytest-timeout))))
4451
4452(define-public python-bottle
4453 (package
4454 (name "python-bottle")
4455 (version "0.12.23")
4456 (source
4457 (origin
4458 (method url-fetch)
4459 (uri (pypi-uri "bottle" version))
4460 (sha256
4461 (base32 "0rs1w293gp5bhxip2cci8mfkhld6n5qcznvlna3nxclz76mf6gb8"))))
4462 (build-system python-build-system)
4463 (arguments
4464 `(#:phases
4465 (modify-phases %standard-phases
4466 (replace 'check
4467 (lambda* (#:key tests? #:allow-other-keys)
4468 (when tests?
4469 (with-directory-excursion "test"
4470 (invoke "pytest" "-vvv"))))))))
4471 (native-inputs (list python-pytest))
4472 (home-page "https://bottlepy.org/")
4473 (synopsis "WSGI framework for small web-applications")
4474 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
4475 (license license:expat)))
4476
4477(define-public python-wtforms
4478 (package
4479 (name "python-wtforms")
4480 (version "2.3.3")
4481 (source
4482 (origin
4483 (method url-fetch)
4484 (uri (pypi-uri "WTForms" version))
4485 (sha256
4486 (base32
4487 "17427m7p9nn9byzva697dkykykwcp2br3bxvi8vciywlmkh5s6c1"))))
4488 (build-system python-build-system)
4489 (arguments
4490 `(#:phases
4491 (modify-phases %standard-phases
4492 (add-after 'unpack 'delete-bundled-test
4493 (lambda _
4494 ;; Delete test copied from a third party package that fails
4495 ;; with newer SQLAlchemy. This can be removed for 3.0.
4496 ;; See <https://github.com/wtforms/wtforms/issues/696>.
4497 (delete-file "tests/ext_sqlalchemy.py")))
4498 (replace 'check
4499 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4500 (when tests?
4501 (add-installed-pythonpath inputs outputs)
4502 (invoke "python" "setup.py" "compile_catalog")
4503 (invoke "python" "tests/runtests.py")))))))
4504 (native-inputs
4505 (list python-dateutil python-sqlalchemy))
4506 (propagated-inputs
4507 (list python-babel python-email-validator python-markupsafe))
4508 (home-page "http://wtforms.simplecodes.com/")
4509 (synopsis
4510 "Form validation and rendering library for Python web development")
4511 (description
4512 "WTForms is a flexible forms validation and rendering library
4513for Python web development. It is very similar to the web form API
4514available in Django, but is a standalone package.")
4515 (license license:bsd-3)))
4516
4517(define-public python-paste
4518 (package
4519 (name "python-paste")
4520 (version "3.0.6")
4521 (source
4522 (origin
4523 (method url-fetch)
4524 (uri (pypi-uri "Paste" version))
4525 (sha256
4526 (base32
4527 "14lbi9asn5agsdf7r97prkjpz7amgmp529lbvfhf0nv881xczah6"))
4528 (patches (search-patches "python-paste-remove-timing-test.patch"))
4529 (modules '((guix build utils)))
4530 (snippet
4531 '(begin
4532 ;; This test calls out to the internet.
4533 (delete-file "tests/test_proxy.py") #t))))
4534 (build-system python-build-system)
4535 (native-inputs
4536 (list python-pytest python-pytest-runner python-nose))
4537 (propagated-inputs
4538 (list python-six))
4539 (home-page "https://pythonpaste.readthedocs.io/")
4540 (synopsis
4541 "Python web development tools, focusing on WSGI")
4542 (description
4543 "Paste provides a variety of web development tools and middleware which
4544can be nested together to build web applications. Paste's design closely
4545follows ideas flowing from WSGI (Web Standard Gateway Interface).")
4546 (license license:expat)))
4547
4548(define-public python-pastescript
4549 (package
4550 (name "python-pastescript")
4551 (version "2.0.2")
4552 (source
4553 (origin
4554 (method url-fetch)
4555 (uri (pypi-uri "PasteScript" version))
4556 (sha256
4557 (base32
4558 "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"))))
4559 (build-system python-build-system)
4560 (native-inputs
4561 (list python-nose))
4562 (propagated-inputs
4563 (list python-paste python-pastedeploy))
4564 (home-page (string-append "https://web.archive.org/web/20161025192515/"
4565 "http://pythonpaste.org/script/"))
4566 (arguments
4567 '(;; Unfortunately, this requires the latest unittest2,
4568 ;; but that requires traceback2 which requires linecache2 which requires
4569 ;; unittest2. So we're skipping tests for now.
4570 ;; (Note: Apparently linetest2 only needs unittest2 for its tests,
4571 ;; so in theory we could get around this situation somehow.)
4572 #:tests? #f))
4573 (synopsis
4574 "Pluggable command line tool for serving web applications and more")
4575 (description
4576 "PasteScript is a plugin-friendly command line tool which provides a
4577variety of features, from launching web applications to bootstrapping project
4578layouts.")
4579 (license license:expat)))
4580
4581(define-public python-urlgrabber
4582 (package
4583 (name "python-urlgrabber")
4584 (version "4.1.0")
4585 (source
4586 (origin
4587 (method url-fetch)
4588 (uri (pypi-uri "urlgrabber" version))
4589 (sha256
4590 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
4591 (build-system python-build-system)
4592 (arguments
4593 `(#:phases
4594 (modify-phases %standard-phases
4595 (replace 'check
4596 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4597 (when tests?
4598 (add-installed-pythonpath inputs outputs)
4599 (invoke "python" "test/runtests.py")))))))
4600 (propagated-inputs
4601 (list python-pycurl python-setuptools python-six))
4602 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
4603 (synopsis "High-level cross protocol url-grabber")
4604 (description
4605 "@code{urlgrabber} is a library that unifies access to files available on
4606the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
4607supports features like HTTP keep-alive, reget, throttling and more.")
4608 (license license:lgpl2.1+)))
4609
4610(define-public python-pycares
4611 (package
4612 (name "python-pycares")
4613 (version "2.3.0")
4614 (source
4615 (origin
4616 (method url-fetch)
4617 (uri (pypi-uri "pycares" version))
4618 (sha256
4619 (base32
4620 "0h4fxw5drrhfyslzmfpljk0qnnpbhhb20hnnndzahhbwylyw1x1n"))))
4621 (build-system python-build-system)
4622 (arguments
4623 `(#:tests? #f)) ;tests require internet access
4624 (home-page "https://github.com/saghul/pycares")
4625 (synopsis "Python interface for @code{c-ares}")
4626 (description "@code{pycares} is a Python module which provides an
4627interface to @code{c-ares}, a C library that performs DNS requests and
4628name resolutions asynchronously.")
4629 (license license:expat)))
4630
4631(define-public python-yarl
4632 (package
4633 (name "python-yarl")
4634 (version "1.6.3")
4635 (source
4636 (origin
4637 (method url-fetch)
4638 (uri (pypi-uri "yarl" version))
4639 (sha256
4640 (base32
4641 "045z4ssg8g5h0qhz8hnx74hswgkndaldqq1xi5l1n5s0j996d44a"))
4642 (modules '((guix build utils)))
4643 (snippet
4644 #~(begin
4645 (delete-file "yarl/_quoting_c.c")))))
4646 (build-system python-build-system)
4647 (arguments
4648 (list #:tests? #f ; test suite can't find yarl._quoting_c
4649 #:phases
4650 #~(modify-phases %standard-phases
4651 (add-after 'unpack 'cythonize-code
4652 (lambda _
4653 (invoke "cython" "yarl/_quoting_c.pyx")))
4654 (replace 'check
4655 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
4656 (when tests?
4657 (substitute* "setup.cfg"
4658 (("--cov=yarl") ""))
4659 (add-installed-pythonpath inputs outputs)
4660 (invoke "python" "-m" "pytest")))))))
4661 (native-inputs
4662 (list python-cython python-pytest python-pytest-runner))
4663 (propagated-inputs
4664 (list python-idna python-multidict))
4665 (home-page "https://github.com/aio-libs/yarl/")
4666 (synopsis "Yet another URL library")
4667 (description "@code{yarl} module provides handy @code{URL} class
4668for URL parsing and changing.")
4669 (license license:asl2.0)))
4670
4671(define-public python-canvasapi
4672 (package
4673 (name "python-canvasapi")
4674 (version "2.2.0")
4675 (source (origin
4676 (method git-fetch)
4677 (uri (git-reference
4678 (url "https://github.com/ucfopen/canvasapi")
4679 (commit (string-append "v" version))))
4680 (file-name (git-file-name name version))
4681 (sha256
4682 (base32
4683 "0i13wrq2czcaz3h98pvnsl237104v611y9636jf32b1nn76sbp0p"))))
4684 (build-system python-build-system)
4685 (propagated-inputs (list python-pytz python-requests))
4686 (native-inputs (list python-requests-mock))
4687 (home-page "https://github.com/ucfopen/canvasapi")
4688 (synopsis "API wrapper for the Canvas LMS")
4689 (description
4690 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
4691The library enables developers to programmatically manage Canvas courses,
4692users, gradebooks, and more.")
4693 (license license:expat)))
4694
4695(define-public python-google
4696 (package
4697 (name "python-google")
4698 (version "3.0.0")
4699 (source (origin
4700 (method url-fetch)
4701 (uri (pypi-uri "google" version))
4702 (sha256
4703 (base32
4704 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
4705 (build-system python-build-system)
4706 (arguments
4707 `(#:tests? #f)) ; There are no tests.
4708 (propagated-inputs
4709 (list python-beautifulsoup4))
4710 (home-page "https://breakingcode.wordpress.com/")
4711 (synopsis "Python bindings to the Google search engine")
4712 (description "This package provides Python bindings for using the
4713Google search engine. Its module is called @code{googlesearch}.")
4714 (license license:bsd-3)))
4715
4716(define-public python-google-api-client
4717 (package
4718 (name "python-google-api-client")
4719 (version "1.6.7")
4720 (source
4721 (origin
4722 (method url-fetch)
4723 (uri (pypi-uri "google-api-python-client" version))
4724 (sha256
4725 (base32
4726 "1wpbbbxfpy9mwxdy3kn352cb590ladv574j1aa2l4grjdqw3ln05"))))
4727 (build-system python-build-system)
4728 (arguments
4729 `(#:tests? #f ; tests require internet access
4730 #:phases
4731 (modify-phases %standard-phases
4732 (add-after 'unpack 'fix-setup-py
4733 (lambda _
4734 (substitute* "setup.py"
4735 (("googleapiclient/discovery_cache")
4736 "googleapiclient.discovery_cache"))
4737 #t)))))
4738 (native-inputs
4739 (list python-httplib2 python-six python-oauth2client
4740 python-uritemplate))
4741 (home-page "https://github.com/google/google-api-python-client")
4742 (synopsis "Core Python library for accessing Google APIs")
4743 (description "Python client library for Google's discovery based APIs")
4744 (license license:asl2.0)))
4745
4746(define-public whoogle-search
4747 (package
4748 (name "whoogle-search")
4749 (version "0.8.0")
4750 (source (origin
4751 (method url-fetch)
4752 (uri (pypi-uri "whoogle-search" version))
4753 (sha256
4754 (base32
4755 "0h8cl9bkd3vx17kbvcnmc8cy6pc29lxr0drxm84kj37ka788cj2g"))))
4756 (build-system python-build-system)
4757 (arguments
4758 (list
4759 ;; The tests need network access
4760 #:tests? #f))
4761 (propagated-inputs
4762 (list python-attrs
4763 python-beautifulsoup4
4764 python-cachelib
4765 python-certifi
4766 python-cffi
4767 python-brotli
4768 python-chardet
4769 python-click
4770 python-cryptography
4771 python-cssutils
4772 python-defusedxml
4773 python-flask
4774 python-flask-session
4775 python-idna
4776 python-itsdangerous
4777 python-jinja2
4778 python-markupsafe
4779 python-more-itertools
4780 python-packaging
4781 python-pluggy
4782 python-py
4783 python-pycodestyle
4784 python-pycparser
4785 python-pyopenssl
4786 python-pyparsing
4787 python-pysocks
4788 python-dateutil
4789 python-requests
4790 python-soupsieve
4791 python-stem
4792 python-urllib3
4793 python-waitress
4794 python-wcwidth
4795 python-werkzeug
4796 python-dotenv))
4797 (home-page "https://github.com/benbusby/whoogle-search")
4798 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
4799 (description
4800 "Get Google results, but without any ads, javascript, AMP links,
4801cookies, or IP address tracking. Quick and simple to implement as a primary
4802search engine replacement on both desktop and mobile.")
4803 (license license:expat)))
4804
4805(define-public python-hawkauthlib
4806 (package
4807 (name "python-hawkauthlib")
4808 (version "2.0.0")
4809 (source
4810 (origin
4811 (method url-fetch)
4812 (uri (pypi-uri "hawkauthlib" version))
4813 (sha256
4814 (base32
4815 "03ai47s4h8nfnrf25shbfvkm1b9n1ccd4nmmj280sg1fayi69zgg"))))
4816 (build-system python-build-system)
4817 (propagated-inputs
4818 (list python-requests python-webob))
4819 (home-page "https://github.com/mozilla-services/hawkauthlib")
4820 (synopsis "Hawk Access Authentication protocol")
4821 (description
4822 "This is a low-level Python library for implementing Hawk Access Authentication,
4823a simple HTTP request-signing scheme.")
4824 (license license:mpl2.0)))
4825
4826(define-public python-pybrowserid
4827 (package
4828 (name "python-pybrowserid")
4829 (version "0.14.0")
4830 (source
4831 (origin
4832 (method url-fetch)
4833 (uri (pypi-uri "PyBrowserID" version))
4834 (sha256
4835 (base32
4836 "1qvi79kfb8x9kxkm5lw2mp42hm82cpps1xknmsb5ghkwx1lpc8kc"))))
4837 (build-system python-build-system)
4838 (propagated-inputs
4839 (list python-requests))
4840 (native-inputs
4841 (list python-mock))
4842 (home-page "https://github.com/mozilla/PyBrowserID")
4843 (synopsis "Python library for the BrowserID protocol")
4844 (description
4845 "This is a Python client library for the BrowserID protocol that
4846underlies Mozilla Persona.")
4847 (license license:mpl2.0)))
4848
4849(define-public python-pyfxa
4850 (package
4851 (name "python-pyfxa")
4852 (version "0.6.0")
4853 (source
4854 (origin
4855 (method url-fetch)
4856 (uri (pypi-uri "PyFxA" version))
4857 (sha256
4858 (base32
4859 "0axl16fyrz2r88gnw4b12mk7dpkqscv8c4wsc1y5hicl7bsbc4fm"))))
4860 (build-system python-build-system)
4861 (arguments '(#:tests? #f)) ; 17 tests require network access
4862 (propagated-inputs
4863 (list python-cryptography python-hawkauthlib python-pybrowserid
4864 python-requests python-six))
4865 (native-inputs
4866 (list python-grequests python-mock python-responses python-unittest2))
4867 (home-page "https://github.com/mozilla/PyFxA")
4868 (synopsis "Firefox Accounts client library for Python")
4869 (description
4870 "This is a Python library for interacting with the Firefox Accounts
4871ecosystem.")
4872 (license license:mpl2.0)))
4873
4874(define-public python-hyperlink
4875 (package
4876 (name "python-hyperlink")
4877 (version "19.0.0")
4878 (source
4879 (origin
4880 (method url-fetch)
4881 (uri (pypi-uri "hyperlink" version))
4882 (sha256
4883 (base32
4884 "0m2nhi0j8wmgfscf974wd5v1xfq8mah286hil6npy1ys0m3y7222"))))
4885 (build-system python-build-system)
4886 (propagated-inputs
4887 (list python-idna))
4888 (home-page "https://github.com/python-hyper/hyperlink")
4889 (synopsis "Python module to create immutable URLs according to spec")
4890 (description "This package provides a Python module to create immutable, and
4891correct URLs for Python according to RFCs 3986 and 3987.")
4892 (license license:expat)))
4893
4894(define-public python-treq
4895 (package
4896 (name "python-treq")
4897 (version "18.6.0")
4898 (source
4899 (origin
4900 (method url-fetch)
4901 (uri (pypi-uri "treq" version))
4902 (sha256
4903 (base32
4904 "0j4zwq9p1c9piv1vc66nxcv9s6hdinf90jwkbsm91k14npv9zq4i"))))
4905 (build-system python-build-system)
4906 (propagated-inputs
4907 (list python-attrs
4908 python-idna
4909 python-incremental
4910 python-requests
4911 python-service-identity
4912 python-twisted))
4913 (home-page "https://github.com/twisted/treq")
4914 (synopsis "Requests-like API built on top of twisted.web's Agent")
4915 (description "This package provides an HTTP library inspired by
4916@code{requests}} but written on top of Twisted's @code{Agents}. It offers a
4917high level API for making HTTP requests when using Twisted.")
4918 (license license:expat)))
4919
4920(define-public python-autobahn
4921 (package
4922 (name "python-autobahn")
4923 (version "19.2.1")
4924 (source
4925 (origin
4926 (method url-fetch)
4927 (uri (pypi-uri "autobahn" version))
4928 (sha256
4929 (base32
4930 "1mm7j24ls01c7jb1ad5p5cpyxvzgydiyf8b04ihykh2v8g98j0x7"))))
4931 (build-system python-build-system)
4932 (arguments
4933 ;; The tests fail to run:
4934 ;; https://github.com/crossbario/autobahn-python/issues/1117
4935 `(#:tests? #f))
4936 (propagated-inputs
4937 (list python-cffi python-twisted python-txaio))
4938 (home-page "https://crossbar.io/autobahn/")
4939 (synopsis "Web Application Messaging Protocol implementation")
4940 (description "This package provides an implementation of the @dfn{Web Application
4941Messaging Protocol} (WAMP). WAMP connects components in distributed
4942applications using Publish and Subscribe (PubSub) and routed Remote Procedure
4943Calls (rRPC). It is ideal for distributed, multi-client and server applications
4944such as IoT applications or multi-user database-driven business applications.")
4945 (license license:expat)))
4946
4947(define-public python-ws4py
4948 (package
4949 (name "python-ws4py")
4950 (version "0.5.1")
4951 (source
4952 (origin
4953 (method url-fetch)
4954 (uri (pypi-uri "ws4py" version))
4955 (sha256
4956 (base32
4957 "10slbbf2jm4hpr92jx7kh7mhf48sjl01v2w4d8z3f1p0ybbp7l19"))))
4958 (build-system python-build-system)
4959 (arguments
4960 `(#:phases
4961 (modify-phases %standard-phases
4962 (add-after 'unpack 'python3.7-compatibility
4963 (lambda _
4964 (substitute* '("ws4py/server/tulipserver.py"
4965 "ws4py/async_websocket.py")
4966 (("asyncio.async")
4967 "asyncio.ensure_future"))
4968 #t))
4969 ;; We don't have a package for cherrypy.
4970 (add-after 'unpack 'remove-cherrypy-support
4971 (lambda _
4972 (delete-file "ws4py/server/cherrypyserver.py")
4973 #t)))))
4974 (propagated-inputs
4975 (list python-gevent python-tornado))
4976 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
4977 (synopsis "WebSocket client and server library")
4978 (description
4979 "This package provides a WebSocket client and server library for
4980Python.")
4981 (license license:bsd-3)))
4982
4983(define-public python-slugify
4984 (package
4985 (name "python-slugify")
4986 (version "5.0.2")
4987 (source
4988 (origin
4989 (method url-fetch)
4990 (uri (pypi-uri "python-slugify" version))
4991 (sha256
4992 (base32 "1aww2ncglyii4jkbfjxqhinivawf9zmwifcj32d69gpwp6h86czi"))))
4993 (propagated-inputs
4994 (list python-unidecode python-text-unidecode))
4995 (arguments
4996 `(#:phases
4997 (modify-phases %standard-phases
4998 (replace 'check
4999 (lambda* (#:key tests? #:allow-other-keys)
5000 (when tests?
5001 (invoke "python" "test.py")))))))
5002 (build-system python-build-system)
5003 (home-page "https://github.com/un33k/python-slugify")
5004 (synopsis "Python Slugify application that handles Unicode")
5005 (description "This package provides a @command{slufigy} command and
5006library to create slugs from unicode strings while keeping it DRY.")
5007 (license license:expat)))
5008
5009(define-public python-branca
5010 (package
5011 (name "python-branca")
5012 (version "0.3.1")
5013 (source
5014 (origin
5015 (method url-fetch)
5016 (uri (pypi-uri "branca" version))
5017 (sha256
5018 (base32
5019 "0pmigd521j2228xf8x34vbx0niwvms7xl7za0lymywj0vydjqxiy"))))
5020 (build-system python-build-system)
5021 (propagated-inputs
5022 (list python-jinja2 python-six))
5023 (native-inputs
5024 (list python-pytest))
5025 (home-page "https://github.com/python-visualization/branca")
5026 (synopsis "Generate complex HTML+JS pages with Python")
5027 (description "Generate complex HTML+JS pages with Python")
5028 (license license:expat)))
5029
5030(define-public python-tinycss
5031 (package
5032 (name "python-tinycss")
5033 (version "0.4")
5034 (source
5035 (origin
5036 (method url-fetch)
5037 (uri (pypi-uri "tinycss" version))
5038 (sha256
5039 (base32 "0vkifr595h28ymkjhrswwf0bm23lhznh5f44xyp7x7jy1ssnyc0j"))))
5040 (build-system python-build-system)
5041 (arguments
5042 `(#:phases
5043 (modify-phases %standard-phases
5044 (add-after 'unpack 'disable-flake8-isort
5045 ;; Flake8 and isort tests fail.
5046 (lambda _
5047 (substitute* "setup.cfg" ((" --flake8 --isort") ""))
5048 #t))
5049 (replace 'check
5050 (lambda _
5051 ;; Disable failing test.
5052 (invoke "python" "-m" "pytest" "-k"
5053 "not test_speedups"))))))
5054 (native-inputs
5055 (list python-pytest-cov python-pytest-flake8 python-pytest-isort
5056 python-pytest-runner))
5057 (home-page "https://tinycss.readthedocs.io/")
5058 (synopsis "Complete yet simple CSS parser for Python")
5059 (description
5060 "@code{tinycss} is a complete yet simple CSS parser for Python. It
5061supports the full syntax and error handling for CSS 2.1 as well as some CSS 3
5062modules:
5063
5064@itemize
5065@item CSS Color 3
5066@item CSS Fonts 3
5067@item CSS Paged Media 3
5068@end itemize")
5069 (license license:bsd-3)))
5070
5071(define-public python-tinycss2
5072 (package
5073 (name "python-tinycss2")
5074 (version "1.1.0")
5075 (source
5076 (origin
5077 (method git-fetch)
5078 (uri (git-reference
5079 (url "https://github.com/Kozea/tinycss2")
5080 (commit (string-append "v" version))
5081 (recursive? #true)))
5082 (file-name (git-file-name name version))
5083 (sha256
5084 (base32 "0zyc48vbmczpqj7f3f0d7zb3bz29fyj50dg0m6bbwbr5i88kq3sq"))))
5085 (build-system python-build-system)
5086 (arguments
5087 `(#:phases
5088 (modify-phases %standard-phases
5089 (replace 'build
5090 (lambda _
5091 ;; A ZIP archive should be generated, but it fails with "ZIP does
5092 ;; not support timestamps before 1980". Luckily,
5093 ;; SOURCE_DATE_EPOCH is respected, which we set to some time in
5094 ;; 1980.
5095 (setenv "SOURCE_DATE_EPOCH" "315532800")
5096 (invoke "flit" "build")))
5097 (replace 'install
5098 (lambda* (#:key inputs outputs #:allow-other-keys)
5099 (add-installed-pythonpath inputs outputs)
5100 (let ((out (assoc-ref outputs "out")))
5101 (for-each (lambda (wheel)
5102 (format #true wheel)
5103 (invoke "python" "-m" "pip" "install"
5104 wheel (string-append "--prefix=" out)))
5105 (find-files "dist" "\\.whl$")))))
5106 (replace 'check
5107 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5108 (add-installed-pythonpath inputs outputs)
5109 (invoke "pytest" "-vv"))))))
5110 (propagated-inputs
5111 (list python-webencodings))
5112 (native-inputs
5113 (list python-flit python-pytest python-pytest-cov
5114 python-pytest-flake8 python-pytest-isort))
5115 (home-page "https://tinycss2.readthedocs.io/")
5116 (synopsis "Low-level CSS parser for Python")
5117 (description "@code{tinycss2} can parse strings, return Python objects
5118representing tokens and blocks, and generate CSS strings corresponding to
5119these objects.
5120
5121Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
5122grammar of CSS but doesn’t know specific rules, properties or values supported
5123in various CSS modules.")
5124 (license license:bsd-3)))
5125
5126(define-public python-cssselect2
5127 (package
5128 (name "python-cssselect2")
5129 (version "0.4.1")
5130 (source
5131 (origin
5132 (method url-fetch)
5133 (uri (pypi-uri "cssselect2" version))
5134 (sha256
5135 (base32 "1j2fcr217rsvkipsg6zjq03rl64rxnvb5hqqpx0dv58fhspvkywk"))))
5136 (build-system python-build-system)
5137 (arguments
5138 `(#:phases
5139 (modify-phases %standard-phases
5140 (add-after 'unpack 'disable-linters
5141 ;; Their check fails; none of our business.
5142 (lambda _
5143 (substitute* '("setup.py" "pyproject.toml")
5144 (("'pytest-flake8',") "")
5145 (("'pytest-isort',") "")
5146 (("--flake8") "")
5147 (("--isort") ""))))
5148 (replace 'check
5149 (lambda* (#:key tests? #:allow-other-keys)
5150 (when tests?
5151 (lambda _ (invoke "pytest"))))))))
5152 (propagated-inputs
5153 (list python-tinycss2))
5154 (native-inputs
5155 (list python-pytest-cov python-pytest-runner))
5156 (home-page "https://cssselect2.readthedocs.io/")
5157 (synopsis "CSS selectors for Python ElementTree")
5158 (description "@code{cssselect2} is a straightforward implementation of
5159CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
5160ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
5161
5162Unlike the Python package @code{cssselect}, it does not translate selectors to
5163XPath and therefore does not have all the correctness corner cases that are
5164hard or impossible to fix in cssselect.")
5165 (license license:bsd-3)))
5166
5167(define-public python-uvloop
5168 (package
5169 (name "python-uvloop")
5170 (version "0.16.0")
5171 (source
5172 (origin
5173 (method url-fetch)
5174 (uri (pypi-uri "uvloop" version))
5175 (sha256
5176 (base32 "0a0jzwrhkszknh14alflrp1db6dyjp7ph730f9yc5lb7gc6c4jzp"))
5177 (modules '((guix build utils)))
5178 (snippet
5179 '(begin (delete-file-recursively "vendor")
5180 (delete-file "uvloop/loop.c")))))
5181 (build-system python-build-system)
5182 (arguments
5183 `(#:phases
5184 (modify-phases %standard-phases
5185 (add-after 'unpack 'preparations
5186 (lambda _
5187 ;; Use packaged libuv.
5188 (substitute* "setup.py" (("self.use_system_libuv = False")
5189 "self.use_system_libuv = True"))
5190 ;; Replace hardcoded shell command.
5191 (substitute* "uvloop/loop.pyx"
5192 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))
5193 #t))
5194 (replace 'check
5195 (lambda* (#:key tests? #:allow-other-keys)
5196 (when tests?
5197 ;; Remove Python module, which conflicts with the installed version,
5198 ;; but lacks the built C module.
5199 (delete-file-recursively "uvloop")
5200 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout
5201 ;; flag to get a meaningful idea about where.
5202 (invoke "pytest" "-vv" "--timeout=300"
5203 "--timeout-method=thread"
5204 "-k" (string-append
5205 ;; Timeout, because SIGINT cannot be sent to child.
5206 "not test_signals_sigint_pycode_continue "
5207 "and not test_signals_sigint_pycode_stop "
5208 "and not test_signals_sigint_uvcode "
5209 "and not test_signals_sigint_uvcode_two_loop_runs "
5210 ;; This test is racy and prone to get stuck on
5211 ;; various platforms, possibly a aiohttp issue:
5212 ;; https://github.com/MagicStack/uvloop/issues/412
5213 "and not test_remote_shutdown_receives_trailing_data "
5214 ;; It looks like pytest is preventing
5215 ;; custom stdout/stderr redirection,
5216 ;; even with -s.
5217 "and not test_process_streams_redirect "))))))))
5218 (native-inputs
5219 (list python-aiohttp
5220 python-cython
5221 python-psutil
5222 python-pyopenssl
5223 python-pytest
5224 python-pytest-timeout))
5225 (inputs
5226 (list libuv))
5227 (home-page "https://github.com/MagicStack/uvloop")
5228 (synopsis "Fast implementation of asyncio event loop on top of libuv")
5229 (description
5230 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
5231event loop. It is implemented in Cython and uses libuv under the hood.")
5232 (license license:expat)))
5233
5234(define-public gunicorn
5235 (package
5236 (name "gunicorn")
5237 (version "20.1.0")
5238 (source
5239 (origin
5240 (method url-fetch)
5241 (uri (pypi-uri "gunicorn" version))
5242 (sha256
5243 (base32
5244 "1s7670qw36x90bgmazmgib170i5gnpyb2ypxzlla7y0mpasniag0"))))
5245 (outputs '("out" "doc"))
5246 (build-system python-build-system)
5247 (arguments
5248 `(#:phases
5249 (modify-phases %standard-phases
5250 (add-after 'build 'build-doc
5251 (lambda _
5252 (invoke "make" "-C" "docs" "PAPER=a4" "html" "info")
5253 (delete-file "docs/build/texinfo/Makefile")
5254 (delete-file "docs/build/texinfo/Gunicorn.texi")))
5255 (replace 'check
5256 (lambda* (#:key tests? #:allow-other-keys)
5257 (if tests?
5258 (begin
5259 (invoke "pytest" "-vv"
5260 ;; Disable the geventlet tests because eventlet uses
5261 ;; dnspython, which does not work in the build
5262 ;; container due to lack of /etc/resolv.conf, etc.
5263 "--ignore=tests/workers/test_geventlet.py"))
5264 (format #t "test suite not run~%"))))
5265 (add-after 'install 'install-doc
5266 (lambda* (#:key outputs #:allow-other-keys)
5267 (let* ((doc (string-append (assoc-ref outputs "doc")
5268 "/share/doc/" ,name "-" ,version))
5269 (html (string-append doc "/html"))
5270 (info (string-append doc "/info"))
5271 (examples (string-append doc "/examples")))
5272 (mkdir-p html)
5273 (mkdir-p info)
5274 (mkdir-p examples)
5275 (copy-recursively "docs/build/html" html)
5276 (copy-recursively "docs/build/texinfo" info)
5277 (copy-recursively "examples" examples)
5278 (for-each (lambda (file)
5279 (copy-file file (string-append doc "/" file)))
5280 '("README.rst" "NOTICE" "LICENSE" "THANKS")))))
5281 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
5282 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
5283 ;; size. Override it to only add the essential entries.
5284 (replace 'wrap
5285 (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
5286 (let* ((out (assoc-ref outputs "out"))
5287 (python (assoc-ref (or native-inputs inputs) "python"))
5288 (sitedir (string-append "/lib/python"
5289 (python-version python)
5290 "/site-packages")))
5291 (wrap-program (string-append out "/bin/gunicorn")
5292 `("PYTHONPATH" ":" prefix
5293 ,(map (lambda (output)
5294 (string-append output sitedir))
5295 (list python out))))))))))
5296 (native-inputs
5297 (list binutils ;; for ctypes.util.find_library()
5298 python-aiohttp
5299 python-gevent
5300 python-pytest
5301 python-pytest-cov
5302 python-sphinx
5303 texinfo))
5304 (home-page "https://gunicorn.org/")
5305 (synopsis "Python WSGI HTTP Server for UNIX")
5306 (description "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
5307Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
5308Unicorn project. The Gunicorn server is broadly compatible with
5309various web frameworks, simply implemented, light on server resources,
5310and fairly speedy.")
5311 (license license:expat)))
5312
5313;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
5314;; its tests
5315(define-public gunicorn-bootstrap
5316 (package
5317 (inherit gunicorn)
5318 (name "gunicorn")
5319 (arguments `(#:tests? #f))
5320 (properties '((hidden? . #t)))
5321 (native-inputs `())))
5322
5323(define-public python-httptools
5324 (package
5325 (name "python-httptools")
5326 (version "0.1.1")
5327 (source
5328 (origin
5329 ;; PyPI tarball comes with a vendored http-parser and no tests.
5330 (method git-fetch)
5331 (uri (git-reference
5332 (url "https://github.com/MagicStack/httptools")
5333 (commit (string-append "v" version))))
5334 (file-name (git-file-name name version))
5335 (sha256
5336 (base32 "0g08128x2ixsiwrzskxc6c8ymgzs39wbzr5mhy0mjk30q9pqqv77"))))
5337 (build-system python-build-system)
5338 (arguments
5339 '(#:phases
5340 (modify-phases %standard-phases
5341 (add-after 'unpack 'preparations
5342 (lambda _
5343 ;; Skip a failing test (AssertionError). Bug report:
5344 ;; https://github.com/MagicStack/httptools/issues/10.
5345 (substitute* "tests/test_parser.py"
5346 ((" def test_parser_response_1")
5347 (string-append
5348 " @unittest.skip(\"Disabled.\")\n"
5349 " def test_parser_response_1")))
5350 ;; Use packaged http-parser.
5351 (substitute* "setup.py" (("self.use_system_http_parser = False")
5352 "self.use_system_http_parser = True"))
5353 ;; This path is hardcoded. Hardcode our own.
5354 (substitute* "httptools/parser/cparser.pxd"
5355 (("../../vendor/http-parser")
5356 (string-append (assoc-ref %build-inputs "http-parser")
5357 "/include")))
5358 ;; Don't force Cython version.
5359 (substitute* "setup.py" (("Cython==") "Cython>="))
5360 #t)))))
5361 (native-inputs
5362 (list python-cython python-pytest))
5363 (inputs
5364 (list http-parser))
5365 (home-page "https://github.com/MagicStack/httptools")
5366 (synopsis "Collection of framework independent HTTP protocol utils")
5367 (description
5368 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
5369 (license license:expat)))
5370
5371(define-public python-uvicorn
5372 (package
5373 (name "python-uvicorn")
5374 (version "0.17.6")
5375 (source
5376 (origin
5377 ;; PyPI tarball has no tests.
5378 (method git-fetch)
5379 (uri (git-reference
5380 (url "https://github.com/encode/uvicorn")
5381 (commit version)))
5382 (file-name (git-file-name name version))
5383 (sha256
5384 (base32 "0npwls02nhna2lyw2nksxij16l9agf12c9f42pvxb5yrpi9l16c8"))))
5385 (build-system python-build-system)
5386 (arguments
5387 `(#:phases
5388 (modify-phases %standard-phases
5389 (replace 'check
5390 (lambda* (#:key tests? #:allow-other-keys)
5391 (when tests?
5392 (invoke "pytest" "-vv" "-o" "asyncio_mode=auto"
5393 "-k"
5394 (string-append
5395 ;; These error or fail due to networking.
5396 "not test_keepalive "
5397 "and not test_bind_unix_socket_works_with_"
5398 "reload_or_workers "))))))))
5399 (native-inputs
5400 (list python-httpx-bootstrap
5401 python-pytest
5402 python-pytest-asyncio
5403 python-pytest-mock
5404 python-requests
5405 python-trustme
5406 python-wsproto))
5407 (propagated-inputs
5408 (list python-asgiref
5409 python-click
5410 python-dotenv
5411 python-h11
5412 python-httptools
5413 python-pyyaml
5414 python-uvloop
5415 python-watchgod
5416 python-websockets))
5417 (home-page "https://github.com/encode/uvicorn")
5418 (synopsis "Fast ASGI server implementation")
5419 (description
5420 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
5421and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
5422for HTTP/2 is planned.")
5423 (license license:bsd-3)))
5424
5425(define-public python-translation-finder
5426 (package
5427 (name "python-translation-finder")
5428 (version "1.7")
5429 (source
5430 (origin
5431 (method url-fetch)
5432 (uri (pypi-uri "translation-finder" version))
5433 (sha256
5434 (base32
5435 "1pcy9z8gmb8x41gjhw9x0lkr0d2mv5mdxcs2hwg6q8mxs857j589"))))
5436 (build-system python-build-system)
5437 (arguments
5438 `(#:phases
5439 (modify-phases %standard-phases
5440 (add-before 'build 'remove-failing-test
5441 (lambda _
5442 (delete-file "translation_finder/test_api.py")
5443 #t)))))
5444 (propagated-inputs
5445 (list python-chardet python-pathlib2 python-ruamel.yaml python-six))
5446 (native-inputs
5447 (list python-codecov python-codacy-coverage python-pytest-cov
5448 python-pytest-runner python-twine))
5449 (home-page "https://weblate.org/")
5450 (synopsis "Translation file finder for Weblate")
5451 (description "This package provides a function to find translation file in
5452the source code of a project. It supports many translation file formats and
5453is part of the Weblate translation platform.")
5454 (license license:gpl3+)))
5455
5456(define-public python-gitlab
5457 (package
5458 (name "python-gitlab")
5459 (version "3.2.0")
5460 (source (origin
5461 (method url-fetch)
5462 (uri (pypi-uri "python-gitlab" version))
5463 (sha256
5464 (base32
5465 "1gi4lp2g4k99zqcx2bgqx940bpmpbc1w9qkl5gy33hpy148yhvlg"))))
5466 (build-system python-build-system)
5467 (arguments
5468 `(#:tests? #f)) ;tests require network access
5469 (propagated-inputs (list python-requests python-requests-toolbelt))
5470 (home-page "https://github.com/python-gitlab/python-gitlab")
5471 (synopsis "Interact with GitLab API")
5472 (description "This package provides an extended library for interacting
5473with GitLab instances through their API.")
5474 (license license:lgpl3+)))
5475
5476(define-public python-path-and-address
5477 (package
5478 (name "python-path-and-address")
5479 (version "2.0.1")
5480 (source
5481 (origin
5482 ;; The source distributed on PyPI doesn't include tests.
5483 (method git-fetch)
5484 (uri (git-reference
5485 (url "https://github.com/joeyespo/path-and-address")
5486 (commit (string-append "v" version))))
5487 (file-name (git-file-name name version))
5488 (sha256
5489 (base32
5490 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
5491 (build-system python-build-system)
5492 (arguments
5493 `(#:phases
5494 (modify-phases %standard-phases
5495 (replace 'check
5496 (lambda* (#:key inputs outputs #:allow-other-keys)
5497 (add-installed-pythonpath inputs outputs)
5498 (invoke "py.test"))))))
5499 (native-inputs
5500 (list python-pytest))
5501 (home-page "https://github.com/joeyespo/path-and-address")
5502 (synopsis "Functions for command-line server tools used by humans")
5503 (description "Path-and-address resolves ambiguities of command-line
5504interfaces, inferring which argument is the path, and which is the address.")
5505 (license license:expat)))
5506
5507(define-public grip
5508 (package
5509 (name "grip")
5510 (version "4.6.1")
5511 (source (origin
5512 (method git-fetch)
5513 (uri (git-reference
5514 (url "https://github.com/joeyespo/grip")
5515 (commit (string-append "v" version))))
5516 (file-name (git-file-name name version))
5517 (sha256
5518 (base32
5519 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
5520 (build-system python-build-system)
5521 (propagated-inputs (list python-docopt
5522 python-flask
5523 python-markdown
5524 python-path-and-address
5525 python-pygments
5526 python-requests))
5527 (native-inputs (list python-pytest python-responses))
5528 (arguments
5529 (list #:phases
5530 #~(modify-phases %standard-phases
5531 (replace 'check
5532 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5533 (when tests?
5534 (add-installed-pythonpath inputs outputs)
5535 (setenv "PATH"
5536 (string-append (getenv "PATH") ":"
5537 #$output "/bin"))
5538 (invoke "py.test" "-m" "not assumption")))))))
5539 (home-page "https://github.com/joeyespo/grip")
5540 (synopsis "Preview Markdown files using the GitHub API")
5541 (description
5542 "Grip is a command-line server application written in Python
5543that uses the GitHub Markdown API to render a local Markdown file. The styles
5544and rendering come directly from GitHub, so you'll know exactly how it will
5545appear. Changes you make to the file will be instantly reflected in the browser
5546without requiring a page refresh.")
5547 (license license:expat)))
5548
5549(define-public python-port-for
5550 (package
5551 (name "python-port-for")
5552 (version "0.4")
5553 (source
5554 (origin
5555 (method url-fetch)
5556 (uri (pypi-uri "port-for" version))
5557 (sha256
5558 (base32
5559 "1pncxlj25ggw99r0ijfbkq70gd7cbhqdx5ivsxy4jdp0z14cpda7"))))
5560 (build-system python-build-system)
5561 (arguments
5562 `(#:phases
5563 (modify-phases %standard-phases
5564 (add-after 'unpack 'use-urllib3
5565 (lambda _
5566 (substitute* "port_for/_download_ranges.py"
5567 (("urllib2") "urllib3")))))))
5568 (propagated-inputs
5569 (list python-urllib3))
5570 (native-inputs
5571 (list python-mock))
5572 (home-page "https://github.com/kmike/port-for/")
5573 (synopsis "TCP localhost port finder and association manager")
5574 (description
5575 "This package provides a utility that helps with local TCP ports
5576management. It can find an unused TCP localhost port and remember the
5577association.")
5578 (license license:expat)))
5579
5580(define-public python-livereload
5581 (package
5582 (name "python-livereload")
5583 (version "2.6.3")
5584 (source
5585 (origin
5586 (method url-fetch)
5587 (uri (pypi-uri "livereload" version))
5588 (sha256
5589 (base32
5590 "0scqjnhg3ap81v36ghp0pik774dnfdkwqsx5j1jfbzarbs32yvvp"))))
5591 (build-system python-build-system)
5592 (propagated-inputs
5593 (list python-six python-tornado))
5594 (home-page "https://github.com/lepture/python-livereload")
5595 (synopsis "Python LiveReload")
5596 (description
5597 "Python LiveReload provides a command line utility, @command{livereload},
5598for starting a web server in a directory. It can trigger arbitrary commands
5599and serve updated contents upon changes to the directory.")
5600 (license license:bsd-3)))
5601
5602(define-public python-vf-1
5603 (package
5604 (name "python-vf-1")
5605 (version "0.0.11")
5606 (source
5607 (origin
5608 (method url-fetch)
5609 (uri (pypi-uri "VF-1" version))
5610 (sha256
5611 (base32
5612 "0xlqsaxsiayk1sd07kpz8abbcnab582y29a1y4882fq6j4gma5xi"))))
5613 (build-system python-build-system)
5614 (home-page "https://github.com/solderpunk/VF-1")
5615 (synopsis "Command line gopher client")
5616 (description "@code{VF-1} is a command line gopher client with
5617@acronym{TLS, Transport Layer Security} support.")
5618 (license license:bsd-2)))
5619
5620(define-public python-httpcore
5621 (package
5622 (name "python-httpcore")
5623 (version "0.15.0")
5624 (source
5625 (origin
5626 ;; PyPI tarball does not contain tests.
5627 (method git-fetch)
5628 (uri (git-reference
5629 (url "https://github.com/encode/httpcore")
5630 (commit version)))
5631 (file-name (git-file-name name version))
5632 (sha256
5633 (base32 "0skj8f85l52gl6x449wzaixcwsyayvn59iwn0df4b7ixlz6xhp8l"))))
5634 (build-system python-build-system)
5635 (arguments
5636 `(#:phases
5637 (modify-phases %standard-phases
5638 (replace 'check
5639 (lambda* (#:key tests? #:allow-other-keys)
5640 (when tests?
5641 (invoke "pytest" "-vv" "tests"
5642 "--override-ini=asyncio_mode=auto")))))))
5643 (native-inputs
5644 (list python-pytest
5645 python-pytest-asyncio
5646 python-pytest-cov
5647 python-pytest-httpbin
5648 python-pytest-trio
5649 python-uvicorn
5650 python-trustme))
5651 (propagated-inputs
5652 (list python-anyio
5653 python-certifi
5654 python-h11
5655 python-h2
5656 python-sniffio
5657 python-socksio
5658 python-trio
5659 python-trio-typing))
5660 (home-page "https://github.com/encode/httpcore")
5661 (synopsis "Minimal, low-level HTTP client")
5662 (description
5663 "HTTP Core provides a minimal and low-level HTTP client, which does one
5664thing only: send HTTP requests.
5665
5666Some things HTTP Core does do:
5667
5668@itemize
5669@item Sending HTTP requests.
5670@item Provides both sync and async interfaces.
5671@item Supports HTTP/1.1 and HTTP/2.
5672@item Async backend support for asyncio and trio.
5673@item Automatic connection pooling.
5674@item HTTP(S) proxy support.
5675@end itemize")
5676 (license license:bsd-3)))
5677
5678;;; Variant used to break a cycle between python-httpx and python-uvicorn.
5679(define-public python-httpcore-bootstrap
5680 (hidden-package
5681 (package/inherit python-httpcore
5682 (name "python-httpcore-bootstrap")
5683 (arguments (list #:tests? #f))
5684 (native-inputs '()))))
5685
5686(define-public python-httpx
5687 (package
5688 (name "python-httpx")
5689 (version "0.23.0")
5690 (source
5691 (origin
5692 ;; PyPI tarball does not contain tests.
5693 (method git-fetch)
5694 (uri (git-reference
5695 (url "https://github.com/encode/httpx")
5696 (commit version)))
5697 (file-name (git-file-name name version))
5698 (sha256
5699 (base32 "0bihm7ylq9ajxz8qyba0xp9qkwm7n06hk01ywkq2vpz65ix5hpdk"))))
5700 (build-system python-build-system)
5701 (arguments
5702 `(#:phases
5703 (modify-phases %standard-phases
5704 (replace 'check
5705 (lambda* (#:key tests? #:allow-other-keys)
5706 (when tests?
5707 (invoke "pytest" "-vv" "-o" "asyncio_mode=auto"
5708 "-k"
5709 ;; These tests try to open an outgoing connection.
5710 (string-append
5711 "not test_connect_timeout"
5712 " and not test_that_send_cause_async_client_to_be_not_"
5713 "closed"
5714 " and not test_that_async_client_caused_warning_when_"
5715 "being_deleted"
5716 " and not test_that_send_cause_client_to_be_not_closed"
5717 " and not test_async_proxy_close"
5718 " and not test_sync_proxy_close"
5719 ;; This test is apparently incompatible with
5720 ;; python-click 8, fails with " AttributeError:
5721 ;; 'function' object has no attribute 'name'".
5722 " and not test_main"))))))))
5723 (native-inputs
5724 (list python-cryptography
5725 python-pytest
5726 python-pytest-asyncio
5727 python-pytest-trio
5728 python-trio
5729 python-trio-typing
5730 python-trustme
5731 python-uvicorn))
5732 (propagated-inputs
5733 (list python-charset-normalizer
5734 python-brotli
5735 python-certifi
5736 python-chardet
5737 python-httpcore
5738 python-idna
5739 python-rfc3986
5740 python-sniffio))
5741 (home-page "https://www.python-httpx.org/")
5742 (synopsis "HTTP client for Python")
5743 (description
5744 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
5745and async APIs, and support for both HTTP/1.1 and HTTP/2.
5746
5747HTTPX builds on the well-established usability of requests, and gives you:
5748
5749@itemize
5750@item A broadly requests-compatible API.
5751@item Standard synchronous interface, but with async support if you need it.
5752@item HTTP/1.1 and HTTP/2 support.
5753@item Ability to make requests directly to WSGI applications or ASGI applications.
5754@item Strict timeouts everywhere.
5755@item Fully type annotated.
5756@item 99% test coverage.
5757@end itemize
5758
5759Plus all the standard features of requests:
5760
5761@itemize
5762@item International Domains and URLs
5763@item Keep-Alive & Connection Pooling
5764@item Sessions with Cookie Persistence
5765@item Browser-style SSL Verification
5766@item Basic/Digest Authentication
5767@item Elegant Key/Value Cookies
5768@item Automatic Decompression
5769@item Automatic Content Decoding
5770@item Unicode Response Bodies
5771@item Multipart File Uploads
5772@item HTTP(S) Proxy Support
5773@item Connection Timeouts
5774@item Streaming Downloads
5775@item .netrc Support
5776@item Chunked Requests
5777@end itemize")
5778 (license license:bsd-3)))
5779
5780;;; Variant used to break a cycle with python-uvicorn.
5781(define-public python-httpx-bootstrap
5782 (hidden-package
5783 (package/inherit python-httpx
5784 (name "python-httpx-bootstrap")
5785 (arguments (list #:tests? #f))
5786 (native-inputs '())
5787 (propagated-inputs
5788 (modify-inputs (package-propagated-inputs python-httpx)
5789 (replace "python-httpcore" python-httpcore-bootstrap))))))
5790
5791(define-public python-wsgiprox
5792 (package
5793 (name "python-wsgiprox")
5794 (version "1.5.2")
5795 (source
5796 (origin
5797 (method url-fetch)
5798 (uri (pypi-uri "wsgiprox" version))
5799 (sha256
5800 (base32
5801 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
5802 (build-system python-build-system)
5803 (arguments
5804 ;; The test suite hangs (see:
5805 ;; https://github.com/webrecorder/wsgiprox/issues/6).
5806 `(#:tests? #f
5807 #:phases
5808 (modify-phases %standard-phases
5809 (add-after 'unpack 'fix-pytest-argument
5810 (lambda _
5811 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
5812 (substitute* "setup.py"
5813 (("--doctest-module")
5814 "--doctest-modules")))))))
5815 (propagated-inputs
5816 (list python-certauth python-gevent python-websocket-client))
5817 (native-inputs
5818 (list python-mock python-pytest-cov python-waitress))
5819 (home-page "https://github.com/webrecorder/wsgiprox")
5820 (synopsis "HTTP/S proxy with WebSockets over WSGI")
5821 (description "@code{wsgiprox} is a Python WSGI (Web Server Gateway
5822Interface) middle-ware for adding HTTP and HTTPS proxy support to a WSGI
5823application. The library accepts HTTP and HTTPS proxy connections, and routes
5824them to a designated prefix.")
5825 (license license:asl2.0)))
5826
5827(define-public python-warcio
5828 ;; The PyPI release is missing some test support files (see:
5829 ;; https://github.com/webrecorder/warcio/issues/132).
5830 (let ((revision "0")
5831 (commit "aa702cb321621b233c6e5d2a4780151282a778be"))
5832 (package
5833 (name "python-warcio")
5834 (version (git-version "1.7.4" revision commit))
5835 (source
5836 (origin
5837 (method git-fetch)
5838 (uri (git-reference
5839 (url "https://github.com/webrecorder/warcio")
5840 (commit commit)))
5841 (file-name (git-file-name name version))
5842 (sha256
5843 (base32
5844 "11afr6zy3r6rda81010iq496dazg4xid0izg3smg6ighpmvsnzf2"))))
5845 (build-system python-build-system)
5846 (arguments
5847 (list
5848 #:phases
5849 #~(modify-phases %standard-phases
5850 (replace 'check
5851 (lambda* (#:key tests? #:allow-other-keys)
5852 (when tests?
5853 (invoke "pytest" "-vv"
5854 ;; These tests fail due to networking requirements.
5855 "-k" (format #f "not ~a"
5856 (string-join
5857 '("test_post_chunked"
5858 "test_remote"
5859 "test_capture_http_proxy"
5860 "test_capture_https_proxy"
5861 "test_capture_https_proxy_same_session")
5862 " and not ")))))))))
5863 (native-inputs
5864 ;; These inputs are required for the test suite.
5865 (list python-httpbin python-pytest-cov python-requests
5866 python-wsgiprox))
5867 (home-page "https://github.com/webrecorder/warcio")
5868 (synopsis "Streaming web archival archive (WARC) library")
5869 (description "warcio is a Python library to read and write the WARC format
5870commonly used in Web archives. It is designed for fast, low-level access to
5871web archival content, oriented around a stream of WARC records rather than
5872files.")
5873 (license license:asl2.0))))
5874
5875(define-public python-websockets
5876 (package
5877 (name "python-websockets")
5878 (version "10.3")
5879 (source
5880 (origin
5881 (method git-fetch)
5882 (uri (git-reference
5883 (url "https://github.com/aaugustin/websockets")
5884 (commit version)))
5885 (file-name (git-file-name name version))
5886 (sha256
5887 (base32
5888 "1vk7g5z977mi89hamwiqawpmibwvv9ghrf3pqva1waxmyc7gyjb5"))))
5889 (build-system python-build-system)
5890 (arguments
5891 (list #:phases
5892 #~(modify-phases %standard-phases
5893 (add-before 'check 'extend-test-timeout
5894 (lambda _
5895 (setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))
5896 (home-page "https://github.com/aaugustin/websockets")
5897 (synopsis
5898 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
5899 (description
5900 "@code{websockets} is a library for building WebSocket servers and clients
5901in Python with a focus on correctness and simplicity.
5902
5903Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
5904it provides an elegant coroutine-based API.")
5905 (license license:bsd-3)))
5906
5907(define-public python-selenium
5908 (package
5909 (name "python-selenium")
5910 (version "3.141.0")
5911 (source
5912 (origin
5913 (method url-fetch)
5914 (uri (pypi-uri "selenium" version))
5915 (sha256
5916 (base32
5917 "039hf9knvl4s3hp21bzwsp1g5ri9gxsh504dp48lc6nr1av35byy"))))
5918 (build-system python-build-system)
5919 (propagated-inputs
5920 (list python-urllib3))
5921 (home-page
5922 "https://github.com/SeleniumHQ/selenium/")
5923 (synopsis "Python bindings for Selenium")
5924 (description "Selenium enables web browser automation.
5925Selenium specifically provides infrastructure for the W3C WebDriver specification
5926— a platform and language-neutral coding interface compatible with all
5927major web browsers.")
5928 (license license:asl2.0)))
5929
5930(define-public python-rapidjson
5931 (package
5932 (name "python-rapidjson")
5933 (version "0.9.1")
5934 (source
5935 (origin
5936 (method url-fetch)
5937 (uri (pypi-uri "python-rapidjson" version))
5938 (sha256
5939 (base32
5940 "18cl2dhx3gds5vg52jxmh9wjlbiy8dx06c3n482rfpdi9dzbv05d"))
5941 (modules '((guix build utils)))
5942 (snippet
5943 '(begin (delete-file-recursively "rapidjson") #t))))
5944 (build-system python-build-system)
5945 (arguments
5946 `(#:configure-flags
5947 (list (string-append "--rj-include-dir="
5948 (assoc-ref %build-inputs "rapidjson")
5949 "/include/rapidjson"))
5950 #:phases
5951 (modify-phases %standard-phases
5952 (replace 'build
5953 (lambda* (#:key inputs #:allow-other-keys)
5954 (invoke "python" "setup.py" "build"
5955 (string-append "--rj-include-dir="
5956 (assoc-ref %build-inputs "rapidjson")
5957 "/include/rapidjson"))))
5958 (replace 'check
5959 (lambda* (#:key inputs outputs #:allow-other-keys)
5960 (add-installed-pythonpath inputs outputs)
5961 ;; Some tests are broken.
5962 (delete-file "tests/test_base_types.py")
5963 (delete-file "tests/test_validator.py")
5964 (invoke "python" "-m" "pytest" "tests"))))))
5965 (native-inputs
5966 (list rapidjson python-pytest python-pytz))
5967 (home-page "https://github.com/python-rapidjson/python-rapidjson")
5968 (synopsis "Python wrapper around rapidjson")
5969 (description "This package provides a python wrapper around rapidjson.")
5970 (license license:expat)))
5971
5972(define-public python-venusian
5973 (package
5974 (name "python-venusian")
5975 (version "3.0.0")
5976 (source
5977 (origin
5978 (method url-fetch)
5979 (uri (pypi-uri "venusian" version))
5980 (sha256
5981 (base32 "0f7f67dkgxxcjfhpdd5frb9pszkf04lyzzpn5069q0xi89r2p17n"))))
5982 (build-system python-build-system)
5983 (native-inputs
5984 `(("python-pytest" ,python-pytest)
5985 ("python-runner" ,python-pytest-runner)
5986 ("python-pytest-cov" ,python-pytest-cov)))
5987 (arguments '(#:test-target "pytest"))
5988 (home-page "https://docs.pylonsproject.org/projects/venusian")
5989 (synopsis "Library for deferring decorator actions")
5990 (description
5991 "Venusian is a library which allows framework authors to defer decorator
5992actions. Instead of taking actions when a function (or class) decorator is
5993executed at import time, you can defer the action usually taken by the
5994decorator until a separate scan phase.")
5995 (license license:repoze)))
5996
5997(define-public python-zope-deprecation
5998 (package
5999 (name "python-zope-deprecation")
6000 (version "4.4.0")
6001 (source (origin
6002 (method url-fetch)
6003 (uri (pypi-uri "zope.deprecation" version))
6004 (sha256
6005 (base32
6006 "1pz2cv7gv9y1r3m0bdv7ks1alagmrn5msm5spwdzkb2by0w36i8d"))))
6007 (build-system python-build-system)
6008 (native-inputs `())
6009 (propagated-inputs `())
6010 (home-page "https://zopedeprecation.readthedocs.io/")
6011 (synopsis "Function for marking deprecations")
6012 (description "The @code{zope.deprecation} module provides a function for
6013marking modules, classes, functions, methods and properties as deprecated,
6014displaying warnings when usaged in application code.")
6015 (license license:zpl2.1)))
6016
6017(define-public python-translationstring
6018 (package
6019 (name "python-translationstring")
6020 (version "1.3")
6021 (source (origin
6022 (method url-fetch)
6023 (uri (pypi-uri "translationstring" version))
6024 (sha256
6025 (base32
6026 "0bdpcnd9pv0131dl08h4zbcwmgc45lyvq3pa224xwan5b3x4rr2f"))))
6027 (build-system python-build-system)
6028 (home-page "http://docs.pylonsproject.org/projects/translationstring")
6029 (synopsis "Internationalization tooling for the Pylons project")
6030 (description "This package provides a library used by various Pylons
6031project packages for internationalization (i18n) duties related to
6032translation.")
6033 (license license:repoze)))
6034
6035(define-public python-plaster
6036 (package
6037 (name "python-plaster")
6038 (version "1.0")
6039 (source (origin
6040 (method url-fetch)
6041 (uri (pypi-uri "plaster" version))
6042 (sha256
6043 (base32
6044 "1hy8k0nv2mxq94y5aysk6hjk9ryb4bsd13g83m60hcyzxz3wflc3"))))
6045 (build-system python-build-system)
6046 (native-inputs
6047 (list python-pytest))
6048 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
6049 (synopsis "Configuration loader for multiple config file formats")
6050 (description
6051 "Plaster is a loader interface around multiple config file formats. It
6052exists to define a common API for applications to use when they wish to load
6053configuration. The library itself does not aim to handle anything except a
6054basic API that applications may use to find and load configuration settings.
6055Any specific constraints should be implemented in a pluggable loader which can
6056be registered via an entrypoint.")
6057 (license license:repoze)))
6058
6059(define-public python-plaster-pastedeploy
6060 (package
6061 (name "python-plaster-pastedeploy")
6062 (version "0.7")
6063 (source (origin
6064 (method url-fetch)
6065 (uri (pypi-uri "plaster_pastedeploy" version))
6066 (sha256
6067 (base32
6068 "1zg7gcsvc1kzay1ry5p699rg2qavfsxqwl17mqxzr0gzw6j9679r"))))
6069 (build-system python-build-system)
6070 (native-inputs
6071 (list python-pytest))
6072 (propagated-inputs
6073 (list python-plaster python-pastedeploy))
6074 (home-page "https://github.com/Pylons/plaster_pastedeploy")
6075 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
6076 (description
6077 "This plugin for @code{python-plaster} adds support for PasteDeploy
6078syntax, it provides a plaster @code{Loader} object that can parse ini files
6079according to the standard set by PasteDeploy")
6080 (license license:expat)))
6081
6082(define-public python-hupper
6083 (package
6084 (name "python-hupper")
6085 (version "1.10.3")
6086 (source (origin
6087 (method url-fetch)
6088 (uri (pypi-uri "hupper" version))
6089 (sha256
6090 (base32
6091 "1nbc648d110jx6ziji980cdmzsd14p8fqrcarsdvr1vm5jvm2vyd"))))
6092 (build-system python-build-system)
6093 (arguments '(#:test-target "pytest"))
6094 (native-inputs
6095 (list python-pytest python-pytest-runner python-watchdog python-mock
6096 python-pytest-cov))
6097 (propagated-inputs
6098 (list python-pytz))
6099 (home-page "https://readthedocs.org/projects/hupper")
6100 (synopsis "Integrated process monitor tracking changes to imported Python files")
6101 (description
6102 "Hupper is an integrated process monitor that will track changes to any
6103imported Python files in sys.modules as well as custom paths. When files are
6104changed the process is restarted.")
6105 (license license:expat)))
6106
6107(define-public python-pyowm
6108 (package
6109 (name "python-pyowm")
6110 (version "3.2.0")
6111 (source
6112 (origin
6113 (method url-fetch)
6114 (uri (pypi-uri "pyowm" version))
6115 (sha256
6116 (base32 "1pm8w6phr4m3xayndfndid366vhf1fpvdgjsp2zicxarmgc0pm53"))))
6117 (build-system python-build-system)
6118 (propagated-inputs (list python-geojson python-pysocks python-requests))
6119 (home-page "https://github.com/csparpa/pyowm")
6120 (synopsis "Python wrapper around OpenWeatherMap web APIs")
6121 (description
6122 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
6123 (license license:expat)))
6124
6125(define-public python-pyramid
6126 (package
6127 (name "python-pyramid")
6128 (version "1.10.4")
6129 (source (origin
6130 (method url-fetch)
6131 (uri (pypi-uri "pyramid" version))
6132 (sha256
6133 (base32
6134 "0rkxs1ajycg2zh1c94xlmls56mx5m161sn8112skj0amza6cn36q"))))
6135 (build-system python-build-system)
6136 (propagated-inputs
6137 (list python-hupper
6138 python-plaster-pastedeploy
6139 python-translationstring
6140 python-venusian
6141 python-webob
6142 python-zope-deprecation
6143 python-zope-interface
6144 python-webtest
6145 python-zope-component
6146 python-plaster))
6147 (home-page "https://trypyramid.com/")
6148 (synopsis "Python web-framework suitable for small and large sites")
6149 (description
6150 "Pyramid makes it easy to write web applications. From minimal
6151request/response web apps to larger, grown applications.")
6152 (license license:repoze)))
6153
6154(define-public python-random-user-agent
6155 (package
6156 (name "python-random-user-agent")
6157 (version "1.0.1")
6158 (source
6159 (origin
6160 (method url-fetch)
6161 (uri (pypi-uri "random_user_agent" version))
6162 (sha256
6163 (base32
6164 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
6165 (build-system python-build-system)
6166 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
6167 (synopsis "List of user agents")
6168 (description
6169 "This package provides a list of user agents, from a collection of more
6170than 326,000 known user-agents. Users can pick a random one, or select one
6171based on filters.")
6172 (license license:expat)))
6173
6174(define-public python-flask-restx
6175 (package
6176 (name "python-flask-restx")
6177 (version "0.5.1")
6178 (source
6179 ;; We fetch from the Git repo because there are no tests in the PyPI
6180 ;; archive.
6181 (origin
6182 (method git-fetch)
6183 (uri (git-reference
6184 (url "https://github.com/python-restx/flask-restx")
6185 (commit version)))
6186 (file-name (git-file-name name version))
6187 (sha256
6188 (base32 "18vrmknyxw6adn62pz3kr9kvazfgjgl4pgimdf8527fyyiwcqy15"))))
6189 (build-system python-build-system)
6190 (propagated-inputs
6191 (list python-aniso8601 python-flask python-jsonschema python-pytz))
6192 (native-inputs
6193 (list python-blinker
6194 python-faker
6195 python-pytest
6196 python-pytest-benchmark
6197 python-pytest-flask
6198 python-pytest-mock))
6199 (arguments
6200 `(#:phases
6201 (modify-phases %standard-phases
6202 (replace 'check
6203 (lambda _
6204 (invoke "pytest" "--benchmark-skip" "-k"
6205 ;; Those tests need internet access
6206 (string-join
6207 '("not test_check and not test_valid_value_check \
6208and not test_override_app_level"
6209 "not test_redirect") " and ")))))))
6210 (home-page "https://github.com/python-restx/flask-restx")
6211 (synopsis
6212 "Framework for fast, easy and documented API development with Flask")
6213 (description
6214 "Flask-RESTX is an extension for Flask that adds support for quickly building
6215REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
6216 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
6217decorators and tools to describe your API and expose its documentation properly using
6218Swagger.")
6219 (license license:bsd-3)))
6220
6221(define-public python-flask-restplus
6222 (deprecated-package "python-flask-restplus" python-flask-restx))
6223
6224(define-public python-flask-socketio
6225 (package
6226 (name "python-flask-socketio")
6227 (version "5.0.1")
6228 (source
6229 (origin
6230 (method url-fetch)
6231 (uri (pypi-uri "Flask-SocketIO" version))
6232 (sha256
6233 (base32
6234 "09r2gpj2nbn72v2zaf6xsvlazln77pgqzp2pg2021nja47sijhsw"))))
6235 (build-system python-build-system)
6236 (propagated-inputs
6237 (list python-flask python-socketio))
6238 (arguments '(#:tests? #f)) ; Tests not included in release tarball.
6239 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
6240 (synopsis "Socket.IO integration for Flask applications")
6241 (description "Socket.IO integration for Flask applications")
6242 (license license:expat)))
6243
6244(define-public python-manuel
6245 (package
6246 (name "python-manuel")
6247 (version "1.10.1")
6248 (source
6249 (origin
6250 (method url-fetch)
6251 (uri (pypi-uri "manuel" version))
6252 (sha256
6253 (base32
6254 "1bdzay7j70fly5fy6wbdi8fbrxjrrlxnxnw226rwry1c8a351rpy"))))
6255 (build-system python-build-system)
6256 (propagated-inputs
6257 (list python-six))
6258 (native-inputs
6259 (list python-zope-testing))
6260 (home-page "https://pypi.org/project/manuel/")
6261 (synopsis "Build tested documentation")
6262 (description
6263 "Manuel lets you mix and match traditional doctests with custom test syntax.")
6264 (license license:asl2.0)))
6265
6266(define-public python-pecan
6267 (package
6268 (name "python-pecan")
6269 (version "1.4.1")
6270 (source
6271 (origin
6272 (method git-fetch) ;no tests in pypi release
6273 (uri (git-reference
6274 (url "https://github.com/pecan/pecan")
6275 (commit version)))
6276 (file-name (git-file-name name version))
6277 (sha256
6278 (base32
6279 "10lz0cqafx3j24m52vv9ph0bxrzyx6wv2dgz7g9kfm60lhaskqkh"))))
6280 (build-system python-build-system)
6281 (arguments
6282 (list
6283 #:phases
6284 #~(modify-phases %standard-phases
6285 (add-after 'unpack 'relax-requirements
6286 (lambda _
6287 (substitute* "test-requirements.txt"
6288 ;; Drop extraneous virtualenv requirement.
6289 ((".*virtualenv.*") ""))))
6290 (replace 'check
6291 (lambda* (#:key tests? #:allow-other-keys)
6292 (when tests?
6293 (invoke "pytest" "-vv" "pecan")))))))
6294 (native-inputs
6295 (list gunicorn
6296 python-genshi
6297 python-jinja2
6298 python-pytest
6299 python-sqlalchemy
6300 uwsgi))
6301 (propagated-inputs
6302 (list python-logutils
6303 python-mako
6304 python-six
6305 python-webob
6306 python-webtest))
6307 (home-page "http://github.com/pecan/pecan")
6308 (synopsis "WSGI object-dispatching web framework")
6309 (description "This package provides a WSGI object-dispatching web
6310framework, designed to be lean and fast, with few dependencies.")
6311 (license license:bsd-3)))
6312
6313(define-public python-persistent
6314 (package
6315 (name "python-persistent")
6316 (version "4.6.4")
6317 (source
6318 (origin
6319 (method url-fetch)
6320 (uri (pypi-uri "persistent" version))
6321 (sha256
6322 (base32
6323 "0imm9ji03lhkpcfmhid7x5209ix8g2rlgki9ik1qxks4b8sm8gzq"))))
6324 (build-system python-build-system)
6325 (propagated-inputs
6326 (list python-cffi python-zope-interface))
6327 (native-inputs
6328 (list python-manuel python-zope-testrunner))
6329 (home-page "https://github.com/zopefoundation/persistent/")
6330 (synopsis "Translucent persistent objects")
6331 (description "This package contains a generic persistence implementation for
6332Python. It forms the core protocol for making objects interact
6333\"transparently\" with a database such as the ZODB.")
6334 (license license:zpl2.1)))
6335
6336(define-public python-btrees
6337 (package
6338 (name "python-btrees")
6339 (version "4.7.2")
6340 (source
6341 (origin
6342 (method url-fetch)
6343 (uri (pypi-uri "BTrees" version))
6344 (sha256
6345 (base32
6346 "0iiq0g9k1g6qgqq84q9h6639vlvzznk1rgdm0rfcnnqkbkmsbr3w"))))
6347 (build-system python-build-system)
6348 (propagated-inputs
6349 (list python-persistent python-zope-interface))
6350 (native-inputs
6351 (list python-persistent python-transaction python-zope-testrunner))
6352 (home-page "https://github.com/zopefoundation/BTrees")
6353 (synopsis "Scalable persistent object containers")
6354 (description
6355 "This package contains a set of persistent object containers built around a
6356modified BTree data structure. The trees are optimized for use inside ZODB's
6357\"optimistic concurrency\" paradigm, and include explicit resolution of
6358conflicts detected by that mechanism.")
6359 (license license:zpl2.1)))
6360
6361(define-public python-transaction
6362 (package
6363 (name "python-transaction")
6364 (version "3.0.0")
6365 (source
6366 (origin
6367 (method url-fetch)
6368 (uri (pypi-uri "transaction" version))
6369 (sha256
6370 (base32
6371 "0bdaks31bgfh78wnj3sij24bfysmqk25crsis6amz8kzrc0d82iv"))))
6372 (build-system python-build-system)
6373 (propagated-inputs
6374 (list python-zope-interface))
6375 (native-inputs
6376 (list python-coverage python-mock python-nose))
6377 (home-page "https://github.com/zopefoundation/transaction")
6378 (synopsis "Transaction management for Python")
6379 (description "This package contains a generic transaction implementation
6380for Python. It is mainly used by the ZODB.")
6381 (license license:zpl2.1)))
6382
6383(define-public python-robot-detection
6384 (package
6385 (name "python-robot-detection")
6386 (version "0.4")
6387 (source
6388 (origin
6389 (method url-fetch)
6390 (uri (pypi-uri "robot-detection" version))
6391 (sha256
6392 (base32
6393 "1xd2jm3yn31bnk1kqzggils2rxj26ylxsfz3ap7bhr3ilhnbg3rx"))))
6394 (build-system python-build-system)
6395 (arguments '(#:tests? #f)) ; Tests not shipped in pypi release.
6396 (propagated-inputs (list python-six))
6397 (home-page "https://github.com/rory/robot-detection")
6398 (synopsis "Detect web crawlers")
6399 (description
6400 "@code{robot_detection} is a python module to detect if a given HTTP User
6401Agent is a web crawler. It uses the list of registered robots from
6402@url{http://www.robotstxt.org}.")
6403 (license license:gpl3+)))
6404
6405(define-public python-pysolr
6406 (package
6407 (name "python-pysolr")
6408 (version "3.9.0")
6409 (source
6410 (origin
6411 (method url-fetch)
6412 (uri (pypi-uri "pysolr" version))
6413 (sha256
6414 (base32
6415 "1rj5jmscvxjwcmlfi6hmkj44l4x6n3ln5p7d8d18j566hzmmzw3f"))))
6416 (build-system python-build-system)
6417 (arguments
6418 '(#:tests? #f)) ; Tests require network access.
6419 (propagated-inputs
6420 (list python-requests))
6421 (native-inputs
6422 (list python-setuptools-scm))
6423 (home-page "https://github.com/django-haystack/pysolr/")
6424 (synopsis "Lightweight python wrapper for Apache Solr")
6425 (description
6426 "This module provides an interface that queries the Apache Solr server
6427using a pure Python implementation.")
6428 (license license:bsd-3)))
6429
6430(define-public python-pyjsparser
6431 (package
6432 (name "python-pyjsparser")
6433 (version "2.7.1")
6434 (source
6435 (origin
6436 (method url-fetch)
6437 (uri (pypi-uri "pyjsparser" version))
6438 (sha256
6439 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
6440 (build-system python-build-system)
6441 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
6442 (synopsis "Fast JavaScript parser")
6443 (description "This package provides a fast JavaScript parser (based on
6444esprima.js)")
6445 (license license:expat)))
6446
6447(define-public python-js2py
6448 (package
6449 (name "python-js2py")
6450 (version "0.71")
6451 (source
6452 (origin
6453 (method url-fetch)
6454 (uri (pypi-uri "Js2Py" version))
6455 (sha256
6456 (base32 "1kkzkys6dfcbdv51vqxr9cmak350ab4mmykb8dysx60lvl4i06x4"))))
6457 (build-system python-build-system)
6458 (arguments '(#:tests? #false)) ; none included
6459 (propagated-inputs
6460 (list python-pyjsparser python-six python-tzlocal))
6461 (home-page "https://github.com/PiotrDabkowski/Js2Py")
6462 (synopsis "JavaScript to Python translator")
6463 (description
6464 "This package provides a JavaScript to Python translator and a JavaScript
6465interpreter written in pure Python.")
6466 (license license:expat)))
6467
6468(define-public python-http-ece
6469 (package
6470 (name "python-http-ece")
6471 (version "1.1.0")
6472 (source
6473 (origin
6474 (method git-fetch)
6475 (uri (git-reference
6476 (url "https://github.com/web-push-libs/encrypted-content-encoding")
6477 (commit (string-append "v" version))))
6478 (file-name (git-file-name name version))
6479 (sha256
6480 (base32
6481 "0bp4cc0xc123i72h80ax3qz3ixfwx3j7pw343kc7i6kdvfi8klx7"))))
6482 (build-system python-build-system)
6483 (arguments
6484 `(#:phases
6485 (modify-phases %standard-phases
6486 (add-after 'unpack 'change-directory
6487 (lambda _ (chdir "python") #t)))))
6488 (propagated-inputs
6489 (list python-cryptography))
6490 (native-inputs
6491 (list python-coverage python-flake8 python-mock python-nose))
6492 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
6493 (synopsis "Encrypted Content Encoding for HTTP")
6494 (description
6495 "This package provices a simple implementation of Encrypted Content
6496Encoding for HTTP.")
6497 (license license:expat)))
6498
6499(define-public python-cloudscraper
6500 (package
6501 (name "python-cloudscraper")
6502 (version "1.2.60")
6503 (source
6504 (origin
6505 (method git-fetch)
6506 (uri (git-reference
6507 (url "https://github.com/VeNoMouS/cloudscraper")
6508 (commit version)))
6509 (file-name (git-file-name name version))
6510 (sha256
6511 (base32 "00cmxgwdm0x1j4a4ipwvpzih735hdzidljbijk1b3laj3dgvnvsm"))
6512 (modules '((guix build utils)))
6513 (snippet
6514 '(with-directory-excursion "cloudscraper"
6515 (for-each delete-file
6516 '("captcha/9kw.py"
6517 "captcha/anticaptcha.py"))
6518 (substitute* "__init__.py"
6519 ;; Perhaps it's a joke, but don't promote proprietary software.
6520 (("([Th]is feature is not available) in the .*'" _ prefix)
6521 (string-append prefix ".'")))))))
6522 (build-system python-build-system)
6523 (arguments
6524 `(#:phases
6525 (modify-phases %standard-phases
6526 ;; XXX: Dependencies, that have not yet been packaged
6527 ;; and cause an import error when included.
6528 (add-after 'unpack 'drop-unsupported-sources
6529 (lambda _
6530 (with-directory-excursion "cloudscraper"
6531 (for-each delete-file
6532 '("interpreters/v8.py")))))
6533 (add-after 'unpack 'fix-references
6534 (lambda _
6535 (substitute* "cloudscraper/interpreters/nodejs.py"
6536 (("'node'")
6537 (string-append "'" (which "node") "'")))))
6538 (replace 'check
6539 (lambda* (#:key tests? #:allow-other-keys)
6540 (when tests?
6541 (invoke "pytest" "-vv"
6542 "-k" "not test_getCookieString_challenge_js_challenge1_16_05_2020")))))))
6543 (inputs
6544 (list node))
6545 (propagated-inputs
6546 (list python-js2py
6547 python-polling2
6548 python-requests
6549 python-requests-toolbelt
6550 python-responses
6551 python-pyparsing))
6552 (native-inputs
6553 (list python-pytest))
6554 (home-page "https://github.com/venomous/cloudscraper")
6555 (synopsis "Cloudflare anti-bot bypass")
6556 (description
6557 "This module acts as a webbrowser solving Cloudflare's Javascript
6558challenges.")
6559 (license license:expat)))
6560
6561(define-public python-imap-tools
6562 (package
6563 (name "python-imap-tools")
6564 (version "0.29.0")
6565 (source
6566 (origin
6567 (method url-fetch)
6568 (uri (pypi-uri "imap_tools" version))
6569 (sha256
6570 (base32
6571 "0x122jwpc74wwyw2rsv2fvh6p12y31019ndfr9717jzjkj2d3lhb"))))
6572 (build-system python-build-system)
6573 (arguments '(#:tests? #f)) ; tests require internet access
6574 (home-page "https://github.com/ikvk/imap_tools")
6575 (synopsis "Work with email and mailbox by IMAP")
6576 (description
6577 "This Python library provides tools to deal with email and mailboxes
6578over IMAP:
6579
6580@itemize
6581@item Parsed email message attributes
6582@item Query builder for searching emails
6583@item Work with emails in folders (copy, delete, flag, move, seen)
6584@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
6585@end itemize")
6586 (license license:asl2.0)))
6587
6588(define-public python-giturlparse
6589 (package
6590 (name "python-giturlparse")
6591 (version "0.10.0")
6592 (source
6593 (origin
6594 (method url-fetch)
6595 (uri (pypi-uri "giturlparse" version))
6596 (sha256
6597 (base32 "0dxk7sqy8ibaqdl6jzxd0ac1p7shzp4p9f3lhkd7qw9h3llsp595"))))
6598 (build-system python-build-system)
6599 (home-page "https://github.com/nephila/giturlparse")
6600 (synopsis "Git URL parsing module")
6601 (description "This package provides a git URL parsing module which supports
6602parsing and rewriting of remote git URLs from various hosting providers.")
6603 (license license:asl2.0)))
6604
6605(define-public python-hstspreload
6606 (package
6607 (name "python-hstspreload")
6608 (version "2020.10.20")
6609 (source
6610 (origin
6611 (method url-fetch)
6612 (uri (pypi-uri "hstspreload" version))
6613 (sha256
6614 (base32
6615 "1qah80p2xlib1rhivvdj9v5y3girxrj7dwp1mnh8mwaj5wy32y8a"))))
6616 (build-system python-build-system)
6617 (home-page
6618 "https://github.com/sethmlarson/hstspreload")
6619 (synopsis
6620 "Chromium HSTS Preload list as a Python package")
6621 (description
6622 "@code{python-hstspreload} contains Chromium HSTS Preload list
6623as a Python package.")
6624 (license license:bsd-3)))
6625
6626(define-public python-sanic-routing
6627 (package
6628 (name "python-sanic-routing")
6629 (version "0.7.2")
6630 (source
6631 (origin
6632 (method url-fetch)
6633 (uri (pypi-uri "sanic-routing" version))
6634 (sha256
6635 (base32 "0k9paln0jd4sc2bklp977c82n29pk12wiv726siplkh57y5yi70k"))))
6636 (build-system python-build-system)
6637 (arguments
6638 ;; PyPi sources does not contain tests, recursive dependency on
6639 ;; python-sanic.
6640 (list #:tests? #f))
6641 (home-page "https://github.com/sanic-org/sanic-routing/")
6642 (synopsis "Routing component for Sanic")
6643 (description "Internal package for @code{python-sanic}, which provides
6644the @code{BasicRouter}.")
6645 (license license:expat)))
6646
6647(define-public python-sanic-testing
6648 (package
6649 (name "python-sanic-testing")
6650 (version "22.3.0")
6651 (source
6652 (origin
6653 (method url-fetch)
6654 (uri (pypi-uri "sanic-testing" version))
6655 (sha256
6656 (base32 "1vkgi9d3xyik507j4jy9s74mkl81hgx3c2d5y3aa1av9h6wjjivp"))))
6657 (build-system python-build-system)
6658 (arguments
6659 ;; PyPi sources does not contain tests, recursive dependency on
6660 ;; python-sanic.
6661 (list #:tests? #f
6662 #:phases
6663 #~(modify-phases %standard-phases
6664 (add-after 'unpack 'loosen-requirements
6665 (lambda _
6666 ;; Don't place an upper boundary on httpx version.
6667 ;; https://github.com/sanic-org/sanic-testing/pull/39
6668 (substitute* "setup.py"
6669 (("httpx>=0\\.18,<0\\.23")
6670 "httpx>=0.18")))))))
6671 (propagated-inputs (list python-httpx python-sanic-bootstrap
6672 python-websockets))
6673 (home-page "https://github.com/sanic-org/sanic-testing/")
6674 (synopsis "Test clients for Sanic")
6675 (description "Internal package for @code{python-sanic}, which is
6676meant to be the core testing utility and clients for testing Sanic
6677applications.")
6678 (license license:expat)))
6679
6680(define-public python-sanic
6681 (package
6682 (name "python-sanic")
6683 ;; We provide the latest LTS version of python-sanic.
6684 (version "21.12.1")
6685 (source
6686 (origin
6687 (method url-fetch)
6688 (uri (pypi-uri "sanic" version))
6689 (sha256
6690 (base32
6691 "0b8mcd1q9qkwcv2qz8nlyaacs0bp7a1l31sdq2m8hhkxykzfq5bg"))))
6692 (build-system python-build-system)
6693 (arguments
6694 (list
6695 #:phases
6696 #~(modify-phases %standard-phases
6697 (replace 'check
6698 (lambda* (#:key tests? #:allow-other-keys)
6699 (when tests?
6700 (invoke "pytest" "-vv" "./tests" "-k"
6701 (string-append
6702 ;; PyPi sources lack examples module.
6703 "not test_gunicorn_"
6704 ;; Does not expect brotli and reordered headers.
6705 " and not test_raw_headers"
6706 ;; These look like buggy testcases.
6707 " and not test_zero_downtime"
6708 " and not test_non_default_uvloop_config_raises_warning"
6709 " and not test_listeners_triggered"
6710 " and not test_keep_alive_connection_context"
6711 " and not test_keep_alive_client_timeout"))))))))
6712 (propagated-inputs
6713 (list python-aiofiles
6714 python-httptools
6715 python-multidict
6716 python-sanic-routing
6717 python-ujson
6718 python-uvloop
6719 python-websockets))
6720 (native-inputs
6721 (list gunicorn
6722 python-bandit
6723 python-beautifulsoup4
6724 python-chardet
6725 python-isort
6726 python-pytest
6727 python-pytest-benchmark
6728 python-pytest-sanic
6729 python-pytest-sugar
6730 python-pytest-asyncio
6731 python-sanic-testing
6732 python-uvicorn))
6733 (home-page
6734 "https://github.com/sanic-org/sanic/")
6735 (synopsis
6736 "Async Python web server/framework")
6737 (description
6738 "Sanic is a Python web server and web framework
6739that's written to go fast. It allows the usage of the
6740@code{async/await} syntax added in Python 3.5, which makes
6741your code non-blocking and speedy.")
6742 (license license:expat)))
6743
6744(define-public python-sanic-bootstrap
6745 (package
6746 (inherit python-sanic)
6747 (name "python-sanic-bootstrap")
6748 (arguments (list #:tests? #f))
6749 (native-inputs '())))
6750
6751(define-public python-socketio
6752 (package
6753 (name "python-socketio")
6754 (version "5.1.0")
6755 (source
6756 (origin
6757 (method url-fetch)
6758 (uri (pypi-uri "python-socketio" version))
6759 (sha256
6760 (base32
6761 "14vhpxdn54lz54mhcqlgcks0ssbws9gd1y7ii16a2g3gpfdc531k"))))
6762 (build-system python-build-system)
6763 (propagated-inputs
6764 (list python-aiohttp
6765 python-bidict
6766 python-engineio
6767 python-requests
6768 python-websocket-client
6769 python-websockets))
6770 (arguments '(#:tests? #f)) ; Tests not included in release tarball.
6771 (home-page "https://github.com/miguelgrinberg/python-socketio/")
6772 (synopsis "Python Socket.IO server")
6773 (description
6774 "Python implementation of the Socket.IO realtime client and server.")
6775 (license license:expat)))
6776
6777(define-public python-socks
6778 (package
6779 (name "python-socks")
6780 (version "2.0.3")
6781 (source
6782 (origin
6783 (method url-fetch)
6784 (uri (pypi-uri "python-socks" version))
6785 (sha256
6786 (base32
6787 "12msk06c0glljcrx1byd78xgv05lxw81vknqwhn8ccs7an7cmag3"))))
6788 (build-system python-build-system)
6789 (arguments
6790 `(#:tests? #f ; tests not included
6791 #:phases
6792 (modify-phases %standard-phases
6793 (replace 'check
6794 (lambda* (#:key tests? #:allow-other-keys)
6795 (when tests?
6796 (invoke "pytest" "tests/" "-s")))))))
6797 (propagated-inputs
6798 (list python-async-timeout python-curio python-trio))
6799 (native-inputs
6800 (list python-pytest))
6801 (home-page "https://github.com/romis2012/python-socks")
6802 (synopsis
6803 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
6804 (description
6805 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
6806 functionality.")
6807 (license license:asl2.0)))
6808
6809(define-public python-socksio
6810 (package
6811 (name "python-socksio")
6812 (version "1.0.0")
6813 (source
6814 (origin
6815 (method url-fetch)
6816 (uri (pypi-uri "socksio" version))
6817 (sha256
6818 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
6819 (build-system python-build-system)
6820 (home-page "https://github.com/sethmlarson/socksio")
6821 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
6822 (description "The @code{socksio} Python module is a client-side sans-I/O
6823SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
6824@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
6825means the library itself does not handle the actual sending of the bytes
6826through the network, it only deals with the implementation details of the
6827SOCKS protocols. It can be paired with any I/O library.")
6828 (license license:expat)))
6829
6830(define-public python-siosocks
6831 (package
6832 (name "python-siosocks")
6833 (version "0.3.0")
6834 (source (origin
6835 (method url-fetch)
6836 (uri (pypi-uri "siosocks" version))
6837 (sha256
6838 (base32
6839 "0qqxy8wl5mrmlkblzjq9nsg0cbm5jwgj409mhnhq6gd1ypvbndms"))))
6840 (build-system python-build-system)
6841 (arguments
6842 (list #:phases #~(modify-phases %standard-phases
6843 (replace 'check
6844 (lambda* (#:key tests? #:allow-other-keys)
6845 (when tests?
6846 (invoke "pytest" "-vvv")))))))
6847 (native-inputs (list python-pytest python-pytest-asyncio python-pytest-cov
6848 python-pytest-trio))
6849 (propagated-inputs (list python-trio))
6850 (home-page "https://github.com/pohmelie/siosocks")
6851 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
6852 (description
6853 "This package provides a Python module and framework for sans-io socks proxy
6854client/server with couple io backends.
6855
6856Features:
6857@itemize
6858@item Only TCP connect (no BIND, no UDP)
6859@item Both client and server
6860@item SOCKS versions: 4, 4a, 5
6861@item SOCKSv5 auth: no auth, username/password
6862@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
6863@item One-shot socks server (@code{python -m siosocks})
6864@end itemize")
6865 (license license:expat)))
6866
6867(define-public python-msrest
6868 (package
6869 (name "python-msrest")
6870 (version "0.6.21")
6871 (source
6872 (origin
6873 (method url-fetch)
6874 (uri (pypi-uri "msrest" version))
6875 (sha256
6876 (base32 "1n389m3hcsyjskzimq4j71nyw9pjkrp0n5wg1q2c4bfwpv3inrkj"))))
6877 (build-system python-build-system)
6878 (arguments
6879 `(#:phases
6880 (modify-phases %standard-phases
6881 (replace 'check
6882 (lambda* (#:key tests? #:allow-other-keys)
6883 (when tests?
6884 (invoke "pytest"
6885 "-k"
6886 ;; These attempt to connect to bing.com.
6887 (string-append
6888 "not test_basic_aiohttp"
6889 " and not test_basic_async_requests"
6890 " and not test_conf_async_requests"
6891 " and not test_conf_async_trio_requests"
6892 " and not test_basic_aiohttp"
6893 " and not test_basic_async_requests"
6894 " and not test_conf_async_requests"
6895 " and not test_conf_async_trio_requests"))))))))
6896 (propagated-inputs
6897 (list python-aiohttp
6898 python-certifi
6899 python-isodate
6900 python-requests
6901 python-requests-oauthlib))
6902 (native-inputs
6903 (list python-httpretty
6904 python-pytest
6905 python-pytest-aiohttp
6906 python-pytest-asyncio
6907 python-pytest-trio))
6908 (home-page "https://github.com/Azure/msrest-for-python")
6909 (synopsis "AutoRest swagger generator Python client runtime")
6910 (description "This package provides the runtime library @code{msrest} for
6911AutoRest-generated Python clients.")
6912 (license license:expat)))
6913
6914(define-public python-azure-nspkg
6915 (package
6916 (name "python-azure-nspkg")
6917 (version "3.0.2")
6918 (source
6919 (origin
6920 (method url-fetch)
6921 (uri (pypi-uri "azure-nspkg" version ".zip"))
6922 (sha256
6923 (base32
6924 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
6925 (build-system python-build-system)
6926 (native-inputs (list unzip))
6927 (home-page "https://github.com/Azure/azure-sdk-for-python")
6928 (synopsis "Azure namespace internals")
6929 (description
6930 "This package is an internal Azure namespace package.")
6931 (license license:expat)))
6932
6933(define-public python-azure-storage-nspkg
6934 (package
6935 (name "python-azure-storage-nspkg")
6936 (version "3.1.0")
6937 (source
6938 (origin
6939 (method url-fetch)
6940 (uri (pypi-uri "azure-storage-nspkg" version))
6941 (sha256
6942 (base32
6943 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
6944 (build-system python-build-system)
6945 (propagated-inputs
6946 (list python-azure-nspkg))
6947 (home-page "https://github.com/Azure/azure-storage-python")
6948 (synopsis "Microsoft Azure Storage Namespace package")
6949 (description
6950 "This project provides a client library in Python that makes it easy to
6951communicate with Microsoft Azure Storage services.")
6952 (license license:expat)))
6953
6954(define-public python-azure-common
6955 (package
6956 (name "python-azure-common")
6957 (version "1.1.28")
6958 (source
6959 (origin
6960 (method url-fetch)
6961 (uri (pypi-uri "azure-common" version ".zip"))
6962 (sha256
6963 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
6964 (build-system python-build-system)
6965 (propagated-inputs (list python-azure-nspkg))
6966 (native-inputs (list unzip))
6967 (home-page "https://github.com/Azure/azure-sdk-for-python")
6968 (synopsis "Microsoft Azure Client library for Python")
6969 (description "This package provides the Microsoft Azure Client library for
6970Python.")
6971 (license license:expat)))
6972
6973(define-public python-azure-core
6974 (package
6975 (name "python-azure-core")
6976 (version "1.24.0")
6977 (source
6978 (origin
6979 (method url-fetch)
6980 (uri (pypi-uri "azure-core" version ".zip"))
6981 (sha256
6982 (base32 "1r8bpn3zz02mj00qbaks5qq49wqd3mznkm90bchd1mxa3w21nnrl"))))
6983 (build-system python-build-system)
6984 (arguments
6985 `(#:phases
6986 (modify-phases %standard-phases
6987 (replace 'check
6988 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6989 (when tests?
6990 ;; This fails because devtools_testutils doesn't exist.
6991 (delete-file "tests/test_connection_string_parsing.py")
6992 ;; Needs network.
6993 (for-each delete-file
6994 '("tests/async_tests/test_streaming_async.py"
6995 "tests/test_streaming.py"))
6996 (add-installed-pythonpath inputs outputs)
6997 (setenv "PYTHONPATH"
6998 (string-append (getcwd) "/tests/testserver_tests/coretestserver:"
6999 (getenv "GUIX_PYTHONPATH")))
7000 (invoke "pytest"
7001 ;; Most of these need network access.
7002 "-m" "not asyncio and not live_test_only"
7003 "-k"
7004 ;; These need network access.
7005 (string-append
7006 "not test_example_raw_response_hook"
7007 " and not test_example_headers_policy"
7008 " and not test_example_request_id_policy"
7009 " and not test_example_user_agent_policy"
7010 " and not test_example_requests"
7011 " and not test_example_pipeline"
7012 " and not test_example_pipeline_client"
7013 " and not test_example_redirect_policy"
7014 " and not test_example_no_redirects"
7015 " and not test_example_retry_policy"
7016 " and not test_example_no_retries"
7017 " and not test_decompress_plain_no_header"
7018 " and not test_compress_plain_no_header"
7019 " and not test_decompress_compressed_no_header"))))))))
7020 (propagated-inputs
7021 (list python-aiohttp
7022 python-requests
7023 python-six
7024 python-trio
7025 python-typing-extensions))
7026 (native-inputs
7027 (list python-flask
7028 python-msrest
7029 python-pytest
7030 python-pytest-aiohttp
7031 python-pytest-asyncio
7032 python-pytest-trio
7033 unzip))
7034 (home-page "https://github.com/Azure/azure-sdk-for-python")
7035 (synopsis "Microsoft Azure Core library for Python")
7036 (description "This package provides the Microsoft Azure Core library for
7037Python.")
7038 (license license:expat)))
7039
7040(define-public python-azure-storage-blob
7041 (package
7042 (name "python-azure-storage-blob")
7043 (version "12.12.0")
7044 (source
7045 (origin
7046 (method url-fetch)
7047 (uri (pypi-uri "azure-storage-blob" version ".zip"))
7048 (sha256
7049 (base32 "1xv23ph822qywjxs81say9xi5dzmvxcii6sww6d1hvd83iyz1npn"))))
7050 (build-system python-build-system)
7051 (propagated-inputs
7052 (list python-azure-core python-cryptography python-msrest))
7053 (native-inputs (list unzip))
7054 (home-page "https://github.com/Azure/azure-sdk-for-python/")
7055 (synopsis "Microsoft Azure Blob Storage client library for Python")
7056 (description "This package provides the Microsoft Azure Blob Storage
7057Client Library for Python.")
7058 (license license:expat)))
7059
7060(define-public python-google-crc32c
7061 (package
7062 (name "python-google-crc32c")
7063 (version "1.3.0")
7064 (source
7065 (origin
7066 (method url-fetch)
7067 (uri (pypi-uri "google-crc32c" version))
7068 (sha256
7069 (base32 "1ps4qaccij6cixs91772y9f9r1n702yfzy4qqmds6x5h7qkycv97"))))
7070 (build-system python-build-system)
7071 (native-inputs (list python-pytest))
7072 (home-page "https://github.com/googleapis/python-crc32c")
7073 (synopsis "Python wrapper of Google CRC32C")
7074 (description
7075 "This package provides a Python wrapper of the C library implementation
7076of the CRC32C hashing algorithm.")
7077 (license license:asl2.0)))
7078
7079(define-public python-google-auth
7080 (package
7081 (name "python-google-auth")
7082 (version "2.6.6")
7083 (source
7084 (origin
7085 (method url-fetch)
7086 (uri (pypi-uri "google-auth" version))
7087 (sha256
7088 (base32 "04ikassansqkkw4pa98in7q9r4z001m6bi2r3ssxwwrb0f79790v"))))
7089 (build-system python-build-system)
7090 (arguments
7091 `(#:phases
7092 (modify-phases %standard-phases
7093 (replace 'check
7094 (lambda* (#:key tests? #:allow-other-keys)
7095 (when tests?
7096 (invoke "pytest")))))))
7097 (propagated-inputs
7098 (list python-cachetools
7099 python-cryptography
7100 python-pyasn1-modules
7101 python-rsa
7102 python-six))
7103 (native-inputs
7104 (list python-flask
7105 python-freezegun
7106 python-oauth2client
7107 python-pyopenssl
7108 python-pytest
7109 python-pytest-localserver
7110 python-pyu2f
7111 python-requests
7112 python-responses))
7113 (home-page "https://github.com/googleapis/google-auth-library-python")
7114 (synopsis "Google Authentication Library")
7115 (description "This library simplifies using Google's various
7116server-to-server authentication mechanisms to access Google APIs.")
7117 (license license:asl2.0)))
7118
7119(define-public python-google-resumable-media
7120 (package
7121 (name "python-google-resumable-media")
7122 (version "2.3.2")
7123 (source
7124 (origin
7125 (method url-fetch)
7126 (uri (pypi-uri "google-resumable-media" version))
7127 (sha256
7128 (base32 "04qm6rd4mpbbym8ci5xrb6fymc3mmm8x2z9f43q5iwbr3s5lx4h6"))))
7129 (build-system python-build-system)
7130 (arguments
7131 `(#:phases
7132 (modify-phases %standard-phases
7133 (replace 'check
7134 (lambda* (#:key tests? #:allow-other-keys)
7135 (when tests?
7136 ;; The system tests fail to find test_utils.retry.
7137 (delete-file-recursively "tests/system/")
7138 (invoke "pytest")))))))
7139 (propagated-inputs (list python-google-crc32c))
7140 (native-inputs
7141 (list python-google-auth
7142 python-pytest
7143 python-requests
7144 python-test-utils))
7145 (home-page "https://github.com/googleapis/google-resumable-media-python")
7146 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
7147 (description "This package provides utilities for Google Media Downloads
7148and Resumable Uploads.")
7149 (license license:asl2.0)))
7150
7151(define-public python-googleapis-common-protos
7152 (package
7153 (name "python-googleapis-common-protos")
7154 (version "1.56.1")
7155 (source
7156 (origin
7157 (method url-fetch)
7158 (uri (pypi-uri "googleapis-common-protos" version))
7159 (sha256
7160 (base32 "16x1pjc34mrj9w130j40r23ndpykhsqivvk5xfl63ss6qsfyapkb"))))
7161 (build-system python-build-system)
7162 (arguments
7163 `(#:tests? #false ;fails for unknown reasons
7164 #:phases
7165 (modify-phases %standard-phases
7166 (replace 'check
7167 (lambda* (#:key tests? #:allow-other-keys)
7168 (when tests?
7169 (invoke "pytest")))))))
7170 (propagated-inputs (list python-protobuf))
7171 (native-inputs
7172 (list python-pytest))
7173 (home-page "https://github.com/googleapis/python-api-common-protos")
7174 (synopsis "Common protobufs used in Google APIs")
7175 (description "This package contains Python classes generated from the
7176common protos in the @code{googleapis/api-common-protos} repository.")
7177 (license license:asl2.0)))
7178
7179(define-public python-google-api-core
7180 (package
7181 (name "python-google-api-core")
7182 (version "2.7.3")
7183 (source
7184 (origin
7185 (method url-fetch)
7186 (uri (pypi-uri "google-api-core" version))
7187 (sha256
7188 (base32 "0ydwvg9gzp75cd11s62db5w3jhj643yrw095rv95psfb0h3pz58p"))))
7189 (build-system python-build-system)
7190 (arguments
7191 `(#:phases
7192 (modify-phases %standard-phases
7193 (replace 'check
7194 (lambda* (#:key tests? #:allow-other-keys)
7195 (when tests?
7196 ;; These don't work because it doesn't find AsyncMock even when
7197 ;; we add it to the inputs.
7198 (for-each delete-file
7199 '("tests/asyncio/test_page_iterator_async.py"
7200 "tests/asyncio/test_retry_async.py"))
7201 (invoke "pytest")))))))
7202 (propagated-inputs
7203 (list python-google-auth
7204 python-googleapis-common-protos
7205 python-protobuf
7206 python-proto-plus
7207 python-requests))
7208 (native-inputs
7209 (list python-mock
7210 python-pytest
7211 python-pytest-asyncio))
7212 (home-page "https://github.com/googleapis/python-api-core")
7213 (synopsis "Google API client core library")
7214 (description "This library defines common helpers used by all Google API
7215clients.")
7216 (license license:asl2.0)))
7217
7218(define-public python-google-cloud-core
7219 (package
7220 (name "python-google-cloud-core")
7221 (version "2.3.0")
7222 (source
7223 (origin
7224 (method url-fetch)
7225 (uri (pypi-uri "google-cloud-core" version))
7226 (sha256
7227 (base32 "0sa66kidgr32dfq9ngha9l362xnqvnqqmssn5my1gd3lc6g65apx"))))
7228 (build-system python-build-system)
7229 (arguments
7230 `(#:phases
7231 (modify-phases %standard-phases
7232 (replace 'check
7233 (lambda* (#:key tests? #:allow-other-keys)
7234 (when tests?
7235 (invoke "pytest")))))))
7236 (propagated-inputs (list python-google-api-core python-google-auth))
7237 (native-inputs
7238 (list python-grpcio python-pytest))
7239 (home-page "https://github.com/googleapis/python-cloud-core")
7240 (synopsis "Google Cloud API client core library")
7241 (description "This library defines common helpers (e.g. base @code{Client}
7242classes) used by all of the @code{google-cloud-*} packages.")
7243 (license license:asl2.0)))
7244
7245(define-public python-google-cloud-storage
7246 (package
7247 (name "python-google-cloud-storage")
7248 (version "2.3.0")
7249 (source
7250 (origin
7251 (method url-fetch)
7252 (uri (pypi-uri "google-cloud-storage" version))
7253 (sha256
7254 (base32 "0nwg9ic29s70kpvi71gmjv1y4w5a3vc9gj6d16f8w8hpbvgb1jzl"))))
7255 (build-system python-build-system)
7256 (arguments
7257 `(#:phases
7258 (modify-phases %standard-phases
7259 (replace 'check
7260 (lambda* (#:key tests? #:allow-other-keys)
7261 (when tests?
7262 (for-each delete-file-recursively
7263 (list
7264 ;; The system tests fail to find test_utils.retry.
7265 "tests/system/"
7266 ;; Needs docker.
7267 "tests/conformance/"))
7268 (invoke "pytest")))))))
7269 (native-inputs
7270 (list python-pytest python-test-utils))
7271 (propagated-inputs
7272 (list python-google-api-core
7273 python-google-auth
7274 python-google-cloud-core
7275 python-google-resumable-media
7276 python-protobuf
7277 python-requests))
7278 (home-page "https://github.com/googleapis/python-storage")
7279 (synopsis "Google Cloud Storage API client library")
7280 (description "Google Cloud Storage allows you to store data on Google
7281infrastructure, and it can be used to distribute large data objects to users
7282via direct download. This package provides a Google Cloud Storage API client
7283library for Python.")
7284 (license license:asl2.0)))
7285
7286(define-public python-smart-open
7287 (package
7288 (name "python-smart-open")
7289 (version "6.0.0")
7290 (source
7291 (origin
7292 (method url-fetch)
7293 (uri (pypi-uri "smart_open" version))
7294 (sha256
7295 (base32 "1c12ilanx9hgpcc5chjkaqnx1hx14iazyindy7syvjhbdywhc0fn"))))
7296 (build-system python-build-system)
7297 (arguments
7298 `(#:tests? #false ;none included
7299 #:phases
7300 (modify-phases %standard-phases
7301 (replace 'check
7302 (lambda* (#:key tests? #:allow-other-keys)
7303 (when tests?
7304 (invoke "pytest")))))))
7305 (propagated-inputs
7306 (list python-azure-common
7307 python-azure-core
7308 python-azure-storage-blob
7309 python-boto3
7310 python-google-cloud-storage
7311 python-requests))
7312 (native-inputs
7313 (list python-flask
7314 python-flask-cors
7315 python-graphql-core
7316 python-moto
7317 python-paramiko
7318 python-pathlib2
7319 python-pytest
7320 python-pytest-rerunfailures
7321 python-responses))
7322 (home-page "https://github.com/piskvorky/smart_open")
7323 (synopsis "Utilities for streaming large files")
7324 (description
7325 "This package provides utilities for streaming large files (S3, HDFS,
7326GCS, Azure Blob Storage, gzip, bz2, etc.)")
7327 (license license:expat)))
7328
7329(define-public python-w3lib
7330 (package
7331 (name "python-w3lib")
7332 (version "1.22.0")
7333 (source
7334 (origin
7335 (method url-fetch)
7336 (uri (pypi-uri "w3lib" version))
7337 (patches (search-patches "python-w3lib-fix-test-failure.patch"))
7338 (sha256
7339 (base32
7340 "1pv02lvvmgz2qb61vz1jkjc04fgm4hpfvaj5zm4i3mjp64hd1mha"))))
7341 (build-system python-build-system)
7342 (arguments
7343 `(#:phases
7344 (modify-phases %standard-phases
7345 (replace 'check
7346 (lambda* (#:key tests? #:allow-other-keys)
7347 (when tests?
7348 (invoke "pytest")))))))
7349 (native-inputs
7350 (list python-pytest python-six))
7351 (home-page "https://github.com/scrapy/w3lib")
7352 (synopsis "Python library of web-related functions")
7353 (description
7354 "This is a Python library of web-related functions, such as: remove
7355comments, or tags from HTML snippets, extract base url from HTML snippets,
7356translate entities on HTML strings, among other things.")
7357 (license license:bsd-3)))
7358
7359(define-public python-webcolors
7360 (package
7361 (name "python-webcolors")
7362 (version "1.11.1")
7363 (source
7364 (origin
7365 (method url-fetch)
7366 (uri (pypi-uri "webcolors" version))
7367 (sha256
7368 (base32 "1rkda75h2p65zx6r84c9mjavn4xpviqvqrklvdvcklapd5in1wvn"))))
7369 (build-system python-build-system)
7370 (arguments
7371 `(#:phases
7372 (modify-phases %standard-phases
7373 (replace 'check
7374 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
7375 (when tests?
7376 (add-installed-pythonpath inputs outputs)
7377 (invoke "pytest")))))))
7378 (native-inputs
7379 (list python-pytest))
7380 (home-page "https://github.com/ubernostrum/webcolors")
7381 (synopsis "HTML/CSS color definitions library")
7382 (description "@code{python-webcolors} is a module for working with
7383HTML/CSS color definitions. Normalizing and converting between the following
7384formats is supported.
7385@itemize
7386@item Specification-defined color names
7387@item Six-digit hexadecimal
7388@item Three-digit hexadecimal
7389@item Integer rgb() triplet
7390@item Percentage rgb() triplet
7391@end itemize
7392Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
7393can be handled by the @code{colorsys} module in the Python standard library.")
7394 (license license:bsd-3)))
7395
7396(define-public python-woob
7397 (package
7398 (name "python-woob")
7399 (version "3.0")
7400 (source
7401 (origin
7402 (method url-fetch)
7403 (uri (pypi-uri "woob" version))
7404 (sha256
7405 (base32 "09hpxy5zhn2b8li0xjf3zd7s46lawb0315p5mdcsci3bj3s4v1j7"))))
7406 (build-system python-build-system)
7407 ;; A small number of tests for optional applications fails due to missing
7408 ;; inputs.
7409 (arguments `(#:tests? #f))
7410 (propagated-inputs
7411 (list python-babel
7412 python-colorama
7413 python-cssselect
7414 python-dateutil
7415 python-feedparser
7416 python-html2text
7417 python-lxml
7418 python-pillow
7419 python-prettytable
7420 python-pyqt
7421 python-pyyaml
7422 python-requests
7423 python-six
7424 python-unidecode))
7425 (native-inputs
7426 (list python-coverage python-flake8 python-nose python-selenium
7427 python-xunitparser))
7428 (home-page "https://woob.tech/")
7429 (synopsis "Woob, Web Outside Of Browsers")
7430 (description "Woob is a collection of applications able to interact with
7431websites, without requiring the user to open them in a browser. It also
7432provides well-defined APIs to talk to websites lacking one.")
7433 (license license:lgpl3+)))
7434
7435(define-public python-flask-combo-jsonapi
7436 (package
7437 (name "python-flask-combo-jsonapi")
7438 (version "1.1.0")
7439 (source
7440 (origin
7441 (method git-fetch)
7442 (uri (git-reference
7443 (url "https://github.com/AdCombo/flask-combo-jsonapi")
7444 (commit version)))
7445 (file-name (git-file-name name version))
7446 (sha256
7447 (base32 "07fhcjiyif80z1vyh35za29sqx1mmqh568jrbrrs675j4a797sj1"))))
7448 (build-system python-build-system)
7449 (arguments
7450 '(#:phases
7451 (modify-phases %standard-phases
7452 (add-after 'unpack 'loosen-requirements
7453 (lambda _
7454 ;; Don't pin specific versions of dependencies.
7455 (substitute* "requirements.txt"
7456 (("^sqlalchemy[=<>].*") "sqlalchemy\n")
7457 (("^marshmallow[=<>].*") "marshmallow\n")
7458 (("^Flask[=<>].*") "Flask\n"))))
7459 (replace 'check
7460 (lambda _
7461 (invoke "pytest" "-vv" "-k"
7462 ;; The following test fails for unknown reasons (see:
7463 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
7464 "not test_get_list_with_simple_filter_\
7465relationship_custom_qs_api"))))))
7466 (propagated-inputs
7467 (list python-flask
7468 python-marshmallow
7469 python-marshmallow-jsonapi
7470 python-simplejson
7471 python-sqlalchemy
7472 python-apispec
7473 python-simplejson
7474 python-six))
7475 (native-inputs
7476 (list python-coverage
7477 python-coveralls
7478 python-pytest
7479 python-pytest-runner))
7480 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
7481 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
7482 (description
7483 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web APIs
7484compliant with the @uref{https://jsonapi.org, JSON:API 1.0} specification.
7485
7486It tries to combine the power of Flask-Restless with the flexibility of
7487Flask-RESTful to quickly build APIs that fit the complexity of existing
7488real-life projects with legacy data and diverse storage providers.")
7489 (license license:expat)))
7490
7491(define-public python-mwparserfromhell
7492 (package
7493 (name "python-mwparserfromhell")
7494 (version "0.6.3")
7495 (source
7496 (origin
7497 (method url-fetch)
7498 (uri (pypi-uri "mwparserfromhell" version))
7499 (sha256
7500 (base32 "0zh9zaqbac18s7mivqk8am9xw97lfkgcj9hhxj0d4208pkqpkmqs"))))
7501 (build-system python-build-system)
7502 (native-inputs
7503 (list python-pytest python-pytest-runner))
7504 (home-page "https://github.com/earwig/mwparserfromhell")
7505 (synopsis "Python parser for MediaWiki wikicode")
7506 (description
7507 "The MediaWiki Parser From Hell is a python library package that provides
7508a parser for MediaWiki.
7509
7510It exposes parses as normal string objects with additional methods giving
7511access to the special Wikicode features it contains (hyperlinks, tags,
7512templates…). The parser doesn't interpolate strings at all, it remains at a
7513purely formal level.
7514
7515Full documentation may be found at
7516@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
7517 (license license:expat)))
7518
7519(define-public python-tweepy
7520 (package
7521 (name "python-tweepy")
7522 (version "4.4.0")
7523 (source
7524 (origin
7525 (method git-fetch)
7526 (uri
7527 (git-reference
7528 (url "https://github.com/tweepy/tweepy")
7529 (commit (string-append "v" version))))
7530 (file-name (git-file-name name version))
7531 (sha256
7532 (base32
7533 "0jl3j20iqvzqqw5q5ldval5wrc2pdx94zff3b6b87j51yjx3qjhr"))))
7534 (build-system python-build-system)
7535 (arguments
7536 `(#:phases
7537 (modify-phases %standard-phases
7538 (replace 'check
7539 (lambda* (#:key tests? #:allow-other-keys)
7540 (when tests?
7541 (invoke "python" "-m" "unittest" "discover" "tests")))))))
7542 (propagated-inputs
7543 (list python-aiohttp python-requests python-requests-oauthlib))
7544 (native-inputs
7545 (list python-vcrpy))
7546 (home-page "https://www.tweepy.org/")
7547 (synopsis "Twitter library for Python")
7548 (description "This package provides @code{Tweepy}, an easy-to-use Python
7549library for accessing the Twitter API.")
7550 (license license:expat)))
7551
7552(define-public python-quart
7553 (package
7554 (name "python-quart")
7555 (version "0.17.0")
7556 (source
7557 (origin
7558 (method url-fetch)
7559 (uri (pypi-uri "Quart" version))
7560 (sha256
7561 (base32 "0h4n2dwzmqifya1razp9s7ppr4ra23ljac9v7sl039rzp3c17wic"))))
7562 (build-system python-build-system)
7563 (propagated-inputs
7564 (list hypercorn
7565 python-aiofiles
7566 python-blinker
7567 python-click
7568 python-itsdangerous
7569 python-jinja2
7570 python-markupsafe
7571 python-toml
7572 python-werkzeug))
7573 (home-page "https://gitlab.com/pgjones/quart/")
7574 (synopsis "Python ASGI web microframework with the same API as Flask")
7575 (description
7576 "This package provides a Python ASGI web microframework with the same API
7577as Flask.")
7578 (license license:expat)))
7579
7580(define-public python-ajsonrpc
7581 (package
7582 (name "python-ajsonrpc")
7583 (version "1.2.0")
7584 (source
7585 (origin
7586 (method url-fetch)
7587 (uri (pypi-uri "ajsonrpc" version))
7588 (sha256
7589 (base32 "17x1a4r4l428mhwn53abki9gzdzq3halyr4lj48fw3dzy0caq6vr"))))
7590 (build-system python-build-system)
7591 (propagated-inputs
7592 (list python-quart
7593 python-sanic
7594 python-tornado))
7595 (home-page "https://github.com/pavlov99/ajsonrpc")
7596 (synopsis "Async JSON-RPC 2.0 protocol and server")
7597 (description
7598 "This package provides a Python JSON-RPC 2.0 protocol and server powered
7599by asyncio.")
7600 (license license:expat)))
7601
7602(define-public python-protego
7603 (package
7604 (name "python-protego")
7605 (version "0.2.1")
7606 (source
7607 (origin
7608 (method url-fetch)
7609 (uri (pypi-uri "Protego" version))
7610 (sha256
7611 (base32 "1wigcjyhz8zbk562zhgfbkm733dcn65j1swzvki79dys0i1nsrnz"))))
7612 (build-system python-build-system)
7613 (arguments
7614 `(#:phases
7615 (modify-phases %standard-phases
7616 (replace 'check
7617 (lambda* (#:key tests? #:allow-other-keys)
7618 (when tests?
7619 (invoke "pytest")))))))
7620 (propagated-inputs (list python-six))
7621 (native-inputs (list python-pytest))
7622 (home-page "https://github.com/scrapy/protego")
7623 (synopsis
7624 "Pure-Python robots.txt parser with support for modern conventions")
7625 (description
7626 "Pure-Python robots.txt parser with support for modern conventions.")
7627 (license license:bsd-3)))
7628
7629(define-public python-parsel
7630 (package
7631 (name "python-parsel")
7632 (version "1.6.0")
7633 (source
7634 (origin
7635 (method url-fetch)
7636 (uri (pypi-uri "parsel" version))
7637 (sha256
7638 (base32 "0yawf9r3r863lwxj0n89i7h3n8xjbsl5b7n6xg76r68scl5yzvvh"))))
7639 (build-system python-build-system)
7640 (propagated-inputs
7641 (list python-cssselect
7642 python-lxml
7643 python-six
7644 python-w3lib))
7645 (native-inputs
7646 (list python-pytest python-pytest-runner))
7647 (home-page "https://github.com/scrapy/parsel")
7648 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
7649 (description "Parsel is a library to extract and remove data from
7650HTML and XML using XPath and CSS selectors, optionally combined with
7651regular expressions.")
7652 (license license:bsd-3)))
7653
7654(define-public python-scrapy
7655 (package
7656 (name "python-scrapy")
7657 (version "2.6.1")
7658 (source
7659 (origin
7660 (method url-fetch)
7661 (uri (pypi-uri "Scrapy" version))
7662 (sha256
7663 (base32 "09rqalbwcz9ix8h0992mzjs50sssxsmmh8w9abkrqchgknjmbzan"))))
7664 (build-system python-build-system)
7665 (arguments
7666 `(#:phases
7667 (modify-phases %standard-phases
7668 (replace 'check
7669 (lambda* (#:key tests? #:allow-other-keys)
7670 (when tests?
7671 (invoke "pytest"
7672 "-n" (number->string (parallel-job-count))
7673 ;; These tests fail when run in parallel (see:
7674 ;; https://github.com/scrapy/scrapy/issues/5502).
7675 "--ignore" "tests/test_engine.py"
7676 "--ignore" "tests/test_engine_stop_download_bytes.py"
7677 "--ignore" "tests/test_engine_stop_download_headers.py"
7678 ;; This test require network access.
7679 "--ignore" "tests/test_command_check.py"
7680 "-k"
7681 (string-append
7682 ;; The followin tests fail for unknown reasons.
7683 "not test_server_set_cookie_domain_suffix_public_private"
7684 " and not test_user_set_cookie_domain_suffix_public_private"
7685 " and not test_pformat")
7686 "tests")))))))
7687 (propagated-inputs
7688 (list python-botocore ; Optional: For S3FeedStorage class.
7689 python-cryptography
7690 python-cssselect
7691 python-itemadapter
7692 python-itemloaders
7693 python-lxml
7694 python-parsel
7695 python-protego
7696 python-pydispatcher
7697 python-pyopenssl
7698 python-queuelib
7699 python-service-identity
7700 python-setuptools
7701 python-tldextract
7702 python-twisted
7703 python-w3lib
7704 python-zope-interface))
7705 (native-inputs
7706 (list python-pytest
7707 python-pytest-xdist
7708 python-pyftpdlib
7709 python-sybil
7710 python-testfixtures
7711 python-uvloop))
7712 (home-page "https://scrapy.org")
7713 (synopsis "High-level Web crawling and Web scraping framework")
7714 (description "Scrapy is a fast high-level web crawling and web
7715scraping framework, used to crawl websites and extract structured data
7716from their pages. It can be used for a wide range of purposes, from data
7717mining to monitoring and automated testing.")
7718 (license license:bsd-3)))
7719
7720(define-public python-jstyleson
7721 (package
7722 (name "python-jstyleson")
7723 (version "0.0.2")
7724 (source
7725 (origin
7726 (method url-fetch)
7727 (uri (pypi-uri "jstyleson" version))
7728 (sha256
7729 (base32 "13ihw6jqwkg3ai4xb83kw39pvh73b2wg6ld3wvj5jaasn7rh6038"))))
7730 (build-system python-build-system)
7731 (arguments (list #:tests? #f)) ;no tests in pypi release
7732 (home-page "https://github.com/linjackson78/jstyleson")
7733 (synopsis "JSON parser supporting js-style comments")
7734 (description "@code{jstyleson} is a Python library to parse JSON.
7735Contrary to the standard Python @code{json} library, it understands js-style
7736comments. Trailing comma is also supported.")
7737 (license license:expat)))
7738
7739(define-public python-html-text
7740 (package
7741 (name "python-html-text")
7742 (version "0.5.2")
7743 (source
7744 (origin
7745 (method url-fetch)
7746 (uri (pypi-uri "html_text" version))
7747 (sha256
7748 (base32 "1v9x171l3bmyayc1144nrkn9410lp4lhlrrjii54j7b5f2xipmmg"))))
7749 (build-system python-build-system)
7750 (native-inputs (list python-pytest))
7751 (propagated-inputs (list python-lxml))
7752 (home-page "https://github.com/TeamHG-Memex/html-text")
7753 (synopsis "Extract text from HTML")
7754 (description "HTML to Text is a Python library for extract text from HTML.
7755Contrary to other solution such as LXML or Beautiful Soup, the text extracted
7756with @code{html_text} does not contain elements such as JavaScript or inline
7757styles not normally visible to users. It also normalizes white space
7758characters in a smarter, more visually pleasing style.")
7759 (license license:expat)))
7760
7761(define-public python-mf2py
7762 (package
7763 (name "python-mf2py")
7764 (version "1.1.2")
7765 (source (origin
7766 (method git-fetch)
7767 (uri (git-reference
7768 (url "https://github.com/microformats/mf2py")
7769 (commit version)))
7770 (file-name (git-file-name name version))
7771 (sha256
7772 (base32
7773 "00pzfc5sl6ywlcr6f2k37n3f2bb7w488p2k95ixzjwx6w3yh747n"))))
7774 (build-system python-build-system)
7775 (arguments
7776 (list
7777 #:phases
7778 #~(modify-phases %standard-phases
7779 (replace 'check
7780 (lambda* (#:key tests? #:allow-other-keys)
7781 (when tests?
7782 (invoke "pytest" "-vv" "test")))))))
7783 (native-inputs (list python-pytest))
7784 (propagated-inputs
7785 (list python-beautifulsoup4 python-html5lib python-requests))
7786 (home-page "https://github.com/microformats/mf2py")
7787 (synopsis "Python Microformats2 parser")
7788 (description "This Python library provides a Microformats2 parser
7789implementing the full Microformats2 (mf2) specification, including backward
7790compatibility with Microformats1 (mf1).")
7791 (license license:expat)))
7792
7793(define-public python-extruct
7794 (package
7795 (name "python-extruct")
7796 (version "0.13.0")
7797 (source (origin
7798 (method git-fetch) ;for tests
7799 (uri (git-reference
7800 (url "https://github.com/scrapinghub/extruct")
7801 (commit (string-append "v" version))))
7802 (file-name (git-file-name name version))
7803 (sha256
7804 (base32
7805 "075zldf3dqcc429z1vk2ngbmv034bnlyk6arh3rh30jbsvz9pzl5"))))
7806 (build-system python-build-system)
7807 (arguments
7808 (list
7809 #:phases
7810 #~(modify-phases %standard-phases
7811 (replace 'check
7812 (lambda* (#:key tests? #:allow-other-keys)
7813 (when tests?
7814 (invoke "pytest" "-vv" "tests")))))))
7815 (native-inputs (list python-pytest))
7816 (propagated-inputs
7817 (list python-html-text
7818 python-jstyleson
7819 python-lxml
7820 python-mf2py
7821 python-pyrdfa3
7822 python-rdflib
7823 python-rdflib-jsonld
7824 python-w3lib))
7825 (home-page "https://github.com/scrapinghub/extruct")
7826 (synopsis "Extract embedded metadata from HTML markup")
7827 (description "@code{extruct} is a Python library for extracting embedded
7828metadata from HTML markup. Currently, extruct supports:
7829@itemize
7830@item W3C's HTML Microdata
7831@item embedded JSON-LD
7832@item Microformat via mf2py
7833@item Facebook's Open Graph
7834@item (experimental) RDFa via rdflib
7835@item Dublin Core Metadata (DC-HTML-2003)
7836@end itemize")
7837 (license license:bsd-3)))
7838
7839(define-public python-wadllib
7840 (package
7841 (name "python-wadllib")
7842 (version "1.3.6")
7843 (source
7844 (origin
7845 (method url-fetch)
7846 (uri (pypi-uri "wadllib" version))
7847 (sha256
7848 (base32 "1z65crvdsjxh9nahz1g6q021ijmv85ixmq88l96d61qh5imavndc"))))
7849 (build-system python-build-system)
7850 (propagated-inputs (list python-lazr-uri))
7851 (home-page "https://launchpad.net/wadllib")
7852 (synopsis "Web Application Description Language (WADL) navigation library")
7853 (description "The @code{wadllib} Python library allows navigating HTTP
7854resources using Web Application Description Language (WADL) files as guides.")
7855 (license license:lgpl3)))
7856
7857(define-public python-zeep
7858 (package
7859 (name "python-zeep")
7860 (version "4.1.0")
7861 (source
7862 (origin
7863 (method url-fetch)
7864 (uri (pypi-uri "zeep" version))
7865 (patches
7866 (search-patches "python-zeep-Fix-pytest_httpx-test-cases.patch"))
7867 (sha256
7868 (base32 "1ranr4hkjd2kbbhxa3is1qlgkankj3sml5gla6bqs0kbvpmg4rsq"))))
7869 (build-system python-build-system)
7870 (arguments
7871 `(#:phases
7872 (modify-phases %standard-phases
7873 (replace 'check
7874 (lambda* (#:key tests? #:allow-other-keys)
7875 (when tests?
7876 (setenv "HOME" (getcwd)) ; one test requires write access
7877 (invoke "pytest" "-vv")))))))
7878 (propagated-inputs
7879 (list python-attrs
7880 python-cached-property
7881 python-isodate
7882 python-lxml
7883 python-platformdirs
7884 python-pytz
7885 python-requests
7886 python-requests-file
7887 python-requests-toolbelt))
7888 (native-inputs
7889 (list python-aiohttp
7890 python-aioresponses
7891 python-freezegun
7892 python-mock
7893 python-pretend
7894 python-pytest
7895 python-pytest-asyncio
7896 python-pytest-cov
7897 python-pytest-httpx
7898 python-requests-mock))
7899 (home-page "https://docs.python-zeep.org/en/stable/")
7900 (synopsis "Python SOAP client based on lxml / requests")
7901 (description "Zeep is a Python SOAP client. Highlights:
7902
7903@itemize
7904@item Build on top of @code{lxml} and @code{requests}.
7905@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
7906@item Support for WS-Addressing headers.
7907@item Support for WSSE (UserNameToken / x.509 signing).
7908@item Support for @code{asyncio} via @code{httpx}.
7909@item Experimental support for XOP messages.
7910@end itemize")
7911 (license license:expat)))
7912
7913(define-public python-http-client
7914 (package
7915 (name "python-http-client")
7916 (version "3.3.7")
7917 (home-page "https://github.com/sendgrid/python-http-client")
7918 (source (origin
7919 (method git-fetch)
7920 (uri (git-reference
7921 (url home-page)
7922 (commit version)))
7923 (file-name (git-file-name name version))
7924 (sha256
7925 (base32
7926 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))
7927 (snippet #~(begin
7928 (use-modules (guix build utils))
7929 (delete-file "tests/profile.py")))))
7930 (build-system python-build-system)
7931 (synopsis "HTTP REST client for Python")
7932 (description
7933 "This package provides access to any RESTful or RESTful-like API.")
7934 (license license:expat)))
7935
7936(define-public python-sendgrid
7937 (package
7938 (name "python-sendgrid")
7939 (version "6.9.7")
7940 (home-page "https://github.com/sendgrid/sendgrid-python/")
7941 (source (origin
7942 (method git-fetch)
7943 (uri (git-reference
7944 (url home-page)
7945 (commit version)))
7946 (file-name (git-file-name name version))
7947 (sha256
7948 (base32
7949 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
7950 (build-system python-build-system)
7951 (arguments
7952 (list #:tests? #f)) ;241/340 tests fail due to attempted web access
7953 (propagated-inputs (list python-http-client python-starkbank-ecdsa))
7954 (synopsis "SendGrid API library for Python")
7955 (description
7956 "The @code{sendgrid} Python library allows access to the
7957SendGrid Web API v3. Version 3+ of the library provides full support for all
7958SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
7959 (license license:expat)))
7960
7961(define-public python-starlette
7962 (package
7963 (name "python-starlette")
7964 (version "0.20.4")
7965 (source (origin
7966 (method url-fetch)
7967 (uri (pypi-uri "starlette" version))
7968 (sha256
7969 (base32
7970 "112hmwk4fh4dl21nlr2xd37h43xzxpjxfnic7v7fz3wr5w9g7z22"))))
7971 (build-system python-build-system)
7972 (propagated-inputs (list python-anyio
7973 python-typing-extensions
7974 ;; [all] extra dependencies:
7975 python-itsdangerous
7976 python-jinja2
7977 python-multipart
7978 python-pyyaml
7979 python-requests))
7980 (home-page "https://github.com/encode/starlette")
7981 (synopsis "Little ASGI library")
7982 (description
7983 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
7984Interface) framework/toolkit for building async web services in Python.")
7985 (license license:bsd-3)))
7986
7987(define-public python-pyactiveresource
7988 (package
7989 (name "python-pyactiveresource")
7990 (version "2.2.2")
7991 (source (origin
7992 (method url-fetch)
7993 (uri (pypi-uri "pyactiveresource" version))
7994 (sha256
7995 (base32
7996 "1n7xvzh1j8fxal0gx9bgg1ayrp3q9mb1a2vb12d6s86wa93880rg"))))
7997 (build-system python-build-system)
7998 (native-inputs (list python-dateutil python-pyyaml))
7999 (propagated-inputs (list python-six))
8000 (home-page "https://github.com/Shopify/pyactiveresource/")
8001 (synopsis "ActiveResource for Python")
8002 (description "This package provides a Python port of the ActiveResource
8003project.
8004
8005Active Resource attempts to provide a coherent wrapper object-relational
8006mapping for REST web services. It follows the same philosophy as Active
8007Record, in that one of its prime aims is to reduce the amount of code needed
8008to map to these resources. This is made possible by relying on a number of
8009code- and protocol-based conventions that make it easy for Active Resource to
8010infer complex relations and structures.")
8011 (license license:expat)))
8012
8013(define-public python-shopifyapi
8014 (package
8015 (name "python-shopifyapi")
8016 (version "12.0.0")
8017 (source (origin
8018 (method url-fetch)
8019 (uri (pypi-uri "ShopifyAPI" version))
8020 (sha256
8021 (base32
8022 "03np9mkycqbw5l5vk0srmq353q3vmbycbbarzv0cg3z703p81gnb"))))
8023 (build-system python-build-system)
8024 (native-inputs (list python-mock))
8025 (propagated-inputs (list python-pyactiveresource python-pyjwt
8026 python-pyyaml python-six))
8027 (home-page "https://github.com/Shopify/shopify_python_api")
8028 (synopsis "Shopify API for Python")
8029 (description "This package provides the Shopify API for Python.
8030
8031The ShopifyAPI library allows Python developers to programmatically access the
8032admin section of stores using an ActiveResource-like interface similar the
8033ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
8034list, create, update, or delete resources (e.g. Order, Product, Collection).")
8035 (license license:expat)))
8036
8037(define-public python-whatthepatch
8038 (package
8039 (name "python-whatthepatch")
8040 (version "1.0.2")
8041 (source (origin
8042 (method url-fetch)
8043 (uri (pypi-uri "whatthepatch" version))
8044 (sha256
8045 (base32
8046 "17zspm5sxhvggkdhwq4s0fzf4mkc825xshn734g2j2iy2xcylh65"))))
8047 (build-system python-build-system)
8048 (home-page "https://github.com/cscorley/whatthepatch")
8049 (synopsis "Patch parsing and application")
8050 (description
8051 "This package provides a library to parse and apply patches.")
8052 (license license:expat)))
8053
8054(define-public python-grid5000
8055 (package
8056 (name "python-grid5000")
8057 (version "1.2.3")
8058 (source (origin
8059 (method git-fetch)
8060 (uri (git-reference
8061 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
8062 (commit (string-append "v" version))))
8063 (file-name (git-file-name name version))
8064 (sha256
8065 "097pm8b68ihk29xz9zv29b1x0bhgjb4lfj8zxk2grbsh7wr9dipg")))
8066 (build-system python-build-system)
8067 (native-inputs (list python-wheel))
8068 (propagated-inputs (list python-requests python-ipython python-pyyaml))
8069 (arguments
8070 (list #:tests? #f)) ; No tests.
8071 (home-page "https://pypi.org/project/python-grid5000/")
8072 (synopsis "Grid5000 python client")
8073 (description
8074 "python-grid5000 is a python package wrapping the Grid5000 REST API.
8075You can use it as a library in your python project or you can explore the
8076Grid5000 resources interactively using the embedded shell.")
8077 (license license:gpl3+)))
8078
8079(define-public python-enoslib
8080 (package
8081 (name "python-enoslib")
8082 (version "8.0.1")
8083 (source (origin
8084 (method git-fetch)
8085 (uri (git-reference
8086 (url "https://gitlab.inria.fr/discovery/enoslib")
8087 (commit (string-append "v" version))))
8088 (file-name (git-file-name name version))
8089 (sha256
8090 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
8091 (build-system python-build-system)
8092 (native-inputs (list python-wheel python-pytest python-ddt
8093 python-freezegun))
8094 (propagated-inputs (list ansible
8095 python-cryptography
8096 python-grid5000
8097 python-jsonschema
8098 python-netaddr
8099 python-packaging
8100 python-requests
8101 python-rich
8102 python-sshtunnel
8103 python-pytz))
8104 (arguments
8105 '(#:phases (modify-phases %standard-phases
8106 (replace 'check
8107 (lambda* (#:key tests? #:allow-other-keys)
8108 (when tests?
8109 ;; Otherwise Ansible fails to create its config directory.
8110 (setenv "HOME" "/tmp")
8111 ;; Ignoring the tests requiring an extra dependency (iotlabcli)
8112 (invoke "pytest" "enoslib/tests/unit"
8113 "--ignore"
8114 "enoslib/tests/unit/infra/test_utils.py"
8115 "--ignore-glob"
8116 "enoslib/tests/unit/infra/enos_iotlab/*"))))
8117 ;; Disable the sanity check, which fails with the following error:
8118 ;;
8119 ;; ContextualVersionConflict(rich 12.4.1
8120 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
8121 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
8122 ;;
8123 ;; The optional jupyter dependency of rich isn't critical for
8124 ;; EnOSlib to work
8125 (delete 'sanity-check))))
8126
8127 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
8128 (synopsis "Deploy distributed testbeds on a variety of platforms")
8129 (description
8130 "EnOSlib is a library to build experimental frameworks on various
8131scientific testbeds. It lets you deploy networks of machines on actual
8132hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
8133 (license license:gpl3+)))