projects/guix·blob version-1.5.0 · refs

13448 lines · 486.5 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015-2025 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Christopher Baines <[email protected]>
5;;; Copyright © 2017 Muriithi Frederick Muriuki <[email protected]>
6;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
7;;; Copyright © 2013, 2014, 2015, 2016, 2020, 2023 Andreas Enge <[email protected]>
8;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
9;;; Copyright © 2015-2025 Ricardo Wurmus <[email protected]>
10;;; Copyright © 2017, 2021 Roel Janssen <[email protected]>
11;;; Copyright © 2016, 2017, 2020 Julien Lepiller <[email protected]>
12;;; Copyright © 2016, 2017 Nikita <[email protected]>
13;;; Copyright © 2014, 2017, 2021 Eric Bavier <[email protected]>
14;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
15;;; Copyright © 2015 Cyril Roelandt <[email protected]>
16;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
17;;; Copyright © 2016, 2019, 2022, 2025 Hartmut Goebel <[email protected]>
18;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <[email protected]>
19;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
20;;; Copyright © 2015, 2016 Christine Lemmer-Webber <[email protected]>
21;;; Copyright © 2017 Adriano Peluso <[email protected]>
22;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
23;;; Copyright © 2016 David Craven <[email protected]>
24;;; Copyright © 2017 Oleg Pykhalov <[email protected]>
25;;; Copyright © 2015, 2016 David Thompson <[email protected]>
26;;; Copyright © 2017 Mark Meyer <[email protected]>
27;;; Copyright © 2018 Clément Lassieur <[email protected]>
28;;; Copyright © 2018 Tomáš Čech <[email protected]>
29;;; Copyright © 2018, 2019, 2021, 2024 Nicolas Goaziou <[email protected]>
30;;; Copyright © 2018 Mathieu Othacehe <[email protected]>
31;;; Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
32;;; Copyright © 2018 swedebugia <[email protected]>
33;;; Copyright © 2019 Vagrant Cascadian <[email protected]>
34;;; Copyright © 2019, 2023 Brendan Tildesley <[email protected]>
35;;; Copyright © 2019 Pierre Langlois <[email protected]>
36;;; Copyright © 2019, 2020 Tanguy Le Carrour <[email protected]>
37;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
38;;; Copyright © 2020 Josh Marshall <[email protected]>
39;;; Copyright © 2020 Evan Straw <[email protected]>
40;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
41;;; Copyright © 2020 Holger Peters <[email protected]>
42;;; Copyright © 2020 Noisytoot <[email protected]>
43;;; Copyright © 2020 Edouard Klein <[email protected]>
44;;; Copyright © 2020, 2021, 2022, 2023, 2025 Vinicius Monego <[email protected]>
45;;; Copyright © 2020 Konrad Hinsen <[email protected]>
46;;; Copyright © 2020, 2022, 2024 Giacomo Leidi <[email protected]>
47;;; Copyright © 2020 Raghav Gururajan <[email protected]>
48;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
49;;; Copyright © 2021 Greg Hogan <[email protected]>
50;;; Copyright © 2021 Maxime Devos <[email protected]>
51;;; Copyright © 2021 Pradana Aumars <[email protected]>
52;;; Copyright © 2021, 2022, 2024 Arun Isaac <[email protected]>
53;;; Copyright © 2021-2022, 2024-2025 jgart <[email protected]>
54;;; Copyright © 2021 Alice Brenon <[email protected]>
55;;; Copyright © 2021 Mekeor Melire <[email protected]>
56;;; Copyright © 2022 John Kehayias <[email protected]>
57;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email protected]>
58;;; Copyright © 2022, 2023, 2025 Felix Gruber <[email protected]>
59;;; Copyright © 2022 Peter Polidoro <[email protected]>
60;;; Copyright © 2022 Antero Mejr <[email protected]>
61;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
62;;; Copyright © 2022, 2025 Nicolas Graves <[email protected]>
63;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
64;;; Copyright © 2022 msimonin <[email protected]>
65;;; Copyright © 2022 Michael Rohleder <[email protected]>
66;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
67;;; Copyright © 2023 dan <[email protected]>
68;;; Copyright © 2023 John Kehayias <[email protected]>
69;;; Copyright © 2023 Juliana Sims <[email protected]>
70;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
71;;; Copyright © 2024 Fabio Natali <[email protected]>
72;;; Copyright © 2024 Steve George <[email protected]>
73;;; Copyright © 2024 Troy Figiel <[email protected]>
74;;; Copyright © 2024, 2025 Sharlatan Hellseher <[email protected]>
75;;; Copyright © 2024 normally_js <[email protected]>
76;;; Copyright © 2024 Markku Korkeala <[email protected]>
77;;; Copyright © 2024 Nguyễn Gia Phong <[email protected]>
78;;; Copyright © 2024 Zheng Junjie <[email protected]>
79;;; Copyright © 2024 Spencer King <[email protected]>
80;;; Copyright © 2024 Attila Lendvai <[email protected]>
81;;; Copyright © 2025 Daniel Ziltener <[email protected]>
82;;; Copyright © 2025 gemmaro <[email protected]>
83;;; Copyright © 2025 Sergio Pastor Pérez <[email protected]>
84;;; Copyright © 2025 Jake Forster <[email protected]>
85;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
86;;; Copyright © 2025 Hugo Buddelmeijer <[email protected]>
87;;; Copyright © 2025 Artur Wroblewski <[email protected]>
88;;; Copyright © 2025 Allan Adair <[email protected]>
89;;;
90;;; This file is part of GNU Guix.
91;;;
92;;; GNU Guix is free software; you can redistribute it and/or modify it
93;;; under the terms of the GNU General Public License as published by
94;;; the Free Software Foundation; either version 3 of the License, or (at
95;;; your option) any later version.
96;;;
97;;; GNU Guix is distributed in the hope that it will be useful, but
98;;; WITHOUT ANY WARRANTY; without even the implied warranty of
99;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
100;;; GNU General Public License for more details.
101;;;
102;;; You should have received a copy of the GNU General Public License
103;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
104
105(define-module (gnu packages python-web)
106 #:use-module ((guix licenses) #:prefix license:)
107 #:use-module (guix build-system cargo)
108 #:use-module (guix build-system copy)
109 #:use-module (guix build-system pyproject)
110 #:use-module (guix build-system python)
111 #:use-module (guix deprecation)
112 #:use-module (guix download)
113 #:use-module (guix gexp)
114 #:use-module (guix git-download)
115 #:use-module (guix packages)
116 #:use-module (guix utils)
117 #:use-module (gnu packages admin)
118 #:use-module (gnu packages adns)
119 #:use-module (gnu packages base)
120 #:use-module (gnu packages bash)
121 #:use-module (gnu packages nss)
122 #:use-module (gnu packages check)
123 #:use-module (gnu packages cmake)
124 #:use-module (gnu packages compression)
125 #:use-module (gnu packages curl)
126 #:use-module (gnu packages databases)
127 #:use-module (gnu packages django)
128 #:use-module (gnu packages freedesktop)
129 #:use-module (gnu packages glib)
130 #:use-module (gnu packages gnupg)
131 #:use-module (gnu packages graphviz)
132 #:use-module (gnu packages groff)
133 #:use-module (gnu packages iso-codes)
134 #:use-module (gnu packages libevent)
135 #:use-module (gnu packages libffi)
136 #:use-module (gnu packages libidn)
137 #:use-module (gnu packages linux)
138 #:use-module (gnu packages lsof)
139 #:use-module (gnu packages node)
140 #:use-module (gnu packages openstack)
141 #:use-module (gnu packages pcre)
142 #:use-module (gnu packages pkg-config)
143 #:use-module (gnu packages protobuf)
144 #:use-module (gnu packages python)
145 #:use-module (gnu packages python-build)
146 #:use-module (gnu packages python-check)
147 #:use-module (gnu packages python-compression)
148 #:use-module (gnu packages python-crypto)
149 #:use-module (gnu packages python-science)
150 #:use-module (gnu packages python-xyz)
151 #:use-module (gnu packages qt)
152 #:use-module (gnu packages rdf)
153 #:use-module (gnu packages rpc)
154 #:use-module (gnu packages rust)
155 #:use-module (gnu packages rust-apps)
156 #:use-module (gnu packages serialization)
157 #:use-module (gnu packages sphinx)
158 #:use-module (gnu packages texinfo)
159 #:use-module (gnu packages time)
160 #:use-module (gnu packages tls)
161 #:use-module (gnu packages version-control)
162 #:use-module (gnu packages web)
163 #:use-module (gnu packages xml)
164 #:use-module (gnu packages)
165 #:use-module (srfi srfi-1))
166
167(define-public python-aiocoap
168 (package
169 (name "python-aiocoap")
170 (version "0.4.14")
171 (source
172 (origin
173 (method git-fetch) ; tests miss data and module files in PyPI release
174 (uri (git-reference
175 (url "https://github.com/chrysn/aiocoap")
176 (commit version)))
177 (file-name (git-file-name name version))
178 (sha256
179 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
180 (build-system pyproject-build-system)
181 (arguments
182 (list
183 #:test-flags
184 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
185 ;; 8683, 0, 0): address already in use
186 #~(list "--ignore=tests/test_server.py"
187 "-k" (string-join
188 ;; TypeError: can only concatenate str (not "NoneType") to
189 ;; str
190 (list "not test_options"
191 "test_uri_parser"
192 "test_help" ; returned non-zero exit status 1.
193 "test_routing" ; address already in use
194 "test_tls")
195 " and not "))))
196 (native-inputs
197 (list openssl ;for tests/test_tls.py
198 python-pytest
199 python-setuptools
200 python-wheel))
201 (propagated-inputs
202 (list ;; python-cbor-diag
203 python-cbor2
204 python-cryptography
205 ;; python-dtlssocket
206 python-filelock
207 ;; python-ge25519
208 python-pygments
209 python-termcolor
210 python-websockets))
211 (home-page "https://github.com/chrysn/aiocoap")
212 (synopsis "Python CoAP library")
213 (description
214 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
215Constrained Application Protocol}, http://coap.space/}. It facilitates
216writing applications that talk to network enabled embedded
217@acronym{IoT,Internet of Things} devices.")
218 (license license:expat)))
219
220(define-public python-anaconda-client
221 (package
222 (name "python-anaconda-client")
223 (version "1.13.1")
224 (source
225 (origin
226 (method git-fetch)
227 (uri (git-reference
228 (url "https://github.com/Anaconda-Platform/anaconda-client")
229 (commit version)))
230 (file-name (git-file-name name version))
231 (sha256
232 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
233 (build-system pyproject-build-system)
234 (arguments
235 (list
236 #:test-flags
237 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
238 "--deselect=tests/utils/test_conda.py::test_conda_vars")
239 #:phases
240 #~(modify-phases %standard-phases
241 (add-after 'unpack 'fix-pytest-config
242 (lambda _
243 (substitute* "setup.cfg"
244 (("addopts=.*") "addopts=\n")))))))
245 (native-inputs
246 (list python-freezegun
247 python-pytest
248 python-setuptools))
249 (propagated-inputs
250 (list python-anaconda-cli-base
251 python-conda-package-handling
252 python-conda-package-streaming
253 python-dateutil
254 python-defusedxml
255 python-nbformat
256 python-pillow
257 python-platformdirs
258 python-pytz
259 python-pyyaml
260 python-requests
261 python-requests-toolbelt
262 python-setuptools
263 python-tqdm
264 python-urllib3))
265 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
266 (synopsis "Anaconda Cloud command line client library")
267 (description
268 "Anaconda Cloud command line client library provides an interface to
269Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
270environments.")
271 (license license:bsd-3)))
272
273(define-public python-apprise
274 (package
275 (name "python-apprise")
276 (version "1.9.4")
277 (source
278 (origin
279 (method url-fetch)
280 (uri (pypi-uri "apprise" version))
281 (sha256
282 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
283 (build-system pyproject-build-system)
284 (arguments
285 (list
286 ;; These tests used to be ran with --numprocesses, but that seems to have
287 ;; made them non-deterministic.
288 #:test-flags
289 #~(list "--ignore=tests/test_plugin_macosx.py"
290 "-k" "not test_plugin_glib_send_raises_generic")))
291 (native-inputs
292 (list python-babel
293 python-pytest
294 python-pytest-mock
295 python-setuptools))
296 (propagated-inputs
297 (list python-certifi
298 python-click
299 python-markdown
300 python-pygobject
301 python-pyyaml
302 python-requests
303 python-requests-oauthlib))
304 (home-page "https://github.com/caronc/apprise")
305 (synopsis "Push notification library")
306 (description
307 "Apprise is a Python library that allows sending push notifications to a
308broad range of notification services, such as Telegram, Discord, Slack, Amazon
309SNS, Gotify, etc.")
310 (license license:bsd-2)))
311
312(define-public python-blacksheep
313 (package
314 (name "python-blacksheep")
315 (version "2.4.2")
316 (source
317 (origin
318 (method git-fetch)
319 (uri (git-reference
320 (url "https://github.com/Neoteroi/BlackSheep")
321 (commit (string-append "v" version))))
322 (file-name (git-file-name name version))
323 (sha256
324 (base32 "0v9pkg3ffxxcdc8ynjjh5fgis5m49m65sbrgcrghmz0xkik5ny5w"))))
325 (build-system pyproject-build-system)
326 (arguments
327 (list
328 ;; tests: 1675 passed, 3 skipped
329 ;;
330 ;; Run all unit tests, but do not run integration tests from `itests`
331 ;; directory.
332 #:test-flags
333 #~(list "tests")
334 #:phases
335 #~(modify-phases %standard-phases
336 (add-before 'build 'cythonize
337 (lambda _
338 (with-directory-excursion "blacksheep"
339 (for-each (lambda (file)
340 (invoke "cython" "-3" file "-I" "."))
341 (find-files "." ".*\\.pyx$"))))))))
342 (native-inputs
343 (list nss-certs-for-test
344 python-cython
345 python-flask
346 python-jinja2
347 python-pydantic
348 python-pyjwt
349 python-pytest
350 python-pytest-asyncio
351 python-setuptools))
352 (propagated-inputs
353 (list python-certifi
354 python-essentials-openapi
355 python-guardpost
356 python-itsdangerous))
357 (home-page "https://github.com/Neoteroi/BlackSheep")
358 (synopsis "Asynchronous framework to build event based web applications")
359 (description
360 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
361
362The framework offers
363@itemize
364@item A rich code API, based on dependency injection and inspired by Flask and
365ASP.NET Core.
366@item A typing-friendly codebase, which enables a comfortable development
367experience thanks to hints when coding with IDEs.
368@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
369and JSON.
370@item A cross-platform framework, using the most modern versions of Python.
371@item Good performance.
372@end itemize")
373 (license license:expat)))
374
375(define-public python-cloudpathlib
376 (package
377 (name "python-cloudpathlib")
378 (version "0.23.0")
379 (source
380 (origin
381 (method git-fetch)
382 (uri (git-reference
383 (url "https://github.com/drivendataorg/cloudpathlib")
384 (commit (string-append "v" version))))
385 (file-name (git-file-name name version))
386 (sha256
387 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
388 (build-system pyproject-build-system)
389 (arguments
390 (list
391 ;; tests: 977 passed, 15 skipped, 8642 warnings
392 #:test-flags
393 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
394 ;; TODO: Package azure-identity (required for this file)
395 "--ignore=tests/test_azure_specific.py"
396 ;; TypeError: Retry.__init__() got an unexpected keyword
397 ;; argument 'timeout'
398 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")
399 #:phases
400 #~(modify-phases %standard-phases
401 (add-after 'unpack 'fix-pytest-config
402 (lambda _
403 (substitute* "pyproject.toml"
404 (("addopts =.*") "")))))))
405 (native-inputs
406 (list ;; python-azure-identity
407 python-dotenv
408 python-flit-core
409 python-pydantic-2
410 python-pytest
411 python-pytest-cases
412 python-pytest-xdist
413 python-shortuuid
414 python-tenacity))
415 (propagated-inputs
416 (list python-azure-storage-blob
417 python-azure-storage-file-datalake
418 python-boto3
419 python-google-cloud-storage
420 python-typing-extensions))
421 (home-page "https://github.com/drivendataorg/cloudpathlib")
422 (synopsis "Pathlib-style classes for cloud storage services")
423 (description
424 "This package provides a Python library with classes that mimic
425@code{pathlib.Path}'s interface for URIs from different cloud storage
426services.")
427 (license license:expat)))
428
429(define-public python-conda-package-handling
430 (package
431 (name "python-conda-package-handling")
432 (version "2.4.0")
433 (source
434 (origin
435 (method git-fetch)
436 (uri (git-reference
437 (url "https://github.com/conda/conda-package-handling/")
438 (commit version)))
439 (file-name (git-file-name name version))
440 (sha256
441 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
442 (build-system pyproject-build-system)
443 (native-inputs
444 (list python-bottle
445 python-mock
446 python-pytest
447 python-pytest-cov
448 python-pytest-mock
449 python-setuptools))
450 (propagated-inputs
451 (list python-conda-package-streaming))
452 (home-page "https://conda.io")
453 (synopsis "Create and extract conda packages of various formats")
454 (description
455 "This library is an abstraction of Conda package handling and a tool for
456extracting, creating, and converting between formats.")
457 (license license:bsd-3)))
458
459(define-public python-conda-package-streaming
460 (package
461 (name "python-conda-package-streaming")
462 (version "0.12.0")
463 (source
464 (origin
465 (method url-fetch)
466 (uri (pypi-uri "conda_package_streaming" version))
467 (sha256
468 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
469 (build-system pyproject-build-system)
470 (arguments
471 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
472 (list #:tests? #f))
473 (native-inputs
474 (list python-flit-core))
475 (propagated-inputs
476 (list python-requests
477 python-zstandard))
478 (home-page "https://conda.github.io/conda-package-streaming/")
479 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
480 (description
481 "This package provides an efficient library to read from new and old format
482@code{.conda} and @code{.tar.bz2} conda packages.")
483 (license license:bsd-3)))
484
485(define-public python-dependency-groups
486 (package
487 (name "python-dependency-groups")
488 (version "1.3.1")
489 (source
490 (origin
491 (method url-fetch)
492 (uri (pypi-uri "dependency_groups" version))
493 (sha256
494 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
495 (build-system pyproject-build-system)
496 (propagated-inputs (list python-packaging python-tomli))
497 (native-inputs (list python-flit-core))
498 (home-page "https://dependency-groups.readthedocs.io/")
499 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
500 (description
501 "This package provides a library which is able to parse dependency groups (PEP
502735), following includes, and provide that data as output.")
503 (license license:expat)))
504
505(define-public python-devpi-common
506 (package
507 (name "python-devpi-common")
508 (version "4.0.4")
509 (source
510 (origin
511 (method url-fetch)
512 (uri (pypi-uri "devpi_common" version))
513 (sha256
514 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
515 (build-system pyproject-build-system)
516 (propagated-inputs (list python-lazy python-packaging-legacy
517 python-requests))
518 (native-inputs
519 (list python-pytest
520 python-setuptools
521 python-wheel))
522 (home-page "https://github.com/devpi/devpi")
523 (synopsis
524 "Utilities jointly used by devpi-server, devpi-client and others")
525 (description
526 "This package provides utilities jointly used by devpi-server,
527devpi-client and others.")
528 (license license:expat)))
529
530(define-public python-devpi-client
531 (package
532 (name "python-devpi-client")
533 (version "7.2.0")
534 (source
535 (origin
536 (method url-fetch)
537 (uri (pypi-uri "devpi-client" version))
538 (sha256
539 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
540 (build-system pyproject-build-system)
541 (arguments
542 (list
543 #:test-flags
544 ;; This wants to use pip install
545 '(list "--ignore=testing/test_upload.py"
546 ;; These complain about finding distutils. It's not my fault,
547 ;; mate, setuptools is right there, but you won't pick it!
548 "--ignore=testing/test_list_remove.py"
549 "--ignore=testing/test_main.py"
550 "--ignore=testing/test_install.py"
551 "--ignore=testing/test_functional.py"
552 "--ignore=testing/test_test.py")
553 #:phases
554 '(modify-phases %standard-phases
555 (add-after 'unpack 'patch-tests
556 (lambda _
557 ;; Do not replace the directory name of the store item.
558 (substitute* "testing/conftest.py"
559 (("\"devpi-server\", \"devpi-init\"")
560 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
561 (add-before 'check 'set-HOME
562 ;; Some tests need this
563 (lambda _ (setenv "HOME" "/tmp"))))))
564 (propagated-inputs (list python-pypa-build
565 python-check-manifest
566 python-colorama
567 python-devpi-common
568 python-iniconfig
569 python-pkginfo
570 python-platformdirs
571 python-pluggy
572 python-pypitoken
573 python-tomli))
574 (native-inputs
575 (list python-devpi-server
576 python-pytest
577 python-setuptools
578 python-virtualenv))
579 (home-page "https://github.com/devpi/devpi")
580 (synopsis "Devpi upload/install/... commands for Python developers")
581 (description
582 "The devpi command line tool is typically used in conjunction with
583devpi-server. It allows uploading, testing and installing packages from devpi
584indexes.")
585 (license license:expat)))
586
587(define-public python-devpi-process
588 (package
589 (name "python-devpi-process")
590 (version "1.0.2")
591 (source
592 (origin
593 (method url-fetch)
594 (uri (pypi-uri "devpi_process" version))
595 (sha256
596 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
597 (build-system pyproject-build-system)
598 (arguments
599 (list
600 #:phases
601 '(modify-phases %standard-phases
602 (add-after 'unpack 'relax-requirements
603 (lambda _
604 ;; Our package is too old, sorry.
605 (substitute* "pyproject.toml"
606 (("typing-extensions>=4.12.2")
607 "typing-extensions>=4.10.0"))))
608 (add-after 'unpack 'patch-tool-locations
609 (lambda* (#:key inputs #:allow-other-keys)
610 (substitute* "src/devpi_process/__init__.py"
611 (("_exe\\(\"devpi-init\"\\)")
612 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
613 (("_exe\\(\"devpi-server\"\\)")
614 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
615 (("_exe\\(\"devpi\"\\)")
616 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
617 (propagated-inputs (list python-devpi-client python-devpi-server
618 python-typing-extensions))
619 (native-inputs
620 (list nss-certs-for-test
621 python-covdefaults
622 python-hatchling
623 python-hatch-vcs
624 python-httpx
625 python-pytest
626 python-pytest-cov))
627 (home-page "https://github.com/devpi/devpi")
628 (synopsis "API to create and use a devpi server process")
629 (description
630 "This package provides a programmatic API to create and use a devpi
631server process.")
632 (license license:expat)))
633
634(define-public python-devpi-server
635 (package
636 (name "python-devpi-server")
637 (version "6.17.0")
638 (source
639 (origin
640 (method url-fetch)
641 (uri (pypi-uri "devpi_server" version))
642 (sha256
643 (base32 "13lybrw8j6zjxwvx6sk7bw6854hd2m18s1xcvl0q100j4n06p6ml"))))
644 (build-system pyproject-build-system)
645 (arguments
646 (list
647 #:test-flags
648 ;; These all fail with: "module 'py' has no attribute 'io'"
649 #~(list "--ignore=test_devpi_server/test_importexport.py"
650 "--ignore=test_devpi_server/test_main.py"
651 "--ignore=test_devpi_server/test_genconfig.py")
652 #:phases
653 #~(modify-phases %standard-phases
654 (add-after 'unpack 'relax-requirements
655 (lambda _
656 (substitute* "pyproject.toml"
657 ;; It straggles to check argon2 in passlib on any versions
658 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
659 ;; such extra feature 'argon2'",).
660 (("passlib\\[argon2\\]") "passlib")))))))
661 (propagated-inputs (list python-argon2-cffi
662 python-attrs
663 python-defusedxml
664 python-devpi-common
665 python-httpx
666 python-itsdangerous
667 python-lazy
668 python-legacy-cgi
669 python-passlib
670 python-platformdirs
671 python-pluggy
672 python-py
673 python-pyramid
674 python-repoze-lru
675 python-ruamel.yaml-0.16 ;FIXME: rename
676 python-strictyaml
677 python-waitress))
678 (native-inputs
679 (list python-execnet
680 python-pytest
681 python-pytest-asyncio
682 python-pytest-timeout
683 python-setuptools
684 python-webtest))
685 (home-page "https://devpi.net")
686 (synopsis "Pypi.org caching server")
687 (description "This package implements a reliable private and pypi.org
688caching server.")
689 (license license:expat)))
690
691(define-public python-dicomweb-client
692 (package
693 (name "python-dicomweb-client")
694 (version "0.60.0")
695 (source
696 (origin
697 (method git-fetch)
698 (uri (git-reference
699 (url "https://github.com/ImagingDataCommons/dicomweb-client")
700 (commit (string-append "v" version))))
701 (file-name (git-file-name name version))
702 (sha256
703 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
704 (build-system pyproject-build-system)
705 (arguments
706 (list
707 #:phases
708 #~(modify-phases %standard-phases
709 (add-after 'unpack 'remove-dynamic-versioning
710 (lambda _
711 (substitute* "pyproject.toml"
712 ;; Dynamic versioning via 'uv-dynamic-versioning' is
713 ;; not suitable for Guix.
714 (("dynamic = \\[\"version\"\\]")
715 (string-append "version = \""
716 #$version "\""))))))))
717 (native-inputs
718 (list python-hatchling
719 python-pytest
720 python-pytest-localserver))
721 (propagated-inputs
722 (list python-numpy
723 python-pillow
724 python-pydicom
725 python-requests
726 python-retrying))
727 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
728 (synopsis "Python client for DICOMweb RESTful services")
729 (description
730 "@code{dicomweb_client} provides client intefaces for DICOMweb RESTful
731services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
732DICOM objects over the web, respectively.")
733 (license license:expat)))
734
735(define-public python-docusign-esign
736 (package
737 (name "python-docusign-esign")
738 (version "5.0.0")
739 (source
740 (origin
741 (method url-fetch)
742 (uri (pypi-uri "docusign-esign" version))
743 (sha256
744 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
745 (build-system pyproject-build-system)
746 ;; Testing requires undocumented setup changes with network access to
747 ;; <demo.docusign.net>, and so testing is disabled here.
748 (arguments `(#:tests? #f))
749 (native-inputs
750 (list python-setuptools
751 python-wheel))
752 (propagated-inputs
753 (list python-certifi
754 python-dateutil
755 python-urllib3
756 python-pyjwt
757 python-cryptography))
758 (home-page "https://developers.docusign.com/")
759 (synopsis "DocuSign Python Client")
760 (description
761 "The Official DocuSign Python Client Library used to interact with the
762eSign REST API. Send, sign, and approve documents using this client.")
763 (license license:expat)))
764
765(define-public python-domain-connect
766 (package
767 (name "python-domain-connect")
768 (version "0.0.11")
769 (source
770 (origin
771 (method git-fetch) ;no tests in PyPI archive
772 (uri (git-reference
773 (url "https://github.com/Domain-Connect/domainconnect_python")
774 (commit (string-append "v" version))))
775 (file-name (git-file-name name version))
776 (sha256
777 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
778 (build-system pyproject-build-system)
779 (arguments
780 (list
781 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
782 ;; present in container.
783 #:tests? #f
784 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
785 (native-inputs
786 (list python-setuptools
787 python-wheel))
788 (propagated-inputs
789 (list python-cryptography
790 python-dnspython
791 python-future
792 python-publicsuffix
793 python-publicsuffixlist))
794 (home-page "https://github.com/Domain-Connect/domainconnect_python")
795 (synopsis "Client library for Domain Connect protocol")
796 (description
797 "This package provides a Service Provider functionality in both Sync and
798Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
799 (license license:expat)))
800
801(define-public python-domain-connect-dyndns
802 (package
803 (name "python-domain-connect-dyndns")
804 (version "0.0.9")
805 (source
806 (origin
807 (method url-fetch)
808 (uri (pypi-uri "domain-connect-dyndns" version))
809 (sha256
810 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
811 (build-system pyproject-build-system)
812 (arguments
813 (list
814 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
815 ;; present in container.
816 #:tests? #f
817 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
818 (native-inputs
819 (list python-setuptools
820 python-wheel))
821 (propagated-inputs
822 (list python-dnspython
823 python-domain-connect
824 python-requests
825 python-validators))
826 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
827 (synopsis "Domain Connect Dynamic DNS in Python")
828 ;; Project lacks meaningful description in README, see
829 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
830 (description
831 "Python client library for Dynamic DNS using
832@url{https://www.domainconnect.org/, Domain Connect} protocol.")
833 (license license:expat)))
834
835(define-public python-dropbox
836 (package
837 (name "python-dropbox")
838 (version "12.0.2")
839 (source
840 (origin
841 (method git-fetch) ; no tests in PyPI release
842 (uri (git-reference
843 (url "https://github.com/dropbox/dropbox-sdk-python")
844 (commit (string-append "v" version))))
845 (file-name (git-file-name name version))
846 (sha256
847 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
848 (build-system pyproject-build-system)
849 (arguments
850 (list
851 #:test-flags
852 #~(list "-k" (string-join
853 ;; Network access is required.
854 (list "not test_bad_auth"
855 "test_app_auth"
856 "test_bad_pins"
857 "test_bad_pins_session"
858 "test_downscope"
859 "test_multi_auth"
860 "test_path_root"
861 "test_path_root_err"
862 "test_refresh"
863 "test_rpc"
864 "test_team"
865 "test_upload_download"
866 "test_versioned_route")
867 " and not "))
868 #:phases
869 #~(modify-phases %standard-phases
870 (add-after 'unpack 'relax-requirements
871 (lambda _
872 (substitute* "setup.py"
873 ;; 'stone>=2,<3.3.3',
874 ((">=2,<3.3.3") ">=2,<3.4.0"))))
875 (add-before 'check 'pre-check
876 (lambda _
877 ;; Otherwise tests setup erroring.
878 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
879 (setenv "LEGACY_USER_CLIENT_ID" "guix")
880 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
881 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
882 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
883 (setenv "SCOPED_USER_CLIENT_ID" "guix")
884 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
885 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
886 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
887 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
888 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
889 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
890 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
891 (native-inputs
892 (list nss-certs-for-test
893 python-mock
894 python-pytest
895 python-pytest-mock
896 python-setuptools
897 python-wheel))
898 (propagated-inputs
899 (list python-requests python-six python-stone))
900 (home-page "https://www.dropbox.com/developers")
901 (synopsis "Official Dropbox API Client")
902 (description "This package provides a Python SDK for integrating with the
903Dropbox API v2.")
904 (license license:expat)))
905
906(define-public python-essentials-openapi
907 (package
908 (name "python-essentials-openapi")
909 (version "1.2.1")
910 (source
911 (origin
912 (method git-fetch)
913 (uri (git-reference
914 (url "https://github.com/Neoteroi/essentials-openapi")
915 (commit (string-append "v" version))))
916 (file-name (git-file-name name version))
917 (sha256
918 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
919 (build-system pyproject-build-system)
920 (native-inputs
921 (list python-flask
922 python-hatchling
923 python-pydantic
924 python-pytest
925 python-rich))
926 (propagated-inputs
927 (list python-essentials
928 python-httpx
929 python-jinja2
930 python-markupsafe
931 python-pyyaml))
932 (home-page "https://github.com/Neoteroi/essentials-openapi/")
933 (synopsis "Generator for OpenAPI Documentation")
934 (description
935 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
936formats. Generator for other kinds of documents from OpenAPI Documentation
937files.")
938 (license license:expat)))
939
940(define-public python-eventlet
941 (package
942 (name "python-eventlet")
943 (version "0.40.2")
944 (source
945 (origin
946 (method url-fetch)
947 (uri (pypi-uri "eventlet" version))
948 (sha256
949 (base32
950 "1c6qr1cnam79wxm1sh5y04061iyy3shs02yd0mlh47bngwknqqs2"))))
951 (build-system pyproject-build-system)
952 (arguments
953 (list
954 #:test-flags
955 '(list "-k"
956 (string-append
957 "not TestGetaddrinfo"
958 " and not TestProxyResolver"
959 " and not test_noraise_dns_tcp"
960 " and not test_raise_dns_tcp"
961 " and not test_hosts_no_network"
962 " and not test_import_rdtypes_then_eventlet"
963 " and not test_patcher_existing_locks"
964 " and not test_dns_methods_are_green"))
965 #:phases
966 #~(modify-phases %standard-phases
967 (add-after 'unpack 'avoid-OSError
968 (lambda _
969 ;; If eventlet tries to load greendns, an OSError is thrown when
970 ;; getprotobyname is called. Thankfully there is an environment
971 ;; variable to disable the greendns import, so use it. Note that
972 ;; this error is propagated to child packages too, so enforce the
973 ;; changed default.
974 (substitute* "eventlet/green/socket.py"
975 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
976 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")")))))))
977 (native-inputs
978 (list python-pypa-build
979 python-hatch-vcs
980 python-hatchling
981 python-pytest))
982 (propagated-inputs
983 (list python-dnspython python-greenlet))
984 (home-page "https://eventlet.net")
985 (synopsis "Concurrent networking library for Python")
986 (description
987 "Eventlet is a concurrent networking library for Python that
988allows you to change how you run your code, not how you write it.
989It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
990Coroutines ensure that the developer uses a blocking style of programming
991that is similar to threading, but provide the benefits of non-blocking I/O.
992The event dispatch is implicit, which means you can easily use @code{Eventlet}
993from the Python interpreter, or as a small part of a larger application.
994
995Note: In Guix, this package assumes the environment variable
996@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
997to anything else.")
998 (license license:expat)))
999
1000(define-public python-flask-caching
1001 (package
1002 (name "python-flask-caching")
1003 (version "2.3.1")
1004 (source
1005 (origin
1006 (method url-fetch)
1007 (uri (pypi-uri "flask_caching" version))
1008 (sha256
1009 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
1010 (build-system pyproject-build-system)
1011 (arguments
1012 (list
1013 #:test-flags
1014 ;; Tests requiring running Redis or dated python-cache.
1015 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
1016 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
1017 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
1018 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
1019 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
1020 "-k" "not test_client_override_reflected_on_cachelib_methods")))
1021 (native-inputs
1022 (list python-pytest
1023 python-pytest-asyncio
1024 python-pytest-xprocess
1025 python-setuptools))
1026 (propagated-inputs
1027 (list python-cachelib
1028 python-flask))
1029 (home-page "https://github.com/pallets-eco/flask-caching")
1030 (synopsis "Caching extension for Flask")
1031 (description
1032 "This package provides a caching support to Flask applications, it's a
1033fort ok https://github.com/thadeusb/flask-cache.")
1034 (license license:bsd-3)))
1035
1036(define-public python-gdown
1037 (package
1038 (name "python-gdown")
1039 (version "5.2.0")
1040 (source
1041 (origin
1042 (method url-fetch)
1043 (uri (pypi-uri "gdown" version))
1044 (sha256
1045 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
1046 (build-system pyproject-build-system)
1047 (arguments (list #:tests? #f)) ;network access is required
1048 (native-inputs
1049 (list python-hatch-fancy-pypi-readme
1050 python-hatch-vcs
1051 python-hatchling))
1052 (propagated-inputs
1053 (list python-beautifulsoup4
1054 python-filelock
1055 python-requests
1056 python-tqdm))
1057 (home-page "https://github.com/wkentaro/gdown")
1058 (synopsis "Google Drive Public File/Folder Downloader")
1059 (description
1060 "This package implements a functionality to download large files
1061recursivly from Google Drive with option to filter them by file
1062formats (PDF/XML/CSV).")
1063 (license license:expat)))
1064
1065(define-public python-globus-sdk
1066 (package
1067 (name "python-globus-sdk")
1068 (version "3.56.0")
1069 (source
1070 (origin
1071 (method git-fetch) ;no tests in PyPI archive
1072 (uri (git-reference
1073 (url "https://github.com/globus/globus-sdk-python")
1074 (commit version)))
1075 (file-name (git-file-name name version))
1076 (sha256
1077 (base32 "11nljda2ir4gna4xa5vkj5nzxnjwadkh97qplkk9nrj44szphnzw"))))
1078 (build-system pyproject-build-system)
1079 (arguments
1080 (list
1081 #:test-flags
1082 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count))))
1083 #:phases
1084 #~(modify-phases %standard-phases
1085 (add-before 'check 'pre-check
1086 (lambda _ (setenv "HOME" "/tmp"))))))
1087 (native-inputs
1088 (list python-flaky
1089 python-pytest
1090 python-pytest-randomly
1091 python-pytest-xdist
1092 python-responses
1093 python-setuptools
1094 python-wheel))
1095 (propagated-inputs
1096 (list python-cryptography
1097 python-importlib-resources
1098 python-pyjwt
1099 python-requests))
1100 (home-page "https://github.com/globus/globus-sdk-python")
1101 (synopsis "Globus SDK for Python")
1102 (description
1103 "This package provides a SDK for convenient Pythonic interface to
1104@url{https://www.globus.org/, Globus} APIs.")
1105 (license license:asl2.0)))
1106
1107(define-public python-guardpost
1108 (package
1109 (name "python-guardpost")
1110 (version "1.0.3")
1111 (source
1112 (origin
1113 (method git-fetch)
1114 (uri (git-reference
1115 (url "https://github.com/Neoteroi/guardpost")
1116 (commit (string-append "v" version))))
1117 (file-name (git-file-name name version))
1118 (sha256
1119 (base32 "1q09w953d4cjjvp8pp3kkkhw0y9kq2jgj6fihdz9np55pwxkfd15"))))
1120 (build-system pyproject-build-system)
1121 (arguments
1122 (list
1123 ;; Possible timing issue, see:
1124 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
1125 #:test-flags '(list "--ignore=tests/test_jwts.py")))
1126 (native-inputs
1127 (list python-cryptography
1128 python-flask
1129 python-hatchling
1130 python-pyjwt
1131 python-pytest
1132 python-pytest-asyncio))
1133 (propagated-inputs
1134 (list python-rodi))
1135 (home-page "https://github.com/Neoteroi/GuardPost/")
1136 (synopsis
1137 "Authentication and authorization framework for Python applications")
1138 (description
1139 "GuardPost is a framework to handle authentication and
1140authorization in asynchronous Python applications.
1141
1142Its features include
1143
1144@itemize
1145@item Strategy to implement authentication.
1146@item Strategy to implement authorization.
1147@item Support for dependency injection
1148@item Built-in support for JSON Web Tokens (JWTs) authentication.
1149@end itemize")
1150 (license license:expat)))
1151
1152(define-public python-hookdns
1153 (package
1154 (name "python-hookdns")
1155 (version "2.0.0")
1156 (source
1157 (origin
1158 (method url-fetch)
1159 (uri (pypi-uri "hookdns" version))
1160 (sha256
1161 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
1162 (build-system pyproject-build-system)
1163 (arguments
1164 (list
1165 #:test-flags
1166 #~(list "-k" (string-join
1167 ;; Tests requiring networking.
1168 (list
1169 "not test_patch_contextmanager_with_another_hostname"
1170 "test_patch_contextmanager_with_another_hostname_ipv6"
1171 "test_patch_contextmanager_with_ipv4"
1172 "test_patch_contextmanager_with_name"
1173 "test_patch_contextmanager_with_public_fqdn_and_"
1174 "test_patch_contextmanager_with_unknown_hostname"
1175 "test_patch_decorator_with_another_hostname"
1176 "test_patch_decorator_with_another_hostname_ipv6"
1177 "test_patch_decorator_with_ipv4"
1178 "test_patch_decorator_with_name"
1179 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
1180 "test_patch_decorator_with_unknown_hostname"
1181 "test_real_getaddrinfo_with_name_ipv6"
1182 "test_real_getaddrinfo_with_public_fqdn_ipv4"
1183 "test_real_getaddrinfo_with_public_fqdn_ipv6"
1184 "test_real_gethostbyname_ex_with_public_fqdn"
1185 "test_real_gethostbyname_with_public_fqdn"
1186 "test_real_requests_ip"
1187 "test_real_requests_name"
1188 "test_real_requests_with_public_fqdn"
1189 "test_reentrant")
1190 " and not "))))
1191 (native-inputs
1192 (list python-pytest
1193 python-requests
1194 python-setuptools
1195 python-wheel))
1196 (home-page "https://github.com/cle-b/hookdns")
1197 (synopsis "DNS resolution customization library")
1198 (description
1199 "HookDNS implements functionality that allows for modifying name
1200resolution in a Python script without any changes to the hosts file or the use
1201of a fake DNS resolver.")
1202 (license license:asl2.0)))
1203
1204(define-public python-httpretty
1205 (package
1206 (name "python-httpretty")
1207 (version "1.1.4")
1208 (source
1209 (origin
1210 (method url-fetch)
1211 (uri (pypi-uri "httpretty" version))
1212 (sha256
1213 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
1214 (build-system pyproject-build-system)
1215 (arguments
1216 (list
1217 #:test-flags
1218 ;; Only run Unit tests.
1219 #~(list "--ignore=tests/bugfixes"
1220 "--ignore=tests/functional"
1221 "--ignore=tests/pyopenssl"
1222 "-k" (string-join
1223 ;; Tests pattern failing with one of these errors:
1224 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
1225 ;; has no attribute 'should'
1226 ;; AttributeError: 'function' object has no attribute
1227 ;; 'when'
1228 ;; AttributeError: 'AssertionBuilder' object has no
1229 ;; attribute 'should_not'
1230 (list "not fake_socket_passes_through"
1231 "fakesock_socket"
1232 "request_parse_body_when"
1233 "test_Entry_class_normalizes_headers"
1234 "test_has_request"
1235 "test_httpretty_should_raise_proper"
1236 "test_parse_request_line_connect"
1237 "test_request_parse_querystring"
1238 "test_request_string_representation"
1239 "test_request_stubs_internals")
1240 " and not "))))
1241 (native-inputs
1242 (list nss-certs-for-test
1243 python-freezegun
1244 python-mock
1245 python-pytest
1246 python-setuptools
1247 python-sure
1248 python-wheel))
1249 (home-page "https://httpretty.readthedocs.io")
1250 (synopsis "HTTP client mock for Python")
1251 (description
1252 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
1253@code{fakeweb}.")
1254 (license license:expat)))
1255
1256(define-public python-huggingface-hub
1257 (package
1258 (name "python-huggingface-hub")
1259 (version "0.31.4")
1260 (source
1261 (origin
1262 (method git-fetch)
1263 (uri (git-reference
1264 (url "https://github.com/huggingface/huggingface_hub")
1265 (commit (string-append "v" version))))
1266 (file-name (git-file-name name version))
1267 (sha256
1268 (base32 "1rjkrmvvyzxlbnbndrg4v9qq39grn46c26zrdjgpf114gci5pwap"))))
1269 (build-system pyproject-build-system)
1270 (arguments
1271 (list
1272 #:test-flags
1273 ;; We don't have sentence_transformers...
1274 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
1275 ;; ...nor do we have InquirerPy...
1276 "--ignore=tests/test_command_delete_cache.py"
1277 ;; ...or timm...
1278 "--ignore=contrib/timm/test_timm.py"
1279 ;; ...or spacy_huggingface_hub
1280 "--ignore=contrib/spacy/test_spacy.py"
1281 ;; These all require internet access
1282 "--ignore=tests/test_cache_no_symlinks.py"
1283 "--ignore=tests/test_cache_layout.py"
1284 "--ignore=tests/test_commit_scheduler.py"
1285 "--ignore=tests/test_file_download.py"
1286 "--ignore=tests/test_hf_api.py"
1287 "--ignore=tests/test_hf_file_system.py"
1288 "--ignore=tests/test_inference_api.py"
1289 "--ignore=tests/test_inference_async_client.py"
1290 "--ignore=tests/test_inference_client.py"
1291 "--ignore=tests/test_inference_text_generation.py"
1292 "--ignore=tests/test_login_utils.py"
1293 "--ignore=tests/test_offline_utils.py"
1294 "--ignore=tests/test_repocard.py"
1295 "--ignore=tests/test_repository.py"
1296 "--ignore=tests/test_snapshot_download.py"
1297 "--ignore=tests/test_utils_cache.py"
1298 "--ignore=tests/test_utils_git_credentials.py"
1299 "--ignore=tests/test_utils_http.py"
1300 "--ignore=tests/test_utils_pagination.py"
1301 "--ignore=tests/test_webhooks_server.py"
1302 "-k" (string-append
1303 "not test_push_to_hub"
1304 " and not test_from_pretrained_model_id_only"
1305 " and not test_from_pretrained_model_id_and_revision"
1306 ;; These all require internet access
1307 " and not test_auth"
1308 " and not test_oauth"
1309 " and not test_utils_sha"
1310 " and not test_inference_providers"
1311 " and not test_xet"))
1312 #:phases
1313 '(modify-phases %standard-phases
1314 (add-before 'check 'pre-check
1315 ;; Some tests need to write to HOME.
1316 (lambda _ (setenv "HOME" "/tmp"))))))
1317 (propagated-inputs
1318 (list python-filelock
1319 python-fsspec
1320 python-packaging
1321 python-pyyaml
1322 python-requests
1323 python-tqdm
1324 python-typing-extensions))
1325 (native-inputs
1326 (list python-aiohttp
1327 python-fastapi
1328 python-jedi
1329 python-jinja2
1330 python-mypy
1331 python-numpy
1332 python-pillow
1333 python-pydantic-2
1334 python-pytest
1335 python-pytest-asyncio
1336 python-pytest-cov
1337 python-pytest-env
1338 python-pytest-mock
1339 python-pytest-rerunfailures
1340 python-pytest-vcr
1341 python-pytest-xdist
1342 python-setuptools
1343 python-types-requests
1344 python-types-toml
1345 python-types-urllib3
1346 python-typing-extensions
1347 python-urllib3
1348 python-wheel))
1349 (home-page "https://huggingface.co/docs/huggingface_hub/")
1350 (synopsis "Client library for accessing the huggingface.co hub")
1351 (description
1352 "This package provides a client library to download and publish models,
1353datasets and other repos on the @url{huggingface.co} hub.")
1354 (license license:asl2.0)))
1355
1356(define-public python-kubernetes
1357 (package
1358 (name "python-kubernetes")
1359 (version "34.1.0")
1360 (source
1361 (origin
1362 (method url-fetch)
1363 (uri (pypi-uri "kubernetes" version))
1364 (sha256
1365 (base32 "04ir03887spls3wqspvbsivqjrbwz0innn86mkrs546jnnqfvs4g"))))
1366 (build-system pyproject-build-system)
1367 (arguments
1368 (list
1369 #:test-flags
1370 #~(list
1371 ;; The following tests expect a local running Kubernetes cluster.
1372 "--ignore=kubernetes/e2e_test"
1373 "--ignore=kubernetes/dynamic")))
1374 (native-inputs
1375 (list python-pytest
1376 python-setuptools))
1377 (propagated-inputs
1378 (list python-certifi
1379 python-dateutil
1380 python-durationpy
1381 python-google-auth
1382 python-pyyaml
1383 python-requests
1384 python-requests-oauthlib
1385 python-six ;XXX: hard dependency
1386 python-urllib3-1.26 ;sanity check, requires urllib3<2.4.0,>=1.24.2
1387 python-websocket-client))
1388 (home-page "https://github.com/kubernetes-client/python")
1389 (synopsis "Python client for Kubernetes")
1390 (description
1391 "This package provides an official Python client library for
1392@url{http://kubernetes.io, Kubernetes}.")
1393 (license license:asl2.0)))
1394
1395(define-public python-lazr-restfulclient
1396 (package
1397 (name "python-lazr-restfulclient")
1398 (version "0.14.6")
1399 (source
1400 (origin
1401 (method url-fetch)
1402 (uri (pypi-uri "lazr.restfulclient" version))
1403 (sha256
1404 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
1405 (build-system pyproject-build-system)
1406 (arguments
1407 (list
1408 #:phases
1409 #~(modify-phases %standard-phases
1410 ;; Disable part of the test suite to avoid the lazr.authentication
1411 ;; requirement, which requires 'oauth', a Python 2 only library.
1412 (add-after 'unpack 'remove-some-checks
1413 (lambda _
1414 (with-directory-excursion "src/lazr/restfulclient/tests"
1415 (for-each delete-file '("test_oauth.py" "test_docs.py")))
1416 (substitute* "setup.py"
1417 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
1418 ""))))
1419 (replace 'check
1420 (lambda* (#:key tests? #:allow-other-keys)
1421 (if tests?
1422 (invoke "zope-testrunner" "--test-path=src")
1423 (format #t "test suite not run~%")))))))
1424 (native-inputs
1425 (list python-setuptools
1426 python-testtools
1427 python-wheel
1428 python-wsgi-intercept
1429 python-zope-testrunner))
1430 (propagated-inputs
1431 (list python-distro
1432 python-httplib2
1433 python-oauthlib
1434 python-pyparsing
1435 python-setuptools
1436 python-six
1437 python-wadllib))
1438 (home-page "https://launchpad.net/lazr.restfulclient")
1439 (synopsis "Web client Python library extending wadlib")
1440 (description "This package provides a programmable client library that
1441adds functionality on top of @code{wadlib}.")
1442 (license license:lgpl3+)))
1443
1444(define-public python-launchpadlib
1445 (package
1446 (name "python-launchpadlib")
1447 (version "2.1.0")
1448 (source
1449 (origin
1450 (method url-fetch)
1451 (uri (pypi-uri "launchpadlib" version))
1452 (sha256
1453 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
1454 (build-system pyproject-build-system)
1455 (arguments
1456 (list #:phases #~(modify-phases %standard-phases
1457 (add-before 'check 'set-home
1458 (lambda _
1459 ;; Tests require a writable home.
1460 (setenv "HOME" "/tmp"))))))
1461 (propagated-inputs
1462 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
1463 (native-inputs (list python-pytest python-testresources python-wadllib
1464 python-setuptools python-wheel))
1465 (home-page "https://documentation.ubuntu.com/launchpad")
1466 (synopsis "Python client library for Launchpad's web service")
1467 (description "@code{launchpadlib} is a Python library that allows
1468scripting Launchpad via its the web service API.")
1469 (license license:lgpl3+)))
1470
1471(define-public python-lazr-uri
1472 (package
1473 (name "python-lazr-uri")
1474 (version "1.0.7")
1475 (source
1476 (origin
1477 (method url-fetch)
1478 (uri (pypi-uri "lazr_uri" version))
1479 (sha256
1480 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
1481 (build-system pyproject-build-system)
1482 (arguments
1483 (list
1484 #:phases
1485 #~(modify-phases %standard-phases
1486 (replace 'check
1487 (lambda* (#:key tests? #:allow-other-keys)
1488 (if tests?
1489 (invoke "zope-testrunner" "--test-path=src")
1490 (format #t "test suite not run~%")))))))
1491 (native-inputs (list python-setuptools python-zope-testrunner))
1492 (home-page "https://launchpad.net/lazr.uri")
1493 (synopsis "Python URI manipulation library")
1494 (description "This Python package provides a self-contained, easily
1495reusable library for parsing, manipulating, and generating URIs.")
1496 (license license:lgpl3)))
1497
1498(define-public python-ldaptor
1499 (package
1500 (name "python-ldaptor")
1501 (version "21.2.0")
1502 (source
1503 (origin
1504 (method url-fetch)
1505 (uri (pypi-uri "ldaptor" version))
1506 (sha256
1507 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
1508 (build-system pyproject-build-system)
1509 (arguments
1510 (list
1511 #:test-flags
1512 #~(list "-m" "twisted.trial"
1513 (string-append "-j" (number->string (parallel-job-count)))
1514 "ldaptor")
1515 #:phases
1516 #~(modify-phases %standard-phases
1517 (add-before 'check 'disable-failing-tests
1518 (lambda _
1519 ;; Testing with Twisted 22.4 results in infinite loop creating
1520 ;; temporary config files, see
1521 ;; <https://github.com/twisted/ldaptor/issues/238>.
1522 (delete-file "ldaptor/test/test_config.py")))
1523 (replace 'check
1524 (lambda* (#:key tests? test-flags #:allow-other-keys)
1525 (when tests?
1526 (apply invoke "python" test-flags)))))))
1527 (native-inputs
1528 (list python-setuptools
1529 python-wheel))
1530 (propagated-inputs
1531 (list python-passlib
1532 python-pyopenssl
1533 python-service-identity ; to pass sanity check, for Twisted[tls]
1534 python-pyparsing
1535 python-twisted
1536 python-zope-interface))
1537 (home-page "https://github.com/twisted/ldaptor")
1538 (synopsis "Pure-Python Twisted library for LDAP")
1539 (description
1540 "This package provides a Python Twisted library for LDAP, which key
1541feaatures are:
1542@itemize
1543@item LDAP client logic
1544@item separately-accessible LDAP and BER protocol message generation/parsing
1545@item ASCII-format LDAP filter generation and parsing
1546@item LDIF format data generation
1547@item Samba password changing logic
1548@end itemize")
1549 (license license:expat)))
1550
1551(define-public python-legacy-cgi
1552 (package
1553 (name "python-legacy-cgi")
1554 (version "2.6.1")
1555 (source
1556 (origin
1557 (method url-fetch)
1558 (uri (pypi-uri "legacy_cgi" version))
1559 (sha256
1560 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
1561 (build-system pyproject-build-system)
1562 (native-inputs (list python-poetry-core python-pytest))
1563 (home-page "https://github.com/jackrosenthal/legacy-cgi")
1564 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
1565 (description
1566 "This is a fork of the standard library modules @code{cgi} and
1567@code{cgitb}. They are slated to be removed from the Python standard library
1568in Python 3.13 by PEP-594.")
1569 (license license:psfl)))
1570
1571(define-public python-opentelemetry-api
1572 (package
1573 (name "python-opentelemetry-api")
1574 (version "1.37.0")
1575 (source
1576 (origin
1577 (method url-fetch)
1578 (uri (pypi-uri "opentelemetry_api" version))
1579 (sha256
1580 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
1581 (build-system pyproject-build-system)
1582 (propagated-inputs (list python-importlib-metadata
1583 python-typing-extensions))
1584 (native-inputs (list python-hatchling
1585 python-opentelemetry-test-utils-bootstrap))
1586 (home-page "https://opentelemetry.io/docs/languages/python/")
1587 (synopsis "OpenTelemetry Python API")
1588 (description "@code{OpenTelemetry} Python API.")
1589 (license license:asl2.0)))
1590
1591(define-public python-opentelemetry-api-bootstrap
1592 (hidden-package
1593 (package/inherit python-opentelemetry-api
1594 (name "python-opentelemetry-api-bootstrap")
1595 (arguments
1596 (list
1597 #:tests? #f))
1598 (native-inputs (list python-hatchling)))))
1599
1600(define-public python-opentelemetry-sdk
1601 (package
1602 (name "python-opentelemetry-sdk")
1603 (version "1.37.0")
1604 (source
1605 (origin
1606 (method url-fetch)
1607 (uri (pypi-uri "opentelemetry_sdk" version))
1608 (sha256
1609 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
1610 (build-system pyproject-build-system)
1611 (propagated-inputs (list python-opentelemetry-api
1612 python-opentelemetry-semantic-conventions
1613 python-typing-extensions))
1614 (native-inputs (list python-hatchling
1615 python-opentelemetry-test-utils-bootstrap
1616 python-pytest))
1617 (home-page "https://opentelemetry.io/docs/languages/python/")
1618 (synopsis "OpenTelemetry Python SDK")
1619 (description "@code{OpenTelemetry} Python SDK.")
1620 (license license:asl2.0)))
1621
1622(define-public python-opentelemetry-sdk-bootstrap
1623 (hidden-package
1624 (package/inherit python-opentelemetry-sdk
1625 (name "python-opentelemetry-sdk-bootstrap")
1626 (arguments (list #:tests? #f))
1627 (propagated-inputs (list python-opentelemetry-api-bootstrap
1628 python-opentelemetry-semantic-conventions-bootstrap))
1629 (native-inputs (list python-hatchling)))))
1630
1631(define-public python-opentelemetry-semantic-conventions
1632 (package
1633 (name "python-opentelemetry-semantic-conventions")
1634 (version "0.58b0")
1635 (source
1636 (origin
1637 (method url-fetch)
1638 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
1639 (sha256
1640 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
1641 (build-system pyproject-build-system)
1642 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
1643 (native-inputs (list python-hatchling))
1644 (home-page "https://opentelemetry.io/docs/languages/python/")
1645 (synopsis "OpenTelemetry Semantic Conventions")
1646 (description "@code{OpenTelemetry} Semantic Conventions.")
1647 (license license:asl2.0)))
1648
1649(define-public python-opentelemetry-semantic-conventions-bootstrap
1650 (hidden-package
1651 (package/inherit python-opentelemetry-semantic-conventions
1652 (name "python-opentelemetry-semantic-conventions-bootstrap")
1653 (arguments
1654 (list
1655 #:tests? #f))
1656 (propagated-inputs (list python-opentelemetry-api-bootstrap
1657 python-typing-extensions)))))
1658
1659(define-public python-opentelemetry-test-utils
1660 (package
1661 (name "python-opentelemetry-test-utils")
1662 (version "0.58b0")
1663 (source
1664 (origin
1665 (method url-fetch)
1666 (uri (pypi-uri "opentelemetry_test_utils" version))
1667 (sha256
1668 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
1669 (build-system pyproject-build-system)
1670 (propagated-inputs (list python-asgiref python-opentelemetry-api
1671 python-opentelemetry-sdk))
1672 (native-inputs (list python-hatchling))
1673 (home-page "https://opentelemetry.io/docs/languages/python/")
1674 (synopsis "Test utilities for OpenTelemetry unit tests")
1675 (description "Test utilities for @code{OpenTelemetry} unit tests.")
1676 (license license:asl2.0)))
1677
1678(define-public python-opentelemetry-test-utils-bootstrap
1679 (hidden-package
1680 (package/inherit python-opentelemetry-test-utils
1681 (name "python-opentelemetry-test-utils-bootstrap")
1682 (arguments
1683 (list
1684 #:tests? #f))
1685 (propagated-inputs (list python-asgiref
1686 python-opentelemetry-api-bootstrap
1687 python-opentelemetry-sdk-bootstrap))
1688 (native-inputs (list python-hatchling)))))
1689
1690(define-public python-pathy
1691 (package
1692 (name "python-pathy")
1693 (version "0.11.0")
1694 (source
1695 (origin
1696 (method url-fetch)
1697 (uri (pypi-uri "pathy" version))
1698 (sha256
1699 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
1700 (build-system pyproject-build-system)
1701 (native-inputs
1702 (list python-mock
1703 python-pytest
1704 python-setuptools))
1705 (propagated-inputs
1706 (list python-pathlib-abc-for-python-pathy
1707 python-smart-open-6
1708 python-typer))
1709 (home-page "https://github.com/justindujardin/pathy")
1710 (synopsis "Path interface for local and cloud bucket storage")
1711 (description "Pathy is a python package (with type annotations) for
1712working with Cloud Bucket storage providers using a @code{pathlib} interface.
1713It provides @code{pathlib.Path} subclasses for local and cloud bucket
1714storage.")
1715 (license license:asl2.0)))
1716
1717(define-public python-portend
1718 (package
1719 (name "python-portend")
1720 (version "3.2.1")
1721 (source
1722 (origin
1723 (method url-fetch)
1724 (uri (pypi-uri "portend" version))
1725 (sha256
1726 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
1727 (build-system pyproject-build-system)
1728 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
1729 ;; download dependencies.
1730 (arguments
1731 '(#:test-flags '("-k" "not project")))
1732 (native-inputs
1733 (list python-pytest
1734 python-setuptools
1735 python-setuptools-scm))
1736 (propagated-inputs
1737 (list python-tempora))
1738 (home-page "https://github.com/jaraco/portend")
1739 (synopsis "Monitor TCP ports for bound or unbound states")
1740 (description
1741 "@code{python-portend} can be used to monitor TCP ports for bound or
1742unbound states. For example, waiting for a port to be occupied or freed
1743within a set timeout. @code{python-portend} can also be used directly from
1744the command line.")
1745 (license license:expat)))
1746
1747(define-public python-prawcore
1748 (package
1749 (name "python-prawcore")
1750 (version "2.4.0")
1751 (source
1752 (origin
1753 (method git-fetch)
1754 (uri (git-reference
1755 (url "https://github.com/praw-dev/prawcore")
1756 (commit (string-append "v" version))))
1757 (file-name (git-file-name name version))
1758 (sha256
1759 (base32 "1y7gh7kk002b2h1ppkr1llb2gjfnby28zvx11j4ji0wm3r3rjh5l"))))
1760 (build-system pyproject-build-system)
1761 (arguments
1762 ;; XXX: These tests fail with an incomplete request response.
1763 (list #:test-flags
1764 #~'("-k" #$(string-append
1765 "not test_revoke__access_token_with_refresh_set"
1766 " and not test_revoke__access_token_without_refresh_set"
1767 " and not test_revoke__refresh_token_with_access_set"
1768 " and not test_refresh__with_scopes"
1769 " and not test_request__patch"))))
1770 (native-inputs
1771 (list python-betamax
1772 python-betamax-matchers
1773 python-betamax-serializers
1774 python-flit-core
1775 python-mock
1776 python-pytest
1777 python-testfixtures))
1778 (propagated-inputs
1779 (list python-requests))
1780 (synopsis "Core component of PRAW")
1781 (description "PRAWcore is a low-level communication layer used by PRAW.")
1782 (home-page "https://praw.readthedocs.io/en/latest/")
1783 (license license:bsd-2)))
1784
1785(define-public python-praw
1786 (package
1787 (name "python-praw")
1788 (version "7.8.1")
1789 (source
1790 (origin
1791 (method git-fetch)
1792 (uri (git-reference
1793 (url "https://github.com/praw-dev/praw")
1794 (commit (string-append "v" version))))
1795 (file-name (git-file-name name version))
1796 (sha256
1797 (base32 "05qq43l4334cq8r8k731qnb45nq12vvfdxwbr6q84a1hafp7n4cg"))))
1798 (build-system pyproject-build-system)
1799 (arguments
1800 (list #:test-flags
1801 #~(list "--ignore=tests/units/models"
1802 "--ignore=tests/integration/models"
1803 "--ignore=tests/unit/test_config.py"
1804 "--ignore=tests/integration/test_reddit.py")))
1805 (native-inputs
1806 (list python-betamax
1807 python-betamax-matchers
1808 python-flit-core
1809 python-pytest))
1810 (propagated-inputs
1811 (list python-prawcore python-update-checker python-websocket-client))
1812 (synopsis "Python Reddit API Wrapper")
1813 (description "PRAW is a Python package that allows for simple access to
1814Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
1815API rules.")
1816 (home-page "https://praw.readthedocs.io/en/latest/")
1817 (license license:bsd-2)))
1818
1819(define-public python-frozenlist
1820 (package
1821 (name "python-frozenlist")
1822 ;; XXX: Any newer versions fail to build, check why.
1823 (version "1.3.3")
1824 (source
1825 (origin
1826 (method url-fetch)
1827 (uri (pypi-uri "frozenlist" version))
1828 (sha256
1829 (base32 "0sispcpras096fxrd0i35qs25fqy4r0x8v1d6f40pag845bwbg2q"))))
1830 (build-system pyproject-build-system)
1831 (native-inputs
1832 (list python-pytest
1833 python-setuptools
1834 python-wheel))
1835 (home-page "https://github.com/aio-libs/frozenlist")
1836 (synopsis "List-like data structure for Python")
1837 (description "@code{frozenlist.FrozenList} is a list-like structure which
1838implements @code{collections.abc.MutableSequence}. It can be made immutable
1839by calling @code{FrozenList.freeze}.")
1840 (license license:asl2.0)))
1841
1842(define-public python-aiobotocore
1843 (package
1844 (name "python-aiobotocore")
1845 (version "2.25.1")
1846 (source
1847 (origin
1848 (method url-fetch)
1849 (uri (pypi-uri "aiobotocore" version))
1850 (sha256
1851 (base32 "1g7dv81bw7vq55gv3c5jxdw7wp7dp6dwjbh79y3fiv6ppwwyg6za"))))
1852 (build-system pyproject-build-system)
1853 (arguments
1854 (list
1855 ;; TODO: Too many tests fail seemingly because they need Internet access.
1856 #:tests? #false))
1857 (propagated-inputs (list python-aiohttp
1858 python-aioitertools
1859 python-botocore
1860 python-jmespath
1861 python-multidict
1862 python-dateutil
1863 python-urllib3
1864 python-wrapt))
1865 (native-inputs
1866 (list python-setuptools))
1867 (home-page "https://pypi.org/project/aiobotocore/")
1868 (synopsis "Async client for AWS services using botocore and aiohttp")
1869 (description "This package provides an async client for Amazon services
1870using botocore and aiohttp/asyncio. This library is a mostly full featured
1871asynchronous version of botocore.")
1872 (license license:asl2.0)))
1873
1874(define-public python-aiohappyeyeballs
1875 (package
1876 (name "python-aiohappyeyeballs")
1877 (version "2.6.1")
1878 (source
1879 (origin
1880 (method url-fetch)
1881 (uri (pypi-uri "aiohappyeyeballs" version))
1882 (sha256
1883 (base32 "0n1mjip846fprc34ik6if9m8xisva2m0ygyzvz53r013648x1yf3"))))
1884 (build-system pyproject-build-system)
1885 (native-inputs
1886 (list python-poetry-core
1887 python-pytest
1888 python-pytest-asyncio-0.26
1889 python-pytest-cov))
1890 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
1891 (synopsis "Happy Eyeballs for asyncio")
1892 (description "This library exists to allow connecting with Happy
1893Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
1894DNS name.")
1895 (license license:psfl)))
1896
1897(define-public python-aioitertools
1898 (package
1899 (name "python-aioitertools")
1900 (version "0.12.0")
1901 (source
1902 (origin
1903 (method url-fetch)
1904 (uri (pypi-uri "aioitertools" version))
1905 (sha256
1906 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
1907 (build-system pyproject-build-system)
1908 (arguments
1909 (list #:test-backend #~'custom
1910 #:test-flags #~(list "-m" "aioitertools.tests")))
1911 (native-inputs
1912 (list python-flit-core))
1913 (home-page "https://pypi.org/project/aioitertools/")
1914 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
1915 (description
1916 "This package provides an implementation of itertools, builtins, and more
1917for AsyncIO and mixed-type iterables.")
1918 (license license:expat)))
1919
1920(define-public python-aiosignal
1921 (package
1922 (name "python-aiosignal")
1923 (version "1.4.0")
1924 (source
1925 (origin
1926 (method url-fetch)
1927 (uri (pypi-uri "aiosignal" version))
1928 (sha256
1929 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
1930 (build-system pyproject-build-system)
1931 (native-inputs
1932 (list python-pytest
1933 python-pytest-asyncio
1934 python-pytest-cov
1935 python-setuptools
1936 python-wheel))
1937 (propagated-inputs
1938 (list python-frozenlist))
1939 (home-page "https://github.com/aio-libs/aiosignal")
1940 (synopsis "Callback manager for Python @code{asyncio} projects")
1941 (description "This Python module provides @code{Signal}, an abstraction to
1942register asynchronous callbacks. The @code{Signal} abstraction can be used
1943for adding, removing and dropping callbacks.")
1944 (license license:asl2.0)))
1945
1946(define-public python-aiohttp
1947 (package
1948 (name "python-aiohttp")
1949 (version "3.11.11")
1950 (source
1951 (origin
1952 (method url-fetch)
1953 (uri (pypi-uri "aiohttp" version))
1954 (sha256
1955 (base32 "0gihj076nm3863sqfnbh786621w1ad7lj7fq88d85wzbwvqwfjdv"))
1956 (snippet
1957 #~(begin
1958 (use-modules ((guix build utils)))
1959 ;; TODO: Unbundle the llhttp sources.
1960 ;; (delete-file-recursively "vendor")
1961 (delete-file "aiohttp/_http_parser.c")
1962 (delete-file "aiohttp/_http_writer.c")))))
1963 (build-system pyproject-build-system)
1964 (arguments
1965 (list
1966 #:test-flags
1967 '(list
1968 ;; This tests requires the 'proxy.py' module, not yet packaged.
1969 "--ignore=tests/test_proxy_functional.py"
1970 ;; These tests need brotli.
1971 "--ignore=tests/test_web_sendfile_functional.py"
1972 "--ignore=tests/test_web_functional.py"
1973 ;; These tests need pytest_codspeed
1974 "--ignore-glob=tests/test_benchmarks*"
1975 ;; These tests need python_on_whales
1976 "--ignore=tests/autobahn/test_autobahn.py"
1977 "-k"
1978 ;; These tests fail for unknown reasons (see:
1979 ;; https://github.com/aio-libs/aiohttp/issues/7130)
1980 (string-append
1981 "not test_no_warnings "
1982 "and not test_default_loop "
1983 "and not test_ctor_global_loop "
1984 "and not test_set_loop_default_loop "
1985
1986 ;; Disable brotli tests, because we’re not providing that optional
1987 ;; library.
1988 "and not test_feed_eof_no_err_brotli "
1989
1990 ;; Disable the following tests as they require
1991 ;; networking.
1992 "and not TestDeflateBuffer "
1993 "and not test_client_session_timeout_zero "
1994 "and not test_empty_body "
1995 "and not test_mark_formdata_as_processed[pyloop] "
1996 "and not test_receive_runtime_err[pyloop] "
1997
1998 ;; assert 'gzip, deflate' == 'gzip, deflate, br'
1999 "and not test_headers[pyloop] "
2000 ;; ~/.. does not resolve
2001 "and not test_add_static_path_resolution"))
2002 #:phases
2003 '(modify-phases %standard-phases
2004 (add-after 'unpack 'fix-tests
2005 (lambda _
2006 ;; Make sure the timestamp of this file is > 1990, because a few
2007 ;; tests like test_static_file_if_modified_since_past_date depend
2008 ;; on it.
2009 (let ((late-90s (* 60 60 24 365 30)))
2010 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
2011 (add-before 'build 'cythonize
2012 (lambda _
2013 ;; Adapted from the Makefile.
2014 (with-directory-excursion "aiohttp"
2015 (for-each
2016 (lambda (file)
2017 (invoke "cython" "-3"
2018 file "-I" "."))
2019 (find-files "." "_.*\\.pyx$"))))))))
2020 (propagated-inputs
2021 (list python-aiohappyeyeballs
2022 python-aiosignal
2023 python-async-timeout
2024 python-attrs
2025 python-frozenlist
2026 python-multidict
2027 python-propcache
2028 python-yarl))
2029 (native-inputs
2030 (list gunicorn-bootstrap
2031 python-cython
2032 python-freezegun
2033 python-pytest
2034 python-pytest-cov
2035 python-pytest-mock
2036 python-pytest-xdist
2037 python-re-assert
2038 python-setuptools
2039 python-wheel))
2040 (home-page "https://github.com/aio-libs/aiohttp/")
2041 (synopsis "Async HTTP client/server framework (asyncio)")
2042 (description "@code{aiohttp} is an asynchronous HTTP client/server
2043framework.
2044
2045Its main features are:
2046@itemize
2047@item Supports both client and server side of HTTP protocol.
2048@item Supports both client and server Web-Sockets out-of-the-box without the
2049Callback Hell.
2050@item Web-server has middlewares and pluggable routing.
2051@end itemize")
2052 (license license:asl2.0)))
2053
2054(define-public python-aiohttp-oauthlib
2055 (package
2056 (name "python-aiohttp-oauthlib")
2057 (version "0.1.0")
2058 (source
2059 (origin
2060 (method url-fetch)
2061 (uri (pypi-uri "aiohttp-oauthlib" version))
2062 (sha256
2063 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
2064 (build-system pyproject-build-system)
2065 (arguments (list #:tests? #f)) ; none included
2066 (propagated-inputs (list python-aiohttp python-oauthlib))
2067 (native-inputs (list python-setuptools python-setuptools-scm))
2068 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
2069 (synopsis "OAuthlib authentication support for aiohttp")
2070 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
2071provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
2072 (license license:isc)))
2073
2074(define-public python-aiohttp-client-cache
2075 (package
2076 (name "python-aiohttp-client-cache")
2077 (version "0.14.2")
2078 (source
2079 (origin
2080 (method git-fetch)
2081 (uri (git-reference
2082 (url "https://github.com/requests-cache/aiohttp-client-cache")
2083 (commit (string-append "v" version))))
2084 (file-name (git-file-name name version))
2085 (sha256
2086 (base32
2087 "17qa2sh63wa7b9ma40y2b6k9sjscc5vfwlmf46sv36l1mz9rmd4y"))))
2088 (build-system pyproject-build-system)
2089 (arguments
2090 (list
2091 #:test-flags
2092 ;; Run unit tests only which not require networking or additional setup.
2093 #~(list "--ignore=test/integration")))
2094 (native-inputs
2095 (list python-hatchling
2096 ;; TODO: Missing packages: pytest-clarity,
2097 ;; nox-poetry, types-aiofiles.
2098 python-async-timeout
2099 python-brotli
2100 python-faker
2101 python-pytest
2102 python-pytest-aiohttp
2103 python-pytest-asyncio
2104 python-pytest-xdist))
2105 (propagated-inputs
2106 (list python-aiofiles
2107 python-aiohttp
2108 python-aiosqlite
2109 python-attrs
2110 python-itsdangerous
2111 python-redis
2112 python-url-normalize))
2113 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
2114 (synopsis "Persistent cache for aiohttp requests")
2115 (description
2116 "This package is an asynchronous persistent caching library specifically
2117designed for @samp{aiohttp} requests in Python. With support for various
2118storage backends, it offers flexibility in how and where the cache is stored.
2119Please note that MongoDB and DynamoDB backends are not currently supported due
2120to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
2121 (license license:expat)))
2122
2123(define-public python-aiohttp-cors
2124 (package
2125 (name "python-aiohttp-cors")
2126 (version "0.8.1")
2127 (source
2128 (origin
2129 (method url-fetch)
2130 (uri (pypi-uri "aiohttp_cors" version))
2131 (sha256
2132 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
2133 (build-system pyproject-build-system)
2134 (arguments
2135 (list
2136 #:tests? #f)) ; network access is required to run tests
2137 (native-inputs
2138 (list python-setuptools
2139 python-wheel))
2140 (propagated-inputs
2141 (list python-aiohttp))
2142 (home-page "https://github.com/aio-libs/aiohttp-cors")
2143 (synopsis "CORS support for aiohttp")
2144 (description
2145 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
2146support for aiohttp asyncio-powered asynchronous HTTP server.")
2147 (license license:asl2.0)))
2148
2149(define-public python-aiohttp-retry
2150 (package
2151 (name "python-aiohttp-retry")
2152 (version "2.9.1")
2153 (source
2154 (origin
2155 (method git-fetch)
2156 (uri (git-reference
2157 (url "https://github.com/inyutin/aiohttp_retry")
2158 (commit (string-append "v" version))))
2159 (file-name (git-file-name name version))
2160 (sha256
2161 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
2162 (build-system pyproject-build-system)
2163 (native-inputs
2164 (list python-pytest
2165 python-pytest-aiohttp
2166 python-setuptools))
2167 (propagated-inputs
2168 (list python-aiohttp))
2169 (home-page "https://github.com/inyutin/aiohttp_retry")
2170 (synopsis "Simple retry client for aiohttp")
2171 (description
2172 "This package implements @code{RetryClient} for @code{aiohttp} to retry
2173connection to provided endpoint with timeouts logic or use:
2174
2175@itemize
2176@item @code{ExponentialRetry} with exponential backoff
2177@item @code{RandomRetry} for random backoff
2178@item @code{ListRetry} with backoff you predefine by list
2179@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
2180@item @code{JitterRetry} exponential retry with a bit of randomness
2181@end itemize")
2182 (license license:expat)))
2183
2184(define-public python-aiohttp-socks
2185 (package
2186 (name "python-aiohttp-socks")
2187 (version "0.10.1")
2188 (source
2189 (origin
2190 (method url-fetch)
2191 (uri (pypi-uri "aiohttp_socks" version))
2192 (sha256
2193 (base32
2194 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
2195 (build-system pyproject-build-system)
2196 (arguments (list #:tests? #false)) ;none included
2197 (propagated-inputs
2198 (list python-aiohttp python-socks))
2199 (native-inputs (list python-setuptools python-wheel))
2200 (home-page "https://github.com/romis2012/aiohttp-socks")
2201 (synopsis "SOCKS proxy connector for aiohttp")
2202 (description "This package provides a SOCKS proxy connector for
2203aiohttp. It supports SOCKS4(a) and SOCKS5.")
2204 (license license:asl2.0)))
2205
2206(define-public python-aiodns
2207 (package
2208 (name "python-aiodns")
2209 (version "3.5.0")
2210 (source
2211 (origin
2212 (method git-fetch)
2213 (uri (git-reference
2214 (url "https://github.com/saghul/aiodns")
2215 (commit (string-append "v" version))))
2216 (file-name (git-file-name name version))
2217 (sha256
2218 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
2219 (build-system pyproject-build-system)
2220 (arguments
2221 (list
2222 #:tests? #f)) ;tests require internet access
2223 (native-inputs
2224 (list python-pytest
2225 python-pytest-cov
2226 python-pytest-asyncio
2227 python-setuptools))
2228 (propagated-inputs (list python-pycares))
2229 (home-page "https://github.com/saghul/aiodns")
2230 (synopsis "Simple DNS resolver for asyncio")
2231 (description
2232 "@code{aiodns} provides a simple way for doing asynchronous DNS
2233resolutions with a synchronous looking interface by using
2234@url{https://github.com/saghul/pycares,pycares}.")
2235 (license license:expat)))
2236
2237(define-public python-aioquic
2238 (package
2239 (name "python-aioquic")
2240 (version "1.2.0")
2241 (source
2242 (origin
2243 (method url-fetch)
2244 (uri (pypi-uri "aioquic" version))
2245 (sha256
2246 (base32 "16bigrn5b46c7nmpzxhnlhh4y03hwc7dbd0mi5f8r53i7yxn64pr"))))
2247 (build-system pyproject-build-system)
2248 (arguments
2249 (list
2250 #:test-flags
2251 #~(list "-k" (string-join
2252 ;; AssertionError: AlertBadCertificate not raised
2253 (list "not test_verify_subject_no_subjaltname"
2254 ;; AttributeError: module
2255 ;; 'service_identity.cryptography' has no attribute
2256 ;; 'extract_patterns'
2257 "test_verify_subject_with_subjaltname"
2258 ;; AttributeError: module
2259 ;; 'service_identity.cryptography' has no attribute
2260 ;; 'extract_patterns'
2261 "test_verify_subject_with_subjaltname_ipaddress")
2262 " and not "))))
2263 (native-inputs
2264 (list nss-certs-for-test
2265 python-pytest
2266 python-setuptools
2267 python-wheel))
2268 (inputs
2269 (list openssl))
2270 (propagated-inputs
2271 (list python-certifi
2272 python-pylsqpack
2273 python-pyopenssl
2274 python-service-identity))
2275 (home-page "https://github.com/aiortc/aioquic")
2276 (synopsis "QUIC and HTTP3 implementation in Python")
2277 (description
2278 "@code{aioquic} is a library for the QUIC network protocol in Python.
2279It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
2280 (license license:bsd-3)))
2281
2282(define-public python-aiorpcx
2283 (package
2284 (name "python-aiorpcx")
2285 (version "0.25.0")
2286 (source
2287 (origin
2288 (method git-fetch)
2289 ;; PyPI misses the util.py file used for tests.
2290 (uri (git-reference
2291 (url "https://github.com/kyuupichan/aiorpcX")
2292 (commit version)))
2293 (file-name (git-file-name name version))
2294 (sha256
2295 (base32
2296 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
2297 (build-system pyproject-build-system)
2298 (arguments
2299 (list
2300 #:test-flags
2301 ;; This test opens a remote connection.
2302 #~(list "-k" "not test_create_connection_resolve_good")))
2303 (native-inputs (list python-pytest
2304 python-pytest-asyncio-0.26
2305 python-setuptools))
2306 (propagated-inputs
2307 (list python-attrs python-websockets))
2308 (home-page "https://github.com/kyuupichan/aiorpcX")
2309 (synopsis "Generic asyncio RPC implementation")
2310 (description
2311 "The aiorpcX library is a generic asyncio implementation of RPC suitable
2312for an application that is a client, server or both.
2313
2314The package includes a module with full coverage of JSON RPC versions 1.0 and
23152.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
2316comes with a SOCKS proxy client.")
2317 (license (list license:expat license:bsd-2))))
2318
2319(define-public python-aiostream
2320 (package
2321 (name "python-aiostream")
2322 (version "0.7.0")
2323 (source
2324 (origin
2325 (method git-fetch) ;no tests in PyPI archvie
2326 (uri (git-reference
2327 (url "https://github.com/vxgmichel/aiostream")
2328 (commit (string-append "v" version))))
2329 (file-name (git-file-name name version))
2330 (sha256
2331 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
2332 (build-system pyproject-build-system)
2333 (native-inputs
2334 (list python-pytest
2335 python-pytest-cov
2336 python-pytest-asyncio
2337 python-setuptools))
2338 (propagated-inputs
2339 (list python-typing-extensions))
2340 (home-page "https://github.com/vxgmichel/aiostream")
2341 (synopsis "Generator-based operators for asynchronous iteration")
2342 (description "@code{aiostream} provides a collection of stream operators that can
2343be combined to create asynchronous pipelines of operations. It can be seen as an
2344asynchronous version of @code{itertools}, although some aspects are slightly
2345different. All the provided operators return a unified interface called a stream. A
2346stream is an enhanced asynchronous iterable.")
2347 (license license:gpl3)))
2348
2349(define-public python-asgiref
2350 (package
2351 (name "python-asgiref")
2352 (version "3.8.1")
2353 (source (origin
2354 (method url-fetch)
2355 (uri (pypi-uri "asgiref" version))
2356 (sha256
2357 (base32 "146mhkn3zp2bqf7j6r3chdlvfzgs5x1lrnqahsllgjdyl20bshy3"))))
2358 (build-system pyproject-build-system)
2359 (native-inputs
2360 (list python-mypy python-pytest python-pytest-asyncio python-setuptools
2361 python-wheel))
2362 (home-page "https://github.com/django/asgiref/")
2363 (synopsis "ASGI specs, helper code, and adapters")
2364 (description
2365 "ASGI is a standard for Python asynchronous web apps and servers to
2366communicate with each other, and positioned as an asynchronous successor to
2367WSGI. This package includes libraries for implementing ASGI servers.")
2368 (license license:bsd-3)))
2369
2370(define-public python-asgi-csrf
2371 (package
2372 (name "python-asgi-csrf")
2373 (version "0.11")
2374 (source (origin
2375 (method git-fetch) ;for tests
2376 (uri (git-reference
2377 (url "https://github.com/simonw/asgi-csrf")
2378 (commit version)))
2379 (file-name (git-file-name name version))
2380 (sha256
2381 (base32
2382 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))))
2383 (build-system pyproject-build-system)
2384 (propagated-inputs (list python-itsdangerous python-multipart))
2385 (native-inputs (list python-asgi-lifespan
2386 python-httpx
2387 python-pytest
2388 python-pytest-asyncio
2389 python-starlette
2390 python-setuptools
2391 python-wheel))
2392 (home-page "https://github.com/simonw/asgi-csrf")
2393 (synopsis "ASGI middleware for protecting against CSRF attacks")
2394 (description "This Asynchronous Server Gateway Interface (ASGI)
2395middleware protects against Cross-site request forgery (CSRF) attacks.
2396It implements the Double Submit Cookie pattern, where a cookie is set
2397that is then compared to a @code{csrftoken} hidden form field or a
2398@code{x-csrftoken} HTTP header.")
2399 (license license:asl2.0)))
2400
2401(define-public python-asgi-lifespan
2402 (package
2403 (name "python-asgi-lifespan")
2404 (version "2.1.0")
2405 (source (origin
2406 (method git-fetch) ;for tests
2407 (uri (git-reference
2408 (url "https://github.com/florimondmanca/asgi-lifespan")
2409 (commit version)))
2410 (file-name (git-file-name name version))
2411 (sha256
2412 (base32
2413 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
2414 (build-system pyproject-build-system)
2415 (arguments
2416 (list
2417 #:test-flags
2418 '(list "-c" "/dev/null" ;ignore coverage-related options
2419 "-k"
2420 (string-append
2421 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
2422 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
2423 " or test_lifespan_manager[trio-None-BodyFailed-None]"
2424 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
2425 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
2426 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
2427 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
2428 " or test_lifespan_timeout[trio-slow_shutdown]"
2429 " or test_lifespan_not_supported[trio-http_only]"
2430 " or test_lifespan_not_supported[trio-http_no_assert]"
2431 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
2432 ")"))
2433 #:phases
2434 '(modify-phases %standard-phases
2435 (add-after 'unpack 'compatibility
2436 (lambda _
2437 ;; httpx version 0.28.0 removed the "app" shortcut.
2438 (substitute* "tests/test_manager.py"
2439 (("app=manager.app")
2440 "transport=httpx.ASGITransport(manager.app)")))))))
2441 (native-inputs (list python-httpx
2442 python-pytest
2443 python-pytest-asyncio
2444 python-pytest-trio
2445 python-starlette
2446 python-setuptools
2447 python-wheel))
2448 (propagated-inputs (list python-sniffio))
2449 (home-page "https://github.com/florimondmanca/asgi-lifespan")
2450 (synopsis "Programmatic startup/shutdown of ASGI apps")
2451 (description "Programmatically send startup/shutdown lifespan events
2452into Asynchronous Server Gateway Interface (ASGI) applications. When
2453used in combination with an ASGI-capable HTTP client such as HTTPX, this
2454allows mocking or testing ASGI applications without having to spin up an
2455ASGI server.")
2456 (license license:expat)))
2457
2458(define-public python-a2wsgi
2459 (package
2460 (name "python-a2wsgi")
2461 (version "1.10.7")
2462 (source (origin
2463 (method url-fetch)
2464 (uri (pypi-uri "a2wsgi" version))
2465 (sha256
2466 (base32
2467 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
2468 (build-system pyproject-build-system)
2469 (arguments
2470 (list
2471 #:test-flags
2472 #~(list "-k" (string-join
2473 (list "not test_starlette_stream_response"
2474 "test_starlette_base_http_middleware"
2475 "test_baize_stream_response"
2476 ;; Fails because of harmless whitespace differences.
2477 "test_wsgi_post")
2478 " and not "))
2479 #:build-backend "pdm.backend"))
2480 (native-inputs
2481 (list python-pdm-backend
2482 python-pytest
2483 ;; python-baize ; not packed yet
2484 python-httpx-bootstrap
2485 ;; Cycle: python-a2wsgi->python-uvicorn->
2486 ;; python-httpx->python-starlette->python-a2wsgi
2487 ;; python-starlette
2488 python-pytest-asyncio))
2489 (home-page "https://github.com/abersheeran/a2wsgi")
2490 (synopsis "Convert WSGI to ASGI or vice versa")
2491 (description
2492 "This program converts a WSGI program to an ASGI program or the other
2493way around. It depends only on the Python standard library.")
2494 (license license:asl2.0)))
2495
2496(define-public python-httpauth
2497 (package
2498 (name "python-httpauth")
2499 (version "0.4.1")
2500 (source (origin
2501 (method url-fetch)
2502 (uri (pypi-uri "httpauth" version))
2503 (sha256
2504 (base32
2505 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
2506 (build-system pyproject-build-system)
2507 (native-inputs (list python-pytest python-setuptools python-wheel))
2508 (home-page "https://github.com/jonashaag/httpauth")
2509 (synopsis "WSGI HTTP Digest Authentication middleware")
2510 (description "@code{python-httpauth} is WSGI middleware that secures some/all
2511routes using HTTP Digest Authentication.")
2512 (license license:bsd-2)))
2513
2514(define-public python-css-html-js-minify
2515 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
2516 (revision "0"))
2517 (package
2518 (name "python-css-html-js-minify")
2519 (version (git-version "2.5.5" revision commit))
2520 (source
2521 (origin
2522 (method git-fetch)
2523 (uri (git-reference
2524 (url "https://github.com/juancarlospaco/css-html-js-minify")
2525 (commit commit)))
2526 (file-name (git-file-name name version))
2527 (sha256
2528 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
2529 (build-system pyproject-build-system)
2530 (arguments
2531 (list
2532 #:phases
2533 #~(modify-phases %standard-phases
2534 (add-after 'unpack 'relax-requirements
2535 (lambda _
2536 (substitute* "setup.cfg"
2537 (("^tests_require.*") "")))))))
2538 (native-inputs (list python-pytest python-setuptools))
2539 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
2540 (synopsis "CSS/HTML/JS minifier")
2541 (description
2542 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
2543 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
2544 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
2545 ;; looks like the user can choose a license.
2546 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
2547
2548(define-public python-aws-sam-translator
2549 (package
2550 (name "python-aws-sam-translator")
2551 (version "1.99.0")
2552 (source
2553 (origin
2554 (method git-fetch) ; no tests in PyPI release
2555 (uri (git-reference
2556 (url "https://github.com/aws/serverless-application-model")
2557 (commit (string-append "v" version))))
2558 (file-name (git-file-name name version))
2559 (sha256
2560 (base32 "1k9a8r0kfjsrxk5z4yhipcynr2sqcl7lpc1xmdblxk76cqvsmkb3"))))
2561 (build-system pyproject-build-system)
2562 (arguments
2563 (list
2564 #:test-flags
2565 #~(list "--numprocesses" (number->string (parallel-job-count))
2566 "--ignore=tests/bin/test_public_interface.py"
2567 "tests")
2568 #:phases
2569 #~(modify-phases %standard-phases
2570 (add-after 'unpack 'fix-pytest-config
2571 (lambda _
2572 ;; Drop test coverage requirements.
2573 (substitute* "pytest.ini"
2574 ((".*addopts.*") ""))))
2575 (add-before 'check 'pre-check
2576 (lambda _
2577 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
2578 (native-inputs
2579 (list python-pytest
2580 python-setuptools
2581 python-pytest-xdist
2582 python-parameterized
2583 python-pyyaml))
2584 (propagated-inputs
2585 (list python-boto3
2586 python-jsonschema
2587 python-pydantic-2
2588 python-typing-extensions))
2589 (home-page "https://github.com/aws/serverless-application-model")
2590 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
2591 (description
2592 "AWS SAM Translator is a library that transform @dfn{Serverless Application
2593Model} (SAM) templates into AWS CloudFormation templates.")
2594 (license license:asl2.0)))
2595
2596(define-public python-aws-xray-sdk
2597 (package
2598 (name "python-aws-xray-sdk")
2599 (version "2.14.0")
2600 (home-page "https://github.com/aws/aws-xray-sdk-python")
2601 (source (origin
2602 (method git-fetch)
2603 (uri (git-reference (url home-page) (commit version)))
2604 (file-name (git-file-name name version))
2605 (sha256
2606 (base32
2607 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
2608 (build-system pyproject-build-system)
2609 (arguments
2610 (list
2611 #:test-flags
2612 '(list ;; Tries to connect to external network resources
2613 "--ignore=tests/ext/aiohttp/test_client.py"
2614 "--ignore=tests/ext/httplib/test_httplib.py"
2615 "--ignore=tests/ext/httpx"
2616 "--ignore=tests/ext/requests/test_requests.py"
2617 ;; TODO: How to configure Django for these tests?
2618 "--ignore=tests/ext/django"
2619 ;; These tests require packages not yet in Guix.
2620 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
2621 "--ignore=tests/ext/aiohttp/test_middleware.py"
2622 "--ignore=tests/ext/pg8000/test_pg8000.py"
2623 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
2624 "--ignore=tests/ext/pymysql/test_pymysql.py"
2625 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
2626 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
2627 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
2628 "--ignore=tests/test_async_recorder.py"
2629 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
2630 "--ignore-glob=tests/ext/sqlalchemy*"
2631 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
2632 ;; FIXME: Why is this failing?
2633 "--ignore=tests/test_patcher.py"
2634 "--ignore=tests/test_lambda_context.py")
2635 #:phases
2636 '(modify-phases %standard-phases
2637 (add-before 'check 'pre-check
2638 (lambda _
2639 ;; Allow "import tests.utils" to work as expected.
2640 (setenv "PYTHONPATH" (getcwd)))))))
2641 (native-inputs
2642 (list ;; These are required for the test suite.
2643 python-aiohttp
2644 python-bottle
2645 python-flask
2646 python-flask-sqlalchemy
2647 python-httpx
2648 python-mock
2649 python-pymysql
2650 python-pytest
2651 python-pytest-asyncio-0.26
2652 python-pytest-benchmark
2653 python-setuptools
2654 python-sqlalchemy
2655 python-webtest))
2656 (propagated-inputs
2657 (list python-botocore
2658 python-jsonpickle
2659 python-requests
2660 python-wrapt))
2661 (synopsis "Profile applications on AWS X-Ray")
2662 (description
2663 "The AWS X-Ray SDK for Python enables Python developers to record and
2664emit information from within their applications to the AWS X-Ray service.")
2665 (license license:asl2.0)))
2666
2667(define-public python-publicsuffixlist
2668 (package
2669 (name "python-publicsuffixlist")
2670 (version "1.0.2.20250202")
2671 (source
2672 (origin
2673 (method url-fetch)
2674 (uri (pypi-uri "publicsuffixlist" version))
2675 (sha256
2676 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
2677 (build-system pyproject-build-system)
2678 (arguments (list #:test-backend #~'unittest))
2679 (native-inputs (list python-setuptools))
2680 (home-page "https://github.com/ko-zu/psl")
2681 (synopsis "Public suffix list for Python")
2682 (description
2683 "This package provides an implementation of
2684@url{https://publicsuffix.org/, Public Suffix List } as Python library.
2685
2686Features:
2687@itemize
2688@item supports IDN (unicode and punycoded)
2689@item shipped with built-in PSL and an updater script
2690@item written in Pure Python with no library dependencies
2691@end itemize")
2692 (license license:mpl2.0)))
2693
2694(define-public python-pycognito
2695 (package
2696 (name "python-pycognito")
2697 (version "2024.5.1")
2698 (source
2699 (origin
2700 (method url-fetch)
2701 (uri (pypi-uri "pycognito" version))
2702 (sha256
2703 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
2704 (build-system pyproject-build-system)
2705 (arguments
2706 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
2707 (list #:tests? #f))
2708 (native-inputs
2709 (list python-setuptools))
2710 (propagated-inputs
2711 (list python-boto3
2712 python-envs
2713 python-pyjwt
2714 python-requests))
2715 (home-page "https://github.com/pvizeli/pycognito")
2716 (synopsis "Python library for using AWS Cognito")
2717 (description
2718 "This package provides a Python class to integrate Boto3's Cognito
2719client so it is easy to login users, with @acronym{Secure Remote Password,
2720SRP} support.")
2721 (license license:asl2.0)))
2722
2723(define-public python-python3-saml
2724 (package
2725 (name "python-python3-saml")
2726 (version "1.16.0")
2727 (source
2728 (origin
2729 (method git-fetch)
2730 (uri (git-reference
2731 (url "https://github.com/SAML-Toolkits/python3-saml")
2732 (commit (string-append "v" version))))
2733 (file-name (git-file-name name version))
2734 (sha256
2735 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
2736 (build-system pyproject-build-system)
2737 (arguments
2738 (list
2739 ;; 214 tests pass, 50 fail; many fail because of required Internet
2740 ;; access or because of assumptions about the location of test files.
2741 #:tests? #false
2742 #:phases
2743 #~(modify-phases %standard-phases
2744 ;; FIXME: This should be fixed in python-xmlsec
2745 (add-before 'check 'pre-check
2746 (lambda* (#:key inputs #:allow-other-keys)
2747 (let ((lib (search-input-file inputs
2748 "lib/libxmlsec1-openssl.so")))
2749 (setenv "LD_LIBRARY_PATH" (dirname lib))))))))
2750 (native-inputs
2751 (list python-freezegun
2752 python-poetry-core))
2753 (inputs
2754 (list xmlsec-openssl))
2755 (propagated-inputs
2756 (list python-isodate
2757 python-lxml
2758 python-xmlsec))
2759 (home-page "https://github.com/SAML-Toolkits/python3-saml")
2760 (synopsis "Saml Python toolkit")
2761 (description
2762 "The SAML Python Toolkit lets you add SAML support to your Python
2763software.")
2764 (license license:expat)))
2765
2766(define-public python-ovh
2767 (package
2768 (name "python-ovh")
2769 (version "1.1.0")
2770 (source (origin
2771 (method url-fetch)
2772 (uri (pypi-uri "ovh" version))
2773 (sha256
2774 (base32
2775 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
2776 (build-system pyproject-build-system)
2777 (arguments (list #:tests? #f)) ; XXX: tests require networking
2778 (propagated-inputs (list python-requests))
2779 (native-inputs (list python-setuptools))
2780 (home-page "https://api.ovh.com")
2781 (synopsis "Interact with OVHcloud APIs")
2782 (description "This package provides the official module to perform HTTP requests
2783to the OVHcloud APIs.")
2784 (license license:bsd-3)))
2785
2786(define-public python-cbor2
2787 (package
2788 (name "python-cbor2")
2789 (version "5.4.2.post1")
2790 (source
2791 (origin
2792 (method url-fetch)
2793 (uri (pypi-uri "cbor2" version))
2794 (sha256
2795 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
2796 (build-system pyproject-build-system)
2797 (native-inputs
2798 (list python-pytest
2799 python-pytest-cov
2800 python-setuptools
2801 python-setuptools-scm
2802 python-wheel))
2803 (home-page "https://github.com/agronholm/cbor2")
2804 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
2805 (description "This Python library provides encoding and decoding for the
2806Concise Binary Object
2807Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
28088949}) serialization format. The specification is fully compatible with the
2809original RFC 7049. Among its features are:
2810@itemize
2811@item Simple API like the @code{json} or @code{pickle} modules.
2812@item Support many CBOR tags with stdlib objects.
2813@item Generic tag decoding.
2814@item Shared value references including cyclic references.
2815@item String references compact encoding with repeated strings replaced with
2816indices.
2817@item Optional C module backend tested on big- and little-endian architectures.
2818@item Extensible tagged value handling using tag_hook and object_hook on
2819decode and default on encode.
2820@end itemize")
2821 (license license:expat)))
2822
2823(define-public python-cfn-lint
2824 (package
2825 (name "python-cfn-lint")
2826 (version "1.38.1")
2827 (source
2828 (origin
2829 (method git-fetch)
2830 (uri (git-reference
2831 (url "https://github.com/aws-cloudformation/cfn-lint")
2832 (commit (string-append "v" version))))
2833 (file-name (git-file-name name version))
2834 (sha256
2835 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
2836 (build-system pyproject-build-system)
2837 (arguments
2838 (list
2839 ;; tests: 2136 passed, 11 deselected, 1 warning
2840 #:test-flags
2841 #~(list "--ignore=test/integration/"
2842 "-k" (string-join
2843 ;; Tests failing on doctest or comparing diff.
2844 (list "not test_build_graph"
2845 "test_good_template"
2846 "test_success_run"
2847 "test_update_docs"
2848 ;; ImportError: Missing optional dependencies sarif
2849 "test_sarif_formatter")
2850 " and not "))
2851 #:phases
2852 #~(modify-phases %standard-phases
2853 (add-after 'unpack 'remove-deprecated
2854 (lambda _
2855 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
2856 (("deprecated\": \"2025")
2857 "deprecated\": \"2125")))))))
2858 (native-inputs
2859 (list python-defusedxml
2860 python-pydot
2861 python-pytest
2862 python-setuptools))
2863 (propagated-inputs
2864 (list python-aws-sam-translator
2865 python-jsonpatch
2866 python-networkx
2867 python-pyyaml
2868 python-regex
2869 python-sympy
2870 python-typing-extensions
2871 ;; [optional]
2872 python-junit-xml))
2873 (home-page "https://github.com/aws-cloudformation/cfn-lint")
2874 (synopsis "Validate CloudFormation templates")
2875 (description
2876 "This package lets you validate CloudFormation YAML/JSON templates against
2877the CloudFormation spec and additional checks. Includes checking valid values
2878for resource properties and best practices.")
2879 (license license:expat)))
2880
2881(define-public python-requests-cache
2882 (package
2883 (name "python-requests-cache")
2884 (version "1.2.1")
2885 (source
2886 (origin
2887 (method url-fetch)
2888 (uri (pypi-uri "requests_cache" version))
2889 (sha256
2890 (base32 "1l8i4l2pd26gbrlcdb5z056wvsqfr3vvbyqq2f8x1f65zn3ckav8"))))
2891 (build-system pyproject-build-system)
2892 (arguments
2893 (list
2894 #:test-flags
2895 #~(list "--numprocesses" (number->string (parallel-job-count))
2896 ;; These tests require access to external services, e.g. MongoDB
2897 ;; and Redis.
2898 "--ignore=tests/integration"
2899 ;; AttributeError: <class 'requests.adapters.HTTPAdapter'> does
2900 ;; not have the attribute 'get_connection_with_tls_context'
2901 "-k" "not test_mock_session")
2902 #:phases
2903 #~(modify-phases %standard-phases
2904 (add-before 'check 'pre-check
2905 (lambda _
2906 ;; PermissionError: [Errno 13] Permission denied:
2907 ;; '/homeless-shelter'
2908 (setenv "HOME" "/tmp"))))))
2909 (native-inputs
2910 (list python-poetry-core
2911 python-pytest
2912 python-pytest-rerunfailures
2913 python-pytest-xdist
2914 python-requests-mock
2915 python-responses
2916 python-rich
2917 python-tenacity
2918 python-time-machine
2919 python-timeout-decorator))
2920 (propagated-inputs
2921 (list python-attrs
2922 python-boto3
2923 python-bson
2924 python-cattrs
2925 python-itsdangerous
2926 python-orjson
2927 python-platformdirs
2928 python-pymongo
2929 python-pyyaml
2930 python-redis
2931 python-requests
2932 python-ujson
2933 python-url-normalize
2934 python-urllib3))
2935 (home-page "https://github.com/requests-cache/requests-cache")
2936 (synopsis "Persistent HTTP cache for Python requests")
2937 (description
2938 "This package provides a drop-in replacement for @code{requests.Session}
2939with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
2940responses as planin JSON/YAML file or save responses as plain JSON/YAML
2941files.")
2942 (license license:bsd-2)))
2943
2944(define-public python-requests-futures
2945 (package
2946 (name "python-requests-futures")
2947 (version "1.0.2")
2948 (source
2949 (origin
2950 (method url-fetch)
2951 (uri (pypi-uri "requests_futures" version))
2952 (sha256
2953 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
2954 (build-system pyproject-build-system)
2955 (native-inputs
2956 (list python-greenlet
2957 python-pytest
2958 python-pytest-httpbin
2959 python-setuptools
2960 python-werkzeug))
2961 (propagated-inputs (list python-requests))
2962 (home-page "https://github.com/ross/requests-futures")
2963 (synopsis "Asynchronous Python HTTP for Humans")
2964 (description
2965 "This package provides and add-on the Python Requests HTTP library to run
2966code asynchronously.")
2967 (license license:asl2.0)))
2968
2969(define-public python-s3path
2970 (package
2971 (name "python-s3path")
2972 (version "0.6.4")
2973 (source
2974 (origin
2975 (method url-fetch)
2976 (uri (pypi-uri "s3path" version))
2977 (sha256
2978 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
2979 (build-system pyproject-build-system)
2980 (arguments
2981 (list
2982 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
2983 #:tests? #f))
2984 (native-inputs
2985 (list python-setuptools
2986 python-wheel))
2987 (propagated-inputs
2988 (list python-boto3
2989 python-smart-open))
2990 (home-page "https://github.com/liormizr/s3path")
2991 (synopsis "Pathlib extension for AWS S3 Service")
2992 (description
2993 "S3Path provide a Python convenient File-System/Path like interface for
2994AWS S3 Service using boto3 S3 resource as a driver.")
2995 (license license:asl2.0)))
2996
2997(define-public python-falcon
2998 (package
2999 (name "python-falcon")
3000 (version "4.0.2")
3001 (source
3002 (origin
3003 ;; Use git, as there are some test files missing from the PyPI release,
3004 ;; such as 'examples' directory.
3005 (method git-fetch)
3006 (uri (git-reference
3007 (url "https://github.com/falconry/falcon")
3008 (commit version)))
3009 (file-name (git-file-name name version))
3010 (sha256
3011 (base32
3012 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
3013 (build-system pyproject-build-system)
3014 (arguments
3015 (list
3016 #:test-flags
3017 '(list "-k" "not slow"
3018 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
3019 #:phases
3020 '(modify-phases %standard-phases
3021 (add-before 'check 'pre-check
3022 (lambda _
3023 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
3024 (setenv "FALCON_TESTING_SESSION" "Y")
3025 (setenv "PYTHONASYNCIODEBUG" "1")
3026 (setenv "HOME" "/tmp"))))))
3027 (propagated-inputs
3028 (list python-mimeparse))
3029 (native-inputs
3030 (list python-aiofiles
3031 python-cbor2
3032 python-cython ;for faster binaries
3033 python-fakeredis
3034 python-httpx
3035 python-mujson
3036 python-msgpack
3037 python-orjson
3038 python-pecan
3039 python-pillow
3040 python-pytest
3041 python-pytest-asyncio
3042 python-pytest-runner
3043 python-pyyaml
3044 python-rapidjson
3045 python-requests
3046 python-setuptools
3047 python-testtools
3048 python-ujson
3049 python-websockets
3050 python-wheel))
3051 (home-page "https://falconframework.org")
3052 (synopsis "Web framework for building APIs and application backends")
3053 (description "Falcon is a web API framework for building microservices,
3054application backends and higher-level frameworks. Among its features are:
3055@itemize
3056@item Optimized and extensible code base
3057@item Routing via URI templates and REST-inspired resource
3058classes
3059@item Access to headers and bodies through request and response
3060classes
3061@item Request processing via middleware components and hooks
3062@item Idiomatic HTTP error responses
3063@item Straightforward exception handling
3064@item Unit testing support through WSGI helpers and mocks
3065@item Compatible with both CPython and PyPy
3066@item Cython support for better performance when used with CPython
3067@end itemize")
3068 (license license:asl2.0)))
3069
3070(define-public python-falcon-cors
3071 (package
3072 (name "python-falcon-cors")
3073 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
3074 (revision . "0")))
3075 (version (git-version "1.1.7"
3076 (assoc-ref properties 'revision)
3077 (assoc-ref properties 'commit)))
3078 (source
3079 (origin
3080 (method git-fetch)
3081 (uri (git-reference
3082 (url "https://github.com/lwcolton/falcon-cors")
3083 (commit (assoc-ref properties 'commit))))
3084 (file-name (git-file-name name version))
3085 (sha256
3086 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
3087 (build-system pyproject-build-system)
3088 (arguments
3089 (list
3090 ;; XXX: The last commit's tests are uncompatible with the more recent
3091 ;; version of python-falcon.
3092 #:tests? #f))
3093 (native-inputs
3094 (list python-falcon python-mock python-pynose python-setuptools))
3095 (home-page "https://github.com/lwcolton/falcon-cors")
3096 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
3097 (description
3098 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
3099support for Falcon. It allows applying a specially crafted CORS object to the
3100incoming requests, enabling the ability to serve resources over a different
3101origin than that of the web application.")
3102 (license license:asl2.0)))
3103
3104(define-public python-furl
3105 (package
3106 (name "python-furl")
3107 (version "2.1.4")
3108 (source
3109 (origin
3110 (method url-fetch)
3111 (uri (pypi-uri "furl" version))
3112 (sha256
3113 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
3114 (build-system pyproject-build-system)
3115 (arguments
3116 (list #:test-flags
3117 #~(list "-k" (string-append "not test_hosts"
3118 " and not test_netloc"
3119 " and not test_odd_urls"))))
3120 (propagated-inputs
3121 (list python-orderedmultidict python-six))
3122 (native-inputs
3123 (list python-flake8 python-pytest python-setuptools python-wheel))
3124 (home-page "https://github.com/gruns/furl")
3125 (synopsis "URL manipulation in Python")
3126 (description "Furl provides an easy-to-use alternative to the
3127@code{urllib} and @code{urlparse} modules for manipulating URLs.")
3128 (license license:unlicense)))
3129
3130(define-public python-httplib2
3131 (package
3132 (name "python-httplib2")
3133 (version "0.22.0")
3134 (source
3135 (origin
3136 ;; Tests not included in the release tarball.
3137 (method git-fetch)
3138 (uri (git-reference
3139 (url "https://github.com/httplib2/httplib2")
3140 (commit (string-append "v" version))))
3141 (file-name (git-file-name name version))
3142 (sha256
3143 (base32
3144 "1zkp3glv0iha7p68p5m0sb8mrrammkdc0mx32517xry52s4iva7g"))))
3145 (build-system pyproject-build-system)
3146 (arguments
3147 (list
3148 #:phases
3149 #~(modify-phases %standard-phases
3150 (add-after 'unpack 'adjust-test-requirements
3151 (lambda _
3152 (substitute* "requirements-test.txt"
3153 (("==") ">=")))))))
3154 (native-inputs
3155 (list python-cryptography
3156 python-future
3157 python-mock
3158 python-pyparsing
3159 python-pytest
3160 python-pytest-cov
3161 python-pytest-randomly
3162 python-pytest-timeout
3163 python-setuptools))
3164 (home-page "https://github.com/httplib2/httplib2")
3165 (synopsis "Comprehensive HTTP client library")
3166 (description
3167 "A comprehensive HTTP client library supporting many features left out of
3168other HTTP libraries.")
3169 (license license:expat)))
3170
3171(define-public python-cheroot
3172 (package
3173 (name "python-cheroot")
3174 (version "10.0.1")
3175 (source
3176 (origin
3177 (method url-fetch)
3178 (uri (pypi-uri "cheroot" version))
3179 (sha256
3180 (base32
3181 "0h0p3fnpa4dxi589s7ljlzb6p3mhqdivb3pc2f36pljqfrwjzf70"))))
3182 (build-system pyproject-build-system)
3183 (arguments
3184 (list
3185 #:test-flags
3186 #~(list "--cov=cheroot"
3187 ;; Tests are flaky in parallel invocation.
3188 ;; "--numprocesses=auto"
3189 "--doctest-modules"
3190 "--showlocals"
3191 "-k" (string-append
3192 ;; Disable test requiring networking.
3193 "not test_tls_client_auth"
3194 ;; TypeError: HTTPConnection.request() got an unexpected keyword
3195 ;; argument 'chunked'
3196 " and not test_peercreds_unix_sock"
3197 " and not test_peercreds_unix_sock_with_lookup"))
3198 #:phases
3199 #~(modify-phases %standard-phases
3200 (replace 'check
3201 (lambda* (#:key tests? test-flags #:allow-other-keys)
3202 (when tests?
3203 (with-directory-excursion "/tmp"
3204 (apply invoke "pytest" "-v"
3205 (append test-flags (list #$output))))))))))
3206 (propagated-inputs
3207 (list python-jaraco-functools python-more-itertools))
3208 (native-inputs
3209 (list python-jaraco-text
3210 python-portend
3211 python-pyopenssl
3212 python-pypytools
3213 python-pytest-cov
3214 python-pytest-mock
3215 python-requests
3216 python-requests-toolbelt
3217 python-requests-unixsocket2
3218 python-setuptools
3219 python-setuptools-scm
3220 python-trustme
3221 python-wheel))
3222 (home-page "https://cheroot.cherrypy.dev")
3223 (synopsis "Highly-optimized, pure-python HTTP server")
3224 (description
3225 "Cheroot is a high-performance, pure-Python HTTP server.")
3226 (license license:bsd-3)))
3227
3228(define-public python-cherrypy
3229 (package
3230 (name "python-cherrypy")
3231 (version "18.10.0")
3232 (source
3233 (origin
3234 (method git-fetch)
3235 (uri (git-reference
3236 (url "https://github.com/cherrypy/cherrypy")
3237 (commit (string-append "v" version))))
3238 (file-name (git-file-name name version))
3239 (sha256
3240 (base32 "1mhs64z75mj3rk4rgxc3xm1yksaj253rj9czhk4632blz5yi0kbn"))))
3241 (build-system pyproject-build-system)
3242 (arguments
3243 (list
3244 #:test-flags
3245 #~(map
3246 (lambda (test)
3247 (string-append "--deselect=cherrypy/test/" test))
3248 (list
3249 ;; XXX: Unraisable exceptions.
3250 "test_config_server.py::ServerConfigTests::testMaxRequestSize"
3251 "test_core.py::CoreRequestHandlingTest::testRanges"
3252 "test_core.py::CoreRequestHandlingTest::testRedirect"
3253 "test_encoding.py::EncodingTests::\
3254test_multipart_decoding_bigger_maxrambytes"
3255 "test_encoding.py::EncodingTests::\
3256test_test_http.py::HTTPTests::test_post_filename_with_special_characters"
3257 "test_http.py::HTTPTests::test_post_multipart"
3258 "test_http.py::HTTPTests::test_post_filename_with_special_characters"
3259 "test_mime.py::SafeMultipartHandlingTest::test_Flash_Upload"
3260 "test_tutorials.py::TutorialTest::test09Files"))))
3261 (propagated-inputs
3262 (list python-cheroot
3263 python-jaraco-collections
3264 python-more-itertools
3265 python-portend
3266 python-zc-lockfile))
3267 (native-inputs
3268 (list python-objgraph
3269 python-path
3270 python-pytest
3271 python-pytest-cov
3272 python-pytest-forked
3273 python-pytest-services
3274 python-pytest-sugar
3275 python-requests-toolbelt
3276 python-setuptools))
3277 (home-page "https://www.cherrypy.dev")
3278 (synopsis "Object-Oriented HTTP framework")
3279 (description
3280 "CherryPy is a pythonic, object-oriented web framework. It helps in
3281building web applications in the same way any other object-oriented Python
3282program would be built.")
3283 (license license:bsd-3)))
3284
3285(define-public httpie
3286 (package
3287 (name "httpie")
3288 (version "3.2.4")
3289 (source
3290 (origin
3291 (method git-fetch)
3292 (uri (git-reference
3293 (url "https://github.com/httpie/cli")
3294 (commit version)))
3295 (file-name (git-file-name name version))
3296 (sha256
3297 (base32 "0ii11xfqkbawg1v8dlli4fqq5k3yc2v65z3j7k3p4gng998s94mr"))))
3298 (build-system pyproject-build-system)
3299 (arguments
3300 (list
3301 #:phases
3302 #~(modify-phases %standard-phases
3303 (add-before 'build 'remove-unnecessary-dependencies
3304 ;; Remove pip and setuptools dependencies so sanity-check.py passes.
3305 (lambda _
3306 (substitute* "setup.cfg"
3307 (("(pip|setuptools)") "")))))
3308 #:test-flags
3309 ;; test_plugins_cli.py communicates through subprocesses
3310 ;; mocking stdin, which does not work in the build container.
3311 ;; test_ssl.py cannot find the SSL certificates.
3312 ;; test_binary.py fails for an unknown reason.
3313 #~(list "--ignore=tests/test_plugins_cli.py"
3314 "--ignore=tests/test_ssl.py"
3315 "--ignore=tests/test_binary.py")))
3316 (native-inputs (list python-pytest
3317 python-pytest-httpbin
3318 python-pytest-mock
3319 python-responses
3320 python-setuptools
3321 python-werkzeug
3322 python-wheel))
3323 (propagated-inputs
3324 (list python-charset-normalizer
3325 python-defusedxml
3326 python-multidict
3327 python-pygments
3328 python-requests
3329 python-requests-toolbelt
3330 python-rich))
3331 (home-page "https://httpie.io")
3332 (synopsis "Modern, user-friendly command-line HTTP client for the API era")
3333 (description
3334 "A command line HTTP client with an intuitive UI, JSON support,
3335syntax highlighting, wget-like downloads, plugins, and more. It consists of
3336a single http command designed for painless debugging and interaction with
3337HTTP servers, RESTful APIs, and web services.")
3338 ;; CVE-2019-10751 was fixed in 1.0.3.
3339 (properties `((lint-hidden-cve "CVE-2019-10751")))
3340 (license license:bsd-3)))
3341
3342(define-public python-parfive
3343 (package
3344 (name "python-parfive")
3345 (version "2.2.0")
3346 (source
3347 (origin
3348 (method url-fetch)
3349 (uri (pypi-uri "parfive" version))
3350 (sha256
3351 (base32 "16rf02jhjr9lij8s2gqmvs01vx8kiv9f2535dnnziqwqv14d21yy"))))
3352 (build-system pyproject-build-system)
3353 (arguments
3354 (list
3355 #:test-flags
3356 ;; Disable tests requiring network access.
3357 #~(list "-k" (string-join
3358 (list "not test_ftp"
3359 "test_ftp_pasv_command"
3360 "test_ftp_http")
3361 " and not "))))
3362 (native-inputs
3363 (list python-pytest
3364 python-pytest-asyncio
3365 python-pytest-cov
3366 python-pytest-localserver
3367 python-pytest-socket
3368 python-setuptools
3369 python-setuptools-scm
3370 python-wheel))
3371 (propagated-inputs
3372 (list python-aiofiles
3373 python-aioftp
3374 python-aiohttp
3375 python-tqdm))
3376 (home-page "https://parfive.readthedocs.io/")
3377 (synopsis "HTTP and FTP parallel file downloader")
3378 (description
3379 "This package provides CLI tool and Python library @code{parallel} file
3380downloader using asyncio. parfive can handle downloading multiple files in
3381parallel as well as downloading each file in a number of chunks.
3382
3383asciicast demo of parfive parfive works by creating a downloader object,
3384appending files to it and then running the download. parfive has a synchronous
3385API, but uses asyncio to parallelise downloading the files.")
3386 (license license:expat)))
3387
3388(define-public python-html2text
3389 (package
3390 (name "python-html2text")
3391 (version "2020.1.16")
3392 (source
3393 (origin
3394 (method url-fetch)
3395 (uri (pypi-uri "html2text" version))
3396 (sha256
3397 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
3398 (build-system pyproject-build-system)
3399 (native-inputs (list python-pytest python-setuptools python-wheel))
3400 (home-page "https://github.com/Alir3z4/html2text")
3401 (synopsis "Convert HTML into plain text")
3402 (description
3403 "html2text takes HTML and converts it into plain ASCII text
3404which is also valid markdown. html2text was originally written by Aaron
3405Swartz.")
3406 (license license:gpl3+)))
3407
3408(define-public python-jose
3409 (package
3410 (name "python-jose")
3411 (version "3.5.0")
3412 (home-page "https://github.com/mpdavis/python-jose")
3413 (source (origin
3414 (method git-fetch)
3415 (uri (git-reference (url home-page) (commit version)))
3416 (file-name (git-file-name name version))
3417 (sha256
3418 (base32
3419 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
3420 (build-system pyproject-build-system)
3421 (native-inputs
3422 (list python-pyasn1 python-pytest python-setuptools))
3423 (propagated-inputs
3424 (list python-cryptography python-ecdsa python-rsa))
3425 (synopsis "JOSE implementation in Python")
3426 (description
3427 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
3428- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
3429JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
3430content using a variety of algorithms.")
3431 (license license:expat)))
3432
3433(define-public python-joserfc
3434 (package
3435 (name "python-joserfc")
3436 (version "1.0.1")
3437 (source
3438 (origin
3439 (method url-fetch)
3440 (uri (pypi-uri "joserfc" version))
3441 (sha256
3442 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
3443 (build-system pyproject-build-system)
3444 (arguments
3445 (list
3446 #:test-flags
3447 ;; No module named 'Crypto'
3448 '(list "--ignore=tests/jwe/test_chacha20.py"
3449 ;; Deprecation warnings are not raised.
3450 "-k" (string-append "not test_guess_bytes_key"
3451 " and not test_guess_callable_key"
3452 " and not test_guess_str_key"))))
3453 (propagated-inputs (list python-cryptography))
3454 (native-inputs (list python-pytest python-setuptools python-wheel))
3455 (home-page "https://github.com/authlib/joserfc")
3456 (synopsis "Python library for JOSE RFCs")
3457 (description
3458 "This package provides a Python library for JOSE RFCs, including JWS,
3459JWE, JWK, JWA, and JWT.")
3460 (license license:bsd-3)))
3461
3462(define-public python-jwcrypto
3463 (package
3464 (name "python-jwcrypto")
3465 (version "1.5.6")
3466 (source
3467 (origin
3468 (method url-fetch)
3469 (uri (pypi-uri "jwcrypto" version))
3470 (sha256
3471 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
3472 (build-system pyproject-build-system)
3473 (native-inputs
3474 (list python-pytest
3475 python-setuptools))
3476 (propagated-inputs
3477 (list python-cryptography
3478 python-deprecated))
3479 (home-page "https://github.com/latchset/jwcrypto")
3480 (synopsis "Implementation of JOSE Web standards")
3481 (description
3482 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
3483Encryption} (JOSE) Web Standards.")
3484 (license license:lgpl3+)))
3485
3486(define-public python-pypitoken
3487 (package
3488 (name "python-pypitoken")
3489 (version "7.0.1")
3490 (source
3491 (origin
3492 (method url-fetch)
3493 (uri (pypi-uri "pypitoken" version))
3494 (sha256
3495 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
3496 (build-system pyproject-build-system)
3497 ;; There are no tests.
3498 (arguments (list #:tests? #false))
3499 (propagated-inputs (list python-jsonschema python-pymacaroons
3500 python-typing-extensions))
3501 (native-inputs (list python-poetry-core))
3502 (home-page "https://pypitoken.readthedocs.io/en/latest/")
3503 (synopsis "Manipulate PyPI API tokens")
3504 (description "This package lets you manipulate PyPI API tokens.")
3505 (license license:expat)))
3506
3507(define-public python-pyscss
3508 ;; XXX: no fresh release supporting Python 3.11, use the latest commit, see
3509 ;; <https://github.com/Kronuz/pyScss/issues/428>,
3510 ;; <https://github.com/Kronuz/pyScss/issues/431>.
3511 (let ((commit "73559d047706ccd4593cf6aa092de71f35164723")
3512 (revision "0"))
3513 (package
3514 (name "python-pyscss")
3515 (version (git-version "1.4.0" revision commit))
3516 (source
3517 (origin
3518 (method git-fetch) ; no tests in PyPI release
3519 (uri (git-reference
3520 (url "https://github.com/Kronuz/pyScss")
3521 (commit commit)))
3522 (file-name (git-file-name name version))
3523 (sha256
3524 (base32 "00msypxf5dm57gyfp3jxvjinigi4km84v33w83635pms9li2k3y7"))))
3525 (build-system pyproject-build-system)
3526 (native-inputs
3527 (list python-pytest
3528 python-setuptools))
3529 (inputs
3530 (list pcre))
3531 (propagated-inputs
3532 (list python-six)) ;hard dependency in scss/compiler.py
3533 (home-page "https://github.com/Kronuz/pyScss")
3534 (synopsis "Scss compiler for Python")
3535 (description
3536 "@code{pyScss} is a compiler for Sass, a superset language of
3537CSS3 that adds programming capabilities and some other syntactic sugar.")
3538 (license license:expat))))
3539
3540(define-public python-jsonpickle
3541 (package
3542 (name "python-jsonpickle")
3543 (version "4.0.0")
3544 (source (origin
3545 (method url-fetch)
3546 (uri (pypi-uri "jsonpickle" version))
3547 (sha256
3548 (base32
3549 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
3550 (build-system pyproject-build-system)
3551 (arguments
3552 (list
3553 #:test-flags
3554 ;; Prevent running the flake8 and black pytest plugins, which only tests
3555 ;; style and frequently causes harmless failures.
3556 '(list "-o" "addopts=''" "tests")
3557 #:phases
3558 '(modify-phases %standard-phases
3559 (add-before 'check 'pre-check
3560 (lambda* (#:key inputs #:allow-other-keys)
3561 (setenv "TZ" "UTC")
3562 (setenv "TZDIR"
3563 (search-input-directory inputs "share/zoneinfo")))))))
3564 (propagated-inputs
3565 (list python-importlib-metadata))
3566 (native-inputs
3567 (list python-bson
3568 python-ecdsa
3569 python-feedparser
3570 python-pymongo
3571 python-pytest
3572 python-pytest-benchmark
3573 python-pytest-cov
3574 python-pytest-enabler
3575 python-setuptools
3576 python-setuptools-scm
3577 python-simplejson
3578 python-sqlalchemy
3579 python-ujson
3580 python-wheel
3581 tzdata-for-tests))
3582 (home-page "https://jsonpickle.github.io/")
3583 (synopsis "Serialize object graphs into JSON")
3584 (description
3585 "This package provides a Python library for serializing any arbitrary
3586object graph to and from JSON.")
3587 (license license:bsd-3)))
3588
3589(define-public python-mechanicalsoup
3590 (package
3591 (name "python-mechanicalsoup")
3592 (version "1.4.0")
3593 (source
3594 (origin
3595 (method url-fetch)
3596 (uri (pypi-uri "mechanicalsoup" version))
3597 (sha256
3598 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
3599 (build-system pyproject-build-system)
3600 (arguments
3601 (list
3602 #:test-flags
3603 ;; Unclear why test fails.
3604 #~(list "-k" "not test_select_form_associated_elements")
3605 ;; The following dependencies are not directly required, the developer
3606 ;; only pinned versions because of vulnerabilities. They also break
3607 ;; sanity-check because it checks for a python-certifi version which is
3608 ;; more recent than the one available in Guix.
3609 #:phases #~(modify-phases %standard-phases
3610 (add-after 'unpack 'relax-dependencies
3611 (lambda _
3612 (substitute* "requirements.txt"
3613 (("certifi.*") "")
3614 (("urllib3.*") "")))))))
3615 (propagated-inputs
3616 (list python-beautifulsoup4 python-lxml python-requests))
3617 (native-inputs
3618 (list python-pytest
3619 python-pytest-cov
3620 python-pytest-flake8
3621 python-pytest-httpbin
3622 python-pytest-mock
3623 python-requests-mock
3624 python-setuptools
3625 python-wheel))
3626 (home-page "https://mechanicalsoup.readthedocs.io/")
3627 (synopsis "Python library for automating website interaction")
3628 (description
3629 "MechanicalSoup is a Python library for automating interaction with
3630websites. It automatically stores and sends cookies, follows redirects, and can
3631follow links and submit forms. It doesn’t do JavaScript.")
3632 (license license:expat)))
3633
3634(define-public python-hyperframe
3635 (package
3636 (name "python-hyperframe")
3637 (version "6.1.0")
3638 (source
3639 (origin
3640 (method url-fetch)
3641 (uri (pypi-uri "hyperframe" version))
3642 (sha256
3643 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
3644 (build-system pyproject-build-system)
3645 (native-inputs
3646 (list python-pytest python-setuptools))
3647 (home-page "https://github.com/python-hyper/hyperframe")
3648 (synopsis "HTTP/2 framing layer for Python")
3649 (description
3650 "This library contains the HTTP/2 framing code used in the hyper project.
3651It provides a pure-Python codebase that is capable of decoding a binary stream
3652into HTTP/2 frames.")
3653 (license license:expat)))
3654
3655(define-public python-hpack
3656 (package
3657 (name "python-hpack")
3658 (version "4.1.0")
3659 (source
3660 (origin
3661 ;; PyPI tarball is missing some files necessary for the tests.
3662 (method git-fetch)
3663 (uri (git-reference
3664 (url "https://github.com/python-hyper/hpack")
3665 (commit (string-append "v" version))))
3666 (file-name (git-file-name name version))
3667 (sha256
3668 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
3669 (build-system pyproject-build-system)
3670 (native-inputs
3671 (list python-pytest python-setuptools))
3672 (home-page "https://hyper.rtfd.org")
3673 (synopsis "Pure-Python HPACK header compression")
3674 (description
3675 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
3676for use in Python programs that implement HTTP/2.")
3677 (license license:expat)))
3678
3679(define-public python-h11
3680 (package
3681 (name "python-h11")
3682 (version "0.16.0")
3683 (source
3684 (origin
3685 (method url-fetch)
3686 (uri (pypi-uri "h11" version))
3687 (sha256
3688 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
3689 (build-system pyproject-build-system)
3690 (native-inputs
3691 (list python-pytest python-setuptools))
3692 (home-page "https://github.com/python-hyper/h11")
3693 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
3694 (description
3695 "This is a little HTTP/1.1 library written from scratch in Python, heavily
3696inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
3697code whatsoever. This means you can hook h11 up to your favorite network API,
3698and that could be anything you want.")
3699 (license license:expat)))
3700
3701(define-public python-h2
3702 (package
3703 (name "python-h2")
3704 (version "4.1.0")
3705 (source
3706 (origin
3707 (method url-fetch)
3708 (uri (pypi-uri "h2" version))
3709 (sha256
3710 (base32 "1fraip114fm1ha5w37pdc0sk8dn9pb0ck267zrwwpap7zc4clfm8"))))
3711 (build-system pyproject-build-system)
3712 (arguments
3713 (list
3714 ;; AssertionError: assert '<RemoteSettingsChanged
3715 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
3716 ;; new_value=32768)}>' == '<RemoteSettingsChanged
3717 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
3718 ;; original_value=65536, new_value=32768)}>'
3719 #:test-flags
3720 #~(list "-k"
3721 (string-join
3722 (list "not test_remotesettingschanged_repr"
3723 ;; This test exceededs the Hypothesis deadline.
3724 #$@(if (target-riscv64?)
3725 #~("test_changing_max_frame_size")
3726 #~())
3727 "test_streamreset_repr"
3728 "test_settingsacknowledged_repr"
3729 "test_connectionterminated_repr[None-None]"
3730 "test_connectionterminated_repr[some"
3731 "test_remotesettingschanged_repr"
3732 "test_streamreset_repr"
3733 "test_settingsacknowledged_repr"
3734 "test_connectionterminated_repr[None-None]"
3735 "test_connectionterminated_repr[some")
3736 " and not "))))
3737 (native-inputs
3738 (list python-pytest
3739 python-setuptools
3740 python-wheel))
3741 (propagated-inputs
3742 (list python-hpack
3743 python-hyperframe))
3744 (home-page "https://github.com/python-hyper/h2")
3745 (synopsis "HTTP/2 State-Machine based protocol implementation")
3746 (description
3747 "This module contains a pure-Python implementation of a HTTP/2 protocol
3748stack. It does not provide a parsing layer, a network layer, or any rules
3749about concurrency. Instead, it's a purely in-memory solution, defined in
3750terms of data actions and HTTP/2 frames. This is one building block of a full
3751Python HTTP implementation.")
3752 (license license:expat)))
3753
3754(define-public python-slixmpp
3755 (package
3756 (name "python-slixmpp")
3757 (version "1.8.6") ; XXX: The latest version which does not requrie Rust
3758 (source
3759 (origin
3760 (method git-fetch)
3761 (uri (git-reference
3762 (url "https://codeberg.org/poezio/slixmpp")
3763 (commit (string-append "slix-" version))))
3764 (file-name (git-file-name name version))
3765 (sha256
3766 (base32 "0gpy6arwyk4lsx1hbcwbllxs6qbwn58adkp1rm1cfvfrjdv5kxx7"))))
3767 (build-system pyproject-build-system)
3768 (arguments
3769 (list
3770 #:phases
3771 #~(modify-phases %standard-phases
3772 (add-after 'unpack 'patch-setup.py
3773 (lambda _
3774 (substitute* "setup.py"
3775 (("'CC', 'cc'")
3776 "'CC', 'gcc'")))))))
3777 (native-inputs
3778 (list gnupg
3779 pkg-config
3780 python-cython
3781 python-setuptools
3782 python-wheel))
3783 (inputs
3784 (list libidn
3785 python)) ; We are building a Python extension.
3786 (propagated-inputs
3787 (list python-aiodns
3788 python-aiohttp
3789 python-cryptography
3790 python-defusedxml
3791 python-emoji
3792 python-pyasn1
3793 python-pyasn1-modules))
3794 (home-page "https://lab.louiz.org/poezio/slixmpp")
3795 (synopsis "XMPP library without threads")
3796 (description
3797 "Slixmpp is a XMPP library for Python 3.7+. It is a fork of SleekXMPP.
3798Its goal is to only rewrite the core of the library (the low level socket
3799handling, the timers, the events dispatching) in order to remove all
3800threads.")
3801 (license license:expat)))
3802
3803(define-public python-sockjs-tornado
3804 (package
3805 (name "python-sockjs-tornado")
3806 (version "1.0.6")
3807 (source
3808 (origin
3809 (method git-fetch)
3810 (uri (git-reference
3811 (url "https://github.com/mrjoes/sockjs-tornado/")
3812 (commit (string-append "v" version))))
3813 (file-name (git-file-name name version))
3814 (sha256
3815 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
3816 (build-system pyproject-build-system)
3817 (arguments
3818 (list
3819 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
3820 (native-inputs (list python-setuptools))
3821 (propagated-inputs (list python-tornado))
3822 (home-page "https://github.com/mrjoes/sockjs-tornado/")
3823 (synopsis
3824 "SockJS Python server implementation on top of the Tornado framework")
3825 (description
3826 "SockJS-tornado provides the server-side counterpart to a SockJS client
3827library, through the Tornado framework.
3828
3829SockJS provides a low-latency, full-duplex, cross-domain communication channel
3830between a web browser and web server.")
3831 (license license:expat)))
3832
3833(define-public python-flask-assets
3834 ;; The latest release still depends on the abandoned flask-script, whereas
3835 ;; at this later commit (already 2 years old at the time of this writing)
3836 ;; the dependency has been lifted.
3837 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
3838 (revision "1"))
3839 (package
3840 (name "python-flask-assets")
3841 (version (git-version "2.1.0" revision commit))
3842 (source
3843 (origin
3844 (method git-fetch)
3845 (uri (git-reference
3846 (url "https://github.com/miracle2k/flask-assets/")
3847 (commit commit)))
3848 (file-name (git-file-name name version))
3849 (sha256
3850 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
3851 (build-system pyproject-build-system)
3852 (propagated-inputs
3853 (list python-flask python-webassets))
3854 (native-inputs
3855 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
3856 (home-page "https://github.com/miracle2k/flask-assets")
3857 (synopsis "Asset management for Flask")
3858 (description "This package integrates @code{webassets} with Flask, adding
3859support for merging, minifying and compiling CSS and Javascript files.")
3860 (license license:bsd-2))))
3861
3862(define-public python-flask-babel
3863 (package
3864 (name "python-flask-babel")
3865 (version "4.0.0")
3866 (source
3867 (origin
3868 (method git-fetch) ;no tests in pypi release
3869 (uri (git-reference
3870 (url "https://github.com/python-babel/flask-babel")
3871 (commit (string-append "v" version))))
3872 (sha256
3873 (base32
3874 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
3875 (build-system pyproject-build-system)
3876 (native-inputs
3877 (list python-poetry-core
3878 python-pytest
3879 python-pytest-cov
3880 python-pytest-mock))
3881 (propagated-inputs
3882 (list python-babel
3883 python-flask
3884 python-jinja2
3885 python-pytz))
3886 (home-page "https://github.com/python-babel/flask-babel")
3887 (synopsis "Add i18n/l10n support to Flask applications")
3888 (description "This package implements internationalization and localization
3889support for Flask. This is based on the Python babel module as well as pytz -
3890both of which are installed automatically if you install this library.")
3891 (license license:bsd-3)))
3892
3893(define-public python-flask-cors
3894 (package
3895 (name "python-flask-cors")
3896 (version "6.0.1")
3897 (source
3898 (origin
3899 (method git-fetch) ;no tests in PyPI archive
3900 (uri (git-reference
3901 (url "https://github.com/CoryDolphin/flask-cors")
3902 (commit version)))
3903 (file-name (git-file-name name version))
3904 (sha256
3905 (base32 "01w77vfbzw994dpz6aw4vzy75nrykk6jgilc3qm2d543vjizjaf9"))))
3906 (build-system pyproject-build-system)
3907 (native-inputs
3908 (list python-pytest
3909 python-setuptools))
3910 (propagated-inputs
3911 (list python-flask
3912 python-werkzeug))
3913 (home-page "https://flask-cors.readthedocs.io/en/latest/")
3914 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
3915 (description
3916 "This package provides a Flask extension for handling @acronym{CORS,Cross
3917Origin Resource Sharing}, making cross-origin AJAX possible.")
3918 (license license:expat)))
3919
3920(define-public python-flask-markdown
3921 (package
3922 (name "python-flask-markdown")
3923 (version "0.3")
3924 (source
3925 (origin
3926 (method git-fetch)
3927 (uri (git-reference
3928 (url "https://github.com/dcolish/flask-markdown")
3929 (commit version)))
3930 (file-name (git-file-name name version))
3931 (sha256
3932 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
3933 (build-system pyproject-build-system)
3934 (arguments
3935 (list
3936 #:tests? #f ;Tests seem to be incompatible with latest python
3937 #:phases
3938 #~(modify-phases %standard-phases
3939 (add-after 'unpack 'set-version
3940 (lambda _
3941 (substitute* "setup.py"
3942 (("dev")
3943 #$version)))))))
3944 (propagated-inputs (list python-markdown python-flask))
3945 (native-inputs (list python-pynose python-setuptools))
3946 (home-page "https://github.com/dcolish/flask-markdown")
3947 (synopsis "Small extension to help with using Markdown in Flask")
3948 (description
3949 "Flask-Markdown supports several extensions for Markdown and integrates
3950into Jinja2 by default.")
3951 (license license:bsd-3)))
3952
3953(define-public python-flask-session
3954 (package
3955 (name "python-flask-session")
3956 (version "0.8.0")
3957 (source
3958 (origin
3959 (method url-fetch)
3960 (uri (pypi-uri "flask_session" version))
3961 (sha256
3962 (base32
3963 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
3964 (build-system pyproject-build-system)
3965 (arguments
3966 '(#:tests? #f)) ; Tests require the various storage backends to be present
3967 (native-inputs (list python-flit-core))
3968 (propagated-inputs
3969 (list python-cachelib python-flask python-msgspec))
3970 (home-page "https://github.com/pallets-eco/flask-session")
3971 (synopsis "Adds server-side session support to your Flask application")
3972 (description
3973 "Flask-Session is an extension for Flask that adds support for
3974Server-side sessions, with a variety of different backends for session
3975storage.")
3976 (license license:bsd-3)))
3977
3978(define-public python-html5lib
3979 (package
3980 (name "python-html5lib")
3981 (version "1.1")
3982 (source
3983 (origin
3984 (method url-fetch)
3985 (uri (pypi-uri "html5lib" version))
3986 (sha256
3987 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
3988 (build-system pyproject-build-system)
3989 (arguments
3990 '(#:tests? #f)) ;tests depent on dated pytest-expect
3991 (native-inputs
3992 (list python-setuptools))
3993 (propagated-inputs
3994 (list python-six
3995 python-webencodings
3996 ;; Required by Calibre 5.
3997 python-chardet))
3998 (home-page "https://github.com/html5lib/html5lib-python")
3999 (synopsis "Python HTML parser based on the WHATWG HTML specification")
4000 (description
4001 "Html5lib is an HTML parser based on the WHATWG HTML specification
4002and written in Python.")
4003 (license license:expat)))
4004
4005(define-public python-html5-parser
4006 (package
4007 (name "python-html5-parser")
4008 (version "0.4.12")
4009 (source
4010 (origin
4011 (method git-fetch)
4012 (uri (git-reference
4013 (url "https://github.com/kovidgoyal/html5-parser")
4014 (commit (string-append "v" version))))
4015 (file-name (git-file-name name version))
4016 (sha256
4017 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
4018 (build-system pyproject-build-system)
4019 (arguments
4020 (list
4021 #:phases
4022 #~(modify-phases %standard-phases
4023 (add-before 'build 'set-configure-flags
4024 (lambda _
4025 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
4026 (native-inputs (list pkg-config python-setuptools))
4027 (inputs (list libxml2))
4028 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
4029 (home-page "https://html5-parser.readthedocs.io")
4030 (synopsis "Fast C-based HTML5 parsing for Python")
4031 (description
4032 "This package provides a fast implementation of the HTML5 parsing spec
4033for Python. Parsing is done in C using a variant of the gumbo parser. The
4034gumbo parse tree is then transformed into an lxml tree, also in C, yielding
4035parse times that can be a thirtieth of the html5lib parse times.")
4036 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
4037 ;; indicate ASL2.0, including the LICENSE file for the whole project.
4038 (license (list license:asl2.0 license:gpl3))))
4039
4040(define-public python-html5tagger
4041 (package
4042 (name "python-html5tagger")
4043 (version "1.3.0")
4044 (source (origin
4045 (method url-fetch)
4046 (uri (pypi-uri "html5tagger" version))
4047 (sha256
4048 (base32
4049 "1acd1a4f66gi4plqnsml7cf33qp83mxsnmnqpdwkpj7597xkvyl4"))))
4050 (build-system pyproject-build-system)
4051 (arguments
4052 (list #:tests? #f)) ;no tests in PyPI or Git
4053 (native-inputs
4054 (list python-setuptools python-setuptools-scm python-wheel))
4055 (home-page "https://github.com/sanic-org/html5tagger")
4056 (synopsis "Create HTML documents from Python")
4057 (description
4058 "@code{html5tagger} provides a simplified HTML5 syntax that can
4059be written directly in Python without templates.")
4060 (license license:unlicense)))
4061
4062(define-public python-minio
4063 (package
4064 (name "python-minio")
4065 (version "7.1.9")
4066 (source
4067 (origin
4068 (method git-fetch)
4069 (uri (git-reference
4070 (url "https://github.com/minio/minio-py")
4071 (commit version)))
4072 (file-name (git-file-name name version))
4073 (sha256
4074 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
4075 (build-system pyproject-build-system)
4076 (arguments
4077 (list
4078 #:test-flags
4079 ;; XXX: requires network access.
4080 #~(list "--ignore=tests/unit/credentials_test.py")))
4081 (native-inputs (list python-pytest python-setuptools))
4082 (propagated-inputs
4083 (list python-certifi python-dateutil python-pytz python-urllib3))
4084 (home-page "https://github.com/minio/minio-py")
4085 (synopsis "Programmatically access Amazon S3 from Python")
4086 (description
4087 "This package provides a Python library for interacting with any
4088Amazon S3 compatible object storage server.")
4089 (license license:asl2.0)))
4090
4091(define-public python-pycurl
4092 (package
4093 (name "python-pycurl")
4094 (version "7.45.4")
4095 (source
4096 (origin
4097 (method git-fetch)
4098 (uri (git-reference
4099 (url "https://github.com/pycurl/pycurl")
4100 (commit (string-append
4101 "REL_" (string-replace-substring version "." "_")))))
4102 (file-name (git-file-name name version))
4103 (sha256
4104 (base32 "00cd1l0lsml0708hpv5k4qyhqfv0qphb0p317j9aci2wdspn1mpl"))))
4105 (build-system pyproject-build-system)
4106 (arguments
4107 '(#:test-flags
4108 ;; The test suite is not thread safe:
4109 ;; - some tests want to use the same port: address already in use
4110 ;; - some tests use signal.Signal, i.e. main-thread only
4111 (list "-k" (string-append
4112 ;; Disable hanginging tests
4113 "not test_multi_socket_select"
4114 ;; E assert None is not None
4115 ;; E+ where None =
4116 ;; <tests.multi_callback_test.MultiCallbackTest
4117 ;; testMethod=test_multi_socket_action>.timer_result
4118 " and not test_multi_socket_action"
4119 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
4120 ;; open shared object file: No such file or directory
4121 " and not test_libcurl_ssl_gnutls"
4122 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
4123 ;; open shared object file: No such file or directory
4124 " and not test_libcurl_ssl_nss"
4125 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
4126 ;; open shared object file: No such file or directory
4127 " and not test_libcurl_ssl_openssl"
4128 ;; Probably due to an expired CA
4129 " and not test_request_without_certinfo"
4130 ;; "A libcurl function was given a bad argument"
4131 " and not test_proxy_tlsauth"))
4132 #:phases (modify-phases %standard-phases
4133 (add-before 'build 'configure-tls-backend
4134 (lambda _
4135 ;; XXX: PycURL fails to automatically determine which
4136 ;; TLS backend to use when cURL is built with
4137 ;; --disable-static. See setup.py and
4138 ;; <https://github.com/pycurl/pycurl/pull/147>.
4139 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
4140 (native-inputs
4141 (list python-bottle
4142 python-flaky
4143 python-flask
4144 python-pytest
4145 python-setuptools
4146 python-wheel))
4147 (inputs
4148 (list curl gnutls))
4149 (home-page "http://pycurl.io/")
4150 (synopsis "Lightweight Python wrapper around libcurl")
4151 (description "Pycurl is a lightweight wrapper around libcurl. It provides
4152high-speed transfers via libcurl and frequently outperforms alternatives.")
4153
4154 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
4155 ;; under the terms of LGPLv2.1+ or Expat.
4156 (license (list license:lgpl2.1+ license:expat))))
4157
4158(define-public python-stripe
4159 (package
4160 (name "python-stripe")
4161 (version "13.2.0")
4162 (source
4163 (origin
4164 (method git-fetch)
4165 (uri (git-reference
4166 (url "https://github.com/stripe/stripe-python")
4167 (commit (string-append "v" version))))
4168 (file-name (git-file-name name version))
4169 (sha256
4170 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
4171 (build-system pyproject-build-system)
4172 (arguments
4173 '(#:tests? #f)) ;; tests require network
4174 (native-inputs
4175 (list python-flit-core))
4176 (propagated-inputs
4177 (list python-httpx
4178 python-requests))
4179 (home-page "https://github.com/stripe/stripe-python")
4180 (synopsis "Python bindings for the Stripe financial services' API")
4181 (description "This package provides access to the Stripe financial
4182services' API. It includes a pre-defined set of classes for API resources
4183that initialize themselves dynamically from API responses which makes it
4184compatible with a wide range of versions of the Stripe API.")
4185 (license license:expat)))
4186
4187(define-public python-stripe-12
4188 (hidden-package
4189 (package/inherit python-stripe
4190 (name "python-stripe")
4191 (version "12.5.1")
4192 (source
4193 (origin
4194 (inherit (package-source python-stripe))
4195 (uri (git-reference
4196 (url "https://github.com/stripe/stripe-python")
4197 (commit (string-append "v" version))))
4198 (file-name (git-file-name name version))
4199 (sha256 (base32
4200 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
4201 (native-inputs
4202 (list python-setuptools)))))
4203
4204(define-public python-tldextract
4205 (package
4206 (name "python-tldextract")
4207 (version "5.3.0")
4208 (source
4209 (origin
4210 (method url-fetch)
4211 (uri (pypi-uri "tldextract" version))
4212 (sha256
4213 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
4214 (build-system pyproject-build-system)
4215 (arguments
4216 (list
4217 #:phases
4218 #~(modify-phases %standard-phases
4219 (add-after 'unpack 'relax-requirements
4220 (lambda _
4221 (substitute* "pyproject.toml"
4222 (("\"requests-file.*\",")
4223 "\"requests-file\",")))))))
4224 (native-inputs
4225 (list nss-certs-for-test
4226 python-pytest
4227 python-pytest-mock
4228 python-responses
4229 python-setuptools
4230 python-setuptools-scm
4231 python-syrupy))
4232 (propagated-inputs
4233 (list python-filelock
4234 python-idna
4235 python-requests
4236 python-requests-file))
4237 (home-page "https://github.com/john-kurkowski/tldextract")
4238 (synopsis
4239 "Separate the TLD from the registered domain and subdomains of a URL")
4240 (description
4241 "TLDExtract accurately separates the TLD from the registered domain and
4242subdomains of a URL, using the Public Suffix List. By default, this includes
4243the public ICANN TLDs and their exceptions. It can optionally support the
4244Public Suffix List's private domains as well.")
4245 (license license:bsd-3)))
4246
4247(define-public python-tracerite
4248 (package
4249 (name "python-tracerite")
4250 (version "1.1.3")
4251 (source
4252 (origin
4253 (method url-fetch)
4254 (uri (pypi-uri "tracerite" version))
4255 (sha256
4256 (base32 "07mkg0sl0h335kj6yjvxki2c19gxhb7rkks1zgzh7aj0y83c17qi"))))
4257 (build-system pyproject-build-system)
4258 (arguments
4259 (list #:tests? #f)) ;no tests in PyPI or Git
4260 (native-inputs
4261 (list python-setuptools
4262 python-setuptools-scm))
4263 (propagated-inputs
4264 (list python-html5tagger))
4265 (home-page "https://github.com/sanic-org/tracerite")
4266 (synopsis "Human-readable HTML tracebacks")
4267 (description
4268 "@code{tracerite} converts Python tracebacks into useful error messages
4269in human-readable HTML format.")
4270 (license license:unlicense)))
4271
4272(define-public python-trio-websocket
4273 (package
4274 (name "python-trio-websocket")
4275 (version "0.12.2")
4276 (source
4277 (origin
4278 (method git-fetch)
4279 (uri (git-reference
4280 (url "https://github.com/HyperionGray/trio-websocket")
4281 (commit version)))
4282 (file-name (git-file-name name version))
4283 (sha256
4284 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
4285 (build-system pyproject-build-system)
4286 (native-inputs
4287 (list python-pytest
4288 python-pytest-trio
4289 python-setuptools
4290 python-trustme))
4291 (propagated-inputs
4292 (list python-outcome
4293 python-trio
4294 python-wsproto))
4295 (home-page "https://github.com/HyperionGray/trio-websocket")
4296 (synopsis "WebSocket library for Trio")
4297 (description "This library implements both server and client aspects of
4298the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
4299striving for safety, correctness, and ergonomics. It is based on the
4300@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
4301@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
4302the majority of the WebSocket protocol, including framing, codecs, and events.
4303This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
4304the Trio framework}.")
4305 (license license:expat)))
4306
4307(define-public python-txacme
4308 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
4309 ;; compatibility wit twisted, use the latest commit from trunk branch.
4310 ;;
4311 ;;See: <https://github.com/twisted/txacme/issues/165>.
4312 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
4313 (revision "0"))
4314 (package
4315 (name "python-txacme")
4316 (version (git-version "0.9.3" revision commit))
4317 (source
4318 (origin
4319 (method git-fetch) ;no fresh release in PyPI
4320 (uri (git-reference
4321 (url "https://github.com/twisted/txacme")
4322 (commit commit)))
4323 (file-name (git-file-name name version))
4324 (sha256
4325 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
4326 (build-system pyproject-build-system)
4327 (arguments
4328 (list #:test-backend #~'custom
4329 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
4330 (native-inputs
4331 (list python-setuptools))
4332 (propagated-inputs
4333 (list python-acme
4334 python-attrs
4335 python-eliot
4336 python-josepy
4337 python-pem
4338 python-treq
4339 python-twisted
4340 python-txsni))
4341 (home-page "https://github.com/twisted/txacme")
4342 (synopsis "Twisted implexmentation of the ACME protocol")
4343 (description
4344 "ACME is Automatic Certificate Management Environment, a protocol that
4345allows clients and certificate authorities to automate verification and
4346certificate issuance. The ACME protocol is used by the free Let's Encrypt
4347Certificate Authority.
4348
4349txacme is an implementation of the protocol for Twisted, the event-driven
4350networking engine for Python.")
4351 (license license:expat))))
4352
4353(define-public python-txaio
4354 (package
4355 (name "python-txaio")
4356 (version "25.9.2")
4357 (source
4358 (origin
4359 (method url-fetch)
4360 (uri (pypi-uri "txaio" version))
4361 (sha256
4362 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
4363 (build-system pyproject-build-system)
4364 (native-inputs
4365 (list python-pytest
4366 python-setuptools))
4367 (home-page "https://github.com/crossbario/txaio")
4368 (synopsis "Compatibility layer between Python asyncio and Twisted")
4369 (description
4370 "Txaio provides a compatibility layer between the Python @code{asyncio}
4371 bsmodule and @code{Twisted}.")
4372 (license license:expat)))
4373
4374;; XXX: Potentially abandonware since 2017, consider to remove when nothing
4375;; depends on it or fails to build.
4376(define-public python-txamqp
4377 (package
4378 (name "python-txamqp")
4379 (version "0.8.2")
4380 (source
4381 (origin
4382 (method url-fetch)
4383 (uri (pypi-uri "txAMQP" version))
4384 (sha256
4385 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
4386 (build-system pyproject-build-system)
4387 (arguments
4388 (list #:tests? #f)) ;all tests failed
4389 (native-inputs
4390 (list python-setuptools))
4391 (propagated-inputs
4392 (list python-six python-twisted))
4393 (home-page "https://github.com/txamqp/txamqp")
4394 (synopsis "Communicate with AMQP peers and brokers using Twisted")
4395 (description
4396 "This package provides a Python library for communicating with AMQP peers
4397and brokers using the asynchronous networking framework Twisted. It contains
4398all the necessary code to connect, send and receive messages to/from an
4399AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
4400also includes support for using Thrift RPC over AMQP in Twisted
4401applications.")
4402 (license license:asl2.0)))
4403
4404(define-public python-txsni
4405 (package
4406 (name "python-txsni")
4407 (version "0.2.0")
4408 (source
4409 (origin
4410 (method git-fetch)
4411 (uri (git-reference
4412 (url "https://github.com/glyph/txsni")
4413 (commit (string-append "v" version))))
4414 (file-name (git-file-name name version))
4415 (sha256
4416 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
4417 (build-system pyproject-build-system)
4418 (arguments
4419 (list #:test-backend #~'custom
4420 #:test-flags #~(list "-m" "twisted.trial"
4421 "--temp-directory=/tmp/_trial_temp"
4422 "txsni")))
4423 (native-inputs
4424 (list python-setuptools))
4425 (propagated-inputs
4426 (list python-pyopenssl
4427 python-service-identity
4428 python-twisted))
4429 (home-page "https://github.com/glyph/txsni")
4430 (synopsis "Run TLS servers with Twisted")
4431 (description
4432 "This package provides an easy-to-use SNI endpoint for use with the
4433Twisted web framework.")
4434 (license license:expat)))
4435
4436(define-public python-txtorcon
4437 (package
4438 (name "python-txtorcon")
4439 (version "24.8.0")
4440 (source
4441 (origin
4442 (method url-fetch)
4443 (uri (pypi-uri "txtorcon" version))
4444 (sha256
4445 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
4446 (build-system pyproject-build-system)
4447 (native-inputs
4448 (list python-pytest
4449 python-setuptools
4450 python-wheel))
4451 (inputs
4452 (list lsof))
4453 (propagated-inputs
4454 (list python-automat
4455 python-idna
4456 python-incremental
4457 python-pyopenssl
4458 python-service-identity
4459 python-twisted
4460 python-zope-interface))
4461 (home-page "https://github.com/meejah/txtorcon")
4462 (synopsis "Twisted-based Tor controller client")
4463 (description
4464 "This package provides a Twisted-based Tor controller client,with
4465state-tracking and configuration abstractions.")
4466 (license license:expat)))
4467
4468(define-public python-url-normalize
4469 (package
4470 (name "python-url-normalize")
4471 (version "2.2.1")
4472 (source
4473 (origin
4474 (method git-fetch) ; no tests in PyPI release
4475 (uri (git-reference
4476 (url "https://github.com/niksite/url-normalize")
4477 (commit (string-append "v" version))))
4478 (file-name (git-file-name name version))
4479 (sha256
4480 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
4481 (build-system pyproject-build-system)
4482 (arguments
4483 (list
4484 #:test-flags #~(list "--ignore=tests/test_cli.py")))
4485 (native-inputs
4486 (list python-pytest
4487 python-pytest-cov
4488 python-pytest-socket
4489 python-setuptools))
4490 (propagated-inputs
4491 (list python-idna))
4492 (home-page "https://github.com/niksite/url-normalize")
4493 (synopsis "URL normalization for Python")
4494 (description
4495 "This package provides a URI Normalization function with following
4496features:
4497@itemize
4498@item take care of IDN domains
4499@item always provide the URI scheme in lowercase characters
4500@item always provide the host, if any, in lowercase characters
4501@item only perform percent-encoding where it is essential
4502@item always use uppercase A-through-F characters when percent-encoding
4503@item prevent dot-segments appearing in non-relative URI paths
4504@item for schemes that define a default authority, use an empty authority if
4505the default is desired
4506@item for schemes that define an empty path to be equivalent to a path of
4507@code{/}, use @code{/}
4508@item for schemes that define a port, use an empty port if the default is
4509desired
4510@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
4511@end itemize")
4512 (license license:expat)))
4513
4514(define-public python-waitress
4515 (package
4516 (name "python-waitress")
4517 (version "3.0.2")
4518 (source
4519 (origin
4520 (method url-fetch)
4521 (uri (pypi-uri "waitress" version))
4522 (sha256
4523 (base32
4524 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
4525 (build-system pyproject-build-system)
4526 (arguments
4527 ;; https://github.com/Pylons/waitress/issues/443
4528 (list #:test-flags #~(list "-k" "not test_service_port")))
4529 (native-inputs
4530 (list python-pytest
4531 python-pytest-cov
4532 python-setuptools))
4533 (home-page "https://github.com/Pylons/waitress")
4534 (synopsis "Waitress WSGI server")
4535 (description
4536 "Waitress is meant to be a production-quality pure-Python WSGI server
4537with very acceptable performance.")
4538 (license license:zpl2.1)))
4539
4540(define-public python-weasel
4541 (package
4542 (name "python-weasel")
4543 (version "0.4.1")
4544 (source
4545 (origin
4546 (method url-fetch)
4547 (uri (pypi-uri "weasel" version))
4548 (sha256
4549 (base32 "1aas113r29y6yxrmdlsw80rj8w4kgw1jhfjw9rsgc4rf0w7j3g5a"))))
4550 (build-system pyproject-build-system)
4551 (arguments
4552 (list
4553 #:test-flags
4554 ;; Network access is required.
4555 #~(list #$@(map (lambda (test) (string-append "--deselect="
4556 "weasel/tests/cli/"
4557 test))
4558 (list "test_cli.py::test_project_git_dir_asset"
4559 "test_cli.py::test_project_git_file_asset"
4560 "test_cli_app.py::test_project_assets")))))
4561 (native-inputs
4562 (list python-pytest
4563 python-setuptools))
4564 (propagated-inputs
4565 (list python-cloudpathlib
4566 python-confection
4567 python-packaging
4568 python-pydantic-2
4569 python-requests
4570 python-smart-open
4571 python-srsly
4572 python-typer
4573 python-wasabi))
4574 (home-page "https://github.com/explosion/weasel/")
4575 (synopsis "Small and easy workflow system")
4576 (description
4577 "This package provides a minimalistic workflow system to manage and
4578share end-to-end workflows for different use cases and domains.")
4579 (license license:expat)))
4580
4581(define-public python-webencodings
4582 (package
4583 (name "python-webencodings")
4584 (version "0.5.1")
4585 (source
4586 (origin
4587 (method url-fetch)
4588 (uri (pypi-uri "webencodings" version))
4589 (sha256
4590 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
4591 (build-system pyproject-build-system)
4592 (arguments
4593 (list #:test-flags #~(list "webencodings/tests.py")))
4594 (native-inputs
4595 (list python-pytest python-setuptools))
4596 (home-page "https://github.com/SimonSapin/python-webencodings")
4597 (synopsis "Character encoding aliases for legacy web content")
4598 (description
4599 "In order to be compatible with legacy web content when interpreting
4600something like @code{Content-Type: text/html; charset=latin1}, tools need to
4601use a particular set of aliases for encoding labels as well as some overriding
4602rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
4603actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
4604BOM takes precedence over any other encoding declaration. The WHATWG
4605@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
4606details so that implementations do not have to reverse-engineer each other.
4607
4608This module implements the Encoding standard and has encoding labels and BOM
4609detection, but the actual implementation for encoders and decoders is
4610Python’s.")
4611 (license license:bsd-3)))
4612
4613(define-public python-omnipath
4614 (package
4615 (name "python-omnipath")
4616 (version "1.0.10")
4617 (source
4618 (origin
4619 (method git-fetch)
4620 (uri (git-reference
4621 (url "https://github.com/saezlab/omnipath/")
4622 (commit (string-append "v" version))))
4623 (file-name (git-file-name name version))
4624 (sha256
4625 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
4626 (build-system pyproject-build-system)
4627 (arguments
4628 (list
4629 #:test-flags '(list "-k"
4630 (string-append
4631 ;; These require internet access
4632 "not test_download_homologene"
4633 " and not test_complex_genes"))
4634 #:phases
4635 #~(modify-phases %standard-phases
4636 (add-after 'unpack 'set-home
4637 (lambda _
4638 (setenv "HOME" "/tmp"))))))
4639 (propagated-inputs (list python-attrs
4640 python-docrep
4641 python-inflect
4642 python-networkx
4643 python-packaging
4644 python-pandas
4645 python-requests
4646 python-tqdm
4647 python-typing-extensions
4648 python-urllib3
4649 python-wrapt))
4650 (native-inputs (list nss-certs-for-test
4651 python-bump2version
4652 python-hatchling
4653 python-pytest
4654 python-pytest-mock
4655 python-pytest-socket
4656 python-requests-mock))
4657 (home-page "https://omnipathdb.org/")
4658 (synopsis "Python client for the OmniPath web service")
4659 (description "This package provides a Python client for the OmniPath web
4660service.")
4661 (license license:expat)))
4662
4663(define-public python-openai
4664 (package
4665 (name "python-openai")
4666 (version "1.3.5")
4667 (source (origin
4668 (method git-fetch)
4669 (uri (git-reference
4670 (url "https://github.com/openai/openai-python")
4671 (commit (string-append "v" version))))
4672 (file-name (git-file-name name version))
4673 (sha256
4674 (base32
4675 "0k1rwhj7v22x5bnv9xbk9nj9grxqmmclh9538qqjadgqxfn5x74q"))))
4676 (build-system pyproject-build-system)
4677 (arguments
4678 (list
4679 #:test-flags
4680 ;; These require internet access and an openai API key.
4681 '(list "--ignore=openai/tests/asyncio/test_endpoints.py"
4682 "--ignore=openai/tests/test_endpoints.py"
4683 "--ignore-glob=tests/api_resources/*"
4684 ;; Needs respx
4685 "--ignore=tests/api_resources/audio/test_speech.py"
4686 "--ignore=tests/api_resources/test_files.py"
4687 "--ignore=tests/test_client.py"
4688 "-k" "not test_requestor_cycle_sessions\
4689 and not test_requestor_sets_request_id\
4690 and not test_file_cli\
4691 and not test_basic_async\
4692 and not test_async\
4693 and not test_datetime_with_alias\
4694 and not test_pydantic")
4695 #:phases
4696 '(modify-phases %standard-phases
4697 (add-after 'unpack 'relax-requirements
4698 (lambda _
4699 (substitute* "pyproject.toml"
4700 (("distro>=1.7.0") "distro>=1.6.0")
4701 (("anyio>=3.5.0, <4") "anyio"))))
4702 (add-after 'unpack 'httpx-compatibility
4703 (lambda _
4704 (substitute* "src/openai/_base_client.py"
4705 (("proxies=proxies,") "")
4706 (("self._proxies = proxies") "")
4707 (("proxies: ProxiesTypes . None,") "")))))))
4708 (propagated-inputs
4709 (list python-aiohttp
4710 python-distro
4711 python-httpx
4712 python-pydantic-2
4713 python-requests
4714 python-tqdm
4715 python-typing-extensions))
4716 (native-inputs (list nss-certs-for-test
4717 python-dirty-equals
4718 python-hatchling
4719 python-pytest python-pytest-asyncio
4720 python-pytest-mock python-setuptools python-wheel))
4721 (home-page "https://github.com/openai/openai-python")
4722 (synopsis "Python client library for the OpenAI API")
4723 (description "This package provides a Python client library for the
4724OpenAI API.")
4725 (license license:expat)))
4726
4727(define-public python-openapi-schema-validator
4728 (package
4729 (name "python-openapi-schema-validator")
4730 (version "0.6.2")
4731 (source
4732 (origin
4733 (method git-fetch) ;no tests in pypi release
4734 (uri (git-reference
4735 (url "https://github.com/p1c2u/openapi-schema-validator")
4736 (commit version)))
4737 (file-name (git-file-name name version))
4738 (sha256
4739 (base32
4740 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
4741 (build-system pyproject-build-system)
4742 (arguments
4743 (list
4744 #:test-flags
4745 ;; This one returns 5 instead of 4 elements
4746 '(list "-k" "not test_array_prefixitems_invalid")
4747 #:phases
4748 #~(modify-phases %standard-phases
4749 (add-after 'unpack 'remove-coverage-pytest-options
4750 (lambda _
4751 (substitute* "pyproject.toml"
4752 (("^--cov.*") ""))))
4753 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
4754 (add-after 'unpack 'relax-requirements
4755 (lambda _
4756 (substitute* "pyproject.toml"
4757 (("jsonschema-specifications.*")
4758 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
4759 (native-inputs (list python-poetry-core python-pytest))
4760 (propagated-inputs
4761 (list python-isodate
4762 python-jsonschema
4763 python-rfc3339-validator
4764 python-strict-rfc3339))
4765 (home-page "https://github.com/p1c2u/openapi-schema-validator")
4766 (synopsis "OpenAPI schema validation library for Python")
4767 (description "Openapi-schema-validator is a Python library that validates
4768a schema against:
4769@itemize
4770@item OpenAPI Schema Specification v3.0 which is an extended subset of the
4771JSON Schema Specification Wright Draft 00.
4772@item OpenAPI Schema Specification v3.1 which is an extended superset of the
4773JSON Schema Specification Draft 2020-12.
4774@end itemize")
4775 (license license:bsd-3)))
4776
4777(define-public python-openapi-spec-validator
4778 (package
4779 (name "python-openapi-spec-validator")
4780 (version "0.7.1")
4781 (source
4782 (origin
4783 (method git-fetch) ;no tests in pypi release
4784 (uri (git-reference
4785 (url "https://github.com/p1c2u/openapi-spec-validator")
4786 (commit version)))
4787 (file-name (git-file-name name version))
4788 (sha256
4789 (base32
4790 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
4791 (build-system pyproject-build-system)
4792 (arguments
4793 (list
4794 ;; These tests attempt to fetch resources from the Internet
4795 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
4796 "-k" "not example")
4797 #:phases
4798 #~(modify-phases %standard-phases
4799 (add-after 'unpack 'remove-coverage-pytest-options
4800 (lambda _
4801 (substitute* "pyproject.toml"
4802 (("^--cov.*") "")))))))
4803 (native-inputs
4804 (list python-poetry-core
4805 python-pytest))
4806 (propagated-inputs
4807 (list python-jsonschema
4808 python-jsonschema-path
4809 python-lazy-object-proxy
4810 python-openapi-schema-validator
4811 python-pyyaml
4812 python-requests
4813 python-setuptools))
4814 (home-page "https://github.com/p1c2u/openapi-spec-validator")
4815 (synopsis "OpenAPI spec validator")
4816 (description "OpenAPI Spec Validator is a Python library that validates an
4817OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
48183.0 and OpenAPI 3.1 specifications. The validator aims to check for full
4819compliance with the specification.")
4820 (license license:asl2.0)))
4821
4822(define-public python-openapi-core
4823 (package
4824 (name "python-openapi-core")
4825 (version "0.19.4")
4826 (source
4827 (origin
4828 (method git-fetch)
4829 (uri (git-reference
4830 (url "https://github.com/p1c2u/openapi-core")
4831 (commit version)))
4832 (file-name (git-file-name name version))
4833 (sha256
4834 (base32
4835 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
4836 (build-system pyproject-build-system)
4837 (arguments
4838 (list
4839 #:test-flags
4840 '(list "tests/unit"
4841 ;; Ignore Pytest configuration in setup.cfg that adds
4842 ;; unwanted flake8 and coverage options.
4843 "-c" "/dev/null"
4844 "-k" "not test_chars_valid")))
4845 (native-inputs (list python-django
4846 python-falcon
4847 python-flask
4848 python-mock
4849 python-poetry-core
4850 python-pytest
4851 python-responses))
4852 (propagated-inputs
4853 (list python-attrs
4854 python-aiohttp
4855 python-isodate
4856 python-jsonschema
4857 python-lazy-object-proxy
4858 python-more-itertools
4859 python-openapi-schema-validator
4860 python-openapi-spec-validator
4861 python-parse
4862 python-six
4863 python-werkzeug))
4864 (home-page "https://github.com/p1c2u/openapi-core")
4865 (synopsis "OpenAPI core library")
4866 (description "Openapi-core is a Python library that adds client-side and
4867server-side support for the OpenAPI Specification v3. It has features such
4868as:
4869@itemize
4870@item Validation of requests and responses
4871@item Schema casting and unmarshalling
4872@item Media type and parameters deserialization
4873@item Security providers (API keys, Cookie, Basic and Bearer HTTP
4874authentications)
4875@item Custom deserializers and formats
4876@item Integration with libraries and frameworks.
4877@end itemize")
4878 (license license:bsd-3)))
4879
4880(define-public python-openid
4881 (package
4882 (name "python-openid")
4883 (version "3.2.0")
4884 (source
4885 (origin
4886 (method url-fetch)
4887 (uri (pypi-uri "python3-openid" version))
4888 (sha256
4889 (base32
4890 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
4891 (build-system pyproject-build-system)
4892 (arguments
4893 `(#:phases
4894 (modify-phases %standard-phases
4895 (replace 'check
4896 (lambda* (#:key tests? #:allow-other-keys)
4897 (when tests?
4898 (invoke "python" "-m" "unittest" "openid.test.test_suite")))))))
4899 (propagated-inputs
4900 (list python-defusedxml))
4901 (native-inputs
4902 (list python-psycopg2 python-django python-setuptools python-wheel))
4903 (home-page "https://github.com/necaris/python3-openid")
4904 (synopsis "OpenID support for servers and consumers")
4905 (description "This library provides OpenID authentication for Python, both
4906for clients and servers.")
4907 (license license:asl2.0)))
4908
4909(define-public python-cssutils
4910 (package
4911 (name "python-cssutils")
4912 (version "2.11.1")
4913 (source
4914 (origin
4915 (method url-fetch)
4916 (uri (pypi-uri "cssutils" version))
4917 (sha256
4918 (base32
4919 "1qpq7xvzqp4cfcb8837rnd30x4hws3rkp33qpvmnxbxn2djsfqq5"))))
4920 (build-system pyproject-build-system)
4921 (arguments
4922 (list
4923 #:phases
4924 #~(modify-phases %standard-phases
4925 (replace 'check
4926 (lambda _
4927 (invoke "pytest" "-vv" "-k"
4928 (string-append "not encutils "
4929 "and not website.logging")))))))
4930 (native-inputs
4931 (list python-cssselect
4932 python-jaraco-test
4933 python-lxml
4934 python-pytest
4935 python-setuptools
4936 python-wheel))
4937 (propagated-inputs
4938 (list python-more-itertools))
4939 (home-page "https://github.com/jaraco/cssutils")
4940 (synopsis
4941 "CSS Cascading Style Sheets library for Python")
4942 (description
4943 "Cssutils is a Python package for parsing and building CSS
4944Cascading Style Sheets. Currently it provides a DOM only and no rendering
4945options.")
4946 (license license:lgpl3+)))
4947
4948(define-public python-css-parser
4949 (package
4950 (inherit python-cssutils)
4951 (name "python-css-parser")
4952 (version "1.0.10")
4953 (source
4954 (origin
4955 (method url-fetch)
4956 (uri (pypi-uri "css-parser" version))
4957 (sha256
4958 (base32 "0qs375slcwqd7slizh6hzkwxx7cdj36v8kwn0qrfji1kscm9f7mz"))))
4959 (home-page "https://github.com/ebook-utils/css-parser")
4960 (synopsis "Fork of cssutils modified for parsing ebooks")
4961 (description
4962 "Css-parser is a Python package for parsing and building CSS
4963Cascading Style Sheets. Currently it provides a DOM only and no rendering
4964options.
4965
4966It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
4967cssutils not receiving updates as of 1.0.2.")
4968 (license license:lgpl3+)))
4969
4970(define-public python-cssselect
4971 (package
4972 (name "python-cssselect")
4973 (version "1.2.0")
4974 (source (origin
4975 ;; The PyPI release does not contain tests.
4976 (method git-fetch)
4977 (uri (git-reference
4978 (url "https://github.com/scrapy/cssselect")
4979 (commit (string-append "v" version))))
4980 (file-name (git-file-name name version))
4981 (sha256
4982 (base32
4983 "1x4nrvb1p1byi1whmspik7lbh303akdlh762dayfxam3hycsh5kk"))))
4984 (build-system pyproject-build-system)
4985 (native-inputs
4986 (list python-lxml python-pytest python-setuptools python-wheel))
4987 (home-page "https://github.com/scrapy/cssselect")
4988 (synopsis "CSS3 selector parser and translator to XPath 1.0")
4989 (description
4990 "Cssselect ia a Python module that parses CSS3 Selectors and translates
4991them to XPath 1.0 expressions. Such expressions can be used in lxml or
4992another XPath engine to find the matching elements in an XML or HTML document.")
4993 (license license:bsd-3)))
4994
4995(define-public python-databricks-cli
4996 (package
4997 (name "python-databricks-cli")
4998 (version "0.18.0")
4999 (home-page "https://github.com/databricks/databricks-cli")
5000 (source (origin
5001 (method git-fetch)
5002 (uri (git-reference (url home-page) (commit version)))
5003 (file-name (git-file-name name version))
5004 (sha256
5005 (base32
5006 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
5007 (build-system pyproject-build-system)
5008 (arguments
5009 (list #:phases #~(modify-phases %standard-phases
5010 (replace 'check
5011 (lambda _
5012 (invoke "pytest" "tests" "-vv"))))))
5013 (native-inputs
5014 ;; For tests.
5015 (list python-decorator
5016 python-mock
5017 python-pytest
5018 python-requests-mock
5019 python-setuptools
5020 python-wheel))
5021 (propagated-inputs
5022 (list python-click
5023 python-oauthlib
5024 python-pyjwt
5025 python-requests
5026 python-six
5027 python-tabulate))
5028 (synopsis "Command line interface for Databricks")
5029 (description
5030 "The Databricks Command Line Interface is a tool which provides an easy
5031to use interface to the Databricks platform. The CLI is built on top of the
5032Databricks REST APIs.")
5033 (license license:asl2.0)))
5034
5035(define-public python-openid-cla
5036 ;; XXX: Last updated in 2015.
5037 (package
5038 (name "python-openid-cla")
5039 (version "1.2")
5040 (source
5041 (origin
5042 (method url-fetch)
5043 (uri (pypi-uri "python-openid-cla" version))
5044 (sha256
5045 (base32
5046 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
5047 (build-system pyproject-build-system)
5048 (arguments '(#:tests? #f)) ; No tests.
5049 (native-inputs (list python-setuptools python-wheel))
5050 (propagated-inputs (list python-openid python-six))
5051 (home-page "https://github.com/puiterwijk/python-openid-cla/")
5052 (synopsis "Implementation of the OpenID CLA extension for python-openid")
5053 (description "@code{openid-cla} is an implementation of the OpenID
5054contributor license agreement extension for python-openid.")
5055 (license license:bsd-3)))
5056
5057(define-public python-openid-teams
5058 ;; XXX: Last updated in 2018.
5059 (package
5060 (name "python-openid-teams")
5061 (version "1.1")
5062 (source
5063 (origin
5064 (method url-fetch)
5065 (uri (pypi-uri "python-openid-teams" version))
5066 (sha256
5067 (base32
5068 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
5069 (build-system pyproject-build-system)
5070 (arguments '(#:tests? #f)) ; No tests.
5071 (native-inputs (list python-setuptools python-wheel))
5072 (propagated-inputs (list python-openid python-six))
5073 (home-page "https://github.com/puiterwijk/python-openid-teams/")
5074 (synopsis "Implementation of the OpenID teams extension for python-openid")
5075 (description
5076 "@code{openid-teams} is an implementation of the OpenID
5077teams extension for python-openid.")
5078 (license license:bsd-3)))
5079
5080(define-public python-priority
5081 (package
5082 (name "python-priority")
5083 (version "2.0.0")
5084 (source
5085 (origin
5086 (method url-fetch)
5087 (uri (pypi-uri "priority" version))
5088 (sha256
5089 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
5090 (build-system pyproject-build-system)
5091 (native-inputs
5092 (list python-pytest python-setuptools python-wheel))
5093 (home-page "https://python-hyper.org/projects/priority/en/latest/")
5094 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
5095 (description
5096 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
5097set out in RFC 7540 Section 5.3 (Stream Priority).")
5098 (license license:expat)))
5099
5100(define-public python-weblate-language-data
5101 (package
5102 (name "python-weblate-language-data")
5103 (version "2025.8")
5104 (source
5105 (origin
5106 (method url-fetch)
5107 (uri (pypi-uri "weblate_language_data" version))
5108 (sha256
5109 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
5110 (build-system pyproject-build-system)
5111 (arguments (list #:tests? #f)) ;not tests, just data files
5112 (native-inputs
5113 (list python-setuptools))
5114 (propagated-inputs
5115 (list python-translate-toolkit))
5116 (home-page "https://github.com/WeblateOrg/language-data")
5117 (synopsis "Language definitions for Weblate")
5118 (description
5119 "This package provides language definitions used by
5120@url{https://weblate.org/, Weblate}i.")
5121 (license license:expat)))
5122
5123(define-public python-wikidata
5124 (package
5125 (name "python-wikidata")
5126 (version "0.8.1")
5127 (source
5128 (origin
5129 (method git-fetch)
5130 (uri (git-reference
5131 (url "https://github.com/dahlia/wikidata")
5132 (commit version)))
5133 (file-name (git-file-name name version))
5134 (sha256
5135 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
5136 (build-system pyproject-build-system)
5137 (native-inputs
5138 (list python-pytest python-setuptools))
5139 (home-page "https://github.com/dahlia/wikidata")
5140 (synopsis "Wikidata client library")
5141 (description
5142 "This package provides a Python interface to @url{https://www.wikidata.org/,
5143Wikidata}.")
5144 (license license:gpl3+)))
5145
5146(define-public python-wsproto
5147 (package
5148 (name "python-wsproto")
5149 (version "1.2.0")
5150 (source
5151 (origin
5152 (method url-fetch)
5153 (uri (pypi-uri "wsproto" version))
5154 (sha256
5155 (base32 "0rahm1j9danv1l6i6as80acwv16ycihxkhrvwjiqh9drxhk5ymmd"))))
5156 (build-system pyproject-build-system)
5157 (native-inputs
5158 (list python-pytest python-setuptools python-wheel))
5159 (propagated-inputs
5160 (list python-h11))
5161 (home-page "https://github.com/python-hyper/wsproto/")
5162 (synopsis "WebSockets state-machine based protocol implementation")
5163 (description
5164 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
5165stack. It's written from the ground up to be embeddable in whatever program you
5166choose to use, ensuring that you can communicate via WebSockets, as defined in
5167RFC6455, regardless of your programming paradigm.")
5168 (license license:expat)))
5169
5170(define-public hypercorn
5171 (package
5172 (name "hypercorn")
5173 (version "0.17.3")
5174 (source
5175 (origin
5176 (method git-fetch) ;PyPI does not have tests
5177 (uri (git-reference
5178 (url "https://github.com/pgjones/hypercorn")
5179 (commit version)))
5180 (file-name (git-file-name name version))
5181 (sha256
5182 (base32 "13v6cy4frvnddv9zak06a4lmwxp121hjyfrlapxfmb7m3i8qrm02"))))
5183 (build-system pyproject-build-system)
5184 ;; Propagate because Hypercorn also exposes functionality over a module.
5185 (propagated-inputs (list python-exceptiongroup
5186 python-h11
5187 python-taskgroup
5188 python-h2
5189 python-priority
5190 python-tomli
5191 python-wsproto))
5192 (native-inputs (list nss-certs-for-test
5193 python-httpx
5194 python-poetry-core
5195 python-pytest
5196 python-pytest-asyncio
5197 python-pytest-cov
5198 python-pytest-trio
5199 python-trio))
5200 (home-page "https://gitlab.com/pgjones/hypercorn/")
5201 (synopsis "ASGI Server based on Hyper libraries")
5202 (description
5203 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
5204wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
5205WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
5206can utilise asyncio, uvloop, or trio worker types.")
5207 (license license:expat)))
5208
5209(define-deprecated-package python-hypercorn
5210 hypercorn)
5211
5212(define-public python-querystring-parser
5213 (package
5214 (name "python-querystring-parser")
5215 (version "1.2.4")
5216 (source
5217 (origin
5218 (method git-fetch)
5219 (uri (git-reference
5220 (url "https://github.com/bernii/querystring-parser")
5221 (commit version)))
5222 (file-name (git-file-name name version))
5223 (sha256
5224 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
5225 (build-system pyproject-build-system)
5226 (arguments
5227 (list
5228 #:phases
5229 #~(modify-phases %standard-phases
5230 (replace 'check
5231 (lambda _
5232 ;; XXX FIXME: This test is broken with Python 3.7:
5233 ;; https://github.com/bernii/querystring-parser/issues/35
5234 (substitute* "querystring_parser/tests.py"
5235 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
5236 "True"))
5237 (invoke "python" "querystring_parser/tests.py"))))))
5238 (native-inputs (list python-setuptools))
5239 (propagated-inputs (list python-six))
5240 (home-page "https://github.com/bernii/querystring-parser")
5241 (synopsis "QueryString parser that correctly handles nested dictionaries")
5242 (description
5243 "This package provides a query string parser for Python and Django
5244projects that correctly creates nested dictionaries from sent form/querystring
5245data.")
5246 (license license:expat)))
5247
5248(define-public python-tornado
5249 (package
5250 ;; TODO: Try to refresh and check all dependents.
5251 (name "python-tornado")
5252 (version "5.1.1")
5253 (source
5254 (origin
5255 (method url-fetch)
5256 (uri (pypi-uri "tornado" version))
5257 (sha256
5258 (base32
5259 "02clqk2116jbnq8lnaqmdw3p52nqrd9ib59r4xz2ll43fpcmhlaf"))))
5260 (build-system pyproject-build-system)
5261 (arguments
5262 (list
5263 #:phases
5264 '(modify-phases %standard-phases
5265 (add-after 'unpack 'fix-collections
5266 (lambda _
5267 (substitute* "tornado/httputil.py"
5268 (("collections.MutableMapping")
5269 "collections.abc.MutableMapping"))))
5270 (replace 'check
5271 (lambda* (#:key tests? #:allow-other-keys)
5272 (when tests?
5273 (substitute* "tornado/test/runtests.py"
5274 (("\"error\", category=DeprecationWarning")
5275 "\"ignore\", category=DeprecationWarning")
5276 ;; Disable tests that use SSL.
5277 (("'tornado.test.simple_httpclient_test',") "")
5278 (("'tornado.test.iostream_test',") "")
5279 (("'tornado.test.httpserver_test',") "")
5280 ;; Some timeouts are triggered in these two modules
5281 (("'tornado.test.queues_test',") "")
5282 (("'tornado.test.locks_test',") ""))
5283 ;; Skip all network tests
5284 (setenv "NO_NETWORK" "1")
5285 ;; Skip timing-relevant tests
5286 (setenv "TRAVIS" "1")
5287 (invoke "python" "-m" "tornado.test.runtests"
5288 "--verbose=yes")))))))
5289 (native-inputs
5290 (list python-certifi
5291 python-setuptools))
5292 (home-page "https://www.tornadoweb.org/")
5293 (synopsis "Python web framework and asynchronous networking library")
5294 (description
5295 "Tornado is a Python web framework and asynchronous networking library,
5296originally developed at FriendFeed. By using non-blocking network I/O,
5297Tornado can scale to tens of thousands of open connections, making it ideal
5298for long polling, WebSockets, and other applications that require a long-lived
5299connection to each user.")
5300 (license license:asl2.0)))
5301
5302(define-public python-tornado-6
5303 (package
5304 (name "python-tornado")
5305 (version "6.4.2")
5306 (source
5307 (origin
5308 (method url-fetch)
5309 (uri (pypi-uri "tornado" version))
5310 (sha256
5311 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
5312 (build-system pyproject-build-system)
5313 (arguments
5314 (list
5315 #:test-flags
5316 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
5317 #~(list "--ignore=tornado/test/iostream_test.py")))
5318 (native-inputs
5319 (list python-certifi
5320 python-pytest
5321 python-setuptools
5322 python-wheel))
5323 (home-page "https://www.tornadoweb.org/")
5324 (synopsis "Python web framework and asynchronous networking library")
5325 (description
5326 "Tornado is a Python web framework and asynchronous networking library,
5327originally developed at FriendFeed. By using non-blocking network I/O,
5328Tornado can scale to tens of thousands of open connections, making it ideal
5329for long polling, WebSockets, and other applications that require a long-lived
5330connection to each user.")
5331 (license license:asl2.0)))
5332
5333(define-public python-tornado-http-auth
5334 (package
5335 (name "python-tornado-http-auth")
5336 (version "1.1.1")
5337 (source
5338 (origin
5339 (method git-fetch)
5340 (uri (git-reference
5341 (url "https://github.com/gvalkov/tornado-http-auth")
5342 (commit (string-append "v" version))))
5343 (file-name (git-file-name name version))
5344 (sha256
5345 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
5346 (build-system pyproject-build-system)
5347 ;; XXX: This version is incompatible with current tornado.testing.
5348 (arguments (list #:tests? #f))
5349 (native-inputs (list python-setuptools))
5350 (propagated-inputs (list python-tornado))
5351 (home-page "https://github.com/gvalkov/tornado-http-auth")
5352 (synopsis "Digest and basic authentication module for Tornado")
5353 (description
5354 "Provides support for adding authentication to services using the Tornado
5355web framework, either via the basic or digest authentication schemes.")
5356 (license license:asl2.0)))
5357
5358(define-public python-wsgi-intercept
5359 (package
5360 (name "python-wsgi-intercept")
5361 (version "1.13.1")
5362 (source (origin
5363 (method url-fetch)
5364 (uri (pypi-uri "wsgi_intercept" version))
5365 (sha256
5366 (base32
5367 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
5368 (build-system pyproject-build-system)
5369 (arguments
5370 (list
5371 ;; XXX: tests required internet access
5372 #:tests? #f))
5373 (propagated-inputs
5374 (list python-six))
5375 (native-inputs
5376 (list python-httplib2
5377 python-pytest
5378 python-requests
5379 python-setuptools
5380 python-urllib3
5381 python-wheel))
5382 (synopsis "Puts a WSGI application in place of a real URI for testing")
5383 (description "Wsgi_intercept installs a WSGI application in place of a real
5384URI for testing. Testing a WSGI application normally involves starting a
5385server at a local host and port, then pointing your test code to that address.
5386Instead, this library lets you intercept calls to any specific host/port
5387combination and redirect them into a WSGI application importable by your test
5388program. Thus, you can avoid spawning multiple processes or threads to test
5389your Web app.")
5390 (home-page "https://github.com/cdent/wsgi-intercept")
5391 (license license:expat)))
5392
5393(define-public python-webob
5394 (package
5395 (name "python-webob")
5396 (version "1.8.9")
5397 (source
5398 (origin
5399 (method url-fetch)
5400 (uri (pypi-uri "webob" version))
5401 (sha256
5402 (base32
5403 "12b5sl10yzzzz3g11kij3rdzk9y6583ywggc6h9nsxmnxpi7hq5d"))))
5404 (build-system pyproject-build-system)
5405 ;; tests: 2380 passed, 9 skipped, 1 xfailed, 12 warnings
5406 (native-inputs
5407 (list python-pytest
5408 python-setuptools))
5409 (home-page "https://webob.org/")
5410 (synopsis "WSGI request and response object")
5411 (description
5412 "WebOb provides wrappers around the WSGI request environment, and an
5413object to help create WSGI responses.")
5414 (license license:expat)))
5415
5416(define-public python-zc-lockfile
5417 (package
5418 (name "python-zc-lockfile")
5419 (version "4.0")
5420 (source
5421 (origin
5422 (method git-fetch)
5423 (uri (git-reference
5424 (url "https://github.com/zopefoundation/zc.lockfile")
5425 (commit version)))
5426 (file-name (git-file-name name version))
5427 (sha256
5428 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
5429 (build-system pyproject-build-system)
5430 (arguments
5431 (list
5432 #:phases
5433 #~(modify-phases %standard-phases
5434 (replace 'check
5435 (lambda* (#:key tests? #:allow-other-keys)
5436 (if tests?
5437 (invoke "zope-testrunner" "--test-path=src")
5438 (format #t "test suite not run~%")))))))
5439 (native-inputs (list python-zope-testing python-zope-testrunner
5440 python-setuptools))
5441 (home-page "https://github.com/zopefoundation/zc.lockfile")
5442 (synopsis "Interprocess locks using lock files")
5443 (description
5444 "This package provides an implementation of interprocess locks using lock
5445files. These locks can also be used to mediate access to other files.")
5446 (license license:zpl2.1)))
5447
5448(define-public python-zconfig
5449 (package
5450 (name "python-zconfig")
5451 (version "4.0")
5452 (source
5453 (origin
5454 (method git-fetch)
5455 (uri (git-reference
5456 (url "https://github.com/zopefoundation/ZConfig/")
5457 (commit version)))
5458 (file-name (git-file-name name version))
5459 (sha256
5460 (base32 "1x502hyfijh6fc8n85cm046c44spwfmwcn2lnxa1axg8n0n5rsbp"))))
5461 (build-system pyproject-build-system)
5462 (arguments
5463 (list
5464 #:phases
5465 #~(modify-phases %standard-phases
5466 (replace 'check
5467 (lambda* (#:key tests? #:allow-other-keys)
5468 (if tests?
5469 (begin
5470 ;; This test assumes we still have setup.py in the
5471 ;; directory from which we import zconfig, which
5472 ;; does not work after installing the package.
5473 (delete-file-recursively
5474 "src/ZConfig/tests/test_readme.py")
5475 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
5476 (format #t "test suite not run~%")))))))
5477 (native-inputs (list python-docutils python-manuel python-zope-exceptions
5478 python-zope-testrunner python-setuptools))
5479 (home-page "https://github.com/zopefoundation/ZConfig/")
5480 (synopsis "Structured configuration library intended for general use")
5481 (description
5482 "@code{zconfig} is a configuration library intended for general use. It
5483supports a hierarchical schema-driven configuration model that allows a schema
5484to specify data conversion routines written in Python. Its model is very
5485different from the model supported by the @code{configparser} module found in
5486Python's standard library, and is more suitable to configuration-intensive
5487applications.")
5488 (license license:zpl2.1)))
5489
5490(define-public python-zodb
5491 (package
5492 (name "python-zodb")
5493 (version "6.0.1")
5494 (source
5495 (origin
5496 (method url-fetch)
5497 (uri (pypi-uri "zodb" version))
5498 (sha256
5499 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
5500 (build-system pyproject-build-system)
5501 (arguments
5502 (list
5503 #:phases
5504 #~(modify-phases %standard-phases
5505 (replace 'check
5506 (lambda* (#:key tests? #:allow-other-keys)
5507 (if tests?
5508 (begin
5509 ;; This test does not work after installing the
5510 ;; package, since it expects the ZODB source code
5511 ;; to reside in the src/ directory.
5512 (delete-file-recursively
5513 "src/ZODB/tests/testdocumentation.py")
5514 (invoke "zope-testrunner" "-vv" "--test-path=src"
5515 "--all"))
5516 (format #t "test suite not run~%")))))))
5517 (native-inputs
5518 (list python-manuel
5519 python-wheel
5520 python-zope-testing
5521 python-zope-testrunner))
5522 (propagated-inputs
5523 (list python-btrees
5524 python-persistent
5525 python-transaction
5526 python-zc-lockfile
5527 python-zconfig
5528 python-zodbpickle
5529 python-zope-interface))
5530 (home-page "http://zodb-docs.readthedocs.io")
5531 (synopsis "Object-oriented database for Python")
5532 (description
5533 "@code{ZODB} provides an object-oriented and @acronym{ACID,
5534Atomicity Consistency Isolation Durability} compliant database for Python with
5535a high degree of transparency. @code{ZODB} is an object-oriented database,
5536not an object-relational mapping. This comes with several advantaged:
5537
5538@itemize
5539@item no separate language for database operations
5540@item very little impact on your code to make objects persistent
5541@item no database mapper that partially hides the database.
5542@item almost no seam between code and database.
5543@end itemize")
5544 (license license:zpl2.1)))
5545
5546(define-public python-zodbpickle
5547 (package
5548 (name "python-zodbpickle")
5549 (version "3.2")
5550 (source
5551 (origin
5552 (method url-fetch)
5553 (uri (pypi-uri "zodbpickle" version))
5554 (sha256
5555 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
5556 (build-system pyproject-build-system)
5557 (arguments
5558 '(#:phases (modify-phases %standard-phases
5559 (replace 'check
5560 (lambda* (#:key tests? #:allow-other-keys)
5561 (if tests?
5562 (invoke "zope-testrunner" "-vv" "--test-path=src"
5563 "--all")
5564 (format #t "test suite not run~%")))))))
5565 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
5566 (home-page "https://github.com/zopefoundation/zodbpickle")
5567 (synopsis "Uniform pickling interface for @code{zodb}")
5568 (description
5569 "This package is a fork of the @code{pickle} module (and the
5570supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
5571support for the @code{noload} operations used by @code{zodb}.")
5572 (license (list license:psfl license:zpl2.1))))
5573
5574(define-public python-zope-dottedname
5575 (package
5576 (name "python-zope-dottedname")
5577 (version "7.0")
5578 (source
5579 (origin
5580 (method git-fetch)
5581 (uri (git-reference
5582 (url "https://github.com/zopefoundation/zope.dottedname")
5583 (commit version)))
5584 (file-name (git-file-name name version))
5585 (sha256
5586 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
5587 (build-system pyproject-build-system)
5588 (arguments
5589 (list #:test-backend #~'custom
5590 #:test-flags #~(list "src/zope/dottedname/tests.py")))
5591 (native-inputs (list python-setuptools))
5592 (home-page "https://zopedottedname.readthedocs.io")
5593 (synopsis "Resolver for Python dotted names")
5594 (description
5595 "This package provides a @code{resolve()} function that resolves strings
5596containing dotted names into the appropriate Python object.")
5597 (license license:zpl2.1)))
5598
5599(define-public python-zope-event
5600 (package
5601 (name "python-zope-event")
5602 (version "6.0")
5603 (source
5604 (origin
5605 (method git-fetch)
5606 (uri (git-reference
5607 (url "https://github.com/zopefoundation/zope.event")
5608 (commit version)))
5609 (file-name (git-file-name name version))
5610 (sha256
5611 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
5612 (build-system pyproject-build-system)
5613 (arguments
5614 (list
5615 #:test-flags
5616 #~(list "src/zope/event/tests.py")))
5617 (native-inputs (list python-pytest python-setuptools))
5618 (home-page "https://zopeevent.readthedocs.io/en/latest/")
5619 (synopsis "Event publishing system for Python")
5620 (description
5621 "Zope.event provides an event publishing API, intended for use by
5622applications which are unaware of any subscribers to their events. It is a
5623simple event-dispatching system on which more sophisticated event dispatching
5624systems can be built.")
5625 (license license:zpl2.1)))
5626
5627(define-public python-zope-interface
5628 (package
5629 (name "python-zope-interface")
5630 (version "7.2")
5631 (source
5632 (origin
5633 (method git-fetch)
5634 (uri (git-reference
5635 (url "https://github.com/zopefoundation/zope.interface")
5636 (commit version)))
5637 (file-name (git-file-name name version))
5638 (sha256
5639 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
5640 (build-system pyproject-build-system)
5641 (arguments
5642 ;; XXX: test suite can't find python-zope-testing
5643 (list #:tests? #f))
5644 (native-inputs (list python-setuptools))
5645 (home-page "https://zopeinterface.readthedocs.io")
5646 (synopsis "\"Design by contract\" methodology in Python")
5647 (description
5648 "Zope.interface provides an implementation of \"object interfaces\" for
5649Python. Interfaces are a mechanism for labeling objects as conforming to a
5650given API or contract.")
5651 (license license:zpl2.1)))
5652
5653(define-public python-zope-exceptions
5654 (package
5655 (name "python-zope-exceptions")
5656 (version "6.0")
5657 (source
5658 (origin
5659 (method git-fetch)
5660 (uri (git-reference
5661 (url "https://github.com/zopefoundation/zope.exceptions")
5662 (commit version)))
5663 (file-name (git-file-name name version))
5664 (sha256
5665 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
5666 (build-system pyproject-build-system)
5667 (arguments
5668 (list
5669 #:phases
5670 #~(modify-phases %standard-phases
5671 (replace 'check
5672 (lambda* (#:key tests? #:allow-other-keys)
5673 (if tests?
5674 (invoke "zope-testrunner" "--test-path=src")
5675 (format #t "test suite not run~%")))))))
5676 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
5677 (propagated-inputs (list python-zope-interface))
5678 (home-page "https://github.com/zopefoundation/zope.exceptions")
5679 (synopsis "Zope exceptions")
5680 (description
5681 "Zope.exceptions provides general-purpose exception types that have uses
5682outside of the Zope framework.")
5683 (license license:zpl2.1)))
5684
5685(define (python-zope-bootstrap-package orig)
5686 (package
5687 (inherit orig)
5688 (name (string-append (package-name orig) "-bootstrap"))
5689 (arguments
5690 (if (null? (package-arguments orig))
5691 (list
5692 #:tests? #f
5693 #:phases #~(modify-phases %standard-phases
5694 (delete 'sanity-check)))
5695 (substitute-keyword-arguments (package-arguments orig)
5696 ((#:tests? _ #f) #f)
5697 ((#:phases phases '%standard-phases)
5698 #~(modify-phases #$phases
5699 (delete 'sanity-check))))))
5700 (propagated-inputs `())
5701 (native-inputs (list python-setuptools))
5702 (properties `((hidden? . #t)))))
5703
5704(define-public python-zope-exceptions-bootstrap
5705 (python-zope-bootstrap-package python-zope-exceptions))
5706
5707(define-public python-zope-testing
5708 (package
5709 (name "python-zope-testing")
5710 (version "6.0")
5711 (source
5712 (origin
5713 (method git-fetch)
5714 (uri (git-reference
5715 (url "https://github.com/zopefoundation/zope.testing")
5716 (commit version)))
5717 (file-name (git-file-name name version))
5718 (sha256
5719 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
5720 (build-system pyproject-build-system)
5721 (arguments
5722 (list
5723 #:phases
5724 #~(modify-phases %standard-phases
5725 (replace 'check
5726 (lambda* (#:key tests? #:allow-other-keys)
5727 (if tests?
5728 (invoke "zope-testrunner" "--test-path=src")
5729 (format #t "test suite not run~%")))))))
5730 (native-inputs (list python-setuptools
5731 python-zope-interface
5732 python-zope-testrunner-bootstrap))
5733 (home-page "https://zopetesting.readthedocs.io/")
5734 (synopsis "Zope testing helpers")
5735 (description
5736 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
5737servers, regular expressions, and more.")
5738 (license license:zpl2.1)))
5739
5740(define-public python-zope-testrunner
5741 (package
5742 (name "python-zope-testrunner")
5743 (version "7.4")
5744 (source
5745 (origin
5746 (method git-fetch)
5747 (uri (git-reference
5748 (url "https://github.com/zopefoundation/zope.testrunner")
5749 (commit version)))
5750 (file-name (git-file-name name version))
5751 (sha256
5752 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
5753 (build-system pyproject-build-system)
5754 (arguments
5755 (list
5756 #:phases
5757 #~(modify-phases %standard-phases
5758 (add-after 'unpack 'remove-problematic-test
5759 (lambda _
5760 ;; This test contains invalid syntax, which breaks bytecode
5761 ;; compilation. For simplicity just remove it.
5762 (delete-file
5763 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
5764 (replace 'check
5765 (lambda* (#:key tests? #:allow-other-keys)
5766 (if tests?
5767 (invoke "zope-testrunner" "--test-path=src")
5768 (format #t "test suite not run~%")))))))
5769 (native-inputs (list python-setuptools python-zope-testing))
5770 (propagated-inputs (list python-zope-exceptions python-zope-interface))
5771 (home-page "https://zopetestrunner.readthedocs.io")
5772 (synopsis "Zope testrunner script")
5773 (description "This package provides a script for running Python tests.")
5774 (license license:zpl2.1)))
5775
5776(define-public python-zope-testrunner-bootstrap
5777 (package
5778 (inherit (python-zope-bootstrap-package python-zope-testrunner))
5779 (propagated-inputs
5780 (list python-six python-zope-exceptions-bootstrap))
5781 (properties `((hidden? . #t)))))
5782
5783(define-public python-zope-i18nmessageid
5784 (package
5785 (name "python-zope-i18nmessageid")
5786 (version "7.0")
5787 (source
5788 (origin
5789 (method git-fetch)
5790 (uri (git-reference
5791 (url "https://github.com/zopefoundation/zope.i18nmessageid")
5792 (commit version)))
5793 (file-name (git-file-name name version))
5794 (sha256
5795 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
5796 (build-system pyproject-build-system)
5797 (arguments
5798 (list
5799 #:phases
5800 #~(modify-phases %standard-phases
5801 (replace 'check
5802 (lambda* (#:key tests? #:allow-other-keys)
5803 (if tests?
5804 (invoke "zope-testrunner" "--test-path=src")
5805 (format #t "test suite not run~%")))))))
5806 (native-inputs (list python-setuptools python-zope-testrunner))
5807 (home-page "https://zopei18nmessageid.readthedocs.io")
5808 (synopsis "Message identifiers for internationalization")
5809 (description "Zope.i18nmessageid provides facilities for declaring
5810internationalized messages within program source text.")
5811 (license license:zpl2.1)))
5812
5813(define-public python-zope-schema
5814 (package
5815 (name "python-zope-schema")
5816 (version "7.0.1")
5817 (source
5818 (origin
5819 (method git-fetch)
5820 (uri (git-reference
5821 (url "https://github.com/zopefoundation/zope.schema")
5822 (commit version)))
5823 (file-name (git-file-name name version))
5824 (sha256
5825 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
5826 (build-system pyproject-build-system)
5827 (arguments
5828 (list
5829 #:phases
5830 #~(modify-phases %standard-phases
5831 (replace 'check
5832 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5833 (add-installed-pythonpath inputs outputs)
5834 (if tests?
5835 (invoke "zope-testrunner" "--test-path=src")
5836 (format #t "test suite not run.~%")))))))
5837 (propagated-inputs (list python-zope-event python-zope-interface))
5838 (native-inputs (list python-zope-i18nmessageid python-zope-testing
5839 python-zope-testrunner python-setuptools))
5840 (home-page "https://zopeschema.readthedocs.io")
5841 (synopsis "Zope data schemas")
5842 (description "Zope.scheme provides extensions to zope.interface for
5843defining data schemas.")
5844 (license license:zpl2.1)))
5845
5846(define-public python-zope-sqlalchemy
5847 (package
5848 (name "python-zope-sqlalchemy")
5849 (version "1.6")
5850 (source
5851 (origin
5852 (method git-fetch)
5853 (uri (git-reference
5854 (url "https://github.com/zopefoundation/zope.sqlalchemy")
5855 (commit version)))
5856 (file-name (git-file-name name version))
5857 (sha256
5858 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
5859 (build-system pyproject-build-system)
5860 (arguments
5861 (list
5862 #:phases
5863 #~(modify-phases %standard-phases
5864 (replace 'check
5865 (lambda* (#:key tests? #:allow-other-keys)
5866 (if tests?
5867 (invoke "zope-testrunner" "--test-path=src")
5868 (format #t "test suite not run~%")))))))
5869 (propagated-inputs (list python-sqlalchemy python-transaction
5870 python-zope-interface))
5871 (native-inputs (list python-zope-testing python-zope-testrunner
5872 python-setuptools))
5873 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
5874 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
5875 (description
5876 "The aim of this package is to unify the plethora of existing packages
5877integrating SQLAlchemy with Zope's transaction management. As such,it only
5878provides a data manager and makes no attempt to define a @i{zopeish} way to
5879configure engines.")
5880 (license license:zpl2.1)))
5881
5882(define-public python-zope-configuration
5883 (package
5884 (name "python-zope-configuration")
5885 (version "7.0")
5886 (source
5887 (origin
5888 (method git-fetch)
5889 (uri (git-reference
5890 (url "https://github.com/zopefoundation/zope.configuration")
5891 (commit version)))
5892 (file-name (git-file-name name version))
5893 (sha256
5894 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
5895 (build-system pyproject-build-system)
5896 (arguments
5897 (list
5898 #:phases
5899 #~(modify-phases %standard-phases
5900 (replace 'check
5901 (lambda* (#:key tests? #:allow-other-keys)
5902 (if tests?
5903 (invoke "zope-testrunner" "--test-path=src")
5904 (format #t "test suite not run~%")))))))
5905 (native-inputs (list python-manuel python-setuptools python-zope-testing
5906 python-zope-testrunner))
5907 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
5908 python-zope-schema))
5909 (home-page "https://zopeconfiguration.readthedocs.io")
5910 (synopsis "Zope Configuration Markup Language")
5911 (description "Zope.configuration implements ZCML, the Zope Configuration
5912Markup Language.")
5913 (license license:zpl2.1)))
5914
5915(define-public python-zope-configuration-bootstrap
5916 (python-zope-bootstrap-package python-zope-configuration))
5917
5918(define-public python-zope-copy
5919 (package
5920 (name "python-zope-copy")
5921 (version "6.0")
5922 (source
5923 (origin
5924 (method git-fetch)
5925 (uri (git-reference
5926 (url "https://github.com/zopefoundation/zope.copy")
5927 (commit version)))
5928 (file-name (git-file-name name version))
5929 (sha256
5930 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
5931 (build-system pyproject-build-system)
5932 (arguments
5933 (list
5934 #:phases
5935 #~(modify-phases %standard-phases
5936 (replace 'check
5937 (lambda* (#:key tests? #:allow-other-keys)
5938 (if tests?
5939 (invoke "zope-testrunner" "--test-path=src")
5940 (format #t "test suite not run~%")))))))
5941 (propagated-inputs (list python-zope-interface))
5942 (native-inputs
5943 (list python-zodbpickle
5944 python-zope-component-bootstrap
5945 python-zope-location-bootstrap
5946 python-zope-proxy
5947 python-zope-schema
5948 python-zope-testing
5949 python-zope-testrunner
5950 python-setuptools))
5951 (home-page "https://zopecopy.readthedocs.io")
5952 (synopsis "Pluggable object copying mechanism")
5953 (description
5954 "This package provides a pluggable mechanism for copying persistent objects.")
5955 (license license:zpl2.1)))
5956
5957(define-public python-zope-proxy
5958 (package
5959 (name "python-zope-proxy")
5960 (version "7.0")
5961 (source
5962 (origin
5963 (method git-fetch)
5964 (uri (git-reference
5965 (url "https://github.com/zopefoundation/zope.proxy")
5966 (commit version)))
5967 (file-name (git-file-name name version))
5968 (sha256
5969 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
5970 (build-system pyproject-build-system)
5971 (arguments
5972 (list
5973 #:phases
5974 #~(modify-phases %standard-phases
5975 (replace 'check
5976 (lambda* (#:key tests? #:allow-other-keys)
5977 (if tests?
5978 (invoke "zope-testrunner" "--test-path=src")
5979 (format #t "test suite not run~%")))))))
5980 (native-inputs
5981 (list python-zope-location-bootstrap
5982 python-zope-security-bootstrap
5983 python-zope-testrunner
5984 python-setuptools))
5985 (propagated-inputs (list python-zope-interface))
5986 (home-page "https://zopeproxy.readthedocs.io")
5987 (synopsis "Generic, transparent proxies")
5988 (description
5989 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
5990special objects which serve as mostly-transparent wrappers around another
5991object, intervening in the apparent behavior of the wrapped object only when
5992necessary to apply the policy (e.g., access checking, location brokering,
5993etc.) for which the proxy is responsible.")
5994 (license license:zpl2.1)))
5995
5996(define-public python-zope-proxy-bootstrap
5997 (python-zope-bootstrap-package python-zope-proxy))
5998
5999(define-public python-zope-hookable
6000 (package
6001 (name "python-zope-hookable")
6002 (version "7.0")
6003 (source
6004 (origin
6005 (method git-fetch)
6006 (uri (git-reference
6007 (url "https://github.com/zopefoundation/zope.hookable")
6008 (commit version)))
6009 (file-name (git-file-name name version))
6010 (sha256
6011 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
6012 (build-system pyproject-build-system)
6013 (arguments
6014 (list
6015 #:phases
6016 #~(modify-phases %standard-phases
6017 (replace 'check
6018 (lambda* (#:key tests? #:allow-other-keys)
6019 (if tests?
6020 (invoke "zope-testrunner" "--test-path=src")
6021 (format #t "test suite not run~%")))))))
6022 (native-inputs (list python-zope-testing python-zope-testrunner
6023 python-setuptools))
6024 (home-page "https://zopehookable.readthedocs.io")
6025 (synopsis "Zope hookable")
6026 (description
6027 "This package supports the efficient creation of hookable objects, which
6028are callable objects that are meant to be optionally replaced. The idea is
6029that you create a function that does some default thing and make i hookable.
6030Later, someone can modify what it does by calling its sethook method and
6031changing its implementation. All users of the function, including those that
6032imported it, will see the change.")
6033 (license license:zpl2.1)))
6034
6035(define-public python-zope-location
6036 (package
6037 (name "python-zope-location")
6038 (version "6.0")
6039 (source
6040 (origin
6041 (method git-fetch)
6042 (uri (git-reference
6043 (url "https://github.com/zopefoundation/zope.location")
6044 (commit version)))
6045 (file-name (git-file-name name version))
6046 (sha256
6047 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
6048 (build-system pyproject-build-system)
6049 (arguments
6050 (list
6051 #:phases
6052 #~(modify-phases %standard-phases
6053 (replace 'check
6054 (lambda* (#:key tests? #:allow-other-keys)
6055 (if tests?
6056 (invoke "zope-testrunner" "--test-path=src")
6057 (format #t "test suite not run~%")))))))
6058 (native-inputs (list python-zope-testrunner python-setuptools))
6059 (propagated-inputs (list python-zope-interface python-zope-proxy
6060 python-zope-schema))
6061 (home-page "https://zopelocation.readthedocs.io")
6062 (synopsis "Zope location library")
6063 (description
6064 "Zope.location implements the concept of \"locations\" in Zope3, which
6065are are special objects that have a structural location.")
6066 (license license:zpl2.1)))
6067
6068(define-public python-zope-location-bootstrap
6069 (python-zope-bootstrap-package python-zope-location))
6070
6071(define-public python-zope-security
6072 (package
6073 (name "python-zope-security")
6074 (version "7.3")
6075 (source
6076 (origin
6077 (method git-fetch)
6078 (uri (git-reference
6079 (url "https://github.com/zopefoundation/zope.security")
6080 (commit version)))
6081 (file-name (git-file-name name version))
6082 (sha256
6083 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
6084 (build-system pyproject-build-system)
6085 (arguments
6086 (list
6087 #:phases
6088 #~(modify-phases %standard-phases
6089 (replace 'check
6090 (lambda* (#:key tests? #:allow-other-keys)
6091 (if tests?
6092 (invoke "zope-testrunner" "--test-path=src")
6093 (format #t "test suite not run~%")))))))
6094 (propagated-inputs
6095 (list python-zope-component
6096 python-zope-i18nmessageid
6097 python-zope-interface
6098 python-zope-location
6099 python-zope-proxy
6100 python-zope-schema))
6101 (native-inputs
6102 (list python-btrees
6103 python-zope-component-bootstrap
6104 python-zope-configuration-bootstrap
6105 python-zope-location-bootstrap
6106 python-zope-testing
6107 python-zope-testrunner
6108 python-setuptools))
6109 (home-page "https://zopesecurity.readthedocs.io")
6110 (synopsis "Zope security framework")
6111 (description "Zope.security provides a generic mechanism to implement
6112security policies on Python objects.")
6113 (license license:zpl2.1)))
6114
6115(define-public python-zope-security-bootstrap
6116 (package
6117 (inherit (python-zope-bootstrap-package python-zope-security))
6118 (propagated-inputs
6119 (list python-zope-i18nmessageid
6120 python-zope-interface
6121 python-zope-proxy-bootstrap
6122 python-zope-schema))))
6123
6124(define-public python-zope-component
6125 (package
6126 (name "python-zope-component")
6127 (version "7.0")
6128 (source
6129 (origin
6130 (method git-fetch)
6131 (uri (git-reference
6132 (url "https://github.com/zopefoundation/zope.component")
6133 (commit version)))
6134 (file-name (git-file-name name version))
6135 (sha256
6136 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
6137 (build-system pyproject-build-system)
6138 (arguments
6139 (list
6140 #:phases
6141 #~(modify-phases %standard-phases
6142 (replace 'check
6143 (lambda* (#:key tests? #:allow-other-keys)
6144 (if tests?
6145 (invoke "zope-testrunner" "--test-path=src")
6146 (format #t "test suite not run~%")))))))
6147 (native-inputs
6148 (list python-persistent
6149 python-zope-configuration-bootstrap
6150 python-zope-i18nmessageid
6151 python-zope-location-bootstrap
6152 python-zope-proxy-bootstrap
6153 python-zope-security-bootstrap
6154 python-zope-testing
6155 python-zope-testrunner
6156 python-setuptools))
6157 (propagated-inputs
6158 (list python-zope-deferredimport python-zope-deprecation
6159 python-zope-event python-zope-hookable python-zope-interface))
6160 (home-page "https://zopecomponent.readthedocs.io")
6161 (synopsis "Zope Component Architecture")
6162 (description
6163 "Zope.component represents the core of the Zope Component Architecture.
6164Together with the zope.interface package, it provides facilities for defining,
6165registering and looking up components.")
6166 (license license:zpl2.1)))
6167
6168(define-public python-zope-component-bootstrap
6169 (python-zope-bootstrap-package python-zope-component))
6170
6171(define-public python-zope-deferredimport
6172 (package
6173 (name "python-zope-deferredimport")
6174 (version "6.0")
6175 (source
6176 (origin
6177 (method git-fetch)
6178 (uri (git-reference
6179 (url "https://github.com/zopefoundation/zope.deferredimport")
6180 (commit version)))
6181 (file-name (git-file-name name version))
6182 (sha256
6183 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
6184 (build-system pyproject-build-system)
6185 (arguments
6186 (list
6187 #:phases
6188 #~(modify-phases %standard-phases
6189 (replace 'check
6190 (lambda* (#:key tests? #:allow-other-keys)
6191 (if tests?
6192 (invoke "zope-testrunner" "--test-path=src")
6193 (format #t "test suite not run~%")))))))
6194 (propagated-inputs (list python-zope-proxy))
6195 (native-inputs (list python-zope-testrunner python-setuptools))
6196 (home-page "https://zopedeferredimport.readthedocs.io")
6197 (synopsis "Defer imports until used by code")
6198 (description
6199 "Often, especially for package modules, you want to import names for
6200convenience, but not actually perform the imports until necessary. The
6201@code{zope.deferredimport} package provided facilities for defining names in
6202modules that will be imported from somewhere else when used. You can also cause
6203deprecation warnings to be issued when a variable is used.")
6204 (license license:zpl2.1)))
6205
6206(define-public python-ndg-httpsclient
6207 (package
6208 (name "python-ndg-httpsclient")
6209 (version "0.5.1")
6210 (source
6211 (origin
6212 (method git-fetch)
6213 (uri (git-reference
6214 (url "https://github.com/cedadev/ndg_httpsclient/")
6215 (commit version)))
6216 (file-name (git-file-name name version))
6217 (sha256
6218 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
6219 (build-system pyproject-build-system)
6220 (arguments
6221 (list
6222 #:tests? #f)) ;Tests appear to require networking.
6223 (native-inputs (list python-setuptools))
6224 (propagated-inputs (list python-pyasn1 python-pyopenssl))
6225 (synopsis "HTTPS support for Python's httplib and urllib2")
6226 (description
6227 "This is a HTTPS client implementation for httplib and urllib2 based on
6228PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
6229the default provided with Python and, importantly, enables full verification
6230of the SSL peer.")
6231 (home-page "https://github.com/cedadev/ndg_httpsclient/")
6232 (license license:bsd-3)))
6233
6234(define-public python-netaddr
6235 (package
6236 (name "python-netaddr")
6237 (version "1.3.0")
6238 (source
6239 (origin
6240 (method url-fetch)
6241 (uri (pypi-uri "netaddr" version))
6242 (sha256
6243 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
6244 (build-system pyproject-build-system)
6245 (native-inputs (list python-poetry-core
6246 python-pytest
6247 python-setuptools
6248 python-wheel))
6249 (home-page "https://netaddr.readthedocs.io")
6250 (synopsis "Pythonic manipulation of network addresses")
6251 (description
6252 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
6253and MAC network addresses.")
6254 (license license:bsd-3)))
6255
6256(define-public python-nh3
6257 (package
6258 (name "python-nh3")
6259 (version "0.2.20")
6260 (source
6261 (origin
6262 (method url-fetch)
6263 (uri (pypi-uri "nh3" version))
6264 (sha256
6265 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
6266 (build-system pyproject-build-system)
6267 (arguments
6268 (list
6269 #:imported-modules `(,@%cargo-build-system-modules
6270 ,@%pyproject-build-system-modules)
6271 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
6272 (guix build pyproject-build-system)
6273 (guix build utils))
6274 #:phases
6275 #~(modify-phases %standard-phases
6276 (add-after 'unpack 'prepare-cargo-build-system
6277 (lambda args
6278 (for-each
6279 (lambda (phase)
6280 (format #t "Running cargo phase: ~a~%" phase)
6281 (apply (assoc-ref cargo:%standard-phases phase)
6282 #:cargo-target #$(cargo-triplet)
6283 args))
6284 '(unpack-rust-crates
6285 configure
6286 check-for-pregenerated-files
6287 patch-cargo-checksums)))))))
6288 (native-inputs
6289 (append
6290 (list maturin python-pytest rust `(,rust "cargo"))
6291 (or (and=> (%current-target-system)
6292 (compose list make-rust-sysroot))
6293 '())))
6294 (inputs (cargo-inputs 'python-nh3))
6295 (home-page "https://nh3.readthedocs.io")
6296 (synopsis "Python bindings to Ammonia HTML sanitization library")
6297 (description "This package provides Python bindings to Ammonia HTML
6298sanitizer Rust crate.")
6299 (license license:expat)))
6300
6301(define-public python-noiseprotocol
6302 (package
6303 (name "python-noiseprotocol")
6304 (version "0.3.1")
6305 (source
6306 (origin
6307 (method git-fetch)
6308 (uri (git-reference
6309 (url "https://github.com/plizonczyk/noiseprotocol")
6310 (commit (string-append "v" version))))
6311 (file-name (git-file-name name version))
6312 (sha256
6313 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
6314 (build-system pyproject-build-system)
6315 (propagated-inputs (list python-cryptography))
6316 (native-inputs (list python-setuptools python-pytest))
6317 (home-page "https://github.com/plizonczyk/noiseprotocol")
6318 (synopsis "Implementation of Noise Protocol Framework")
6319 (description
6320 "This package provides an implementation of Noise Protocol Framework.")
6321 (license license:expat)))
6322
6323(define-public python-webrtcvad-wheels
6324 (package
6325 (name "python-webrtcvad-wheels")
6326 (version "2.0.14")
6327 (source
6328 (origin
6329 (method git-fetch)
6330 (uri (git-reference
6331 (url "https://github.com/daanzu/py-webrtcvad-wheels")
6332 (commit (string-append "v" version))))
6333 (file-name (git-file-name name version))
6334 (sha256
6335 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
6336 (build-system pyproject-build-system)
6337 (native-inputs (list python-psutil python-pytest python-setuptools))
6338 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
6339 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
6340 (description
6341 "This package provides a Python interface to the Google
6342@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
6343 (license license:expat)))
6344
6345(define-public python-websocket-client
6346 (package
6347 (name "python-websocket-client")
6348 (version "1.8.0")
6349 (source
6350 (origin
6351 (method url-fetch)
6352 (uri (pypi-uri "websocket_client" version))
6353 (sha256
6354 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
6355 (build-system pyproject-build-system)
6356 (arguments
6357 (list
6358 #:test-flags
6359 ;; This test requires networking.
6360 '(list "-k" "not testConnect")))
6361 (native-inputs
6362 (list python-pysocks
6363 python-pytest
6364 python-setuptools
6365 python-websockets
6366 python-wheel))
6367 (home-page "https://github.com/websocket-client/websocket-client")
6368 (synopsis "WebSocket client for Python")
6369 (description "The Websocket-client module provides the low level APIs for
6370WebSocket usage in Python programs.")
6371 (license license:lgpl2.1+)))
6372
6373(define-public python-websocket-client-0.59
6374 (package
6375 (inherit python-websocket-client)
6376 (version "0.59.0")
6377 (source
6378 (origin
6379 (method url-fetch)
6380 (uri (pypi-uri "websocket-client" version))
6381 (sha256
6382 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
6383 (native-inputs
6384 (modify-inputs (package-native-inputs python-websocket-client)
6385 (append python-six)))))
6386
6387(define-public python-purl
6388 (package
6389 (name "python-purl")
6390 (version "1.6")
6391 (source
6392 (origin
6393 (method git-fetch)
6394 (uri (git-reference
6395 (url "https://github.com/codeinthehole/purl")
6396 (commit version)))
6397 (file-name (git-file-name name version))
6398 (sha256
6399 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
6400 (build-system pyproject-build-system)
6401 (arguments
6402 (list
6403 #:test-flags #~(list "--pyargs" "./tests")))
6404 (native-inputs (list python-pytest python-setuptools))
6405 (propagated-inputs (list python-six))
6406 (home-page "https://github.com/codeinthehole/purl")
6407 (synopsis "Python package for URL manipulation")
6408 (description "Purl is a Python package for handling URLs.")
6409 (license license:expat)))
6410
6411(define-public python-apiron
6412 (package
6413 (name "python-apiron")
6414 (version "5.1.0")
6415 (source
6416 (origin
6417 (method url-fetch)
6418 (uri (pypi-uri "apiron" version))
6419 (sha256
6420 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
6421 (build-system pyproject-build-system)
6422 (arguments
6423 (list #:test-flags '(list "-k" "not test_call")))
6424 (propagated-inputs
6425 (list python-requests))
6426 (native-inputs
6427 (list python-pytest python-pytest-cov
6428 python-setuptools python-wheel))
6429 (home-page "https://github.com/ithaka/apiron")
6430 (synopsis "Python wrapper for interacting with RESTful APIs")
6431 (description
6432 "@code{apiron} provides a declarative, structured configuration of
6433services and endpoints with a unified interface for interacting with RESTful
6434APIs.")
6435 (license license:expat)))
6436
6437(define-public python-beren
6438 (package
6439 (name "python-beren")
6440 (version "0.7.0")
6441 (source
6442 (origin
6443 (method git-fetch)
6444 (uri (git-reference
6445 (url "https://github.com/teffalump/beren")
6446 (commit (string-append "v" version))))
6447 (file-name (git-file-name name version))
6448 (sha256
6449 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
6450 (build-system pyproject-build-system)
6451 (arguments
6452 ;; The test tries to open a connection to a remote server.
6453 `(#:tests? #f))
6454 (native-inputs (list python-setuptools))
6455 (propagated-inputs (list python-apiron))
6456 (home-page "https://github.com/teffalump/beren")
6457 (synopsis "REST client for Orthanc DICOM servers")
6458 (description
6459 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
6460 (license license:gpl3+)))
6461
6462(define-public python-requests
6463 (package
6464 (name "python-requests")
6465 (version "2.32.5")
6466 (source (origin
6467 (method url-fetch)
6468 (uri (pypi-uri "requests" version))
6469 (sha256
6470 (base32
6471 "1kypqz701x9s7j4shm1pdnzy4pzx9lmvhwgan0yqa071asn0pfnv"))))
6472 (build-system pyproject-build-system)
6473 (arguments
6474 (list #:test-flags
6475 ;; These require internet access
6476 '(list "--ignore=tests/test_requests.py"
6477 "-k" (string-append "not test_use_proxy_from_environment"
6478 " and not requests.sessions.Session"
6479 " and not requests.models.PreparedRequest"
6480 " and not requests.api.request")
6481 "tests/")))
6482 (propagated-inputs
6483 (list python-certifi
6484 python-charset-normalizer
6485 python-idna
6486 python-urllib3))
6487 (native-inputs
6488 (list python-pytest
6489 python-pytest-mock
6490 python-setuptools))
6491 (home-page "https://requests.readthedocs.io/")
6492 (synopsis "Python HTTP library")
6493 (description
6494 "Requests is a Python HTTP client library. It aims to be easier to use
6495than Python’s urllib2 library.")
6496 (license license:asl2.0)))
6497
6498(define-deprecated/public-alias python-requests-next
6499 python-requests) ;may be removed after 2025-12-01
6500
6501(define-public python-requests-kerberos
6502 (package
6503 (name "python-requests-kerberos")
6504 (version "0.14.0")
6505 ;; No tests in the PyPI tarball.
6506 (source
6507 (origin
6508 (method git-fetch)
6509 (uri (git-reference
6510 (url "https://github.com/requests/requests-kerberos")
6511 (commit (string-append "v" version))))
6512 (file-name (git-file-name name version))
6513 (sha256
6514 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
6515 (build-system pyproject-build-system)
6516 (propagated-inputs (list python-cryptography
6517 python-pyspnego
6518 python-requests))
6519 (native-inputs (list python-pytest python-pytest-mock python-setuptools
6520 python-wheel))
6521 (home-page "https://github.com/requests/requests-kerberos")
6522 (synopsis "Kerberos authentication handler for python-requests")
6523 (description "This package provides a Kerberos authentication handler for
6524python-requests.")
6525 (license license:isc)))
6526
6527(define-public python-requests-unixsocket2
6528 (package
6529 (name "python-requests-unixsocket2")
6530 (version "1.0.1")
6531 (source
6532 (origin
6533 (method git-fetch)
6534 (uri (git-reference
6535 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
6536 (commit (string-append "v" version))))
6537 (sha256
6538 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
6539 (build-system pyproject-build-system)
6540 (native-inputs
6541 (list nss-certs-for-test
6542 python-hatchling
6543 python-pytest
6544 python-waitress))
6545 (propagated-inputs
6546 (list python-requests
6547 python-urllib3))
6548 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
6549 (synopsis "Talk HTTP via a UNIX domain socket")
6550 (description
6551 "This Python package lets you use the @code{requests} library to talk
6552HTTP via a UNIX domain socket.")
6553 (license license:asl2.0)))
6554
6555(define-deprecated-package python-requests-unixsocket
6556 python-requests-unixsocket2)
6557
6558(define-public python-requests-ntlm
6559 (package
6560 (name "python-requests-ntlm")
6561 (version "1.3.0")
6562 (source
6563 (origin
6564 (method git-fetch)
6565 (uri (git-reference
6566 (url "https://github.com/requests/requests-ntlm")
6567 (commit (string-append "v" version))))
6568 (file-name (git-file-name name version))
6569 (sha256
6570 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
6571 (build-system pyproject-build-system)
6572 (arguments
6573 (list
6574 #:test-flags
6575 ;; XXX: Connection refused.
6576 #~(list "-k" (string-join
6577 (list "not test_ntlm_http_with_cbt"
6578 "test_ntlm_http_without_cbt"
6579 "test_ntlm_https_with_cbt"
6580 "test_ntlm_https_without_cbt")
6581 " and not "))
6582 #:phases
6583 #~(modify-phases %standard-phases
6584 (add-before 'check 'spawn-test-server
6585 (lambda _
6586 ;; Taken from .github/workflows/ci.yml.
6587 (spawn "python"
6588 (list "python" "-m" "tests.test_server")))))))
6589 (propagated-inputs
6590 (list python-cryptography python-pyspnego python-requests))
6591 (native-inputs (list python-flask python-pytest python-setuptools))
6592 (home-page "https://github.com/requests/requests-ntlm")
6593 (synopsis "NTLM authentication support for Requests")
6594 (description
6595 "This package allows for HTTP NTLM authentication using the requests
6596library.")
6597 (license license:isc)))
6598
6599(define-public python-requests-mock
6600 (package
6601 (name "python-requests-mock")
6602 (version "1.12.1")
6603 (source
6604 (origin
6605 (method url-fetch)
6606 (uri (pypi-uri "requests-mock" version))
6607 (sha256
6608 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
6609 (build-system pyproject-build-system)
6610 (native-inputs
6611 (list python-purl
6612 python-pytest
6613 python-requests-futures
6614 python-setuptools
6615 python-setuptools-scm
6616 python-testtools))
6617 (propagated-inputs
6618 (list python-requests))
6619 (home-page "https://requests-mock.readthedocs.org/")
6620 (synopsis "Mock out responses from the requests package")
6621 (description
6622 "This module provides a building block to stub out the HTTP requests
6623portions of your testing code.")
6624 (license license:asl2.0)))
6625
6626(define-public python-requests-toolbelt
6627 (package
6628 (name "python-requests-toolbelt")
6629 (version "1.0.0")
6630 (source
6631 (origin
6632 (method url-fetch)
6633 (uri (pypi-uri "requests-toolbelt" version))
6634 (sha256
6635 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
6636 (build-system pyproject-build-system)
6637 (arguments
6638 (list
6639 #:test-flags
6640 ;; Requiring networking or fail due not valid certs: AttributeError:
6641 ;; 'MockHTTPResponse' object has no attribute 'close'
6642 #~(list "-k" (string-append "not test_dump_all"
6643 " and not test_dump_response"
6644 " and not test_prepared_request_override_base"
6645 " and not test_prepared_request_with_base"
6646 " and not test_request_override_base"
6647 " and not test_request_with_base"))))
6648 (native-inputs
6649 (list python-betamax
6650 python-mock
6651 python-pyopenssl
6652 python-pytest
6653 python-setuptools
6654 python-trustme
6655 python-wheel))
6656 (propagated-inputs
6657 (list python-requests))
6658 (synopsis "Extensions to python-requests")
6659 (description "This is a toolbelt of useful classes and functions to be used
6660with python-requests.")
6661 (home-page "https://github.com/requests/toolbelt/")
6662 (license license:asl2.0)))
6663
6664(define-public python-requests-ftp
6665 (package
6666 (name "python-requests-ftp")
6667 (version "0.3.1")
6668 (source
6669 (origin
6670 (method url-fetch)
6671 (uri (pypi-uri "requests-ftp" version))
6672 (sha256
6673 (base32
6674 "0yh5v21v36dsjsgv4y9dx4mmz35741l5jf6pbq9w19d8rfsww13m"))))
6675 (build-system python-build-system)
6676 (propagated-inputs
6677 (list python-requests))
6678 (home-page
6679 "https://github.com/Lukasa/requests-ftp")
6680 (synopsis "FTP Transport Adapter for Requests")
6681 (description
6682 "Requests-FTP is an implementation of a simple FTP transport
6683adapter for use with the Requests library.")
6684 (license license:asl2.0)))
6685
6686(define-public python-aioftp
6687 (package
6688 (name "python-aioftp")
6689 (version "0.22.3")
6690 (source (origin
6691 (method url-fetch)
6692 (uri (pypi-uri "aioftp" version))
6693 (sha256
6694 (base32
6695 "0w621mg956m9rn7v39jpwi4gpnpl90pprwl29cp640dahqqv38ms"))))
6696 (build-system pyproject-build-system)
6697 (native-inputs
6698 (list python-async-timeout
6699 python-pytest
6700 python-pytest-asyncio
6701 python-pytest-cov
6702 python-setuptools
6703 python-trustme
6704 python-wheel))
6705 (propagated-inputs (list python-siosocks))
6706 (home-page "https://aioftp.readthedocs.io/")
6707 (synopsis "FTP client/server for asyncio in Python")
6708 (description
6709 "FTP client and server for asyncio (Python 3) Library implementing FTP
6710protocol, both client and server for Python asyncio module.
6711
6712 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
6713 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
6714 REST, LIST (as fallback).
6715
6716 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
6717 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
6718 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
6719 (license license:asl2.0)))
6720
6721(define-public python-mohawk
6722 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
6723 (revision "0"))
6724 (package
6725 (name "python-mohawk")
6726 (version (git-version "1.1.0" revision commit))
6727 (source
6728 (origin
6729 (method git-fetch)
6730 (uri (git-reference
6731 (url "https://github.com/kumar303/mohawk")
6732 (commit commit)))
6733 (file-name (git-file-name name version))
6734 (sha256
6735 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
6736 (patches
6737 (search-patches "python-mohawk-pytest.patch"))))
6738 (build-system pyproject-build-system)
6739 (arguments
6740 (list #:test-flags #~(list "mohawk/tests.py")))
6741 (native-inputs (list python-pytest python-setuptools))
6742 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
6743 ;python-six is removed?
6744 (home-page "https://github.com/kumar303/mohawk")
6745 (synopsis "Library for Hawk HTTP authorization")
6746 (description
6747 "Mohawk is an alternate Python implementation of the Hawk HTTP
6748authorization scheme.")
6749 (license license:bsd-3))))
6750
6751(define-public python-msal
6752 (package
6753 (name "python-msal")
6754 (version "1.34.0")
6755 (home-page
6756 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
6757 (source
6758 (origin
6759 (method git-fetch)
6760 (uri (git-reference
6761 (url home-page)
6762 (commit version)))
6763 (file-name (git-file-name name version))
6764 (sha256
6765 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
6766 (patches (search-patches "python-msal-requests.patch"))))
6767 (build-system pyproject-build-system)
6768 (arguments
6769 (list
6770 #:test-flags
6771 #~(list
6772 "--ignore=tests/test_benchmark.py"
6773 ;; XXX: Ignoring cryptography version scheme tests.
6774 "-k"
6775 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
6776 ;; XXX: These tests try to access the network.
6777 "--ignore=tests/test_application.py"
6778 "--ignore=tests/test_ccs.py"
6779 ;; XXX: These tests assume they are run on Windows.
6780 "--ignore=tests/test_mi.py")
6781 #:phases
6782 #~(modify-phases %standard-phases
6783 (add-after 'unpack 'set-cryptography-version
6784 (lambda _
6785 (substitute* "tests/test_cryptography.py"
6786 (("^latest_cryptography_version = @version@")
6787 (format #f "latest_cryptography_version = ~s"
6788 #$(package-version
6789 (this-package-input "python-cryptography")))))))
6790 (add-before 'check 'configure-tests
6791 (lambda* (#:key tests? #:allow-other-keys)
6792 (when tests?
6793 (setenv "TRAVIS_TAG" "1")))))))
6794 (native-inputs
6795 (list nss-certs-for-test python-mock python-pytest python-setuptools))
6796 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
6797 (synopsis "Microsoft Authentication Library (MSAL) for Python")
6798 (description
6799 "The Microsoft Authentication Library for Python enables applications to
6800integrate with the Microsoft identity platform. It allows you to sign in
6801users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
6802Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
6803Microsoft Graph or your own APIs registered with the Microsoft identity
6804platform. It is built using industry standard OAuth2 and OpenID Connect
6805protocols.")
6806 (license license:expat)))
6807
6808(define-public oauth2ms
6809 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
6810 (revision "0"))
6811 (package
6812 (name "oauth2ms")
6813 (version (git-version "0.0.0" revision commit))
6814 (source (origin
6815 (method git-fetch)
6816 (uri (git-reference
6817 (url "https://github.com/harishkrupo/oauth2ms")
6818 (commit commit)))
6819 (file-name (git-file-name name version))
6820 (sha256
6821 (base32
6822 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
6823 (build-system copy-build-system)
6824 (arguments
6825 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
6826 ("." #$(string-append "share/doc/" name "-"
6827 version "/")
6828 #:include-regexp ("\\.org$")))
6829 #:phases #~(modify-phases %standard-phases
6830 (add-after 'install 'wrap-pythonpath
6831 (lambda* (#:key inputs outputs #:allow-other-keys)
6832 (let ((path (getenv "GUIX_PYTHONPATH")))
6833 (wrap-program (string-append #$output
6834 "/bin/oauth2ms")
6835 `("GUIX_PYTHONPATH" ":" prefix
6836 (,path)))))))))
6837 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
6838 (home-page "https://github.com/harishkrupo/oauth2ms")
6839 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
6840 (description
6841 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
6842endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
6843used as authentication in IMAP mail servers.")
6844 (license license:asl2.0))))
6845
6846(define-public python-oauthlib
6847 (package
6848 (name "python-oauthlib")
6849 (version "3.3.1")
6850 (source
6851 (origin
6852 (method git-fetch)
6853 (uri (git-reference
6854 (url "https://github.com/oauthlib/oauthlib")
6855 (commit (string-append "v" version))))
6856 (file-name (git-file-name name version))
6857 (sha256
6858 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
6859 (build-system pyproject-build-system)
6860 (native-inputs (list python-pytest python-pytest-cov python-mock
6861 python-setuptools))
6862 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
6863 (home-page "https://github.com/oauthlib/oauthlib")
6864 (synopsis "OAuth implementation for Python")
6865 (description
6866 "Oauthlib is a generic, spec-compliant, thorough implementation of the
6867OAuth request-signing logic.")
6868 (license license:bsd-3)))
6869
6870(define-public python-rauth
6871 (package
6872 (name "python-rauth")
6873 (version "0.7.3")
6874 (source
6875 (origin
6876 (method url-fetch)
6877 (uri (pypi-uri "rauth" version))
6878 (sha256
6879 (base32
6880 "02kv8w8l98ky223avyq7vw7x1f2ya9chrm59r77ylq45qb0xnk2j"))))
6881 (build-system python-build-system)
6882 (arguments
6883 `(#:test-target "check"))
6884 (propagated-inputs
6885 (list python-requests))
6886 (home-page "https://github.com/litl/rauth")
6887 (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
6888 (description
6889 "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly. It also
6890provides service wrappers for convenient connection initialization and
6891authenticated session objects providing things like keep-alive.")
6892 (license license:expat)))
6893
6894(define-public python-unalix
6895 (package
6896 (name "python-unalix")
6897 (version "0.9")
6898 (source
6899 (origin
6900 (method git-fetch)
6901 (uri (git-reference
6902 (url "https://github.com/AmanoTeam/Unalix")
6903 (commit (string-append "v" version))))
6904 (file-name (git-file-name name version))
6905 (sha256
6906 (base32 "0h8wc1axv26h753a8brc6dccqndx005c2bhr09gwg5c1hj9zsfml"))))
6907 (build-system pyproject-build-system)
6908 (native-inputs (list python-pytest python-setuptools))
6909 (home-page "https://pypi.org/project/Unalix/")
6910 (synopsis "Python library for removing tracking fields from URLs")
6911 (description "Unalix is a library written in Python implementing the
6912specification used by the @url{https://github.com/ClearURLs/Addon, ClearURLs}
6913addon for removing tracking fields from URLs.")
6914 (license license:lgpl3+)))
6915
6916(define-public python-urllib3
6917 (package
6918 (name "python-urllib3")
6919 (version "2.5.0")
6920 (source
6921 (origin
6922 (method url-fetch)
6923 (uri (pypi-uri "urllib3" version))
6924 (sha256
6925 (base32
6926 "0q17z6zlpyjv9ax5c3d30qwp9fwhz2sc4gbb7yyd86g4qwrpgi1z"))))
6927 (build-system pyproject-build-system)
6928 (arguments `(#:tests? #f))
6929 (native-inputs
6930 (list python-hatch-vcs
6931 python-hatchling
6932 python-setuptools-scm))
6933 (propagated-inputs
6934 (append
6935 ;; These 5 inputs are used to build urrlib3[secure]
6936 (list python-certifi)
6937 (if (member (%current-system)
6938 (package-transitive-supported-systems python-cryptography))
6939 (list python-cryptography)
6940 '())
6941 (list python-idna)
6942 (if (member (%current-system)
6943 (package-transitive-supported-systems python-pyopenssl))
6944 (list python-pyopenssl)
6945 '())
6946 (list python-pysocks)))
6947 (home-page "https://urllib3.readthedocs.io/")
6948 (synopsis "HTTP library with thread-safe connection pooling")
6949 (description
6950 "Urllib3 supports features left out of urllib and urllib2 libraries. It
6951can reuse the same socket connection for multiple requests, it can POST files,
6952supports url redirection and retries, and also gzip and deflate decoding.")
6953 (license license:expat)))
6954
6955(define-public python-urllib3-1.25
6956 (package
6957 (inherit python-urllib3)
6958 (version "1.25.19")
6959 (source
6960 (origin
6961 (method url-fetch)
6962 (uri (pypi-uri "urllib3" version))
6963 (sha256
6964 (base32
6965 "09rmjqm5syhhc8fx3v06h3yv6cqy0b1081jg8wm5grpwpr72j61h"))))
6966 (native-inputs
6967 (list python-setuptools
6968 python-wheel))))
6969
6970(define-public python-urllib3-1.26
6971 (package
6972 (inherit python-urllib3)
6973 (version "1.26.17")
6974 (source
6975 (origin
6976 (method url-fetch)
6977 (uri (pypi-uri "urllib3" version))
6978 (sha256
6979 (base32
6980 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
6981 (native-inputs
6982 (list python-setuptools
6983 python-wheel))))
6984
6985(define-public python-awscrt
6986 (package
6987 (name "python-awscrt")
6988 (version "0.26.1")
6989 (source
6990 (origin
6991 (method url-fetch)
6992 (uri (pypi-uri "awscrt" version))
6993 (sha256
6994 (base32 "0plkc0i0gc6z8fqnyy8kbg43sv3jnv8shcavcz0wb134riykmmm8"))))
6995 (build-system pyproject-build-system)
6996 (arguments
6997 (list
6998 #:test-backend #~'unittest
6999 #:test-flags #~(list "discover" "--verbose")
7000 #:phases
7001 #~(modify-phases %standard-phases
7002 (add-after 'unpack 'disable-broken-tests
7003 (lambda _
7004 ;; Disable broken tests. These tests fail because the
7005 ;; certificate bundle at the default location does not exist.
7006 (substitute* "test/test_auth.py"
7007 (("def test_default_provider")
7008 "def _test_default_provider"))
7009 (substitute* "test/test_http_client.py"
7010 (("def test_h2_client")
7011 "def _test_h2_client"))
7012 (substitute* "test/test_s3.py"
7013 (("def test_sanity")
7014 "def _test_sanity")
7015 (("def test_sanity_secure")
7016 "def _test_sanity_secure")
7017 (("def test_wait_shutdown")
7018 "def _test_wait_shutdown"))))
7019 (add-after 'unpack 'override-cert-bundle-location
7020 (lambda* (#:key inputs #:allow-other-keys)
7021 (let ((bundle (search-input-file inputs
7022 "/etc/ssl/certs/ca-certificates.crt")))
7023 (setenv "SSL_CERT_FILE" bundle)
7024 (substitute* "awscrt/io.py"
7025 (("( +)opt = TlsContextOptions\\(\\)" m indent)
7026 (string-append m "\n"
7027 indent "import os\n"
7028 indent "\
7029opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n")))
7030 (substitute* "test/appexit_http.py"
7031 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
7032 (string-append m indent
7033 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
7034 bundle "')\n")))
7035 (substitute* "test/test_io.py"
7036 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
7037 (string-append m indent
7038 "opt.override_default_trust_store_from_path(None, '"
7039 bundle "')\n"))))))
7040 (add-after 'unpack 'use-system-libraries
7041 (lambda _
7042 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
7043 (inputs (list openssl))
7044 (native-inputs (list cmake-minimal
7045 nss-certs-for-test
7046 python-boto3
7047 python-setuptools
7048 python-websockets))
7049 (home-page "https://github.com/awslabs/aws-crt-python")
7050 (synopsis "Common runtime for AWS Python projects")
7051 (description
7052 "This package provides a common runtime for AWS Python projects.")
7053 (license license:asl2.0)))
7054
7055(define-public awscli
7056 (package
7057 ;; Note: updating awscli typically requires updating botocore as well.
7058 (name "awscli")
7059 (version "1.42.61")
7060 (source
7061 (origin
7062 (method git-fetch)
7063 (uri (git-reference
7064 (url "https://github.com/aws/aws-cli")
7065 (commit version)))
7066 (file-name (git-file-name name version))
7067 (sha256
7068 (base32 "1fbqh4w7jj5abn87nbhyir25hdviirj0lblcdsqqkadcjh67877h"))))
7069 (build-system pyproject-build-system)
7070 (arguments
7071 (list
7072 ;; tests: 2692 passed, 40 warnings
7073 #:test-flags
7074 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7075 ;; Compete test suite is huge and compute hungry, run just unit
7076 ;; tests.
7077 "--ignore=tests/dependencies"
7078 "--ignore=tests/functional"
7079 "--ignore=tests/integration"
7080 ;; TypeError: 'Mock' object is not subscriptable.
7081 "-k" "not test_no_groff_or_mandoc_exists")
7082 #:phases
7083 #~(modify-phases %standard-phases
7084 (add-after 'unpack 'fix-reference-to-groff
7085 (lambda _
7086 ;; XXX: Consider to use wrap-program instead, it tries to parse
7087 ;; the PATH.
7088 (substitute* "awscli/help.py"
7089 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
7090 (("raise ExecutableNotFoundError\\('groff'\\)") "")
7091 (("cmdline = \\['groff'")
7092 (format #f "cmdline = ['~a/bin/groff'"
7093 #$(this-package-input "groff-minimal"))))))
7094 (add-before 'check 'set-environment
7095 (lambda _
7096 ;; PermissionError: [Errno 13] Permission denied:
7097 ;; '/homeless-shelter'
7098 (setenv "HOME" "/tmp"))))))
7099 (native-inputs
7100 (list python-pytest
7101 python-pytest-xdist
7102 python-setuptools
7103 python-wheel))
7104 (inputs
7105 (list groff-minimal
7106 python-botocore
7107 python-colorama
7108 python-docutils-0.19
7109 python-pyyaml
7110 python-rsa-for-awscli-1
7111 python-s3transfer))
7112 (home-page "https://aws.amazon.com/cli/")
7113 (synopsis "Command line client for AWS")
7114 (description
7115 "AWS CLI provides a unified command line interface to the Amazon Web
7116Services (AWS) API.")
7117 (license license:asl2.0)))
7118
7119(define-public awscli-2
7120 (package
7121 (inherit awscli)
7122 ;; Note: updating awscli-2 typically requires updating python-awscrt.
7123 (name "awscli")
7124 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
7125 ;; any fresh one compatible with current state of dependencies in Guix.
7126 (version "2.28.0")
7127 (source
7128 (origin
7129 (method git-fetch)
7130 (uri (git-reference
7131 (url "https://github.com/aws/aws-cli")
7132 (commit version)))
7133 (file-name (git-file-name name version))
7134 (sha256
7135 (base32
7136 "1a1jzvdm434x46yh7ir11lw0nzc64ns4qvxhp5wfra3rh5ykf36j"))))
7137 (build-system pyproject-build-system)
7138 (arguments
7139 (list
7140 ;; When updating and checking locally be very patient as build phase may
7141 ;; hang for 6-8 minutes but eventually passes through.
7142 ;;
7143 ;; tests: 4189 passed, 1 skipped, 2 warnings
7144 #:test-flags
7145 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7146 ;; Full test suite contains more than 70k tests; ignore network
7147 ;; dependent, slow and compute intense tests, keep just unit
7148 ;; tests.
7149 "--ignore=tests/backends"
7150 "--ignore=tests/dependencies"
7151 "--ignore=tests/functional"
7152 "--ignore=tests/integration"
7153 "--ignore=tests/unit/botocore"
7154 ;; Flaky, something to do with PATH disappearing from os.environ?
7155 ;; Passes when run on its own, so maybe something else is
7156 ;; modifying this during the test run.
7157 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
7158 ;; TypeError: 'Mock' object is not subscriptable
7159 "-k" "not test_no_groff_or_mandoc_exists")
7160 #:phases
7161 #~(modify-phases %standard-phases
7162 (add-after 'unpack 'ignore-deprecations
7163 (lambda _
7164 (substitute* "pyproject.toml"
7165 (("\"error::") "\"ignore::"))))
7166 (add-after 'unpack 'fix-reference-to-groff
7167 (lambda* (#:key inputs #:allow-other-keys)
7168 (substitute* "awscli/help.py"
7169 (("if self._exists_on_path\\('groff'\\):") "if True:")
7170 (("cmdline = \\['groff'")
7171 (string-append "cmdline = ['"
7172 (search-input-file inputs "bin/groff")
7173 "'")))))
7174 (add-before 'check 'pre-check
7175 (lambda _ (setenv "HOME" "/tmp"))))))
7176 (inputs
7177 (list groff
7178 ;; less
7179 nss-certs-for-test
7180 python-awscrt
7181 python-colorama
7182 python-dateutil
7183 python-distro
7184 python-docutils
7185 python-jmespath
7186 python-prompt-toolkit
7187 python-ruamel.yaml
7188 python-ruamel.yaml.clib
7189 python-urllib3))
7190 (native-inputs
7191 (list python-flit-core
7192 python-pytest
7193 python-pytest-xdist))))
7194
7195(define-public python-wsgiproxy2
7196 (package
7197 (name "python-wsgiproxy2")
7198 (version "0.5.1")
7199 (source
7200 (origin
7201 (method git-fetch)
7202 (uri (git-reference
7203 (url "https://github.com/gawel/WSGIProxy2/")
7204 (commit version)))
7205 (file-name (git-file-name name version))
7206 (sha256
7207 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
7208 (build-system pyproject-build-system)
7209 (arguments (list #:test-backend #~'unittest))
7210 (native-inputs (list python-webtest python-setuptools))
7211 (propagated-inputs (list python-requests python-six python-urllib3
7212 python-webob))
7213 (home-page "https://github.com/gawel/WSGIProxy2/")
7214 (synopsis "WSGI Proxy with various http client backends")
7215 (description
7216 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
7217function calls into HTTP requests. It also includes code to sign requests and
7218pass private data, and to spawn subprocesses to handle requests.")
7219 (license license:expat)))
7220
7221(define-public python-pastedeploy
7222 (package
7223 (name "python-pastedeploy")
7224 (version "3.1.0")
7225 (source
7226 (origin
7227 (method url-fetch)
7228 (uri (pypi-uri "PasteDeploy" version))
7229 (sha256
7230 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
7231 (build-system pyproject-build-system)
7232 (native-inputs (list python-pytest python-pytest-cov python-setuptools))
7233 (home-page "https://pylonsproject.org/")
7234 (synopsis "Load, configure, and compose WSGI applications and servers")
7235 (description
7236 "This tool provides code to load WSGI applications and servers from URIs;
7237these URIs can refer to Python Eggs for INI-style configuration files. Paste
7238Script provides commands to serve applications based on this configuration
7239file.")
7240 (license license:expat)))
7241
7242(define-public python-webtest
7243 (package
7244 (name "python-webtest")
7245 (version "3.0.6")
7246 (source
7247 (origin
7248 (method url-fetch)
7249 (uri (pypi-uri "webtest" version))
7250 (sha256
7251 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
7252 (build-system pyproject-build-system)
7253 (arguments
7254 ;; Tests require python-pyquery, which creates a circular dependency.
7255 `(#:tests? #f))
7256 (native-inputs
7257 (list python-setuptools))
7258 (propagated-inputs
7259 (list python-beautifulsoup4
7260 python-waitress
7261 python-webob))
7262 (home-page "https://docs.pylonsproject.org/projects/webtest/")
7263 (synopsis "Helper to test WSGI applications")
7264 (description
7265 "Webtest allows you to test your Python web applications without
7266starting an HTTP server. It supports anything that supports the minimum of
7267WSGI.")
7268 (license license:expat)))
7269
7270(define-public python-flask
7271 (package
7272 (name "python-flask")
7273 (version "3.1.0")
7274 (source
7275 (origin
7276 (method url-fetch)
7277 (uri (pypi-uri "flask" version))
7278 (sha256
7279 (base32 "1b1nb250jxrjplbs21wnwq69250vs3iz2pdhs7cwi5y8hi8kr1sz"))))
7280 (build-system pyproject-build-system)
7281 (native-inputs
7282 (list python-flit-core
7283 python-pytest))
7284 (propagated-inputs
7285 (list python-asgiref ;async extra
7286 python-click
7287 python-blinker
7288 python-importlib-metadata
7289 python-itsdangerous
7290 python-jinja2
7291 python-werkzeug))
7292 (home-page "https://palletsprojects.com/p/flask/")
7293 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
7294 (description "Flask is a micro web framework based on the Werkzeug toolkit
7295and Jinja2 template engine. It is called a micro framework because it does not
7296presume or force a developer to use a particular tool or library.")
7297 (license license:bsd-3)))
7298
7299(define-public python-flask-compress
7300 (package
7301 (name "python-flask-compress")
7302 (version "1.18")
7303 (source (origin
7304 (method url-fetch)
7305 (uri (pypi-uri "flask_compress" version))
7306 (sha256
7307 (base32
7308 "0fj1r0ixsjls7z3a2zzamxppjz4qcf8q4jcmn74gsk9kisyy3fpx"))))
7309 (build-system pyproject-build-system)
7310 (native-inputs
7311 (list python-flask-caching
7312 python-pytest
7313 python-setuptools
7314 python-setuptools-scm))
7315 (propagated-inputs
7316 (list python-brotli
7317 python-flask
7318 python-pyzstd))
7319 (home-page "https://github.com/colour-science/flask-compress")
7320 (synopsis "Compress responses in a Flask app")
7321 (description
7322 "This package lets you compress Flask application responses and static
7323files with gzip, deflate or brotli. Flask-Compress both adds the various
7324headers required for a compressed response and compresses the response data.")
7325 (license license:expat)))
7326
7327(define-public python-flask-seasurf
7328 (package
7329 (name "python-flask-seasurf")
7330 (version "2.0.0")
7331 (source (origin
7332 (method url-fetch)
7333 (uri (pypi-uri "Flask-SeaSurf" version))
7334 (sha256
7335 (base32
7336 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
7337 (build-system pyproject-build-system)
7338 (arguments
7339 (list #:tests? #false)) ;there are none
7340 (propagated-inputs (list python-flask))
7341 (native-inputs (list python-setuptools python-wheel))
7342 (home-page "https://github.com/maxcountryman/flask-seasurf/")
7343 (synopsis "CSRF extension for Flask")
7344 (description "SeaSurf is a Flask extension for preventing cross-site
7345request forgery (CSRF). CSRF attacks are problematic because the mechanism
7346they use is relatively easy to exploit. This extension attempts to aid you in
7347securing your application from such attacks. This extension is based on the
7348Django middleware.")
7349 (license license:bsd-3)))
7350
7351(define-public python-flask-wtf
7352 (package
7353 (name "python-flask-wtf")
7354 (version "1.2.2")
7355 (source
7356 (origin
7357 (method url-fetch)
7358 (uri (pypi-uri "Flask-WTF" version))
7359 (sha256
7360 (base32
7361 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
7362 (build-system pyproject-build-system)
7363 (propagated-inputs
7364 (list python-flask python-flask python-itsdangerous python-wtforms))
7365 (native-inputs
7366 (list python-hatchling python-pytest))
7367 (home-page "https://github.com/lepture/flask-wtf")
7368 (synopsis "Simple integration of Flask and WTForms")
7369 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
7370upload, and reCAPTCHA.")
7371 (license license:bsd-3)))
7372
7373(define-public python-flask-multistatic
7374 (package
7375 (name "python-flask-multistatic")
7376 (version "1.0")
7377 (source
7378 (origin
7379 (method url-fetch)
7380 (uri (pypi-uri "flask-multistatic" version))
7381 (sha256
7382 (base32
7383 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
7384 (build-system pyproject-build-system)
7385 (arguments (list #:tests? #f)) ; No tests upstream.
7386 (native-inputs (list python-setuptools))
7387 (propagated-inputs (list python-flask))
7388 (home-page "https://pagure.io/flask-multistatic")
7389 (synopsis "Flask plugin to allow overriding static files")
7390 (description "@code{flask-multistatic} is a flask plugin that adds support
7391for overriding static files.")
7392 (license license:gpl3+)))
7393
7394(define-public python-responses
7395 (package
7396 (name "python-responses")
7397 (version "0.25.3")
7398 (source (origin
7399 (method url-fetch)
7400 (uri (pypi-uri "responses" version))
7401 (sha256
7402 (base32
7403 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
7404 (build-system pyproject-build-system)
7405 (native-inputs
7406 (list python-pytest
7407 python-pytest-asyncio
7408 python-pytest-httpserver
7409 python-setuptools
7410 python-tomli
7411 python-tomli-w
7412 python-wheel))
7413 (propagated-inputs
7414 (list python-requests
7415 python-pyyaml
7416 python-urllib3))
7417 (home-page "https://github.com/getsentry/responses")
7418 (synopsis "Utility for mocking out the `requests` Python library")
7419 (description "A utility library for mocking out the `requests` Python
7420library.")
7421 (license license:asl2.0)))
7422
7423(define-public python-grequests
7424 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
7425 (revision "0"))
7426 (package
7427 (name "python-grequests")
7428 (version (git-version "0.7.0" revision commit))
7429 (source
7430 (origin
7431 (method git-fetch)
7432 (uri (git-reference
7433 (url "https://github.com/kennethreitz/grequests")
7434 (commit commit)))
7435 (file-name (git-file-name name version))
7436 (sha256
7437 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
7438 (build-system pyproject-build-system)
7439 (arguments
7440 (list
7441 ;; XXX: Most failing tests seem to be caused by network access,
7442 ;; but there is no easy/flag way to disable tests selectively.
7443 #:tests? #f
7444 #:test-backend #~'unittest
7445 #:test-flags #~(list "tests.py")))
7446 (propagated-inputs (list python-gevent python-requests))
7447 (native-inputs (list python-setuptools))
7448 (home-page "https://github.com/kennethreitz/grequests")
7449 (synopsis "Python library for asynchronous HTTP requests")
7450 (description
7451 "GRequests is a Python library that allows you to use @code{Requests}
7452with @code{Gevent} to make asynchronous HTTP Requests easily.")
7453 (license license:bsd-2))))
7454
7455(define-public python-gwebsockets
7456 (package
7457 (name "python-gwebsockets")
7458 (version "0.7")
7459 (source
7460 (origin
7461 (method git-fetch)
7462 (uri (git-reference
7463 (url "https://github.com/sugarlabs/gwebsockets")
7464 (commit (string-append "v" version))))
7465 (file-name (git-file-name name version))
7466 (sha256
7467 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
7468 (build-system pyproject-build-system)
7469 (arguments (list #:tests? #f)) ; No tests upstream.
7470 (native-inputs (list python-setuptools))
7471 (propagated-inputs (list python-pygobject))
7472 (home-page "https://github.com/sugarlabs/gwebsockets")
7473 (synopsis "GLib based websockets server")
7474 (description
7475 "This package provides a websocket server written in Python. It uses GIO
7476for network communication and hence it easily integrates with the GLib
7477mainloop.")
7478 (license license:asl2.0)))
7479
7480(define-public python-dpkt
7481 (package
7482 (name "python-dpkt")
7483 (version "1.9.8")
7484 (source
7485 (origin
7486 (method git-fetch)
7487 (uri (git-reference
7488 (url "https://github.com/kbandla/dpkt")
7489 (commit (string-append "v" version))))
7490 (file-name (git-file-name name version))
7491 (sha256
7492 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
7493 (build-system pyproject-build-system)
7494 (arguments
7495 (list
7496 #:test-flags
7497 #~(list "--pyargs" "dpkt")))
7498 (native-inputs (list python-pytest python-pytest-cov python-setuptools))
7499 (home-page "https://github.com/kbandla/dpkt")
7500 (synopsis "Packet generator and parser for TCP/IP protocols")
7501 (description
7502 "The dpkt module is a fast, simple packet generator and parser for the
7503basic TCP/IP protocols.")
7504 (license license:bsd-3)))
7505
7506(define-public python-geventhttpclient
7507 (package
7508 (name "python-geventhttpclient")
7509 (version "2.3.3")
7510 (source (origin
7511 (method git-fetch)
7512 (uri (git-reference
7513 (url "https://github.com/geventhttpclient/geventhttpclient")
7514 (commit version)
7515 (recursive? #true)))
7516 (file-name (git-file-name name version))
7517 (sha256
7518 (base32
7519 "1ya0i0fbx054mfx5d1k75fcf64xzp7vva8lkwwzan41xbnc56nyj"))))
7520 (build-system pyproject-build-system)
7521 (arguments
7522 (list
7523 #:test-flags
7524 ;; Disable network tests.
7525 '(list "-k"
7526 (string-append "not test_client_simple"
7527 " and not test_client_ssl"
7528 " and not test_client_with_default_headers"
7529 " and not test_client_without_leading_slash"
7530 " and not test_download"
7531 " and not test_fail_invalid_ca_certificate"
7532 " and not test_httpbin_multipart"
7533 " and not test_multi_queries_greenlet_safe"
7534 " and not test_no_form_encode_header"
7535 " and not test_no_form_encoded_header"
7536 " and not test_request_with_headers"
7537 " and not test_response_context_manager"
7538 " and not test_urllib_request"))))
7539 (native-inputs (list nss-certs-for-test
7540 python-dpkt python-pytest python-requests
7541 python-setuptools python-wheel))
7542 (propagated-inputs (list python-brotli python-certifi python-gevent
7543 python-urllib3))
7544 (home-page "https://github.com/geventhttpclient/geventhttpclient")
7545 (synopsis "HTTP client library for gevent")
7546 (description "@code{python-geventhttpclient} is a high performance,
7547concurrent HTTP client library for python using @code{gevent}.")
7548 (license license:expat)))
7549
7550(define-public python-gevent-websocket
7551 (package
7552 (name "python-gevent-websocket")
7553 (version "0.10.1")
7554 (source
7555 (origin
7556 (method url-fetch)
7557 (uri (pypi-uri "gevent-websocket" version))
7558 (sha256
7559 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
7560 (build-system pyproject-build-system)
7561 (arguments
7562 (list #:tests? #f)) ; no tests in PyPI or git
7563 (native-inputs
7564 (list python-setuptools
7565 python-wheel))
7566 (propagated-inputs
7567 (list python-gevent))
7568 (home-page "https://gitlab.com/noppo/gevent-websocket")
7569 (synopsis "Websocket handler for the gevent pywsgi server")
7570 (description
7571 "Websocket handler for the gevent pywsgi server, a Python network
7572library.
7573
7574Features include:
7575@itemize
7576@item integration on both socket level or using an abstract interface
7577@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
7578Protocol, WAMP}
7579@item easily extendible using a simple WebSocket protocol plugin API
7580@end itemize")
7581 (license license:asl2.0)))
7582
7583(define-public python-requests-oauthlib
7584 (package
7585 (name "python-requests-oauthlib")
7586 (version "2.0.0")
7587 (source
7588 (origin
7589 (method git-fetch)
7590 (uri (git-reference (url
7591 "https://github.com/requests/requests-oauthlib")
7592 (commit (string-append "v" version))))
7593 (file-name (git-file-name name version))
7594 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
7595 (build-system pyproject-build-system)
7596 (arguments
7597 (list
7598 #:test-flags
7599 #~(list
7600 "--ignore=tests/test_core.py" ; requires network access.
7601 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
7602 "-k" "not test_fetch_access_token"))) ; flaky tests.
7603 (native-inputs
7604 (list python-requests-mock python-pytest python-setuptools))
7605 (propagated-inputs
7606 (list python-oauthlib python-requests))
7607 (home-page "https://github.com/requests/requests-oauthlib")
7608 (synopsis "OAuthlib authentication support for Requests")
7609 (description
7610 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
7611provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
7612 (license license:isc)))
7613
7614(define-public python-cachecontrol
7615 (package
7616 (name "python-cachecontrol")
7617 (version "0.14.1")
7618 (source
7619 (origin
7620 (method git-fetch)
7621 ;; Pypi does not have tests.
7622 (uri (git-reference
7623 (url "https://github.com/ionrock/cachecontrol")
7624 (commit (string-append "v" version))))
7625 (file-name (git-file-name name version))
7626 (sha256
7627 (base32
7628 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
7629 (build-system pyproject-build-system)
7630 (arguments
7631 ;; Versions > 0.11.6 depend on CherryPy for testing.
7632 ;; It's too much work to package CherryPy for now.
7633 `(#:tests? #f))
7634 (propagated-inputs
7635 (list python-filelock python-lockfile python-msgpack python-requests))
7636 (native-inputs
7637 (list python-flit-core))
7638 (home-page "https://github.com/ionrock/cachecontrol")
7639 (synopsis "The httplib2 caching algorithms for use with requests")
7640 (description "CacheControl is a port of the caching algorithms in
7641@code{httplib2} for use with @code{requests} session objects.")
7642 (license license:asl2.0)))
7643
7644(define-public python-betamax
7645 (package
7646 (name "python-betamax")
7647 (version "0.9.0")
7648 (source
7649 (origin
7650 (method url-fetch)
7651 (uri (pypi-uri "betamax" version))
7652 (sha256
7653 (base32
7654 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
7655 (build-system pyproject-build-system)
7656 (arguments
7657 (list
7658 #:test-flags
7659 #~(list "-k" (string-join
7660 ;; Tests require network access to http://httpbin.org/get.
7661 (list "not test_creates_new_cassettes"
7662 "test_placeholders_work"
7663 "test_post_start_hook"
7664 "test_pre_stop_hook"
7665 "test_preplayback_hook"
7666 "test_prerecord_hook"
7667 "test_prerecord_ignoring_hook"
7668 "test_records_new_events_with_existing_cassette"
7669 "test_records_new_interaction"
7670 "test_records_new_interactions"
7671 "test_replaces_old_interactions"
7672 "test_replays_response_from_cassette"
7673 "test_requests_with_json_body"
7674 "test_saves_content_as_gzip"
7675 "test_unicode_is_saved_properly")
7676 " and not "))))
7677 (native-inputs
7678 (list nss-certs-for-test
7679 python-pytest
7680 python-setuptools))
7681 (propagated-inputs
7682 (list python-requests))
7683 (home-page "https://github.com/sigmavirus24/betamax")
7684 (synopsis "Record HTTP interactions with python-requests")
7685 (description
7686 "Betamax will record your test suite's HTTP interactions and replay them
7687during future tests. It is designed to work with python-requests.")
7688 (license license:expat)))
7689
7690(define-public python-betamax-matchers
7691 (package
7692 (name "python-betamax-matchers")
7693 (version "0.4.0")
7694 (source
7695 (origin
7696 (method url-fetch)
7697 (uri (pypi-uri "betamax-matchers" version))
7698 (sha256
7699 (base32
7700 "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
7701 (build-system python-build-system)
7702 (propagated-inputs
7703 (list python-betamax python-requests-toolbelt))
7704 (home-page "https://github.com/sigmavirus24/betamax_matchers")
7705 (synopsis "VCR imitation for python-requests")
7706 (description "@code{betamax-matchers} provides a set of Matchers for
7707Betamax.")
7708 (license license:asl2.0)))
7709
7710(define-public python-betamax-serializers
7711 (package
7712 (name "python-betamax-serializers")
7713 (version "0.2.1")
7714 (source
7715 (origin
7716 (method url-fetch)
7717 (uri (pypi-uri "betamax-serializers" version))
7718 (sha256
7719 (base32 "0ja9isbjmzzhxdj69s0kdsvw8nkp073w6an6a4liy5vk3fdl2p1l"))))
7720 (build-system python-build-system)
7721 (propagated-inputs
7722 (list python-betamax python-pyyaml))
7723 (synopsis "Set of third-party serializers for Betamax")
7724 (description "Betamax-Serializers are an experimental set of Serializers for
7725Betamax that may possibly end up in the main package.")
7726 (home-page "https://gitlab.com/betamax/serializers")
7727 (license license:asl2.0)))
7728
7729(define-public python-s3fs
7730 (package
7731 (name "python-s3fs")
7732 (version "2025.9.0")
7733 (source
7734 (origin
7735 (method url-fetch)
7736 (uri (pypi-uri "s3fs" version))
7737 (sha256
7738 (base32 "0c5w09ryyfwlrqbhxgn1yl2kl1ksmz2481vjs1l4k9lyy5z2ai3d"))))
7739 (build-system pyproject-build-system)
7740 ;; TODO: Many tests fail with "No such file or directory" raised by the
7741 ;; HTTP client.
7742 (arguments (list #:tests? #false))
7743 (native-inputs
7744 (list python-setuptools))
7745 (propagated-inputs
7746 (list python-aiobotocore
7747 python-aiohttp
7748 python-fsspec))
7749 (home-page "https://github.com/fsspec/s3fs/")
7750 (synopsis "Convenient filesystem interface over S3")
7751 (description "This package provides a convenient filesystem interface over
7752S3.")
7753 (license license:bsd-3)))
7754
7755(define-public python-s3transfer
7756 (package
7757 (name "python-s3transfer")
7758 (version "0.14.0")
7759 (source
7760 (origin
7761 (method url-fetch)
7762 (uri (pypi-uri "s3transfer" version))
7763 (sha256
7764 (base32 "09a17scf96zfdw2chb22yyvmnj4anfijgkncfi89id68wxj25wgg"))))
7765 (build-system pyproject-build-system)
7766 (arguments
7767 (list
7768 #:test-flags
7769 #~(list "--numprocesses" (number->string (parallel-job-count))
7770 ;; Tests require networking.
7771 "--ignore" "tests/integration")))
7772 (native-inputs
7773 (list python-pytest
7774 python-pytest-xdist
7775 python-setuptools))
7776 (propagated-inputs
7777 (list python-botocore))
7778 (home-page "https://github.com/boto/s3transfer")
7779 (synopsis "Amazon S3 Transfer Manager")
7780 (description
7781 "S3transfer is a Python library for managing Amazon S3 transfers.")
7782 (license license:asl2.0)))
7783
7784(define-public python-flask-restful
7785 (package
7786 (name "python-flask-restful")
7787 (version "0.3.10")
7788 (source
7789 (origin
7790 (method url-fetch)
7791 (uri (pypi-uri "Flask-RESTful" version))
7792 (sha256
7793 (base32
7794 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
7795 (build-system pyproject-build-system)
7796 (arguments
7797 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
7798 (list #:tests? #f))
7799 (propagated-inputs
7800 (list python-aniso8601 python-flask python-pytz))
7801 (native-inputs
7802 (list python-blinker
7803 python-mock
7804 python-pytest
7805 python-setuptools
7806 python-wheel))
7807 (home-page "https://github.com/flask-restful/flask-restful/")
7808 (synopsis "Flask module for creating REST APIs")
7809 (description
7810 "This package contains a Flask module for creating REST APIs.")
7811 (license license:bsd-3)))
7812
7813(define-public python-flask-sqlalchemy
7814 (package
7815 (name "python-flask-sqlalchemy")
7816 (version "3.1.1")
7817 (source (origin
7818 (method url-fetch)
7819 (uri (pypi-uri "flask_sqlalchemy" version))
7820 (sha256
7821 (base32
7822 "04l3dfivznlpvk9p9f20zdbyxl869k42z2w7glddlbc0h6w8pdp4"))))
7823 (build-system pyproject-build-system)
7824 (arguments
7825 (list
7826 #:test-flags
7827 #~(list "-k" (string-append "not test_explicit_table[db2]"
7828 " and not test_explicit_table[db4]"))))
7829 (native-inputs
7830 (list python-flit-core
7831 python-pytest))
7832 (propagated-inputs
7833 (list python-flask
7834 python-sqlalchemy-2))
7835 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
7836 (synopsis "Module adding SQLAlchemy support to your Flask application")
7837 (description
7838 "This package adds SQLAlchemy support to your Flask application.")
7839 (license license:bsd-3)))
7840
7841(define-public python-flask-restful-swagger
7842 (package
7843 (name "python-flask-restful-swagger")
7844 (version "0.20.1")
7845 (source
7846 (origin
7847 (method url-fetch)
7848 (uri (pypi-uri "flask-restful-swagger" version))
7849 (sha256
7850 (base32
7851 "1p66f98b5zpypnnz56pxpbirchqj6aniw6qyrp8h572l0dn9xlvq"))))
7852 (build-system python-build-system)
7853 (arguments '(#:tests? #f)) ;no tests
7854 (propagated-inputs
7855 (list python-flask-restful python-six))
7856 (home-page "https://github.com/rantav/flask-restful-swagger")
7857 (synopsis "Extract Swagger specs from Flask-Restful projects")
7858 (description "This package lets you extract Swagger API documentation
7859specs from your Flask-Restful projects.")
7860 (license license:expat)))
7861
7862(define-public python-htmlmin
7863 (package
7864 (name "python-htmlmin")
7865 (version "0.1.12")
7866 (source
7867 (origin
7868 (method url-fetch)
7869 (uri (pypi-uri "htmlmin" version))
7870 (sha256
7871 (base32
7872 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
7873 (arguments
7874 `(#:tests? #f)) ; no tests
7875 (build-system python-build-system)
7876 (home-page "https://htmlmin.readthedocs.org/en/latest/")
7877 (synopsis "HTML minifier")
7878 (description "@code{htmlmin} is an HTML minifier that just works.
7879It comes with safe defaults and easily configurable options.")
7880 (license license:bsd-3)))
7881
7882(define-public python-flask-htmlmin
7883 (package
7884 (name "python-flask-htmlmin")
7885 (version "1.2")
7886 (source
7887 (origin
7888 (method url-fetch)
7889 (uri (pypi-uri "Flask-HTMLmin" version))
7890 (sha256
7891 (base32
7892 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
7893 (propagated-inputs
7894 (list python-flask python-htmlmin))
7895 (build-system python-build-system)
7896 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
7897 (synopsis "HTML response minifier for Flask")
7898 (description
7899 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
7900 (license license:bsd-3)))
7901
7902(define-public python-jsmin
7903 (package
7904 (name "python-jsmin")
7905 (version "3.0.1")
7906 (source
7907 (origin
7908 (method url-fetch)
7909 (uri (pypi-uri "jsmin" version))
7910 (sha256
7911 (base32
7912 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
7913 (build-system pyproject-build-system)
7914 (arguments (list #:test-backend #~'unittest))
7915 (native-inputs
7916 (list python-setuptools))
7917 (home-page "https://github.com/tikitu/jsmin/")
7918 (synopsis "Python JavaScript minifier")
7919 (description
7920 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
7921on the command line.")
7922 (license license:expat)))
7923
7924(define-public python-flask-login
7925 (package
7926 (name "python-flask-login")
7927 (version "0.6.3")
7928 (source
7929 (origin
7930 (method git-fetch)
7931 (uri (git-reference
7932 (url "https://github.com/maxcountryman/flask-login")
7933 (commit version)))
7934 (file-name (git-file-name name version))
7935 (sha256
7936 (base32 "0wk3dni5qssmbn8ii3hsh89qa3kwr97i92k27bzgsgxvvsfwwzja"))))
7937 (build-system pyproject-build-system)
7938 (propagated-inputs
7939 (list python-flask))
7940 (native-inputs
7941 ;; For tests.
7942 (list python-blinker
7943 python-mock
7944 python-pytest
7945 python-semantic-version
7946 python-setuptools
7947 python-werkzeug
7948 python-wheel))
7949 (home-page "https://github.com/maxcountryman/flask-login")
7950 (synopsis "User session management for Flask")
7951 (description
7952 "@code{Flask-Login} provides user session management for Flask. It
7953handles the common tasks of logging in, logging out, and remembering your
7954users' sessions over extended periods of time.")
7955 (license license:expat)))
7956
7957(define-public python-oauth2client
7958 (package
7959 (name "python-oauth2client")
7960 (version "4.0.0")
7961 (source
7962 (origin
7963 (method url-fetch)
7964 (uri (pypi-uri "oauth2client" version))
7965 (sha256
7966 (base32
7967 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
7968 (build-system python-build-system)
7969 (arguments
7970 `(#:tests? #f))
7971 (propagated-inputs
7972 (list python-httplib2
7973 python-pyasn1
7974 python-pyasn1-modules
7975 python-pyparsing
7976 python-rsa
7977 python-six))
7978 (home-page "https://github.com/google/oauth2client/")
7979 (synopsis "OAuth 2.0 client library")
7980 (description "@code{python-oauth2client} provides an OAuth 2.0 client
7981library for Python")
7982 (license license:asl2.0)))
7983
7984(define-public python-authlib
7985 (package
7986 (name "python-authlib")
7987 (version "1.5.1")
7988 (source
7989 (origin
7990 (method url-fetch)
7991 (uri (pypi-uri "authlib" version))
7992 (sha256
7993 (base32 "0blpvz2v2r8yvsgm1yr3n61mhwxvh1b0kyf2rp0i4wv6n3n8bg2w"))))
7994 (build-system pyproject-build-system)
7995 ;; No tests target.
7996 (arguments (list #:tests? #false))
7997 (propagated-inputs
7998 (list python-cryptography
7999 python-django
8000 python-flask
8001 python-httpx
8002 python-requests
8003 python-sqlalchemy-2
8004 python-starlette
8005 python-werkzeug))
8006 (native-inputs (list python-pytest python-setuptools python-wheel))
8007 (home-page "https://pypi.org/project/Authlib/1")
8008 (synopsis "Build OAuth and OpenID Connect servers and clients")
8009 (description
8010 "This is a Python library for building OAuth and OpenID Connect servers
8011and clients.")
8012 (license license:bsd-3)))
8013
8014(define-public python-flask-oidc
8015 (package
8016 (name "python-flask-oidc")
8017 (version "2.3.1")
8018 (source
8019 (origin
8020 (method url-fetch)
8021 (uri (pypi-uri "flask_oidc" version))
8022 (sha256
8023 (base32
8024 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
8025 (build-system pyproject-build-system)
8026 (propagated-inputs
8027 (list python-authlib
8028 python-blinker
8029 python-flask
8030 python-requests
8031 python-responses))
8032 (native-inputs
8033 (list python-pytest python-poetry-core))
8034 (home-page "https://github.com/puiterwijk/flask-oidc")
8035 (synopsis "OpenID Connect extension for Flask")
8036 (description "@code{python-flask-oidc} provides an OpenID Connect extension
8037for Flask.")
8038 (license license:bsd-2)))
8039
8040(define-public python-webassets
8041 (package
8042 (name "python-webassets")
8043 (version "3.0.0")
8044 (source
8045 (origin
8046 (method git-fetch)
8047 (uri (git-reference
8048 (url "https://github.com/miracle2k/webassets")
8049 (commit version)))
8050 (file-name (git-file-name name version))
8051 (sha256
8052 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
8053 (build-system pyproject-build-system)
8054 (propagated-inputs (list python-pyyaml python-zope-dottedname))
8055 (native-inputs (list python-hatchling python-pytest))
8056 (home-page "https://github.com/miracle2k/webassets")
8057 (synopsis "Media asset management")
8058 (description
8059 "This package provides utilities to merge, minify and compress Javascript
8060and CSS files,supporting a variety of different filters, including YUI, jsmin,
8061jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
8062 (license license:bsd-2)))
8063
8064(define-public python-cssmin
8065 (package
8066 (name "python-cssmin")
8067 (version "0.2.0")
8068 (source
8069 (origin
8070 (method url-fetch)
8071 (uri (pypi-uri "cssmin" version))
8072 (sha256
8073 (base32
8074 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
8075 (build-system python-build-system)
8076 (home-page "https://github.com/zacharyvoase/cssmin")
8077 (synopsis "Python port of the YUI CSS Compressor")
8078 (description "Python port of the YUI CSS Compressor.")
8079 (license (list license:expat license:bsd-3))))
8080
8081(define-public python-elastic-transport
8082 (package
8083 (name "python-elastic-transport")
8084 (version "9.1.0")
8085 (source
8086 (origin
8087 (method url-fetch)
8088 (uri (pypi-uri "elastic_transport" version))
8089 (sha256
8090 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
8091 (build-system pyproject-build-system)
8092 (arguments
8093 (list
8094 #:test-flags
8095 ;; Deselect failing tests (mostly due to network not reachable)
8096 #~(list "-k"
8097 (string-append
8098 "not .badssl.com"
8099 " and not test_assert_fingerprint_in_cert_chain_failure"))
8100 #:phases
8101 #~(modify-phases %standard-phases
8102 (add-after 'unpack 'fix-pytest-config
8103 (lambda _
8104 ;; Drop test coverage requirements.
8105 (substitute* "setup.cfg"
8106 (("--cov(-[^ ]*)?=[^ ]*") "\n")))))))
8107 (propagated-inputs (list python-certifi python-urllib3))
8108 (native-inputs (list nss-certs-for-test
8109 python-aiohttp
8110 ;; python-furo
8111 python-httpx
8112 python-opentelemetry-api
8113 python-opentelemetry-sdk
8114 python-orjson
8115 python-pytest
8116 python-pytest-asyncio
8117 ;; python-pytest-cov
8118 python-pytest-httpbin
8119 python-pytest-httpserver
8120 python-pytest-mock
8121 python-requests
8122 python-respx ;test
8123 python-setuptools
8124 ;; python-sphinx
8125 ;; python-sphinx-autodoc-typehints
8126 python-trustme
8127 python-wheel))
8128 (home-page "https://github.com/elastic/elastic-transport-python")
8129 (synopsis "Common library for Python Elastic client libraries")
8130 (description
8131 "This library was lifted from @code{elasticsearch-py} and then transformed to
8132be used across all Elastic services rather than only Elasticsearch. It
8133provides transport classes and utilities shared among Python Elastic client
8134libraries.")
8135 ;; Apache-2.0 in setup.py and LICENSE file.
8136 (license license:asl2.0)))
8137
8138(define-public python-elasticsearch
8139 (package
8140 (name "python-elasticsearch")
8141 (version "9.1.1")
8142 (source
8143 (origin
8144 (method git-fetch) ; no tests in PyPI release
8145 (uri (git-reference
8146 (url "https://github.com/elastic/elasticsearch-py")
8147 (commit (string-append "v" version))))
8148 (file-name (git-file-name name version))
8149 (sha256
8150 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
8151 (build-system pyproject-build-system)
8152 (native-inputs
8153 (list nss-certs-for-test
8154 python-aiohttp
8155 python-dateutil
8156 python-mock
8157 python-orjson
8158 python-pytest
8159 python-pytest-asyncio
8160 python-pytest-cov
8161 python-pytz
8162 python-pyyaml
8163 python-requests
8164 python-hatchling))
8165 (propagated-inputs
8166 (list python-certifi
8167 python-elastic-transport))
8168 (home-page "https://github.com/elastic/elasticsearch-py")
8169 (synopsis "Low-level client for Elasticsearch")
8170 (description "Official low-level client for Elasticsearch. Its goal is to
8171provide common ground for all Elasticsearch-related code in Python; because of
8172this it tries to be opinion-free and very extendable.")
8173 ;; Apache-2.0 in setup.py and LICENSE file.
8174 (license license:asl2.0)))
8175
8176(define-public python-engineio
8177 (package
8178 (name "python-engineio")
8179 (version "4.12.2")
8180 (source
8181 (origin
8182 (method url-fetch)
8183 (uri (pypi-uri "python_engineio" version))
8184 (sha256
8185 (base32
8186 "1ynyf3n29biwkm6nwzzwzhr4m19lsir1x5azxq2nl7xyw7zi5rz7"))))
8187 (build-system pyproject-build-system)
8188 (arguments
8189 (list
8190 #:test-flags
8191 #~(list "-k"
8192 "not test_static_file_routing and not test_static_files")))
8193 (native-inputs
8194 (list python-pytest
8195 python-pytest-asyncio
8196 python-setuptools
8197 python-tornado))
8198 (propagated-inputs
8199 (list python-aiohttp
8200 python-requests
8201 python-simple-websocket
8202 python-websocket-client))
8203 (home-page "https://github.com/miguelgrinberg/python-engineio/")
8204 (synopsis "Engine.IO server")
8205 (description "This package provides a Python implementation of the
8206@code{Engine.IO} realtime client and server.")
8207 (license license:expat)))
8208
8209(define-public python-ephemeral-port-reserve
8210 (package
8211 (name "python-ephemeral-port-reserve")
8212 (version "1.1.4")
8213 (source
8214 (origin
8215 (method git-fetch) ;no tests in PyPI archvie
8216 (uri (git-reference
8217 (url "https://github.com/Yelp/ephemeral-port-reserve")
8218 (commit (string-append "v" version))))
8219 (file-name (git-file-name name version))
8220 (sha256
8221 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
8222 (build-system pyproject-build-system)
8223 (native-inputs
8224 (list python-pytest
8225 python-setuptools
8226 python-wheel))
8227 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
8228 (synopsis "Find an unused port, reliably")
8229 (description
8230 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
8231it.")
8232 (license license:expat)))
8233
8234(define-public python-flask-migrate
8235 (package
8236 (name "python-flask-migrate")
8237 (version "4.1.0")
8238 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
8239 (source (origin
8240 (method git-fetch)
8241 (uri (git-reference (url home-page)
8242 (commit (string-append "v" version))))
8243 (file-name (git-file-name name version))
8244 (sha256
8245 (base32
8246 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
8247 (build-system pyproject-build-system)
8248 (propagated-inputs
8249 (list python-flask python-alembic python-flask-sqlalchemy))
8250 (native-inputs
8251 (list python-pytest python-setuptools python-wheel))
8252 (synopsis "SQLAlchemy database migrations for Flask programs using
8253Alembic")
8254 (description "This package contains SQLAlchemy database migration tools
8255for Flask programs that are using @code{python-alembic}.")
8256 (license license:expat)))
8257
8258(define-public python-genshi
8259 (package
8260 (name "python-genshi")
8261 (version "0.7.7")
8262 (source
8263 (origin
8264 (method git-fetch)
8265 (uri (git-reference
8266 (url "https://github.com/edgewall/genshi")
8267 (commit version)))
8268 (file-name (git-file-name name version))
8269 (sha256
8270 (base32 "06q14mn5n56rdnqvsbbjixygilblgg85fzw029n96qf6f1rvldiq"))))
8271 (native-inputs (list python-setuptools-67))
8272 (propagated-inputs
8273 (list python-six))
8274 (build-system python-build-system)
8275 (home-page "https://genshi.edgewall.org/")
8276 (synopsis "Toolkit for generation of output for the web")
8277 (description "Genshi is a Python library that provides an integrated set
8278of components for parsing, generating, and processing HTML, XML or other
8279textual content for output generation on the web.")
8280 (license license:bsd-3)))
8281
8282(define-public python-flask-principal
8283 (package
8284 (name "python-flask-principal")
8285 (version "0.4.0")
8286 (source
8287 (origin
8288 (method git-fetch)
8289 (uri (git-reference
8290 (url "https://github.com/pallets-eco/flask-principal")
8291 (commit version)))
8292 (file-name (git-file-name name version))
8293 (sha256
8294 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
8295 (build-system pyproject-build-system)
8296 (propagated-inputs (list python-blinker))
8297 (native-inputs (list python-flask python-pynose python-setuptools))
8298 (home-page "https://github.com/pallets-eco/flask-principal")
8299 (synopsis "Identity management for Flask")
8300 (description
8301 "@code{flask_principal} is a identity management library for Flask. It
8302supports managing both authentication and authorization data in a thread-local
8303variable.")
8304 (license license:expat)))
8305
8306(define-public python-flask-httpauth
8307 (package
8308 (name "python-flask-httpauth")
8309 (version "4.8.0")
8310 (source
8311 (origin
8312 (method url-fetch)
8313 (uri (pypi-uri "Flask-HTTPAuth" version))
8314 (sha256
8315 (base32
8316 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
8317 (build-system pyproject-build-system)
8318 (propagated-inputs (list python-flask))
8319 (native-inputs
8320 (list nss-certs-for-test
8321 python-pytest
8322 python-setuptools
8323 python-wheel))
8324 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
8325 (synopsis "Basic and Digest HTTP authentication for Flask routes")
8326 (description "@code{flask_httpauth} provides Basic and Digest HTTP
8327authentication for Flask routes.")
8328 (license license:expat)))
8329
8330(define-public python-uritemplate
8331 (package
8332 (name "python-uritemplate")
8333 (version "4.1.1")
8334 (source
8335 (origin
8336 (method url-fetch)
8337 (uri (pypi-uri "uritemplate" version))
8338 (sha256
8339 (base32
8340 "1w14a775d92mx9pdhb5zimifpfr2lfcn0vfdpjagcy9vbkyfsij3"))))
8341 (build-system python-build-system)
8342 (home-page "https://uritemplate.readthedocs.org")
8343 (synopsis "Library to deal with URI Templates")
8344 (description "@code{uritemplate} provides Python library to deal with URI
8345Templates.")
8346 ;; The software is made available under the terms of *either* of the
8347 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
8348 ;; are made under *both* licenses (excerpt from the LICENSE file).
8349 (license (list license:bsd-2 license:asl2.0))))
8350
8351(define-public python-uritemplate-3
8352 (package
8353 (inherit python-uritemplate)
8354 (name "python-uritemplate")
8355 (version "3.0.1")
8356 (source (origin
8357 (method url-fetch)
8358 (uri (pypi-uri "uritemplate" version))
8359 (sha256
8360 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
8361
8362(define-public python-publicsuffix
8363 (package
8364 (name "python-publicsuffix")
8365 (version "1.1.0")
8366 (source (origin
8367 (method url-fetch)
8368 (uri (pypi-uri "publicsuffix" version))
8369 (sha256
8370 (base32
8371 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
8372 (build-system python-build-system)
8373 (arguments
8374 `(#:tests? #f)) ; tests use the internet
8375 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
8376 (synopsis "Get suffix for a domain name")
8377 (description "Get a public suffix for a domain name using the Public Suffix
8378List.")
8379 (license license:expat)))
8380
8381(define-public python-publicsuffix2
8382 (package
8383 (name "python-publicsuffix2")
8384 (version "2.20191221")
8385 (source
8386 (origin
8387 (method url-fetch)
8388 (uri (pypi-uri "publicsuffix2" version))
8389 (sha256
8390 (base32 "0yzysvfj1najr1mb4pcqrbmjir3xpb69rlffln95a3cdm8qwry00"))))
8391 (build-system python-build-system)
8392 (arguments
8393 '(#:phases
8394 (modify-phases %standard-phases
8395 (add-after 'unpack 'ignore-maintainer-inputs
8396 (lambda _
8397 ;; Comment out a demand for python-requests, which is used only by
8398 ;; the unused ‘update_psl’ helper command.
8399 (substitute* "setup.py"
8400 (("'requests " match)
8401 (format #f "# ~a" match)))
8402 #t)))
8403 #:tests? #f)) ; the test suite requires network access
8404 (home-page "https://github.com/pombredanne/python-publicsuffix2")
8405 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
8406 (description "Get a public suffix for a domain name using the Public Suffix
8407List. Forked from and using the same API as the publicsuffix package.")
8408 (license (list license:expat license:mpl2.0))))
8409
8410(define-public python-werkzeug
8411 (package
8412 (name "python-werkzeug")
8413 (version "3.1.3")
8414 (source
8415 (origin
8416 (method url-fetch)
8417 (uri (pypi-uri "werkzeug" version))
8418 (sha256
8419 (base32
8420 "0ij7si3aa3ykac7k7fz481h4majqqwn2iqwhjxkji4y18plkqwk0"))))
8421 (build-system pyproject-build-system)
8422 (arguments
8423 (list
8424 #:test-flags
8425 ;; Test requiring networking setup.
8426 #~(list "--ignore=tests/test_serving.py"
8427 "--deselect=tests/test_debug.py::test_basic"
8428 "--deselect=tests/test_exceptions.py::test_response_body"
8429 "--deselect=tests/middleware/test_http_proxy.py::test_http_proxy")))
8430 (native-inputs
8431 (list python-flit-core
8432 python-pytest
8433 python-watchdog
8434 python-ephemeral-port-reserve
8435 python-pytest-timeout
8436 python-pytest-xprocess))
8437 (propagated-inputs
8438 (list python-markupsafe
8439 python-requests))
8440 (home-page "https://palletsprojects.com/p/werkzeug/")
8441 (synopsis "Utilities for WSGI applications")
8442 (description "One of the most advanced WSGI utility modules. It includes a
8443powerful debugger, full-featured request and response objects, HTTP utilities to
8444handle entity tags, cache control headers, HTTP dates, cookie handling, file
8445uploads, a powerful URL routing system and a bunch of community-contributed
8446addon modules.")
8447 (license license:x11)))
8448
8449(define-public python-werkzeug-1.0
8450 (package
8451 (inherit python-werkzeug)
8452 (version "1.0.1")
8453 (source (origin
8454 (method url-fetch)
8455 (uri (pypi-uri "Werkzeug" version))
8456 (sha256
8457 (base32
8458 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
8459 (patches (search-patches "python-werkzeug-tests.patch"))))
8460 (arguments
8461 (list
8462 #:phases
8463 '(modify-phases %standard-phases
8464 (add-after 'unpack 'ignore-warnings
8465 (lambda _
8466 (substitute* "setup.cfg"
8467 ((" error.*") "")))))))
8468 (propagated-inputs
8469 (list python-requests))
8470 (native-inputs
8471 (list python-pytest python-pytest-timeout python-setuptools
8472 python-wheel))))
8473
8474(define-public python-bottle
8475 (package
8476 (name "python-bottle")
8477 (version "0.13.4")
8478 (source
8479 (origin
8480 (method url-fetch)
8481 (uri (pypi-uri "bottle" version))
8482 (sha256
8483 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
8484 (build-system pyproject-build-system)
8485 (native-inputs (list python-pytest python-setuptools))
8486 (home-page "https://bottlepy.org/")
8487 (synopsis "WSGI framework for small web-applications")
8488 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
8489 (license license:expat)))
8490
8491(define-public python-wtforms
8492 (package
8493 (name "python-wtforms")
8494 (version "3.1.2")
8495 (source
8496 (origin
8497 (method url-fetch)
8498 (uri (pypi-uri "wtforms" version))
8499 (sha256
8500 (base32 "1fblnkzvs6339glwx8bskdjy7nhn2ap90y9g6b399713sy063mzq"))))
8501 (build-system pyproject-build-system)
8502 (native-inputs (list python-hatchling python-pytest))
8503 (propagated-inputs (list python-babel python-email-validator
8504 python-markupsafe))
8505 (home-page "https://wtforms.readthedocs.io/")
8506 (synopsis
8507 "Form validation and rendering library for Python web development")
8508 (description
8509 "WTForms is a flexible forms validation and rendering library
8510for Python web development. It is very similar to the web form API
8511available in Django, but is a standalone package.")
8512 (license license:bsd-3)))
8513
8514(define-public python-wtforms-sqlalchemy
8515 (package
8516 (name "python-wtforms-sqlalchemy")
8517 (version "0.4.1")
8518 (source
8519 (origin
8520 (method url-fetch)
8521 (uri (pypi-uri "WTForms-SQLAlchemy" version))
8522 (sha256
8523 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
8524 (build-system pyproject-build-system)
8525 (native-inputs (list python-pytest python-setuptools python-wheel))
8526 (propagated-inputs (list python-sqlalchemy python-wtforms))
8527 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
8528 (synopsis "SQLAlchemy tools for WTForms")
8529 (description
8530 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
8531package from WTForms. The package has been renamed to
8532@code{wtforms_sqlalchemy} but otherwise should function the same as
8533@code{wtforms.ext.sqlalchemy} did.")
8534 (license license:bsd-3)))
8535
8536(define-public python-urlgrabber
8537 (package
8538 (name "python-urlgrabber")
8539 (version "4.1.0")
8540 (source
8541 (origin
8542 (method url-fetch)
8543 (uri (pypi-uri "urlgrabber" version))
8544 (sha256
8545 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
8546 (build-system python-build-system)
8547 (arguments
8548 `(#:phases
8549 (modify-phases %standard-phases
8550 (replace 'check
8551 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8552 (when tests?
8553 (add-installed-pythonpath inputs outputs)
8554 (invoke "python" "test/runtests.py")))))))
8555 (propagated-inputs
8556 (list python-pycurl python-setuptools python-six))
8557 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
8558 (synopsis "High-level cross protocol url-grabber")
8559 (description
8560 "@code{urlgrabber} is a library that unifies access to files available on
8561the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
8562supports features like HTTP keep-alive, reget, throttling and more.")
8563 (license license:lgpl2.1+)))
8564
8565(define-public python-pycares
8566 (package
8567 (name "python-pycares")
8568 (version "4.11.0")
8569 (source
8570 (origin
8571 (method git-fetch)
8572 (uri (git-reference
8573 (url "https://github.com/saghul/pycares")
8574 (commit (string-append "v" version))))
8575 (file-name (git-file-name name version))
8576 (sha256
8577 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
8578 (snippet #~(begin
8579 (rmdir "deps/c-ares")))))
8580 (build-system pyproject-build-system)
8581 (arguments
8582 (list
8583 ;; XXX: Half of the tests require internet access
8584 ;; There is currently no markers to avoid running them.
8585 #:tests? #f
8586 #:phases
8587 #~(modify-phases %standard-phases
8588 (add-after 'unpack 'configure-system-lib
8589 (lambda _
8590 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
8591 (native-inputs (list python-pytest python-setuptools))
8592 (inputs (list c-ares))
8593 (propagated-inputs (list python-cffi))
8594 (home-page "https://github.com/saghul/pycares")
8595 (synopsis "Python interface for @code{c-ares}")
8596 (description
8597 "@code{pycares} is a Python module which provides an interface to
8598@code{c-ares}, a C library that performs DNS requests and name resolutions
8599asynchronously.")
8600 (license license:expat)))
8601
8602(define-public python-yarl
8603 (package
8604 (name "python-yarl")
8605 (version "1.18.3")
8606 (source
8607 (origin
8608 (method url-fetch)
8609 (uri (pypi-uri "yarl" version))
8610 (sha256
8611 (base32
8612 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
8613 (build-system pyproject-build-system)
8614 (arguments
8615 (list
8616 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
8617 #:phases
8618 '(modify-phases %standard-phases
8619 (add-after 'unpack 'patch-build-system
8620 (lambda _
8621 ;; XXX: I don't know how to tell it to build the extensions in
8622 ;; place.
8623 (substitute* "packaging/pep517_backend/_backend.py"
8624 (("build_inplace=False") "build_inplace=True")))))))
8625 (native-inputs
8626 (list python-covdefaults
8627 python-cython
8628 python-expandvars
8629 python-pytest
8630 python-pytest-cov
8631 python-pytest-xdist
8632 python-setuptools
8633 python-tomli
8634 python-wheel))
8635 (propagated-inputs
8636 (list python-packaging python-idna python-multidict python-propcache))
8637 (home-page "https://github.com/aio-libs/yarl/")
8638 (synopsis "Yet another URL library")
8639 (description "@code{yarl} module provides handy @code{URL} class
8640for URL parsing and changing.")
8641 (license license:asl2.0)))
8642
8643(define-public python-canvasapi
8644 (package
8645 (name "python-canvasapi")
8646 (version "3.4.0")
8647 (source (origin
8648 (method git-fetch)
8649 (uri (git-reference
8650 (url "https://github.com/ucfopen/canvasapi")
8651 (commit (string-append "v" version))))
8652 (file-name (git-file-name name version))
8653 (sha256
8654 (base32
8655 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
8656 (build-system pyproject-build-system)
8657 (propagated-inputs (list python-arrow python-pytz python-requests))
8658 (native-inputs (list python-pytest
8659 python-requests-mock
8660 python-setuptools
8661 python-urllib3))
8662 (home-page "https://github.com/ucfopen/canvasapi")
8663 (synopsis "API wrapper for the Canvas LMS")
8664 (description
8665 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
8666The library enables developers to programmatically manage Canvas courses,
8667users, gradebooks, and more.")
8668 (license license:expat)))
8669
8670(define-public python-google
8671 (package
8672 (name "python-google")
8673 (version "3.0.0")
8674 (source
8675 (origin
8676 (method url-fetch)
8677 (uri (pypi-uri "google" version))
8678 (sha256
8679 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
8680 (build-system pyproject-build-system)
8681 (arguments (list #:tests? #f)) ;There are no tests.
8682 (native-inputs (list python-setuptools))
8683 (propagated-inputs (list python-beautifulsoup4))
8684 (home-page "https://breakingcode.wordpress.com/")
8685 (synopsis "Python bindings to the Google search engine")
8686 (description
8687 "This package provides Python bindings for using the Google search
8688engine. Its module is called @code{googlesearch}.")
8689 (license license:bsd-3)))
8690
8691(define-public python-google-api-client
8692 (package
8693 (name "python-google-api-client")
8694 (version "2.102.0")
8695 (source
8696 (origin
8697 (method url-fetch)
8698 (uri (pypi-uri "google-api-python-client" version))
8699 (sha256
8700 (base32
8701 "07b9afz3g3lk976i974h6ikvl7wzwm0a0ws0iynxvmd4favgjvwh"))))
8702 (build-system python-build-system)
8703 (arguments
8704 `(#:tests? #f)) ; tests require internet access
8705 (propagated-inputs
8706 (list python-google-api-core
8707 python-google-auth
8708 python-google-auth-httplib2
8709 python-httplib2
8710 python-pyparsing
8711 python-six
8712 python-uritemplate-3))
8713 (home-page "https://github.com/google/google-api-python-client")
8714 (synopsis "Core Python library for accessing Google APIs")
8715 (description "Python client library for Google's discovery based APIs")
8716 (license license:asl2.0)))
8717
8718(define-public python-google-auth-httplib2
8719 (package
8720 (name "python-google-auth-httplib2")
8721 (version "0.2.0")
8722 (source (origin
8723 (method url-fetch)
8724 (uri (pypi-uri "google-auth-httplib2" version))
8725 (sha256
8726 (base32 "018fckshilc6z2qpj1pclh8haanbq3lr85w6p4g4z5wgyjnppaiq"))))
8727 (build-system pyproject-build-system)
8728 (propagated-inputs
8729 (list python-google-auth python-httplib2))
8730 (native-inputs
8731 (list python-pytest
8732 python-pyparsing
8733 python-pytest-localserver
8734 python-flask
8735 python-setuptools))
8736 (home-page
8737 "https://github.com/GoogleCloudPlatform/google-auth-library-python-httplib2")
8738 (synopsis "Google Authentication Library: httplib2 transport")
8739 (description "This package provides a Google Authentication Library plugin
8740for httplib2 transport.")
8741 (license license:asl2.0)))
8742
8743(define-public python-google-auth-oauthlib
8744 (package
8745 (name "python-google-auth-oauthlib")
8746 (version "1.1.0")
8747 (source
8748 (origin
8749 (method url-fetch)
8750 (uri (pypi-uri "google-auth-oauthlib" version))
8751 (sha256
8752 (base32 "1yvsjd1vh440nsh9vpnig23sq4k1ia749x5g1dwm7r4110xqrsl3"))))
8753 (build-system pyproject-build-system)
8754 (propagated-inputs (list python-google-auth python-requests-oauthlib))
8755 (native-inputs
8756 (list python-flask
8757 python-pytest
8758 python-mock
8759 python-setuptools))
8760 (home-page
8761 "https://github.com/GoogleCloudPlatform/google-auth-library-python-oauthlib")
8762 (synopsis "Google Authentication Library: oauthlib")
8763 (description "This package provides a Google Authentication Library plugin
8764with oauthlib.")
8765 (license license:asl2.0)))
8766
8767(define-public whoogle-search
8768 (package
8769 (name "whoogle-search")
8770 (version "0.8.4")
8771 (source (origin
8772 (method url-fetch)
8773 (uri (pypi-uri "whoogle-search" version))
8774 (sha256
8775 (base32
8776 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
8777 (build-system pyproject-build-system)
8778 (arguments
8779 (list
8780 ;; The tests need network access
8781 #:tests? #f))
8782 (propagated-inputs
8783 (list python-beautifulsoup4
8784 python-brotli
8785 python-cryptography
8786 python-cssutils
8787 python-defusedxml
8788 python-flask
8789 python-dotenv
8790 python-requests
8791 python-stem
8792 python-validators
8793 python-waitress))
8794 (native-inputs (list python-setuptools python-wheel))
8795 (home-page "https://github.com/benbusby/whoogle-search")
8796 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
8797 (description
8798 "Get Google results, but without any ads, javascript, AMP links,
8799cookies, or IP address tracking. Quick and simple to implement as a primary
8800search engine replacement on both desktop and mobile.")
8801 (license license:expat)))
8802
8803(define-public python-hawkauthlib
8804 (package
8805 (name "python-hawkauthlib")
8806 (version "2.0.0")
8807 (source
8808 (origin
8809 (method url-fetch)
8810 (uri (pypi-uri "hawkauthlib" version))
8811 (sha256
8812 (base32
8813 "03ai47s4h8nfnrf25shbfvkm1b9n1ccd4nmmj280sg1fayi69zgg"))))
8814 (build-system python-build-system)
8815 (propagated-inputs
8816 (list python-requests python-webob))
8817 (home-page "https://github.com/mozilla-services/hawkauthlib")
8818 (synopsis "Hawk Access Authentication protocol")
8819 (description
8820 "This is a low-level Python library for implementing Hawk Access Authentication,
8821a simple HTTP request-signing scheme.")
8822 (license license:mpl2.0)))
8823
8824(define-public python-pybrowserid
8825 (package
8826 (name "python-pybrowserid")
8827 (version "0.14.0")
8828 (source
8829 (origin
8830 (method url-fetch)
8831 (uri (pypi-uri "PyBrowserID" version))
8832 (sha256
8833 (base32
8834 "1qvi79kfb8x9kxkm5lw2mp42hm82cpps1xknmsb5ghkwx1lpc8kc"))))
8835 (build-system python-build-system)
8836 (propagated-inputs
8837 (list python-requests))
8838 (native-inputs
8839 (list python-mock))
8840 (home-page "https://github.com/mozilla/PyBrowserID")
8841 (synopsis "Python library for the BrowserID protocol")
8842 (description
8843 "This is a Python client library for the BrowserID protocol that
8844underlies Mozilla Persona.")
8845 (license license:mpl2.0)))
8846
8847(define-public python-pyfxa
8848 (package
8849 (name "python-pyfxa")
8850 (version "0.8.1")
8851 (source
8852 (origin
8853 (method git-fetch)
8854 (uri (git-reference
8855 (url "https://github.com/mozilla/PyFxA")
8856 (commit (string-append "v" version))))
8857 (file-name (git-file-name name version))
8858 (sha256
8859 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
8860 (build-system pyproject-build-system)
8861 (arguments
8862 (list
8863 ;; These tests require network access
8864 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
8865 (propagated-inputs
8866 (list python-cryptography
8867 python-pyjwt
8868 python-parameterized
8869 python-hawkauthlib
8870 python-requests))
8871 (native-inputs
8872 (list python-grequests
8873 python-hatchling
8874 python-mock
8875 python-pytest
8876 python-responses))
8877 (home-page "https://github.com/mozilla/PyFxA")
8878 (synopsis "Firefox Accounts client library for Python")
8879 (description
8880 "This is a Python library for interacting with the Firefox Accounts
8881ecosystem.")
8882 (license license:mpl2.0)))
8883
8884(define-public python-hyperlink
8885 (package
8886 (name "python-hyperlink")
8887 (version "21.0.0")
8888 (source
8889 (origin
8890 (method url-fetch)
8891 (uri (pypi-uri "hyperlink" version))
8892 (sha256
8893 (base32
8894 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
8895 (build-system pyproject-build-system)
8896 (arguments
8897 (list #:phases
8898 #~(modify-phases %standard-phases
8899 (add-before 'check 'pretend-to-be-CI
8900 (lambda _
8901 ;; Pretend to be a CI system to skip flaky tests.
8902 (setenv "CI" "true"))))))
8903 (native-inputs
8904 (list python-pytest python-setuptools python-wheel))
8905 (propagated-inputs
8906 (list python-idna))
8907 (home-page "https://github.com/python-hyper/hyperlink")
8908 (synopsis "Python module to create immutable URLs according to spec")
8909 (description "This package provides a Python module to create immutable, and
8910correct URLs for Python according to RFCs 3986 and 3987.")
8911 (license license:expat)))
8912
8913(define-public python-treq
8914 (package
8915 (name "python-treq")
8916 (version "24.9.1")
8917 (source
8918 (origin
8919 (method url-fetch)
8920 (uri (pypi-uri "treq" version))
8921 (sha256
8922 (base32
8923 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
8924 (build-system pyproject-build-system)
8925 (native-inputs
8926 (list python-httpbin
8927 python-pytest
8928 python-service-identity
8929 python-setuptools
8930 python-wheel))
8931 (propagated-inputs
8932 (list python-attrs
8933 python-hyperlink
8934 python-incremental
8935 python-requests
8936 python-twisted
8937 python-typing-extensions))
8938 (home-page "https://github.com/twisted/treq")
8939 (synopsis "Requests-like API built on top of twisted.web's Agent")
8940 (description "This package provides an HTTP library inspired by
8941@code{requests} but written on top of Twisted's @code{Agents}. It offers a
8942high level API for making HTTP requests when using Twisted.")
8943 (license license:expat)))
8944
8945(define-public python-autobahn
8946 (package
8947 (name "python-autobahn")
8948 (version "25.11.1")
8949 (source
8950 (origin
8951 (method url-fetch)
8952 (uri (pypi-uri "autobahn" version))
8953 (sha256
8954 (base32
8955 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
8956 (build-system pyproject-build-system)
8957 (arguments
8958 (list
8959 ;; The tests fail to run:
8960 ;; https://github.com/crossbario/autobahn-python/issues/1117
8961 #:tests? #f
8962 #:phases #~(modify-phases %standard-phases
8963 (add-after 'unpack 'relax-zope-interface
8964 (lambda _
8965 ;; python-zope-interface is a world rebuild package
8966 ;; and our one-digit lower minor version seems to be
8967 ;; fine.
8968 (substitute* "setup.py"
8969 (("zope.interface>=5.2.0")
8970 "zope.interface>=5.1.0"))))
8971 (add-after 'unpack 'strip-xbr
8972 (lambda _
8973 ;; Strip new XBR feature which isn't available in Guix.
8974 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
8975 (native-inputs (list python-setuptools python-wheel))
8976 (propagated-inputs (list python-cbor2
8977 python-cryptography
8978 python-hyperlink
8979 python-msgpack
8980 python-py-ubjson
8981 python-twisted
8982 python-txaio
8983 python-ujson))
8984 (home-page "https://github.com/crossbario/autobahn-python/")
8985 (synopsis "Web Application Messaging Protocol implementation")
8986 (description "This package provides an implementation of the @dfn{Web Application
8987Messaging Protocol} (WAMP). WAMP connects components in distributed
8988applications using Publish and Subscribe (PubSub) and routed Remote Procedure
8989Calls (rRPC). It is ideal for distributed, multi-client and server applications
8990such as IoT applications or multi-user database-driven business applications.")
8991 (license license:expat)))
8992
8993(define-public python-ws4py
8994 (package
8995 (name "python-ws4py")
8996 (version "0.6.0")
8997 (source
8998 (origin
8999 (method git-fetch)
9000 (uri (git-reference
9001 (url "https://github.com/Lawouach/WebSocket-for-Python")
9002 (commit version)))
9003 (file-name (git-file-name name version))
9004 (sha256
9005 (base32
9006 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
9007 (build-system pyproject-build-system)
9008 (arguments
9009 (list
9010 #:phases
9011 #~(modify-phases %standard-phases
9012 (add-after 'unpack 'remove-cherrypy-support
9013 (lambda _
9014 (delete-file "ws4py/server/cherrypyserver.py")
9015 (delete-file "test/test_cherrypy.py"))))))
9016 (native-inputs (list python-setuptools python-pytest))
9017 (propagated-inputs
9018 (list python-gevent python-tornado))
9019 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
9020 (synopsis "WebSocket client and server library")
9021 (description
9022 "This package provides a WebSocket client and server library for Python.")
9023 (license license:bsd-3)))
9024
9025(define-public python-slowapi
9026 (package
9027 (name "python-slowapi")
9028 (version "0.1.9")
9029 (source
9030 (origin
9031 (method git-fetch)
9032 (uri (git-reference
9033 (url "https://github.com/laurents/slowapi")
9034 (commit (string-append "v" version))))
9035 (file-name (git-file-name name version))
9036 (sha256
9037 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
9038 (build-system pyproject-build-system)
9039 (arguments
9040 (list
9041 #:test-flags
9042 ;; These tests fail because the timestamp contains more decimal points
9043 ;; than expected, so a simple equality comparison fails.
9044 '(list "-k" (string-append "not test_headers_no_breach"
9045 " and not test_headers_breach"))))
9046 (propagated-inputs (list python-limits python-redis))
9047 (native-inputs
9048 (list python-fastapi
9049 python-hiro
9050 python-mock
9051 python-poetry-core
9052 python-pytest))
9053 (home-page "https://github.com/laurents/slowapi")
9054 (synopsis "Rate limiting extension for Starlette and Fastapi")
9055 (description
9056 "This package provides a rate limiting extension for Starlette and
9057Fastapi.")
9058 (license license:expat)))
9059
9060(define-public python-slugify
9061 (package
9062 (name "python-slugify")
9063 (version "5.0.2")
9064 (source
9065 (origin
9066 (method url-fetch)
9067 (uri (pypi-uri "python-slugify" version))
9068 (sha256
9069 (base32 "1aww2ncglyii4jkbfjxqhinivawf9zmwifcj32d69gpwp6h86czi"))))
9070 (propagated-inputs
9071 (list python-unidecode python-text-unidecode))
9072 (arguments
9073 `(#:phases
9074 (modify-phases %standard-phases
9075 (replace 'check
9076 (lambda* (#:key tests? #:allow-other-keys)
9077 (when tests?
9078 (invoke "python" "test.py")))))))
9079 (build-system python-build-system)
9080 (home-page "https://github.com/un33k/python-slugify")
9081 (synopsis "Python Slugify application that handles Unicode")
9082 (description "This package provides a @command{slufigy} command and
9083library to create slugs from unicode strings while keeping it DRY.")
9084 (license license:expat)))
9085
9086(define-public python-branca
9087 (package
9088 (name "python-branca")
9089 (version "0.7.2")
9090 (source
9091 (origin
9092 (method git-fetch) ; no tests in PyPI
9093 (uri (git-reference
9094 (url "https://github.com/python-visualization/branca")
9095 (commit (string-append "v" version))))
9096 (file-name (git-file-name name version))
9097 (sha256
9098 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
9099 (build-system pyproject-build-system)
9100 (arguments
9101 ;; This file requires Selenium.
9102 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
9103 ;; This test passes but is very slow.
9104 "-k" "not test_color_brewer_extendability")
9105 #:phases
9106 #~(modify-phases %standard-phases
9107 (add-before 'build 'pretend-version
9108 ;; The version string is usually derived via setuptools-scm,
9109 ;; but without the git metadata available, the version string
9110 ;; is set to '0.0.0'.
9111 (lambda _
9112 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
9113 #$(package-version this-package)))))))
9114 (propagated-inputs (list python-jinja2))
9115 (native-inputs
9116 (list python-numpy
9117 python-pytest
9118 python-setuptools
9119 python-setuptools-scm
9120 python-wheel))
9121 (home-page "https://github.com/python-visualization/branca")
9122 (synopsis "Generate complex HTML+JS pages with Python")
9123 (description "This library is a spinoff from @code{folium} that would host
9124the non-map-specific features. It can be used to generate HTML + JS.")
9125 (license license:expat)))
9126
9127(define-public python-tinycss2
9128 (package
9129 (name "python-tinycss2")
9130 (version "1.4.0")
9131 (source
9132 (origin
9133 (method git-fetch)
9134 (uri (git-reference
9135 (url "https://github.com/Kozea/tinycss2")
9136 (commit (string-append "v" version))
9137 (recursive? #true)))
9138 (file-name (git-file-name name version))
9139 (sha256
9140 (base32 "11m5vhpdz6zlzq2lqqklkhd0h4jxblpvcrdf9cc4s06nhr9acp0r"))))
9141 (build-system pyproject-build-system)
9142 (native-inputs
9143 (list python-flit
9144 python-pytest
9145 python-pytest-cov))
9146 (propagated-inputs
9147 (list python-webencodings))
9148 (home-page "https://tinycss2.readthedocs.io/")
9149 (synopsis "Low-level CSS parser for Python")
9150 (description "@code{tinycss2} can parse strings, return Python objects
9151representing tokens and blocks, and generate CSS strings corresponding to
9152these objects.
9153
9154Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
9155grammar of CSS but doesn’t know specific rules, properties or values supported
9156in various CSS modules.")
9157 (license license:bsd-3)))
9158
9159(define-public python-cssselect2
9160 (package
9161 (name "python-cssselect2")
9162 (version "0.4.1")
9163 (source
9164 (origin
9165 (method url-fetch)
9166 (uri (pypi-uri "cssselect2" version))
9167 (sha256
9168 (base32 "1j2fcr217rsvkipsg6zjq03rl64rxnvb5hqqpx0dv58fhspvkywk"))))
9169 (build-system pyproject-build-system)
9170 (arguments
9171 `(#:phases
9172 (modify-phases %standard-phases
9173 (add-after 'unpack 'disable-linters
9174 ;; Their check fails; none of our business.
9175 (lambda _
9176 (substitute* '("setup.py" "pyproject.toml")
9177 (("'pytest-flake8',") "")
9178 (("'pytest-isort',") "")
9179 (("--flake8") "")
9180 (("--isort") "")))))))
9181 (propagated-inputs
9182 (list python-tinycss2))
9183 (native-inputs
9184 (list python-flit python-pytest-cov python-pytest-runner))
9185 (home-page "https://cssselect2.readthedocs.io/")
9186 (synopsis "CSS selectors for Python ElementTree")
9187 (description "@code{cssselect2} is a straightforward implementation of
9188CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
9189ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
9190
9191Unlike the Python package @code{cssselect}, it does not translate selectors to
9192XPath and therefore does not have all the correctness corner cases that are
9193hard or impossible to fix in cssselect.")
9194 (license license:bsd-3)))
9195
9196(define-public python-uvloop
9197 (package
9198 (name "python-uvloop")
9199 (version "0.21.0")
9200 (source
9201 (origin
9202 (method url-fetch)
9203 (uri (pypi-uri "uvloop" version))
9204 (sha256
9205 (base32 "1qq46ym3ymzfn4j6fnykfmr1f4qnb7x7p15dlw37hi38v87jpw9v"))
9206 (modules '((guix build utils)))
9207 (snippet
9208 '(begin (delete-file-recursively "vendor")
9209 (delete-file "uvloop/loop.c")))))
9210 (build-system pyproject-build-system)
9211 (arguments
9212 (list
9213 #:test-flags
9214 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
9215 ;; to get a meaningful idea about where.
9216 #~(list "--timeout=300"
9217 "--timeout-method=thread"
9218 "-k" (string-join
9219 (list
9220 ;; Timeout, because SIGINT cannot be sent to child.
9221 "not test_signals_sigint_pycode_continue"
9222 "test_signals_sigint_pycode_stop"
9223 "test_signals_sigint_uvcode"
9224 "test_signals_sigint_uvcode_two_loop_runs"
9225 ;; This test is racy and prone to get stuck on
9226 ;; various platforms, possibly a aiohttp issue:
9227 ;; https://github.com/MagicStack/uvloop/issues/412
9228 "test_remote_shutdown_receives_trailing_data"
9229 ;; It looks like pytest is preventing
9230 ;; custom stdout/stderr redirection,
9231 ;; even with -s.
9232 "test_process_streams_redirect"
9233 ;; FileNotFoundError: [Errno 2] No such file or
9234 ;; directory
9235 "test_process_env_2"
9236 ;; socket.gaierror: [Errno -2] Name or service not known
9237 "test_getaddrinfo_21"
9238 #$@(if (target-riscv64?)
9239 `("test_renegotiation")
9240 `()))
9241 " and not "))
9242 #:phases
9243 #~(modify-phases %standard-phases
9244 (add-after 'unpack 'preparations
9245 (lambda _
9246 ;; Use packaged libuv.
9247 (substitute* "setup.py" (("self.use_system_libuv = False")
9248 "self.use_system_libuv = True"))
9249 ;; Replace hardcoded shell command.
9250 (substitute* "uvloop/loop.pyx"
9251 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))))
9252 #$@(if (target-riscv64?)
9253 `((add-after 'unpack 'adjust-test-timeouts
9254 (lambda _
9255 (substitute* '("tests/test_tcp.py"
9256 "tests/test_unix.py")
9257 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
9258 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
9259 '())
9260 (add-before 'check 'pre-check
9261 (lambda* (#:key tests? #:allow-other-keys)
9262 (when tests?
9263 ;; Remove Python module, which conflicts with the installed
9264 ;; version, but lacks the built C module.
9265 (delete-file-recursively "uvloop")))))))
9266 (native-inputs
9267 (list python-aiohttp
9268 python-cython
9269 python-psutil
9270 python-pyopenssl
9271 python-pytest
9272 python-pytest-timeout
9273 python-setuptools
9274 python-wheel))
9275 (inputs
9276 (list libuv))
9277 (home-page "https://github.com/MagicStack/uvloop")
9278 (synopsis "Fast implementation of asyncio event loop on top of libuv")
9279 (description
9280 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
9281event loop. It is implemented in Cython and uses libuv under the hood.")
9282 (license license:expat)))
9283
9284(define-public gunicorn
9285 (package
9286 (name "gunicorn")
9287 (version "22.0.0")
9288 (source
9289 (origin
9290 (method url-fetch)
9291 (uri (pypi-uri "gunicorn" version))
9292 (sha256
9293 (base32
9294 "0qzc3ghayc137hlwrqqwkkhaf8f5h9ja21qwy4rznxpz75i462sa"))))
9295 ;; CVE-2024-1135 is fixed in version 22.0.0.
9296 (properties `((lint-hidden-cve . ("CVE-2024-1135"))))
9297 (outputs '("out" "doc"))
9298 (build-system pyproject-build-system)
9299 (arguments
9300 `(#:test-flags
9301 ;; Disable the geventlet tests because eventlet uses dnspython, which
9302 ;; does not work in the build container due to lack of /etc/resolv.conf
9303 '("--ignore=tests/workers/test_geventlet.py")
9304 #:phases (modify-phases %standard-phases
9305 (add-after 'build 'build-doc
9306 (lambda _
9307 (invoke "make"
9308 "-C"
9309 "docs"
9310 "PAPER=a4"
9311 "html"
9312 "info")
9313 (delete-file "docs/build/texinfo/Makefile")
9314 (delete-file "docs/build/texinfo/Gunicorn.texi")))
9315 (add-after 'install 'install-doc
9316 (lambda* (#:key outputs #:allow-other-keys)
9317 (let* ((doc (string-append (assoc-ref outputs "doc")
9318 "/share/doc/"
9319 ,name "-"
9320 ,version))
9321 (html (string-append doc "/html"))
9322 (info (string-append doc "/info"))
9323 (examples (string-append doc "/examples")))
9324 (mkdir-p html)
9325 (mkdir-p info)
9326 (mkdir-p examples)
9327 (copy-recursively "docs/build/html" html)
9328 (copy-recursively "docs/build/texinfo" info)
9329 (copy-recursively "examples" examples)
9330 (for-each (lambda (file)
9331 (copy-file file
9332 (string-append doc "/" file)))
9333 '("README.rst" "NOTICE" "LICENSE" "THANKS")))))
9334 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
9335 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
9336 ;; size. Override it to only add the essential entries.
9337 (replace 'wrap
9338 (lambda* (#:key native-inputs inputs outputs
9339 #:allow-other-keys)
9340 (let* ((out (assoc-ref outputs "out"))
9341 (python (assoc-ref (or native-inputs inputs)
9342 "python"))
9343 (sitedir (string-append "/lib/python"
9344 (python-version python)
9345 "/site-packages")))
9346 (wrap-program (string-append out "/bin/gunicorn")
9347 `("PYTHONPATH" ":" prefix
9348 ,(map (lambda (output)
9349 (string-append output sitedir))
9350 (list python out))))))))))
9351 (inputs (list bash-minimal))
9352 (native-inputs (list binutils ;for ctypes.util.find_library()
9353 python-aiohttp
9354 python-gevent
9355 python-pytest
9356 python-pytest-cov
9357 python-sphinx
9358 texinfo))
9359 (propagated-inputs (list python-packaging python-setuptools python-wheel))
9360 (home-page "https://gunicorn.org/")
9361 (synopsis "Python WSGI HTTP Server for UNIX")
9362 (description
9363 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
9364Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
9365Unicorn project. The Gunicorn server is broadly compatible with
9366various web frameworks, simply implemented, light on server resources,
9367and fairly speedy.")
9368 (license license:expat)))
9369
9370;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
9371;; its tests
9372(define-public gunicorn-bootstrap
9373 (package
9374 (inherit gunicorn)
9375 (name "gunicorn")
9376 (arguments `(#:tests? #f))
9377 (properties '((hidden? . #t)))
9378 (native-inputs `())))
9379
9380(define-public python-httptools
9381 (package
9382 (name "python-httptools")
9383 (version "0.6.4")
9384 (source
9385 (origin
9386 ;; PyPI tarball comes with a vendored http-parser and no tests.
9387 (method git-fetch)
9388 (uri (git-reference
9389 (url "https://github.com/MagicStack/httptools")
9390 (commit (string-append "v" version))))
9391 (file-name (git-file-name name version))
9392 (sha256
9393 (base32 "05zsa77jlm2h9z0vfj6gdqklj3pbzbijhk5s9b3q7iaxl347hwzc"))
9394 (modules '((guix build utils)))
9395 (snippet
9396 #~(begin (delete-file-recursively "vendor")))))
9397 (build-system pyproject-build-system)
9398 (arguments
9399 (list
9400 #:test-flags
9401 ;; XXX: AssertionError: HttpParserError not raised.
9402 #~(list "-k" "not test_parser_response_leninent_headers_1")
9403 #:phases
9404 #~(modify-phases %standard-phases
9405 (add-after 'unpack 'configure-build-ext
9406 (lambda _
9407 (with-output-to-file "setup.cfg"
9408 (lambda ()
9409 (display "\
9410[build_ext]
9411use_system_llhttp = true
9412use_system_http_parser = true
9413cython_always = true"))))))))
9414 (native-inputs
9415 (list python-cython
9416 python-pytest
9417 python-setuptools))
9418 (inputs
9419 (list http-parser
9420 llhttp))
9421 (home-page "https://github.com/MagicStack/httptools")
9422 (synopsis "Collection of framework independent HTTP protocol utils")
9423 (description
9424 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
9425 (license license:expat)))
9426
9427(define-public python-uvicorn
9428 (package
9429 (name "python-uvicorn")
9430 (version "0.34.0")
9431 (source
9432 (origin
9433 ;; PyPI tarball has no tests.
9434 (method git-fetch)
9435 (uri (git-reference
9436 (url "https://github.com/encode/uvicorn")
9437 (commit version)))
9438 (file-name (git-file-name name version))
9439 (sha256
9440 (base32 "05lkxnpzmr0kik81kdcvavjvvc4d1lgmw88mr4vbwsqk147wgqbc"))))
9441 (build-system pyproject-build-system)
9442 (arguments
9443 (list
9444 #:test-flags
9445 #~(list "-o" "asyncio_mode=auto"
9446 ;; For some reason tests stacked in infinity re-invocation loop:
9447 ;; AssertionError where is_alive =
9448 ;; <uvicorn.supervisors.multiprocess.Process object at
9449 ;; 0x7ffff39b6110>.is_alive.
9450 ;; Maybe this <https://github.com/encode/uvicorn/issues/2466>.
9451 "--ignore=tests/supervisors/test_multiprocess.py"
9452
9453 #$@(cond
9454 ((or (target-aarch64?)
9455 (target-riscv64?))
9456 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
9457 (#t '())))))
9458 (native-inputs
9459 (list nss-certs-for-test
9460 python-a2wsgi
9461 python-hatchling
9462 python-httpx-bootstrap
9463 python-pytest
9464 python-pytest-asyncio-0.26
9465 python-pytest-mock
9466 python-requests
9467 python-trustme
9468 python-wsproto))
9469 (propagated-inputs
9470 (list python-a2wsgi
9471 python-click
9472 python-dotenv
9473 python-h11
9474 python-httptools
9475 python-pyyaml
9476 python-uvloop
9477 python-watchfiles
9478 python-websockets))
9479 (home-page "https://github.com/encode/uvicorn")
9480 (synopsis "Fast ASGI server implementation")
9481 (description
9482 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
9483and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
9484for HTTP/2 is planned.")
9485 (license license:bsd-3)))
9486
9487(define-public python-translation-finder
9488 (package
9489 (name "python-translation-finder")
9490 (version "2.22")
9491 (source
9492 (origin
9493 (method url-fetch)
9494 (uri (pypi-uri "translation_finder" version))
9495 (sha256
9496 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
9497 (build-system pyproject-build-system)
9498 (arguments
9499 (list
9500 #:test-flags
9501 ;; AssertionError: 31 != 30 : Mismatched count of results
9502 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
9503 (native-inputs
9504 (list python-pytest
9505 python-setuptools))
9506 (propagated-inputs
9507 (list python-charset-normalizer
9508 python-ruamel.yaml
9509 python-weblate-language-data))
9510 (home-page "https://weblate.org/")
9511 (synopsis "Translation file finder for Weblate")
9512 (description "This package provides a function to find translation file in
9513the source code of a project. It supports many translation file formats and
9514is part of the Weblate translation platform.")
9515 (license license:gpl3+)))
9516
9517(define-public python-gitlab
9518 (package
9519 (name "python-gitlab")
9520 (version "3.2.0")
9521 (source (origin
9522 (method url-fetch)
9523 (uri (pypi-uri "python-gitlab" version))
9524 (sha256
9525 (base32
9526 "1gi4lp2g4k99zqcx2bgqx940bpmpbc1w9qkl5gy33hpy148yhvlg"))))
9527 (build-system python-build-system)
9528 (arguments
9529 `(#:tests? #f)) ;tests require network access
9530 (propagated-inputs (list python-requests python-requests-toolbelt))
9531 (home-page "https://github.com/python-gitlab/python-gitlab")
9532 (synopsis "Interact with GitLab API")
9533 (description "This package provides an extended library for interacting
9534with GitLab instances through their API.")
9535 (license license:lgpl3+)))
9536
9537(define-public python-path-and-address
9538 (package
9539 (name "python-path-and-address")
9540 (version "2.0.1")
9541 (source
9542 (origin
9543 ;; The source distributed on PyPI doesn't include tests.
9544 (method git-fetch)
9545 (uri (git-reference
9546 (url "https://github.com/joeyespo/path-and-address")
9547 (commit (string-append "v" version))))
9548 (file-name (git-file-name name version))
9549 (sha256
9550 (base32
9551 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
9552 (build-system python-build-system)
9553 (arguments
9554 `(#:phases
9555 (modify-phases %standard-phases
9556 (replace 'check
9557 (lambda* (#:key inputs outputs #:allow-other-keys)
9558 (add-installed-pythonpath inputs outputs)
9559 (invoke "py.test"))))))
9560 (native-inputs
9561 (list python-pytest))
9562 (home-page "https://github.com/joeyespo/path-and-address")
9563 (synopsis "Functions for command-line server tools used by humans")
9564 (description "Path-and-address resolves ambiguities of command-line
9565interfaces, inferring which argument is the path, and which is the address.")
9566 (license license:expat)))
9567
9568;; XXX: This project missed maintainer upstream, see
9569;; <https://github.com/joeyespo/grip/issues/387>.
9570;; Consider to remove if it keeps failing to build.
9571(define-public grip
9572 (package
9573 (name "grip")
9574 (version "4.6.1")
9575 (source
9576 (origin
9577 (method git-fetch)
9578 (uri (git-reference
9579 (url "https://github.com/joeyespo/grip")
9580 (commit (string-append "v" version))))
9581 (file-name (git-file-name name version))
9582 (sha256
9583 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
9584 (build-system pyproject-build-system)
9585 (arguments
9586 (list
9587 #:test-flags
9588 ;; All tests fail requiring network access, ignore the whole file.
9589 #~(list "--ignore=tests/test_github.py")
9590 #:phases
9591 #~(modify-phases %standard-phases
9592 ;; This fixes the removal of `charset` attribute of requests from
9593 ;; Werkzeug 2.3.0.
9594 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
9595 (add-after 'unpack 'fix-response-encoding
9596 (lambda _
9597 (substitute* "grip/app.py"
9598 (("response.charset")
9599 "getattr(response, 'charset', 'utf-8')")))))))
9600 (native-inputs
9601 (list nss-certs-for-test
9602 python-pytest
9603 python-responses
9604 python-setuptools
9605 python-wheel))
9606 (propagated-inputs
9607 (list python-docopt
9608 python-flask
9609 python-markdown
9610 python-path-and-address
9611 python-pygments
9612 python-requests))
9613 (home-page "https://github.com/joeyespo/grip")
9614 (synopsis "Preview Markdown files using the GitHub API")
9615 (description
9616 "Grip is a command-line server application written in Python that uses
9617the GitHub Markdown API to render a local Markdown file. The styles and
9618rendering come directly from GitHub, so you'll know exactly how it will
9619appear. Changes you make to the file will be instantly reflected in the
9620browser without requiring a page refresh.")
9621 (license license:expat)))
9622
9623(define-public python-port-for
9624 (package
9625 (name "python-port-for")
9626 (version "0.7.4")
9627 (source
9628 (origin
9629 (method url-fetch)
9630 (uri (pypi-uri "port_for" version))
9631 (sha256
9632 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
9633 (build-system pyproject-build-system)
9634 (propagated-inputs
9635 (list python-urllib3))
9636 (native-inputs
9637 (list python-pytest python-setuptools python-wheel))
9638 (home-page "https://github.com/kmike/port-for/")
9639 (synopsis "TCP localhost port finder and association manager")
9640 (description
9641 "This package provides a utility that helps with local TCP ports
9642management. It can find an unused TCP localhost port and remember the
9643association.")
9644 (license license:expat)))
9645
9646(define-public python-livereload
9647 (package
9648 (name "python-livereload")
9649 (version "2.7.1")
9650 (source
9651 (origin
9652 (method git-fetch)
9653 (uri (git-reference
9654 (url "https://github.com/lepture/python-livereload")
9655 (commit (string-append "v" version))))
9656 (file-name (git-file-name name version))
9657 (sha256
9658 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
9659 (build-system pyproject-build-system)
9660 (arguments (list #:test-backend #~'unittest))
9661 (native-inputs (list python-django python-setuptools))
9662 (propagated-inputs (list python-tornado))
9663 (home-page "https://github.com/lepture/python-livereload")
9664 (synopsis "Python LiveReload")
9665 (description
9666 "Python LiveReload provides a command line utility, @command{livereload},
9667for starting a web server in a directory. It can trigger arbitrary commands
9668and serve updated contents upon changes to the directory.")
9669 (license license:bsd-3)))
9670
9671(define-public python-vf-1
9672 (package
9673 (name "python-vf-1")
9674 (version "0.0.11")
9675 (source
9676 (origin
9677 (method url-fetch)
9678 (uri (pypi-uri "VF-1" version))
9679 (sha256
9680 (base32
9681 "0xlqsaxsiayk1sd07kpz8abbcnab582y29a1y4882fq6j4gma5xi"))))
9682 (build-system python-build-system)
9683 (home-page "https://github.com/solderpunk/VF-1")
9684 (synopsis "Command line gopher client")
9685 (description "@code{VF-1} is a command line gopher client with
9686@acronym{TLS, Transport Layer Security} support.")
9687 (license license:bsd-2)))
9688
9689(define-public python-httpcore
9690 (package
9691 (name "python-httpcore")
9692 (version "1.0.9")
9693 (source
9694 (origin
9695 ;; PyPI tarball does not contain tests.
9696 (method git-fetch)
9697 (uri (git-reference
9698 (url "https://github.com/encode/httpcore")
9699 (commit version)))
9700 (file-name (git-file-name name version))
9701 (sha256
9702 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
9703 (build-system pyproject-build-system)
9704 (native-inputs
9705 (list nss-certs-for-test
9706 python-hatch-fancy-pypi-readme
9707 python-hatchling
9708 python-pytest
9709 python-pytest-asyncio
9710 python-pytest-httpbin
9711 python-pytest-trio
9712 python-uvicorn
9713 python-trustme))
9714 (propagated-inputs
9715 (list python-anyio
9716 python-certifi
9717 python-h11
9718 python-h2
9719 python-sniffio
9720 python-socksio
9721 python-trio
9722 python-trio-typing))
9723 (home-page "https://github.com/encode/httpcore")
9724 (synopsis "Minimal, low-level HTTP client")
9725 (description
9726 "HTTP Core provides a minimal and low-level HTTP client, which does one
9727thing only: send HTTP requests.
9728
9729Some things HTTP Core does do:
9730
9731@itemize
9732@item Sending HTTP requests.
9733@item Provides both sync and async interfaces.
9734@item Supports HTTP/1.1 and HTTP/2.
9735@item Async backend support for asyncio and trio.
9736@item Automatic connection pooling.
9737@item HTTP(S) proxy support.
9738@end itemize")
9739 (license license:bsd-3)))
9740
9741;;; Variant used to break a cycle between python-httpx and python-uvicorn.
9742(define-public python-httpcore-bootstrap
9743 (hidden-package
9744 (package/inherit python-httpcore
9745 (name "python-httpcore-bootstrap")
9746 (arguments (list #:tests? #f))
9747 (native-inputs (list python-hatchling
9748 python-hatch-fancy-pypi-readme)))))
9749
9750(define-public python-httpx
9751 (package
9752 (name "python-httpx")
9753 (version "0.28.1")
9754 (source
9755 (origin
9756 ;; PyPI tarball does not contain tests.
9757 (method git-fetch)
9758 (uri (git-reference
9759 (url "https://github.com/encode/httpx")
9760 (commit version)))
9761 (file-name (git-file-name name version))
9762 (sha256
9763 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
9764 (build-system pyproject-build-system)
9765 (arguments
9766 (list
9767 ;; 1401 passed, 1 skipped, 5 deselected
9768 #:test-flags
9769 #~(list "-o" "asyncio_mode=auto"
9770 ;; CLI tests are broken.
9771 "--ignore=tests/test_main.py"
9772 "-k" (string-join
9773 ;; These tests try to open an outgoing connection.
9774 (list "not test_async_proxy_close"
9775 "test_sync_proxy_clos"
9776 "test_write_timeout")
9777 " and not "))))
9778 (native-inputs
9779 (list nss-certs-for-test
9780 python-chardet
9781 python-cryptography
9782 python-hatch-fancy-pypi-readme
9783 python-hatchling
9784 python-pytest
9785 python-pytest-asyncio
9786 python-pytest-trio
9787 python-setuptools
9788 python-trio
9789 python-trustme
9790 python-uvicorn))
9791 (propagated-inputs
9792 (list python-anyio
9793 python-certifi
9794 python-httpcore
9795 python-idna
9796 ;; [brotli]
9797 python-brotli
9798 ;; [http2]
9799 python-h2
9800 ;; [socks]
9801 python-socksio
9802 ;; [zstd]
9803 python-zstandard
9804 ;; For trio, see:
9805 ;; <https://github.com/python-trio/trio/issues/2802>.
9806 python-sniffio))
9807 (home-page "https://www.python-httpx.org/")
9808 (synopsis "HTTP client for Python")
9809 (description
9810 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
9811and async APIs, and support for both HTTP/1.1 and HTTP/2.
9812
9813HTTPX builds on the well-established usability of requests, and gives you:
9814
9815@itemize
9816@item A broadly requests-compatible API.
9817@item Standard synchronous interface, but with async support if you need it.
9818@item HTTP/1.1 and HTTP/2 support.
9819@item Ability to make requests directly to WSGI applications or ASGI applications.
9820@item Strict timeouts everywhere.
9821@item Fully type annotated.
9822@item 99% test coverage.
9823@end itemize
9824
9825Plus all the standard features of requests:
9826
9827@itemize
9828@item International Domains and URLs
9829@item Keep-Alive & Connection Pooling
9830@item Sessions with Cookie Persistence
9831@item Browser-style SSL Verification
9832@item Basic/Digest Authentication
9833@item Elegant Key/Value Cookies
9834@item Automatic Decompression
9835@item Automatic Content Decoding
9836@item Unicode Response Bodies
9837@item Multipart File Uploads
9838@item HTTP(S) Proxy Support
9839@item Connection Timeouts
9840@item Streaming Downloads
9841@item .netrc Support
9842@item Chunked Requests
9843@end itemize")
9844 (license license:bsd-3)))
9845
9846;;; Variant used to break a cycle with python-uvicorn.
9847(define-public python-httpx-bootstrap
9848 (hidden-package
9849 (package/inherit python-httpx
9850 (name "python-httpx-bootstrap")
9851 (arguments (list #:tests? #f))
9852 (native-inputs
9853 (list python-hatchling
9854 python-hatch-fancy-pypi-readme))
9855 (propagated-inputs
9856 (modify-inputs (package-propagated-inputs python-httpx)
9857 (replace "python-httpcore" python-httpcore-bootstrap))))))
9858
9859(define-public python-wsgiprox
9860 (package
9861 (name "python-wsgiprox")
9862 (version "1.5.2")
9863 (source
9864 (origin
9865 (method url-fetch)
9866 (uri (pypi-uri "wsgiprox" version))
9867 (sha256
9868 (base32
9869 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
9870 (build-system python-build-system)
9871 (arguments
9872 ;; The test suite hangs (see:
9873 ;; https://github.com/webrecorder/wsgiprox/issues/6).
9874 `(#:tests? #f
9875 #:phases
9876 (modify-phases %standard-phases
9877 (add-after 'unpack 'fix-pytest-argument
9878 (lambda _
9879 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
9880 (substitute* "setup.py"
9881 (("--doctest-module")
9882 "--doctest-modules")))))))
9883 (propagated-inputs
9884 (list python-certauth python-gevent python-websocket-client))
9885 (native-inputs
9886 (list python-mock python-pytest-cov python-waitress))
9887 (home-page "https://github.com/webrecorder/wsgiprox")
9888 (synopsis "HTTP/S proxy with WebSockets over WSGI")
9889 (description "@code{wsgiprox} is a Python WSGI (Web Server Gateway
9890Interface) middle-ware for adding HTTP and HTTPS proxy support to a WSGI
9891application. The library accepts HTTP and HTTPS proxy connections, and routes
9892them to a designated prefix.")
9893 (license license:asl2.0)))
9894
9895(define-public python-warcio
9896 ;; The PyPI release is missing some test support files (see:
9897 ;; https://github.com/webrecorder/warcio/issues/132).
9898 (package
9899 (name "python-warcio")
9900 (version "1.7.5")
9901 (source
9902 (origin
9903 (method git-fetch)
9904 (uri (git-reference
9905 (url "https://github.com/webrecorder/warcio")
9906 (commit (string-append "v" version))))
9907 (file-name (git-file-name name version))
9908 (sha256
9909 (base32
9910 "0r3kijsm8wsbipi5pxsrqpg5nn4w8iaw5i8010b0ligmfxnxamlb"))))
9911 (build-system pyproject-build-system)
9912 (arguments
9913 (list
9914 #:test-flags ; These tests fail due to networking requirements.
9915 '(list "-k" (format #f "not ~a"
9916 (string-join
9917 '("test_post_chunked"
9918 "test_remote"
9919 "test_capture_http_proxy"
9920 "test_capture_https_proxy"
9921 "test_capture_https_proxy_same_session")
9922 " and not "))
9923 ; The following test requires the hookdns package.
9924 "--ignore=test/test_capture_http_proxy.py")))
9925 (native-inputs
9926 ;; These inputs are required for the test suite.
9927 (list python-httpbin
9928 python-pytest-cov
9929 python-requests
9930 python-setuptools
9931 python-wheel
9932 python-wsgiprox))
9933 (home-page "https://github.com/webrecorder/warcio")
9934 (synopsis "Streaming web archival archive (WARC) library")
9935 (description "warcio is a Python library to read and write the WARC format
9936commonly used in Web archives. It is designed for fast, low-level access to
9937web archival content, oriented around a stream of WARC records rather than
9938files.")
9939 (license license:asl2.0)))
9940
9941(define-public python-websockets
9942 (package
9943 (name "python-websockets")
9944 (version "13.1")
9945 (source
9946 (origin
9947 (method git-fetch)
9948 (uri (git-reference
9949 (url "https://github.com/aaugustin/websockets")
9950 (commit version)))
9951 (file-name (git-file-name name version))
9952 (sha256
9953 (base32
9954 "1dx3rf6fmg4ir9cfcn1fil446qz879cwrjq2rcz5zvl71xkw6hb3"))))
9955 (build-system pyproject-build-system)
9956 (arguments
9957 (list #:test-backend #~'unittest
9958 #:phases
9959 #~(modify-phases %standard-phases
9960 (add-before 'check 'extend-test-timeout
9961 (lambda _
9962 ;; Some architectures need an even longer timeout. Make it
9963 ;; long enough that it should never fail due to timeout.
9964 #$@(if (target-riscv64?)
9965 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
9966 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
9967 (native-inputs
9968 (list python-setuptools
9969 python-wheel))
9970 (home-page "https://github.com/aaugustin/websockets")
9971 (synopsis
9972 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
9973 (description
9974 "@code{websockets} is a library for building WebSocket servers and clients
9975in Python with a focus on correctness and simplicity.
9976
9977Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
9978it provides an elegant coroutine-based API.")
9979 (license license:bsd-3)))
9980
9981(define-public selenium-manager
9982 (package
9983 (name "selenium-manager")
9984 (version "4.34.2")
9985 (source
9986 (origin
9987 (method git-fetch)
9988 (uri (git-reference
9989 (url "https://github.com/SeleniumHQ/selenium")
9990 (commit (string-append "selenium-" version "-python"))))
9991 (file-name (git-file-name name version))
9992 (sha256
9993 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
9994 (build-system cargo-build-system)
9995 (arguments
9996 (list
9997 ;; XXX: Almost all tests require either browsers or network access.
9998 #:tests? #f
9999 #:install-source? #f ; Most likely intended as a leaf.
10000 #:phases
10001 #~(modify-phases %standard-phases
10002 (add-after 'unpack 'chdir
10003 (lambda _
10004 (chdir "rust"))))))
10005 (native-inputs (list pkg-config))
10006 (inputs (cons* (list zstd "lib") xz
10007 (cargo-inputs 'selenium-manager)))
10008 (home-page "https://www.selenium.dev")
10009 (synopsis "CLI tool to manager the browser test infrastructure")
10010 (description
10011 "Selenium simplifies web browser automation. It specifically provides
10012infrastructure for the W3C WebDriver specification — a platform and
10013language-neutral coding interface compatible with all major web browsers.
10014
10015Selenium Manager is a CLI tool that automatically manages the browser/driver
10016infrastructure required by Selenium.")
10017 (license license:asl2.0)))
10018
10019(define-public python-selenium
10020 (package/inherit selenium-manager
10021 (name "python-selenium")
10022 (build-system pyproject-build-system)
10023 (arguments
10024 (list
10025 ;; XXX: Disable failing tests.
10026 #:test-flags
10027 #~(list "--ignore-glob=test/selenium/webdriver/*"
10028 ;; Probably requires those.
10029 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
10030 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
10031 ;; XXX: SSL certificates access.
10032 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
10033 "-k" "not test_missing_cdp_devtools_version_falls_back")
10034 #:phases
10035 #~(modify-phases %standard-phases
10036 (add-after 'unpack 'chdir
10037 (lambda _
10038 (chdir "py")))
10039 (add-after 'chdir 'inject-selenium-manager-binary
10040 (lambda* (#:key inputs #:allow-other-keys)
10041 (substitute* "selenium/webdriver/common/selenium_manager.py"
10042 (("compiled_path = Path.*")
10043 (format #f "return Path(~s)~%"
10044 (search-input-file inputs "bin/selenium-manager"))))
10045 (substitute* "pyproject.toml"
10046 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
10047 "")
10048 (("target = \"selenium\\.webdriver\\.common.*\"")
10049 ""))))
10050 (add-after 'chdir 'relax-requirements
10051 (lambda _
10052 (substitute* "pyproject.toml"
10053 (("\"(typing_extensions|trio)~=.*\"," _ target)
10054 (format #f "~s," target))))))))
10055 (propagated-inputs (list python-certifi
10056 python-trio
10057 python-trio-websocket
10058 python-typing-extensions
10059 python-urllib3
10060 python-websocket-client))
10061 (inputs (list selenium-manager))
10062 (native-inputs (list python-filetype
10063 python-pytest
10064 python-pytest-mock
10065 python-pytest-trio
10066 python-setuptools
10067 python-setuptools-rust))
10068 (synopsis "Python bindings for Selenium")
10069 (description
10070 "Selenium enables web browser automation. It specifically provides
10071infrastructure for the W3C WebDriver specification — a platform and
10072language-neutral coding interface compatible with all major web browsers.")))
10073
10074(define-public python-rapidjson
10075 (package
10076 (name "python-rapidjson")
10077 (version "1.10")
10078 (source
10079 (origin
10080 (method url-fetch)
10081 (uri (pypi-uri "python-rapidjson" version))
10082 (sha256
10083 (base32
10084 "0h1m9m4a5rlf5hw6ak7z3qbgdhmqarzxw9d140mcf7mrxpswpzmc"))
10085 (modules '((guix build utils)))
10086 (snippet
10087 '(delete-file-recursively "rapidjson"))))
10088 (build-system pyproject-build-system)
10089 (arguments
10090 (list
10091 #:test-flags '(list "tests")
10092 #:phases
10093 #~(modify-phases %standard-phases
10094 ;; We cannot seem to use #:configure-flags with the
10095 ;; pyproject-build-system to override rj_include_dir.
10096 (add-after 'unpack 'override-rapidjson-sources
10097 (lambda _
10098 (substitute* "setup.py"
10099 (("^rj_include_dir =.*")
10100 (string-append "rj_include_dir = '"
10101 #$(this-package-native-input "rapidjson")
10102 "/include/rapidjson" "'"))
10103 (("if not os.path.isdir.*") "if False:")))))))
10104 (native-inputs
10105 (list rapidjson python-pytest python-pytz python-setuptools python-wheel))
10106 (home-page "https://github.com/python-rapidjson/python-rapidjson")
10107 (synopsis "Python wrapper around rapidjson")
10108 (description "This package provides a python wrapper around rapidjson.")
10109 (license license:expat)))
10110
10111(define-public python-venusian
10112 (package
10113 (name "python-venusian")
10114 (version "3.1.1")
10115 (source
10116 (origin
10117 (method url-fetch)
10118 (uri (pypi-uri "venusian" version))
10119 (sha256
10120 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
10121 (build-system pyproject-build-system)
10122 (arguments
10123 (list
10124 #:phases
10125 #~(modify-phases %standard-phases
10126 (add-after 'unpack 'fix-pytest-config
10127 (lambda _
10128 (substitute* "setup.cfg"
10129 (("--cov --cov-report=term-missing ") "")))))))
10130 (native-inputs
10131 (list python-pytest
10132 python-setuptools))
10133 (home-page "https://docs.pylonsproject.org/projects/venusian")
10134 (synopsis "Library for deferring decorator actions")
10135 (description
10136 "Venusian is a library which allows framework authors to defer decorator
10137actions. Instead of taking actions when a function (or class) decorator is
10138executed at import time, you can defer the action usually taken by the
10139decorator until a separate scan phase.")
10140 (license license:repoze)))
10141
10142(define-public python-zope-deprecation
10143 (package
10144 (name "python-zope-deprecation")
10145 (version "6.0")
10146 (source (origin
10147 (method url-fetch)
10148 (uri (pypi-uri "zope_deprecation" version))
10149 (sha256
10150 (base32
10151 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
10152 (build-system pyproject-build-system)
10153 (arguments
10154 (list #:tests? #f)) ;no tests in PyPI
10155 (native-inputs
10156 (list python-setuptools))
10157 (home-page "https://zopedeprecation.readthedocs.io/")
10158 (synopsis "Function for marking deprecations")
10159 (description "The @code{zope.deprecation} module provides a function for
10160marking modules, classes, functions, methods and properties as deprecated,
10161displaying warnings when usaged in application code.")
10162 (license license:zpl2.1)))
10163
10164(define-public python-translationstring
10165 (package
10166 (name "python-translationstring")
10167 (version "1.4")
10168 (source (origin
10169 (method url-fetch)
10170 (uri (pypi-uri "translationstring" version))
10171 (sha256
10172 (base32
10173 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
10174 (build-system pyproject-build-system)
10175 (native-inputs
10176 (list python-pytest
10177 python-setuptools))
10178 (home-page "https://docs.pylonsproject.org/projects/translationstring")
10179 (synopsis "Internationalization tooling for the Pylons project")
10180 (description "This package provides a library used by various Pylons
10181project packages for internationalization (i18n) duties related to
10182translation.")
10183 (license license:repoze)))
10184
10185(define-public python-plaster
10186 (package
10187 (name "python-plaster")
10188 (version "1.1.2")
10189 (source (origin
10190 (method url-fetch)
10191 (uri (pypi-uri "plaster" version))
10192 (sha256
10193 (base32
10194 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
10195 (build-system pyproject-build-system)
10196 (native-inputs
10197 (list python-pytest
10198 python-setuptools))
10199 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
10200 (synopsis "Configuration loader for multiple config file formats")
10201 (description
10202 "Plaster is a loader interface around multiple config file formats. It
10203exists to define a common API for applications to use when they wish to load
10204configuration. The library itself does not aim to handle anything except a
10205basic API that applications may use to find and load configuration settings.
10206Any specific constraints should be implemented in a pluggable loader which can
10207be registered via an entrypoint.")
10208 (license license:repoze)))
10209
10210(define-public python-plaster-pastedeploy
10211 (package
10212 (name "python-plaster-pastedeploy")
10213 (version "1.0.1")
10214 (source (origin
10215 (method url-fetch)
10216 (uri (pypi-uri "plaster_pastedeploy" version))
10217 (sha256
10218 (base32
10219 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
10220 (build-system pyproject-build-system)
10221 (native-inputs
10222 (list python-pytest
10223 python-setuptools))
10224 (propagated-inputs
10225 (list python-plaster python-pastedeploy))
10226 (home-page "https://github.com/Pylons/plaster_pastedeploy")
10227 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
10228 (description
10229 "This plugin for @code{python-plaster} adds support for PasteDeploy
10230syntax, it provides a plaster @code{Loader} object that can parse ini files
10231according to the standard set by PasteDeploy")
10232 (license license:expat)))
10233
10234(define-public python-hupper
10235 (package
10236 (name "python-hupper")
10237 (version "1.12.1")
10238 (source
10239 (origin
10240 (method url-fetch)
10241 (uri (pypi-uri "hupper" version))
10242 (sha256
10243 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
10244 (build-system pyproject-build-system)
10245 (arguments
10246 (list
10247 ;; RuntimeError: timeout waiting for change to
10248 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
10249 #:test-flags #~(list "--ignore=tests/test_it.py")))
10250 (native-inputs
10251 (list python-pytest
10252 python-pytest-cov
10253 python-setuptools
10254 python-wheel))
10255 (propagated-inputs
10256 (list python-watchdog))
10257 (home-page "https://readthedocs.org/projects/hupper")
10258 (synopsis "Integrated process monitor tracking changes to imported Python files")
10259 (description
10260 "Hupper is an integrated process monitor that will track changes to any
10261imported Python files in sys.modules as well as custom paths. When files are
10262changed the process is restarted.")
10263 (license license:expat)))
10264
10265(define-public python-pyowm
10266 (package
10267 (name "python-pyowm")
10268 (version "3.3.0")
10269 (source
10270 (origin
10271 (method git-fetch)
10272 (uri (git-reference
10273 (url "https://github.com/csparpa/pyowm")
10274 (commit version)))
10275 (file-name (git-file-name name version))
10276 (sha256
10277 (base32
10278 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
10279 (build-system pyproject-build-system)
10280 (arguments (list #:test-flags #~(list "tests/unit")))
10281 (native-inputs (list python-pytest python-setuptools python-wheel))
10282 (propagated-inputs
10283 (list python-geojson-for-pyowm
10284 python-pysocks
10285 python-requests))
10286 (home-page "https://github.com/csparpa/pyowm")
10287 (synopsis "Python wrapper around OpenWeatherMap web APIs")
10288 (description
10289 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
10290 (license license:expat)))
10291
10292(define-public python-pyramid
10293 (package
10294 (name "python-pyramid")
10295 (version "2.0.2")
10296 (source (origin
10297 (method url-fetch)
10298 (uri (pypi-uri "pyramid" version))
10299 (sha256
10300 (base32
10301 "1phqdz068hl3zda263qkjp5am8fmvmpcxp3nrhsna8g472kkh89p"))))
10302 (build-system pyproject-build-system)
10303 (propagated-inputs
10304 (list python-hupper
10305 python-plaster
10306 python-plaster-pastedeploy
10307 python-setuptools
10308 python-translationstring
10309 python-venusian
10310 python-webob
10311 python-zope-component
10312 python-zope-deprecation
10313 python-zope-interface))
10314 (native-inputs (list python-pytest python-webtest python-wheel))
10315 (home-page "https://trypyramid.com/")
10316 (synopsis "Python web-framework suitable for small and large sites")
10317 (description
10318 "Pyramid makes it easy to write web applications. From minimal
10319request/response web apps to larger, grown applications.")
10320 (license license:repoze)))
10321
10322(define-public python-pyramid-chameleon
10323 ;; PyPI lacks a fresh release, use the latest commit assosiated with
10324 ;; unrleased version, see:
10325 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
10326 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
10327 (revision "0"))
10328 (package
10329 (name "python-pyramid-chameleon")
10330 (version (git-version "0.4.dev0" revision commit))
10331 (source
10332 (origin
10333 (method git-fetch)
10334 (uri (git-reference
10335 (url "https://github.com/Pylons/pyramid_chameleon")
10336 (commit commit)))
10337 (file-name (git-file-name name version))
10338 (sha256
10339 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
10340 (build-system pyproject-build-system)
10341 (native-inputs
10342 (list python-pytest
10343 python-setuptools))
10344 (propagated-inputs
10345 (list python-chameleon
10346 python-pyramid))
10347 (home-page "https://github.com/Pylons/pyramid_chameleon")
10348 (synopsis "Chameleon template compiler for pyramid")
10349 (description
10350 "These package provides bindings for the Chameleon templating system
10351 for the Pyramid web framework.")
10352 (license license:repoze))))
10353
10354(define-public python-pyramid-debugtoolbar
10355 (package
10356 (name "python-pyramid-debugtoolbar")
10357 (version "4.12.1")
10358 (source
10359 (origin
10360 (method url-fetch)
10361 (uri (pypi-uri "pyramid_debugtoolbar" version))
10362 (sha256
10363 (base32 "0gdlc7vcga4vzma53h5csnhh4gwfmv3w8v9y5fhwqpy8979qis3i"))))
10364 (build-system pyproject-build-system)
10365 (arguments
10366 (list
10367 #:test-flags
10368 ;; Large diff assertion not equal faileurs.
10369 #~(list #$@(map (lambda (test)
10370 (string-append "--deselect=tests"
10371 "/test_panels/test_sqla.py::" test))
10372 (list "TestSimpleSelect::test_panel"
10373 "TestTransactionCommit::test_panel"
10374 "TestTransactionRollback::test_panel")))))
10375 (native-inputs
10376 (list python-pytest
10377 python-setuptools
10378 python-webtest))
10379 (propagated-inputs
10380 (list python-pyramid
10381 python-pyramid-chameleon
10382 python-pyramid-jinja2
10383 python-pyramid-mako
10384 ;; python-selenium ; see: guix/guix#3478
10385 python-sqlalchemy
10386 python-waitress))
10387 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
10388 (synopsis "Pyramid debug toolbar")
10389 (description
10390 "This package provides an interactive HTML debugger for Pyramid application
10391development.")
10392 (license license:bsd-3)))
10393
10394(define-public python-pyramid-jinja2
10395 (package
10396 (name "python-pyramid-jinja2")
10397 (version "2.10.1")
10398 (source
10399 (origin
10400 (method url-fetch)
10401 (uri (pypi-uri "pyramid_jinja2" version))
10402 (sha256
10403 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
10404 (build-system pyproject-build-system)
10405 (arguments
10406 (list
10407 #:test-flags
10408 ;; Two tests failed with assertion not equal.
10409 #~(list "-k" "not test_it_relative_to_package and not test_options")
10410 #:phases
10411 #~(modify-phases %standard-phases
10412 (add-after 'unpack 'fix-pytest-config
10413 (lambda _
10414 (substitute* "setup.cfg"
10415 ((" --cov") "")))))))
10416 (native-inputs
10417 (list python-pytest
10418 python-setuptools
10419 python-webtest))
10420 (propagated-inputs
10421 (list python-jinja2
10422 python-markupsafe
10423 python-pyramid
10424 python-zope-deprecation))
10425 (home-page "https://github.com/Pylons/pyramid_jinja2")
10426 (synopsis "Jinja2 template bindings for the Pyramid web framework")
10427 (description "This package provides Jinja2 template bindings for the
10428Pyramid web framework.")
10429 (license license:repoze)))
10430
10431(define-public python-pyramid-mako
10432 ;; 1.1.0 was released in 2019, there a lot of compatability changes on
10433 ;; master, us the latest commit for now.
10434 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
10435 (revision "0"))
10436 (package
10437 (name "python-pyramid-mako")
10438 (version (git-version "1.1.0" revision commit))
10439 (source
10440 (origin
10441 (method git-fetch)
10442 (uri (git-reference
10443 (url "https://github.com/Pylons/pyramid_mako")
10444 (commit commit)))
10445 (file-name (git-file-name name version))
10446 (sha256
10447 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
10448 (build-system pyproject-build-system)
10449 (arguments
10450 (list
10451 #:phases
10452 #~(modify-phases %standard-phases
10453 (add-after 'unpack 'fix-pytest-config
10454 (lambda _
10455 (substitute* "pyproject.toml"
10456 ((" --cov --cov-report=term-missing") "")))))))
10457 (native-inputs
10458 (list python-pytest
10459 python-setuptools))
10460 (propagated-inputs
10461 (list python-mako
10462 python-pyramid))
10463 (home-page "https://github.com/Pylons/pyramid_mako")
10464 (synopsis "Mako template bindings for the Pyramid web framework")
10465 (description
10466 "This package provides Mako template bindings for the Pyramid web
10467framework.")
10468 (license license:repoze))))
10469
10470(define-public python-pyramid-retry
10471 (package
10472 (name "python-pyramid-retry")
10473 (version "2.1.1")
10474 (source
10475 (origin
10476 (method url-fetch)
10477 (uri (pypi-uri "pyramid_retry" version))
10478 (sha256
10479 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
10480 (build-system pyproject-build-system)
10481 (native-inputs
10482 (list python-pytest
10483 python-setuptools
10484 python-webtest))
10485 (propagated-inputs
10486 (list python-pyramid
10487 python-zope-interface))
10488 (home-page "https://github.com/Pylons/pyramid_retry")
10489 (synopsis "Pyramid execution policy supporting retrying failed requests")
10490 (description
10491 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
10492and can retry them a configurable number of times under certain \"retryable\"
10493error conditions before indicating a failure to the client.")
10494 (license license:expat)))
10495
10496(define-public python-pyramid-tm
10497 (package
10498 (name "python-pyramid-tm")
10499 (version "2.6")
10500 (source
10501 (origin
10502 (method url-fetch)
10503 (uri (pypi-uri "pyramid_tm" version))
10504 (sha256
10505 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
10506 (build-system pyproject-build-system)
10507 (arguments
10508 (list
10509 #:phases
10510 #~(modify-phases %standard-phases
10511 (add-after 'unpack 'fix-pytest-config
10512 (lambda _
10513 (substitute* "setup.cfg"
10514 ((" --cov") "")))))))
10515 (native-inputs
10516 (list python-pytest
10517 python-setuptools
10518 python-webtest))
10519 (propagated-inputs
10520 (list python-pyramid
10521 python-transaction))
10522 (home-page "https://github.com/Pylons/pyramid_tm")
10523 (synopsis "Centralized transaction management for Pyramid")
10524 (description
10525 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
10526active @url{https://pypi.org/project/transaction/, transaction} as provided by
10527the Python transaction package.")
10528 (license license:repoze)))
10529
10530(define-public python-random-user-agent
10531 (package
10532 (name "python-random-user-agent")
10533 (version "1.0.1")
10534 (source
10535 (origin
10536 (method url-fetch)
10537 (uri (pypi-uri "random_user_agent" version))
10538 (sha256
10539 (base32
10540 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
10541 (build-system python-build-system)
10542 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
10543 (synopsis "List of user agents")
10544 (description
10545 "This package provides a list of user agents, from a collection of more
10546than 326,000 known user-agents. Users can pick a random one, or select one
10547based on filters.")
10548 (license license:expat)))
10549
10550(define-public python-rangehttpserver
10551 (package
10552 (name "python-rangehttpserver")
10553 (version "1.4.0")
10554 (source
10555 (origin
10556 (method git-fetch)
10557 (uri (git-reference
10558 (url "https://github.com/danvk/RangeHTTPServer")
10559 (commit version)))
10560 (file-name (git-file-name name version))
10561 (sha256
10562 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
10563 (build-system pyproject-build-system)
10564 (native-inputs
10565 (list python-pytest
10566 python-requests
10567 python-setuptools))
10568 (home-page "https://github.com/danvk/RangeHTTPServer")
10569 (synopsis "SimpleHTTPServer with support for range requests")
10570 (description
10571 "This tool provides a simple HTTP server with support for Range
10572requests.")
10573 (license license:asl2.0)))
10574
10575(define-public python-flask-restx
10576 (package
10577 (name "python-flask-restx")
10578 (version "1.3.0")
10579 (source
10580 (origin
10581 (method git-fetch) ;no tests in PyPI archive
10582 (uri (git-reference
10583 (url "https://github.com/python-restx/flask-restx")
10584 (commit version)))
10585 (file-name (git-file-name name version))
10586 (sha256
10587 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
10588 (build-system pyproject-build-system)
10589 (arguments
10590 (list
10591 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
10592 #:test-flags
10593 #~(list "--benchmark-skip"
10594 ;; ValueError: http://www.google.com is not a valid URL. Domain
10595 ;; does not exists.
10596 "--deselect=tests/test_inputs.py::URLTest::test_check"
10597 "-k" (string-join
10598 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
10599 (list "not test_rfc822_value"
10600 "test_iso8601_value"
10601 ;; assert 404 == 2000
10602 "test_specs_endpoint_host_and_subdomain"
10603 ;; ValueError: [email protected] is not a valid email
10604 "test_valid_value_check")
10605 " and not "))))
10606 (native-inputs
10607 (list python-blinker
10608 python-faker
10609 python-pytest
10610 python-pytest-benchmark
10611 python-pytest-flask
10612 python-pytest-mock
10613 python-setuptools))
10614 (propagated-inputs
10615 (list python-aniso8601
10616 python-flask
10617 python-importlib-resources
10618 python-jsonschema
10619 python-pytz
10620 python-werkzeug))
10621 (home-page "https://github.com/python-restx/flask-restx")
10622 (synopsis
10623 "Framework for fast, easy and documented API development with Flask")
10624 (description
10625 "Flask-RESTX is an extension for Flask that adds support for quickly building
10626REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
10627 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
10628decorators and tools to describe your API and expose its documentation properly using
10629Swagger.")
10630 (license license:bsd-3)))
10631
10632(define-deprecated-package python-flask-restplus
10633 python-flask-restx)
10634
10635(define-public python-flask-socketio
10636 (package
10637 (name "python-flask-socketio")
10638 (version "5.5.1")
10639 (source
10640 (origin
10641 (method url-fetch)
10642 (uri (pypi-uri "flask_socketio" version))
10643 (sha256
10644 (base32
10645 "1i0yqn39b4v4r2whppx47sg7iicvqzssd1clx7cclk07l52cjinr"))))
10646 (build-system pyproject-build-system)
10647 (propagated-inputs
10648 (list python-flask python-socketio))
10649 (native-inputs
10650 (list python-pytest python-redis python-setuptools python-wheel))
10651 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
10652 (synopsis "Socket.IO integration for Flask applications")
10653 (description "Socket.IO integration for Flask applications")
10654 (license license:expat)))
10655
10656(define-public python-manuel
10657 (package
10658 (name "python-manuel")
10659 (version "1.13.0")
10660 (source
10661 (origin
10662 (method url-fetch)
10663 (uri (pypi-uri "manuel" version))
10664 (sha256
10665 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
10666 (build-system pyproject-build-system)
10667 (arguments
10668 (list
10669 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
10670 #:tests? #f))
10671 (propagated-inputs
10672 (list python-setuptools)) ;install requires
10673 (home-page "https://pypi.org/project/manuel/")
10674 (synopsis "Build tested documentation")
10675 (description
10676 "Manuel lets you mix and match traditional doctests with custom test syntax.")
10677 (license license:asl2.0)))
10678
10679(define-public python-pecan
10680 (package
10681 (name "python-pecan")
10682 (version "1.6.1")
10683 (source
10684 (origin
10685 (method git-fetch) ;no tests in pypi release
10686 (uri (git-reference
10687 (url "https://github.com/pecan/pecan")
10688 (commit version)))
10689 (file-name (git-file-name name version))
10690 (sha256
10691 (base32
10692 "1ybjvpws741bvxd7aq5hh8gv5sk9836hb9afgalqsm0lxsq0li3a"))))
10693 (build-system pyproject-build-system)
10694 (arguments
10695 (list
10696 #:test-flags '(list "--pyargs" "pecan")))
10697 (native-inputs
10698 (list gunicorn
10699 python-genshi
10700 python-jinja2
10701 python-pytest
10702 python-sqlalchemy))
10703 (propagated-inputs
10704 (list python-logutils
10705 python-mako
10706 python-six
10707 python-webob
10708 python-webtest))
10709 (home-page "http://github.com/pecan/pecan")
10710 (synopsis "WSGI object-dispatching web framework")
10711 (description "This package provides a WSGI object-dispatching web
10712framework, designed to be lean and fast, with few dependencies.")
10713 (license license:bsd-3)))
10714
10715(define-public python-persistent
10716 (package
10717 (name "python-persistent")
10718 (version "6.1.1")
10719 (source
10720 (origin
10721 (method git-fetch)
10722 (uri (git-reference
10723 (url "https://github.com/zopefoundation/persistent/")
10724 (commit version)))
10725 (file-name (git-file-name name version))
10726 (sha256
10727 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
10728 (build-system pyproject-build-system)
10729 (arguments
10730 (list
10731 #:phases
10732 #~(modify-phases %standard-phases
10733 (replace 'check
10734 (lambda* (#:key tests? #:allow-other-keys)
10735 (if tests?
10736 (invoke "zope-testrunner" "--test-path=src"
10737 ;; XXX: Ignore doc tests.
10738 "!persistent.tests.test_docs")
10739 (format #t "test suite not run~%")))))))
10740 (propagated-inputs
10741 (list python-cffi
10742 python-zope-deferredimport
10743 python-zope-interface
10744 python-zope-testrunner))
10745 (native-inputs
10746 (list python-manuel python-zope-testrunner python-setuptools))
10747 (home-page "https://github.com/zopefoundation/persistent/")
10748 (synopsis "Translucent persistent objects")
10749 (description
10750 "This package contains a generic persistence implementation for Python.
10751It forms the core protocol for making objects interact \"transparently\" with
10752a database such as the ZODB.")
10753 (license license:zpl2.1)))
10754
10755(define-public python-btrees
10756 (package
10757 (name "python-btrees")
10758 (version "6.1")
10759 (source
10760 (origin
10761 (method git-fetch)
10762 (uri (git-reference
10763 (url "https://github.com/zopefoundation/BTrees")
10764 (commit version)))
10765 (file-name (git-file-name name version))
10766 (sha256
10767 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
10768 (build-system pyproject-build-system)
10769 (arguments
10770 (list
10771 #:phases
10772 #~(modify-phases %standard-phases
10773 (replace 'check
10774 (lambda* (#:key tests? #:allow-other-keys)
10775 (if tests?
10776 (invoke "zope-testrunner" "--test-path=src")
10777 (format #t "test suite not run~%")))))))
10778 (propagated-inputs (list python-persistent python-zope-interface))
10779 (native-inputs (list python-persistent python-transaction
10780 python-zope-testrunner python-setuptools))
10781 (home-page "https://github.com/zopefoundation/BTrees")
10782 (synopsis "Scalable persistent object containers")
10783 (description
10784 "This package contains a set of persistent object containers built around a
10785modified BTree data structure. The trees are optimized for use inside ZODB's
10786\"optimistic concurrency\" paradigm, and include explicit resolution of
10787conflicts detected by that mechanism.")
10788 (license license:zpl2.1)))
10789
10790(define-public python-transaction
10791 (package
10792 (name "python-transaction")
10793 (version "5.0")
10794 (source
10795 (origin
10796 (method url-fetch)
10797 (uri (pypi-uri "transaction" version))
10798 (sha256
10799 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
10800 (build-system pyproject-build-system)
10801 (native-inputs
10802 (list python-pytest
10803 python-setuptools))
10804 (propagated-inputs
10805 (list python-zope-interface))
10806 (home-page "https://github.com/zopefoundation/transaction")
10807 (synopsis "Transaction management for Python")
10808 (description "This package contains a generic transaction implementation
10809for Python. It is mainly used by the ZODB.")
10810 (license license:zpl2.1)))
10811
10812(define-public python-truststore
10813 (package
10814 (name "python-truststore")
10815 (version "0.10.4")
10816 (source
10817 (origin
10818 (method url-fetch)
10819 (uri (pypi-uri "truststore" version))
10820 (sha256
10821 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
10822 (build-system pyproject-build-system)
10823 (arguments
10824 (list #:tests? #f)) ;all tests require Internet access
10825 (native-inputs
10826 (list python-flit-core))
10827 (home-page "https://github.com/sethmlarson/truststore")
10828 (synopsis "Verify certificates using native system trust stores")
10829 (description
10830 "Truststore is a library which exposes native system certificate stores (ie
10831\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
10832Python applications no longer need to rely on certifi as a root certificate
10833store.")
10834 (license license:expat)))
10835
10836(define-public python-robot-detection
10837 (package
10838 (name "python-robot-detection")
10839 (version "0.4")
10840 (source
10841 (origin
10842 (method url-fetch)
10843 (uri (pypi-uri "robot-detection" version))
10844 (sha256
10845 (base32
10846 "1xd2jm3yn31bnk1kqzggils2rxj26ylxsfz3ap7bhr3ilhnbg3rx"))))
10847 (build-system python-build-system)
10848 (arguments '(#:tests? #f)) ; Tests not shipped in pypi release.
10849 (propagated-inputs (list python-six))
10850 (home-page "https://github.com/rory/robot-detection")
10851 (synopsis "Detect web crawlers")
10852 (description
10853 "@code{robot_detection} is a python module to detect if a given HTTP User
10854Agent is a web crawler. It uses the list of registered robots from
10855@url{http://www.robotstxt.org}.")
10856 (license license:gpl3+)))
10857
10858(define-public python-robotframework-requests
10859 (package
10860 (name "python-robotframework-requests")
10861 (version "0.9.7")
10862 (source
10863 (origin
10864 (method git-fetch) ; no tests in PyPI release
10865 (uri (git-reference
10866 (url "https://github.com/MarketSquare/robotframework-requests")
10867 (commit (string-append "v" version))))
10868 (file-name (git-file-name name version))
10869 (sha256
10870 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
10871 (build-system pyproject-build-system)
10872 (native-inputs
10873 (list python-pytest
10874 python-setuptools
10875 python-wheel))
10876 (propagated-inputs
10877 (list python-requests
10878 python-robotframework))
10879 (home-page "https://github.com/MarketSquare/robotframework-requests")
10880 (synopsis "Robot Framework keyword library wrapper around requests")
10881 (description
10882 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
10883Framework} library aimed to provide HTTP API testing functionalities by
10884wrapping the @code{requests} Python library.")
10885 (license license:expat)))
10886
10887(define-public python-pysolr
10888 (package
10889 (name "python-pysolr")
10890 (version "3.10.0")
10891 (source
10892 (origin
10893 (method url-fetch)
10894 (uri (pypi-uri "pysolr" version))
10895 (sha256
10896 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
10897 (build-system pyproject-build-system)
10898 (arguments
10899 '(#:tests? #f)) ; Tests require network access.
10900 (native-inputs
10901 (list python-setuptools
10902 python-setuptools-scm
10903 python-wheel))
10904 (propagated-inputs
10905 (list python-requests))
10906 (home-page "https://github.com/django-haystack/pysolr/")
10907 (synopsis "Lightweight python wrapper for Apache Solr")
10908 (description
10909 "This module provides an interface that queries the Apache Solr server
10910using a pure Python implementation.")
10911 (license license:bsd-3)))
10912
10913(define-public python-pyjsparser
10914 ;; XXX: This project is potentially abandonware, consider to remove in next
10915 ;; refresh cycle, see:
10916 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
10917 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
10918 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
10919 (package
10920 (name "python-pyjsparser")
10921 (version "2.7.1")
10922 (source
10923 (origin
10924 (method url-fetch)
10925 (uri (pypi-uri "pyjsparser" version))
10926 (sha256
10927 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
10928 (build-system pyproject-build-system)
10929 (arguments
10930 '(#:tests? #f)) ;no tests in PyPI
10931 (native-inputs (list python-setuptools))
10932 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
10933 (synopsis "Fast JavaScript parser")
10934 (description
10935 "This package provides a fast JavaScript parser (based on esprima.js)")
10936 (license license:expat)))
10937
10938(define-public python-js2py
10939 (package
10940 (name "python-js2py")
10941 (version "0.74")
10942 (source
10943 (origin
10944 (method url-fetch)
10945 (uri (pypi-uri "Js2Py" version))
10946 (sha256
10947 (base32 "0bwpp23qpx9amzqisiqvzlr17hr7vxqp4ry8lgxhw639hjmadwrr"))))
10948 (build-system pyproject-build-system)
10949 (arguments
10950 (list #:tests? #f)) ; tests require Node
10951 (native-inputs
10952 (list python-setuptools))
10953 (propagated-inputs
10954 (list python-pyjsparser
10955 python-six
10956 python-tzlocal))
10957 (home-page "https://github.com/PiotrDabkowski/Js2Py")
10958 (synopsis "JavaScript to Python translator")
10959 (description
10960 "This package provides a JavaScript to Python translator and a JavaScript
10961interpreter written in pure Python.")
10962 (license license:expat)))
10963
10964(define-public python-http-ece
10965 (package
10966 (name "python-http-ece")
10967 (version "1.2.1")
10968 (source
10969 (origin
10970 (method git-fetch)
10971 (uri (git-reference
10972 (url "https://github.com/web-push-libs/encrypted-content-encoding")
10973 (commit (string-append "v" version))))
10974 (file-name (git-file-name name version))
10975 (sha256
10976 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
10977 (build-system pyproject-build-system)
10978 (arguments
10979 `(#:phases
10980 (modify-phases %standard-phases
10981 (add-after 'unpack 'change-directory
10982 (lambda _ (chdir "python") #t)))))
10983 (native-inputs
10984 (list python-pytest
10985 python-pytest-cov
10986 python-setuptools))
10987 (propagated-inputs
10988 (list python-cryptography))
10989 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
10990 (synopsis "Encrypted Content Encoding for HTTP")
10991 (description
10992 "This package provides a simple implementation of Encrypted Content
10993Encoding for HTTP.")
10994 (license license:expat)))
10995
10996(define-public python-cloud-init
10997 (package
10998 (name "python-cloud-init")
10999 (version "24.2")
11000 (source
11001 (origin
11002 (method git-fetch)
11003 (uri (git-reference
11004 (url "https://github.com/canonical/cloud-init")
11005 (commit version)))
11006 (file-name (git-file-name name version))
11007 (sha256
11008 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
11009 (build-system pyproject-build-system)
11010 (arguments
11011 (list
11012 #:test-flags
11013 '(list
11014 ;; This requires usermod
11015 "--ignore=tests/unittests/distros/test_create_users.py"
11016 ;; This writes to /var
11017 "--ignore=tests/unittests/net/test_dhcp.py"
11018 "-k"
11019 (string-append
11020 ;; This test messes with PATH, so it cannot find mkdir
11021 "not test_path_env_gets_set_from_main"
11022 " and not test_apt_configure_sources_list_"
11023 ;; These all fail because /bin/sh doesn't exist. We cannot patch
11024 ;; this because the generated scripts must use /bin/sh as they are
11025 ;; supposed to be run on minimal systems.
11026 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
11027 " and not test_handler_runs_bootcmd_script_with_error"
11028 " and not test_subp_combined_stderr_stdout"
11029 " and not test_handle_part"))
11030 #:phases
11031 #~(modify-phases %standard-phases
11032 (add-after 'unpack 'patch-references
11033 (lambda _
11034 (substitute* "tests/unittests/cmd/test_clean.py"
11035 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
11036 (add-after 'install 'move-files
11037 (lambda* (#:key inputs outputs #:allow-other-keys)
11038 (for-each (lambda (dir)
11039 (let ((source (string-append (site-packages inputs outputs) "/" dir))
11040 (target (string-append #$output "/" (basename dir))))
11041 (copy-recursively source target)
11042 (delete-file-recursively source)))
11043 (list "etc" "lib" "usr/lib" "usr/share")))))))
11044 (propagated-inputs
11045 (list python-configobj
11046 python-jinja2
11047 python-jsonpatch
11048 python-jsonschema
11049 python-netifaces
11050 python-oauthlib
11051 python-pyserial
11052 python-pyyaml
11053 python-responses))
11054 (native-inputs
11055 (list procps ;for ps when running tests
11056 python-pytest
11057 python-pytest-cov
11058 python-pytest-mock
11059 python-passlib
11060 python-setuptools
11061 python-wheel))
11062 (home-page "https://github.com/canonical/cloud-init")
11063 (synopsis "Cloud instance initialization tools")
11064 (description
11065 "Cloud-init is the multi-distribution method for cross-platform cloud
11066instance initialization. It is supported across all major public cloud
11067providers, provisioning systems for private cloud infrastructure, and
11068bare-metal installations.")
11069 ;; Either license can be chosen
11070 (license (list license:asl2.0 license:gpl3))))
11071
11072(define-public python-cloudscraper
11073 (package
11074 (name "python-cloudscraper")
11075 (version "1.2.60")
11076 (source
11077 (origin
11078 (method git-fetch)
11079 (uri (git-reference
11080 (url "https://github.com/VeNoMouS/cloudscraper")
11081 (commit version)))
11082 (file-name (git-file-name name version))
11083 (sha256
11084 (base32 "00cmxgwdm0x1j4a4ipwvpzih735hdzidljbijk1b3laj3dgvnvsm"))
11085 (modules '((guix build utils)))
11086 (snippet
11087 '(with-directory-excursion "cloudscraper"
11088 (for-each delete-file
11089 '("captcha/9kw.py"
11090 "captcha/anticaptcha.py"))
11091 (substitute* "__init__.py"
11092 ;; Perhaps it's a joke, but don't promote proprietary software.
11093 (("([Th]is feature is not available) in the .*'" _ prefix)
11094 (string-append prefix ".'")))))))
11095 (build-system python-build-system)
11096 (arguments
11097 `(#:phases
11098 (modify-phases %standard-phases
11099 ;; XXX: Dependencies, that have not yet been packaged
11100 ;; and cause an import error when included.
11101 (add-after 'unpack 'drop-unsupported-sources
11102 (lambda _
11103 (with-directory-excursion "cloudscraper"
11104 (for-each delete-file
11105 '("interpreters/v8.py")))))
11106 (add-after 'unpack 'fix-references
11107 (lambda _
11108 (substitute* "cloudscraper/interpreters/nodejs.py"
11109 (("'node'")
11110 (string-append "'" (which "node") "'")))))
11111 (replace 'check
11112 (lambda* (#:key tests? #:allow-other-keys)
11113 (when tests?
11114 (invoke "pytest" "-vv"
11115 "-k" "not test_getCookieString_challenge_js_challenge1_16_05_2020")))))))
11116 (inputs
11117 (list node-lts))
11118 (propagated-inputs
11119 (list python-js2py
11120 python-polling2
11121 python-requests
11122 python-requests-toolbelt
11123 python-responses
11124 python-pyparsing))
11125 (native-inputs
11126 (list python-pytest))
11127 (home-page "https://github.com/venomous/cloudscraper")
11128 (synopsis "Cloudflare anti-bot bypass")
11129 (description
11130 "This module acts as a webbrowser solving Cloudflare's Javascript
11131challenges.")
11132 (license license:expat)))
11133
11134(define-public python-imap-tools
11135 (package
11136 (name "python-imap-tools")
11137 (version "1.9.0")
11138 (source
11139 (origin
11140 (method git-fetch) ; no tests in PyPI release
11141 (uri (git-reference
11142 (url "https://github.com/ikvk/imap_tools")
11143 (commit (string-append "v" version))))
11144 (file-name (git-file-name name version))
11145 (sha256
11146 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
11147 (arguments
11148 (list
11149 #:test-flags
11150 ;; Tests require a network connection
11151 #~(list "-k" (string-append "not test_action"
11152 " and not test_attributes"
11153 " and not test_connection"
11154 " and not test_folders"
11155 " and not test_idle"
11156 " and not test_live"))))
11157 (build-system pyproject-build-system)
11158 (native-inputs
11159 (list python-pytest python-setuptools python-wheel))
11160 (home-page "https://github.com/ikvk/imap_tools")
11161 (synopsis "Work with email and mailbox by IMAP")
11162 (description
11163 "This Python library provides tools to deal with email and mailboxes
11164over IMAP:
11165
11166@itemize
11167@item Parsed email message attributes
11168@item Query builder for searching emails
11169@item Work with emails in folders (copy, delete, flag, move, seen)
11170@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
11171@end itemize")
11172 (license license:asl2.0)))
11173
11174(define-public python-giturlparse
11175 (package
11176 (name "python-giturlparse")
11177 (version "0.12.0")
11178 (source
11179 (origin
11180 (method git-fetch)
11181 (uri (git-reference
11182 (url "https://github.com/nephila/giturlparse")
11183 (commit version)))
11184 (file-name (git-file-name name version))
11185 (sha256
11186 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
11187 (build-system pyproject-build-system)
11188 (native-inputs (list python-pytest python-setuptools))
11189 (home-page "https://github.com/nephila/giturlparse")
11190 (synopsis "Git URL parsing module")
11191 (description
11192 "This package provides a git URL parsing module which supports parsing
11193and rewriting of remote git URLs from various hosting providers.")
11194 (license license:asl2.0)))
11195
11196(define-public python-hstspreload
11197 (package
11198 (name "python-hstspreload")
11199 (version "2025.1.1")
11200 (source
11201 (origin
11202 (method git-fetch)
11203 (uri (git-reference
11204 (url "https://github.com/sethmlarson/hstspreload")
11205 (commit version)))
11206 (file-name (git-file-name name version))
11207 (sha256
11208 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
11209 (build-system pyproject-build-system)
11210 (arguments (list #:tests? #f)) ; tests require external resources.
11211 (native-inputs (list python-setuptools))
11212 (home-page "https://github.com/sethmlarson/hstspreload")
11213 (synopsis "Chromium HSTS Preload list as a Python package")
11214 (description
11215 "@code{python-hstspreload} contains Chromium HSTS Preload list
11216as a Python package.")
11217 (license license:bsd-3)))
11218
11219(define-public python-sanic-routing
11220 (package
11221 (name "python-sanic-routing")
11222 (version "23.12.0")
11223 (source
11224 (origin
11225 (method url-fetch)
11226 (uri (pypi-uri "sanic-routing" version))
11227 (sha256
11228 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
11229 (build-system pyproject-build-system)
11230 (arguments
11231 ;; PyPi sources does not contain tests, recursive dependency on
11232 ;; python-sanic.
11233 (list #:tests? #f))
11234 (native-inputs (list python-setuptools python-wheel))
11235 (home-page "https://github.com/sanic-org/sanic-routing/")
11236 (synopsis "Routing component for Sanic")
11237 (description "Internal package for @code{python-sanic}, which provides
11238the @code{BasicRouter}.")
11239 (license license:expat)))
11240
11241(define-public python-sanic-testing
11242 (package
11243 (name "python-sanic-testing")
11244 (version "23.12.0")
11245 (source
11246 (origin
11247 (method url-fetch)
11248 (uri (pypi-uri "sanic-testing" version))
11249 (sha256
11250 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
11251 (build-system pyproject-build-system)
11252 (arguments
11253 ;; PyPi sources does not contain tests, recursive dependency on
11254 ;; python-sanic.
11255 (list #:tests? #f))
11256 (propagated-inputs (list python-httpx python-sanic-bootstrap))
11257 (native-inputs (list python-setuptools python-wheel))
11258 (home-page "https://github.com/sanic-org/sanic-testing/")
11259 (synopsis "Test clients for Sanic")
11260 (description "Internal package for @code{python-sanic}, which is
11261meant to be the core testing utility and clients for testing Sanic
11262applications.")
11263 (license license:expat)))
11264
11265(define-public python-sanic
11266 (package
11267 (name "python-sanic")
11268 (version "25.3.0")
11269 (source
11270 (origin
11271 (method url-fetch)
11272 (uri (pypi-uri "sanic" version))
11273 (sha256
11274 (base32 "1fv9wgsj54scbr7qhmwdgc4zqnqpwacpakcfxhsg10gc04h54pbp"))
11275 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
11276 (modules '((guix build utils)))
11277 (snippet #~(substitute* "setup.py"
11278 (("setuptools>=[0-9.]*")
11279 "setuptools")))))
11280 (build-system pyproject-build-system)
11281 (arguments
11282 (list
11283 #:test-flags
11284 #~(list "--asyncio-mode=auto"
11285 "--ignore=tests/benchmark/"
11286 "--ignore=tests/typing/test_typing.py"
11287 ;; Most tests hang or fail
11288 "--ignore=tests/test_cli.py"
11289 "--ignore=tests/worker/test_worker_serve.py"
11290 "-k"
11291 (string-append
11292 ;; PyPi sources lack examples module.
11293 "not test_gunicorn_"
11294 ;; Does not expect brotli and reordered headers.
11295 " and not test_raw_headers"
11296 ;; These look like buggy testcases.
11297 " and not test_zero_downtime"
11298 " and not test_non_default_uvloop_config_raises_warning"
11299 " and not test_listeners_triggered"
11300 " and not test_keep_alive_connection_context"
11301 " and not test_keep_alive_client_timeout"
11302 " and not test_conflicting_body_methods_overload"
11303 " and not test_unix_connection"
11304 ;; Unclear why they fail since core-updates merge.
11305 " and not test_missing_sni"
11306 " and not test_no_matching_cert"
11307 " and not test_wildcards"
11308 ;; These tests fail because subprotocols appear to be
11309 ;; parameterized as None
11310 " and not test_websocket_route_with_subprotocols"
11311 ;; AF_UNIX path too long
11312 " and not test_setup_and_teardown_unix"
11313 " and not test_configure_socket"
11314 ;; Freezes
11315 " and not test_server_run_with_repl"
11316 " and not test_server_run"
11317 " and not test_no_workers"))))
11318 (propagated-inputs
11319 (list python-aiofiles
11320 python-aioquic
11321 python-html5tagger
11322 python-httptools
11323 python-multidict
11324 python-sanic-routing
11325 python-tracerite
11326 python-typing-extensions
11327 python-ujson
11328 python-uvloop
11329 python-websockets))
11330 (native-inputs
11331 (list python-beautifulsoup4
11332 python-chardet
11333 python-cryptography
11334 python-docutils
11335 python-mypy
11336 python-pygments
11337 python-pytest
11338 python-pytest-asyncio
11339 python-pytest-benchmark
11340 python-pytest-sanic
11341 python-sanic-testing
11342 python-setuptools
11343 python-slotscheck
11344 python-towncrier
11345 python-types-ujson
11346 python-uvicorn
11347 python-wheel))
11348 (home-page "https://github.com/sanic-org/sanic/")
11349 (synopsis "Async Python web server/framework")
11350 (description
11351 "Sanic is a Python web server and web framework that's written to go
11352fast. It allows the usage of the @code{async/await} syntax added in Python
113533.5, which makes your code non-blocking and speedy.")
11354 (license license:expat)))
11355
11356(define-public python-sanic-bootstrap
11357 (package
11358 (inherit python-sanic)
11359 (name "python-sanic-bootstrap")
11360 (arguments (list #:tests? #f))
11361 (native-inputs (list python-setuptools python-wheel))))
11362
11363(define-public python-socketio
11364 (package
11365 (name "python-socketio")
11366 (version "5.12.1")
11367 (source
11368 (origin
11369 (method url-fetch)
11370 (uri (pypi-uri "python_socketio" version))
11371 (sha256
11372 (base32
11373 "175sd3fdld3s477i6b3v49yhf1alsbm1vaxzq44nqrqb8wgzz682"))))
11374 (build-system pyproject-build-system)
11375 (arguments
11376 (list #:test-flags
11377 '(list "--timeout=60"
11378 ;; These tests freeze.
11379 "--ignore-glob=tests/async/*")))
11380 (propagated-inputs
11381 (list python-bidict python-engineio python-msgpack))
11382 (native-inputs
11383 (list python-pytest
11384 python-pytest-asyncio
11385 python-pytest-timeout
11386 python-setuptools
11387 python-uvicorn
11388 python-wheel))
11389 (home-page "https://github.com/miguelgrinberg/python-socketio/")
11390 (synopsis "Python Socket.IO server")
11391 (description
11392 "This package provides a Python implementation of the @code{Socket.IO}
11393realtime client and server.")
11394 (license license:expat)))
11395
11396(define-public python-socks
11397 (package
11398 (name "python-socks")
11399 (version "2.7.2")
11400 (source
11401 (origin
11402 (method git-fetch)
11403 (uri (git-reference
11404 (url "https://github.com/romis2012/python-socks")
11405 (commit (string-append "v" version))))
11406 (file-name (git-file-name name version))
11407 (sha256
11408 (base32 "1alrfjkir69006qmr2ax3inrffk2bllpljwmprwczb44r0mya77m"))))
11409 (build-system pyproject-build-system)
11410 (propagated-inputs (list python-trio))
11411 (native-inputs
11412 (list python-anyio
11413 python-async-timeout
11414 python-flask
11415 python-pytest
11416 python-pytest-asyncio
11417 python-pytest-trio
11418 python-setuptools
11419 python-tiny-proxy
11420 python-trustme
11421 python-yarl))
11422 (home-page "https://github.com/romis2012/python-socks")
11423 (synopsis
11424 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
11425 (description
11426 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
11427 functionality.")
11428 (license license:asl2.0)))
11429
11430(define-public python-socksio
11431 (package
11432 (name "python-socksio")
11433 (version "1.0.0")
11434 (source
11435 (origin
11436 (method url-fetch)
11437 (uri (pypi-uri "socksio" version))
11438 (sha256
11439 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
11440 (build-system pyproject-build-system)
11441 (native-inputs
11442 (list python-flit-core
11443 python-pytest
11444 python-pytest-cov))
11445 (home-page "https://github.com/sethmlarson/socksio")
11446 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
11447 (description "The @code{socksio} Python module is a client-side sans-I/O
11448SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
11449@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
11450means the library itself does not handle the actual sending of the bytes
11451through the network, it only deals with the implementation details of the
11452SOCKS protocols. It can be paired with any I/O library.")
11453 (license license:expat)))
11454
11455(define-public python-simple-websocket
11456 (package
11457 (name "python-simple-websocket")
11458 (version "1.1.0")
11459 (source
11460 (origin
11461 (method url-fetch)
11462 (uri (pypi-uri "simple_websocket" version))
11463 (sha256
11464 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
11465 (build-system pyproject-build-system)
11466 (arguments
11467 ;; Requires Internet access to resolve example.com
11468 (list #:test-flags '(list "--ignore=tests/test_client.py")))
11469 (propagated-inputs (list python-wsproto))
11470 (native-inputs (list python-pytest
11471 python-setuptools))
11472 (home-page "https://github.com/miguelgrinberg/simple-websocket")
11473 (synopsis "Simple WebSocket server and client for Python")
11474 (description "This package provides a simple @code{WebSocket} server and
11475client for Python.")
11476 (license license:expat)))
11477
11478(define-public python-siosocks
11479 (package
11480 (name "python-siosocks")
11481 (version "0.3.0")
11482 (source (origin
11483 (method url-fetch)
11484 (uri (pypi-uri "siosocks" version))
11485 (sha256
11486 (base32
11487 "0qqxy8wl5mrmlkblzjq9nsg0cbm5jwgj409mhnhq6gd1ypvbndms"))))
11488 (build-system python-build-system)
11489 (arguments
11490 (list #:phases #~(modify-phases %standard-phases
11491 (replace 'check
11492 (lambda* (#:key tests? #:allow-other-keys)
11493 (when tests?
11494 (invoke "pytest" "-vvv")))))))
11495 (native-inputs (list python-pytest python-pytest-asyncio python-pytest-cov
11496 python-pytest-trio))
11497 (propagated-inputs (list python-trio))
11498 (home-page "https://github.com/pohmelie/siosocks")
11499 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
11500 (description
11501 "This package provides a Python module and framework for sans-io socks proxy
11502client/server with couple io backends.
11503
11504Features:
11505@itemize
11506@item Only TCP connect (no BIND, no UDP)
11507@item Both client and server
11508@item SOCKS versions: 4, 4a, 5
11509@item SOCKSv5 auth: no auth, username/password
11510@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
11511@item One-shot socks server (@code{python -m siosocks})
11512@end itemize")
11513 (license license:expat)))
11514
11515(define-public python-tiny-proxy
11516 (package
11517 (name "python-tiny-proxy")
11518 (version "0.2.1")
11519 (source
11520 (origin
11521 (method url-fetch)
11522 (uri (pypi-uri "tiny_proxy" version))
11523 (sha256
11524 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
11525 (build-system pyproject-build-system)
11526 ;; There are only a handful of tests and they require the as yet
11527 ;; unpackaged httpx_socks.
11528 (arguments (list #:tests? #false))
11529 (propagated-inputs (list python-anyio))
11530 (native-inputs
11531 (list python-httpx
11532 python-pytest
11533 python-setuptools
11534 python-wheel))
11535 (home-page "https://github.com/romis2012/tiny-proxy")
11536 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
11537 (description "This package provides a simple proxy server (SOCKS4(a),
11538SOCKS5(h), HTTP tunnel).")
11539 (license license:asl2.0)))
11540
11541(define-public python-azure-nspkg
11542 (package
11543 (name "python-azure-nspkg")
11544 (version "3.0.2")
11545 (source
11546 (origin
11547 (method url-fetch)
11548 (uri (pypi-uri "azure-nspkg" version ".zip"))
11549 (sha256
11550 (base32
11551 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
11552 (build-system pyproject-build-system)
11553 (arguments (list #:tests? #f)) ;no tests in package
11554 (native-inputs (list unzip python-setuptools))
11555 (home-page "https://github.com/Azure/azure-sdk-for-python")
11556 (synopsis "Azure namespace internals")
11557 (description
11558 "This package is an internal Azure namespace package.")
11559 (license license:expat)))
11560
11561(define-public python-azure-storage-nspkg
11562 (package
11563 (name "python-azure-storage-nspkg")
11564 (version "3.1.0")
11565 (source
11566 (origin
11567 (method url-fetch)
11568 (uri (pypi-uri "azure-storage-nspkg" version))
11569 (sha256
11570 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
11571 (build-system pyproject-build-system)
11572 (arguments
11573 (list #:tests? #f)) ;no tests in PyPI archive
11574 (native-inputs (list python-setuptools))
11575 (propagated-inputs (list python-azure-nspkg))
11576 (home-page "https://github.com/Azure/azure-storage-python")
11577 (synopsis "Microsoft Azure Storage Namespace package")
11578 (description
11579 "This project provides a client library in Python that makes it easy to
11580communicate with Microsoft Azure Storage services.")
11581 (license license:expat)))
11582
11583(define-public python-azure-common
11584 (package
11585 (name "python-azure-common")
11586 (version "1.1.28")
11587 (source
11588 (origin
11589 (method url-fetch)
11590 (uri (pypi-uri "azure-common" version ".zip"))
11591 (sha256
11592 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
11593 (build-system pyproject-build-system)
11594 (arguments
11595 (list #:tests? #f)) ;no tests in PyPI archive
11596 (propagated-inputs (list python-azure-nspkg))
11597 (native-inputs (list python-setuptools unzip))
11598 (home-page "https://github.com/Azure/azure-sdk-for-python")
11599 (synopsis "Microsoft Azure Client library for Python")
11600 (description "This package provides the Microsoft Azure Client library for
11601Python.")
11602 (license license:expat)))
11603
11604(define-public python-azure-core
11605 (package
11606 (name "python-azure-core")
11607 (version "1.32.0")
11608 (source
11609 (origin
11610 (method url-fetch)
11611 (uri (pypi-uri "azure_core" version))
11612 (sha256
11613 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
11614 (build-system pyproject-build-system)
11615 (arguments
11616 (list
11617 #:test-flags
11618 `(list ;; This fails because devtools_testutils doesn't exist.
11619 "--ignore=tests/test_connection_string_parsing.py"
11620 ;; These all need network access.
11621 "--ignore=samples"
11622 "--ignore=tests/async_tests/test_streaming_async.py"
11623 "--ignore=tests/test_streaming.py"
11624 "-m" "not asyncio and not live_test_only"
11625 "-k" ,(string-append
11626 "not test_decompress_plain_no_header"
11627 " and not test_compress_plain_no_header"
11628 " and not test_decompress_compressed_no_header"
11629 " and not test_requests_socket_timeout"))
11630 #:phases
11631 #~(modify-phases %standard-phases
11632 (add-before 'check 'add-test-pythonpath
11633 (lambda* (#:key tests? #:allow-other-keys)
11634 (when tests?
11635 (setenv "PYTHONPATH"
11636 (string-append
11637 (getcwd) "/tests/testserver_tests/coretestserver:"
11638 (getenv "GUIX_PYTHONPATH")))))))))
11639 (propagated-inputs
11640 (list python-aiohttp
11641 python-requests
11642 python-six
11643 python-typing-extensions))
11644 (native-inputs
11645 (list python-flask
11646 python-pytest
11647 python-pytest-aiohttp
11648 python-pytest-asyncio
11649 python-pytest-trio
11650 python-setuptools
11651 python-wheel))
11652 (home-page "https://github.com/Azure/azure-sdk-for-python")
11653 (synopsis "Microsoft Azure Core library for Python")
11654 (description "This package provides the Microsoft Azure Core library for
11655Python.")
11656 (license license:expat)))
11657
11658(define-public python-azure-storage-blob
11659 (package
11660 (name "python-azure-storage-blob")
11661 (version "12.27.0")
11662 (source
11663 (origin
11664 (method url-fetch)
11665 (uri (pypi-uri "azure_storage_blob" version))
11666 (sha256
11667 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
11668 (build-system pyproject-build-system)
11669 (arguments
11670 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
11671 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
11672 ;; it hard to package in Guix.
11673 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
11674 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
11675 (list #:tests? #f))
11676 (native-inputs
11677 (list python-setuptools))
11678 (propagated-inputs
11679 (list python-azure-core
11680 python-cryptography
11681 python-isodate
11682 python-typing-extensions))
11683 (home-page "https://github.com/Azure/azure-sdk-for-python/")
11684 (synopsis "Microsoft Azure Blob Storage client library for Python")
11685 (description "This package provides the Microsoft Azure Blob Storage
11686Client Library for Python.")
11687 (license license:expat)))
11688
11689(define-public python-azure-storage-file-datalake
11690 (package
11691 (name "python-azure-storage-file-datalake")
11692 (version "12.22.0")
11693 (source
11694 (origin
11695 (method url-fetch)
11696 (uri (pypi-uri "azure_storage_file_datalake" version))
11697 (sha256
11698 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
11699 (build-system pyproject-build-system)
11700 (arguments
11701 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
11702 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
11703 ;; it hard to package in Guix.
11704 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
11705 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
11706 (list #:tests? #f))
11707 (native-inputs
11708 (list python-setuptools))
11709 (propagated-inputs
11710 (list python-azure-core
11711 python-azure-storage-blob
11712 python-isodate
11713 python-typing-extensions))
11714 (home-page "https://github.com/Azure/azure-sdk-for-python")
11715 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
11716 (description
11717 "This package provides the Microsoft Azure File @code{DataLake} Storage
11718Client Library for Python.")
11719 (license license:expat)))
11720
11721(define-public python-google-auth
11722 (package
11723 (name "python-google-auth")
11724 (version "2.40.3")
11725 (source
11726 (origin
11727 (method url-fetch)
11728 (uri (pypi-uri "google_auth" version))
11729 (sha256
11730 (base32 "0xrvsqrqx89zkf13gjp328j2y5cfhl88sjzjkkm3dszdmllkl32h"))))
11731 (build-system pyproject-build-system)
11732 (arguments
11733 (list
11734 #:test-flags
11735 ;; This one test uses crypto.sign with an outdated calling convention.
11736 '(list "--ignore=tests/transport/test__mtls_helper.py")))
11737 (propagated-inputs
11738 (list python-cachetools-5
11739 python-pyasn1-modules
11740 python-pyjwt
11741 python-rsa))
11742 (native-inputs
11743 (list nss-certs-for-test
11744 python-aioresponses
11745 python-cryptography
11746 python-flask
11747 python-freezegun
11748 python-mock
11749 python-pyopenssl
11750 python-pytest
11751 python-pytest-asyncio
11752 python-pytest-localserver
11753 python-pyu2f
11754 python-requests
11755 python-responses
11756 python-setuptools
11757 python-wheel))
11758 (home-page "https://github.com/googleapis/google-auth-library-python")
11759 (synopsis "Google Authentication Library")
11760 (description "This library simplifies using Google's various
11761server-to-server authentication mechanisms to access Google APIs.")
11762 (license license:asl2.0)))
11763
11764(define-public python-google-resumable-media
11765 (package
11766 (name "python-google-resumable-media")
11767 (version "2.3.2")
11768 (source
11769 (origin
11770 (method url-fetch)
11771 (uri (pypi-uri "google-resumable-media" version))
11772 (sha256
11773 (base32 "04qm6rd4mpbbym8ci5xrb6fymc3mmm8x2z9f43q5iwbr3s5lx4h6"))))
11774 (build-system python-build-system)
11775 (arguments
11776 `(#:phases
11777 (modify-phases %standard-phases
11778 (replace 'check
11779 (lambda* (#:key tests? #:allow-other-keys)
11780 (when tests?
11781 ;; The system tests fail to find test_utils.retry.
11782 (delete-file-recursively "tests/system/")
11783 (invoke "pytest")))))))
11784 (propagated-inputs (list python-google-crc32c))
11785 (native-inputs
11786 (list python-google-auth
11787 python-mock
11788 python-pytest
11789 python-requests
11790 python-test-utils))
11791 (home-page "https://github.com/googleapis/google-resumable-media-python")
11792 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
11793 (description "This package provides utilities for Google Media Downloads
11794and Resumable Uploads.")
11795 (license license:asl2.0)))
11796
11797(define-public python-googleapis-common-protos
11798 (package
11799 (name "python-googleapis-common-protos")
11800 (version "1.56.4")
11801 (source
11802 (origin
11803 (method url-fetch)
11804 (uri (pypi-uri "googleapis-common-protos" version))
11805 (sha256
11806 (base32 "05s4dszqd5pjwjh4bdic40v1v447k0a3dynsrgypqf3rfb276n62"))))
11807 (build-system python-build-system)
11808 (arguments
11809 `(#:phases
11810 (modify-phases %standard-phases
11811 (replace 'check
11812 (lambda* (#:key tests? #:allow-other-keys)
11813 (when tests?
11814 (invoke "pytest")))))))
11815 (propagated-inputs (list python-protobuf))
11816 (native-inputs
11817 (list python-pytest))
11818 (home-page "https://github.com/googleapis/python-api-common-protos")
11819 (synopsis "Common protobufs used in Google APIs")
11820 (description "This package contains Python classes generated from the
11821common protos in the @code{googleapis/api-common-protos} repository.")
11822 (license license:asl2.0)))
11823
11824(define-public python-google-api-core
11825 (package
11826 (name "python-google-api-core")
11827 (version "2.7.3")
11828 (source
11829 (origin
11830 (method url-fetch)
11831 (uri (pypi-uri "google-api-core" version))
11832 (sha256
11833 (base32 "0ydwvg9gzp75cd11s62db5w3jhj643yrw095rv95psfb0h3pz58p"))))
11834 (build-system python-build-system)
11835 (arguments
11836 `(#:phases
11837 (modify-phases %standard-phases
11838 (replace 'check
11839 (lambda* (#:key tests? #:allow-other-keys)
11840 (when tests?
11841 ;; These don't work because it doesn't find AsyncMock even when
11842 ;; we add it to the inputs.
11843 (for-each delete-file
11844 '("tests/asyncio/test_page_iterator_async.py"
11845 "tests/asyncio/test_retry_async.py"))
11846 (invoke "pytest")))))))
11847 (propagated-inputs
11848 (list python-google-auth
11849 python-googleapis-common-protos
11850 python-protobuf
11851 python-proto-plus
11852 python-requests))
11853 (native-inputs
11854 (list python-mock
11855 python-pytest
11856 python-pytest-asyncio))
11857 (home-page "https://github.com/googleapis/python-api-core")
11858 (synopsis "Google API client core library")
11859 (description "This library defines common helpers used by all Google API
11860clients.")
11861 (license license:asl2.0)))
11862
11863(define-public python-google-cloud-core
11864 (package
11865 (name "python-google-cloud-core")
11866 (version "2.3.0")
11867 (source
11868 (origin
11869 (method url-fetch)
11870 (uri (pypi-uri "google-cloud-core" version))
11871 (sha256
11872 (base32 "0sa66kidgr32dfq9ngha9l362xnqvnqqmssn5my1gd3lc6g65apx"))))
11873 (build-system python-build-system)
11874 (arguments
11875 `(#:phases
11876 (modify-phases %standard-phases
11877 (replace 'check
11878 (lambda* (#:key tests? #:allow-other-keys)
11879 (when tests?
11880 (invoke "pytest")))))))
11881 (propagated-inputs (list python-google-api-core python-google-auth))
11882 (native-inputs
11883 (list python-grpcio python-pytest))
11884 (home-page "https://github.com/googleapis/python-cloud-core")
11885 (synopsis "Google Cloud API client core library")
11886 (description "This library defines common helpers (e.g. base @code{Client}
11887classes) used by all of the @code{google-cloud-*} packages.")
11888 (license license:asl2.0)))
11889
11890(define-public python-google-cloud-storage
11891 (package
11892 (name "python-google-cloud-storage")
11893 (version "2.3.0")
11894 (source
11895 (origin
11896 (method url-fetch)
11897 (uri (pypi-uri "google-cloud-storage" version))
11898 (sha256
11899 (base32 "0nwg9ic29s70kpvi71gmjv1y4w5a3vc9gj6d16f8w8hpbvgb1jzl"))))
11900 (build-system python-build-system)
11901 (arguments
11902 `(#:phases
11903 (modify-phases %standard-phases
11904 (replace 'check
11905 (lambda* (#:key tests? #:allow-other-keys)
11906 (when tests?
11907 (for-each delete-file-recursively
11908 (list
11909 ;; The system tests fail to find test_utils.retry.
11910 "tests/system/"
11911 ;; Needs docker.
11912 "tests/conformance/"))
11913 (invoke "pytest")))))))
11914 (native-inputs
11915 (list python-mock python-pytest python-test-utils))
11916 (propagated-inputs
11917 (list python-google-api-core
11918 python-google-auth
11919 python-google-cloud-core
11920 python-google-resumable-media
11921 python-protobuf
11922 python-requests))
11923 (home-page "https://github.com/googleapis/python-storage")
11924 (synopsis "Google Cloud Storage API client library")
11925 (description "Google Cloud Storage allows you to store data on Google
11926infrastructure, and it can be used to distribute large data objects to users
11927via direct download. This package provides a Google Cloud Storage API client
11928library for Python.")
11929 (license license:asl2.0)))
11930
11931(define-public python-smart-open
11932 (package
11933 (name "python-smart-open")
11934 (version "7.3.0")
11935 (source
11936 (origin
11937 (method git-fetch) ;no tests in PyPI archive
11938 (uri (git-reference
11939 (url "https://github.com/piskvorky/smart_open")
11940 (commit (string-append "v" version))))
11941 (file-name (git-file-name name version))
11942 (sha256
11943 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
11944 (build-system pyproject-build-system)
11945 (arguments
11946 (list
11947 #:test-flags
11948 #~(list "--ignore=ci_helpers/"
11949 "--ignore=integration-tests/"
11950 ;; FIXME: Enable when guix/guix#1436 is resolved.
11951 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
11952 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
11953 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
11954 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
11955 "--ignore=tests/test_gcs.py")
11956 #:phases
11957 #~(modify-phases %standard-phases
11958 (add-before 'build 'set-version
11959 (lambda _
11960 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
11961 (propagated-inputs
11962 (list python-azure-common
11963 python-azure-core
11964 python-azure-storage-blob
11965 python-boto3
11966 ;; python-google-cloud-storage ;see guix/guix#1436
11967 python-paramiko
11968 python-requests
11969 python-wrapt
11970 python-zstandard))
11971 (native-inputs
11972 (list python-numpy
11973 python-moto
11974 python-pytest
11975 python-pytest-rerunfailures
11976 python-responses
11977 python-setuptools
11978 python-setuptools-scm
11979 python-wheel))
11980 (home-page "https://github.com/piskvorky/smart_open")
11981 (synopsis "Utilities for streaming large files")
11982 (description
11983 "This package provides utilities for streaming large files (S3, HDFS,
11984GCS, Azure Blob Storage, gzip, bz2, etc.)")
11985 (license license:expat)))
11986
11987(define-public python-smart-open-6
11988 (package
11989 (inherit python-smart-open)
11990 (name "python-smart-open")
11991 (version "6.4.0")
11992 (source
11993 (origin
11994 (method git-fetch)
11995 (uri (git-reference
11996 (url "https://github.com/piskvorky/smart_open")
11997 (commit (string-append "v" version))))
11998 (file-name (git-file-name name version))
11999 (sha256
12000 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
12001 (arguments
12002 (list
12003 ;; XXX: Tests need some older native inputs, disable for now.
12004 #:tests? #f))))
12005
12006(define-public python-w3lib
12007 (package
12008 (name "python-w3lib")
12009 (version "2.3.1")
12010 (source
12011 (origin
12012 (method url-fetch)
12013 (uri (pypi-uri "w3lib" version))
12014 (sha256
12015 (base32
12016 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
12017 (build-system pyproject-build-system)
12018 (native-inputs
12019 (list python-pytest python-setuptools python-wheel))
12020 (home-page "https://github.com/scrapy/w3lib")
12021 (synopsis "Python library of web-related functions")
12022 (description
12023 "This is a Python library of web-related functions, such as: remove
12024comments, or tags from HTML snippets, extract base url from HTML snippets,
12025translate entities on HTML strings, among other things.")
12026 (license license:bsd-3)))
12027
12028(define-public python-webcolors
12029 (package
12030 (name "python-webcolors")
12031 (version "24.11.1")
12032 (source
12033 (origin
12034 (method url-fetch)
12035 (uri (pypi-uri "webcolors" version))
12036 (sha256
12037 (base32 "1xl0vn4xa03vjwx6fj19q9kgb94g65gvdf3p0ivsy0i2ydldgczc"))))
12038 (build-system pyproject-build-system)
12039 (arguments
12040 (list
12041 #:phases
12042 '(modify-phases %standard-phases
12043 (add-after 'unpack 'patch-pyproject
12044 (lambda _
12045 ;; XXX Our version of python-pdm-backend does not recognize
12046 ;; "dependency-groups", but is fine with the bogus
12047 ;; "tool.whatever".
12048 (substitute* "pyproject.toml"
12049 (("\\[dependency-groups\\]") "[tool.whatever]")))))))
12050 (native-inputs
12051 (list python-pdm-backend python-pytest))
12052 (home-page "https://github.com/ubernostrum/webcolors")
12053 (synopsis "HTML/CSS color definitions library")
12054 (description "@code{python-webcolors} is a module for working with
12055HTML/CSS color definitions. Normalizing and converting between the following
12056formats is supported.
12057@itemize
12058@item Specification-defined color names
12059@item Six-digit hexadecimal
12060@item Three-digit hexadecimal
12061@item Integer rgb() triplet
12062@item Percentage rgb() triplet
12063@end itemize
12064Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
12065can be handled by the @code{colorsys} module in the Python standard library.")
12066 (license license:bsd-3)))
12067
12068(define-public python-woob
12069 ;; TODO: woob requires backends which are currently installed on the fly in
12070 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
12071 ;; them in the store instead. Many modules are included in the modules
12072 ;; directory in the source tree, but it is unclear how to install them.
12073 ;; Many modules require extra dependencies though, so maybe they should be
12074 ;; packaged independently of woob itself.
12075 (package
12076 (name "python-woob")
12077 (version "3.7")
12078 (source
12079 (origin
12080 (method git-fetch)
12081 (uri (git-reference
12082 (url "https://gitlab.com/woob/woob.git")
12083 (commit version)))
12084 (file-name (git-file-name name version))
12085 (sha256
12086 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
12087 (build-system pyproject-build-system)
12088 (arguments
12089 (list
12090 #:test-flags
12091 ;; Deselect tests that require DNS lookup.
12092 #~(list
12093 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
12094 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
12095 #:phases
12096 #~(modify-phases %standard-phases
12097 (add-before 'build 'relax-requirements
12098 (lambda _
12099 ;; "packaging ~= 23.0",
12100 (substitute* "pyproject.toml"
12101 (("\"packaging .*\",")
12102 "")))))))
12103 (native-inputs
12104 (list nss-certs-for-test
12105 python-pytest
12106 python-setuptools))
12107 (propagated-inputs
12108 (list python-babel
12109 python-colorama
12110 python-cssselect
12111 python-dateutil
12112 python-feedparser
12113 python-html2text
12114 python-lxml
12115 python-packaging
12116 python-pillow
12117 python-prettytable
12118 python-pycountry
12119 python-pyyaml
12120 python-requests
12121 python-responses
12122 python-rich
12123 python-termcolor
12124 python-unidecode))
12125 (home-page "https://woob.tech/")
12126 (synopsis "Woob, Web Outside Of Browsers")
12127 (description
12128 "Woob is a collection of applications able to interact with
12129websites, without requiring the user to open them in a browser. It also
12130provides well-defined APIs to talk to websites lacking one.")
12131 (license license:lgpl3+)))
12132
12133(define-public python-flask-combo-jsonapi
12134 (package
12135 (name "python-flask-combo-jsonapi")
12136 (version "1.1.0")
12137 (source
12138 (origin
12139 (method git-fetch)
12140 (uri (git-reference
12141 (url "https://github.com/AdCombo/flask-combo-jsonapi")
12142 (commit version)))
12143 (file-name (git-file-name name version))
12144 (sha256
12145 (base32 "07fhcjiyif80z1vyh35za29sqx1mmqh568jrbrrs675j4a797sj1"))))
12146 (build-system python-build-system)
12147 (arguments
12148 '(#:phases
12149 (modify-phases %standard-phases
12150 (add-after 'unpack 'loosen-requirements
12151 (lambda _
12152 ;; Don't pin specific versions of dependencies.
12153 (substitute* "requirements.txt"
12154 (("^sqlalchemy[=<>].*") "sqlalchemy\n")
12155 (("^marshmallow[=<>].*") "marshmallow\n")
12156 (("^Flask[=<>].*") "Flask\n"))))
12157 (replace 'check
12158 (lambda _
12159 (invoke "pytest" "-vv" "-k"
12160 ;; The following test fails for unknown reasons (see:
12161 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
12162 "not test_get_list_with_simple_filter_\
12163relationship_custom_qs_api"))))))
12164 (propagated-inputs
12165 (list python-flask
12166 python-marshmallow
12167 python-marshmallow-jsonapi
12168 python-simplejson
12169 python-sqlalchemy
12170 python-apispec
12171 python-simplejson
12172 python-six))
12173 (native-inputs
12174 (list python-coverage
12175 python-coveralls
12176 python-pytest
12177 python-pytest-runner))
12178 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
12179 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
12180 (description
12181 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web APIs
12182compliant with the @uref{https://jsonapi.org, JSON:API 1.0} specification.
12183
12184It tries to combine the power of Flask-Restless with the flexibility of
12185Flask-RESTful to quickly build APIs that fit the complexity of existing
12186real-life projects with legacy data and diverse storage providers.")
12187 (license license:expat)))
12188
12189(define-public python-mwparserfromhell
12190 (package
12191 (name "python-mwparserfromhell")
12192 (version "0.7.2")
12193 (source
12194 (origin
12195 (method git-fetch)
12196 (uri (git-reference
12197 (url "https://github.com/earwig/mwparserfromhell")
12198 (commit (string-append "v" version))))
12199 (file-name (git-file-name name version))
12200 (sha256
12201 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
12202 (build-system pyproject-build-system)
12203 (native-inputs (list python-pytest python-setuptools))
12204 (home-page "https://github.com/earwig/mwparserfromhell")
12205 (synopsis "Python parser for MediaWiki wikicode")
12206 (description
12207 "The MediaWiki Parser From Hell is a python library package that provides
12208a parser for MediaWiki.
12209
12210It exposes parses as normal string objects with additional methods giving
12211access to the special Wikicode features it contains (hyperlinks, tags,
12212templates…). The parser doesn't interpolate strings at all, it remains at a
12213purely formal level.
12214
12215Full documentation may be found at
12216@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
12217 (license license:expat)))
12218
12219(define-public python-tweepy
12220 (package
12221 (name "python-tweepy")
12222 (version "4.16.0")
12223 (source
12224 (origin
12225 (method git-fetch)
12226 (uri
12227 (git-reference
12228 (url "https://github.com/tweepy/tweepy")
12229 (commit (string-append "v" version))))
12230 (file-name (git-file-name name version))
12231 (sha256
12232 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
12233 (build-system pyproject-build-system)
12234 (arguments
12235 ;; tests: 149 passed, 3 skipped, 1 warning
12236 (list #:test-backend #~'unittest
12237 #:test-flags #~(list "discover" "tests")))
12238 (native-inputs
12239 (list nss-certs-for-test
12240 python-flit-core
12241 python-urllib3-1.26
12242 python-vcrpy))
12243 (propagated-inputs
12244 (list python-aiohttp
12245 python-async-lru
12246 python-oauthlib
12247 python-requests
12248 python-requests-oauthlib))
12249 (home-page "https://www.tweepy.org/")
12250 (synopsis "Twitter library for Python")
12251 (description
12252 "This package provides @code{Tweepy}, an easy-to-use Python library for
12253accessing the Twitter API.")
12254 (license license:expat)))
12255
12256(define-public python-quart
12257 (package
12258 (name "python-quart")
12259 (version "0.19.9")
12260 (source
12261 (origin
12262 (method git-fetch) ; no tests in PyPI release
12263 (uri (git-reference
12264 (url "https://github.com/pallets/quart")
12265 (commit version)))
12266 (file-name (git-file-name name version))
12267 (sha256
12268 (base32 "1h5ifv8g9dc9m07vj4v7dfalam83v38545d845vvgys1gan1pscd"))))
12269 (build-system pyproject-build-system)
12270 (arguments
12271 (list
12272 #:phases
12273 #~(modify-phases %standard-phases
12274 (add-after 'unpack 'remove-coverage-pytest-options
12275 (lambda _
12276 (substitute* "pyproject.toml"
12277 (("--no-cov-on-fail") "")))))))
12278 (native-inputs
12279 (list python-poetry-core
12280 python-pytest
12281 python-pytest-asyncio))
12282 (propagated-inputs
12283 (list hypercorn
12284 python-aiofiles
12285 python-blinker
12286 python-click
12287 python-dotenv
12288 python-flask
12289 python-itsdangerous
12290 python-jinja2
12291 python-markupsafe
12292 python-toml
12293 python-werkzeug))
12294 (home-page "https://gitlab.com/pgjones/quart/")
12295 (synopsis "Python ASGI web microframework with the same API as Flask")
12296 (description
12297 "This package provides a Python ASGI web microframework with the same API
12298as Flask.")
12299 (license license:expat)))
12300
12301(define-public python-quart-trio
12302 (package
12303 (name "python-quart-trio")
12304 (version "0.12.0")
12305 (source
12306 (origin
12307 (method url-fetch)
12308 (uri (pypi-uri "quart_trio" version))
12309 (sha256
12310 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
12311 (build-system pyproject-build-system)
12312 (arguments
12313 (list
12314 #:phases
12315 #~(modify-phases %standard-phases
12316 (add-after 'unpack 'remove-coverage-pytest-options
12317 (lambda _
12318 (substitute* "pyproject.toml"
12319 (("--no-cov-on-fail") "")))))))
12320 (native-inputs
12321 (list python-pdm-backend
12322 python-pytest
12323 python-pytest-sugar
12324 python-pytest-trio))
12325 (propagated-inputs
12326 (list hypercorn
12327 python-exceptiongroup
12328 python-quart
12329 python-trio))
12330 (home-page "https://github.com/pgjones/quart-trio")
12331 (synopsis "Extension for Quart to support the Trio event loop")
12332 (description
12333 "This package provides a Quart extension to provide Trio support. This
12334is an alternative to using the asyncio event loop present in the Python
12335standard library and supported by default in Quart.")
12336 (license license:expat)))
12337
12338(define-public python-ajsonrpc
12339 (package
12340 (name "python-ajsonrpc")
12341 (version "1.2.0")
12342 (source
12343 (origin
12344 (method git-fetch)
12345 (uri (git-reference
12346 (url "https://github.com/pavlov99/ajsonrpc")
12347 (commit version)))
12348 (file-name (git-file-name name version))
12349 (sha256
12350 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
12351 (build-system pyproject-build-system)
12352 (arguments
12353 (list
12354 #:phases
12355 #~(modify-phases %standard-phases
12356 (add-after 'unpack 'set-version
12357 (lambda _
12358 (substitute* "ajsonrpc/__init__.py"
12359 (("^__version__ = .*")
12360 (string-append "__version__ = \"" #$version "\"\n"))))))))
12361 (native-inputs
12362 (list python-pytest
12363 python-setuptools))
12364 (propagated-inputs
12365 (list python-quart
12366 python-sanic
12367 python-tornado))
12368 (home-page "https://github.com/pavlov99/ajsonrpc")
12369 (synopsis "Async JSON-RPC 2.0 protocol and server")
12370 (description
12371 "This package provides a Python JSON-RPC 2.0 protocol and server powered
12372by asyncio.")
12373 (license license:expat)))
12374
12375(define-public python-protego
12376 (package
12377 (name "python-protego")
12378 (version "0.4.0")
12379 (source
12380 (origin
12381 (method url-fetch)
12382 (uri (pypi-uri "protego" version))
12383 (sha256
12384 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
12385 (build-system pyproject-build-system)
12386 (native-inputs (list python-pytest python-setuptools python-wheel))
12387 (home-page "https://github.com/scrapy/protego")
12388 (synopsis "Python robots.txt parser with support for modern conventions")
12389 (description "Protego is a pure-Python @file{robots.txt} parser with support
12390for modern conventions.")
12391 (license license:bsd-3)))
12392
12393(define-public python-parsel
12394 (package
12395 (name "python-parsel")
12396 (version "1.10.0")
12397 (source
12398 (origin
12399 (method url-fetch)
12400 (uri (pypi-uri "parsel" version))
12401 (sha256
12402 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
12403 (build-system pyproject-build-system)
12404 (propagated-inputs
12405 (list python-cssselect
12406 python-jmespath
12407 python-lxml
12408 python-typing-extensions
12409 python-w3lib))
12410 (native-inputs
12411 (list python-psutil python-pytest python-setuptools python-wheel))
12412 (home-page "https://github.com/scrapy/parsel")
12413 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
12414 (description "Parsel is a library to extract and remove data from
12415HTML and XML using XPath and CSS selectors, optionally combined with
12416regular expressions.")
12417 (license license:bsd-3)))
12418
12419(define-public python-scrapy
12420 (package
12421 (name "python-scrapy")
12422 (version "2.13.3")
12423 (source
12424 (origin
12425 (method url-fetch)
12426 (uri (pypi-uri "scrapy" version))
12427 (sha256
12428 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
12429 (build-system pyproject-build-system)
12430 (arguments
12431 (list #:test-flags
12432 #~(list "--numprocesses" (number->string (parallel-job-count))
12433 "-k" (string-join
12434 ;; ConnectionRefusedError: [Errno 111] Connection
12435 ;; refused
12436 (list "not test_append"
12437 "test_append_active_mode"
12438 "test_overwrite"
12439 "test_overwrite_active_mode"
12440 "test_persist"
12441 ;; AssertionError
12442 "test_start_deprecated_super")
12443 " and not ")
12444 ;; Skip documentation testing.
12445 "--ignore=docs")
12446 #:phases
12447 #~(modify-phases %standard-phases
12448 (add-before 'check 'prepare-test-environment
12449 (lambda _
12450 (setenv "HOME" "/tmp"))))))
12451 (propagated-inputs
12452 (list python-cryptography
12453 python-cssselect
12454 python-defusedxml
12455 python-itemadapter
12456 python-itemloaders
12457 python-lxml
12458 python-packaging
12459 python-parsel
12460 python-protego
12461 python-pydispatcher
12462 python-pyopenssl
12463 python-pypydispatcher
12464 python-queuelib
12465 python-service-identity
12466 python-tldextract
12467 python-twisted
12468 python-w3lib
12469 python-zope-interface))
12470 (native-inputs
12471 (list nss-certs-for-test
12472 python-hatchling
12473 python-pexpect
12474 python-pytest
12475 python-pytest-xdist
12476 python-setuptools
12477 python-sybil
12478 python-testfixtures))
12479 (home-page "https://scrapy.org")
12480 (synopsis "High-level Web crawling and Web scraping framework")
12481 (description "Scrapy is a fast high-level web crawling and web
12482scraping framework, used to crawl websites and extract structured data
12483from their pages. It can be used for a wide range of purposes, from data
12484mining to monitoring and automated testing.")
12485 (license license:bsd-3)))
12486
12487(define-public python-jstyleson
12488 (package
12489 (name "python-jstyleson")
12490 (version "0.0.2")
12491 (source
12492 (origin
12493 (method url-fetch)
12494 (uri (pypi-uri "jstyleson" version))
12495 (sha256
12496 (base32 "13ihw6jqwkg3ai4xb83kw39pvh73b2wg6ld3wvj5jaasn7rh6038"))))
12497 (build-system python-build-system)
12498 (arguments (list #:tests? #f)) ;no tests in pypi release
12499 (home-page "https://github.com/linjackson78/jstyleson")
12500 (synopsis "JSON parser supporting js-style comments")
12501 (description "@code{jstyleson} is a Python library to parse JSON.
12502Contrary to the standard Python @code{json} library, it understands js-style
12503comments. Trailing comma is also supported.")
12504 (license license:expat)))
12505
12506(define-public python-html-text
12507 (package
12508 (name "python-html-text")
12509 (version "0.7.0")
12510 (source
12511 (origin
12512 (method url-fetch)
12513 (uri (pypi-uri "html_text" version))
12514 (sha256
12515 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
12516 (build-system pyproject-build-system)
12517 (native-inputs
12518 (list python-pytest
12519 python-setuptools
12520 python-wheel))
12521 (propagated-inputs
12522 (list python-lxml
12523 python-lxml-html-clean))
12524 (home-page "https://github.com/TeamHG-Memex/html-text")
12525 (synopsis "Extract text from HTML")
12526 (description "HTML to Text is a Python library for extract text from HTML.
12527Contrary to other solution such as LXML or Beautiful Soup, the text extracted
12528with @code{html_text} does not contain elements such as JavaScript or inline
12529styles not normally visible to users. It also normalizes white space
12530characters in a smarter, more visually pleasing style.")
12531 (license license:expat)))
12532
12533(define-public python-mf2py
12534 (package
12535 (name "python-mf2py")
12536 (version "2.0.1")
12537 (source
12538 (origin
12539 (method git-fetch)
12540 (uri (git-reference
12541 (url "https://github.com/microformats/mf2py")
12542 (commit (string-append "v" version))))
12543 (file-name (git-file-name name version))
12544 (sha256
12545 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
12546 (build-system pyproject-build-system)
12547 (native-inputs (list python-mock python-poetry-core python-pytest))
12548 (propagated-inputs
12549 (list python-beautifulsoup4 python-html5lib python-requests))
12550 (home-page "https://github.com/microformats/mf2py")
12551 (synopsis "Python Microformats2 parser")
12552 (description
12553 "This Python library provides a Microformats2 parser implementing the
12554full Microformats2 (mf2) specification, including backward compatibility with
12555Microformats1 (mf1).")
12556 (license license:expat)))
12557
12558(define-public python-extruct
12559 (package
12560 (name "python-extruct")
12561 (version "0.18.0")
12562 (source (origin
12563 (method git-fetch) ;for tests
12564 (uri (git-reference
12565 (url "https://github.com/scrapinghub/extruct")
12566 (commit (string-append "v" version))))
12567 (file-name (git-file-name name version))
12568 (sha256
12569 (base32
12570 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
12571 (build-system pyproject-build-system)
12572 (arguments
12573 (list
12574 #:test-flags
12575 ;; 67 passed, 3 deselected
12576 ;; XXX: 3 tests fail with errors in assertion.
12577 #~(list "-k" (string-append
12578 "not test_microformat"
12579 " and not test_microformat"
12580 " and not test_umicroformat"))))
12581 (native-inputs
12582 (list python-pytest
12583 python-setuptools
12584 python-wheel))
12585 (propagated-inputs
12586 (list python-html-text
12587 python-jstyleson
12588 python-lxml
12589 python-mf2py
12590 python-pyrdfa3
12591 python-rdflib
12592 python-w3lib))
12593 (home-page "https://github.com/scrapinghub/extruct")
12594 (synopsis "Extract embedded metadata from HTML markup")
12595 (description "@code{extruct} is a Python library for extracting embedded
12596metadata from HTML markup. Currently, extruct supports:
12597@itemize
12598@item W3C's HTML Microdata
12599@item embedded JSON-LD
12600@item Microformat via mf2py
12601@item Facebook's Open Graph
12602@item (experimental) RDFa via rdflib
12603@item Dublin Core Metadata (DC-HTML-2003)
12604@end itemize")
12605 (license license:bsd-3)))
12606
12607(define-public python-wadllib
12608 (package
12609 (name "python-wadllib")
12610 (version "2.0.0")
12611 (source
12612 (origin
12613 (method url-fetch)
12614 (uri (pypi-uri "wadllib" version))
12615 (sha256
12616 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
12617 (build-system pyproject-build-system)
12618 (arguments
12619 (list
12620 ;; XXX: Doctests are currently failing.
12621 #:tests? #f
12622 #:phases
12623 #~(modify-phases %standard-phases
12624 (replace 'check
12625 (lambda* (#:key tests? #:allow-other-keys)
12626 (if tests?
12627 (invoke "zope-testrunner" "--test-path=src")
12628 (format #t "test suite not run~%")))))))
12629 (native-inputs
12630 (list python-multipart python-setuptools python-zope-testrunner))
12631 (propagated-inputs (list python-lazr-uri))
12632 (home-page "https://launchpad.net/wadllib")
12633 (synopsis "Web Application Description Language (WADL) navigation library")
12634 (description "The @code{wadllib} Python library allows navigating HTTP
12635resources using Web Application Description Language (WADL) files as guides.")
12636 (license license:lgpl3)))
12637
12638(define-public python-zeep
12639 (package
12640 (name "python-zeep")
12641 (version "4.3.1")
12642 (source
12643 (origin
12644 (method url-fetch)
12645 (uri (pypi-uri "zeep" version))
12646 (sha256
12647 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
12648 (build-system pyproject-build-system)
12649 (arguments
12650 (list
12651 #:phases
12652 '(modify-phases %standard-phases
12653 (add-after 'unpack 'compatibility
12654 (lambda _
12655 ;; Relax requests-file requirement.
12656 (substitute* "pyproject.toml"
12657 (("\"requests-file.*\",")
12658 "\"requests-file\","))
12659 ;; httpx removed the "proxies" keyword. It's now either "mounts"
12660 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
12661 (substitute* "src/zeep/transports.py"
12662 (("proxies=") "proxy="))))
12663 ;; One test requires write access
12664 (add-before 'check 'set-HOME
12665 (lambda _ (setenv "HOME" (getcwd)))))))
12666 (propagated-inputs
12667 (list python-attrs
12668 python-isodate
12669 python-lxml
12670 python-platformdirs
12671 python-pytz
12672 python-requests
12673 python-requests-file
12674 python-requests-toolbelt))
12675 (native-inputs
12676 (list nss-certs-for-test
12677 python-freezegun
12678 python-pretend
12679 python-pytest
12680 python-pytest-asyncio
12681 python-pytest-cov
12682 python-pytest-httpx
12683 python-requests-mock
12684 python-setuptools
12685 python-wheel))
12686 (home-page "https://docs.python-zeep.org/en/stable/")
12687 (synopsis "Python SOAP client based on lxml / requests")
12688 (description "Zeep is a Python SOAP client. Highlights:
12689
12690@itemize
12691@item Build on top of @code{lxml} and @code{requests}.
12692@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
12693@item Support for WS-Addressing headers.
12694@item Support for WSSE (UserNameToken / x.509 signing).
12695@item Support for @code{asyncio} via @code{httpx}.
12696@item Experimental support for XOP messages.
12697@end itemize")
12698 (license license:expat)))
12699
12700(define-public python-pysimplesoap
12701 (package
12702 (name "python-pysimplesoap")
12703 (version "1.16.2")
12704 (source (origin
12705 (method url-fetch)
12706 (uri (pypi-uri "PySimpleSOAP" version))
12707 (sha256
12708 (base32
12709 "1qb7dn8m1cjwzql7vqj9i1hsscb7nyhimmlp45jrpzxds38g9fxi"))))
12710 (build-system python-build-system)
12711 (arguments
12712 (list #:tests? #f)) ;tests fail due to attempted web access
12713 (home-page "https://github.com/pysimplesoap/pysimplesoap")
12714 (synopsis "Simple and lightweight SOAP library for Python")
12715 (description
12716 "This package provides a simple and lightweight Python SOAP library for
12717client and server webservices interfaces, aimed to be as small and easy as
12718possible, supporting most common functionality.")
12719 (license license:lgpl3+)))
12720
12721(define-public python-http-client
12722 (package
12723 (name "python-http-client")
12724 (version "3.3.7")
12725 (home-page "https://github.com/sendgrid/python-http-client")
12726 (source (origin
12727 (method git-fetch)
12728 (uri (git-reference
12729 (url home-page)
12730 (commit version)))
12731 (file-name (git-file-name name version))
12732 (sha256
12733 (base32
12734 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))
12735 (snippet #~(begin
12736 (use-modules (guix build utils))
12737 (delete-file "tests/profile.py")))))
12738 (build-system python-build-system)
12739 (arguments
12740 (list #:phases
12741 #~(modify-phases %standard-phases
12742 (add-after 'unpack 'fix-tests
12743 (lambda _
12744 ;; The test expects the copyright to be updated each year.
12745 (substitute* "tests/test_daterange.py"
12746 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
12747 (synopsis "HTTP REST client for Python")
12748 (description
12749 "This package provides access to any RESTful or RESTful-like API.")
12750 (license license:expat)))
12751
12752(define-public python-sendgrid
12753 (package
12754 (name "python-sendgrid")
12755 (version "6.9.7")
12756 (home-page "https://github.com/sendgrid/sendgrid-python/")
12757 (source (origin
12758 (method git-fetch)
12759 (uri (git-reference
12760 (url home-page)
12761 (commit version)))
12762 (file-name (git-file-name name version))
12763 (sha256
12764 (base32
12765 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
12766 (build-system python-build-system)
12767 (arguments
12768 (list #:tests? #f)) ;241/340 tests fail due to attempted web access
12769 (propagated-inputs (list python-http-client python-starkbank-ecdsa))
12770 (synopsis "SendGrid API library for Python")
12771 (description
12772 "The @code{sendgrid} Python library allows access to the
12773SendGrid Web API v3. Version 3+ of the library provides full support for all
12774SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
12775 (license license:expat)))
12776
12777(define-public python-starlette
12778 (package
12779 (name "python-starlette")
12780 (version "0.42.0")
12781 (source (origin
12782 (method git-fetch)
12783 (uri (git-reference
12784 (url "https://github.com/encode/starlette")
12785 (commit version)))
12786 (file-name (git-file-name name version))
12787 (sha256
12788 (base32
12789 "0r46v6b687pqr4sjcv0rwd1ln248fnx0xkawbn945r04pg7c999q"))))
12790 (build-system pyproject-build-system)
12791 (propagated-inputs (list python-anyio
12792 python-typing-extensions
12793 ;; [all] extra dependencies:
12794 python-itsdangerous
12795 python-jinja2
12796 python-multipart
12797 python-pyyaml
12798 python-requests))
12799 (native-inputs (list python-hatchling
12800 python-httpx
12801 python-pytest
12802 python-typing-extensions))
12803 (home-page "https://github.com/encode/starlette")
12804 (synopsis "Little ASGI library")
12805 (description
12806 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
12807Interface) framework/toolkit for building async web services in Python.")
12808 (license license:bsd-3)))
12809
12810(define-public python-starsessions
12811 (package
12812 (name "python-starsessions")
12813 (version "1.3.0")
12814 (source (origin
12815 (method git-fetch)
12816 (uri (git-reference
12817 (url "https://github.com/alex-oleshkevich/starsessions")
12818 (commit (string-append "v" version))))
12819 (file-name (git-file-name name version))
12820 (sha256
12821 (base32
12822 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
12823 (build-system pyproject-build-system)
12824 (arguments
12825 (list
12826 #:test-flags
12827 ;; These tests require a running redis server
12828 '(list "--ignore=tests/backends/test_redis.py"
12829 ;; XXX: this failure indicates a real compatibility problem, but
12830 ;; it seems restricted to the tests only.
12831 ;; AttributeError: 'Cookies' object has no attribute
12832 ;; 'clear_session_cookies'
12833 "-k"
12834 (string-append "not test_session_clears_on_tab_close"
12835 ;; This fails because an error is not raised.
12836 " and not test_session_wants_secret_key"))
12837 #:phases
12838 '(modify-phases %standard-phases
12839 (add-after 'unpack 'compatibilitiy
12840 (lambda _
12841 ;; aioredis has been renamed
12842 (substitute* "starsessions/backends/redis.py"
12843 (("aioredis") "redis")))))))
12844 (propagated-inputs
12845 (list python-redis
12846 python-itsdangerous
12847 python-starlette))
12848 (native-inputs
12849 (list python-httpx
12850 python-poetry-core
12851 python-pytest
12852 python-pytest-asyncio
12853 python-requests))
12854 (home-page "https://github.com/alex-oleshkevich/starsessions")
12855 (synopsis "Pluggable session support for Starlette and FastAPI")
12856 (description
12857 "This package adds pluggable session backends and ships default
12858@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
12859and FastAPI.")
12860 (license license:expat)))
12861
12862(define-public python-whereismyip
12863 (package
12864 (name "python-whereismyip")
12865 (version "0.1.0")
12866 (source
12867 (origin
12868 (method url-fetch)
12869 (uri (pypi-uri "whereismyip" version))
12870 (sha256
12871 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
12872 (build-system pyproject-build-system)
12873 (arguments (list #:tests? #false)) ; There are no tests.
12874 (native-inputs (list python-setuptools))
12875 (home-page "https://pypi.org/project/whereismyip/")
12876 (synopsis "Queries multiple geolocation services until one succeeds")
12877 (description
12878 "This package provides a simple Python library that queries multiple geolocation
12879services until one succeeds.")
12880 (license license:gpl3)))
12881
12882(define-public python-whitenoise
12883 (package
12884 (name "python-whitenoise")
12885 (version "6.9.0")
12886 (source (origin
12887 (method git-fetch) ; PyPI missing test failes
12888 (uri (git-reference
12889 (url "https://github.com/evansd/whitenoise")
12890 (commit version)))
12891 (file-name (git-file-name name version))
12892 (sha256
12893 (base32
12894 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
12895 (build-system pyproject-build-system)
12896 (arguments
12897 (list
12898 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
12899 (native-inputs (list python-brotli
12900 python-django
12901 python-requests
12902 python-pytest
12903 python-setuptools
12904 python-wheel))
12905 (home-page "https://github.com/evansd/whitenoise")
12906 (synopsis "Static file serving for WSGI applications")
12907 (description
12908 "WhiteNoise allows your web app to serve its own static files, making it
12909a self-contained unit that can be deployed anywhere without relying on nginx,
12910Amazon S3 or any other external service.")
12911 (license license:expat)))
12912
12913(define-public python-suds
12914 (package
12915 (name "python-suds")
12916 (version "1.2.0")
12917 (source
12918 (origin
12919 (method url-fetch)
12920 (uri (pypi-uri "suds" version))
12921 (sha256
12922 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
12923 (build-system pyproject-build-system)
12924 (arguments
12925 (list #:phases
12926 #~(modify-phases %standard-phases
12927 ;; XXX: chirp expects suds instead of suds_community
12928 (add-after 'install 'add-custom-dist-info
12929 (lambda _
12930 (for-each
12931 (lambda (dir)
12932 (with-directory-excursion (dirname dir)
12933 (symlink
12934 (basename dir)
12935 (string-append "suds-" #$version ".dist-info"))))
12936 (find-files #$output
12937 (lambda (file stat)
12938 (string-suffix? ".dist-info" file))
12939 #:directories? #t)))))))
12940 (native-inputs
12941 (list python-pytest
12942 python-setuptools
12943 python-wheel))
12944 (home-page "https://github.com/suds-community/suds")
12945 (synopsis "Lightweight SOAP python client for consuming Web Services")
12946 (description
12947 "Suds is a lightweight SOAP-based web service client for Python.")
12948 (license license:lgpl3+)))
12949
12950(define-public python-fastapi
12951 (package
12952 (name "python-fastapi")
12953 (version "0.115.6")
12954 (source (origin
12955 (method url-fetch)
12956 (uri (pypi-uri "fastapi" version))
12957 (sha256
12958 (base32
12959 "0m36nyldk0640mbsysm446bz6rfynpjsm5lajmra8kn1vmx6zi4y"))))
12960 (build-system pyproject-build-system)
12961 (arguments
12962 (list
12963 #:test-flags
12964 ;; Argument() missing 1 required positional argument: 'default'
12965 '(list "--ignore=tests/test_fastapi_cli.py"
12966 ;; cannot import name 'StaticPool' from 'sqlalchemy'
12967 "--ignore-glob=tests/test_tutorial/*"
12968 ;; FIXME: Unclear why these 8 tests fail.
12969 "--ignore=tests/test_dependency_contextmanager.py")
12970 #:phases
12971 '(modify-phases %standard-phases
12972 (add-after 'unpack 'relax-requirements
12973 (lambda _
12974 (substitute* "pyproject.toml"
12975 (("<0.42.0") "<=0.42.0")))))))
12976 (propagated-inputs (list python-email-validator
12977 python-fastapi-cli
12978 python-httpx
12979 python-itsdangerous
12980 python-jinja2
12981 python-multipart
12982 python-orjson
12983 python-pydantic-2
12984 python-pydantic-settings
12985 python-pyyaml
12986 python-starlette
12987 python-typing-extensions
12988 python-ujson
12989 python-uvicorn))
12990 (native-inputs
12991 (list python-dirty-equals
12992 python-flask
12993 python-inline-snapshot
12994 python-pdm-backend
12995 python-pyjwt
12996 python-pytest
12997 python-sqlalchemy))
12998 (home-page "https://github.com/tiangolo/fastapi")
12999 (synopsis "Web framework based on type hints")
13000 (description "FastAPI provides a web API framework based on pydantic and
13001starlette.")
13002 (license license:expat)))
13003
13004(define-public python-fastapi-csrf-protect
13005 (package
13006 (name "python-fastapi-csrf-protect")
13007 (version "0.3.3")
13008 (source (origin
13009 (method git-fetch)
13010 (uri (git-reference
13011 (url "https://github.com/aekasitt/fastapi-csrf-protect")
13012 (commit (string-append "v" version))))
13013 (file-name (git-file-name name version))
13014 (sha256
13015 (base32
13016 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
13017 (build-system pyproject-build-system)
13018 (propagated-inputs
13019 (list python-fastapi python-itsdangerous
13020 python-pydantic-2))
13021 (native-inputs
13022 (list python-poetry-core
13023 python-pytest))
13024 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
13025 (synopsis "Cross-Site Request Forgery (XSRF) protection")
13026 (description
13027 "This package provides a stateless implementation of @dfn{Cross-Site
13028Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
13029pattern.")
13030 (license license:expat)))
13031
13032(define-public python-fastapi-pagination-minimal
13033 (package
13034 (name "python-fastapi-pagination-minimal")
13035 (version "0.12.34")
13036 (source (origin
13037 (method git-fetch)
13038 (uri (git-reference
13039 (url "https://github.com/uriyyo/fastapi-pagination")
13040 (commit version)))
13041 (file-name (git-file-name name version))
13042 (sha256
13043 (base32
13044 "004w9h4ana0p766n7f0z0n06v1472yjci1hvbys9gncpclcc49gj"))))
13045 (build-system pyproject-build-system)
13046 ;; We run the tests in python-fastapi-pagination only.
13047 (arguments (list #:tests? #false))
13048 ;; These are the only required dependencies,
13049 ;; please add all optional dependencies to the
13050 ;; full python-fastapi-pagination below.
13051 (propagated-inputs (list python-fastapi python-pydantic-2))
13052 (native-inputs (list python-poetry-core))
13053 (home-page "https://github.com/uriyyo/fastapi-pagination")
13054 (synopsis "FastAPI pagination library")
13055 (description "@code{fastapi-pagination} is a Python library designed to
13056simplify pagination in FastAPI applications. It provides a set of utility
13057functions and data models to help you paginate your database queries and
13058return paginated responses to your clients.")
13059 (license license:expat)))
13060
13061(define-public python-fastapi-pagination
13062 (package
13063 (inherit python-fastapi-pagination-minimal)
13064 (name "python-fastapi-pagination")
13065 (arguments
13066 (list
13067 #:test-flags
13068 #~(list "--asyncio-mode=auto"
13069 "--unit-tests"
13070 "--ignore=tests/ext"
13071 ;; Netwok access is required.
13072 "-k" (string-join
13073 (list "not test_optional_params[postgres-default]"
13074 "test_optional_params[postgres-limit-offset]"
13075 "test_optional_params[sqlite-default]"
13076 "test_optional_params[sqlite-limit-offset]")
13077 " and not "))
13078 #:phases
13079 '(modify-phases %standard-phases
13080 (add-after 'unpack 'patch-tests
13081 (lambda _
13082 ;; We don't have a package for python-cassandra or motor, but we
13083 ;; also don't need them as we only run the unit tests anyway.
13084 (substitute* "tests/conftest.py"
13085 (("from cassandra.cluster.*") "")
13086 (("from motor.*") "")))))))
13087 (propagated-inputs
13088 (modify-inputs (package-propagated-inputs
13089 python-fastapi-pagination-minimal)
13090 (prepend python-asyncpg
13091 python-databases
13092 python-django
13093 python-fastapi
13094 python-pydantic-2
13095 python-sqlalchemy
13096 (package
13097 (inherit python-tortoise-orm)
13098 (arguments
13099 (substitute-keyword-arguments (package-arguments
13100 python-tortoise-orm)
13101 ((#:phases phases '%standard-phases)
13102 `(modify-phases ,phases
13103 (delete 'sanity-check)))))
13104 (propagated-inputs
13105 (modify-inputs (package-propagated-inputs python-tortoise-orm)
13106 (replace "python-aiosqlite" python-aiosqlite)))))))
13107 (native-inputs
13108 (list python-aiosqlite
13109 python-asgi-lifespan
13110 python-asyncpg
13111 python-faker
13112 python-httpx
13113 python-poetry-core
13114 python-pytest
13115 python-pytest-asyncio
13116 python-sqlalchemy
13117 python-typing-extensions))
13118 (description
13119 (string-append (package-description python-fastapi-pagination-minimal)
13120 "
13121
13122This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
13123all available optional dependencies supported by mainline
13124@code{fastapi-pagination}."))))
13125
13126(define-public python-fastapi-cli
13127 (package
13128 (name "python-fastapi-cli")
13129 (version "0.0.7")
13130 (source
13131 (origin
13132 (method url-fetch)
13133 (uri (pypi-uri "fastapi_cli" version))
13134 (sha256
13135 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
13136 (build-system pyproject-build-system)
13137 ;; Tests require fastapi, which depends on this package.
13138 (arguments (list #:tests? #false))
13139 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
13140 (native-inputs
13141 (list python-inline-snapshot python-pdm-backend python-pytest))
13142 (home-page "https://pypi.org/project/fastapi-cli/")
13143 (synopsis
13144 "Run and manage FastAPI apps from the command line with FastAPI CLI")
13145 (description
13146 "FastAPI CLI is a command line program fastapi that you can use to serve
13147your FastAPI app, manage your FastAPI project, and more.")
13148 (license license:expat)))
13149
13150(define-public python-pyactiveresource
13151 (package
13152 (name "python-pyactiveresource")
13153 (version "2.2.2")
13154 (source
13155 (origin
13156 (method git-fetch)
13157 (uri (git-reference
13158 (url "https://github.com/Shopify/pyactiveresource")
13159 (commit (string-append "v" version))))
13160 (file-name (git-file-name name version))
13161 (sha256
13162 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
13163 (build-system pyproject-build-system)
13164 (native-inputs (list python-dateutil python-pytest python-pyyaml
13165 python-setuptools))
13166 (propagated-inputs (list python-six))
13167 (home-page "https://github.com/Shopify/pyactiveresource/")
13168 (synopsis "ActiveResource for Python")
13169 (description
13170 "This package provides a Python port of the ActiveResource project.
13171
13172Active Resource attempts to provide a coherent wrapper object-relational
13173mapping for REST web services. It follows the same philosophy as Active
13174Record, in that one of its prime aims is to reduce the amount of code needed
13175to map to these resources. This is made possible by relying on a number of
13176code- and protocol-based conventions that make it easy for Active Resource to
13177infer complex relations and structures.")
13178 (license license:expat)))
13179
13180(define-public python-shopifyapi
13181 (package
13182 (name "python-shopifyapi")
13183 (version "12.7.0")
13184 (source
13185 (origin
13186 (method git-fetch)
13187 (uri (git-reference
13188 (url "https://github.com/Shopify/shopify_python_api")
13189 (commit (string-append "v" version))))
13190 (file-name (git-file-name name version))
13191 (sha256
13192 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
13193 (build-system pyproject-build-system)
13194 (arguments
13195 (list
13196 #:test-flags
13197 #~'("-k"
13198 ;; Disable a failing test.
13199 "not test_raises_if_aud_doesnt_match_api_key")))
13200 (native-inputs (list python-mock python-pytest python-setuptools))
13201 (propagated-inputs (list python-pyactiveresource python-pyjwt
13202 python-pyyaml python-six))
13203 (home-page "https://github.com/Shopify/shopify_python_api")
13204 (synopsis "Shopify API for Python")
13205 (description
13206 "This package provides the Shopify API for Python.
13207
13208The ShopifyAPI library allows Python developers to programmatically access the
13209admin section of stores using an ActiveResource-like interface similar the
13210ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
13211list, create, update, or delete resources (e.g. Order, Product, Collection).")
13212 (license license:expat)))
13213
13214(define-public python-pybadges
13215 (package
13216 (name "python-pybadges")
13217 (version "3.0.1")
13218 (source (origin
13219 (method git-fetch)
13220 (uri (git-reference
13221 (url "https://github.com/google/pybadges")
13222 (commit version)))
13223 (file-name (git-file-name name version))
13224 (sha256
13225 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
13226 (build-system pyproject-build-system)
13227 (arguments
13228 (list
13229 #:test-flags
13230 #~'("-k"
13231 ;; Disable network dependent tests.
13232 "not test_changes and not test_not_image_url and not test_http_url")))
13233 (propagated-inputs (list python-jinja2 python-requests))
13234 (native-inputs (list python-flask
13235 python-fonttools
13236 python-pillow
13237 python-pytest
13238 python-setuptools
13239 python-wheel
13240 python-xmldiff))
13241 (home-page "https://github.com/google/pybadges")
13242 (synopsis "Generate Github-style badges on the command-line")
13243 (description
13244 "This package provides @code{python-pybadges}: a library and command-line
13245tool for generating Github-style badges as SVG images.")
13246 (license license:asl2.0)))
13247
13248(define-public python-grid5000
13249 (package
13250 (name "python-grid5000")
13251 (version "1.2.3")
13252 (source (origin
13253 (method git-fetch)
13254 (uri (git-reference
13255 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
13256 (commit (string-append "v" version))))
13257 (file-name (git-file-name name version))
13258 (sha256
13259 "097pm8b68ihk29xz9zv29b1x0bhgjb4lfj8zxk2grbsh7wr9dipg")))
13260 (build-system python-build-system)
13261 (native-inputs (list python-wheel))
13262 (propagated-inputs (list python-requests python-ipython python-pyyaml))
13263 (arguments
13264 (list #:tests? #f)) ; No tests.
13265 (home-page "https://pypi.org/project/python-grid5000/")
13266 (synopsis "Grid5000 python client")
13267 (description
13268 "python-grid5000 is a python package wrapping the Grid5000 REST API.
13269You can use it as a library in your python project or you can explore the
13270Grid5000 resources interactively using the embedded shell.")
13271 (license license:gpl3+)))
13272
13273(define-public python-enoslib
13274 (package
13275 (name "python-enoslib")
13276 (version "8.0.1")
13277 (source
13278 (origin
13279 (method git-fetch)
13280 (uri (git-reference
13281 (url "https://gitlab.inria.fr/discovery/enoslib")
13282 (commit (string-append "v" version))))
13283 (file-name (git-file-name name version))
13284 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
13285 (arguments
13286 (list
13287 #:test-flags
13288 #~(list "enoslib/tests/unit"
13289 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
13290 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
13291 #:phases
13292 #~(modify-phases %standard-phases
13293 (add-before 'check 'pre-check
13294 (lambda* (#:key tests? #:allow-other-keys)
13295 (when tests?
13296 ;; Otherwise Ansible fails to create its config directory.
13297 (setenv "HOME" "/tmp"))))
13298 ;; Disable the sanity check, which fails with the following error:
13299 ;;
13300 ;; ContextualVersionConflict(rich 12.4.1
13301 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
13302 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
13303 ;;
13304 ;; The optional jupyter dependency of rich isn't critical for
13305 ;; EnOSlib to work
13306 (delete 'sanity-check))))
13307 (build-system pyproject-build-system)
13308 (native-inputs
13309 (list python-ddt
13310 python-freezegun
13311 python-pytest
13312 python-setuptools
13313 python-wheel))
13314 (propagated-inputs
13315 (list ansible
13316 python-cryptography
13317 python-grid5000
13318 python-jsonschema
13319 python-netaddr
13320 python-packaging
13321 python-requests
13322 python-rich
13323 python-sshtunnel
13324 python-pytz))
13325 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
13326 (synopsis "Deploy distributed testbeds on a variety of platforms")
13327 (description
13328 "EnOSlib is a library to build experimental frameworks on various
13329scientific testbeds. It lets you deploy networks of machines on actual
13330hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
13331 (license license:gpl3+)))
13332
13333(define-public python-pynetbox
13334 (package
13335 (name "python-pynetbox")
13336 (version "7.4.1")
13337 (source (origin
13338 (method url-fetch)
13339 (uri (pypi-uri "pynetbox" version))
13340 (sha256
13341 (base32
13342 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
13343 (build-system pyproject-build-system)
13344 (arguments
13345 (list
13346 #:test-flags
13347 ;; Integration tests depend on docker.
13348 '(list "--ignore=tests/integration")))
13349 (propagated-inputs (list python-packaging python-requests))
13350 (native-inputs
13351 (list python-pytest
13352 python-setuptools
13353 python-setuptools-scm
13354 python-wheel))
13355 (home-page "https://github.com/netbox-community/pynetbox")
13356 (synopsis "NetBox API client library")
13357 (description "Python module to query and edit data stored in a
13358@url{https://netbox.dev,NetBox} instance.")
13359 (license license:asl2.0)))
13360
13361(define-public python-waybackpack
13362 (package
13363 (name "python-waybackpack")
13364 (version "0.6.4")
13365 (source
13366 (origin
13367 (method url-fetch)
13368 (uri (pypi-uri "waybackpack" version))
13369 (sha256
13370 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
13371 (build-system pyproject-build-system)
13372 (arguments
13373 (list #:tests? #f)) ; would require network (and SSL certificates)
13374 (propagated-inputs (list python-requests))
13375 (native-inputs (list python-pytest python-setuptools python-wheel))
13376 (home-page "https://github.com/jsvine/waybackpack")
13377 (synopsis
13378 "Download the entire Wayback Machine archive for a given URL")
13379 (description
13380 "This package provides a library and a command-line tool that lets
13381you download the entire Wayback Machine archive for a given URL.")
13382 (license license:expat)))
13383
13384(define-public python-xyzservices
13385 (package
13386 (name "python-xyzservices")
13387 (version "2025.4.0")
13388 (source
13389 (origin
13390 (method url-fetch)
13391 (uri (pypi-uri "xyzservices" version))
13392 (sha256
13393 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
13394 (build-system pyproject-build-system)
13395 (arguments
13396 (list
13397 #:test-flags #~(list "-m" "not request")))
13398 (native-inputs
13399 (list python-pytest
13400 python-mercantile
13401 python-requests
13402 python-setuptools
13403 python-setuptools-scm))
13404 (home-page "https://github.com/geopandas/xyzservices")
13405 (synopsis "Source of XYZ tiles providers")
13406 (description "@code{xyzservices} is a lightweight library providing a
13407repository of available XYZ services offering raster basemap tiles. The
13408repository is provided via Python API and as a compressed JSON file.")
13409 (license license:bsd-3)))
13410
13411(define-public s3cmd
13412 (package
13413 (name "s3cmd")
13414 (version "2.4.0")
13415 (source
13416 (origin
13417 (method git-fetch)
13418 (uri (git-reference
13419 (url "https://github.com/s3tools/s3cmd")
13420 (commit (string-append "v" version))))
13421 (file-name (git-file-name name version))
13422 (sha256
13423 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
13424 (build-system pyproject-build-system)
13425 (arguments
13426 (list
13427 #:tests? #f ; XXX: Tests require network access.
13428 #:phases
13429 #~(modify-phases %standard-phases
13430 (add-after 'unpack 'hide-wrapping
13431 (lambda _
13432 (substitute* "S3/MultiPart.py"
13433 (("sys\\.argv\\[0\\]")
13434 "\"s3cmd\""))
13435 (substitute* "s3cmd"
13436 (("optparser\\.get_prog_name\\(\\)")
13437 "\"s3cmd\"")))))))
13438 (native-inputs (list python-setuptools))
13439 (inputs (list python-dateutil python-magic))
13440 (home-page "https://s3tools.org/s3cmd")
13441 (synopsis "Command line tool for S3-compatible storage services")
13442 (description
13443 "S3cmd is a command line tool for uploading, retrieving and managing data
13444in storage services that are compatible with the Amazon Simple Storage
13445Service (S3) protocol, including S3 itself. It supports rsync-like backup,
13446GnuPG encryption, and more. It also supports management of Amazon's
13447CloudFront content delivery network.")
13448 (license license:gpl2+)))