projects/guix·blob crypto-team · refs

14937 lines · 539.9 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, 2026 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-2026 Artur Wroblewski <[email protected]>
88;;; Copyright © 2025, 2026 Allan Adair <[email protected]>
89;;; Copyright © 2025 Aaron Covrig <[email protected]>
90;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
91;;; Copyright © 2026 mst <[email protected]>
92;;;
93;;; This file is part of GNU Guix.
94;;;
95;;; GNU Guix is free software; you can redistribute it and/or modify it
96;;; under the terms of the GNU General Public License as published by
97;;; the Free Software Foundation; either version 3 of the License, or (at
98;;; your option) any later version.
99;;;
100;;; GNU Guix is distributed in the hope that it will be useful, but
101;;; WITHOUT ANY WARRANTY; without even the implied warranty of
102;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
103;;; GNU General Public License for more details.
104;;;
105;;; You should have received a copy of the GNU General Public License
106;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
107
108(define-module (gnu packages python-web)
109 #:use-module (gnu packages admin)
110 #:use-module (gnu packages base)
111 #:use-module (gnu packages bash)
112 #:use-module (gnu packages build-tools)
113 #:use-module (gnu packages check)
114 #:use-module (gnu packages cmake)
115 #:use-module (gnu packages compression)
116 #:use-module (gnu packages curl)
117 #:use-module (gnu packages databases)
118 #:use-module (gnu packages django)
119 #:use-module (gnu packages dns)
120 #:use-module (gnu packages freedesktop)
121 #:use-module (gnu packages glib)
122 #:use-module (gnu packages gnupg)
123 #:use-module (gnu packages graphviz)
124 #:use-module (gnu packages groff)
125 #:use-module (gnu packages iso-codes)
126 #:use-module (gnu packages libevent)
127 #:use-module (gnu packages libffi)
128 #:use-module (gnu packages libidn)
129 #:use-module (gnu packages linux)
130 #:use-module (gnu packages lsof)
131 #:use-module (gnu packages node)
132 #:use-module (gnu packages nss)
133 #:use-module (gnu packages openstack)
134 #:use-module (gnu packages pcre)
135 #:use-module (gnu packages pkg-config)
136 #:use-module (gnu packages protobuf)
137 #:use-module (gnu packages python)
138 #:use-module (gnu packages python-build)
139 #:use-module (gnu packages python-check)
140 #:use-module (gnu packages python-compression)
141 #:use-module (gnu packages python-crypto)
142 #:use-module (gnu packages python-science)
143 #:use-module (gnu packages python-xyz)
144 #:use-module (gnu packages qt)
145 #:use-module (gnu packages rdf)
146 #:use-module (gnu packages rpc)
147 #:use-module (gnu packages rust)
148 #:use-module (gnu packages serialization)
149 #:use-module (gnu packages sphinx)
150 #:use-module (gnu packages texinfo)
151 #:use-module (gnu packages time)
152 #:use-module (gnu packages tls)
153 #:use-module (gnu packages version-control)
154 #:use-module (gnu packages web)
155 #:use-module (gnu packages xml)
156 #:use-module (gnu packages)
157 #:use-module (guix build-system cargo)
158 #:use-module (guix build-system copy)
159 #:use-module (guix build-system pyproject)
160 #:use-module (guix deprecation)
161 #:use-module (guix download)
162 #:use-module (guix gexp)
163 #:use-module (guix git-download)
164 #:use-module ((guix licenses) #:prefix license:)
165 #:use-module (guix packages)
166 #:use-module (guix utils)
167 #:use-module (srfi srfi-1))
168
169(define-public python-aioboto3
170 (package
171 (name "python-aioboto3")
172 (version "15.5.0")
173 (source
174 (origin
175 (method git-fetch)
176 (uri (git-reference
177 (url "https://github.com/terricain/aioboto3")
178 (commit (string-append "v" version))))
179 (file-name (git-file-name name version))
180 (sha256
181 (base32 "05644x17f9sl8mv9bp8l0rjcmw5x2ssyd5z1v3xmgcspk5qs6qn8"))))
182 (build-system pyproject-build-system)
183 (arguments
184 (list
185 #:tests? #f ;XXX: all tests faild
186 #:phases
187 #~(modify-phases %standard-phases
188 (add-after 'unpack 'relax-requirements
189 (lambda _
190 (substitute* "pyproject.toml"
191 (("aiobotocore\\[boto3\\]==2.25.1")
192 "aiobotocore >= 2.25.1")))))))
193 (native-inputs
194 (list python-setuptools
195 python-setuptools-scm))
196 (propagated-inputs
197 (list python-aiobotocore
198 python-aiofiles
199 ;; [optional]
200 python-boto3
201 python-cryptography))
202 (home-page "https://github.com/terricain/aioboto3")
203 (synopsis "Async boto3 wrapper")
204 (description
205 "This package is mostly just a wrapper combining the great work of boto3
206and aiobotocore.")
207 (license license:asl2.0)))
208
209(define-public python-aiocoap
210 (package
211 (name "python-aiocoap")
212 (version "0.4.14")
213 (source
214 (origin
215 (method git-fetch) ; tests miss data and module files in PyPI release
216 (uri (git-reference
217 (url "https://github.com/chrysn/aiocoap")
218 (commit version)))
219 (file-name (git-file-name name version))
220 (sha256
221 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
222 (build-system pyproject-build-system)
223 (arguments
224 (list
225 #:test-flags
226 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
227 ;; 8683, 0, 0): address already in use
228 #~(list "--ignore=tests/test_server.py"
229 "-k" (string-join
230 ;; TypeError: can only concatenate str (not "NoneType") to
231 ;; str
232 (list "not test_options"
233 "test_uri_parser"
234 "test_help" ; returned non-zero exit status 1.
235 "test_routing" ; address already in use
236 "test_tls")
237 " and not "))))
238 (native-inputs
239 (list openssl ;for tests/test_tls.py
240 python-pytest
241 python-setuptools
242 python-wheel))
243 (propagated-inputs
244 (list ;; python-cbor-diag
245 python-cbor2
246 python-cryptography
247 ;; python-dtlssocket
248 python-filelock
249 ;; python-ge25519
250 python-pygments
251 python-termcolor
252 python-websockets))
253 (home-page "https://github.com/chrysn/aiocoap")
254 (synopsis "Python CoAP library")
255 (description
256 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
257Constrained Application Protocol}, http://coap.space/}. It facilitates
258writing applications that talk to network enabled embedded
259@acronym{IoT,Internet of Things} devices.")
260 (license license:expat)))
261
262(define-public python-alpaca-py
263 (package
264 (name "python-alpaca-py")
265 (version "0.43.5")
266 (source
267 (origin
268 (method git-fetch)
269 (uri (git-reference
270 (url "https://github.com/alpacahq/alpaca-py")
271 (commit (string-append "v" version))))
272 (file-name (git-file-name name version))
273 (sha256
274 (base32 "1kiq8b1v58yj7fypmnfn4mij1n96ym1i9lxsd4gmbv0cgpn10nqv"))))
275 (build-system pyproject-build-system)
276 (native-inputs
277 (list python-poetry-core
278 python-poetry-dynamic-versioning
279 python-pytest
280 python-pytest-asyncio
281 python-requests-mock))
282 (propagated-inputs
283 (list python-msgpack
284 python-pandas
285 python-pydantic
286 python-pytz
287 python-requests
288 python-sseclient-py
289 python-websockets))
290 (home-page "https://alpaca.markets/sdks/python/")
291 (synopsis "Alpaca API official Python SDK")
292 (description
293 "Alpaca-py provides an interface to REST, WebSocket and SSE endpoints
294that allow interaction with the @url{https://alpaca.markets/, Alpaca} API.")
295 (license license:asl2.0)))
296
297(define-public python-anaconda-client
298 (package
299 (name "python-anaconda-client")
300 (version "1.13.1")
301 (source
302 (origin
303 (method git-fetch)
304 (uri (git-reference
305 (url "https://github.com/Anaconda-Platform/anaconda-client")
306 (commit version)))
307 (file-name (git-file-name name version))
308 (sha256
309 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
310 (build-system pyproject-build-system)
311 (arguments
312 (list
313 #:test-flags
314 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
315 "--deselect=tests/utils/test_conda.py::test_conda_vars")
316 #:phases
317 #~(modify-phases %standard-phases
318 (add-after 'unpack 'fix-pytest-config
319 (lambda _
320 (substitute* "setup.cfg"
321 (("addopts=.*") "addopts=\n")))))))
322 (native-inputs
323 (list python-freezegun
324 python-pytest
325 python-setuptools))
326 (propagated-inputs
327 (list python-anaconda-cli-base
328 python-conda-package-handling
329 python-conda-package-streaming
330 python-dateutil
331 python-defusedxml
332 python-nbformat
333 python-pillow
334 python-platformdirs
335 python-pytz
336 python-pyyaml
337 python-requests
338 python-requests-toolbelt
339 python-setuptools
340 python-tqdm
341 python-urllib3))
342 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
343 (synopsis "Anaconda Cloud command line client library")
344 (description
345 "Anaconda Cloud command line client library provides an interface to
346Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
347environments.")
348 (license license:bsd-3)))
349
350(define-public python-apprise
351 (package
352 (name "python-apprise")
353 (version "1.9.4")
354 (source
355 (origin
356 (method url-fetch)
357 (uri (pypi-uri "apprise" version))
358 (sha256
359 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
360 (build-system pyproject-build-system)
361 (arguments
362 (list
363 ;; These tests used to be ran with --numprocesses, but that seems to have
364 ;; made them non-deterministic.
365 #:test-flags
366 #~(list "--ignore=tests/test_plugin_macosx.py"
367 "-k" "not test_plugin_glib_send_raises_generic")))
368 (native-inputs
369 (list python-babel
370 python-pytest
371 python-pytest-mock
372 python-setuptools))
373 (propagated-inputs
374 (list python-certifi
375 python-click
376 python-markdown
377 python-pygobject
378 python-pyyaml
379 python-requests
380 python-requests-oauthlib))
381 (home-page "https://github.com/caronc/apprise")
382 (synopsis "Push notification library")
383 (description
384 "Apprise is a Python library that allows sending push notifications to a
385broad range of notification services, such as Telegram, Discord, Slack, Amazon
386SNS, Gotify, etc.")
387 (license license:bsd-2)))
388
389(define-public python-arxiv
390 (package
391 (name "python-arxiv")
392 (version "4.0.0")
393 (source
394 (origin
395 (method git-fetch)
396 (uri (git-reference
397 (url "https://github.com/lukasschwab/arxiv.py")
398 (commit version)))
399 (file-name (git-file-name name version))
400 (sha256
401 (base32 "13363igvv3q5aj04jcrrc0cfliinlk8js84h2a9xhpwizsq96l4j"))))
402 (build-system pyproject-build-system)
403 (arguments
404 (list #:test-flags
405 #~(list "-k" ;to skip intenet connection tests
406 (string-append "not (TestAPIBugs "
407 "or TestClient "
408 "or TestResult "
409 "or TestDownload)"))
410 #:phases
411 #~(modify-phases %standard-phases
412 (add-after 'unpack 'relax-dependencies
413 (lambda _
414 (substitute* "pyproject.toml"
415 ;; pyproject.toml wants 6.10, guix has 6.02, seems fine
416 (("\"lxml.*\"") "\"lxml\"")
417 ;; artificial capped at <2.34 by dependabot
418 (("\"requests.*\"") "\"requests\"")))))))
419 (native-inputs
420 (list python-pytest
421 python-hatch-vcs
422 python-hatchling))
423 (propagated-inputs
424 (list python-feedparser
425 python-lxml
426 python-requests))
427 (home-page "https://github.com/lukasschwab/arxiv.py")
428 (synopsis "Python wrapper for the arXiv API")
429 (description "Python wrapper for the @code{arXiv} API.")
430 (license license:expat)))
431
432(define-public python-asyncer
433 (package
434 (name "python-asyncer")
435 (version "0.0.17")
436 (source
437 (origin
438 (method git-fetch)
439 (uri (git-reference
440 (url "https://github.com/fastapi/asyncer")
441 (commit version)))
442 (file-name (git-file-name name version))
443 (sha256
444 (base32 "1f4ids6sxwmz89yj98z0qc4qvfkklh0psbxv5px39k807g9aq7p2"))))
445 (build-system pyproject-build-system)
446 (native-inputs
447 (list python-pdm-backend
448 python-pytest))
449 (propagated-inputs
450 (list python-anyio
451 python-sniffio
452 python-typing-extensions))
453 (home-page "https://asyncer.tiangolo.com/")
454 (synopsis "Asyncer, async and await, focused on developer experience")
455 (description
456 "Asyncer is a small library built on top of
457@url{https://anyio.readthedocs.io/en/stable/, AnyIO}.
458
459The main goal of Asyncer is to improve developer experience by providing
460better support for autocompletion and inline errors in the editor, and more
461certainty that the code is bug-free by providing better support for type
462checking tools like mypy.")
463 (license license:expat)))
464
465(define-public python-asyncudp
466 (package
467 (name "python-asyncudp")
468 (version "0.11.0")
469 (source
470 (origin
471 (method git-fetch)
472 (uri (git-reference
473 (url "https://github.com/eerimoq/asyncudp")
474 (commit version)))
475 (file-name (git-file-name name version))
476 (sha256
477 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
478 (build-system pyproject-build-system)
479 (native-inputs (list python-pytest python-setuptools))
480 (home-page (git-reference-url (origin-uri source)))
481 (synopsis "High level UDP sockets for asyncio")
482 (description
483 "This package provides a Python library offering high level UDP sockets
484for asyncio. Import it alongside asyncio and use its API to send and receive
485UDP packets.")
486 (license license:expat)))
487
488(define-public python-behave-web-api
489 (package
490 (name "python-behave-web-api")
491 (version "2.3.0")
492 (source
493 (origin
494 (method git-fetch)
495 (uri (git-reference
496 (url "https://github.com/jefersondaniel/behave-web-api")
497 (commit (string-append "v" version))))
498 (file-name (git-file-name name version))
499 (sha256
500 (base32 "1r8yx8gb5m599cpdqfvk6z9ax3qj26fpvczdr84z8jya0dxfch4p"))))
501 (build-system pyproject-build-system)
502 (native-inputs
503 (list python-pytest
504 python-setuptools))
505 (propagated-inputs
506 (list behave
507 python-requests))
508 (home-page "https://github.com/jefersondaniel/behave-web-api")
509 (synopsis "Provides testing for JSON APIs with Behave for Python")
510 (description "This package provides testing utility modules for testing
511JSON APIs with Behave.")
512 (license license:expat)))
513
514(define-public python-blacksheep
515 (package
516 (name "python-blacksheep")
517 (version "2.6.3")
518 (source
519 (origin
520 (method git-fetch)
521 (uri (git-reference
522 (url "https://github.com/Neoteroi/BlackSheep")
523 (commit (string-append "v" version))))
524 (file-name (git-file-name name version))
525 (sha256
526 (base32 "1k6yqsqnh6nnhi8z5v2yqpxs7qsk35zwd7gcr7cdh825f2vrl7js"))))
527 (build-system pyproject-build-system)
528 (arguments
529 (list
530 ;; tests: 1821 passed
531 ;;
532 ;; Run all unit tests, but do not run integration tests from `itests`
533 ;; directory.
534 #:test-flags
535 #~(list "tests")
536 #:phases
537 #~(modify-phases %standard-phases
538 (add-before 'build 'cythonize
539 (lambda _
540 (with-directory-excursion "blacksheep"
541 (for-each (lambda (file)
542 (invoke "cython" "-3" file "-I" "."))
543 (find-files "." ".*\\.pyx$"))))))))
544 (native-inputs
545 (list nss-certs-for-test
546 python-cython
547 python-defusedxml
548 python-flask
549 python-jinja2
550 python-pydantic
551 python-pyjwt
552 python-pytest
553 python-pytest-asyncio
554 python-setuptools
555 python-starlette))
556 (propagated-inputs
557 (list python-certifi
558 python-essentials
559 python-essentials-openapi
560 python-guardpost
561 python-httptools
562 python-rodi
563 python-itsdangerous))
564 (home-page "https://github.com/Neoteroi/BlackSheep")
565 (synopsis "Asynchronous framework to build event based web applications")
566 (description
567 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
568
569The framework offers
570@itemize
571@item A rich code API, based on dependency injection and inspired by Flask and
572ASP.NET Core.
573@item A typing-friendly codebase, which enables a comfortable development
574experience thanks to hints when coding with IDEs.
575@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
576and JSON.
577@item A cross-platform framework, using the most modern versions of Python.
578@item Good performance.
579@end itemize")
580 (license license:expat)))
581
582(define-public python-bleach
583 (package
584 (name "python-bleach")
585 (version "6.3.0")
586 (source
587 (origin
588 (method git-fetch)
589 (uri (git-reference
590 (url "https://github.com/mozilla/bleach")
591 (commit (string-append "v" version))))
592 (file-name (git-file-name name version))
593 (sha256
594 (base32 "02abk9ixn010sqpbdsd7nxms0gv4prwv6d3nplb8giq85lpn1kkb"))
595 (snippet
596 #~(begin
597 (use-modules (guix build utils))
598 (substitute* (find-files "." "\\.py$")
599 (("bleach\\._vendor\\.html5lib") "html5lib"))
600 (delete-file-recursively "bleach/_vendor/html5lib")))))
601 (build-system pyproject-build-system)
602 (arguments
603 (list
604 ;; tests: 448 passed, 1 deselected, 3 xfailed
605 #:test-flags
606 #~(list (string-append "--deselect=tests/test_clean.py::"
607 "test_self_closing_tags_self_close[wbr]"))
608 #:phases
609 #~(modify-phases %standard-phases
610 (add-after 'unpack 'relax-requirements
611 (lambda _
612 ;; "tinycss2>=1.1.0,<1.5"
613 ;; The 'sanity-check of python-nbclassic fails without this.
614 (substitute* "setup.py"
615 (("\"tinycss2.*") "")))))))
616 (native-inputs
617 (list python-pytest
618 python-setuptools))
619 (propagated-inputs
620 (list python-html5lib
621 python-tinycss2
622 python-webencodings))
623 (home-page "https://github.com/mozilla/bleach")
624 (synopsis "Whitelist-based HTML-sanitizing tool")
625 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
626 (license license:asl2.0)))
627
628(define-public python-cloudpathlib
629 (package
630 (name "python-cloudpathlib")
631 (version "0.23.0")
632 (source
633 (origin
634 (method git-fetch)
635 (uri (git-reference
636 (url "https://github.com/drivendataorg/cloudpathlib")
637 (commit (string-append "v" version))))
638 (file-name (git-file-name name version))
639 (sha256
640 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
641 (build-system pyproject-build-system)
642 (arguments
643 (list
644 ;; tests: 977 passed, 15 skipped, 8642 warnings
645 #:test-flags
646 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
647 ;; TODO: Package azure-identity (required for this file)
648 "--ignore=tests/test_azure_specific.py"
649 ;; TypeError: Retry.__init__() got an unexpected keyword
650 ;; argument 'timeout'
651 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")))
652 (native-inputs
653 (list ;; python-azure-identity
654 python-dotenv
655 python-flit-core
656 python-psutil
657 python-pydantic
658 python-pytest
659 python-pytest-cases
660 python-pytest-reportlog
661 python-pytest-xdist
662 python-shortuuid
663 python-tenacity))
664 (propagated-inputs
665 (list python-azure-storage-blob
666 python-azure-storage-file-datalake
667 python-boto3
668 python-google-cloud-storage
669 python-typing-extensions))
670 (home-page "https://github.com/drivendataorg/cloudpathlib")
671 (synopsis "Pathlib-style classes for cloud storage services")
672 (description
673 "This package provides a Python library with classes that mimic
674@code{pathlib.Path}'s interface for URIs from different cloud storage
675services.")
676 (license license:expat)))
677
678(define-public python-conda-package-handling
679 (package
680 (name "python-conda-package-handling")
681 (version "2.4.0")
682 (source
683 (origin
684 (method git-fetch)
685 (uri (git-reference
686 (url "https://github.com/conda/conda-package-handling/")
687 (commit version)))
688 (file-name (git-file-name name version))
689 (sha256
690 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
691 (build-system pyproject-build-system)
692 (native-inputs
693 (list python-bottle
694 python-mock
695 python-pytest-8
696 python-pytest-mock
697 python-setuptools))
698 (propagated-inputs
699 (list python-conda-package-streaming))
700 (home-page "https://conda.io")
701 (synopsis "Create and extract conda packages of various formats")
702 (description
703 "This library is an abstraction of Conda package handling and a tool for
704extracting, creating, and converting between formats.")
705 (license license:bsd-3)))
706
707(define-public python-conda-package-streaming
708 (package
709 (name "python-conda-package-streaming")
710 (version "0.12.0")
711 (source
712 (origin
713 (method url-fetch)
714 (uri (pypi-uri "conda_package_streaming" version))
715 (sha256
716 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
717 (build-system pyproject-build-system)
718 (arguments
719 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
720 (list #:tests? #f))
721 (native-inputs
722 (list python-flit-core))
723 (propagated-inputs
724 (list python-requests
725 python-zstandard))
726 (home-page "https://conda.github.io/conda-package-streaming/")
727 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
728 (description
729 "This package provides an efficient library to read from new and old format
730@code{.conda} and @code{.tar.bz2} conda packages.")
731 (license license:bsd-3)))
732
733(define-public python-dependency-groups
734 (package
735 (name "python-dependency-groups")
736 (version "1.3.1")
737 (source
738 (origin
739 (method url-fetch)
740 (uri (pypi-uri "dependency_groups" version))
741 (sha256
742 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
743 (build-system pyproject-build-system)
744 (propagated-inputs (list python-packaging python-tomli))
745 (native-inputs (list python-flit-core python-pytest))
746 (home-page "https://dependency-groups.readthedocs.io/")
747 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
748 (description
749 "This package provides a library which is able to parse dependency groups (PEP
750735), following includes, and provide that data as output.")
751 (license license:expat)))
752
753(define-public python-devpi-common
754 (package
755 (name "python-devpi-common")
756 (version "4.0.4")
757 (source
758 (origin
759 (method url-fetch)
760 (uri (pypi-uri "devpi_common" version))
761 (sha256
762 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
763 (build-system pyproject-build-system)
764 (propagated-inputs (list python-lazy python-packaging-legacy
765 python-requests))
766 (native-inputs
767 (list python-pytest
768 python-setuptools
769 python-wheel))
770 (home-page "https://github.com/devpi/devpi")
771 (synopsis
772 "Utilities jointly used by devpi-server, devpi-client and others")
773 (description
774 "This package provides utilities jointly used by devpi-server,
775devpi-client and others.")
776 (license license:expat)))
777
778(define-public python-devpi-client
779 (package
780 (name "python-devpi-client")
781 (version "7.2.0")
782 (source
783 (origin
784 (method url-fetch)
785 (uri (pypi-uri "devpi-client" version))
786 (sha256
787 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
788 (build-system pyproject-build-system)
789 (arguments
790 (list
791 #:test-flags
792 ;; This wants to use pip install
793 '(list "--ignore=testing/test_upload.py"
794 ;; These complain about finding distutils. It's not my fault,
795 ;; mate, setuptools is right there, but you won't pick it!
796 "--ignore=testing/test_list_remove.py"
797 "--ignore=testing/test_main.py"
798 "--ignore=testing/test_install.py"
799 "--ignore=testing/test_functional.py"
800 "--ignore=testing/test_test.py")
801 #:phases
802 '(modify-phases %standard-phases
803 (add-after 'unpack 'patch-tests
804 (lambda _
805 ;; Do not replace the directory name of the store item.
806 (substitute* "testing/conftest.py"
807 (("\"devpi-server\", \"devpi-init\"")
808 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
809 (add-before 'check 'set-HOME
810 ;; Some tests need this
811 (lambda _ (setenv "HOME" "/tmp"))))))
812 (propagated-inputs (list python-pypa-build
813 python-check-manifest
814 python-colorama
815 python-devpi-common
816 python-iniconfig
817 python-pkginfo
818 python-platformdirs
819 python-pluggy
820 python-pypitoken
821 python-tomli))
822 (native-inputs
823 (list python-devpi-server
824 python-pytest
825 python-setuptools
826 python-virtualenv))
827 (home-page "https://github.com/devpi/devpi")
828 (synopsis "Devpi upload/install/... commands for Python developers")
829 (description
830 "The devpi command line tool is typically used in conjunction with
831devpi-server. It allows uploading, testing and installing packages from devpi
832indexes.")
833 (license license:expat)))
834
835(define-public python-devpi-process
836 (package
837 (name "python-devpi-process")
838 (version "1.0.2")
839 (source
840 (origin
841 (method url-fetch)
842 (uri (pypi-uri "devpi_process" version))
843 (sha256
844 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
845 (build-system pyproject-build-system)
846 (arguments
847 (list
848 #:phases
849 '(modify-phases %standard-phases
850 (add-after 'unpack 'relax-requirements
851 (lambda _
852 ;; Our package is too old, sorry.
853 (substitute* "pyproject.toml"
854 (("typing-extensions>=4.12.2")
855 "typing-extensions>=4.10.0"))))
856 (add-after 'unpack 'patch-tool-locations
857 (lambda* (#:key inputs #:allow-other-keys)
858 (substitute* "src/devpi_process/__init__.py"
859 (("_exe\\(\"devpi-init\"\\)")
860 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
861 (("_exe\\(\"devpi-server\"\\)")
862 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
863 (("_exe\\(\"devpi\"\\)")
864 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
865 (propagated-inputs (list python-devpi-client python-devpi-server
866 python-typing-extensions))
867 (native-inputs
868 (list nss-certs-for-test
869 python-hatchling
870 python-hatch-vcs
871 python-httpx
872 python-pytest))
873 (home-page "https://github.com/devpi/devpi")
874 (synopsis "API to create and use a devpi server process")
875 (description
876 "This package provides a programmatic API to create and use a devpi
877server process.")
878 (license license:expat)))
879
880(define-public python-devpi-server
881 (package
882 (name "python-devpi-server")
883 (version "6.20.3")
884 (source
885 (origin
886 (method git-fetch)
887 (uri (git-reference
888 (url "https://github.com/devpi/devpi")
889 (commit (string-append "server-" version))))
890 (file-name (git-file-name name version))
891 (sha256
892 (base32 "11q1bnd8rl55gcv99xkmg10i8z9l91kvmgrvcz1803mwkcs0isp8"))))
893 (build-system pyproject-build-system)
894 (arguments
895 (list
896 ;; tests: 1134 passed, 53 skipped, 29 warnings
897 #:phases
898 #~(modify-phases %standard-phases
899 (add-after 'unpack 'chdir
900 (lambda _
901 (chdir "server")))
902 (add-after 'chdir 'relax-requirements
903 (lambda _
904 (substitute* "pyproject.toml"
905 ;; It straggles to check argon2 in passlib on any versions
906 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
907 ;; such extra feature 'argon2'",).
908 (("passlib\\[argon2\\]") "passlib")
909 (("\"py>=1.4.23\",") ""))))
910 (add-before 'check 'pre-check
911 (lambda _
912 (setenv "HOME" "/tmp"))))))
913 (propagated-inputs (list python-argon2-cffi
914 python-attrs
915 python-defusedxml
916 python-devpi-common
917 python-httpx
918 python-itsdangerous
919 python-lazy
920 python-passlib
921 python-platformdirs
922 python-pluggy
923 python-pyramid
924 python-repoze-lru
925 python-requests
926 python-ruamel.yaml-0.16 ;FIXME: rename
927 python-strictyaml
928 python-waitress))
929 (native-inputs
930 (list nss-certs-for-test
931 python-execnet
932 python-pytest
933 python-pytest-asyncio
934 python-pytest-timeout
935 python-setuptools
936 python-webtest))
937 (home-page "https://devpi.net")
938 (synopsis "Pypi.org caching server")
939 (description "This package implements a reliable private and pypi.org
940caching server.")
941 (license license:expat)))
942
943(define-public python-dicomweb-client
944 (package
945 (name "python-dicomweb-client")
946 (version "0.60.0")
947 (source
948 (origin
949 (method git-fetch)
950 (uri (git-reference
951 (url "https://github.com/ImagingDataCommons/dicomweb-client")
952 (commit (string-append "v" version))))
953 (file-name (git-file-name name version))
954 (sha256
955 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
956 (build-system pyproject-build-system)
957 (arguments
958 (list
959 #:phases
960 #~(modify-phases %standard-phases
961 (add-after 'unpack 'remove-dynamic-versioning
962 (lambda _
963 (substitute* "pyproject.toml"
964 ;; Dynamic versioning via 'uv-dynamic-versioning' is
965 ;; not suitable for Guix.
966 (("dynamic = \\[\"version\"\\]")
967 (string-append "version = \""
968 #$version "\""))))))))
969 (native-inputs
970 (list python-hatchling
971 python-pytest
972 python-pytest-localserver))
973 (propagated-inputs
974 (list python-numpy
975 python-pillow
976 python-pydicom
977 python-requests
978 python-retrying))
979 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
980 (synopsis "Python client for DICOMweb RESTful services")
981 (description
982 "@code{dicomweb_client} provides client interfaces for DICOMweb RESTful
983services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
984DICOM objects over the web, respectively.")
985 (license license:expat)))
986
987(define-public python-dnslib
988 (package
989 (name "python-dnslib")
990 (version "0.9.26")
991 (source
992 (origin
993 (method git-fetch)
994 (uri (git-reference
995 (url "https://github.com/paulc/dnslib")
996 (commit version)))
997 (file-name (git-file-name name version))
998 (sha256
999 (base32 "1x1l727qx6x0kw7yhzhxhbm40wgrh367dr3y0vaix0wrhi30qsyk"))))
1000 (build-system pyproject-build-system)
1001 (arguments
1002 (list
1003 #:phases
1004 #~(modify-phases %standard-phases
1005 (replace 'check
1006 (lambda* (#:key tests? #:allow-other-keys)
1007 (when tests?
1008 (invoke "./run_tests.sh")))))))
1009 (native-inputs
1010 (list python-setuptools))
1011 (home-page "https://github.com/paulc/dnslib")
1012 (synopsis "Library to encode/decode DNS wire-format packets")
1013 (description
1014 "This package provides a simple Python library to encode/decode DNS
1015wire-format packets.")
1016 (license license:bsd-3)))
1017
1018(define-public python-docusign-esign
1019 (package
1020 (name "python-docusign-esign")
1021 (version "5.0.0")
1022 (source
1023 (origin
1024 (method url-fetch)
1025 (uri (pypi-uri "docusign-esign" version))
1026 (sha256
1027 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
1028 (build-system pyproject-build-system)
1029 ;; Testing requires undocumented setup changes with network access to
1030 ;; <demo.docusign.net>, and so testing is disabled here.
1031 (arguments `(#:tests? #f))
1032 (native-inputs
1033 (list python-setuptools
1034 python-wheel))
1035 (propagated-inputs
1036 (list python-certifi
1037 python-dateutil
1038 python-urllib3
1039 python-pyjwt
1040 python-cryptography))
1041 (home-page "https://developers.docusign.com/")
1042 (synopsis "DocuSign Python Client")
1043 (description
1044 "The Official DocuSign Python Client Library used to interact with the
1045eSign REST API. Send, sign, and approve documents using this client.")
1046 (license license:expat)))
1047
1048(define-public python-domain-connect
1049 (package
1050 (name "python-domain-connect")
1051 (version "0.0.11")
1052 (source
1053 (origin
1054 (method git-fetch) ;no tests in PyPI archive
1055 (uri (git-reference
1056 (url "https://github.com/Domain-Connect/domainconnect_python")
1057 (commit (string-append "v" version))))
1058 (file-name (git-file-name name version))
1059 (sha256
1060 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
1061 (build-system pyproject-build-system)
1062 (arguments
1063 (list
1064 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
1065 ;; present in container.
1066 #:tests? #f
1067 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
1068 (native-inputs
1069 (list python-setuptools))
1070 (propagated-inputs
1071 (list python-cryptography
1072 python-dnspython
1073 python-future
1074 python-publicsuffixlist))
1075 (home-page "https://github.com/Domain-Connect/domainconnect_python")
1076 (synopsis "Client library for Domain Connect protocol")
1077 (description
1078 "This package provides a Service Provider functionality in both Sync and
1079Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
1080 (license license:expat)))
1081
1082(define-public python-domain-connect-dyndns
1083 (package
1084 (name "python-domain-connect-dyndns")
1085 (version "0.0.9")
1086 (source
1087 (origin
1088 (method url-fetch)
1089 (uri (pypi-uri "domain-connect-dyndns" version))
1090 (sha256
1091 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
1092 (build-system pyproject-build-system)
1093 (arguments
1094 (list
1095 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
1096 ;; present in container.
1097 #:tests? #f
1098 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
1099 (native-inputs
1100 (list python-setuptools
1101 python-wheel))
1102 (propagated-inputs
1103 (list python-dnspython
1104 python-domain-connect
1105 python-requests
1106 python-validators))
1107 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
1108 (synopsis "Domain Connect Dynamic DNS in Python")
1109 ;; Project lacks meaningful description in README, see
1110 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
1111 (description
1112 "Python client library for Dynamic DNS using
1113@url{https://www.domainconnect.org/, Domain Connect} protocol.")
1114 (license license:expat)))
1115
1116(define-public python-dominate
1117 (package
1118 (name "python-dominate")
1119 (version "2.9.1")
1120 (source
1121 (origin
1122 (method git-fetch)
1123 (uri (git-reference
1124 (url "https://github.com/Knio/dominate")
1125 (commit version)))
1126 (file-name (git-file-name name version))
1127 (sha256
1128 (base32 "0kv5ly8w2026pwvgamfjxav1g58wmgim30nr9w9qfwcipfjxwn5c"))))
1129 (build-system pyproject-build-system)
1130 (native-inputs
1131 (list python-pytest
1132 python-setuptools))
1133 (home-page "https://github.com/Knio/dominate")
1134 (synopsis "Python library for creating and manipulating HTML documents")
1135 (description
1136 "Dominate is a Python library for creating and manipulating HTML
1137documents using an elegant DOM API.")
1138 (license license:lgpl3+)))
1139
1140(define-public python-dropbox
1141 (package
1142 (name "python-dropbox")
1143 (version "12.0.2")
1144 (source
1145 (origin
1146 (method git-fetch) ; no tests in PyPI release
1147 (uri (git-reference
1148 (url "https://github.com/dropbox/dropbox-sdk-python")
1149 (commit (string-append "v" version))))
1150 (file-name (git-file-name name version))
1151 (sha256
1152 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
1153 (build-system pyproject-build-system)
1154 (arguments
1155 (list
1156 #:test-flags
1157 #~(list "-k" (string-join
1158 ;; Network access is required.
1159 (list "not test_bad_auth"
1160 "test_app_auth"
1161 "test_bad_pins"
1162 "test_bad_pins_session"
1163 "test_downscope"
1164 "test_multi_auth"
1165 "test_path_root"
1166 "test_path_root_err"
1167 "test_refresh"
1168 "test_rpc"
1169 "test_team"
1170 "test_upload_download"
1171 "test_versioned_route")
1172 " and not "))
1173 #:phases
1174 #~(modify-phases %standard-phases
1175 (add-after 'unpack 'relax-requirements
1176 (lambda _
1177 (substitute* "setup.py"
1178 ;; 'stone>=2,<3.3.3',
1179 ((">=2,<3.3.3") ">=2,<3.4.0"))))
1180 (add-before 'check 'pre-check
1181 (lambda _
1182 ;; Otherwise tests setup erroring.
1183 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
1184 (setenv "LEGACY_USER_CLIENT_ID" "guix")
1185 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
1186 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
1187 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
1188 (setenv "SCOPED_USER_CLIENT_ID" "guix")
1189 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
1190 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
1191 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
1192 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
1193 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
1194 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
1195 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
1196 (native-inputs
1197 (list nss-certs-for-test
1198 python-mock
1199 python-pytest
1200 python-pytest-mock
1201 python-setuptools
1202 python-wheel))
1203 (propagated-inputs
1204 (list python-requests python-six python-stone))
1205 (home-page "https://www.dropbox.com/developers")
1206 (synopsis "Official Dropbox API Client")
1207 (description "This package provides a Python SDK for integrating with the
1208Dropbox API v2.")
1209 (license license:expat)))
1210
1211(define-public python-dukpy
1212 (package
1213 (name "python-dukpy")
1214 (version "0.5.1")
1215 (source
1216 (origin
1217 (method git-fetch)
1218 (uri (git-reference
1219 (url "https://github.com/amol-/dukpy")
1220 (commit version)))
1221 (file-name (git-file-name name version))
1222 (sha256
1223 (base32 "1qsqfgy12frrdikjf353bsvhln11jixc3qs9rc1zra55k0569036"))))
1224 (build-system pyproject-build-system)
1225 (arguments
1226 (list
1227 #:test-flags
1228 #~(list #$@(map (lambda (test)
1229 (string-append "--deselect=tests/test_installer.py"
1230 "::TestPackageInstaller::"
1231 test))
1232 ;; Network access is required.
1233 (list "test_install_command"
1234 "test_install_command_latest_ver"
1235 "test_install_command_substrate_error"
1236 "test_install_command_without_dest"
1237 "test_install_react"
1238 "test_install_scoped_package"
1239 "test_install_unexisting_package"
1240 "test_install_unexisting_version")))))
1241 (native-inputs
1242 (list python-mock
1243 python-pytest
1244 python-setuptools
1245 python-webassets))
1246 (home-page "https://github.com/amol-/dukpy")
1247 (synopsis "Simple JavaScript interpreter for Python")
1248 (description
1249 "DukPy is a simple JavaScript interpreter for Python built on top of
1250duktape engine without any external dependency. It comes with a bunch of
1251common transpilers built-in for convenience:
1252@itemize
1253@item CoffeeScript
1254@item BabelJS
1255@item TypeScript
1256@item JSX
1257@item LESS
1258@end itemize")
1259 (license license:expat)))
1260
1261(define-public python-essentials-openapi
1262 (package
1263 (name "python-essentials-openapi")
1264 (version "1.2.1")
1265 (source
1266 (origin
1267 (method git-fetch)
1268 (uri (git-reference
1269 (url "https://github.com/Neoteroi/essentials-openapi")
1270 (commit (string-append "v" version))))
1271 (file-name (git-file-name name version))
1272 (sha256
1273 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
1274 (build-system pyproject-build-system)
1275 (native-inputs
1276 (list python-flask
1277 python-hatchling
1278 python-pydantic
1279 python-pytest
1280 python-rich))
1281 (propagated-inputs
1282 (list python-essentials
1283 python-httpx
1284 python-jinja2
1285 python-markupsafe
1286 python-pyyaml))
1287 (home-page "https://github.com/Neoteroi/essentials-openapi/")
1288 (synopsis "Generator for OpenAPI Documentation")
1289 (description
1290 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
1291formats. Generator for other kinds of documents from OpenAPI Documentation
1292files.")
1293 (license license:expat)))
1294
1295(define-public python-eventlet
1296 (package
1297 (name "python-eventlet")
1298 (version "0.41.0")
1299 (source
1300 (origin
1301 (method git-fetch)
1302 (uri (git-reference
1303 (url "https://github.com/eventlet/eventlet")
1304 (commit version)))
1305 (file-name (git-file-name name version))
1306 (sha256
1307 (base32 "1rn8f5v08n48dh6aycdxfwz17w4xwkgny7bhy5llqn5dl0g2dw43"))))
1308 (build-system pyproject-build-system)
1309 (arguments
1310 (list
1311 ;; tests: 618 passed, 121 skipped, 20 deselected, 52 warnings
1312 #:test-flags
1313 #~(list
1314 #$@(map (lambda (test)
1315 (string-append "--deselect=tests/" test))
1316 (list
1317 ;; dns.resolver.NoResolverConfiguration: cannot open
1318 ;; /etc/resolv.conf
1319 "greendns_test.py::TestProxyResolver::test_clear"
1320 "greendns_test.py::TinyDNSTests::test_noraise_dns_tcp"
1321 "greendns_test.py::TinyDNSTests::test_raise_dns_tcp"
1322 ;; assert <built-in function gethostbyname> is <function
1323 ;; gethostbyname at 0x7ffff3491120>
1324 "socket_test.py::test_dns_methods_are_green"
1325 ;; socket.gaierror: [Errno -8] Servname not supported for
1326 ;; ai_socktype
1327 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo"
1328 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_idn"
1329 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_inet"
1330 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_inet6"
1331 "greendns_test.py::test_hosts_no_network"
1332 ;; AssertionError: Expected single line "pass" in stdout
1333 "asyncio_test.py::test_asyncio_does_not_use_greendns"
1334 "greendns_test.py::test_import_rdtypes_then_eventlet"
1335 "patcher_test.py::test_patcher_existing_logging_module_lock")))
1336 #:phases
1337 #~(modify-phases %standard-phases
1338 (add-after 'unpack 'avoid-OSError
1339 (lambda _
1340 ;; If eventlet tries to load greendns, an OSError is thrown when
1341 ;; getprotobyname is called. Thankfully there is an environment
1342 ;; variable to disable the greendns import, so use it. Note that
1343 ;; this error is propagated to child packages too, so enforce the
1344 ;; changed default.
1345 (substitute* "eventlet/green/socket.py"
1346 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
1347 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")"))))
1348 (add-before 'check 'pre-check
1349 (lambda _
1350 (setenv "EVENTLET_HUB" "asyncio"))))))
1351 (native-inputs
1352 (list python-hatchling
1353 python-hatch-vcs
1354 python-pytest
1355 python-pytest-aiohttp))
1356 (propagated-inputs
1357 (list python-dnspython
1358 python-greenlet))
1359 (home-page "https://eventlet.net")
1360 (synopsis "Concurrent networking library for Python")
1361 (description
1362 "Eventlet is a concurrent networking library for Python that
1363allows you to change how you run your code, not how you write it.
1364It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1365Coroutines ensure that the developer uses a blocking style of programming
1366that is similar to threading, but provide the benefits of non-blocking I/O.
1367The event dispatch is implicit, which means you can easily use @code{Eventlet}
1368from the Python interpreter, or as a small part of a larger application.
1369
1370Note: In Guix, this package assumes the environment variable
1371@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
1372to anything else.")
1373 (license license:expat)))
1374
1375(define-public python-feedgen
1376 (package
1377 (name "python-feedgen")
1378 (version "1.0.0")
1379 (source
1380 (origin
1381 (method git-fetch)
1382 (uri (git-reference
1383 (url "https://github.com/lkiesow/python-feedgen")
1384 (commit (string-append "v" version))))
1385 (file-name (git-file-name name version))
1386 (sha256
1387 (base32
1388 "1ppwxp9yck29pk2p2dlrrad6rz16l9h4fhcajp9yb7ns94fm5v3l"))))
1389 (build-system pyproject-build-system)
1390 (propagated-inputs
1391 (list python-dateutil
1392 python-lxml))
1393 (native-inputs
1394 (list python-pytest
1395 python-setuptools))
1396 (home-page "https://feedgen.kiesow.be")
1397 (synopsis "Atom and RSS feed generator")
1398 (description
1399 "This module can be used to generate web feeds in both Atom and RSS
1400format. It also extensible and comes with an extension to produce podcasts.")
1401 ;; The README says that this package is released under both licenses, and
1402 ;; permits the user to choose whichever is more convenient to them.
1403 (license (list license:bsd-2
1404 license:lgpl3+))))
1405
1406(define-public python-flask-caching
1407 (package
1408 (name "python-flask-caching")
1409 (version "2.3.1")
1410 (source
1411 (origin
1412 (method url-fetch)
1413 (uri (pypi-uri "flask_caching" version))
1414 (sha256
1415 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
1416 (build-system pyproject-build-system)
1417 (arguments
1418 (list
1419 #:test-flags
1420 ;; Tests requiring running Redis or dated python-cache.
1421 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
1422 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
1423 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
1424 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
1425 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
1426 "-k" "not test_client_override_reflected_on_cachelib_methods")))
1427 (native-inputs
1428 (list python-pytest
1429 python-pytest-asyncio
1430 python-pytest-xprocess
1431 python-setuptools))
1432 (propagated-inputs
1433 (list python-cachelib
1434 python-flask))
1435 (home-page "https://github.com/pallets-eco/flask-caching")
1436 (synopsis "Caching extension for Flask")
1437 (description
1438 "This package provides a caching support to Flask applications, it's a
1439fort ok https://github.com/thadeusb/flask-cache.")
1440 (license license:bsd-3)))
1441
1442(define-public python-flask-paginate
1443 (package
1444 (name "python-flask-paginate")
1445 (version "2024.4.12")
1446 (source
1447 (origin
1448 (method git-fetch)
1449 (uri (git-reference
1450 (url "https://github.com/lixxu/flask-paginate")
1451 (commit (string-append "v" version))))
1452 (file-name (git-file-name name version))
1453 (sha256
1454 (base32 "1q4ajwk0pzc6934g07gdryjcwi6rd9iqcwv5g5s718dfx2bj1831"))))
1455 (arguments
1456 (list #:test-backend #~'custom
1457 #:test-flags #~(list "tests/tests.py")))
1458 (build-system pyproject-build-system)
1459 (native-inputs
1460 (list python-pytest
1461 python-setuptools))
1462 (propagated-inputs
1463 (list python-flask))
1464 (home-page "https://github.com/lixxu/flask-paginate")
1465 (synopsis "Simple paginate support for Flask")
1466 (description
1467 "Flask-paginate is a simple pagination extension for Flask which is
1468inspired by Ruby's will_paginate library. It supports several CSS frameworks.")
1469 (license license:bsd-3)))
1470
1471(define-public python-flask-limiter
1472 (package
1473 (name "python-flask-limiter")
1474 (version "4.1.1")
1475 (source
1476 (origin
1477 (method git-fetch)
1478 (uri (git-reference
1479 (url "https://github.com/alisaifee/flask-limiter")
1480 (commit version)))
1481 (file-name (git-file-name name version))
1482 (sha256
1483 (base32 "18n12iayzw6qqys26824j5lfbphfcammpmyrvys1k0rn4xcbifln"))))
1484 (build-system pyproject-build-system)
1485 (arguments
1486 (list
1487 ;; tests: 155 passed, 620 deselected
1488 #:test-flags
1489 #~(list "-k" (simple-format #f "not (~a)"
1490 (string-join
1491 (append
1492 ;; The test suite spawns storages in Docker.
1493 '("memcache" "reset_unsupported")
1494 '("mongo")
1495 '("redis" "clear_limits"
1496 "constructor_arguments_over_config"
1497 "custom_key_prefix" "fallback_to_memory"))
1498 " or ")))
1499 #:phases
1500 #~(modify-phases %standard-phases
1501 (add-before 'check 'adjust-tests
1502 (lambda _
1503 (substitute* "pytest.ini"
1504 ((".*--cov=.*") ""))
1505 (substitute* (find-files "tests" "\\.py$")
1506 (("import pymemcache.*") "")
1507 (("import pymongo.*") "")
1508 (("import redis.*") "")))))))
1509 (native-inputs (list python-flask-restful
1510 python-hatch-vcs
1511 python-hatchling
1512 python-hiro
1513 python-pytest
1514 python-pytest-check
1515 python-pytest-mock))
1516 (propagated-inputs (list python-flask
1517 python-limits
1518 python-ordered-set
1519 python-rich))
1520 (home-page "https://flask-limiter.readthedocs.org/")
1521 (synopsis "Rate limiting for Flask applications")
1522 (description
1523 "Flask-Limiter adds rate limiting to Flask applications.
1524Rate limits can be configured at different levels such as:
1525
1526@itemize
1527@item Application wide global limits per user
1528@item Default limits per route
1529@item By blueprints
1530@item By class-based views
1531@item By individual routes
1532@end itemize")
1533 (license license:expat)))
1534
1535(define-public python-gdown
1536 (package
1537 (name "python-gdown")
1538 (version "5.2.0")
1539 (source
1540 (origin
1541 (method url-fetch)
1542 (uri (pypi-uri "gdown" version))
1543 (sha256
1544 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
1545 (build-system pyproject-build-system)
1546 (arguments (list #:tests? #f)) ;network access is required
1547 (native-inputs
1548 (list python-hatch-fancy-pypi-readme
1549 python-hatch-vcs
1550 python-hatchling))
1551 (propagated-inputs
1552 (list python-beautifulsoup4
1553 python-filelock
1554 python-requests
1555 python-tqdm))
1556 (home-page "https://github.com/wkentaro/gdown")
1557 (synopsis "Google Drive Public File/Folder Downloader")
1558 (description
1559 "This package implements a functionality to download large files
1560recursively from Google Drive with option to filter them by file
1561formats (PDF/XML/CSV).")
1562 (license license:expat)))
1563
1564(define-public python-globus-sdk
1565 (package
1566 (name "python-globus-sdk")
1567 (version "4.4.0")
1568 (source
1569 (origin
1570 (method git-fetch)
1571 (uri (git-reference
1572 (url "https://github.com/globus/globus-sdk-python")
1573 (commit version)))
1574 (file-name (git-file-name name version))
1575 (sha256
1576 (base32 "1d0zw9dkpdhsf9zdg3nk6b55gqwzc3v2rj76nj7999hjmq8350vh"))))
1577 (build-system pyproject-build-system)
1578 (arguments
1579 (list
1580 #:phases
1581 #~(modify-phases %standard-phases
1582 (add-before 'check 'pre-check
1583 (lambda _ (setenv "HOME" "/tmp"))))))
1584 (native-inputs
1585 (list python-flaky
1586 python-pytest
1587 python-pytest-randomly
1588 python-responses
1589 python-setuptools))
1590 (propagated-inputs
1591 (list python-cryptography
1592 python-importlib-resources
1593 python-pyjwt
1594 python-requests))
1595 (home-page "https://github.com/globus/globus-sdk-python")
1596 (synopsis "Globus SDK for Python")
1597 (description
1598 "This package provides a SDK for convenient Pythonic interface to
1599@url{https://www.globus.org/, Globus} APIs.")
1600 (license license:asl2.0)))
1601
1602(define-public python-guardpost
1603 (package
1604 (name "python-guardpost")
1605 (version "1.0.4")
1606 (source
1607 (origin
1608 (method git-fetch)
1609 (uri (git-reference
1610 (url "https://github.com/Neoteroi/guardpost")
1611 (commit (string-append "v" version))))
1612 (file-name (git-file-name name version))
1613 (sha256
1614 (base32 "1xsakqn36g2h1s5rnbaf1lasx1jn4skqhmb8kdl1k4pgxp5sczyy"))))
1615 (build-system pyproject-build-system)
1616 (arguments
1617 (list
1618 ;; Possible timing issue, see:
1619 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
1620 #:test-flags '(list "--ignore=tests/test_jwts.py")))
1621 (native-inputs
1622 (list python-flask
1623 python-hatchling
1624 python-pytest
1625 python-pytest-asyncio))
1626 (propagated-inputs
1627 (list python-rodi
1628 ;; [optional]
1629 python-cryptography
1630 python-essentials
1631 python-pyjwt))
1632 (home-page "https://github.com/Neoteroi/GuardPost/")
1633 (synopsis
1634 "Authentication and authorization framework for Python applications")
1635 (description
1636 "GuardPost is a framework to handle authentication and
1637authorization in asynchronous Python applications.
1638
1639Its features include
1640
1641@itemize
1642@item Strategy to implement authentication.
1643@item Strategy to implement authorization.
1644@item Support for dependency injection
1645@item Built-in support for JSON Web Tokens (JWTs) authentication.
1646@end itemize")
1647 (license license:expat)))
1648
1649(define-public python-habanero
1650 (package
1651 (name "python-habanero")
1652 (version "2.3.0")
1653 (source
1654 (origin
1655 (method git-fetch)
1656 (uri (git-reference
1657 (url "https://github.com/sckott/habanero")
1658 (commit (string-append "v" version))))
1659 (file-name (git-file-name name version))
1660 (sha256
1661 (base32 "1a842izcc8l4wb8004v92zsq1h4yc7qc2wi9am6x0f7idlx993sw"))))
1662 (build-system pyproject-build-system)
1663 (arguments
1664 ;; Run only a small portion of unit tests without network access
1665 ;; requirement.
1666 (list #:test-flags #~(list "test/test-filters.py")))
1667 (native-inputs
1668 (list python-hatchling
1669 python-pytest))
1670 (propagated-inputs
1671 (list python-httpx
1672 python-packaging
1673 python-tqdm
1674 python-urllib3))
1675 (home-page "https://github.com/sckott/habanero")
1676 (synopsis "Low Level Client for Crossref Search API")
1677 (description
1678 "Low Level Client for
1679@url{https://api.crossref.org/swagger-ui/index.html, Crossref Search API}.")
1680 (license license:expat)))
1681
1682(define-public python-hookdns
1683 (package
1684 (name "python-hookdns")
1685 (version "2.0.0")
1686 (source
1687 (origin
1688 (method url-fetch)
1689 (uri (pypi-uri "hookdns" version))
1690 (sha256
1691 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
1692 (build-system pyproject-build-system)
1693 (arguments
1694 (list
1695 #:test-flags
1696 #~(list "-k" (string-join
1697 ;; Tests requiring networking.
1698 (list
1699 "not test_patch_contextmanager_with_another_hostname"
1700 "test_patch_contextmanager_with_another_hostname_ipv6"
1701 "test_patch_contextmanager_with_ipv4"
1702 "test_patch_contextmanager_with_name"
1703 "test_patch_contextmanager_with_public_fqdn_and_"
1704 "test_patch_contextmanager_with_unknown_hostname"
1705 "test_patch_decorator_with_another_hostname"
1706 "test_patch_decorator_with_another_hostname_ipv6"
1707 "test_patch_decorator_with_ipv4"
1708 "test_patch_decorator_with_name"
1709 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
1710 "test_patch_decorator_with_unknown_hostname"
1711 "test_real_getaddrinfo_with_name_ipv6"
1712 "test_real_getaddrinfo_with_public_fqdn_ipv4"
1713 "test_real_getaddrinfo_with_public_fqdn_ipv6"
1714 "test_real_gethostbyname_ex_with_public_fqdn"
1715 "test_real_gethostbyname_with_public_fqdn"
1716 "test_real_requests_ip"
1717 "test_real_requests_name"
1718 "test_real_requests_with_public_fqdn"
1719 "test_reentrant")
1720 " and not "))))
1721 (native-inputs
1722 (list python-pytest
1723 python-requests
1724 python-setuptools
1725 python-wheel))
1726 (home-page "https://github.com/cle-b/hookdns")
1727 (synopsis "DNS resolution customization library")
1728 (description
1729 "HookDNS implements functionality that allows for modifying name
1730resolution in a Python script without any changes to the hosts file or the use
1731of a fake DNS resolver.")
1732 (license license:asl2.0)))
1733
1734(define-public python-httpcore2
1735 (package
1736 (name "python-httpcore2")
1737 (version "2.4.0")
1738 (source
1739 (origin
1740 (method git-fetch)
1741 (uri (git-reference
1742 (url "https://github.com/pydantic/httpx2")
1743 (commit (string-append "v" version))))
1744 (file-name (git-file-name name version))
1745 (sha256
1746 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
1747 (build-system pyproject-build-system)
1748 (arguments
1749 (list
1750 #:phases
1751 #~(modify-phases %standard-phases
1752 (add-after 'unpack 'preparation
1753 (lambda _
1754 (chdir "src/httpcore2")
1755 (copy-recursively "../../tests/httpcore2" "tests")
1756 (substitute* (find-files "tests" "\\.py$")
1757 (("tests\\.httpcore2") "tests")
1758 (("tests/httpcore2") "tests"))))
1759 (add-before 'build 'set-version
1760 (lambda _
1761 (substitute* "pyproject.toml"
1762 ((".*uv-dynamic-versioning>.*") "")
1763 (("source.*uv-dynamic-versioning.*") "source = 'vcs'"))
1764 (substitute* "httpcore2/__init__.py"
1765 ((".*= version\\(.*")
1766 (format #f "__version__ = ~s~%" #$version))))))))
1767 (native-inputs
1768 (list python-hatch-fancy-pypi-readme
1769 python-hatch-vcs
1770 python-hatchling
1771 python-pytest
1772 python-pytest-httpbin
1773 python-pytest-trio))
1774 (propagated-inputs
1775 (list python-h11
1776 python-truststore
1777 ;; [optional]
1778 python-anyio
1779 python-h2
1780 python-socksio
1781 python-trio))
1782 (home-page "https://github.com/pydantic/httpx2")
1783 (synopsis "Minimal low-level HTTP client")
1784 (description
1785 "The HTTP Core package provides a minimal low-level HTTP client, which
1786does one thing only. Sending HTTP requests.
1787
1788Some things HTTP Core does do:
1789@itemize
1790@item Sending HTTP requests.
1791@item Thread-safe / task-safe connection pooling.
1792@item HTTP(S) proxy & SOCKS proxy support.
1793@item Supports HTTP/1.1 and HTTP/2.
1794@item Provides both sync and async interfaces.
1795@item Async backend support for @code{asyncio} and @code{trio}.
1796@end itemize")
1797 (license license:bsd-3)))
1798
1799(define-public python-httpretty
1800 (package
1801 (name "python-httpretty")
1802 (version "1.1.4")
1803 (source
1804 (origin
1805 (method url-fetch)
1806 (uri (pypi-uri "httpretty" version))
1807 (sha256
1808 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
1809 (build-system pyproject-build-system)
1810 (arguments
1811 (list
1812 #:test-flags
1813 ;; Only run Unit tests.
1814 #~(list "--ignore=tests/bugfixes"
1815 "--ignore=tests/functional"
1816 "--ignore=tests/pyopenssl"
1817 "-k" (string-join
1818 ;; Tests pattern failing with one of these errors:
1819 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
1820 ;; has no attribute 'should'
1821 ;; AttributeError: 'function' object has no attribute
1822 ;; 'when'
1823 ;; AttributeError: 'AssertionBuilder' object has no
1824 ;; attribute 'should_not'
1825 (list "not fake_socket_passes_through"
1826 "fakesock_socket"
1827 "request_parse_body_when"
1828 "test_Entry_class_normalizes_headers"
1829 "test_has_request"
1830 "test_httpretty_should_raise_proper"
1831 "test_parse_request_line_connect"
1832 "test_request_parse_querystring"
1833 "test_request_string_representation"
1834 "test_request_stubs_internals")
1835 " and not "))))
1836 (native-inputs
1837 (list nss-certs-for-test
1838 python-freezegun
1839 python-mock
1840 python-pytest
1841 python-setuptools
1842 python-sure
1843 python-wheel))
1844 (home-page "https://httpretty.readthedocs.io")
1845 (synopsis "HTTP client mock for Python")
1846 (description
1847 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
1848@code{fakeweb}.")
1849 (license license:expat)))
1850
1851(define-public python-httpx2
1852 (package
1853 (name "python-httpx2")
1854 (version "2.4.0")
1855 (source
1856 (origin
1857 (method git-fetch)
1858 (uri (git-reference
1859 (url "https://github.com/pydantic/httpx2")
1860 (commit (string-append "v" version))))
1861 (file-name (git-file-name name version))
1862 (sha256
1863 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
1864 (arguments
1865 (list
1866 ;; tests: 1227 passed, 200 deselected
1867 #:test-flags
1868 ;; Networking tests.
1869 #~(list "-k" (string-join
1870 (list "not test_async_proxy_close[asyncio]"
1871 "test_async_proxy_close[trio]"
1872 "test_auth"
1873 "test_binary"
1874 "test_client_decode_text_using_autodetect"
1875 "test_client_decode_text_using_explicit_encoding"
1876 "test_follow_redirects"
1877 "test_get"
1878 "test_idna_url[http_with_custom_port]"
1879 "test_idna_url[http_with_port]"
1880 "test_idna_url[https_with_custom_port]"
1881 "test_idna_url[https_with_port]"
1882 "test_idna_url[https_without_port]"
1883 "test_idna_url[idna_label_after_ascii_label]"
1884 "test_idna_url[unicode_tr46_compat]"
1885 "test_json"
1886 "test_post"
1887 "test_redirects"
1888 "test_response_decode_text_using_autodetect"
1889 "test_sync_proxy_close"
1890 "test_url_malformed_idna_label_after_ascii_label"
1891 "test_url_mixed_valid_and_malformed_idna_labels"
1892 "test_verbose")
1893 " and not "))
1894 #:phases
1895 #~(modify-phases %standard-phases
1896 (add-after 'unpack 'preparation
1897 (lambda _
1898 (chdir "src/httpx2")
1899 (copy-recursively "../../tests/httpx2" "tests")
1900 (substitute* (find-files "tests" "\\.py$")
1901 (("tests\\.httpx2") "tests")
1902 (("tests/httpx2") "tests"))))
1903 (add-before 'build 'set-version
1904 (lambda _
1905 (substitute* "pyproject.toml"
1906 (("\"uv-dynamic-versioning>=0\\.8\\.0\"") "")
1907 (("source.*uv-dynamic-versioning.*") "source = 'vcs'")
1908 (("\\.uv-dynamic-versioning") ".vcs")))))))
1909 (build-system pyproject-build-system)
1910 (native-inputs
1911 (list python-chardet
1912 python-hatch-fancy-pypi-readme
1913 python-hatch-vcs
1914 python-hatchling
1915 python-pytest
1916 python-trustme
1917 python-uvicorn))
1918 (propagated-inputs
1919 (list python-anyio
1920 python-httpcore2
1921 python-idna
1922 python-truststore
1923 python-typing-extensions ;Python version < 3.13
1924 ;; [optional]
1925 python-brotli
1926 python-click
1927 python-h2
1928 python-pygments
1929 python-rich
1930 python-socksio
1931 python-zstandard))
1932 (home-page "https://github.com/pydantic/httpx2")
1933 (synopsis "The next generation HTTP client")
1934 (description
1935 "HTTPX2 is a fully featured HTTP client library for Python. It includes
1936an integrated command line client, has support for both HTTP/1.1 and HTTP/2,
1937and provides both sync and async APIs.")
1938 (license license:bsd-3)))
1939
1940(define-public python-jiter
1941 (package
1942 (name "python-jiter")
1943 (version "0.15.0")
1944 (source
1945 (origin
1946 (method git-fetch)
1947 (uri (git-reference
1948 (url "https://github.com/pydantic/jiter/")
1949 (commit (string-append "v" version))))
1950 (file-name (git-file-name name version))
1951 (sha256
1952 (base32 "1z2ljacsc64yykkxvjnq6rq4z56xwr8jhcw02ckv6b85kc66x63p"))))
1953 (build-system pyproject-build-system)
1954 (arguments
1955 (list
1956 #:imported-modules (append %cargo-build-system-modules
1957 %pyproject-build-system-modules)
1958 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
1959 (guix build pyproject-build-system)
1960 (guix build utils))
1961 #:phases
1962 #~(modify-phases %standard-phases
1963 (add-after 'unpack 'prepare-cargo-build-system
1964 (lambda args
1965 (for-each (lambda (phase)
1966 (format #t "Running cargo phase: ~a~%" phase)
1967 (apply (assoc-ref cargo:%standard-phases phase)
1968 #:cargo-target #$(cargo-triplet)
1969 args))
1970 '(prepare-rust-crates
1971 unpack-rust-crates
1972 configure
1973 check-for-pregenerated-files
1974 patch-cargo-checksums))))
1975 (add-after 'prepare-cargo-build-system 'chdir
1976 (lambda _
1977 (chdir "crates/jiter-python"))))))
1978 (native-inputs
1979 (append (list maturin
1980 python-dirty-equals
1981 python-pytest
1982 rust
1983 `(,rust "cargo"))
1984 (or (and=> (%current-target-system)
1985 (compose list make-rust-sysroot))
1986 '())))
1987 (inputs (cargo-inputs 'jiter))
1988 (home-page "https://github.com/pydantic/jiter/")
1989 (synopsis "Iterable JSON parser")
1990 (description
1991 "This package provides a fast Python iterable JSON parser, backed by Rust
1992libraries.")
1993 (license license:bsd-3)))
1994
1995(define-public python-justhtml
1996 (package
1997 (name "python-justhtml")
1998 (version "1.13.0")
1999 (source
2000 (origin
2001 (method git-fetch)
2002 (uri (git-reference
2003 (url "https://github.com/emilstenstrom/justhtml")
2004 (commit (string-append "v" version))))
2005 (file-name (git-file-name name version))
2006 (sha256
2007 (base32 "1hy5w3lr08sj3pivs46nnlfsvrd9ynmicxcrjk4sxbpg7411lyj5"))))
2008 (build-system pyproject-build-system)
2009 (native-inputs
2010 (list python-hatchling))
2011 (home-page "https://github.com/emilstenstrom/justhtml")
2012 (synopsis "Pure Python HTML5 parser")
2013 (description
2014 "JustHTML is a pure Python HTML5 parser. It has a simple API and does
2015not require C extensions or system dependencies.")
2016 (license license:expat)))
2017
2018(define-public python-hf-xet
2019 (package
2020 (name "python-hf-xet")
2021 (version "1.5.1")
2022 (source
2023 (origin
2024 (method git-fetch)
2025 (uri (git-reference
2026 (url "https://github.com/huggingface/xet-core")
2027 (commit (string-append "v" version))))
2028 (file-name (git-file-name name version))
2029 (sha256
2030 (base32 "0bczy0a8g7fnscpz2plq2pq0b8vapx9q5sny13rs2fa04ypq992f"))
2031 (modules '((guix build utils)))
2032 (snippet #~(for-each delete-file
2033 (find-files "." "Cargo\\.lock$")))))
2034 (build-system pyproject-build-system)
2035 (arguments
2036 (list
2037 #:imported-modules (append %cargo-build-system-modules
2038 %pyproject-build-system-modules)
2039 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
2040 (guix build pyproject-build-system)
2041 (guix build utils))
2042 #:phases
2043 #~(modify-phases %standard-phases
2044 (add-after 'unpack 'prepare-cargo-build-system
2045 (lambda args
2046 (for-each (lambda (phase)
2047 (format #t "Running cargo phase: ~a~%" phase)
2048 (apply (assoc-ref cargo:%standard-phases phase)
2049 #:cargo-target #$(cargo-triplet)
2050 args))
2051 '(prepare-rust-crates
2052 unpack-rust-crates
2053 configure
2054 check-for-pregenerated-files
2055 patch-cargo-checksums))))
2056 (add-after 'prepare-cargo-build-system 'chdir
2057 (lambda _
2058 (chdir "hf_xet"))))))
2059 (native-inputs
2060 (append (list maturin
2061 python-pytest
2062 rust
2063 `(,rust "cargo"))
2064 (or (and=> (%current-target-system)
2065 (compose list make-rust-sysroot))
2066 '())))
2067 (inputs (cargo-inputs 'hf_xet))
2068 (home-page "https://github.com/huggingface/xet-core")
2069 (synopsis "Transfer large files with the Hugging Face Hub")
2070 (description
2071 "This package enables @code{python-huggingface-hub} to utilize xet
2072storage for uploading and downloading to HF Hub. Xet storage provides
2073chunk-based deduplication, efficient storage/retrieval with local disk
2074caching, and backwards compatibility with Git LFS. This library is not meant
2075to be used directly, and is instead intended to be used from
2076@code{python-huggingface-hub}.")
2077 (license license:asl2.0)))
2078
2079(define-public python-huggingface-hub
2080 (package
2081 (name "python-huggingface-hub")
2082 (version "0.36.2")
2083 (source
2084 (origin
2085 (method git-fetch)
2086 (uri (git-reference
2087 (url "https://github.com/huggingface/huggingface_hub")
2088 (commit (string-append "v" version))))
2089 (file-name (git-file-name name version))
2090 (sha256
2091 (base32 "0hgdkfp7472sp0fjm5mwsx2rdlbr2ms8mzfzs0zr501gdwr7jjki"))))
2092 (build-system pyproject-build-system)
2093 (arguments
2094 (list
2095 #:test-flags
2096 ;; We don't have sentence_transformers...
2097 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
2098 ;; ...nor do we have InquirerPy...
2099 "--ignore=tests/test_command_delete_cache.py"
2100 ;; ...or timm...
2101 "--ignore=contrib/timm/test_timm.py"
2102 ;; ...or spacy_huggingface_hub
2103 "--ignore=contrib/spacy/test_spacy.py"
2104 ;; These all require internet access
2105 "--ignore=tests/test_cache_no_symlinks.py"
2106 "--ignore=tests/test_cache_layout.py"
2107 "--ignore=tests/test_commit_scheduler.py"
2108 "--ignore=tests/test_file_download.py"
2109 "--ignore=tests/test_hf_api.py"
2110 "--ignore=tests/test_hf_file_system.py"
2111 "--ignore=tests/test_inference_api.py"
2112 "--ignore=tests/test_inference_async_client.py"
2113 "--ignore=tests/test_inference_client.py"
2114 "--ignore=tests/test_inference_text_generation.py"
2115 "--ignore=tests/test_login_utils.py"
2116 "--ignore=tests/test_offline_utils.py"
2117 "--ignore=tests/test_repocard.py"
2118 "--ignore=tests/test_repository.py"
2119 "--ignore=tests/test_snapshot_download.py"
2120 "--ignore=tests/test_utils_cache.py"
2121 "--ignore=tests/test_utils_git_credentials.py"
2122 "--ignore=tests/test_utils_http.py"
2123 "--ignore=tests/test_utils_pagination.py"
2124 "--ignore=tests/test_webhooks_server.py"
2125 "-k" (string-append
2126 "not test_push_to_hub"
2127 " and not test_from_pretrained_model_id_only"
2128 " and not test_from_pretrained_model_id_and_revision"
2129 ;; These all require internet access
2130 " and not test_auth"
2131 " and not test_oauth"
2132 " and not test_utils_sha"
2133 " and not test_inference_providers"
2134 " and not test_xet"))
2135 #:phases
2136 '(modify-phases %standard-phases
2137 (add-before 'check 'pre-check
2138 ;; Some tests need to write to HOME.
2139 (lambda _ (setenv "HOME" "/tmp"))))))
2140 (propagated-inputs
2141 (list python-filelock
2142 python-fsspec
2143 python-hf-xet
2144 python-packaging
2145 python-pyyaml
2146 python-requests
2147 python-tqdm
2148 python-typing-extensions))
2149 (native-inputs
2150 (list python-aiohttp
2151 python-fastapi
2152 python-jedi
2153 python-jinja2
2154 python-numpy
2155 python-pillow
2156 python-pydantic
2157 python-pytest
2158 python-pytest-asyncio
2159 python-pytest-env
2160 python-pytest-mock
2161 python-pytest-rerunfailures
2162 python-pytest-vcr
2163 python-pytest-xdist
2164 python-setuptools
2165 python-types-requests
2166 python-types-toml
2167 python-types-urllib3
2168 python-typing-extensions
2169 python-urllib3))
2170 (home-page "https://huggingface.co/docs/huggingface_hub/")
2171 (synopsis "Client library for accessing the huggingface.co hub")
2172 (description
2173 "This package provides a client library to download and publish models,
2174datasets and other repos on the @url{huggingface.co} hub.")
2175 (license license:asl2.0)))
2176
2177(define-public python-kubernetes
2178 (package
2179 (name "python-kubernetes")
2180 (version "35.0.0")
2181 (source
2182 (origin
2183 (method url-fetch)
2184 (uri (pypi-uri "kubernetes" version))
2185 (sha256
2186 (base32 "1vh9bzq175fzv9av3v37lcfh37yzss2d9vxrb0a84fa2ji2d601x"))))
2187 (build-system pyproject-build-system)
2188 (arguments
2189 (list
2190 #:test-flags
2191 #~(list
2192 ;; The following tests expect a local running Kubernetes cluster.
2193 "--ignore=kubernetes/e2e_test"
2194 "--ignore=kubernetes/dynamic")))
2195 (native-inputs
2196 (list python-pytest
2197 python-setuptools))
2198 (propagated-inputs
2199 (list python-certifi
2200 python-dateutil
2201 python-durationpy
2202 python-google-auth
2203 python-pyyaml
2204 python-requests
2205 python-requests-oauthlib
2206 python-six ;XXX: hard dependency
2207 python-urllib3
2208 python-websocket-client))
2209 (home-page "https://github.com/kubernetes-client/python")
2210 (synopsis "Python client for Kubernetes")
2211 (description
2212 "This package provides an official Python client library for
2213@url{http://kubernetes.io, Kubernetes}.")
2214 (license license:asl2.0)))
2215
2216(define-public python-lazr-restfulclient
2217 (package
2218 (name "python-lazr-restfulclient")
2219 (version "0.14.6")
2220 (source
2221 (origin
2222 (method url-fetch)
2223 (uri (pypi-uri "lazr.restfulclient" version))
2224 (sha256
2225 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
2226 (build-system pyproject-build-system)
2227 (arguments
2228 (list
2229 #:phases
2230 #~(modify-phases %standard-phases
2231 ;; Disable part of the test suite to avoid the lazr.authentication
2232 ;; requirement, which requires 'oauth', a Python 2 only library.
2233 (add-after 'unpack 'remove-some-checks
2234 (lambda _
2235 (with-directory-excursion "src/lazr/restfulclient/tests"
2236 (for-each delete-file '("test_oauth.py" "test_docs.py")))
2237 (substitute* "setup.py"
2238 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
2239 ""))))
2240 (replace 'check
2241 (lambda* (#:key tests? #:allow-other-keys)
2242 (if tests?
2243 (invoke "zope-testrunner" "--test-path=src")
2244 (format #t "test suite not run~%")))))))
2245 (native-inputs
2246 (list python-setuptools
2247 python-testtools
2248 python-wheel
2249 python-wsgi-intercept
2250 python-zope-testrunner))
2251 (propagated-inputs
2252 (list python-distro
2253 python-httplib2
2254 python-oauthlib
2255 python-pyparsing
2256 python-setuptools
2257 python-six
2258 python-wadllib))
2259 (home-page "https://launchpad.net/lazr.restfulclient")
2260 (synopsis "Web client Python library extending wadlib")
2261 (description "This package provides a programmable client library that
2262adds functionality on top of @code{wadlib}.")
2263 (license license:lgpl3+)))
2264
2265(define-public python-launchpadlib
2266 (package
2267 (name "python-launchpadlib")
2268 (version "2.1.0")
2269 (source
2270 (origin
2271 (method url-fetch)
2272 (uri (pypi-uri "launchpadlib" version))
2273 (sha256
2274 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
2275 (build-system pyproject-build-system)
2276 (arguments
2277 (list #:phases #~(modify-phases %standard-phases
2278 (add-before 'check 'set-home
2279 (lambda _
2280 ;; Tests require a writable home.
2281 (setenv "HOME" "/tmp"))))))
2282 (propagated-inputs
2283 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
2284 (native-inputs (list python-pytest python-testresources python-wadllib
2285 python-setuptools python-wheel))
2286 (home-page "https://documentation.ubuntu.com/launchpad")
2287 (synopsis "Python client library for Launchpad's web service")
2288 (description "@code{launchpadlib} is a Python library that allows
2289scripting Launchpad via its the web service API.")
2290 (license license:lgpl3+)))
2291
2292(define-public python-lazr-uri
2293 (package
2294 (name "python-lazr-uri")
2295 (version "1.0.7")
2296 (source
2297 (origin
2298 (method url-fetch)
2299 (uri (pypi-uri "lazr_uri" version))
2300 (sha256
2301 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
2302 (build-system pyproject-build-system)
2303 (arguments
2304 (list
2305 #:phases
2306 #~(modify-phases %standard-phases
2307 (replace 'check
2308 (lambda* (#:key tests? #:allow-other-keys)
2309 (if tests?
2310 (invoke "zope-testrunner" "--test-path=src")
2311 (format #t "test suite not run~%")))))))
2312 (native-inputs (list python-setuptools python-zope-testrunner))
2313 (home-page "https://launchpad.net/lazr.uri")
2314 (synopsis "Python URI manipulation library")
2315 (description "This Python package provides a self-contained, easily
2316reusable library for parsing, manipulating, and generating URIs.")
2317 (license license:lgpl3)))
2318
2319(define-public python-ldaptor
2320 (package
2321 (name "python-ldaptor")
2322 (version "21.2.0")
2323 (source
2324 (origin
2325 (method url-fetch)
2326 (uri (pypi-uri "ldaptor" version))
2327 (sha256
2328 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
2329 (build-system pyproject-build-system)
2330 (arguments
2331 (list
2332 #:test-flags
2333 #~(list "-m" "twisted.trial"
2334 (string-append "-j" (number->string (parallel-job-count)))
2335 "ldaptor")
2336 #:phases
2337 #~(modify-phases %standard-phases
2338 (add-after 'unpack 'python-3.12-patch
2339 (lambda _
2340 (substitute* "ldaptor/config.py"
2341 (("SafeConfigParser")
2342 "ConfigParser"))))
2343 (add-before 'check 'disable-failing-tests
2344 (lambda _
2345 ;; Testing with Twisted 22.4 results in infinite loop creating
2346 ;; temporary config files, see
2347 ;; <https://github.com/twisted/ldaptor/issues/238>.
2348 (delete-file "ldaptor/test/test_config.py")))
2349 (replace 'check
2350 (lambda* (#:key tests? test-flags #:allow-other-keys)
2351 (when tests?
2352 (apply invoke "python" test-flags)))))))
2353 (native-inputs
2354 (list python-setuptools
2355 python-wheel))
2356 (propagated-inputs
2357 (list python-passlib
2358 python-pyopenssl
2359 python-service-identity ; to pass sanity check, for Twisted[tls]
2360 python-pyparsing
2361 python-twisted
2362 python-zope-interface))
2363 (home-page "https://github.com/twisted/ldaptor")
2364 (synopsis "Pure-Python Twisted library for LDAP")
2365 (description
2366 "This package provides a Python Twisted library for LDAP, which key
2367feaatures are:
2368@itemize
2369@item LDAP client logic
2370@item separately-accessible LDAP and BER protocol message generation/parsing
2371@item ASCII-format LDAP filter generation and parsing
2372@item LDIF format data generation
2373@item Samba password changing logic
2374@end itemize")
2375 (license license:expat)))
2376
2377(define-public python-legacy-cgi
2378 (package
2379 (name "python-legacy-cgi")
2380 (version "2.6.1")
2381 (source
2382 (origin
2383 (method url-fetch)
2384 (uri (pypi-uri "legacy_cgi" version))
2385 (sha256
2386 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
2387 (build-system pyproject-build-system)
2388 (native-inputs (list python-poetry-core python-pytest))
2389 (home-page "https://github.com/jackrosenthal/legacy-cgi")
2390 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
2391 (description
2392 "This is a fork of the standard library modules @code{cgi} and
2393@code{cgitb}. They are slated to be removed from the Python standard library
2394in Python 3.13 by PEP-594.")
2395 (license license:psfl)))
2396
2397(define-public python-librouteros
2398 (package
2399 (name "python-librouteros")
2400 (version "4.0.0")
2401 (source
2402 (origin
2403 (method git-fetch)
2404 (uri (git-reference
2405 (url "https://github.com/luqasz/librouteros")
2406 (commit version)))
2407 (file-name (git-file-name name version))
2408 (sha256
2409 (base32 "0in952b2idb5j8v6sxfm21gqbr5i5776w5ir0hdsxjrl2f29305v"))))
2410 (build-system pyproject-build-system)
2411 (arguments
2412 (list
2413 #:build-backend "hatchling.build"
2414 #:test-flags
2415 #~(list "tests/unit")))
2416 (native-inputs
2417 (list python-hatchling
2418 python-pytest
2419 python-pytest-asyncio
2420 python-stamina))
2421 (home-page "https://github.com/luqasz/librouteros")
2422 (synopsis "Python implementation of MikroTik RouterOS API")
2423 (description
2424 "This package implements MikroTik's @code{RouterOS} API.")
2425 (license license:gpl2+)))
2426
2427(define-public python-opentelemetry-api
2428 (package
2429 (name "python-opentelemetry-api")
2430 (version "1.37.0")
2431 (source
2432 (origin
2433 (method url-fetch)
2434 (uri (pypi-uri "opentelemetry_api" version))
2435 (sha256
2436 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
2437 (build-system pyproject-build-system)
2438 (propagated-inputs (list python-importlib-metadata
2439 python-typing-extensions))
2440 (native-inputs (list python-hatchling
2441 python-opentelemetry-test-utils-bootstrap))
2442 (home-page "https://opentelemetry.io/docs/languages/python/")
2443 (synopsis "OpenTelemetry Python API")
2444 (description "@code{OpenTelemetry} Python API.")
2445 (license license:asl2.0)))
2446
2447(define-public python-opentelemetry-api-bootstrap
2448 (hidden-package
2449 (package/inherit python-opentelemetry-api
2450 (name "python-opentelemetry-api-bootstrap")
2451 (arguments
2452 (list
2453 #:tests? #f))
2454 (native-inputs (list python-hatchling)))))
2455
2456(define-public python-opentelemetry-sdk
2457 (package
2458 (name "python-opentelemetry-sdk")
2459 (version "1.37.0")
2460 (source
2461 (origin
2462 (method url-fetch)
2463 (uri (pypi-uri "opentelemetry_sdk" version))
2464 (sha256
2465 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
2466 (build-system pyproject-build-system)
2467 (propagated-inputs (list python-opentelemetry-api
2468 python-opentelemetry-semantic-conventions
2469 python-typing-extensions))
2470 (native-inputs (list python-hatchling
2471 python-opentelemetry-test-utils-bootstrap
2472 python-pytest))
2473 (home-page "https://opentelemetry.io/docs/languages/python/")
2474 (synopsis "OpenTelemetry Python SDK")
2475 (description "@code{OpenTelemetry} Python SDK.")
2476 (license license:asl2.0)))
2477
2478(define-public python-opentelemetry-sdk-bootstrap
2479 (hidden-package
2480 (package/inherit python-opentelemetry-sdk
2481 (name "python-opentelemetry-sdk-bootstrap")
2482 (arguments (list #:tests? #f))
2483 (propagated-inputs (list python-opentelemetry-api-bootstrap
2484 python-opentelemetry-semantic-conventions-bootstrap))
2485 (native-inputs (list python-hatchling)))))
2486
2487(define-public python-opentelemetry-semantic-conventions
2488 (package
2489 (name "python-opentelemetry-semantic-conventions")
2490 (version "0.58b0")
2491 (source
2492 (origin
2493 (method url-fetch)
2494 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
2495 (sha256
2496 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
2497 (build-system pyproject-build-system)
2498 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
2499 (native-inputs (list python-hatchling))
2500 (home-page "https://opentelemetry.io/docs/languages/python/")
2501 (synopsis "OpenTelemetry Semantic Conventions")
2502 (description "@code{OpenTelemetry} Semantic Conventions.")
2503 (license license:asl2.0)))
2504
2505(define-public python-opentelemetry-semantic-conventions-bootstrap
2506 (hidden-package
2507 (package/inherit python-opentelemetry-semantic-conventions
2508 (name "python-opentelemetry-semantic-conventions-bootstrap")
2509 (arguments
2510 (list
2511 #:tests? #f))
2512 (propagated-inputs (list python-opentelemetry-api-bootstrap
2513 python-typing-extensions)))))
2514
2515(define-public python-opentelemetry-test-utils
2516 (package
2517 (name "python-opentelemetry-test-utils")
2518 (version "0.58b0")
2519 (source
2520 (origin
2521 (method url-fetch)
2522 (uri (pypi-uri "opentelemetry_test_utils" version))
2523 (sha256
2524 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
2525 (build-system pyproject-build-system)
2526 (arguments (list #:tests? #f)) ; No tests in the wheel.
2527 (propagated-inputs
2528 (list python-asgiref
2529 python-opentelemetry-api
2530 python-opentelemetry-sdk))
2531 (native-inputs (list python-hatchling))
2532 (home-page "https://opentelemetry.io/docs/languages/python/")
2533 (synopsis "Test utilities for OpenTelemetry unit tests")
2534 (description "Test utilities for @code{OpenTelemetry} unit tests.")
2535 (license license:asl2.0)))
2536
2537(define-public python-opentelemetry-test-utils-bootstrap
2538 (hidden-package
2539 (package/inherit python-opentelemetry-test-utils
2540 (name "python-opentelemetry-test-utils-bootstrap")
2541 (propagated-inputs
2542 (list python-asgiref
2543 python-opentelemetry-api-bootstrap
2544 python-opentelemetry-sdk-bootstrap)))))
2545
2546(define-public python-pathy
2547 (package
2548 (name "python-pathy")
2549 (version "0.11.0")
2550 (source
2551 (origin
2552 (method url-fetch)
2553 (uri (pypi-uri "pathy" version))
2554 (sha256
2555 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
2556 (build-system pyproject-build-system)
2557 (native-inputs
2558 (list python-mock
2559 python-pytest
2560 python-setuptools))
2561 (propagated-inputs
2562 (list python-pathlib-abc-for-python-pathy
2563 python-smart-open-6
2564 python-typer))
2565 (home-page "https://github.com/justindujardin/pathy")
2566 (synopsis "Path interface for local and cloud bucket storage")
2567 (description "Pathy is a python package (with type annotations) for
2568working with Cloud Bucket storage providers using a @code{pathlib} interface.
2569It provides @code{pathlib.Path} subclasses for local and cloud bucket
2570storage.")
2571 (license license:asl2.0)))
2572
2573(define-public python-portend
2574 (package
2575 (name "python-portend")
2576 (version "3.2.1")
2577 (source
2578 (origin
2579 (method url-fetch)
2580 (uri (pypi-uri "portend" version))
2581 (sha256
2582 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
2583 (build-system pyproject-build-system)
2584 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
2585 ;; download dependencies.
2586 (arguments
2587 '(#:test-flags '("-k" "not project")))
2588 (native-inputs
2589 (list python-pytest
2590 python-setuptools
2591 python-setuptools-scm))
2592 (propagated-inputs
2593 (list python-tempora))
2594 (home-page "https://github.com/jaraco/portend")
2595 (synopsis "Monitor TCP ports for bound or unbound states")
2596 (description
2597 "@code{python-portend} can be used to monitor TCP ports for bound or
2598unbound states. For example, waiting for a port to be occupied or freed
2599within a set timeout. @code{python-portend} can also be used directly from
2600the command line.")
2601 (license license:expat)))
2602
2603(define-public python-prawcore
2604 (package
2605 (name "python-prawcore")
2606 (version "4.0.0")
2607 (source
2608 (origin
2609 (method git-fetch)
2610 (uri (git-reference
2611 (url "https://github.com/praw-dev/prawcore")
2612 (commit (string-append "v" version))))
2613 (file-name (git-file-name name version))
2614 (sha256
2615 (base32 "1kqqv1n9bibxfgagbyd8vl0yzrd4lr58xl59swz5v70w0kfap5fm"))))
2616 (build-system pyproject-build-system)
2617 (arguments
2618 (list
2619 ;; This test fails with a str rather than a bytes-like object.
2620 #:test-flags #~(list "-k" "not test_request__service_unavailable")))
2621 (native-inputs
2622 (list nss-certs-for-test
2623 python-betamax
2624 python-betamax-matchers
2625 python-betamax-serializers
2626 python-hatchling
2627 python-mock
2628 python-pytest
2629 python-testfixtures
2630 python-vcrpy))
2631 (propagated-inputs
2632 (list python-requests))
2633 (synopsis "Core component of PRAW")
2634 (description "PRAWcore is a low-level communication layer used by PRAW.")
2635 (home-page "https://praw.readthedocs.io/en/latest/")
2636 (license license:bsd-2)))
2637
2638(define-public python-praw
2639 (package
2640 (name "python-praw")
2641 (version "8.0.2")
2642 (source
2643 (origin
2644 (method git-fetch)
2645 (uri (git-reference
2646 (url "https://github.com/praw-dev/praw")
2647 (commit (string-append "v" version))))
2648 (file-name (git-file-name name version))
2649 (sha256
2650 (base32 "15kwvkc6ag83p3mrfnq6ffyvbw4d3njx0dl0vv00y7724b2rpqxw"))))
2651 (build-system pyproject-build-system)
2652 (arguments
2653 (list #:test-flags
2654 #~(list "--ignore=tests/units/models"
2655 "--ignore=tests/integration/models"
2656 "--ignore=tests/unit/test_config.py"
2657 "--ignore=tests/integration/test_reddit.py")))
2658 (native-inputs
2659 (list nss-certs-for-test
2660 python-betamax
2661 python-betamax-matchers
2662 python-hatchling
2663 python-pytest
2664 python-vcrpy))
2665 (propagated-inputs
2666 (list python-defusedxml
2667 python-prawcore
2668 python-update-checker
2669 python-websocket-client))
2670 (synopsis "Python Reddit API Wrapper")
2671 (description "PRAW is a Python package that allows for simple access to
2672Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
2673API rules.")
2674 (home-page "https://praw.readthedocs.io/en/latest/")
2675 (license license:bsd-2)))
2676
2677(define-public python-frozenlist
2678 (package
2679 (name "python-frozenlist")
2680 (version "1.8.0")
2681 (source
2682 (origin
2683 (method git-fetch)
2684 (uri (git-reference
2685 (url "https://github.com/aio-libs/frozenlist")
2686 (commit (string-append "v" version))))
2687 (file-name (git-file-name name version))
2688 (sha256
2689 (base32 "0r1kxf5b562zrn04nl912i6a8y1fyc891l1284v0zj9llb97limy"))))
2690 ;; XXX: Without "wheel", the 'install phase can't find the wheel.
2691 (outputs (list "out" "wheel"))
2692 (build-system pyproject-build-system)
2693 ;; The configuration contains explicit early calls to pytest_cov.
2694 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
2695 (native-inputs
2696 (list python-cython
2697 python-expandvars
2698 python-pytest
2699 python-setuptools
2700 python-tomli))
2701 (home-page "https://github.com/aio-libs/frozenlist")
2702 (synopsis "List-like data structure for Python")
2703 (description "@code{frozenlist.FrozenList} is a list-like structure which
2704implements @code{collections.abc.MutableSequence}. It can be made immutable
2705by calling @code{FrozenList.freeze}.")
2706 (license license:asl2.0)))
2707
2708(define-public python-aiobotocore
2709 (package
2710 (name "python-aiobotocore")
2711 (version "3.0.0")
2712 (source
2713 (origin
2714 (method url-fetch)
2715 (uri (pypi-uri "aiobotocore" version))
2716 (sha256
2717 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
2718 (build-system pyproject-build-system)
2719 (arguments
2720 ;; TODO: Tests need some setupt, see Makefile.
2721 (list #:tests? #f))
2722 (native-inputs
2723 (list python-setuptools))
2724 (propagated-inputs
2725 (list python-aiohttp
2726 python-aioitertools
2727 python-botocore
2728 python-dateutil
2729 python-jmespath
2730 python-multidict
2731 python-typing-extensions
2732 python-wrapt))
2733 (home-page "https://github.com/aio-libs/aiobotocore")
2734 (synopsis "Async client for AWS services using botocore and aiohttp")
2735 (description "This package provides an async client for Amazon services
2736using botocore and aiohttp/asyncio. This library is a mostly full featured
2737asynchronous version of botocore.")
2738 (license license:asl2.0)))
2739
2740(define-public python-aiohappyeyeballs
2741 (package
2742 (name "python-aiohappyeyeballs")
2743 (properties '((commit . "cc53cf8a1d31f7b460a0114214aac66956f0e2ed")
2744 (revision . "0")))
2745 (version (git-version "2.6.1"
2746 (assoc-ref properties 'revision)
2747 (assoc-ref properties 'commit)))
2748 (source
2749 (origin
2750 (method git-fetch)
2751 (uri (git-reference
2752 (url "https://github.com/aio-libs/aiohappyeyeballs")
2753 (commit (assoc-ref properties 'commit))))
2754 (file-name (git-file-name name version))
2755 (sha256
2756 (base32 "0nc723f4sxryg5h9z8paysmy9dnqw2jy4srxp9axrxkv9qrawa7n"))))
2757 (build-system pyproject-build-system)
2758 (native-inputs
2759 (list python-poetry-core
2760 python-pytest
2761 python-pytest-asyncio))
2762 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
2763 (synopsis "Happy Eyeballs for asyncio")
2764 (description "This library exists to allow connecting with Happy
2765Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
2766DNS name.")
2767 (license license:psfl)))
2768
2769(define-public python-aioitertools
2770 (package
2771 (name "python-aioitertools")
2772 (version "0.12.0")
2773 (source
2774 (origin
2775 (method url-fetch)
2776 (uri (pypi-uri "aioitertools" version))
2777 (sha256
2778 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
2779 (build-system pyproject-build-system)
2780 (arguments
2781 (list #:test-backend #~'custom
2782 #:test-flags #~(list "-m" "aioitertools.tests")))
2783 (native-inputs
2784 (list python-flit-core))
2785 (home-page "https://pypi.org/project/aioitertools/")
2786 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
2787 (description
2788 "This package provides an implementation of itertools, builtins, and more
2789for AsyncIO and mixed-type iterables.")
2790 (license license:expat)))
2791
2792(define-public python-aiosignal
2793 (package
2794 (name "python-aiosignal")
2795 (version "1.4.0")
2796 (source
2797 (origin
2798 (method url-fetch)
2799 (uri (pypi-uri "aiosignal" version))
2800 (sha256
2801 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
2802 (build-system pyproject-build-system)
2803 (arguments
2804 (list
2805 #:phases
2806 #~(modify-phases %standard-phases
2807 (add-after 'unpack 'avoid-pytest-cov-preload
2808 (lambda _
2809 (substitute* "pytest.ini"
2810 (("-p pytest_cov") "")))))))
2811 (native-inputs
2812 (list python-pytest
2813 python-pytest-asyncio
2814 python-setuptools))
2815 (propagated-inputs
2816 (list python-frozenlist))
2817 (home-page "https://github.com/aio-libs/aiosignal")
2818 (synopsis "Callback manager for Python @code{asyncio} projects")
2819 (description "This Python module provides @code{Signal}, an abstraction to
2820register asynchronous callbacks. The @code{Signal} abstraction can be used
2821for adding, removing and dropping callbacks.")
2822 (license license:asl2.0)))
2823
2824(define-public python-aiohttp
2825 (package
2826 (name "python-aiohttp")
2827 (version "3.13.5")
2828 (source
2829 (origin
2830 (method git-fetch)
2831 (uri (git-reference
2832 (url "https://github.com/aio-libs/aiohttp/")
2833 (commit (string-append "v" version))))
2834 (file-name (git-file-name name version))
2835 (sha256
2836 (base32 "0l9jcmhqd2v97gy1bxvimwi3aajxhxqn6jkzzgg7cf42mpyza0vc"))
2837 (snippet
2838 #~(begin
2839 (use-modules ((guix build utils)))
2840 (delete-file-recursively "vendor")))))
2841 (build-system pyproject-build-system)
2842 (arguments
2843 (list
2844 ;; tests: 4003 passed, 80 skipped, 31 xfailed, 2 subtests passed
2845 #:test-flags
2846 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
2847 ;; This tests requires the 'proxy.py' module, not yet packaged.
2848 "--ignore=tests/test_proxy_functional.py"
2849 ;; No benchamrks.
2850 "--ignore-glob=tests/test_benchmarks_*"
2851 "-k"
2852 (string-join
2853 ;; Combinatin of tests failing with similar errors:
2854 ;; - Cannot connect to host example.com:443 ssl:default [Could
2855 ;; not contact DNS servers].
2856 ;; - aiohttp.http_exceptions.ContentEncodingError: 400.
2857 ;; - Can not decode content-encoding: br
2858 (list "not test_add_static_path_resolution"
2859 "test_empty_header_name"
2860 "test_http_payload_brotli"
2861 "test_http_payload_zstandard"
2862 "test_invalid_header_spacing"
2863 "test_payload_decompress_size_limit_brotli"
2864 "test_reject_obsolete_line_folding"
2865 "test_response_with_precompressed_body_brotli"
2866 "test_static_file_custom_content_type_compress"
2867 "test_static_file_with_encoding_and_enable_compression"
2868 "test_tcp_connector_ssl_shutdown_timeout_nonzero_passed"
2869 "test_tcp_connector_ssl_shutdown_timeout_passed_to_"
2870 "test_tcp_connector_ssl_shutdown_timeout_zero_not_")
2871 " and not "))
2872 #:phases
2873 #~(modify-phases %standard-phases
2874 (add-after 'unpack 'set-libllhtp-pkgconfig
2875 (lambda _
2876 ;; pkg-config can't find the libllhttp library.
2877 (if (getenv "PKG_CONFIG_PATH")
2878 (setenv "PKG_CONFIG_PATH"
2879 (string-append
2880 #$(this-package-input "llhttp") "/lib/pkgconfig"
2881 (getenv "PKG_CONFIG_PATH")))
2882 (setenv "PKG_CONFIG_PATH"
2883 (string-append
2884 #$(this-package-input "llhttp") "/lib/pkgconfig")))))
2885 (add-after 'unpack 'fix-pytest-config
2886 (lambda _
2887 (substitute* "setup.cfg"
2888 (("--numprocesses=auto") "")
2889 (("-p pytest_cov") "")
2890 (("--cov=aiohttp") "")
2891 (("--cov=tests/") ""))))
2892 (add-after 'unpack 'fix-tests
2893 (lambda _
2894 ;; Make sure the timestamp of this file is > 1990, because a few
2895 ;; tests like test_static_file_if_modified_since_past_date
2896 ;; depend on it.
2897 (let ((late-90s (* 60 60 24 365 30)))
2898 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
2899 (add-before 'build 'pre-build
2900 (lambda _
2901 (setenv "USE_SYSTEM_DEPS" "true")
2902 ;; Help setup.py to determine project's root.
2903 (with-output-to-file ".git"
2904 (lambda () (display "")))
2905 (substitute* "Makefile"
2906 (("cythonize: .install-cython") "cythonize:"))
2907 (invoke "make" "cythonize")))
2908 (add-before 'check 'remove-local-source
2909 (lambda _
2910 (delete-file-recursively "aiohttp"))))))
2911 (native-inputs
2912 (list gunicorn-bootstrap
2913 python-freezegun
2914 python-cython
2915 python-pkgconfig
2916 ;; python-proxy-py ;not packaged yet in Guix
2917 python-pytest
2918 python-pytest-mock
2919 python-pytest-xdist
2920 python-re-assert
2921 python-setuptools
2922 python-zlib-ng))
2923 (inputs
2924 (list llhttp))
2925 (propagated-inputs
2926 (list python-aiohappyeyeballs
2927 python-aiosignal
2928 python-attrs
2929 python-frozenlist
2930 python-multidict
2931 python-propcache
2932 python-yarl
2933 ;; [optional]
2934 python-aiodns
2935 python-backports-zstd ;Python version < 3.14
2936 python-brotli))
2937 (home-page "https://github.com/aio-libs/aiohttp/")
2938 (synopsis "Async HTTP client/server framework (asyncio)")
2939 (description "@code{aiohttp} is an asynchronous HTTP client/server
2940framework.
2941
2942Its main features are:
2943@itemize
2944@item Supports both client and server side of HTTP protocol.
2945@item Supports both client and server Web-Sockets out-of-the-box without the
2946Callback Hell.
2947@item Web-server has middlewares and pluggable routing.
2948@end itemize")
2949 (license license:asl2.0)))
2950
2951(define-public python-aiohttp-oauthlib
2952 (package
2953 (name "python-aiohttp-oauthlib")
2954 (version "0.1.0")
2955 (source
2956 (origin
2957 (method url-fetch)
2958 (uri (pypi-uri "aiohttp-oauthlib" version))
2959 (sha256
2960 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
2961 (build-system pyproject-build-system)
2962 (arguments (list #:tests? #f)) ; none included
2963 (propagated-inputs (list python-aiohttp python-oauthlib))
2964 (native-inputs (list python-setuptools python-setuptools-scm))
2965 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
2966 (synopsis "OAuthlib authentication support for aiohttp")
2967 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
2968provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
2969 (license license:isc)))
2970
2971(define-public python-aiohttp-client-cache
2972 (package
2973 (name "python-aiohttp-client-cache")
2974 (version "0.14.3")
2975 (source
2976 (origin
2977 (method git-fetch)
2978 (uri (git-reference
2979 (url "https://github.com/requests-cache/aiohttp-client-cache")
2980 (commit (string-append "v" version))))
2981 (file-name (git-file-name name version))
2982 (sha256
2983 (base32
2984 "13xbmjjvcbzh3yh5z92mc0gwicwfjfq2av5jbqv09sbfzhggs92y"))))
2985 (build-system pyproject-build-system)
2986 (arguments
2987 (list
2988 #:test-flags #~(list "--ignore=test/integration/")))
2989 (native-inputs
2990 (list python-brotli
2991 python-faker
2992 python-hatchling
2993 python-pytest
2994 python-pytest-aiohttp
2995 python-pytest-asyncio
2996 python-types-aiofiles))
2997 (propagated-inputs
2998 (list python-aiohttp
2999 python-attrs
3000 python-itsdangerous
3001 python-url-normalize
3002 ;; [optional]
3003 python-aioboto3
3004 python-aiobotocore
3005 python-aiofiles
3006 python-aiosqlite
3007 python-pymongo
3008 python-redis))
3009 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
3010 (synopsis "Persistent cache for aiohttp requests")
3011 (description
3012 "This package is an asynchronous persistent caching library specifically
3013designed for @samp{aiohttp} requests in Python. With support for various
3014storage backends, it offers flexibility in how and where the cache is stored.
3015Please note that MongoDB and DynamoDB backends are not currently supported due
3016to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
3017 (license license:expat)))
3018
3019(define-public python-aiohttp-cors
3020 (package
3021 (name "python-aiohttp-cors")
3022 (version "0.8.1")
3023 (source
3024 (origin
3025 (method url-fetch)
3026 (uri (pypi-uri "aiohttp_cors" version))
3027 (sha256
3028 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
3029 (build-system pyproject-build-system)
3030 (arguments
3031 (list
3032 #:tests? #f)) ; network access is required to run tests
3033 (native-inputs
3034 (list python-setuptools
3035 python-wheel))
3036 (propagated-inputs
3037 (list python-aiohttp))
3038 (home-page "https://github.com/aio-libs/aiohttp-cors")
3039 (synopsis "CORS support for aiohttp")
3040 (description
3041 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
3042support for aiohttp asyncio-powered asynchronous HTTP server.")
3043 (license license:asl2.0)))
3044
3045(define-public python-aiohttp-retry
3046 (package
3047 (name "python-aiohttp-retry")
3048 (version "2.9.1")
3049 (source
3050 (origin
3051 (method git-fetch)
3052 (uri (git-reference
3053 (url "https://github.com/inyutin/aiohttp_retry")
3054 (commit (string-append "v" version))))
3055 (file-name (git-file-name name version))
3056 (sha256
3057 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
3058 (build-system pyproject-build-system)
3059 (native-inputs
3060 (list python-pytest
3061 python-pytest-aiohttp
3062 python-setuptools))
3063 (propagated-inputs
3064 (list python-aiohttp))
3065 (home-page "https://github.com/inyutin/aiohttp_retry")
3066 (synopsis "Simple retry client for aiohttp")
3067 (description
3068 "This package implements @code{RetryClient} for @code{aiohttp} to retry
3069connection to provided endpoint with timeouts logic or use:
3070
3071@itemize
3072@item @code{ExponentialRetry} with exponential backoff
3073@item @code{RandomRetry} for random backoff
3074@item @code{ListRetry} with backoff you predefine by list
3075@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
3076@item @code{JitterRetry} exponential retry with a bit of randomness
3077@end itemize")
3078 (license license:expat)))
3079
3080(define-public python-aiohttp-socks
3081 (package
3082 (name "python-aiohttp-socks")
3083 (version "0.10.1")
3084 (source
3085 (origin
3086 (method url-fetch)
3087 (uri (pypi-uri "aiohttp_socks" version))
3088 (sha256
3089 (base32
3090 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
3091 (build-system pyproject-build-system)
3092 (arguments (list #:tests? #false)) ;none included
3093 (propagated-inputs
3094 (list python-aiohttp python-socks))
3095 (native-inputs (list python-setuptools python-wheel))
3096 (home-page "https://github.com/romis2012/aiohttp-socks")
3097 (synopsis "SOCKS proxy connector for aiohttp")
3098 (description "This package provides a SOCKS proxy connector for
3099aiohttp. It supports SOCKS4(a) and SOCKS5.")
3100 (license license:asl2.0)))
3101
3102(define-public python-aiodns
3103 (package
3104 (name "python-aiodns")
3105 (version "3.5.0")
3106 (source
3107 (origin
3108 (method git-fetch)
3109 (uri (git-reference
3110 (url "https://github.com/saghul/aiodns")
3111 (commit (string-append "v" version))))
3112 (file-name (git-file-name name version))
3113 (sha256
3114 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
3115 (build-system pyproject-build-system)
3116 (arguments
3117 (list
3118 #:tests? #f)) ;tests require internet access
3119 (native-inputs
3120 (list python-pytest python-pytest-asyncio python-setuptools))
3121 (propagated-inputs (list python-pycares))
3122 (home-page "https://github.com/saghul/aiodns")
3123 (synopsis "Simple DNS resolver for asyncio")
3124 (description
3125 "@code{aiodns} provides a simple way for doing asynchronous DNS
3126resolutions with a synchronous looking interface by using
3127@url{https://github.com/saghul/pycares,pycares}.")
3128 (license license:expat)))
3129
3130(define-public python-aioquic
3131 (package
3132 (name "python-aioquic")
3133 (version "1.3.0")
3134 (source
3135 (origin
3136 (method git-fetch)
3137 (uri (git-reference
3138 (url "https://github.com/aiortc/aioquic")
3139 (commit version)))
3140 (file-name (git-file-name name version))
3141 (sha256
3142 (base32 "0dyzh8xipxbd7fcykfz8g5bgri38prwg050szqawq2p0pg538dgb"))))
3143 (build-system pyproject-build-system)
3144 (native-inputs
3145 (list nss-certs-for-test
3146 python-pytest
3147 python-setuptools))
3148 (inputs
3149 (list openssl))
3150 (propagated-inputs
3151 (list python-certifi
3152 python-cryptography
3153 python-pylsqpack
3154 python-pyopenssl
3155 python-service-identity))
3156 (home-page "https://github.com/aiortc/aioquic")
3157 (synopsis "QUIC and HTTP3 implementation in Python")
3158 (description
3159 "@code{aioquic} is a library for the QUIC network protocol in Python.
3160It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
3161 (license license:bsd-3)))
3162
3163(define-public python-aiorpcx
3164 (package
3165 (name "python-aiorpcx")
3166 (version "0.25.0")
3167 (source
3168 (origin
3169 (method git-fetch)
3170 ;; PyPI misses the util.py file used for tests.
3171 (uri (git-reference
3172 (url "https://github.com/kyuupichan/aiorpcX")
3173 (commit version)))
3174 (file-name (git-file-name name version))
3175 (sha256
3176 (base32
3177 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
3178 (build-system pyproject-build-system)
3179 (arguments
3180 (list
3181 #:test-flags
3182 ;; This test opens a remote connection.
3183 #~(list "-k" "not test_create_connection_resolve_good")))
3184 (native-inputs (list python-pytest
3185 python-pytest-asyncio-0.26
3186 python-setuptools))
3187 (propagated-inputs
3188 (list python-attrs python-websockets))
3189 (home-page "https://github.com/kyuupichan/aiorpcX")
3190 (synopsis "Generic asyncio RPC implementation")
3191 (description
3192 "The aiorpcX library is a generic asyncio implementation of RPC suitable
3193for an application that is a client, server or both.
3194
3195The package includes a module with full coverage of JSON RPC versions 1.0 and
31962.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
3197comes with a SOCKS proxy client.")
3198 (license (list license:expat license:bsd-2))))
3199
3200(define-public python-aiostream
3201 (package
3202 (name "python-aiostream")
3203 (version "0.7.0")
3204 (source
3205 (origin
3206 (method git-fetch) ;no tests in PyPI archive
3207 (uri (git-reference
3208 (url "https://github.com/vxgmichel/aiostream")
3209 (commit (string-append "v" version))))
3210 (file-name (git-file-name name version))
3211 (sha256
3212 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
3213 (build-system pyproject-build-system)
3214 (native-inputs
3215 (list python-pytest python-pytest-asyncio python-setuptools))
3216 (propagated-inputs
3217 (list python-typing-extensions))
3218 (home-page "https://github.com/vxgmichel/aiostream")
3219 (synopsis "Generator-based operators for asynchronous iteration")
3220 (description "@code{aiostream} provides a collection of stream operators that can
3221be combined to create asynchronous pipelines of operations. It can be seen as an
3222asynchronous version of @code{itertools}, although some aspects are slightly
3223different. All the provided operators return a unified interface called a stream. A
3224stream is an enhanced asynchronous iterable.")
3225 (license license:gpl3)))
3226
3227(define-public python-asgiref
3228 (package
3229 (name "python-asgiref")
3230 (version "3.11.1")
3231 (source
3232 (origin
3233 (method git-fetch)
3234 (uri (git-reference
3235 (url "https://github.com/django/asgiref/")
3236 (commit version)))
3237 (file-name (git-file-name name version))
3238 (sha256
3239 (base32 "19l03mx81dqhnnqa98073x1q243ndlknax0kva7azr9g12ixl69j"))))
3240 (build-system pyproject-build-system)
3241 (native-inputs
3242 (list python-pytest
3243 python-pytest-asyncio
3244 python-setuptools))
3245 (home-page "https://github.com/django/asgiref/")
3246 (synopsis "ASGI specs, helper code, and adapters")
3247 (description
3248 "ASGI is a standard for Python asynchronous web apps and servers to
3249communicate with each other, and positioned as an asynchronous successor to
3250WSGI. This package includes libraries for implementing ASGI servers.")
3251 (license license:bsd-3)))
3252
3253(define-public python-asgi-csrf
3254 (package
3255 (name "python-asgi-csrf")
3256 (version "0.11")
3257 (source (origin
3258 (method git-fetch) ;for tests
3259 (uri (git-reference
3260 (url "https://github.com/simonw/asgi-csrf")
3261 (commit version)))
3262 (file-name (git-file-name name version))
3263 (sha256
3264 (base32
3265 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))
3266 (patches
3267 (search-patches "python-asgi-csrf-fix-formparser.patch"))))
3268 (build-system pyproject-build-system)
3269 (propagated-inputs (list python-itsdangerous python-multipart))
3270 (native-inputs (list python-asgi-lifespan
3271 python-httpx
3272 python-pytest
3273 python-pytest-asyncio
3274 python-starlette
3275 python-setuptools
3276 python-wheel))
3277 (home-page "https://github.com/simonw/asgi-csrf")
3278 (synopsis "ASGI middleware for protecting against CSRF attacks")
3279 (description "This Asynchronous Server Gateway Interface (ASGI)
3280middleware protects against Cross-site request forgery (CSRF) attacks.
3281It implements the Double Submit Cookie pattern, where a cookie is set
3282that is then compared to a @code{csrftoken} hidden form field or a
3283@code{x-csrftoken} HTTP header.")
3284 (license license:asl2.0)))
3285
3286(define-public python-asgi-lifespan
3287 (package
3288 (name "python-asgi-lifespan")
3289 (version "2.1.0")
3290 (source (origin
3291 (method git-fetch) ;for tests
3292 (uri (git-reference
3293 (url "https://github.com/florimondmanca/asgi-lifespan")
3294 (commit version)))
3295 (file-name (git-file-name name version))
3296 (sha256
3297 (base32
3298 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
3299 (build-system pyproject-build-system)
3300 (arguments
3301 (list
3302 #:test-flags
3303 '(list "-k"
3304 (string-append
3305 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
3306 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
3307 " or test_lifespan_manager[trio-None-BodyFailed-None]"
3308 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
3309 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
3310 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
3311 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
3312 " or test_lifespan_timeout[trio-slow_shutdown]"
3313 " or test_lifespan_not_supported[trio-http_only]"
3314 " or test_lifespan_not_supported[trio-http_no_assert]"
3315 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
3316 ")"))
3317 #:phases
3318 '(modify-phases %standard-phases
3319 (add-after 'unpack 'compatibility
3320 (lambda _
3321 ;; httpx version 0.28.0 removed the "app" shortcut.
3322 (substitute* "tests/test_manager.py"
3323 (("app=manager.app")
3324 "transport=httpx.ASGITransport(manager.app)")))))))
3325 (native-inputs (list python-httpx
3326 python-pytest
3327 python-pytest-asyncio
3328 python-pytest-trio
3329 python-starlette
3330 python-setuptools
3331 python-wheel))
3332 (propagated-inputs (list python-sniffio))
3333 (home-page "https://github.com/florimondmanca/asgi-lifespan")
3334 (synopsis "Programmatic startup/shutdown of ASGI apps")
3335 (description "Programmatically send startup/shutdown lifespan events
3336into Asynchronous Server Gateway Interface (ASGI) applications. When
3337used in combination with an ASGI-capable HTTP client such as HTTPX, this
3338allows mocking or testing ASGI applications without having to spin up an
3339ASGI server.")
3340 (license license:expat)))
3341
3342(define-public python-a2wsgi
3343 (package
3344 (name "python-a2wsgi")
3345 (version "1.10.7")
3346 (source (origin
3347 (method url-fetch)
3348 (uri (pypi-uri "a2wsgi" version))
3349 (sha256
3350 (base32
3351 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
3352 (build-system pyproject-build-system)
3353 (arguments
3354 (list
3355 #:test-flags
3356 #~(list "-k" (string-join
3357 (list "not test_starlette_stream_response"
3358 "test_starlette_base_http_middleware"
3359 "test_baize_stream_response"
3360 ;; Fails because of harmless whitespace differences.
3361 "test_wsgi_post")
3362 " and not "))
3363 #:build-backend "pdm.backend"))
3364 (native-inputs
3365 (list python-pdm-backend
3366 python-pytest
3367 ;; python-baize ; not packed yet
3368 python-httpx-bootstrap
3369 ;; Cycle: python-a2wsgi->python-uvicorn->
3370 ;; python-httpx->python-starlette->python-a2wsgi
3371 ;; python-starlette
3372 python-pytest-asyncio))
3373 (home-page "https://github.com/abersheeran/a2wsgi")
3374 (synopsis "Convert WSGI to ASGI or vice versa")
3375 (description
3376 "This program converts a WSGI program to an ASGI program or the other
3377way around. It depends only on the Python standard library.")
3378 (license license:asl2.0)))
3379
3380(define-public python-httpauth
3381 (package
3382 (name "python-httpauth")
3383 (version "0.4.1")
3384 (source (origin
3385 (method url-fetch)
3386 (uri (pypi-uri "httpauth" version))
3387 (sha256
3388 (base32
3389 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
3390 (build-system pyproject-build-system)
3391 (native-inputs (list python-pytest python-setuptools python-wheel))
3392 (home-page "https://github.com/jonashaag/httpauth")
3393 (synopsis "WSGI HTTP Digest Authentication middleware")
3394 (description "@code{python-httpauth} is WSGI middleware that secures some/all
3395routes using HTTP Digest Authentication.")
3396 (license license:bsd-2)))
3397
3398(define-public python-css-html-js-minify
3399 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
3400 (revision "0"))
3401 (package
3402 (name "python-css-html-js-minify")
3403 (version (git-version "2.5.5" revision commit))
3404 (source
3405 (origin
3406 (method git-fetch)
3407 (uri (git-reference
3408 (url "https://github.com/juancarlospaco/css-html-js-minify")
3409 (commit commit)))
3410 (file-name (git-file-name name version))
3411 (sha256
3412 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
3413 (build-system pyproject-build-system)
3414 (arguments
3415 (list
3416 #:phases
3417 #~(modify-phases %standard-phases
3418 (add-after 'unpack 'relax-requirements
3419 (lambda _
3420 (substitute* "setup.cfg"
3421 (("^tests_require.*") "")))))))
3422 (native-inputs (list python-pytest python-setuptools))
3423 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
3424 (synopsis "CSS/HTML/JS minifier")
3425 (description
3426 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
3427 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
3428 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
3429 ;; looks like the user can choose a license.
3430 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
3431
3432(define-public python-aws-sam-translator
3433 (package
3434 (name "python-aws-sam-translator")
3435 (version "1.107.0")
3436 (source
3437 (origin
3438 (method git-fetch) ; no tests in PyPI release
3439 (uri (git-reference
3440 (url "https://github.com/aws/serverless-application-model")
3441 (commit (string-append "v" version))))
3442 (file-name (git-file-name name version))
3443 (sha256
3444 (base32 "0bx9ha9k6zx6gl1hsgm6cpq4xrfn604v2g1d5dh2d5zq0463gwfq"))))
3445 (build-system pyproject-build-system)
3446 (arguments
3447 (list
3448 #:test-flags
3449 #~(list "--numprocesses" (number->string (parallel-job-count))
3450 "--ignore=tests/bin/test_public_interface.py"
3451 "tests")
3452 #:phases
3453 #~(modify-phases %standard-phases
3454 (add-before 'check 'pre-check
3455 (lambda _
3456 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
3457 (native-inputs
3458 (list python-pytest
3459 python-pytest-rerunfailures
3460 python-pytest-xdist
3461 python-parameterized
3462 python-pyyaml
3463 python-setuptools))
3464 (propagated-inputs
3465 (list python-boto3
3466 python-jsonschema
3467 python-pydantic
3468 python-typing-extensions))
3469 (home-page "https://github.com/aws/serverless-application-model")
3470 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
3471 (description
3472 "AWS SAM Translator is a library that transform @dfn{Serverless Application
3473Model} (SAM) templates into AWS CloudFormation templates.")
3474 (license license:asl2.0)))
3475
3476(define-public python-aws-xray-sdk
3477 (package
3478 (name "python-aws-xray-sdk")
3479 (version "2.14.0")
3480 (home-page "https://github.com/aws/aws-xray-sdk-python")
3481 (source (origin
3482 (method git-fetch)
3483 (uri (git-reference (url home-page) (commit version)))
3484 (file-name (git-file-name name version))
3485 (sha256
3486 (base32
3487 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
3488 (build-system pyproject-build-system)
3489 (arguments
3490 (list
3491 #:test-flags
3492 '(list ;; Tries to connect to external network resources
3493 "--ignore=tests/ext/aiohttp/test_client.py"
3494 "--ignore=tests/ext/httplib/test_httplib.py"
3495 "--ignore=tests/ext/httpx"
3496 "--ignore=tests/ext/requests/test_requests.py"
3497 ;; TODO: How to configure Django for these tests?
3498 "--ignore=tests/ext/django"
3499 ;; These tests require packages not yet in Guix.
3500 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
3501 "--ignore=tests/ext/aiohttp/test_middleware.py"
3502 "--ignore=tests/ext/pg8000/test_pg8000.py"
3503 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
3504 "--ignore=tests/ext/pymysql/test_pymysql.py"
3505 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
3506 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
3507 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
3508 "--ignore=tests/test_async_recorder.py"
3509 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
3510 "--ignore-glob=tests/ext/sqlalchemy*"
3511 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
3512 ;; FIXME: Why is this failing?
3513 "--ignore=tests/test_patcher.py"
3514 "--ignore=tests/test_lambda_context.py")
3515 #:phases
3516 '(modify-phases %standard-phases
3517 (add-before 'check 'pre-check
3518 (lambda _
3519 ;; Allow "import tests.utils" to work as expected.
3520 (setenv "PYTHONPATH" (getcwd)))))))
3521 (native-inputs
3522 (list ;; These are required for the test suite.
3523 python-aiohttp
3524 python-bottle
3525 python-flask
3526 python-flask-sqlalchemy
3527 python-httpx
3528 python-mock
3529 python-pymysql
3530 python-pytest
3531 python-pytest-asyncio-0.26
3532 python-pytest-benchmark
3533 python-setuptools
3534 python-sqlalchemy
3535 python-webtest))
3536 (propagated-inputs
3537 (list python-botocore
3538 python-jsonpickle
3539 python-requests
3540 python-wrapt))
3541 (synopsis "Profile applications on AWS X-Ray")
3542 (description
3543 "The AWS X-Ray SDK for Python enables Python developers to record and
3544emit information from within their applications to the AWS X-Ray service.")
3545 (license license:asl2.0)))
3546
3547(define-public python-publicsuffixlist
3548 (package
3549 (name "python-publicsuffixlist")
3550 (version "1.0.2.20250202")
3551 (source
3552 (origin
3553 (method url-fetch)
3554 (uri (pypi-uri "publicsuffixlist" version))
3555 (sha256
3556 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
3557 (build-system pyproject-build-system)
3558 (arguments (list #:test-backend #~'unittest))
3559 (native-inputs (list python-setuptools))
3560 (home-page "https://github.com/ko-zu/psl")
3561 (synopsis "Public suffix list for Python")
3562 (description
3563 "This package provides an implementation of
3564@url{https://publicsuffix.org/, Public Suffix List } as Python library.
3565
3566Features:
3567@itemize
3568@item supports IDN (unicode and punycoded)
3569@item shipped with built-in PSL and an updater script
3570@item written in Pure Python with no library dependencies
3571@end itemize")
3572 (license license:mpl2.0)))
3573
3574(define-public python-pycognito
3575 (package
3576 (name "python-pycognito")
3577 (version "2024.5.1")
3578 (source
3579 (origin
3580 (method url-fetch)
3581 (uri (pypi-uri "pycognito" version))
3582 (sha256
3583 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
3584 (build-system pyproject-build-system)
3585 (arguments
3586 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
3587 (list #:tests? #f))
3588 (native-inputs
3589 (list python-setuptools))
3590 (propagated-inputs
3591 (list python-boto3
3592 python-envs
3593 python-pyjwt
3594 python-requests))
3595 (home-page "https://github.com/pvizeli/pycognito")
3596 (synopsis "Python library for using AWS Cognito")
3597 (description
3598 "This package provides a Python class to integrate Boto3's Cognito
3599client so it is easy to login users, with @acronym{Secure Remote Password,
3600SRP} support.")
3601 (license license:asl2.0)))
3602
3603(define-public python-pydap
3604 (package
3605 (name "python-pydap")
3606 (version "3.5.10")
3607 (source
3608 (origin
3609 (method git-fetch)
3610 (uri (git-reference
3611 (url "https://github.com/pydap/pydap")
3612 (commit version)))
3613 (file-name (git-file-name name version))
3614 (sha256
3615 (base32 "000b7jqjpx71miwxhbi07amyjyijq925x9x3paa7kzrr268klc2z"))))
3616 (build-system pyproject-build-system)
3617 (arguments
3618 (list
3619 ;; tests: 435 passed, 6 skipped
3620 #:test-flags
3621 ;; Tests need extra packaging.
3622 #~(list "--ignore=src/pydap/tests/test_wsgi_functions.py"
3623 "--ignore=src/pydap/tests/test_wsgi_ssf.py"
3624 ;; Network access is required.
3625 "--ignore=src/pydap/tests/test_client.py"
3626 "--ignore=src/pydap/tests/test_handlers_dap.py"
3627 "--ignore=src/pydap/tests/test_open_dap4_url.py"
3628 "--ignore=src/pydap/tests/test_virtualizarr.py")))
3629 (native-inputs
3630 (list nss-certs-for-test
3631 python-requests-mock
3632 python-pytest
3633 python-setuptools
3634 python-setuptools-scm
3635 python-webtest))
3636 (propagated-inputs
3637 (list python-beautifulsoup4
3638 python-jinja2
3639 python-lxml
3640 python-numpy
3641 python-requests
3642 python-requests-cache
3643 python-scipy
3644 python-webob
3645 ;; [optional]
3646 gunicorn
3647 python-docopt-ng
3648 ;; python-coards ;not packaged yet in Guix
3649 python-fastparquet
3650 ;; python-gsw ;not packaged yet in Guix
3651 python-netcdf4
3652 python-openpyxl
3653 python-pastedeploy
3654 python-werkzeug))
3655 (home-page "https://pydap.github.io/pydap/en/intro.html")
3656 (synopsis "Data Access Protocol implementation in Python")
3657 (description
3658 "This package provides a pure Python implementation of the Data Access
3659Protocol (DAP, aka OPeNDAP).")
3660 (license license:expat)))
3661
3662(define-public python-python3-saml
3663 (package
3664 (name "python-python3-saml")
3665 (version "1.16.0")
3666 (source
3667 (origin
3668 (method git-fetch)
3669 (uri (git-reference
3670 (url "https://github.com/SAML-Toolkits/python3-saml")
3671 (commit (string-append "v" version))))
3672 (file-name (git-file-name name version))
3673 (sha256
3674 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
3675 (build-system pyproject-build-system)
3676 (arguments
3677 (list
3678 ;; 214 tests pass, 50 fail; many fail because of required Internet
3679 ;; access or because of assumptions about the location of test files.
3680 #:tests? #false))
3681 (native-inputs
3682 (list python-freezegun
3683 python-poetry-core))
3684 (inputs
3685 (list xmlsec-openssl))
3686 (propagated-inputs
3687 (list python-isodate
3688 python-lxml
3689 python-xmlsec))
3690 (home-page "https://github.com/SAML-Toolkits/python3-saml")
3691 (synopsis "Saml Python toolkit")
3692 (description
3693 "The SAML Python Toolkit lets you add SAML support to your Python
3694software.")
3695 (license license:expat)))
3696
3697(define-public python-ovh
3698 (package
3699 (name "python-ovh")
3700 (version "1.1.0")
3701 (source (origin
3702 (method url-fetch)
3703 (uri (pypi-uri "ovh" version))
3704 (sha256
3705 (base32
3706 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
3707 (build-system pyproject-build-system)
3708 (arguments (list #:tests? #f)) ; XXX: tests require networking
3709 (propagated-inputs (list python-requests))
3710 (native-inputs (list python-setuptools))
3711 (home-page "https://api.ovh.com")
3712 (synopsis "Interact with OVHcloud APIs")
3713 (description "This package provides the official module to perform HTTP requests
3714to the OVHcloud APIs.")
3715 (license license:bsd-3)))
3716
3717(define-public python-cbor2
3718 (package
3719 (name "python-cbor2")
3720 (version "5.4.2.post1")
3721 (source
3722 (origin
3723 (method url-fetch)
3724 (uri (pypi-uri "cbor2" version))
3725 (sha256
3726 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
3727 (build-system pyproject-build-system)
3728 (native-inputs
3729 (list python-pytest python-setuptools python-setuptools-scm))
3730 (home-page "https://github.com/agronholm/cbor2")
3731 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
3732 (description "This Python library provides encoding and decoding for the
3733Concise Binary Object
3734Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
37358949}) serialization format. The specification is fully compatible with the
3736original RFC 7049. Among its features are:
3737@itemize
3738@item Simple API like the @code{json} or @code{pickle} modules.
3739@item Support many CBOR tags with stdlib objects.
3740@item Generic tag decoding.
3741@item Shared value references including cyclic references.
3742@item String references compact encoding with repeated strings replaced with
3743indices.
3744@item Optional C module backend tested on big- and little-endian architectures.
3745@item Extensible tagged value handling using tag_hook and object_hook on
3746decode and default on encode.
3747@end itemize")
3748 (license license:expat)))
3749
3750(define-public python-cfn-lint
3751 (package
3752 (name "python-cfn-lint")
3753 (version "1.38.1")
3754 (source
3755 (origin
3756 (method git-fetch)
3757 (uri (git-reference
3758 (url "https://github.com/aws-cloudformation/cfn-lint")
3759 (commit (string-append "v" version))))
3760 (file-name (git-file-name name version))
3761 (sha256
3762 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
3763 (build-system pyproject-build-system)
3764 (arguments
3765 (list
3766 ;; tests: 2136 passed, 11 deselected, 1 warning
3767 #:test-flags
3768 #~(list "--ignore=test/integration/"
3769 "-k" (string-join
3770 ;; Tests failing on doctest or comparing diff.
3771 (list "not test_build_graph"
3772 "test_good_template"
3773 "test_success_run"
3774 "test_update_docs"
3775 ;; ImportError: Missing optional dependencies sarif
3776 "test_sarif_formatter")
3777 " and not "))
3778 #:phases
3779 #~(modify-phases %standard-phases
3780 (add-after 'unpack 'remove-deprecated
3781 (lambda _
3782 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
3783 (("deprecated\": \"2025")
3784 "deprecated\": \"2125")))))))
3785 (native-inputs
3786 (list python-defusedxml
3787 python-pydot
3788 python-pytest
3789 python-setuptools))
3790 (propagated-inputs
3791 (list python-aws-sam-translator
3792 python-jsonpatch
3793 python-networkx
3794 python-pyyaml
3795 python-regex
3796 python-sympy
3797 python-typing-extensions
3798 ;; [optional]
3799 python-junit-xml))
3800 (home-page "https://github.com/aws-cloudformation/cfn-lint")
3801 (synopsis "Validate CloudFormation templates")
3802 (description
3803 "This package lets you validate CloudFormation YAML/JSON templates against
3804the CloudFormation spec and additional checks. Includes checking valid values
3805for resource properties and best practices.")
3806 (license license:expat)))
3807
3808(define-public python-pyzabbix
3809 (package
3810 (name "python-pyzabbix")
3811 (version "1.3.1")
3812 (source
3813 (origin
3814 (method git-fetch)
3815 (uri (git-reference
3816 (url "https://github.com/lukecyca/pyzabbix")
3817 (commit version)))
3818 (file-name (git-file-name name version))
3819 (sha256
3820 (base32 "1dbs3bz1mjlvlg46ikhg5j7agwni61ljlpiziknklv95yp29n86v"))))
3821 (build-system pyproject-build-system)
3822 (arguments
3823 (list #:test-flags #~(list "tests")))
3824 (native-inputs
3825 (list python-pytest
3826 python-requests-mock
3827 python-setuptools))
3828 (propagated-inputs
3829 (list python-packaging
3830 python-requests))
3831 (home-page "https://github.com/lukecyca/pyzabbix")
3832 (synopsis "Python interface to the Zabbix API")
3833 (description
3834 "@code{pyzabbix} is a Python module for working with the Zabbix API.")
3835 (license license:lgpl2.1+)))
3836
3837(define-public python-requests-cache
3838 (package
3839 (name "python-requests-cache")
3840 (version "1.3.2")
3841 (source
3842 (origin
3843 (method git-fetch)
3844 (uri (git-reference
3845 (url "https://github.com/requests-cache/requests-cache")
3846 (commit (string-append "v" version))))
3847 (file-name (git-file-name name version))
3848 (sha256
3849 (base32 "1yhvidmmd02c95i1hamyy34rb3wfzgzxil2k8ay1p4r4kv7pjada"))))
3850 (build-system pyproject-build-system)
3851 (arguments
3852 (list
3853 ;; tests: 429 passed, 1051 warnings
3854 #:test-flags
3855 #~(list "--numprocesses" (number->string (parallel-job-count))
3856 ;; These tests require access to external services, e.g. MongoDB
3857 ;; and Redis.
3858 "--ignore=tests/integration")
3859 #:phases
3860 #~(modify-phases %standard-phases
3861 (add-before 'check 'pre-check
3862 (lambda _
3863 ;; PermissionError: [Errno 13] Permission denied:
3864 ;; '/homeless-shelter'
3865 (setenv "HOME" "/tmp"))))))
3866 (native-inputs
3867 (list python-hatchling
3868 python-pytest
3869 python-pytest-rerunfailures
3870 python-pytest-xdist
3871 python-requests-mock
3872 python-responses
3873 python-rich
3874 python-tenacity
3875 python-time-machine
3876 python-timeout-decorator))
3877 (propagated-inputs
3878 (list python-attrs
3879 python-cattrs
3880 python-platformdirs
3881 python-requests
3882 python-url-normalize
3883 python-urllib3
3884 ;; [optional]
3885 python-boto3
3886 python-botocore
3887 python-itsdangerous
3888 python-orjson ;Python version < 3.14
3889 python-pymongo
3890 python-pyyaml
3891 python-redis
3892 python-ujson))
3893 (home-page "https://github.com/requests-cache/requests-cache")
3894 (synopsis "Persistent HTTP cache for Python requests")
3895 (description
3896 "This package provides a drop-in replacement for @code{requests.Session}
3897with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
3898responses as planin JSON/YAML file or save responses as plain JSON/YAML
3899files.")
3900 (license license:bsd-2)))
3901
3902(define-public python-requests-futures
3903 (package
3904 (name "python-requests-futures")
3905 (version "1.0.2")
3906 (source
3907 (origin
3908 (method url-fetch)
3909 (uri (pypi-uri "requests_futures" version))
3910 (sha256
3911 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
3912 (build-system pyproject-build-system)
3913 (native-inputs
3914 (list python-greenlet
3915 python-pytest
3916 python-pytest-httpbin
3917 python-setuptools
3918 python-werkzeug))
3919 (propagated-inputs (list python-requests))
3920 (home-page "https://github.com/ross/requests-futures")
3921 (synopsis "Asynchronous Python HTTP for Humans")
3922 (description
3923 "This package provides and add-on the Python Requests HTTP library to run
3924code asynchronously.")
3925 (license license:asl2.0)))
3926
3927(define-public python-requests-unixsocket
3928 (package
3929 (name "python-requests-unixsocket")
3930 (version "0.4.1")
3931 (source
3932 (origin
3933 (method git-fetch)
3934 (uri (git-reference
3935 (url "https://github.com/msabramo/requests-unixsocket")
3936 (commit (string-append "v" version))))
3937 (file-name (git-file-name name version))
3938 (sha256
3939 (base32 "1f0pi31xqzm3cdag4s4gpdj36x169jwc8ibqvcwqz6h9c0pklf3n"))))
3940 (build-system pyproject-build-system)
3941 (native-inputs
3942 (list python-pytest
3943 python-setuptools
3944 python-setuptools-scm
3945 python-waitress))
3946 (propagated-inputs
3947 (list python-requests))
3948 (home-page "https://github.com/msabramo/requests-unixsocket")
3949 (synopsis "Use requests to talk HTTP via a UNIX domain socket")
3950 (description
3951 "This package provides an extension to @code{requests} which let it talk
3952HTTP via a UNIX domain socket.")
3953 (license license:asl2.0)))
3954
3955(define-public python-s3path
3956 (package
3957 (name "python-s3path")
3958 (version "0.6.4")
3959 (source
3960 (origin
3961 (method url-fetch)
3962 (uri (pypi-uri "s3path" version))
3963 (sha256
3964 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
3965 (build-system pyproject-build-system)
3966 (arguments
3967 (list
3968 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
3969 #:tests? #f))
3970 (native-inputs
3971 (list python-setuptools
3972 python-wheel))
3973 (propagated-inputs
3974 (list python-boto3
3975 python-smart-open))
3976 (home-page "https://github.com/liormizr/s3path")
3977 (synopsis "Pathlib extension for AWS S3 Service")
3978 (description
3979 "S3Path provide a Python convenient File-System/Path like interface for
3980AWS S3 Service using boto3 S3 resource as a driver.")
3981 (license license:asl2.0)))
3982
3983(define-public python-falcon
3984 (package
3985 (name "python-falcon")
3986 (version "4.0.2")
3987 (source
3988 (origin
3989 ;; Use git, as there are some test files missing from the PyPI release,
3990 ;; such as 'examples' directory.
3991 (method git-fetch)
3992 (uri (git-reference
3993 (url "https://github.com/falconry/falcon")
3994 (commit version)))
3995 (file-name (git-file-name name version))
3996 (sha256
3997 (base32
3998 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
3999 (build-system pyproject-build-system)
4000 (arguments
4001 (list
4002 #:test-flags
4003 '(list "-k" "not slow"
4004 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
4005 #:phases
4006 '(modify-phases %standard-phases
4007 (add-before 'check 'pre-check
4008 (lambda _
4009 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
4010 (setenv "FALCON_TESTING_SESSION" "Y")
4011 (setenv "PYTHONASYNCIODEBUG" "1")
4012 (setenv "HOME" "/tmp"))))))
4013 (propagated-inputs
4014 (list python-mimeparse))
4015 (native-inputs
4016 (list python-aiofiles
4017 python-cbor2
4018 python-cython ;for faster binaries
4019 python-fakeredis
4020 python-httpx
4021 python-mujson
4022 python-msgpack
4023 python-orjson
4024 python-pecan
4025 python-pillow
4026 python-pytest
4027 python-pytest-asyncio
4028 python-pyyaml
4029 python-rapidjson
4030 python-requests
4031 python-setuptools
4032 python-testtools
4033 python-ujson
4034 python-websockets
4035 python-wheel))
4036 (home-page "https://falconframework.org")
4037 (synopsis "Web framework for building APIs and application backends")
4038 (description "Falcon is a web API framework for building microservices,
4039application backends and higher-level frameworks. Among its features are:
4040@itemize
4041@item Optimized and extensible code base
4042@item Routing via URI templates and REST-inspired resource
4043classes
4044@item Access to headers and bodies through request and response
4045classes
4046@item Request processing via middleware components and hooks
4047@item Idiomatic HTTP error responses
4048@item Straightforward exception handling
4049@item Unit testing support through WSGI helpers and mocks
4050@item Compatible with both CPython and PyPy
4051@item Cython support for better performance when used with CPython
4052@end itemize")
4053 (license license:asl2.0)))
4054
4055(define-public python-falcon-cors
4056 (package
4057 (name "python-falcon-cors")
4058 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
4059 (revision . "0")))
4060 (version (git-version "1.1.7"
4061 (assoc-ref properties 'revision)
4062 (assoc-ref properties 'commit)))
4063 (source
4064 (origin
4065 (method git-fetch)
4066 (uri (git-reference
4067 (url "https://github.com/lwcolton/falcon-cors")
4068 (commit (assoc-ref properties 'commit))))
4069 (file-name (git-file-name name version))
4070 (sha256
4071 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
4072 (build-system pyproject-build-system)
4073 (arguments
4074 (list
4075 ;; XXX: The last commit's tests are incompatible with the more recent
4076 ;; version of python-falcon.
4077 #:tests? #f))
4078 (native-inputs
4079 (list python-falcon python-mock python-pynose python-setuptools))
4080 (home-page "https://github.com/lwcolton/falcon-cors")
4081 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
4082 (description
4083 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
4084support for Falcon. It allows applying a specially crafted CORS object to the
4085incoming requests, enabling the ability to serve resources over a different
4086origin than that of the web application.")
4087 (license license:asl2.0)))
4088
4089(define-public python-furl
4090 (package
4091 (name "python-furl")
4092 (version "2.1.4")
4093 (source
4094 (origin
4095 (method url-fetch)
4096 (uri (pypi-uri "furl" version))
4097 (sha256
4098 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
4099 (build-system pyproject-build-system)
4100 (arguments
4101 (list #:test-flags
4102 #~(list "-k" (string-append "not test_hosts"
4103 " and not test_netloc"
4104 " and not test_odd_urls"))))
4105 (propagated-inputs
4106 (list python-orderedmultidict python-six))
4107 (native-inputs
4108 (list python-pytest python-setuptools python-wheel))
4109 (home-page "https://github.com/gruns/furl")
4110 (synopsis "URL manipulation in Python")
4111 (description "Furl provides an easy-to-use alternative to the
4112@code{urllib} and @code{urlparse} modules for manipulating URLs.")
4113 (license license:unlicense)))
4114
4115(define-public python-httplib2
4116 (package
4117 (name "python-httplib2")
4118 (version "0.31.2")
4119 (source
4120 (origin
4121 (method git-fetch)
4122 (uri (git-reference
4123 (url "https://github.com/httplib2/httplib2")
4124 (commit (string-append "v" version))))
4125 (file-name (git-file-name name version))
4126 (sha256
4127 (base32
4128 "0wdnf4rhw9ar8b15lzvif11ibnnpqkfif3alkhkfywy3ikk8nrxb"))))
4129 (build-system pyproject-build-system)
4130 (arguments
4131 (list
4132 #:phases
4133 #~(modify-phases %standard-phases
4134 (add-after 'unpack 'adjust-test-requirements
4135 (lambda _
4136 (substitute* "requirements-test.txt"
4137 (("==") ">=")))))))
4138 (propagated-inputs
4139 (list python-pyparsing
4140 python-pysocks))
4141 (native-inputs
4142 (list python-cryptography
4143 python-mock
4144 python-pytest
4145 python-pytest-randomly
4146 python-pytest-timeout
4147 python-setuptools))
4148 (home-page "https://github.com/httplib2/httplib2")
4149 (synopsis "Comprehensive HTTP client library")
4150 (description
4151 "A comprehensive HTTP client library supporting many features left out of
4152other HTTP libraries.")
4153 (license license:expat)))
4154
4155(define-public python-cheroot
4156 (package
4157 (name "python-cheroot")
4158 (version "11.1.2")
4159 (source
4160 (origin
4161 (method git-fetch)
4162 (uri (git-reference
4163 (url "https://github.com/cherrypy/cheroot")
4164 (commit (string-append "v" version))))
4165 (file-name (git-file-name name version))
4166 (sha256
4167 (base32 "02rhci01m5fcn8mqpvq3c35rs4n28gxlfvfw2if2f85rgwrji8y8"))
4168 ;; TODO: Remove this patch on next release.
4169 (patches (search-patches "python-cheroot-openssl-test.patch"))))
4170 (build-system pyproject-build-system)
4171 (arguments
4172 (list
4173 ;; tests: 150 passed, 3 xfailed, 7 warnings
4174 #:test-flags
4175 ;; To prevent dependency on python-pypytools which depends on python-py
4176 ;; both marked as deprecated by maintainers, see:
4177 ;; <https://codeberg.org/guix/guix/issues/7475>.
4178 #~(list "--ignore=cheroot/test/test_server.py")
4179 #:phases
4180 #~(modify-phases %standard-phases
4181 (add-after 'unpack 'fix-pytest-config
4182 (lambda _
4183 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
4184 (delete-file "pytest.ini"))))))
4185 (native-inputs
4186 (list python-portend
4187 python-pyopenssl
4188 python-pytest
4189 python-pytest-mock
4190 python-requests
4191 python-requests-toolbelt
4192 python-setuptools
4193 python-setuptools-scm
4194 python-trustme))
4195 (propagated-inputs
4196 (list python-jaraco-functools
4197 python-more-itertools))
4198 (home-page "https://cheroot.cherrypy.dev")
4199 (synopsis "Highly-optimized, pure-python HTTP server")
4200 (description
4201 "Cheroot is a high-performance, pure-Python HTTP server.")
4202 (license license:bsd-3)))
4203
4204(define-public python-cherrypy
4205 (package
4206 (name "python-cherrypy")
4207 (properties '((commit . "1f75bc9eed8e0e385f64f368bd69f58d96fb8c2b")
4208 (revision . "0")))
4209 (version (git-version "18.10.0"
4210 (assoc-ref properties 'revision)
4211 (assoc-ref properties 'commit)))
4212 (source
4213 (origin
4214 (method git-fetch)
4215 (uri (git-reference
4216 (url "https://github.com/cherrypy/cherrypy")
4217 (commit (assoc-ref properties 'commit))))
4218 (file-name (git-file-name name version))
4219 (sha256
4220 (base32 "1l01a4sbfm42s5xp6ngphgqf0yb65ksqbsb27kznvybblyaxfa9p"))))
4221 (build-system pyproject-build-system)
4222 (arguments
4223 (list
4224 ;; tests: 288 passed, 9 skipped, 1 xfailed, 2 xpassed, 15 warnings
4225 #:phases
4226 #~(modify-phases %standard-phases
4227 (add-after 'unpack 'fix-pytest-config
4228 (lambda _
4229 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
4230 (delete-file "pytest.ini")))
4231 (add-after 'unpack 'patch-pyproject
4232 (lambda _
4233 (substitute* "pyproject.toml"
4234 (("\"cherrypy.scaffold\",")
4235 (string-join
4236 (list "\"cherrypy.scaffold\""
4237 "\"cherrypy._private_api\""
4238 "\"cherrypy._private_api.compat\",")
4239 ",\n "))))))))
4240 (propagated-inputs
4241 (list python-cheroot
4242 python-filelock
4243 python-jaraco-collections
4244 python-more-itertools
4245 python-portend))
4246 (native-inputs
4247 (list python-path
4248 python-pytest
4249 python-pytest-services
4250 python-requests
4251 python-requests-toolbelt
4252 python-setuptools
4253 python-setuptools-scm))
4254 (home-page "https://www.cherrypy.dev")
4255 (synopsis "Object-Oriented HTTP framework")
4256 (description
4257 "CherryPy is a pythonic, object-oriented web framework. It helps in
4258building web applications in the same way any other object-oriented Python
4259program would be built.")
4260 (license license:bsd-3)))
4261
4262(define-public python-parfive
4263 (package
4264 (name "python-parfive")
4265 (version "2.3.1")
4266 (source
4267 (origin
4268 (method git-fetch)
4269 (uri (git-reference
4270 (url "https://github.com/Cadair/parfive")
4271 (commit (string-append "v" version))))
4272 (file-name (git-file-name name version))
4273 (sha256
4274 (base32 "09kkh7kp9qy8m26zk6p7zc84yrc81pjgsi594kaa1v1n83mprl4b"))))
4275 (build-system pyproject-build-system)
4276 (arguments
4277 (list
4278 #:test-flags
4279 ;; Disable tests requiring network access.
4280 #~(list "-k" (string-join
4281 (list "not test_ftp"
4282 "test_ftp_http"
4283 "test_ftp_pasv_command"
4284 "test_problematic_http_urls")
4285 " and not "))))
4286 (native-inputs
4287 (list python-aiofiles
4288 python-pytest
4289 python-pytest-asyncio
4290 python-pytest-localserver
4291 python-pytest-socket
4292 python-setuptools
4293 python-setuptools-scm))
4294 (propagated-inputs
4295 (list python-aiohttp
4296 python-tqdm
4297 ;; [optional]
4298 python-aioftp))
4299 (home-page "https://parfive.readthedocs.io/")
4300 (synopsis "HTTP and FTP parallel file downloader")
4301 (description
4302 "This package provides CLI tool and Python library @code{parallel} file
4303downloader using asyncio. parfive can handle downloading multiple files in
4304parallel as well as downloading each file in a number of chunks.
4305
4306asciicast demo of parfive parfive works by creating a downloader object,
4307appending files to it and then running the download. parfive has a synchronous
4308API, but uses asyncio to parallelise downloading the files.")
4309 (license license:expat)))
4310
4311(define-public python-html2text
4312 (package
4313 (name "python-html2text")
4314 (version "2020.1.16")
4315 (source
4316 (origin
4317 (method url-fetch)
4318 (uri (pypi-uri "html2text" version))
4319 (sha256
4320 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
4321 (build-system pyproject-build-system)
4322 (native-inputs (list python-pytest python-setuptools python-wheel))
4323 (home-page "https://github.com/Alir3z4/html2text")
4324 (synopsis "Convert HTML into plain text")
4325 (description
4326 "html2text takes HTML and converts it into plain ASCII text
4327which is also valid markdown. html2text was originally written by Aaron
4328Swartz.")
4329 (license license:gpl3+)))
4330
4331(define-public python-jose
4332 (package
4333 (name "python-jose")
4334 (version "3.5.0")
4335 (home-page "https://github.com/mpdavis/python-jose")
4336 (source (origin
4337 (method git-fetch)
4338 (uri (git-reference (url home-page) (commit version)))
4339 (file-name (git-file-name name version))
4340 (sha256
4341 (base32
4342 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
4343 (build-system pyproject-build-system)
4344 (native-inputs
4345 (list python-pyasn1 python-pytest python-setuptools))
4346 (propagated-inputs
4347 (list python-cryptography python-ecdsa python-rsa))
4348 (synopsis "JOSE implementation in Python")
4349 (description
4350 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
4351- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
4352JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
4353content using a variety of algorithms.")
4354 (license license:expat)))
4355
4356(define-public python-joserfc
4357 (package
4358 (name "python-joserfc")
4359 (version "1.0.1")
4360 (source
4361 (origin
4362 (method url-fetch)
4363 (uri (pypi-uri "joserfc" version))
4364 (sha256
4365 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
4366 (build-system pyproject-build-system)
4367 (arguments
4368 (list
4369 #:test-flags
4370 ;; No module named 'Crypto'
4371 '(list "--ignore=tests/jwe/test_chacha20.py"
4372 ;; Deprecation warnings are not raised.
4373 "-k" (string-append "not test_guess_bytes_key"
4374 " and not test_guess_callable_key"
4375 " and not test_guess_str_key"))))
4376 (propagated-inputs (list python-cryptography))
4377 (native-inputs (list python-pytest python-setuptools python-wheel))
4378 (home-page "https://github.com/authlib/joserfc")
4379 (synopsis "Python library for JOSE RFCs")
4380 (description
4381 "This package provides a Python library for JOSE RFCs, including JWS,
4382JWE, JWK, JWA, and JWT.")
4383 (license license:bsd-3)))
4384
4385(define-public python-jwcrypto
4386 (package
4387 (name "python-jwcrypto")
4388 (version "1.5.6")
4389 (source
4390 (origin
4391 (method url-fetch)
4392 (uri (pypi-uri "jwcrypto" version))
4393 (sha256
4394 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
4395 (build-system pyproject-build-system)
4396 (native-inputs
4397 (list python-pytest
4398 python-setuptools))
4399 (propagated-inputs
4400 (list python-cryptography
4401 python-typing-extensions))
4402 (home-page "https://github.com/latchset/jwcrypto")
4403 (synopsis "Implementation of JOSE Web standards")
4404 (description
4405 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
4406Encryption} (JOSE) Web Standards.")
4407 (license license:lgpl3+)))
4408
4409(define-public python-pypitoken
4410 (package
4411 (name "python-pypitoken")
4412 (version "7.0.1")
4413 (source
4414 (origin
4415 (method url-fetch)
4416 (uri (pypi-uri "pypitoken" version))
4417 (sha256
4418 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
4419 (build-system pyproject-build-system)
4420 ;; There are no tests.
4421 (arguments (list #:tests? #false))
4422 (propagated-inputs (list python-jsonschema python-pymacaroons
4423 python-typing-extensions))
4424 (native-inputs (list python-poetry-core))
4425 (home-page "https://pypitoken.readthedocs.io/en/latest/")
4426 (synopsis "Manipulate PyPI API tokens")
4427 (description "This package lets you manipulate PyPI API tokens.")
4428 (license license:expat)))
4429
4430(define-public python-pyscss
4431 ;; XXX: no fresh release supporting Python 3.11, use the latest commit, see
4432 ;; <https://github.com/Kronuz/pyScss/issues/428>,
4433 ;; <https://github.com/Kronuz/pyScss/issues/431>.
4434 (let ((commit "73559d047706ccd4593cf6aa092de71f35164723")
4435 (revision "0"))
4436 (package
4437 (name "python-pyscss")
4438 (version (git-version "1.4.0" revision commit))
4439 (source
4440 (origin
4441 (method git-fetch) ; no tests in PyPI release
4442 (uri (git-reference
4443 (url "https://github.com/Kronuz/pyScss")
4444 (commit commit)))
4445 (file-name (git-file-name name version))
4446 (sha256
4447 (base32 "00msypxf5dm57gyfp3jxvjinigi4km84v33w83635pms9li2k3y7"))))
4448 (build-system pyproject-build-system)
4449 (native-inputs
4450 (list python-pytest-8
4451 python-setuptools))
4452 (inputs
4453 (list pcre))
4454 (propagated-inputs
4455 (list python-six)) ;hard dependency in scss/compiler.py
4456 (home-page "https://github.com/Kronuz/pyScss")
4457 (synopsis "Scss compiler for Python")
4458 (description
4459 "@code{pyScss} is a compiler for Sass, a superset language of
4460CSS3 that adds programming capabilities and some other syntactic sugar.")
4461 (license license:expat))))
4462
4463(define-public python-jsonpickle
4464 (package
4465 (name "python-jsonpickle")
4466 (version "4.0.0")
4467 (source (origin
4468 (method url-fetch)
4469 (uri (pypi-uri "jsonpickle" version))
4470 (sha256
4471 (base32
4472 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
4473 (build-system pyproject-build-system)
4474 (arguments
4475 (list
4476 #:test-flags '(list "tests")
4477 #:phases
4478 '(modify-phases %standard-phases
4479 (add-before 'check 'pre-check
4480 (lambda* (#:key inputs #:allow-other-keys)
4481 (setenv "TZ" "UTC")
4482 (setenv "TZDIR"
4483 (search-input-directory inputs "share/zoneinfo")))))))
4484 (native-inputs
4485 (list python-bson
4486 python-ecdsa
4487 python-feedparser
4488 python-pymongo
4489 python-pytest
4490 python-pytest-benchmark
4491 python-pytest-enabler
4492 python-setuptools
4493 python-setuptools-scm
4494 python-simplejson
4495 python-sqlalchemy
4496 python-ujson
4497 python-wheel
4498 tzdata-for-tests))
4499 (home-page "https://jsonpickle.github.io/")
4500 (synopsis "Serialize object graphs into JSON")
4501 (description
4502 "This package provides a Python library for serializing any arbitrary
4503object graph to and from JSON.")
4504 (license license:bsd-3)))
4505
4506(define-public python-mcp
4507 (package
4508 (name "python-mcp")
4509 (version "1.25.0")
4510 (source
4511 (origin
4512 (method url-fetch)
4513 (uri (pypi-uri "mcp" version))
4514 (sha256
4515 (base32 "00k87bl4jvnh7hrmicwb2m715fwccvvlanwf8cnlwdphxdhh6can"))))
4516 (build-system pyproject-build-system)
4517 (arguments
4518 (list
4519 ;; XXX: 186 failed, 648 passed, 94 skipped, 54 errors
4520 ;; A lot of tests fail for unclear reasons.
4521 #:tests? #f))
4522 (propagated-inputs
4523 (list python-httpx
4524 python-httpx-sse
4525 python-pydantic
4526 python-sse-starlette))
4527 (native-inputs
4528 (list python-hatchling
4529 python-jsonschema
4530 python-pydantic-settings
4531 python-pytest
4532 python-pytest-examples
4533 python-pytest-xdist
4534 python-starlette
4535 python-typer
4536 python-typing-inspection
4537 python-uvicorn))
4538 (home-page "https://modelcontextprotocol.io")
4539 (synopsis "Model Context Protocol SDK")
4540 (description
4541 "This package provides a Python Software Development Kit for the Model
4542Context Protocol (MCP).")
4543 (license license:expat)))
4544
4545(define-public python-mechanicalsoup
4546 (package
4547 (name "python-mechanicalsoup")
4548 (version "1.4.0")
4549 (source
4550 (origin
4551 (method url-fetch)
4552 (uri (pypi-uri "mechanicalsoup" version))
4553 (sha256
4554 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
4555 (build-system pyproject-build-system)
4556 (arguments
4557 (list
4558 #:test-flags
4559 ;; Unclear why test fails.
4560 #~(list "-k" "not test_select_form_associated_elements")
4561 ;; The following dependencies are not directly required, the developer
4562 ;; only pinned versions because of vulnerabilities. They also break
4563 ;; sanity-check because it checks for a python-certifi version which is
4564 ;; more recent than the one available in Guix.
4565 #:phases #~(modify-phases %standard-phases
4566 (add-after 'unpack 'relax-dependencies
4567 (lambda _
4568 (substitute* "requirements.txt"
4569 (("certifi.*") "")
4570 (("urllib3.*") "")))))))
4571 (propagated-inputs
4572 (list python-beautifulsoup4 python-lxml python-requests))
4573 (native-inputs
4574 (list python-pytest
4575 python-pytest-flake8
4576 python-pytest-httpbin
4577 python-pytest-mock
4578 python-requests-mock
4579 python-setuptools
4580 python-wheel))
4581 (home-page "https://mechanicalsoup.readthedocs.io/")
4582 (synopsis "Python library for automating website interaction")
4583 (description
4584 "MechanicalSoup is a Python library for automating interaction with
4585websites. It automatically stores and sends cookies, follows redirects, and can
4586follow links and submit forms. It doesn’t do JavaScript.")
4587 (license license:expat)))
4588
4589(define-public python-hypercorn
4590 (package
4591 (name "python-hypercorn")
4592 (version "0.18.0")
4593 (source
4594 (origin
4595 (method git-fetch)
4596 (uri (git-reference
4597 (url "https://github.com/pgjones/hypercorn")
4598 (commit version)))
4599 (file-name (git-file-name name version))
4600 (sha256
4601 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
4602 (build-system pyproject-build-system)
4603 (propagated-inputs
4604 (list python-aioquic
4605 python-h11
4606 python-h2
4607 python-priority
4608 python-pydata-sphinx-theme
4609 python-sphinxcontrib-mermaid
4610 python-tomli
4611 python-trio
4612 python-typing-extensions
4613 python-uvloop
4614 python-wsproto))
4615 (native-inputs
4616 (list nss-certs-for-test
4617 python-httpx
4618 python-pdm-backend
4619 python-pytest
4620 python-pytest-asyncio
4621 python-pytest-cov
4622 python-pytest-trio))
4623 (home-page "https://github.com/pgjones/hypercorn")
4624 (synopsis "ASGI Server based on Hyper libraries")
4625 (description
4626 "This package provides an ASGI (Asynchronous Server Gateway Interface)
4627Server based on Hyper libraries and inspired by @code{python-gunicorn}.")
4628 (license license:expat)))
4629
4630(define-public python-hyperframe
4631 (package
4632 (name "python-hyperframe")
4633 (version "6.1.0")
4634 (source
4635 (origin
4636 (method url-fetch)
4637 (uri (pypi-uri "hyperframe" version))
4638 (sha256
4639 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
4640 (build-system pyproject-build-system)
4641 (native-inputs
4642 (list python-pytest python-setuptools))
4643 (home-page "https://github.com/python-hyper/hyperframe")
4644 (synopsis "HTTP/2 framing layer for Python")
4645 (description
4646 "This library contains the HTTP/2 framing code used in the hyper project.
4647It provides a pure-Python codebase that is capable of decoding a binary stream
4648into HTTP/2 frames.")
4649 (license license:expat)))
4650
4651(define-public python-hpack
4652 (package
4653 (name "python-hpack")
4654 (version "4.1.0")
4655 (source
4656 (origin
4657 ;; PyPI tarball is missing some files necessary for the tests.
4658 (method git-fetch)
4659 (uri (git-reference
4660 (url "https://github.com/python-hyper/hpack")
4661 (commit (string-append "v" version))))
4662 (file-name (git-file-name name version))
4663 (sha256
4664 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
4665 (build-system pyproject-build-system)
4666 (native-inputs
4667 (list python-pytest python-setuptools))
4668 (home-page "https://hyper.rtfd.org")
4669 (synopsis "Pure-Python HPACK header compression")
4670 (description
4671 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
4672for use in Python programs that implement HTTP/2.")
4673 (license license:expat)))
4674
4675(define-public python-h11
4676 (package
4677 (name "python-h11")
4678 (version "0.16.0")
4679 (source
4680 (origin
4681 (method url-fetch)
4682 (uri (pypi-uri "h11" version))
4683 (sha256
4684 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
4685 (build-system pyproject-build-system)
4686 (native-inputs
4687 (list python-pytest python-setuptools))
4688 (home-page "https://github.com/python-hyper/h11")
4689 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
4690 (description
4691 "This is a little HTTP/1.1 library written from scratch in Python, heavily
4692inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
4693code whatsoever. This means you can hook h11 up to your favorite network API,
4694and that could be anything you want.")
4695 (license license:expat)))
4696
4697(define-public python-h2
4698 (package
4699 (name "python-h2")
4700 (version "4.3.0")
4701 (source
4702 (origin
4703 (method git-fetch)
4704 (uri (git-reference
4705 (url "https://github.com/python-hyper/h2")
4706 (commit (string-append "v" version))))
4707 (file-name (git-file-name name version))
4708 (sha256
4709 (base32 "00rf0ii4xgdczx5xmv1k6b65q1axvxizbnl20d5vpr512zdix36k"))))
4710 (build-system pyproject-build-system)
4711 (arguments
4712 (list
4713 ;; tests: 1594 passed, 5 deselected
4714 ;; AssertionError: assert '<RemoteSettingsChanged
4715 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
4716 ;; new_value=32768)}>' == '<RemoteSettingsChanged
4717 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
4718 ;; original_value=65536, new_value=32768)}>'
4719 #:test-flags
4720 #~(list "-k"
4721 (string-join
4722 (list "not test_remotesettingschanged_repr"
4723 ;; This test exceededs the Hypothesis deadline.
4724 #$@(if (target-riscv64?)
4725 #~("test_changing_max_frame_size")
4726 #~())
4727 "test_streamreset_repr"
4728 "test_settingsacknowledged_repr"
4729 "test_connectionterminated_repr[None-None]"
4730 "test_connectionterminated_repr[some"
4731 "test_remotesettingschanged_repr"
4732 "test_streamreset_repr"
4733 "test_settingsacknowledged_repr"
4734 "test_connectionterminated_repr[None-None]"
4735 "test_connectionterminated_repr[some")
4736 " and not "))))
4737 (native-inputs
4738 (list python-pytest
4739 python-setuptools))
4740 (propagated-inputs
4741 (list python-hpack
4742 python-hyperframe))
4743 (home-page "https://github.com/python-hyper/h2")
4744 (synopsis "HTTP/2 State-Machine based protocol implementation")
4745 (description
4746 "This module contains a pure-Python implementation of a HTTP/2 protocol
4747stack. It does not provide a parsing layer, a network layer, or any rules
4748about concurrency. Instead, it's a purely in-memory solution, defined in
4749terms of data actions and HTTP/2 frames. This is one building block of a full
4750Python HTTP implementation.")
4751 (license license:expat)))
4752
4753(define-public python-slixmpp
4754 (package
4755 (name "python-slixmpp")
4756 (version "1.8.6") ; XXX: The latest version which does not require Rust
4757 (source
4758 (origin
4759 (method git-fetch)
4760 (uri (git-reference
4761 (url "https://codeberg.org/poezio/slixmpp")
4762 (commit (string-append "slix-" version))))
4763 (file-name (git-file-name name version))
4764 (sha256
4765 (base32 "0gpy6arwyk4lsx1hbcwbllxs6qbwn58adkp1rm1cfvfrjdv5kxx7"))))
4766 (build-system pyproject-build-system)
4767 (arguments
4768 (list
4769 #:phases
4770 #~(modify-phases %standard-phases
4771 (add-after 'unpack 'patch-setup.py
4772 (lambda _
4773 (substitute* "setup.py"
4774 (("'CC', 'cc'")
4775 "'CC', 'gcc'")))))))
4776 (native-inputs
4777 (list gnupg
4778 pkg-config
4779 python-cython
4780 python-setuptools
4781 python-wheel))
4782 (inputs
4783 (list libidn
4784 python)) ; We are building a Python extension.
4785 (propagated-inputs
4786 (list python-aiodns
4787 python-aiohttp
4788 python-cryptography
4789 python-defusedxml
4790 python-emoji
4791 python-pyasn1
4792 python-pyasn1-modules))
4793 (home-page "https://lab.louiz.org/poezio/slixmpp")
4794 (synopsis "XMPP library without threads")
4795 (description
4796 "Slixmpp is a XMPP library for Python 3.7+. It is a fork of SleekXMPP.
4797Its goal is to only rewrite the core of the library (the low level socket
4798handling, the timers, the events dispatching) in order to remove all
4799threads.")
4800 (license license:expat)))
4801
4802(define-public python-sockjs-tornado
4803 (package
4804 (name "python-sockjs-tornado")
4805 (version "1.0.6")
4806 (source
4807 (origin
4808 (method git-fetch)
4809 (uri (git-reference
4810 (url "https://github.com/mrjoes/sockjs-tornado/")
4811 (commit (string-append "v" version))))
4812 (file-name (git-file-name name version))
4813 (sha256
4814 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
4815 (build-system pyproject-build-system)
4816 (arguments
4817 (list
4818 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
4819 (native-inputs (list python-setuptools))
4820 (propagated-inputs (list python-tornado))
4821 (home-page "https://github.com/mrjoes/sockjs-tornado/")
4822 (synopsis
4823 "SockJS Python server implementation on top of the Tornado framework")
4824 (description
4825 "SockJS-tornado provides the server-side counterpart to a SockJS client
4826library, through the Tornado framework.
4827
4828SockJS provides a low-latency, full-duplex, cross-domain communication channel
4829between a web browser and web server.")
4830 (license license:expat)))
4831
4832(define-public python-flask-assets
4833 ;; The latest release still depends on the abandoned flask-script, whereas
4834 ;; at this later commit (already 2 years old at the time of this writing)
4835 ;; the dependency has been lifted.
4836 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
4837 (revision "1"))
4838 (package
4839 (name "python-flask-assets")
4840 (version (git-version "2.1.0" revision commit))
4841 (source
4842 (origin
4843 (method git-fetch)
4844 (uri (git-reference
4845 (url "https://github.com/miracle2k/flask-assets/")
4846 (commit commit)))
4847 (file-name (git-file-name name version))
4848 (sha256
4849 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
4850 (build-system pyproject-build-system)
4851 (propagated-inputs
4852 (list python-flask python-webassets))
4853 (native-inputs
4854 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
4855 (home-page "https://github.com/miracle2k/flask-assets")
4856 (synopsis "Asset management for Flask")
4857 (description "This package integrates @code{webassets} with Flask, adding
4858support for merging, minifying and compiling CSS and Javascript files.")
4859 (license license:bsd-2))))
4860
4861(define-public python-flask-babel
4862 (package
4863 (name "python-flask-babel")
4864 (version "4.0.0")
4865 (source
4866 (origin
4867 (method git-fetch) ;no tests in pypi release
4868 (uri (git-reference
4869 (url "https://github.com/python-babel/flask-babel")
4870 (commit (string-append "v" version))))
4871 (sha256
4872 (base32
4873 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
4874 (build-system pyproject-build-system)
4875 (native-inputs
4876 (list python-poetry-core
4877 python-pytest
4878 python-pytest-mock))
4879 (propagated-inputs
4880 (list python-babel
4881 python-flask
4882 python-jinja2
4883 python-pytz))
4884 (home-page "https://github.com/python-babel/flask-babel")
4885 (synopsis "Add i18n/l10n support to Flask applications")
4886 (description "This package implements internationalization and localization
4887support for Flask. This is based on the Python babel module as well as pytz -
4888both of which are installed automatically if you install this library.")
4889 (license license:bsd-3)))
4890
4891(define-public python-flask-cors
4892 (package
4893 (name "python-flask-cors")
4894 (version "6.0.2")
4895 (source
4896 (origin
4897 (method git-fetch) ;no tests in PyPI archive
4898 (uri (git-reference
4899 (url "https://github.com/CoryDolphin/flask-cors")
4900 (commit version)))
4901 (file-name (git-file-name name version))
4902 (sha256
4903 (base32 "02y740h951dscgkm7ghsss1bc0m8ymsfdpsimm1j0nkl0zjl6sgm"))))
4904 (build-system pyproject-build-system)
4905 (arguments
4906 (list
4907 #:phases
4908 #~(modify-phases %standard-phases
4909 (add-after 'unpack 'fix-version
4910 (lambda _
4911 ;; Otherwise sanity-check of dependents will fail.
4912 (substitute* "pyproject.toml"
4913 (("version = \"0\\.0\\.1\"" all)
4914 (string-append "version = \"" #$version "\""))))))))
4915 (native-inputs
4916 (list python-pytest
4917 python-setuptools))
4918 (propagated-inputs
4919 (list python-flask
4920 python-werkzeug))
4921 (home-page "https://flask-cors.readthedocs.io/en/latest/")
4922 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
4923 (description
4924 "This package provides a Flask extension for handling @acronym{CORS,Cross
4925Origin Resource Sharing}, making cross-origin AJAX possible.")
4926 (license license:expat)))
4927
4928(define-public python-flask-markdown
4929 (package
4930 (name "python-flask-markdown")
4931 (version "0.3")
4932 (source
4933 (origin
4934 (method git-fetch)
4935 (uri (git-reference
4936 (url "https://github.com/dcolish/flask-markdown")
4937 (commit version)))
4938 (file-name (git-file-name name version))
4939 (sha256
4940 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
4941 (build-system pyproject-build-system)
4942 (arguments
4943 (list
4944 #:tests? #f ;Tests seem to be incompatible with latest python
4945 #:phases
4946 #~(modify-phases %standard-phases
4947 (add-after 'unpack 'set-version
4948 (lambda _
4949 (substitute* "setup.py"
4950 (("dev")
4951 #$version)))))))
4952 (propagated-inputs (list python-markdown python-flask))
4953 (native-inputs (list python-pynose python-setuptools))
4954 (home-page "https://github.com/dcolish/flask-markdown")
4955 (synopsis "Small extension to help with using Markdown in Flask")
4956 (description
4957 "Flask-Markdown supports several extensions for Markdown and integrates
4958into Jinja2 by default.")
4959 (license license:bsd-3)))
4960
4961(define-public python-flask-session
4962 (package
4963 (name "python-flask-session")
4964 (version "0.8.0")
4965 (source
4966 (origin
4967 (method url-fetch)
4968 (uri (pypi-uri "flask_session" version))
4969 (sha256
4970 (base32
4971 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
4972 (build-system pyproject-build-system)
4973 (arguments
4974 '(#:tests? #f)) ; Tests require the various storage backends to be present
4975 (native-inputs (list python-flit-core))
4976 (propagated-inputs
4977 (list python-cachelib python-flask python-msgspec))
4978 (home-page "https://github.com/pallets-eco/flask-session")
4979 (synopsis "Adds server-side session support to your Flask application")
4980 (description
4981 "Flask-Session is an extension for Flask that adds support for
4982Server-side sessions, with a variety of different backends for session
4983storage.")
4984 (license license:bsd-3)))
4985
4986(define-public python-html5lib
4987 (package
4988 (name "python-html5lib")
4989 (version "1.1")
4990 (source
4991 (origin
4992 (method url-fetch)
4993 (uri (pypi-uri "html5lib" version))
4994 (sha256
4995 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
4996 (build-system pyproject-build-system)
4997 (arguments
4998 '(#:tests? #f)) ;tests depend on dated pytest-expect
4999 (native-inputs
5000 (list python-setuptools))
5001 (propagated-inputs
5002 (list python-six
5003 python-webencodings
5004 ;; Required by Calibre 5.
5005 python-chardet))
5006 (home-page "https://github.com/html5lib/html5lib-python")
5007 (synopsis "Python HTML parser based on the WHATWG HTML specification")
5008 (description
5009 "Html5lib is an HTML parser based on the WHATWG HTML specification
5010and written in Python.")
5011 (license license:expat)))
5012
5013(define-public python-html5-parser
5014 (package
5015 (name "python-html5-parser")
5016 (version "0.4.12")
5017 (source
5018 (origin
5019 (method git-fetch)
5020 (uri (git-reference
5021 (url "https://github.com/kovidgoyal/html5-parser")
5022 (commit (string-append "v" version))))
5023 (file-name (git-file-name name version))
5024 (sha256
5025 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
5026 (build-system pyproject-build-system)
5027 (arguments
5028 (list
5029 #:phases
5030 #~(modify-phases %standard-phases
5031 (add-before 'build 'set-configure-flags
5032 (lambda _
5033 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
5034 (native-inputs (list pkg-config python-setuptools))
5035 (inputs (list libxml2))
5036 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
5037 (home-page "https://html5-parser.readthedocs.io")
5038 (synopsis "Fast C-based HTML5 parsing for Python")
5039 (description
5040 "This package provides a fast implementation of the HTML5 parsing spec
5041for Python. Parsing is done in C using a variant of the gumbo parser. The
5042gumbo parse tree is then transformed into an lxml tree, also in C, yielding
5043parse times that can be a thirtieth of the html5lib parse times.")
5044 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
5045 ;; indicate ASL2.0, including the LICENSE file for the whole project.
5046 (license (list license:asl2.0 license:gpl3))))
5047
5048(define-public python-html5tagger
5049 (package
5050 (name "python-html5tagger")
5051 (version "2.0.0")
5052 (source (origin
5053 (method url-fetch)
5054 (uri (pypi-uri "html5tagger" version))
5055 (sha256
5056 (base32
5057 "090nmjhr0yj3x5iy9zmbmv07dpxn234dqpi2lglk0fa4aj83rvhd"))))
5058 (build-system pyproject-build-system)
5059 (arguments
5060 (list #:tests? #f)) ;no tests in PyPI or Git
5061 (native-inputs
5062 (list python-hatch-vcs python-hatchling))
5063 (home-page "https://github.com/sanic-org/html5tagger")
5064 (synopsis "Create HTML documents from Python")
5065 (description
5066 "@code{html5tagger} provides a simplified HTML5 syntax that can
5067be written directly in Python without templates.")
5068 (license license:unlicense)))
5069
5070(define-public python-minio
5071 (package
5072 (name "python-minio")
5073 (version "7.1.9")
5074 (source
5075 (origin
5076 (method git-fetch)
5077 (uri (git-reference
5078 (url "https://github.com/minio/minio-py")
5079 (commit version)))
5080 (file-name (git-file-name name version))
5081 (sha256
5082 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
5083 (build-system pyproject-build-system)
5084 (arguments
5085 (list
5086 #:test-flags
5087 ;; XXX: requires network access.
5088 #~(list "--ignore=tests/unit/credentials_test.py")))
5089 (native-inputs (list python-pytest python-setuptools))
5090 (propagated-inputs
5091 (list python-certifi python-dateutil python-pytz python-urllib3))
5092 (home-page "https://github.com/minio/minio-py")
5093 (synopsis "Programmatically access Amazon S3 from Python")
5094 (description
5095 "This package provides a Python library for interacting with any
5096Amazon S3 compatible object storage server.")
5097 (license license:asl2.0)))
5098
5099(define-public python-pycrdt
5100 (package
5101 (name "python-pycrdt")
5102 (version "0.13.0")
5103 (source
5104 (origin
5105 (method git-fetch)
5106 (uri (git-reference
5107 (url "https://github.com/y-crdt/pycrdt")
5108 (commit version)))
5109 (file-name (git-file-name name version))
5110 (sha256
5111 (base32 "18mnjbxdlra1w3jl42bf1jb25z9j3inh6s61qighqrvnylgxvxc1"))))
5112 (build-system pyproject-build-system)
5113 (arguments
5114 (list
5115 #:imported-modules `(,@%cargo-build-system-modules
5116 ,@%pyproject-build-system-modules)
5117 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
5118 (guix build pyproject-build-system)
5119 (guix build utils))
5120 #:test-flags #~(list "--ignore=tests/test_types.py")
5121 #:phases
5122 #~(modify-phases %standard-phases
5123 (add-after 'unpack 'relax-requirements
5124 (lambda _
5125 (substitute* "pyproject.toml"
5126 (("requires = \\[\"maturin>=.*\"\\]")
5127 "requires = [\"maturin\"]"))))
5128 (add-after 'unpack 'prepare-cargo-build-system
5129 (lambda args
5130 (for-each
5131 (lambda (phase)
5132 (format #t "Running cargo phase: ~a~%" phase)
5133 (apply (assoc-ref cargo:%standard-phases phase)
5134 #:cargo-target #$(cargo-triplet)
5135 args))
5136 '(unpack-rust-crates
5137 configure
5138 check-for-pregenerated-files
5139 patch-cargo-checksums)))))))
5140 (propagated-inputs
5141 (list python-anyio
5142 python-typing-extensions))
5143 (inputs (cargo-inputs 'pycrdt))
5144 (native-inputs
5145 (append
5146 (list maturin
5147 python-pydantic
5148 python-pytest
5149 rust
5150 `(,rust "cargo"))
5151 (or (and=> (%current-target-system)
5152 (compose list make-rust-sysroot))
5153 '())))
5154 (home-page "https://github.com/y-crdt/pycrdt")
5155 (synopsis "Python CRDTs library ported from Yjs framework")
5156 (description
5157 "Conflict-free Replicated Data Types (CRDTs) allow creating shared
5158documents that can automatically merge changes made concurrently on different
5159copies of the data. When the data lives on different machines, they make it
5160possible to build distributed systems that work with local data, leaving the
5161synchronization and conflict resolution with remote data to the CRDT
5162algorithm, which ensures that all data replicas eventually converge to the
5163same state.
5164
5165This is a Python CRDT library that provides bindings for Yrs, the Rust port of
5166the Yjs framework.")
5167 (license license:expat)))
5168
5169(define-public python-pycrdt-store
5170 (package
5171 (name "python-pycrdt-store")
5172 (version "0.1.3")
5173 (source
5174 (origin
5175 (method git-fetch)
5176 (uri (git-reference
5177 (url "https://github.com/y-crdt/pycrdt-store")
5178 (commit version)))
5179 (file-name (git-file-name name version))
5180 (sha256
5181 (base32 "18yvv5lgxb4v0qlbi8bbkcm1666nxbkmhbx445sxpzab7027fl1a"))))
5182 (build-system pyproject-build-system)
5183 (propagated-inputs
5184 (list python-anyio
5185 python-pycrdt
5186 python-sqlite-anyio))
5187 (native-inputs
5188 (list python-hatchling
5189 python-pytest
5190 python-pytest-rerunfailures
5191 python-trio))
5192 (home-page "https://github.com/y-crdt/pycrdt-store")
5193 (synopsis "Persistent storage for pycrdt")
5194 (description
5195 "This package provides a persistent storage feature for
5196@code{python-pycrdt}.")
5197 (license license:expat)))
5198
5199(define-public python-pycrdt-websocket
5200 (package
5201 (name "python-pycrdt-websocket")
5202 (version "0.16.0")
5203 (source
5204 (origin
5205 (method git-fetch)
5206 (uri (git-reference
5207 (url "https://github.com/y-crdt/pycrdt-websocket")
5208 (commit version)))
5209 (file-name (git-file-name name version))
5210 (sha256
5211 (base32 "1bcxivdra0v5fwlz3hcz98vxi61884bfvcwifsdp3mji28iprv22"))))
5212 (build-system pyproject-build-system)
5213 (arguments
5214 (list
5215 ;; These tests require the unpackaged Yjs.
5216 #:test-flags #~(list "--deselect=tests/test_pycrdt_yjs.py")))
5217 (propagated-inputs
5218 (list python-anyio
5219 python-pycrdt
5220 python-pycrdt-store))
5221 (native-inputs
5222 (list nss-certs-for-test
5223 python-hatchling
5224 python-hypercorn
5225 python-httpx-ws
5226 python-pytest))
5227 (home-page "https://github.com/y-crdt/pycrdt-websocket")
5228 (synopsis "WebSocket connector for pycrdt")
5229 (description "This package provides an asynchronous @code{WebSocket}
5230connector for @code{python-pycrdt}.")
5231 (license license:expat)))
5232
5233(define-public python-pycurl
5234 (package
5235 (name "python-pycurl")
5236 (version "7.45.7")
5237 (source
5238 (origin
5239 (method git-fetch)
5240 (uri (git-reference
5241 (url "https://github.com/pycurl/pycurl")
5242 (commit (string-append
5243 "REL_" (string-replace-substring version "." "_")))))
5244 (file-name (git-file-name name version))
5245 (sha256
5246 (base32 "1gkbv3cvrwd7z3vgqlvcf0wpvm3g6dia8xbx3g4bplnb2cascfiq"))))
5247 (build-system pyproject-build-system)
5248 (arguments
5249 '(#:test-flags
5250 ;; The test suite is not thread safe:
5251 ;; - some tests want to use the same port: address already in use
5252 ;; - some tests use signal.Signal, i.e. main-thread only
5253 (list "-k" (string-append
5254 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
5255 ;; open shared object file: No such file or directory
5256 "not test_libcurl_ssl_gnutls"
5257 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
5258 ;; open shared object file: No such file or directory
5259 " and not test_libcurl_ssl_nss"
5260 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
5261 ;; open shared object file: No such file or directory
5262 " and not test_libcurl_ssl_openssl"
5263 ;; "A requested feature, protocol or option was not
5264 ;; found built-in in this libcurl due to a build-time
5265 ;; decision."
5266 " and not test_issuercert_blob"
5267 " and not test_krb4level"
5268 " and not test_krblevel"))
5269 #:phases (modify-phases %standard-phases
5270 (add-before 'build 'configure-tls-backend
5271 (lambda _
5272 ;; XXX: PycURL fails to automatically determine which
5273 ;; TLS backend to use when cURL is built with
5274 ;; --disable-static. See setup.py and
5275 ;; <https://github.com/pycurl/pycurl/pull/147>.
5276 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
5277 (native-inputs
5278 (list python-bottle
5279 python-flaky
5280 python-flask
5281 python-pytest
5282 python-setuptools
5283 python-wheel))
5284 (inputs
5285 (list curl gnutls))
5286 (home-page "http://pycurl.io/")
5287 (synopsis "Lightweight Python wrapper around libcurl")
5288 (description "Pycurl is a lightweight wrapper around libcurl. It provides
5289high-speed transfers via libcurl and frequently outperforms alternatives.")
5290
5291 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
5292 ;; under the terms of LGPLv2.1+ or Expat.
5293 (license (list license:lgpl2.1+ license:expat))))
5294
5295(define-public python-stamina
5296 (package
5297 (name "python-stamina")
5298 (version "25.2.0")
5299 (source
5300 (origin
5301 (method git-fetch)
5302 (uri (git-reference
5303 (url "https://github.com/hynek/stamina")
5304 (commit version)))
5305 (file-name (git-file-name name version))
5306 (sha256
5307 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
5308 (build-system pyproject-build-system)
5309 (native-inputs
5310 (list python-pytest
5311 python-anyio
5312 python-dirty-equals
5313 python-hatch-fancy-pypi-readme
5314 python-hatch-vcs
5315 python-hatchling
5316 python-structlog))
5317 (propagated-inputs
5318 (list python-tenacity
5319 python-typing-extensions))
5320 (home-page "https://github.com/hynek/stamina")
5321 (synopsis "Retries library for Python")
5322 (description
5323 "@code{stamina} is an opinionated wrapper around the
5324@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
5325 (license license:expat)))
5326
5327(define-public python-stripe
5328 (package
5329 (name "python-stripe")
5330 (version "13.2.0")
5331 (source
5332 (origin
5333 (method git-fetch)
5334 (uri (git-reference
5335 (url "https://github.com/stripe/stripe-python")
5336 (commit (string-append "v" version))))
5337 (file-name (git-file-name name version))
5338 (sha256
5339 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
5340 (build-system pyproject-build-system)
5341 (arguments
5342 '(#:tests? #f)) ;; tests require network
5343 (native-inputs
5344 (list python-flit-core))
5345 (propagated-inputs
5346 (list python-httpx
5347 python-requests))
5348 (home-page "https://github.com/stripe/stripe-python")
5349 (synopsis "Python bindings for the Stripe financial services' API")
5350 (description "This package provides access to the Stripe financial
5351services' API. It includes a pre-defined set of classes for API resources
5352that initialize themselves dynamically from API responses which makes it
5353compatible with a wide range of versions of the Stripe API.")
5354 (license license:expat)))
5355
5356(define-public python-stripe-12
5357 (hidden-package
5358 (package/inherit python-stripe
5359 (name "python-stripe")
5360 (version "12.5.1")
5361 (source
5362 (origin
5363 (inherit (package-source python-stripe))
5364 (uri (git-reference
5365 (url "https://github.com/stripe/stripe-python")
5366 (commit (string-append "v" version))))
5367 (file-name (git-file-name name version))
5368 (sha256 (base32
5369 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
5370 (native-inputs
5371 (list python-setuptools)))))
5372
5373(define-public python-tldextract
5374 (package
5375 (name "python-tldextract")
5376 (version "5.3.0")
5377 (source
5378 (origin
5379 (method url-fetch)
5380 (uri (pypi-uri "tldextract" version))
5381 (sha256
5382 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
5383 (build-system pyproject-build-system)
5384 (arguments
5385 (list
5386 #:phases
5387 #~(modify-phases %standard-phases
5388 (add-after 'unpack 'relax-requirements
5389 (lambda _
5390 (substitute* "pyproject.toml"
5391 (("\"requests-file.*\",")
5392 "\"requests-file\",")))))))
5393 (native-inputs
5394 (list nss-certs-for-test
5395 python-pytest
5396 python-pytest-mock
5397 python-responses
5398 python-setuptools
5399 python-setuptools-scm
5400 python-syrupy))
5401 (propagated-inputs
5402 (list python-filelock
5403 python-idna
5404 python-requests
5405 python-requests-file))
5406 (home-page "https://github.com/john-kurkowski/tldextract")
5407 (synopsis
5408 "Separate the TLD from the registered domain and subdomains of a URL")
5409 (description
5410 "TLDExtract accurately separates the TLD from the registered domain and
5411subdomains of a URL, using the Public Suffix List. By default, this includes
5412the public ICANN TLDs and their exceptions. It can optionally support the
5413Public Suffix List's private domains as well.")
5414 (license license:bsd-3)))
5415
5416(define-public python-tracerite
5417 (package
5418 (name "python-tracerite")
5419 (version "2.5.2")
5420 (source
5421 (origin
5422 (method url-fetch)
5423 (uri (pypi-uri "tracerite" version))
5424 (sha256
5425 (base32 "087i51ybbj62nx5jzx8znhqb6cd7279mi7v9j6lrxf8lhb81nr3r"))))
5426 (build-system pyproject-build-system)
5427 (arguments
5428 (list #:tests? #f)) ;no tests in PyPI or Git
5429 (native-inputs
5430 (list python-hatch-vcs python-hatchling))
5431 (propagated-inputs
5432 (list python-html5tagger))
5433 (home-page "https://github.com/sanic-org/tracerite")
5434 (synopsis "Human-readable HTML tracebacks")
5435 (description
5436 "@code{tracerite} converts Python tracebacks into useful error messages
5437in human-readable HTML format.")
5438 (license license:unlicense)))
5439
5440(define-public python-trio-websocket
5441 (package
5442 (name "python-trio-websocket")
5443 (version "0.12.2")
5444 (source
5445 (origin
5446 (method git-fetch)
5447 (uri (git-reference
5448 (url "https://github.com/HyperionGray/trio-websocket")
5449 (commit version)))
5450 (file-name (git-file-name name version))
5451 (sha256
5452 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
5453 (build-system pyproject-build-system)
5454 (native-inputs
5455 (list python-pytest
5456 python-pytest-trio
5457 python-setuptools
5458 python-trustme))
5459 (propagated-inputs
5460 (list python-outcome
5461 python-trio
5462 python-wsproto))
5463 (home-page "https://github.com/HyperionGray/trio-websocket")
5464 (synopsis "WebSocket library for Trio")
5465 (description "This library implements both server and client aspects of
5466the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
5467striving for safety, correctness, and ergonomics. It is based on the
5468@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
5469@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
5470the majority of the WebSocket protocol, including framing, codecs, and events.
5471This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
5472the Trio framework}.")
5473 (license license:expat)))
5474
5475(define-public python-txacme
5476 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
5477 ;; compatibility with twisted, use the latest commit from trunk branch.
5478 ;;
5479 ;;See: <https://github.com/twisted/txacme/issues/165>.
5480 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
5481 (revision "0"))
5482 (package
5483 (name "python-txacme")
5484 (version (git-version "0.9.3" revision commit))
5485 (source
5486 (origin
5487 (method git-fetch) ;no fresh release in PyPI
5488 (uri (git-reference
5489 (url "https://github.com/twisted/txacme")
5490 (commit commit)))
5491 (file-name (git-file-name name version))
5492 (sha256
5493 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
5494 (build-system pyproject-build-system)
5495 (arguments
5496 (list #:test-backend #~'custom
5497 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
5498 (native-inputs
5499 (list python-setuptools))
5500 (propagated-inputs
5501 (list python-acme
5502 python-attrs
5503 python-eliot
5504 python-josepy
5505 python-pem
5506 python-treq
5507 python-twisted
5508 python-txsni))
5509 (home-page "https://github.com/twisted/txacme")
5510 (synopsis "Twisted implexmentation of the ACME protocol")
5511 (description
5512 "ACME is Automatic Certificate Management Environment, a protocol that
5513allows clients and certificate authorities to automate verification and
5514certificate issuance. The ACME protocol is used by the free Let's Encrypt
5515Certificate Authority.
5516
5517txacme is an implementation of the protocol for Twisted, the event-driven
5518networking engine for Python.")
5519 (license license:expat))))
5520
5521(define-public python-txaio
5522 (package
5523 (name "python-txaio")
5524 (version "25.9.2")
5525 (source
5526 (origin
5527 (method url-fetch)
5528 (uri (pypi-uri "txaio" version))
5529 (sha256
5530 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
5531 (build-system pyproject-build-system)
5532 (native-inputs
5533 (list python-pytest
5534 python-setuptools))
5535 (home-page "https://github.com/crossbario/txaio")
5536 (synopsis "Compatibility layer between Python asyncio and Twisted")
5537 (description
5538 "Txaio provides a compatibility layer between the Python @code{asyncio}
5539 bsmodule and @code{Twisted}.")
5540 (license license:expat)))
5541
5542;; XXX: Potentially abandonware since 2017, consider to remove when nothing
5543;; depends on it or fails to build.
5544(define-public python-txamqp
5545 (package
5546 (name "python-txamqp")
5547 (version "0.8.2")
5548 (source
5549 (origin
5550 (method url-fetch)
5551 (uri (pypi-uri "txAMQP" version))
5552 (sha256
5553 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
5554 (build-system pyproject-build-system)
5555 (arguments
5556 (list #:tests? #f)) ;all tests failed
5557 (native-inputs
5558 (list python-setuptools))
5559 (propagated-inputs
5560 (list python-six python-twisted))
5561 (home-page "https://github.com/txamqp/txamqp")
5562 (synopsis "Communicate with AMQP peers and brokers using Twisted")
5563 (description
5564 "This package provides a Python library for communicating with AMQP peers
5565and brokers using the asynchronous networking framework Twisted. It contains
5566all the necessary code to connect, send and receive messages to/from an
5567AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
5568also includes support for using Thrift RPC over AMQP in Twisted
5569applications.")
5570 (license license:asl2.0)))
5571
5572(define-public python-txsni
5573 (package
5574 (name "python-txsni")
5575 (version "0.2.0")
5576 (source
5577 (origin
5578 (method git-fetch)
5579 (uri (git-reference
5580 (url "https://github.com/glyph/txsni")
5581 (commit (string-append "v" version))))
5582 (file-name (git-file-name name version))
5583 (sha256
5584 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
5585 (build-system pyproject-build-system)
5586 (arguments
5587 (list #:test-backend #~'custom
5588 #:test-flags #~(list "-m" "twisted.trial"
5589 "--temp-directory=/tmp/_trial_temp"
5590 "txsni")))
5591 (native-inputs
5592 (list python-setuptools))
5593 (propagated-inputs
5594 (list python-pyopenssl
5595 python-service-identity
5596 python-twisted))
5597 (home-page "https://github.com/glyph/txsni")
5598 (synopsis "Run TLS servers with Twisted")
5599 (description
5600 "This package provides an easy-to-use SNI endpoint for use with the
5601Twisted web framework.")
5602 (license license:expat)))
5603
5604(define-public python-txtorcon
5605 (package
5606 (name "python-txtorcon")
5607 (version "24.8.0")
5608 (source
5609 (origin
5610 (method url-fetch)
5611 (uri (pypi-uri "txtorcon" version))
5612 (sha256
5613 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
5614 (build-system pyproject-build-system)
5615 (native-inputs
5616 (list python-pytest
5617 python-setuptools
5618 python-wheel))
5619 (inputs
5620 (list lsof))
5621 (propagated-inputs
5622 (list python-automat
5623 python-idna
5624 python-incremental
5625 python-pyopenssl
5626 python-service-identity
5627 python-twisted
5628 python-zope-interface))
5629 (home-page "https://github.com/meejah/txtorcon")
5630 (synopsis "Twisted-based Tor controller client")
5631 (description
5632 "This package provides a Twisted-based Tor controller client,with
5633state-tracking and configuration abstractions.")
5634 (license license:expat)))
5635
5636(define-public python-url-normalize
5637 (package
5638 (name "python-url-normalize")
5639 (version "2.2.1")
5640 (source
5641 (origin
5642 (method git-fetch) ; no tests in PyPI release
5643 (uri (git-reference
5644 (url "https://github.com/niksite/url-normalize")
5645 (commit (string-append "v" version))))
5646 (file-name (git-file-name name version))
5647 (sha256
5648 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
5649 (build-system pyproject-build-system)
5650 (arguments
5651 (list
5652 #:test-flags #~(list "--ignore=tests/test_cli.py")))
5653 (native-inputs
5654 (list python-pytest python-pytest-socket python-setuptools))
5655 (propagated-inputs
5656 (list python-idna))
5657 (home-page "https://github.com/niksite/url-normalize")
5658 (synopsis "URL normalization for Python")
5659 (description
5660 "This package provides a URI Normalization function with following
5661features:
5662@itemize
5663@item take care of IDN domains
5664@item always provide the URI scheme in lowercase characters
5665@item always provide the host, if any, in lowercase characters
5666@item only perform percent-encoding where it is essential
5667@item always use uppercase A-through-F characters when percent-encoding
5668@item prevent dot-segments appearing in non-relative URI paths
5669@item for schemes that define a default authority, use an empty authority if
5670the default is desired
5671@item for schemes that define an empty path to be equivalent to a path of
5672@code{/}, use @code{/}
5673@item for schemes that define a port, use an empty port if the default is
5674desired
5675@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
5676@end itemize")
5677 (license license:expat)))
5678
5679(define-public python-waitress
5680 (package
5681 (name "python-waitress")
5682 (version "3.0.2")
5683 (source
5684 (origin
5685 (method url-fetch)
5686 (uri (pypi-uri "waitress" version))
5687 (sha256
5688 (base32
5689 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
5690 (build-system pyproject-build-system)
5691 (arguments
5692 (list
5693 ;; https://github.com/Pylons/waitress/issues/443
5694 #:test-flags #~(list "-k" "not test_service_port")))
5695 (native-inputs (list python-pytest python-setuptools))
5696 (home-page "https://github.com/Pylons/waitress")
5697 (synopsis "Waitress WSGI server")
5698 (description
5699 "Waitress is meant to be a production-quality pure-Python WSGI server
5700with very acceptable performance.")
5701 (license license:zpl2.1)))
5702
5703(define-public python-weasel
5704 (package
5705 (name "python-weasel")
5706 (version "1.0.0")
5707 (source
5708 (origin
5709 (method git-fetch)
5710 (uri (git-reference
5711 (url "https://github.com/explosion/weasel/")
5712 (commit (string-append "release-v" version))))
5713 (file-name (git-file-name name version))
5714 (sha256
5715 (base32 "1sxcxri9hl9rs1kvdrv81g6mlg7lifhq9xacskracz63v4nyh8na"))))
5716 (build-system pyproject-build-system)
5717 (arguments
5718 (list
5719 #:test-flags
5720 ;; This test raises an error, but not the one expected by pytest.
5721 #~(list (string-append "--deselect=weasel/tests/test_validation.py::"
5722 "test_project_config_interpolation[10_0]")
5723 ;; Network access is required.
5724 #$@(map (lambda (test) (string-append "--deselect="
5725 "weasel/tests/cli/"
5726 test))
5727 (list "test_cli.py::test_project_git_dir_asset"
5728 "test_cli.py::test_project_git_file_asset"
5729 "test_cli_app.py::test_project_assets")))))
5730 (native-inputs
5731 (list python-pytest
5732 python-setuptools))
5733 (propagated-inputs
5734 (list python-cloudpathlib
5735 python-confection
5736 python-httpx
5737 python-packaging
5738 python-pydantic
5739 python-smart-open
5740 python-srsly
5741 python-typer
5742 python-wasabi))
5743 (home-page "https://github.com/explosion/weasel/")
5744 (synopsis "Small and easy workflow system")
5745 (description
5746 "This package provides a minimalistic workflow system to manage and
5747share end-to-end workflows for different use cases and domains.")
5748 (license license:expat)))
5749
5750(define-public python-webencodings
5751 (package
5752 (name "python-webencodings")
5753 (version "0.5.1")
5754 (source
5755 (origin
5756 (method url-fetch)
5757 (uri (pypi-uri "webencodings" version))
5758 (sha256
5759 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
5760 (build-system pyproject-build-system)
5761 (arguments
5762 (list #:test-flags #~(list "webencodings/tests.py")))
5763 (native-inputs
5764 (list python-pytest python-setuptools))
5765 (home-page "https://github.com/SimonSapin/python-webencodings")
5766 (synopsis "Character encoding aliases for legacy web content")
5767 (description
5768 "In order to be compatible with legacy web content when interpreting
5769something like @code{Content-Type: text/html; charset=latin1}, tools need to
5770use a particular set of aliases for encoding labels as well as some overriding
5771rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
5772actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
5773BOM takes precedence over any other encoding declaration. The WHATWG
5774@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
5775details so that implementations do not have to reverse-engineer each other.
5776
5777This module implements the Encoding standard and has encoding labels and BOM
5778detection, but the actual implementation for encoders and decoders is
5779Python’s.")
5780 (license license:bsd-3)))
5781
5782(define-public python-omnipath
5783 (package
5784 (name "python-omnipath")
5785 (version "1.0.10")
5786 (source
5787 (origin
5788 (method git-fetch)
5789 (uri (git-reference
5790 (url "https://github.com/saezlab/omnipath/")
5791 (commit (string-append "v" version))))
5792 (file-name (git-file-name name version))
5793 (sha256
5794 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
5795 (build-system pyproject-build-system)
5796 (arguments
5797 (list
5798 #:test-flags '(list "-k"
5799 (string-append
5800 ;; These require internet access
5801 "not test_download_homologene"
5802 " and not test_complex_genes"
5803 ;; These tests are not compatible with pandas 3
5804 " and not test_no_dtype_conversion"
5805 " and not test_strip_resource_label_no_func"
5806 " and not test_split_unique_join_no_func"
5807 " and not test_auto_dtype"))
5808 #:phases
5809 #~(modify-phases %standard-phases
5810 (add-after 'unpack 'set-home
5811 (lambda _
5812 (setenv "HOME" "/tmp"))))))
5813 (propagated-inputs (list python-attrs
5814 python-docrep
5815 python-inflect
5816 python-networkx
5817 python-packaging
5818 python-pandas
5819 python-requests
5820 python-tqdm
5821 python-typing-extensions
5822 python-urllib3
5823 python-wrapt))
5824 (native-inputs (list nss-certs-for-test
5825 python-bump2version
5826 python-hatchling
5827 python-pytest
5828 python-pytest-mock
5829 python-pytest-socket
5830 python-requests-mock))
5831 (home-page "https://omnipathdb.org/")
5832 (synopsis "Python client for the OmniPath web service")
5833 (description "This package provides a Python client for the OmniPath web
5834service.")
5835 (license license:expat)))
5836
5837(define-public python-openai
5838 (package
5839 (name "python-openai")
5840 (version "2.42.0")
5841 (source
5842 (origin
5843 (method git-fetch)
5844 (uri (git-reference
5845 (url "https://github.com/openai/openai-python")
5846 (commit (string-append "v" version))))
5847 (file-name (git-file-name name version))
5848 (sha256
5849 (base32 "1p0vzy34cx2gfkhsqg2kxzam51cjlpa99q0skzj4426sx2hsw3g6"))))
5850 (build-system pyproject-build-system)
5851 (arguments
5852 (list
5853 #:test-flags
5854 ;; These require internet access and an openai API key.
5855 #~(list "--ignore=openai/tests/asyncio/test_endpoints.py"
5856 "--ignore=openai/tests/test_endpoints.py"
5857 "--ignore-glob=tests/api_resources/*")))
5858 (propagated-inputs
5859 (list python-aiohttp
5860 python-distro
5861 python-httpx
5862 python-jiter
5863 python-pydantic
5864 python-requests
5865 python-tqdm
5866 python-typing-extensions))
5867 (native-inputs
5868 (list nss-certs-for-test
5869 python-dirty-equals
5870 python-hatchling
5871 python-hatch-fancy-pypi-readme
5872 python-inline-snapshot
5873 python-pytest
5874 python-pytest-asyncio
5875 python-pytest-mock
5876 python-pytest-xdist
5877 python-respx
5878 python-rich
5879 python-setuptools))
5880 (home-page "https://github.com/openai/openai-python")
5881 (synopsis "Python client library for the OpenAI API")
5882 (description "This package provides a Python client library for the
5883OpenAI API.")
5884 (license license:expat)))
5885
5886(define-public python-openapi-schema-validator
5887 (package
5888 (name "python-openapi-schema-validator")
5889 (version "0.6.2")
5890 (source
5891 (origin
5892 (method git-fetch) ;no tests in pypi release
5893 (uri (git-reference
5894 (url "https://github.com/p1c2u/openapi-schema-validator")
5895 (commit version)))
5896 (file-name (git-file-name name version))
5897 (sha256
5898 (base32
5899 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
5900 (build-system pyproject-build-system)
5901 (arguments
5902 (list
5903 #:test-flags
5904 ;; This one returns 5 instead of 4 elements
5905 '(list "-k" "not test_array_prefixitems_invalid")
5906 #:phases
5907 #~(modify-phases %standard-phases
5908 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
5909 (add-after 'unpack 'relax-requirements
5910 (lambda _
5911 (substitute* "pyproject.toml"
5912 (("jsonschema-specifications.*")
5913 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
5914 (native-inputs (list python-poetry-core python-pytest))
5915 (propagated-inputs
5916 (list python-isodate
5917 python-jsonschema
5918 python-rfc3339-validator
5919 python-strict-rfc3339))
5920 (home-page "https://github.com/p1c2u/openapi-schema-validator")
5921 (synopsis "OpenAPI schema validation library for Python")
5922 (description "Openapi-schema-validator is a Python library that validates
5923a schema against:
5924@itemize
5925@item OpenAPI Schema Specification v3.0 which is an extended subset of the
5926JSON Schema Specification Wright Draft 00.
5927@item OpenAPI Schema Specification v3.1 which is an extended superset of the
5928JSON Schema Specification Draft 2020-12.
5929@end itemize")
5930 (license license:bsd-3)))
5931
5932(define-public python-openapi-spec-validator
5933 (package
5934 (name "python-openapi-spec-validator")
5935 (version "0.7.1")
5936 (source
5937 (origin
5938 (method git-fetch) ;no tests in pypi release
5939 (uri (git-reference
5940 (url "https://github.com/p1c2u/openapi-spec-validator")
5941 (commit version)))
5942 (file-name (git-file-name name version))
5943 (sha256
5944 (base32
5945 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
5946 (build-system pyproject-build-system)
5947 (arguments
5948 (list
5949 ;; These tests attempt to fetch resources from the Internet
5950 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
5951 "-k" "not example")))
5952 (native-inputs
5953 (list python-poetry-core
5954 python-pytest))
5955 (propagated-inputs
5956 (list python-jsonschema
5957 python-jsonschema-path
5958 python-lazy-object-proxy
5959 python-openapi-schema-validator
5960 python-pyyaml
5961 python-requests
5962 python-setuptools))
5963 (home-page "https://github.com/p1c2u/openapi-spec-validator")
5964 (synopsis "OpenAPI spec validator")
5965 (description "OpenAPI Spec Validator is a Python library that validates an
5966OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
59673.0 and OpenAPI 3.1 specifications. The validator aims to check for full
5968compliance with the specification.")
5969 (license license:asl2.0)))
5970
5971(define-public python-openapi-core
5972 (package
5973 (name "python-openapi-core")
5974 (version "0.19.4")
5975 (source
5976 (origin
5977 (method git-fetch)
5978 (uri (git-reference
5979 (url "https://github.com/p1c2u/openapi-core")
5980 (commit version)))
5981 (file-name (git-file-name name version))
5982 (sha256
5983 (base32
5984 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
5985 (build-system pyproject-build-system)
5986 (arguments
5987 (list
5988 #:test-flags
5989 '(list "tests/unit"
5990 "-k" "not test_chars_valid")))
5991 (native-inputs (list python-django
5992 python-falcon
5993 python-flask
5994 python-mock
5995 python-poetry-core
5996 python-pytest
5997 python-pytest-asyncio
5998 python-responses))
5999 (propagated-inputs
6000 (list python-attrs
6001 python-aiohttp
6002 python-isodate
6003 python-jsonschema
6004 python-lazy-object-proxy
6005 python-more-itertools
6006 python-openapi-schema-validator
6007 python-openapi-spec-validator
6008 python-parse
6009 python-six
6010 python-werkzeug))
6011 (home-page "https://github.com/p1c2u/openapi-core")
6012 (synopsis "OpenAPI core library")
6013 (description "Openapi-core is a Python library that adds client-side and
6014server-side support for the OpenAPI Specification v3. It has features such
6015as:
6016@itemize
6017@item Validation of requests and responses
6018@item Schema casting and unmarshalling
6019@item Media type and parameters deserialization
6020@item Security providers (API keys, Cookie, Basic and Bearer HTTP
6021authentications)
6022@item Custom deserializers and formats
6023@item Integration with libraries and frameworks.
6024@end itemize")
6025 (license license:bsd-3)))
6026
6027(define-public python-openid
6028 (package
6029 (name "python-openid")
6030 (version "3.2.0")
6031 (source
6032 (origin
6033 (method url-fetch)
6034 (uri (pypi-uri "python3-openid" version))
6035 (sha256
6036 (base32
6037 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
6038 (build-system pyproject-build-system)
6039 (arguments
6040 `(#:phases
6041 (modify-phases %standard-phases
6042 (replace 'check
6043 (lambda* (#:key tests? #:allow-other-keys)
6044 (when tests?
6045 (invoke "python" "-m" "unittest" "openid.test.test_suite")))))))
6046 (propagated-inputs
6047 (list python-defusedxml))
6048 (native-inputs
6049 (list python-psycopg2 python-django python-setuptools python-wheel))
6050 (home-page "https://github.com/necaris/python3-openid")
6051 (synopsis "OpenID support for servers and consumers")
6052 (description "This library provides OpenID authentication for Python, both
6053for clients and servers.")
6054 (license license:asl2.0)))
6055
6056(define-public python-cssutils
6057 (package
6058 (name "python-cssutils")
6059 (version "2.11.1")
6060 (source
6061 (origin
6062 (method url-fetch)
6063 (uri (pypi-uri "cssutils" version))
6064 (sha256
6065 (base32
6066 "1qpq7xvzqp4cfcb8837rnd30x4hws3rkp33qpvmnxbxn2djsfqq5"))))
6067 (build-system pyproject-build-system)
6068 (arguments
6069 (list
6070 #:phases
6071 #~(modify-phases %standard-phases
6072 (replace 'check
6073 (lambda _
6074 (invoke "pytest" "-vv" "-k"
6075 (string-append "not encutils "
6076 "and not website.logging")))))))
6077 (native-inputs
6078 (list python-cssselect
6079 python-jaraco-test
6080 python-lxml
6081 python-pytest
6082 python-setuptools
6083 python-wheel))
6084 (propagated-inputs
6085 (list python-more-itertools))
6086 (home-page "https://github.com/jaraco/cssutils")
6087 (synopsis
6088 "CSS Cascading Style Sheets library for Python")
6089 (description
6090 "Cssutils is a Python package for parsing and building CSS
6091Cascading Style Sheets. Currently it provides a DOM only and no rendering
6092options.")
6093 (license license:lgpl3+)))
6094
6095(define-public python-css-parser
6096 (package
6097 (inherit python-cssutils)
6098 (name "python-css-parser")
6099 (version "1.0.10")
6100 (source
6101 (origin
6102 (method url-fetch)
6103 (uri (pypi-uri "css-parser" version))
6104 (sha256
6105 (base32 "0qs375slcwqd7slizh6hzkwxx7cdj36v8kwn0qrfji1kscm9f7mz"))))
6106 (home-page "https://github.com/ebook-utils/css-parser")
6107 (synopsis "Fork of cssutils modified for parsing ebooks")
6108 (description
6109 "Css-parser is a Python package for parsing and building CSS
6110Cascading Style Sheets. Currently it provides a DOM only and no rendering
6111options.
6112
6113It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
6114cssutils not receiving updates as of 1.0.2.")
6115 (license license:lgpl3+)))
6116
6117(define-public python-cssselect
6118 (package
6119 (name "python-cssselect")
6120 (version "1.4.0")
6121 (source
6122 (origin
6123 (method git-fetch)
6124 (uri (git-reference
6125 (url "https://github.com/scrapy/cssselect")
6126 (commit (string-append "v" version))))
6127 (file-name (git-file-name name version))
6128 (sha256
6129 (base32 "110l98x1mz1mxcal89xscsg28vg624sc0y6b5x1n2clwa19q5g4y"))))
6130 (build-system pyproject-build-system)
6131 (native-inputs
6132 (list python-hatchling python-lxml python-pytest))
6133 (home-page "https://github.com/scrapy/cssselect")
6134 (synopsis "CSS3 selector parser and translator to XPath 1.0")
6135 (description
6136 "Cssselect ia a Python module that parses CSS3 Selectors and translates
6137them to XPath 1.0 expressions. Such expressions can be used in lxml or
6138another XPath engine to find the matching elements in an XML or HTML document.")
6139 (license license:bsd-3)))
6140
6141(define-public python-databricks-cli
6142 (package
6143 (name "python-databricks-cli")
6144 (version "0.18.0")
6145 (home-page "https://github.com/databricks/databricks-cli")
6146 (source (origin
6147 (method git-fetch)
6148 (uri (git-reference (url home-page) (commit version)))
6149 (file-name (git-file-name name version))
6150 (sha256
6151 (base32
6152 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
6153 (build-system pyproject-build-system)
6154 (arguments
6155 (list #:phases #~(modify-phases %standard-phases
6156 (replace 'check
6157 (lambda _
6158 (invoke "pytest" "tests" "-vv"))))))
6159 (native-inputs
6160 ;; For tests.
6161 (list python-decorator
6162 python-mock
6163 python-pytest
6164 python-requests-mock
6165 python-setuptools
6166 python-wheel))
6167 (propagated-inputs
6168 (list python-click
6169 python-oauthlib
6170 python-pyjwt
6171 python-requests
6172 python-six
6173 python-tabulate))
6174 (synopsis "Command line interface for Databricks")
6175 (description
6176 "The Databricks Command Line Interface is a tool which provides an easy
6177to use interface to the Databricks platform. The CLI is built on top of the
6178Databricks REST APIs.")
6179 (license license:asl2.0)))
6180
6181(define-public python-openid-cla
6182 ;; XXX: Last updated in 2015.
6183 (package
6184 (name "python-openid-cla")
6185 (version "1.2")
6186 (source
6187 (origin
6188 (method url-fetch)
6189 (uri (pypi-uri "python-openid-cla" version))
6190 (sha256
6191 (base32
6192 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
6193 (build-system pyproject-build-system)
6194 (arguments '(#:tests? #f)) ; No tests.
6195 (native-inputs (list python-setuptools python-wheel))
6196 (propagated-inputs (list python-openid python-six))
6197 (home-page "https://github.com/puiterwijk/python-openid-cla/")
6198 (synopsis "Implementation of the OpenID CLA extension for python-openid")
6199 (description "@code{openid-cla} is an implementation of the OpenID
6200contributor license agreement extension for python-openid.")
6201 (license license:bsd-3)))
6202
6203(define-public python-openid-teams
6204 ;; XXX: Last updated in 2018.
6205 (package
6206 (name "python-openid-teams")
6207 (version "1.1")
6208 (source
6209 (origin
6210 (method url-fetch)
6211 (uri (pypi-uri "python-openid-teams" version))
6212 (sha256
6213 (base32
6214 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
6215 (build-system pyproject-build-system)
6216 (arguments '(#:tests? #f)) ; No tests.
6217 (native-inputs (list python-setuptools python-wheel))
6218 (propagated-inputs (list python-openid python-six))
6219 (home-page "https://github.com/puiterwijk/python-openid-teams/")
6220 (synopsis "Implementation of the OpenID teams extension for python-openid")
6221 (description
6222 "@code{openid-teams} is an implementation of the OpenID
6223teams extension for python-openid.")
6224 (license license:bsd-3)))
6225
6226(define-public python-priority
6227 (package
6228 (name "python-priority")
6229 (version "2.0.0")
6230 (source
6231 (origin
6232 (method url-fetch)
6233 (uri (pypi-uri "priority" version))
6234 (sha256
6235 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
6236 (build-system pyproject-build-system)
6237 (native-inputs
6238 (list python-pytest python-setuptools python-wheel))
6239 (home-page "https://python-hyper.org/projects/priority/en/latest/")
6240 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
6241 (description
6242 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
6243set out in RFC 7540 Section 5.3 (Stream Priority).")
6244 (license license:expat)))
6245
6246(define-public python-weblate-language-data
6247 (package
6248 (name "python-weblate-language-data")
6249 (version "2025.8")
6250 (source
6251 (origin
6252 (method url-fetch)
6253 (uri (pypi-uri "weblate_language_data" version))
6254 (sha256
6255 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
6256 (build-system pyproject-build-system)
6257 (arguments (list #:tests? #f)) ;not tests, just data files
6258 (native-inputs
6259 (list python-setuptools))
6260 (propagated-inputs
6261 (list python-translate-toolkit))
6262 (home-page "https://github.com/WeblateOrg/language-data")
6263 (synopsis "Language definitions for Weblate")
6264 (description
6265 "This package provides language definitions used by
6266@url{https://weblate.org/, Weblate}i.")
6267 (license license:expat)))
6268
6269(define-public python-wikidata
6270 (package
6271 (name "python-wikidata")
6272 (version "0.8.1")
6273 (source
6274 (origin
6275 (method git-fetch)
6276 (uri (git-reference
6277 (url "https://github.com/dahlia/wikidata")
6278 (commit version)))
6279 (file-name (git-file-name name version))
6280 (sha256
6281 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
6282 (build-system pyproject-build-system)
6283 (native-inputs
6284 (list python-pytest python-setuptools))
6285 (home-page "https://github.com/dahlia/wikidata")
6286 (synopsis "Wikidata client library")
6287 (description
6288 "This package provides a Python interface to @url{https://www.wikidata.org/,
6289Wikidata}.")
6290 (license license:gpl3+)))
6291
6292(define-public python-wsproto
6293 (package
6294 (name "python-wsproto")
6295 (version "1.3.2")
6296 (source
6297 (origin
6298 (method git-fetch)
6299 (uri (git-reference
6300 (url "https://github.com/python-hyper/wsproto/")
6301 (commit version)))
6302 (file-name (git-file-name name version))
6303 (sha256
6304 (base32 "1n67xnnq3mvnxp61r4d8730hh8hzrq8i9bdrv8jivhj369fhndn9"))))
6305 (build-system pyproject-build-system)
6306 (native-inputs
6307 (list python-pytest
6308 python-setuptools))
6309 (propagated-inputs
6310 (list python-h11))
6311 (home-page "https://github.com/python-hyper/wsproto/")
6312 (synopsis "WebSockets state-machine based protocol implementation")
6313 (description
6314 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
6315stack. It's written from the ground up to be embeddable in whatever program
6316you choose to use, ensuring that you can communicate via WebSockets, as
6317defined in RFC6455, regardless of your programming paradigm.")
6318 (license license:expat)))
6319
6320(define-public hypercorn
6321 (package
6322 (name "hypercorn")
6323 (version "0.18.0")
6324 (source
6325 (origin
6326 (method git-fetch) ;PyPI does not have tests
6327 (uri (git-reference
6328 (url "https://github.com/pgjones/hypercorn")
6329 (commit version)))
6330 (file-name (git-file-name name version))
6331 (sha256
6332 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
6333 (build-system pyproject-build-system)
6334 ;; Propagate because Hypercorn also exposes functionality over a module.
6335 (propagated-inputs (list python-h11
6336 python-h2
6337 python-priority
6338 python-tomli
6339 python-wsproto))
6340 (native-inputs (list nss-certs-for-test
6341 python-httpx
6342 python-pdm-backend
6343 python-poetry-core
6344 python-pytest
6345 python-pytest-asyncio
6346 python-pytest-trio
6347 python-trio))
6348 (home-page "https://gitlab.com/pgjones/hypercorn/")
6349 (synopsis "ASGI Server based on Hyper libraries")
6350 (description
6351 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
6352wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
6353WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
6354can utilise asyncio, uvloop, or trio worker types.")
6355 (license license:expat)))
6356
6357(define-public python-querystring-parser
6358 (package
6359 (name "python-querystring-parser")
6360 (version "1.2.4")
6361 (source
6362 (origin
6363 (method git-fetch)
6364 (uri (git-reference
6365 (url "https://github.com/bernii/querystring-parser")
6366 (commit version)))
6367 (file-name (git-file-name name version))
6368 (sha256
6369 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
6370 (build-system pyproject-build-system)
6371 (arguments
6372 (list
6373 #:test-backend #~'custom
6374 #:test-flags #~(list "querystring_parser/tests.py")
6375 #:phases
6376 #~(modify-phases %standard-phases
6377 (add-after 'unpack 'fix-python-incompatibilities
6378 (lambda _
6379 (substitute* "querystring_parser/tests.py"
6380 ;; XXX FIXME: This test is broken with Python 3.7:
6381 ;; https://github.com/bernii/querystring-parser/issues/35
6382 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
6383 "True")
6384 ;; Removed in Python 3.12.
6385 (("assertEquals")
6386 "assertEqual")))))))
6387 (native-inputs (list python-setuptools))
6388 (propagated-inputs (list python-six))
6389 (home-page "https://github.com/bernii/querystring-parser")
6390 (synopsis "QueryString parser that correctly handles nested dictionaries")
6391 (description
6392 "This package provides a query string parser for Python and Django
6393projects that correctly creates nested dictionaries from sent form/querystring
6394data.")
6395 (license license:expat)))
6396
6397(define-public python-tornado
6398 (package
6399 (name "python-tornado")
6400 (version "6.4.2")
6401 (source
6402 (origin
6403 (method url-fetch)
6404 (uri (pypi-uri "tornado" version))
6405 (sha256
6406 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
6407 (build-system pyproject-build-system)
6408 (arguments
6409 (list
6410 #:test-flags
6411 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
6412 #~(list "--ignore=tornado/test/iostream_test.py")))
6413 (native-inputs
6414 (list python-certifi
6415 python-pytest
6416 python-setuptools))
6417 (home-page "https://www.tornadoweb.org/")
6418 (synopsis "Python web framework and asynchronous networking library")
6419 (description
6420 "Tornado is a Python web framework and asynchronous networking library,
6421originally developed at FriendFeed. By using non-blocking network I/O,
6422Tornado can scale to tens of thousands of open connections, making it ideal
6423for long polling, WebSockets, and other applications that require a long-lived
6424connection to each user.")
6425 (license license:asl2.0)))
6426
6427;; XXX: Deprecated on <2026-01-23>.
6428(define-deprecated-package python-tornado-6 python-tornado)
6429
6430(define-public python-tornado-http-auth
6431 (package
6432 (name "python-tornado-http-auth")
6433 (version "1.1.1")
6434 (source
6435 (origin
6436 (method git-fetch)
6437 (uri (git-reference
6438 (url "https://github.com/gvalkov/tornado-http-auth")
6439 (commit (string-append "v" version))))
6440 (file-name (git-file-name name version))
6441 (sha256
6442 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
6443 (build-system pyproject-build-system)
6444 ;; XXX: This version is incompatible with current tornado.testing.
6445 (arguments (list #:tests? #f))
6446 (native-inputs (list python-setuptools))
6447 (propagated-inputs (list python-tornado))
6448 (home-page "https://github.com/gvalkov/tornado-http-auth")
6449 (synopsis "Digest and basic authentication module for Tornado")
6450 (description
6451 "Provides support for adding authentication to services using the Tornado
6452web framework, either via the basic or digest authentication schemes.")
6453 (license license:asl2.0)))
6454
6455(define-public python-wsgi-intercept
6456 (package
6457 (name "python-wsgi-intercept")
6458 (version "1.13.1")
6459 (source (origin
6460 (method url-fetch)
6461 (uri (pypi-uri "wsgi_intercept" version))
6462 (sha256
6463 (base32
6464 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
6465 (build-system pyproject-build-system)
6466 (arguments
6467 (list
6468 ;; XXX: tests required internet access
6469 #:tests? #f))
6470 (propagated-inputs
6471 (list python-six))
6472 (native-inputs
6473 (list python-httplib2
6474 python-pytest
6475 python-requests
6476 python-setuptools
6477 python-urllib3
6478 python-wheel))
6479 (synopsis "Puts a WSGI application in place of a real URI for testing")
6480 (description "Wsgi_intercept installs a WSGI application in place of a real
6481URI for testing. Testing a WSGI application normally involves starting a
6482server at a local host and port, then pointing your test code to that address.
6483Instead, this library lets you intercept calls to any specific host/port
6484combination and redirect them into a WSGI application importable by your test
6485program. Thus, you can avoid spawning multiple processes or threads to test
6486your Web app.")
6487 (home-page "https://github.com/cdent/wsgi-intercept")
6488 (license license:expat)))
6489
6490(define-public python-webob
6491 (package
6492 (name "python-webob")
6493 (version "1.8.10")
6494 (source
6495 (origin
6496 (method url-fetch)
6497 (uri (pypi-uri "webob" version))
6498 (sha256
6499 (base32
6500 "0avwfsqqva46aix1p61jbwjsw7kh6zkxvfds9xi3zg07yc8km5hw"))))
6501 (build-system pyproject-build-system)
6502 ;; tests: 2394 passed, 9 skipped, 1 xfailed, 35 warnings
6503 (native-inputs
6504 (list python-pytest
6505 python-setuptools))
6506 (home-page "https://webob.org/")
6507 (synopsis "WSGI request and response object")
6508 (description
6509 "WebOb provides wrappers around the WSGI request environment, and an
6510object to help create WSGI responses.")
6511 (license license:expat)))
6512
6513(define-public python-yewtube-search
6514 (package
6515 (name "python-yewtube-search")
6516 ;; Original repository for python-youtube-search package is archived, see:
6517 ;; <https://github.com/alexmercerind/youtube-search-python/issues/189>.
6518 ;; The most promising fork was
6519 ;; <https://github.com/ahmedayyad-dev/youtube-search-python-fork> which is
6520 ;; archived since <2026-04-04>. This is another fork with a different PyPI
6521 ;; name for python-yewtube.
6522 (version "1.6.7")
6523 (source
6524 (origin
6525 (method url-fetch)
6526 (uri (pypi-uri "yewtube_search_python" version))
6527 (sha256
6528 (base32 "0vjh4wrlqx4lv9qi6572jx2d0rsp6gkvaqf0f2ar4npdz0ldgl47"))))
6529 (build-system pyproject-build-system)
6530 (arguments (list #:tests? #f)) ;no tests in repository
6531 (native-inputs
6532 (list python-setuptools))
6533 (propagated-inputs
6534 (list python-httpx))
6535 (home-page "https://github.com/iamtalhaasghar/youtube-search-python")
6536 (synopsis "Search for YouTube videos, channels & playlists")
6537 (description
6538 "This package provides tools to search for @code{YouTube} videos,
6539channels and playlists; as well as getting video metadata from links. This
6540package does not rely on the @code{YouTube} Data API v3.")
6541 (license license:expat)))
6542
6543(define-public python-zc-lockfile
6544 (package
6545 (name "python-zc-lockfile")
6546 (version "4.0")
6547 (source
6548 (origin
6549 (method git-fetch)
6550 (uri (git-reference
6551 (url "https://github.com/zopefoundation/zc.lockfile")
6552 (commit version)))
6553 (file-name (git-file-name name version))
6554 (sha256
6555 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
6556 (build-system pyproject-build-system)
6557 (arguments
6558 (list
6559 #:phases
6560 #~(modify-phases %standard-phases
6561 (replace 'check
6562 (lambda* (#:key tests? #:allow-other-keys)
6563 (if tests?
6564 (invoke "zope-testrunner" "--test-path=src")
6565 (format #t "test suite not run~%")))))))
6566 (native-inputs (list python-zope-testing python-zope-testrunner
6567 python-setuptools))
6568 (home-page "https://github.com/zopefoundation/zc.lockfile")
6569 (synopsis "Interprocess locks using lock files")
6570 (description
6571 "This package provides an implementation of interprocess locks using lock
6572files. These locks can also be used to mediate access to other files.")
6573 (license license:zpl2.1)))
6574
6575(define-public python-zconfig
6576 (package
6577 (name "python-zconfig")
6578 (version "4.3")
6579 (source
6580 (origin
6581 (method git-fetch)
6582 (uri (git-reference
6583 (url "https://github.com/zopefoundation/ZConfig/")
6584 (commit version)))
6585 (file-name (git-file-name name version))
6586 (sha256
6587 (base32 "06c4vffk51fw03q87r31s81b0xbxg2qqvjfmcl2z4hg21fr088c2"))))
6588 (build-system pyproject-build-system)
6589 (arguments
6590 (list
6591 #:phases
6592 #~(modify-phases %standard-phases
6593 (replace 'check
6594 (lambda* (#:key tests? #:allow-other-keys)
6595 (if tests?
6596 (begin
6597 ;; This test assumes we still have setup.py in the
6598 ;; directory from which we import zconfig, which
6599 ;; does not work after installing the package.
6600 (delete-file-recursively
6601 "src/ZConfig/tests/test_readme.py")
6602 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
6603 (format #t "test suite not run~%")))))))
6604 (native-inputs (list python-docutils python-manuel python-zope-exceptions
6605 python-zope-testrunner python-setuptools))
6606 (home-page "https://github.com/zopefoundation/ZConfig/")
6607 (synopsis "Structured configuration library intended for general use")
6608 (description
6609 "@code{zconfig} is a configuration library intended for general use. It
6610supports a hierarchical schema-driven configuration model that allows a schema
6611to specify data conversion routines written in Python. Its model is very
6612different from the model supported by the @code{configparser} module found in
6613Python's standard library, and is more suitable to configuration-intensive
6614applications.")
6615 (license license:zpl2.1)))
6616
6617(define-public python-zodb
6618 (package
6619 (name "python-zodb")
6620 (version "6.0.1")
6621 (source
6622 (origin
6623 (method url-fetch)
6624 (uri (pypi-uri "zodb" version))
6625 (sha256
6626 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
6627 (build-system pyproject-build-system)
6628 (arguments
6629 (list
6630 #:phases
6631 #~(modify-phases %standard-phases
6632 (replace 'check
6633 (lambda* (#:key tests? #:allow-other-keys)
6634 (if tests?
6635 (begin
6636 ;; This test does not work after installing the
6637 ;; package, since it expects the ZODB source code
6638 ;; to reside in the src/ directory.
6639 (delete-file-recursively
6640 "src/ZODB/tests/testdocumentation.py")
6641 (invoke "zope-testrunner" "-vv" "--test-path=src"
6642 "--all"))
6643 (format #t "test suite not run~%")))))))
6644 (native-inputs
6645 (list python-manuel
6646 python-wheel
6647 python-zope-testing
6648 python-zope-testrunner))
6649 (propagated-inputs
6650 (list python-btrees
6651 python-persistent
6652 python-transaction
6653 python-zc-lockfile
6654 python-zconfig
6655 python-zodbpickle
6656 python-zope-interface))
6657 (home-page "http://zodb-docs.readthedocs.io")
6658 (synopsis "Object-oriented database for Python")
6659 (description
6660 "@code{ZODB} provides an object-oriented and @acronym{ACID,
6661Atomicity Consistency Isolation Durability} compliant database for Python with
6662a high degree of transparency. @code{ZODB} is an object-oriented database,
6663not an object-relational mapping. This comes with several advantaged:
6664
6665@itemize
6666@item no separate language for database operations
6667@item very little impact on your code to make objects persistent
6668@item no database mapper that partially hides the database.
6669@item almost no seam between code and database.
6670@end itemize")
6671 (license license:zpl2.1)))
6672
6673(define-public python-zodbpickle
6674 (package
6675 (name "python-zodbpickle")
6676 (version "3.2")
6677 (source
6678 (origin
6679 (method url-fetch)
6680 (uri (pypi-uri "zodbpickle" version))
6681 (sha256
6682 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
6683 (build-system pyproject-build-system)
6684 (arguments
6685 '(#:phases (modify-phases %standard-phases
6686 (replace 'check
6687 (lambda* (#:key tests? #:allow-other-keys)
6688 (if tests?
6689 (invoke "zope-testrunner" "-vv" "--test-path=src"
6690 "--all")
6691 (format #t "test suite not run~%")))))))
6692 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
6693 (home-page "https://github.com/zopefoundation/zodbpickle")
6694 (synopsis "Uniform pickling interface for @code{zodb}")
6695 (description
6696 "This package is a fork of the @code{pickle} module (and the
6697supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
6698support for the @code{noload} operations used by @code{zodb}.")
6699 (license (list license:psfl license:zpl2.1))))
6700
6701(define-public python-zope-dottedname
6702 (package
6703 (name "python-zope-dottedname")
6704 (version "7.0")
6705 (source
6706 (origin
6707 (method git-fetch)
6708 (uri (git-reference
6709 (url "https://github.com/zopefoundation/zope.dottedname")
6710 (commit version)))
6711 (file-name (git-file-name name version))
6712 (sha256
6713 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
6714 (build-system pyproject-build-system)
6715 (arguments
6716 (list #:test-backend #~'custom
6717 #:test-flags #~(list "src/zope/dottedname/tests.py")))
6718 (native-inputs (list python-setuptools))
6719 (home-page "https://zopedottedname.readthedocs.io")
6720 (synopsis "Resolver for Python dotted names")
6721 (description
6722 "This package provides a @code{resolve()} function that resolves strings
6723containing dotted names into the appropriate Python object.")
6724 (license license:zpl2.1)))
6725
6726(define-public python-zope-event
6727 (package
6728 (name "python-zope-event")
6729 (version "6.0")
6730 (source
6731 (origin
6732 (method git-fetch)
6733 (uri (git-reference
6734 (url "https://github.com/zopefoundation/zope.event")
6735 (commit version)))
6736 (file-name (git-file-name name version))
6737 (sha256
6738 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
6739 (build-system pyproject-build-system)
6740 (arguments
6741 (list
6742 #:test-flags
6743 #~(list "src/zope/event/tests.py")))
6744 (native-inputs (list python-pytest python-setuptools))
6745 (home-page "https://zopeevent.readthedocs.io/en/latest/")
6746 (synopsis "Event publishing system for Python")
6747 (description
6748 "Zope.event provides an event publishing API, intended for use by
6749applications which are unaware of any subscribers to their events. It is a
6750simple event-dispatching system on which more sophisticated event dispatching
6751systems can be built.")
6752 (license license:zpl2.1)))
6753
6754(define-public python-zope-interface
6755 (package
6756 (name "python-zope-interface")
6757 (version "7.2")
6758 (source
6759 (origin
6760 (method git-fetch)
6761 (uri (git-reference
6762 (url "https://github.com/zopefoundation/zope.interface")
6763 (commit version)))
6764 (file-name (git-file-name name version))
6765 (sha256
6766 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
6767 (build-system pyproject-build-system)
6768 (arguments
6769 ;; XXX: test suite can't find python-zope-testing
6770 (list #:tests? #f))
6771 (native-inputs (list python-setuptools))
6772 (home-page "https://zopeinterface.readthedocs.io")
6773 (synopsis "\"Design by contract\" methodology in Python")
6774 (description
6775 "Zope.interface provides an implementation of \"object interfaces\" for
6776Python. Interfaces are a mechanism for labeling objects as conforming to a
6777given API or contract.")
6778 (license license:zpl2.1)))
6779
6780(define-public python-zope-exceptions
6781 (package
6782 (name "python-zope-exceptions")
6783 (version "6.0")
6784 (source
6785 (origin
6786 (method git-fetch)
6787 (uri (git-reference
6788 (url "https://github.com/zopefoundation/zope.exceptions")
6789 (commit version)))
6790 (file-name (git-file-name name version))
6791 (sha256
6792 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
6793 (build-system pyproject-build-system)
6794 (arguments
6795 (list
6796 #:phases
6797 #~(modify-phases %standard-phases
6798 (replace 'check
6799 (lambda* (#:key tests? #:allow-other-keys)
6800 (if tests?
6801 (invoke "zope-testrunner" "--test-path=src")
6802 (format #t "test suite not run~%")))))))
6803 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
6804 (propagated-inputs (list python-zope-interface))
6805 (home-page "https://github.com/zopefoundation/zope.exceptions")
6806 (synopsis "Zope exceptions")
6807 (description
6808 "Zope.exceptions provides general-purpose exception types that have uses
6809outside of the Zope framework.")
6810 (license license:zpl2.1)))
6811
6812(define (python-zope-bootstrap-package orig)
6813 (package
6814 (inherit orig)
6815 (name (string-append (package-name orig) "-bootstrap"))
6816 (arguments
6817 (if (null? (package-arguments orig))
6818 (list
6819 #:tests? #f
6820 #:phases #~(modify-phases %standard-phases
6821 (delete 'sanity-check)))
6822 (substitute-keyword-arguments arguments
6823 ((#:tests? _ #f) #f)
6824 ((#:phases phases '%standard-phases)
6825 #~(modify-phases #$phases
6826 (delete 'sanity-check))))))
6827 (propagated-inputs `())
6828 (native-inputs (list python-setuptools))
6829 (properties `((hidden? . #t)))))
6830
6831(define-public python-zope-exceptions-bootstrap
6832 (python-zope-bootstrap-package python-zope-exceptions))
6833
6834(define-public python-zope-testing
6835 (package
6836 (name "python-zope-testing")
6837 (version "6.0")
6838 (source
6839 (origin
6840 (method git-fetch)
6841 (uri (git-reference
6842 (url "https://github.com/zopefoundation/zope.testing")
6843 (commit version)))
6844 (file-name (git-file-name name version))
6845 (sha256
6846 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
6847 (build-system pyproject-build-system)
6848 (arguments
6849 (list
6850 #:phases
6851 #~(modify-phases %standard-phases
6852 (replace 'check
6853 (lambda* (#:key tests? #:allow-other-keys)
6854 (if tests?
6855 (invoke "zope-testrunner" "--test-path=src")
6856 (format #t "test suite not run~%")))))))
6857 (native-inputs (list python-setuptools
6858 python-zope-interface
6859 python-zope-testrunner-bootstrap))
6860 (home-page "https://zopetesting.readthedocs.io/")
6861 (synopsis "Zope testing helpers")
6862 (description
6863 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
6864servers, regular expressions, and more.")
6865 (license license:zpl2.1)))
6866
6867(define-public python-zope-testrunner
6868 (package
6869 (name "python-zope-testrunner")
6870 (version "7.4")
6871 (source
6872 (origin
6873 (method git-fetch)
6874 (uri (git-reference
6875 (url "https://github.com/zopefoundation/zope.testrunner")
6876 (commit version)))
6877 (file-name (git-file-name name version))
6878 (sha256
6879 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
6880 (build-system pyproject-build-system)
6881 (arguments
6882 (list
6883 #:phases
6884 #~(modify-phases %standard-phases
6885 (add-after 'unpack 'remove-problematic-test
6886 (lambda _
6887 ;; This test contains invalid syntax, which breaks bytecode
6888 ;; compilation. For simplicity just remove it.
6889 (delete-file
6890 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
6891 (replace 'check
6892 (lambda* (#:key tests? #:allow-other-keys)
6893 (if tests?
6894 (invoke "zope-testrunner" "--test-path=src")
6895 (format #t "test suite not run~%")))))))
6896 (native-inputs (list python-setuptools python-zope-testing))
6897 (propagated-inputs (list python-zope-exceptions python-zope-interface))
6898 (home-page "https://zopetestrunner.readthedocs.io")
6899 (synopsis "Zope testrunner script")
6900 (description "This package provides a script for running Python tests.")
6901 (license license:zpl2.1)))
6902
6903(define-public python-zope-testrunner-bootstrap
6904 (package
6905 (inherit (python-zope-bootstrap-package python-zope-testrunner))
6906 (propagated-inputs
6907 (list python-six python-zope-exceptions-bootstrap))
6908 (properties `((hidden? . #t)))))
6909
6910(define-public python-zope-i18nmessageid
6911 (package
6912 (name "python-zope-i18nmessageid")
6913 (version "7.0")
6914 (source
6915 (origin
6916 (method git-fetch)
6917 (uri (git-reference
6918 (url "https://github.com/zopefoundation/zope.i18nmessageid")
6919 (commit version)))
6920 (file-name (git-file-name name version))
6921 (sha256
6922 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
6923 (build-system pyproject-build-system)
6924 (arguments
6925 (list
6926 #:phases
6927 #~(modify-phases %standard-phases
6928 (replace 'check
6929 (lambda* (#:key tests? #:allow-other-keys)
6930 (if tests?
6931 (invoke "zope-testrunner" "--test-path=src")
6932 (format #t "test suite not run~%")))))))
6933 (native-inputs (list python-setuptools python-zope-testrunner))
6934 (home-page "https://zopei18nmessageid.readthedocs.io")
6935 (synopsis "Message identifiers for internationalization")
6936 (description "Zope.i18nmessageid provides facilities for declaring
6937internationalized messages within program source text.")
6938 (license license:zpl2.1)))
6939
6940(define-public python-zope-schema
6941 (package
6942 (name "python-zope-schema")
6943 (version "7.0.1")
6944 (source
6945 (origin
6946 (method git-fetch)
6947 (uri (git-reference
6948 (url "https://github.com/zopefoundation/zope.schema")
6949 (commit version)))
6950 (file-name (git-file-name name version))
6951 (sha256
6952 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
6953 (build-system pyproject-build-system)
6954 (arguments
6955 (list
6956 #:phases
6957 #~(modify-phases %standard-phases
6958 (replace 'check
6959 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6960 (add-installed-pythonpath inputs outputs)
6961 (if tests?
6962 (invoke "zope-testrunner" "--test-path=src")
6963 (format #t "test suite not run.~%")))))))
6964 (propagated-inputs (list python-zope-event python-zope-interface))
6965 (native-inputs (list python-zope-i18nmessageid python-zope-testing
6966 python-zope-testrunner python-setuptools))
6967 (home-page "https://zopeschema.readthedocs.io")
6968 (synopsis "Zope data schemas")
6969 (description "Zope.scheme provides extensions to zope.interface for
6970defining data schemas.")
6971 (license license:zpl2.1)))
6972
6973(define-public python-zope-sqlalchemy
6974 (package
6975 (name "python-zope-sqlalchemy")
6976 (version "1.6")
6977 (source
6978 (origin
6979 (method git-fetch)
6980 (uri (git-reference
6981 (url "https://github.com/zopefoundation/zope.sqlalchemy")
6982 (commit version)))
6983 (file-name (git-file-name name version))
6984 (sha256
6985 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
6986 (build-system pyproject-build-system)
6987 (arguments
6988 (list
6989 #:phases
6990 #~(modify-phases %standard-phases
6991 (replace 'check
6992 (lambda* (#:key tests? #:allow-other-keys)
6993 (if tests?
6994 (invoke "zope-testrunner" "--test-path=src")
6995 (format #t "test suite not run~%")))))))
6996 (propagated-inputs (list python-sqlalchemy python-transaction
6997 python-zope-interface))
6998 (native-inputs (list python-zope-testing python-zope-testrunner
6999 python-setuptools))
7000 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
7001 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
7002 (description
7003 "The aim of this package is to unify the plethora of existing packages
7004integrating SQLAlchemy with Zope's transaction management. As such,it only
7005provides a data manager and makes no attempt to define a @i{zopeish} way to
7006configure engines.")
7007 (license license:zpl2.1)))
7008
7009(define-public python-zope-configuration
7010 (package
7011 (name "python-zope-configuration")
7012 (version "7.0")
7013 (source
7014 (origin
7015 (method git-fetch)
7016 (uri (git-reference
7017 (url "https://github.com/zopefoundation/zope.configuration")
7018 (commit version)))
7019 (file-name (git-file-name name version))
7020 (sha256
7021 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
7022 (build-system pyproject-build-system)
7023 (arguments
7024 (list
7025 #:phases
7026 #~(modify-phases %standard-phases
7027 (replace 'check
7028 (lambda* (#:key tests? #:allow-other-keys)
7029 (if tests?
7030 (invoke "zope-testrunner" "--test-path=src")
7031 (format #t "test suite not run~%")))))))
7032 (native-inputs (list python-manuel python-setuptools python-zope-testing
7033 python-zope-testrunner))
7034 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
7035 python-zope-schema))
7036 (home-page "https://zopeconfiguration.readthedocs.io")
7037 (synopsis "Zope Configuration Markup Language")
7038 (description "Zope.configuration implements ZCML, the Zope Configuration
7039Markup Language.")
7040 (license license:zpl2.1)))
7041
7042(define-public python-zope-configuration-bootstrap
7043 (python-zope-bootstrap-package python-zope-configuration))
7044
7045(define-public python-zope-copy
7046 (package
7047 (name "python-zope-copy")
7048 (version "6.0")
7049 (source
7050 (origin
7051 (method git-fetch)
7052 (uri (git-reference
7053 (url "https://github.com/zopefoundation/zope.copy")
7054 (commit version)))
7055 (file-name (git-file-name name version))
7056 (sha256
7057 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
7058 (build-system pyproject-build-system)
7059 (arguments
7060 (list
7061 #:phases
7062 #~(modify-phases %standard-phases
7063 (replace 'check
7064 (lambda* (#:key tests? #:allow-other-keys)
7065 (if tests?
7066 (invoke "zope-testrunner" "--test-path=src")
7067 (format #t "test suite not run~%")))))))
7068 (propagated-inputs (list python-zope-interface))
7069 (native-inputs
7070 (list python-zodbpickle
7071 python-zope-component-bootstrap
7072 python-zope-location-bootstrap
7073 python-zope-proxy
7074 python-zope-schema
7075 python-zope-testing
7076 python-zope-testrunner
7077 python-setuptools))
7078 (home-page "https://zopecopy.readthedocs.io")
7079 (synopsis "Pluggable object copying mechanism")
7080 (description
7081 "This package provides a pluggable mechanism for copying persistent objects.")
7082 (license license:zpl2.1)))
7083
7084(define-public python-zope-proxy
7085 (package
7086 (name "python-zope-proxy")
7087 (version "7.0")
7088 (source
7089 (origin
7090 (method git-fetch)
7091 (uri (git-reference
7092 (url "https://github.com/zopefoundation/zope.proxy")
7093 (commit version)))
7094 (file-name (git-file-name name version))
7095 (sha256
7096 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
7097 (build-system pyproject-build-system)
7098 (arguments
7099 (list
7100 #:phases
7101 #~(modify-phases %standard-phases
7102 (replace 'check
7103 (lambda* (#:key tests? #:allow-other-keys)
7104 (if tests?
7105 (invoke "zope-testrunner" "--test-path=src")
7106 (format #t "test suite not run~%")))))))
7107 (native-inputs
7108 (list python-zope-location-bootstrap
7109 python-zope-security-bootstrap
7110 python-zope-testrunner
7111 python-setuptools))
7112 (propagated-inputs (list python-zope-interface))
7113 (home-page "https://zopeproxy.readthedocs.io")
7114 (synopsis "Generic, transparent proxies")
7115 (description
7116 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
7117special objects which serve as mostly-transparent wrappers around another
7118object, intervening in the apparent behavior of the wrapped object only when
7119necessary to apply the policy (e.g., access checking, location brokering,
7120etc.) for which the proxy is responsible.")
7121 (license license:zpl2.1)))
7122
7123(define-public python-zope-proxy-bootstrap
7124 (python-zope-bootstrap-package python-zope-proxy))
7125
7126(define-public python-zope-hookable
7127 (package
7128 (name "python-zope-hookable")
7129 (version "7.0")
7130 (source
7131 (origin
7132 (method git-fetch)
7133 (uri (git-reference
7134 (url "https://github.com/zopefoundation/zope.hookable")
7135 (commit version)))
7136 (file-name (git-file-name name version))
7137 (sha256
7138 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
7139 (build-system pyproject-build-system)
7140 (arguments
7141 (list
7142 #:phases
7143 #~(modify-phases %standard-phases
7144 (replace 'check
7145 (lambda* (#:key tests? #:allow-other-keys)
7146 (if tests?
7147 (invoke "zope-testrunner" "--test-path=src")
7148 (format #t "test suite not run~%")))))))
7149 (native-inputs (list python-zope-testing python-zope-testrunner
7150 python-setuptools))
7151 (home-page "https://zopehookable.readthedocs.io")
7152 (synopsis "Zope hookable")
7153 (description
7154 "This package supports the efficient creation of hookable objects, which
7155are callable objects that are meant to be optionally replaced. The idea is
7156that you create a function that does some default thing and make i hookable.
7157Later, someone can modify what it does by calling its sethook method and
7158changing its implementation. All users of the function, including those that
7159imported it, will see the change.")
7160 (license license:zpl2.1)))
7161
7162(define-public python-zope-location
7163 (package
7164 (name "python-zope-location")
7165 (version "6.0")
7166 (source
7167 (origin
7168 (method git-fetch)
7169 (uri (git-reference
7170 (url "https://github.com/zopefoundation/zope.location")
7171 (commit version)))
7172 (file-name (git-file-name name version))
7173 (sha256
7174 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
7175 (build-system pyproject-build-system)
7176 (arguments
7177 (list
7178 #:phases
7179 #~(modify-phases %standard-phases
7180 (replace 'check
7181 (lambda* (#:key tests? #:allow-other-keys)
7182 (if tests?
7183 (invoke "zope-testrunner" "--test-path=src")
7184 (format #t "test suite not run~%")))))))
7185 (native-inputs (list python-zope-testrunner python-setuptools))
7186 (propagated-inputs (list python-zope-interface python-zope-proxy
7187 python-zope-schema))
7188 (home-page "https://zopelocation.readthedocs.io")
7189 (synopsis "Zope location library")
7190 (description
7191 "Zope.location implements the concept of \"locations\" in Zope3, which
7192are are special objects that have a structural location.")
7193 (license license:zpl2.1)))
7194
7195(define-public python-zope-location-bootstrap
7196 (python-zope-bootstrap-package python-zope-location))
7197
7198(define-public python-zope-security
7199 (package
7200 (name "python-zope-security")
7201 (version "7.3")
7202 (source
7203 (origin
7204 (method git-fetch)
7205 (uri (git-reference
7206 (url "https://github.com/zopefoundation/zope.security")
7207 (commit version)))
7208 (file-name (git-file-name name version))
7209 (sha256
7210 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
7211 (build-system pyproject-build-system)
7212 (arguments
7213 (list
7214 #:phases
7215 #~(modify-phases %standard-phases
7216 (replace 'check
7217 (lambda* (#:key tests? #:allow-other-keys)
7218 (if tests?
7219 (invoke "zope-testrunner" "--test-path=src")
7220 (format #t "test suite not run~%")))))))
7221 (propagated-inputs
7222 (list python-zope-component
7223 python-zope-i18nmessageid
7224 python-zope-interface
7225 python-zope-location
7226 python-zope-proxy
7227 python-zope-schema))
7228 (native-inputs
7229 (list python-btrees
7230 python-zope-component-bootstrap
7231 python-zope-configuration-bootstrap
7232 python-zope-location-bootstrap
7233 python-zope-testing
7234 python-zope-testrunner
7235 python-setuptools))
7236 (home-page "https://zopesecurity.readthedocs.io")
7237 (synopsis "Zope security framework")
7238 (description "Zope.security provides a generic mechanism to implement
7239security policies on Python objects.")
7240 (license license:zpl2.1)))
7241
7242(define-public python-zope-security-bootstrap
7243 (package
7244 (inherit (python-zope-bootstrap-package python-zope-security))
7245 (propagated-inputs
7246 (list python-zope-i18nmessageid
7247 python-zope-interface
7248 python-zope-proxy-bootstrap
7249 python-zope-schema))))
7250
7251(define-public python-zope-component
7252 (package
7253 (name "python-zope-component")
7254 (version "7.0")
7255 (source
7256 (origin
7257 (method git-fetch)
7258 (uri (git-reference
7259 (url "https://github.com/zopefoundation/zope.component")
7260 (commit version)))
7261 (file-name (git-file-name name version))
7262 (sha256
7263 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
7264 (build-system pyproject-build-system)
7265 (arguments
7266 (list
7267 #:phases
7268 #~(modify-phases %standard-phases
7269 (replace 'check
7270 (lambda* (#:key tests? #:allow-other-keys)
7271 (if tests?
7272 (invoke "zope-testrunner" "--test-path=src")
7273 (format #t "test suite not run~%")))))))
7274 (native-inputs
7275 (list python-persistent
7276 python-zope-configuration-bootstrap
7277 python-zope-i18nmessageid
7278 python-zope-location-bootstrap
7279 python-zope-proxy-bootstrap
7280 python-zope-security-bootstrap
7281 python-zope-testing
7282 python-zope-testrunner
7283 python-setuptools))
7284 (propagated-inputs
7285 (list python-zope-deferredimport python-zope-deprecation
7286 python-zope-event python-zope-hookable python-zope-interface))
7287 (home-page "https://zopecomponent.readthedocs.io")
7288 (synopsis "Zope Component Architecture")
7289 (description
7290 "Zope.component represents the core of the Zope Component Architecture.
7291Together with the zope.interface package, it provides facilities for defining,
7292registering and looking up components.")
7293 (license license:zpl2.1)))
7294
7295(define-public python-zope-component-bootstrap
7296 (python-zope-bootstrap-package python-zope-component))
7297
7298(define-public python-zope-deferredimport
7299 (package
7300 (name "python-zope-deferredimport")
7301 (version "6.0")
7302 (source
7303 (origin
7304 (method git-fetch)
7305 (uri (git-reference
7306 (url "https://github.com/zopefoundation/zope.deferredimport")
7307 (commit version)))
7308 (file-name (git-file-name name version))
7309 (sha256
7310 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
7311 (build-system pyproject-build-system)
7312 (arguments
7313 (list
7314 #:phases
7315 #~(modify-phases %standard-phases
7316 (replace 'check
7317 (lambda* (#:key tests? #:allow-other-keys)
7318 (if tests?
7319 (invoke "zope-testrunner" "--test-path=src")
7320 (format #t "test suite not run~%")))))))
7321 (propagated-inputs (list python-zope-proxy))
7322 (native-inputs (list python-zope-testrunner python-setuptools))
7323 (home-page "https://zopedeferredimport.readthedocs.io")
7324 (synopsis "Defer imports until used by code")
7325 (description
7326 "Often, especially for package modules, you want to import names for
7327convenience, but not actually perform the imports until necessary. The
7328@code{zope.deferredimport} package provided facilities for defining names in
7329modules that will be imported from somewhere else when used. You can also cause
7330deprecation warnings to be issued when a variable is used.")
7331 (license license:zpl2.1)))
7332
7333(define-public python-ndg-httpsclient
7334 (package
7335 (name "python-ndg-httpsclient")
7336 (version "0.5.1")
7337 (source
7338 (origin
7339 (method git-fetch)
7340 (uri (git-reference
7341 (url "https://github.com/cedadev/ndg_httpsclient/")
7342 (commit version)))
7343 (file-name (git-file-name name version))
7344 (sha256
7345 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
7346 (build-system pyproject-build-system)
7347 (arguments
7348 (list
7349 #:tests? #f)) ;Tests appear to require networking.
7350 (native-inputs (list python-setuptools))
7351 (propagated-inputs (list python-pyasn1 python-pyopenssl))
7352 (synopsis "HTTPS support for Python's httplib and urllib2")
7353 (description
7354 "This is a HTTPS client implementation for httplib and urllib2 based on
7355PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
7356the default provided with Python and, importantly, enables full verification
7357of the SSL peer.")
7358 (home-page "https://github.com/cedadev/ndg_httpsclient/")
7359 (license license:bsd-3)))
7360
7361(define-public python-netaddr
7362 (package
7363 (name "python-netaddr")
7364 (version "1.3.0")
7365 (source
7366 (origin
7367 (method url-fetch)
7368 (uri (pypi-uri "netaddr" version))
7369 (sha256
7370 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
7371 (build-system pyproject-build-system)
7372 (native-inputs (list python-poetry-core
7373 python-pytest
7374 python-setuptools
7375 python-wheel))
7376 (home-page "https://netaddr.readthedocs.io")
7377 (synopsis "Pythonic manipulation of network addresses")
7378 (description
7379 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
7380and MAC network addresses.")
7381 (license license:bsd-3)))
7382
7383(define-public python-nh3
7384 (package
7385 (name "python-nh3")
7386 (version "0.2.20")
7387 (source
7388 (origin
7389 (method url-fetch)
7390 (uri (pypi-uri "nh3" version))
7391 (sha256
7392 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
7393 (build-system pyproject-build-system)
7394 (arguments
7395 (list
7396 #:imported-modules `(,@%cargo-build-system-modules
7397 ,@%pyproject-build-system-modules)
7398 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
7399 (guix build pyproject-build-system)
7400 (guix build utils))
7401 #:phases
7402 #~(modify-phases %standard-phases
7403 (add-after 'unpack 'prepare-cargo-build-system
7404 (lambda args
7405 (for-each
7406 (lambda (phase)
7407 (format #t "Running cargo phase: ~a~%" phase)
7408 (apply (assoc-ref cargo:%standard-phases phase)
7409 #:cargo-target #$(cargo-triplet)
7410 args))
7411 '(unpack-rust-crates
7412 configure
7413 check-for-pregenerated-files
7414 patch-cargo-checksums)))))))
7415 (native-inputs
7416 (append
7417 (list maturin python-pytest rust `(,rust "cargo"))
7418 (or (and=> (%current-target-system)
7419 (compose list make-rust-sysroot))
7420 '())))
7421 (inputs (cargo-inputs 'python-nh3))
7422 (home-page "https://nh3.readthedocs.io")
7423 (synopsis "Python bindings to Ammonia HTML sanitization library")
7424 (description "This package provides Python bindings to Ammonia HTML
7425sanitizer Rust crate.")
7426 (license license:expat)))
7427
7428(define-public python-noiseprotocol
7429 (package
7430 (name "python-noiseprotocol")
7431 (version "0.3.1")
7432 (source
7433 (origin
7434 (method git-fetch)
7435 (uri (git-reference
7436 (url "https://github.com/plizonczyk/noiseprotocol")
7437 (commit (string-append "v" version))))
7438 (file-name (git-file-name name version))
7439 (sha256
7440 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
7441 (build-system pyproject-build-system)
7442 (propagated-inputs (list python-cryptography))
7443 (native-inputs (list python-setuptools python-pytest))
7444 (home-page "https://github.com/plizonczyk/noiseprotocol")
7445 (synopsis "Implementation of Noise Protocol Framework")
7446 (description
7447 "This package provides an implementation of Noise Protocol Framework.")
7448 (license license:expat)))
7449
7450(define-public python-webrtcvad-wheels
7451 (package
7452 (name "python-webrtcvad-wheels")
7453 (version "2.0.14")
7454 (source
7455 (origin
7456 (method git-fetch)
7457 (uri (git-reference
7458 (url "https://github.com/daanzu/py-webrtcvad-wheels")
7459 (commit (string-append "v" version))))
7460 (file-name (git-file-name name version))
7461 (sha256
7462 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
7463 (build-system pyproject-build-system)
7464 (native-inputs (list python-psutil python-pytest python-setuptools))
7465 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
7466 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
7467 (description
7468 "This package provides a Python interface to the Google
7469@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
7470 (license license:expat)))
7471
7472(define-public python-websocket-client
7473 (package
7474 (name "python-websocket-client")
7475 (version "1.8.0")
7476 (source
7477 (origin
7478 (method url-fetch)
7479 (uri (pypi-uri "websocket_client" version))
7480 (sha256
7481 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
7482 (build-system pyproject-build-system)
7483 (arguments
7484 (list
7485 #:test-flags
7486 ;; This test requires networking.
7487 '(list "-k" "not testConnect")))
7488 (native-inputs
7489 (list python-pysocks
7490 python-pytest
7491 python-setuptools
7492 python-websockets
7493 python-wheel))
7494 (home-page "https://github.com/websocket-client/websocket-client")
7495 (synopsis "WebSocket client for Python")
7496 (description "The Websocket-client module provides the low level APIs for
7497WebSocket usage in Python programs.")
7498 (license license:lgpl2.1+)))
7499
7500(define-public python-websocket-client-0.59
7501 (package
7502 (inherit python-websocket-client)
7503 (version "0.59.0")
7504 (source
7505 (origin
7506 (method url-fetch)
7507 (uri (pypi-uri "websocket-client" version))
7508 (sha256
7509 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
7510 (native-inputs
7511 (modify-inputs native-inputs
7512 (append python-six)))))
7513
7514(define-public python-purl
7515 (package
7516 (name "python-purl")
7517 (version "1.6")
7518 (source
7519 (origin
7520 (method git-fetch)
7521 (uri (git-reference
7522 (url "https://github.com/codeinthehole/purl")
7523 (commit version)))
7524 (file-name (git-file-name name version))
7525 (sha256
7526 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
7527 (build-system pyproject-build-system)
7528 (arguments
7529 (list
7530 #:test-flags #~(list "--pyargs" "./tests")))
7531 (native-inputs (list python-pytest python-setuptools))
7532 (propagated-inputs (list python-six))
7533 (home-page "https://github.com/codeinthehole/purl")
7534 (synopsis "Python package for URL manipulation")
7535 (description "Purl is a Python package for handling URLs.")
7536 (license license:expat)))
7537
7538(define-public python-apiron
7539 (package
7540 (name "python-apiron")
7541 (version "5.1.0")
7542 (source
7543 (origin
7544 (method url-fetch)
7545 (uri (pypi-uri "apiron" version))
7546 (sha256
7547 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
7548 (build-system pyproject-build-system)
7549 (arguments
7550 (list #:test-flags '(list "-k" "not test_call")))
7551 (propagated-inputs
7552 (list python-requests))
7553 (native-inputs
7554 (list python-pytest
7555 python-setuptools
7556 python-wheel))
7557 (home-page "https://github.com/ithaka/apiron")
7558 (synopsis "Python wrapper for interacting with RESTful APIs")
7559 (description
7560 "@code{apiron} provides a declarative, structured configuration of
7561services and endpoints with a unified interface for interacting with RESTful
7562APIs.")
7563 (license license:expat)))
7564
7565(define-public python-beren
7566 (package
7567 (name "python-beren")
7568 (version "0.7.0")
7569 (source
7570 (origin
7571 (method git-fetch)
7572 (uri (git-reference
7573 (url "https://github.com/teffalump/beren")
7574 (commit (string-append "v" version))))
7575 (file-name (git-file-name name version))
7576 (sha256
7577 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
7578 (build-system pyproject-build-system)
7579 (arguments
7580 ;; The test tries to open a connection to a remote server.
7581 `(#:tests? #f))
7582 (native-inputs (list python-setuptools))
7583 (propagated-inputs (list python-apiron))
7584 (home-page "https://github.com/teffalump/beren")
7585 (synopsis "REST client for Orthanc DICOM servers")
7586 (description
7587 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
7588 (license license:gpl3+)))
7589
7590(define-public python-requests
7591 (package
7592 (name "python-requests")
7593 (version "2.34.2")
7594 (source (origin
7595 (method url-fetch)
7596 (uri (pypi-uri "requests" version))
7597 (sha256
7598 (base32
7599 "1vdrc3lq9x848760n7mdhn8whsfslk30pmnnk0v4caafmr69527j"))))
7600 (build-system pyproject-build-system)
7601 (arguments
7602 (list #:test-flags
7603 ;; These require internet access
7604 '(list "--ignore=tests/test_requests.py"
7605 "-k" (string-append "not test_use_proxy_from_environment"
7606 " and not requests.sessions.Session"
7607 " and not requests.models.PreparedRequest"
7608 " and not requests.api.request")
7609 "tests/")))
7610 (propagated-inputs
7611 (list python-certifi
7612 python-charset-normalizer
7613 python-idna
7614 python-urllib3))
7615 (native-inputs
7616 (list python-pytest
7617 python-pytest-mock
7618 python-setuptools))
7619 (home-page "https://requests.readthedocs.io/")
7620 (synopsis "Python HTTP library")
7621 (description
7622 "Requests is a Python HTTP client library. It aims to be easier to use
7623than Python’s urllib2 library.")
7624 (license license:asl2.0)))
7625
7626(define-public python-requests-kerberos
7627 (package
7628 (name "python-requests-kerberos")
7629 (version "0.14.0")
7630 ;; No tests in the PyPI tarball.
7631 (source
7632 (origin
7633 (method git-fetch)
7634 (uri (git-reference
7635 (url "https://github.com/requests/requests-kerberos")
7636 (commit (string-append "v" version))))
7637 (file-name (git-file-name name version))
7638 (sha256
7639 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
7640 (build-system pyproject-build-system)
7641 (propagated-inputs (list python-cryptography
7642 python-pyspnego
7643 python-requests))
7644 (native-inputs (list python-pytest python-pytest-mock python-setuptools
7645 python-wheel))
7646 (home-page "https://github.com/requests/requests-kerberos")
7647 (synopsis "Kerberos authentication handler for python-requests")
7648 (description "This package provides a Kerberos authentication handler for
7649python-requests.")
7650 (license license:isc)))
7651
7652(define-public python-requests-unixsocket2
7653 (package
7654 (name "python-requests-unixsocket2")
7655 (version "1.0.1")
7656 (source
7657 (origin
7658 (method git-fetch)
7659 (uri (git-reference
7660 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
7661 (commit (string-append "v" version))))
7662 (sha256
7663 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
7664 (build-system pyproject-build-system)
7665 (native-inputs
7666 (list nss-certs-for-test
7667 python-hatchling
7668 python-pytest
7669 python-waitress))
7670 (propagated-inputs
7671 (list python-requests
7672 python-urllib3))
7673 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
7674 (synopsis "Talk HTTP via a UNIX domain socket")
7675 (description
7676 "This Python package lets you use the @code{requests} library to talk
7677HTTP via a UNIX domain socket.")
7678 (license license:asl2.0)))
7679
7680(define-public python-requests-ntlm
7681 (package
7682 (name "python-requests-ntlm")
7683 (version "1.3.0")
7684 (source
7685 (origin
7686 (method git-fetch)
7687 (uri (git-reference
7688 (url "https://github.com/requests/requests-ntlm")
7689 (commit (string-append "v" version))))
7690 (file-name (git-file-name name version))
7691 (sha256
7692 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
7693 (build-system pyproject-build-system)
7694 (arguments
7695 (list
7696 #:test-flags
7697 ;; XXX: Connection refused.
7698 #~(list "-k" (string-join
7699 (list "not test_ntlm_http_with_cbt"
7700 "test_ntlm_http_without_cbt"
7701 "test_ntlm_https_with_cbt"
7702 "test_ntlm_https_without_cbt")
7703 " and not "))
7704 #:phases
7705 #~(modify-phases %standard-phases
7706 (add-before 'check 'spawn-test-server
7707 (lambda _
7708 ;; Taken from .github/workflows/ci.yml.
7709 (spawn "python"
7710 (list "python" "-m" "tests.test_server")))))))
7711 (propagated-inputs
7712 (list python-cryptography python-pyspnego python-requests))
7713 (native-inputs (list python-flask python-pytest python-setuptools))
7714 (home-page "https://github.com/requests/requests-ntlm")
7715 (synopsis "NTLM authentication support for Requests")
7716 (description
7717 "This package allows for HTTP NTLM authentication using the requests
7718library.")
7719 (license license:isc)))
7720
7721(define-public python-requests-mock
7722 (package
7723 (name "python-requests-mock")
7724 (version "1.12.1")
7725 (source
7726 (origin
7727 (method url-fetch)
7728 (uri (pypi-uri "requests-mock" version))
7729 (sha256
7730 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
7731 (build-system pyproject-build-system)
7732 (native-inputs
7733 (list python-purl
7734 python-pytest
7735 python-requests-futures
7736 python-setuptools
7737 python-setuptools-scm
7738 python-testtools))
7739 (propagated-inputs
7740 (list python-requests))
7741 (home-page "https://requests-mock.readthedocs.org/")
7742 (synopsis "Mock out responses from the requests package")
7743 (description
7744 "This module provides a building block to stub out the HTTP requests
7745portions of your testing code.")
7746 (license license:asl2.0)))
7747
7748(define-public python-requests-toolbelt
7749 (package
7750 (name "python-requests-toolbelt")
7751 (version "1.0.0")
7752 (source
7753 (origin
7754 (method url-fetch)
7755 (uri (pypi-uri "requests-toolbelt" version))
7756 (sha256
7757 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
7758 (build-system pyproject-build-system)
7759 (arguments
7760 (list
7761 #:test-flags
7762 ;; Requiring networking or fail due not valid certs: AttributeError:
7763 ;; 'MockHTTPResponse' object has no attribute 'close'
7764 #~(list "-k" (string-append "not test_dump_all"
7765 " and not test_dump_response"
7766 " and not test_prepared_request_override_base"
7767 " and not test_prepared_request_with_base"
7768 " and not test_request_override_base"
7769 " and not test_request_with_base"))))
7770 (native-inputs
7771 (list python-betamax
7772 python-mock
7773 python-pyopenssl
7774 python-pytest
7775 python-setuptools
7776 python-trustme
7777 python-wheel))
7778 (propagated-inputs
7779 (list python-requests))
7780 (synopsis "Extensions to python-requests")
7781 (description "This is a toolbelt of useful classes and functions to be used
7782with python-requests.")
7783 (home-page "https://github.com/requests/toolbelt/")
7784 (license license:asl2.0)))
7785
7786(define-public python-requests-ftp
7787 (package
7788 (name "python-requests-ftp")
7789 (version "0.3.1")
7790 (source
7791 (origin
7792 (method git-fetch)
7793 (uri (git-reference
7794 (url "https://github.com/Lukasa/requests-ftp")
7795 (commit (string-append "v" version))))
7796 (file-name (git-file-name name version))
7797 (sha256
7798 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
7799 (build-system pyproject-build-system)
7800 (arguments
7801 ;; XXX: No connection adapters found.
7802 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
7803 (native-inputs
7804 (list python-pyftpdlib python-pytest python-setuptools python-six))
7805 (propagated-inputs (list python-requests))
7806 (home-page "https://github.com/Lukasa/requests-ftp")
7807 (synopsis "FTP Transport Adapter for Requests")
7808 (description "Requests-FTP is an implementation of a simple FTP transport
7809adapter for use with the Requests library.")
7810 (license license:asl2.0)))
7811
7812(define-public python-aioftp
7813 (package
7814 (name "python-aioftp")
7815 (version "0.27.2")
7816 (source
7817 (origin
7818 (method git-fetch)
7819 (uri (git-reference
7820 (url "https://github.com/aio-libs/aioftp")
7821 (commit version)))
7822 (file-name (git-file-name name version))
7823 (sha256
7824 (base32 "1lshyac5zk1w4x7ygkim3726f8gbkvpvlyiqkn9cs6qjxhxn5bxc"))))
7825 (build-system pyproject-build-system)
7826 (arguments
7827 (list
7828 #:phases
7829 #~(modify-phases %standard-phases
7830 (add-after 'unpack 'use-default-asyncio
7831 ;; async_timeout is deprecated, upstream recommends to use
7832 ;; asyncio, available since Python 3.11.
7833 (lambda _
7834 (substitute* "tests/conftest.py"
7835 (("async_timeout") "asyncio")))))))
7836 (native-inputs
7837 (list python-pytest
7838 python-pytest-mock
7839 python-pytest-asyncio
7840 python-setuptools
7841 python-siosocks
7842 python-trustme))
7843 (home-page "https://aioftp.readthedocs.io/")
7844 (synopsis "FTP client/server for asyncio in Python")
7845 (description
7846 "FTP client and server for asyncio (Python 3) Library implementing FTP
7847protocol, both client and server for Python asyncio module.
7848
7849 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
7850 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
7851 REST, LIST (as fallback).
7852
7853 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
7854 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
7855 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
7856 (license license:asl2.0)))
7857
7858(define-public python-mohawk
7859 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
7860 (revision "0"))
7861 (package
7862 (name "python-mohawk")
7863 (version (git-version "1.1.0" revision commit))
7864 (source
7865 (origin
7866 (method git-fetch)
7867 (uri (git-reference
7868 (url "https://github.com/kumar303/mohawk")
7869 (commit commit)))
7870 (file-name (git-file-name name version))
7871 (sha256
7872 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
7873 (patches
7874 (search-patches "python-mohawk-pytest.patch"))))
7875 (build-system pyproject-build-system)
7876 (arguments
7877 (list #:test-flags #~(list "mohawk/tests.py")))
7878 (native-inputs (list python-pytest python-setuptools))
7879 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
7880 ;python-six is removed?
7881 (home-page "https://github.com/kumar303/mohawk")
7882 (synopsis "Library for Hawk HTTP authorization")
7883 (description
7884 "Mohawk is an alternate Python implementation of the Hawk HTTP
7885authorization scheme.")
7886 (license license:bsd-3))))
7887
7888(define-public python-msal
7889 (package
7890 (name "python-msal")
7891 (version "1.34.0")
7892 (home-page
7893 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
7894 (source
7895 (origin
7896 (method git-fetch)
7897 (uri (git-reference
7898 (url home-page)
7899 (commit version)))
7900 (file-name (git-file-name name version))
7901 (sha256
7902 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
7903 (patches (search-patches "python-msal-requests.patch"))))
7904 (build-system pyproject-build-system)
7905 (arguments
7906 (list
7907 #:test-flags
7908 #~(list
7909 "--ignore=tests/test_benchmark.py"
7910 ;; XXX: Ignoring cryptography version scheme tests.
7911 "-k"
7912 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
7913 ;; XXX: These tests try to access the network.
7914 "--ignore=tests/test_application.py"
7915 "--ignore=tests/test_ccs.py"
7916 ;; XXX: These tests assume they are run on Windows.
7917 "--ignore=tests/test_mi.py")
7918 #:phases
7919 #~(modify-phases %standard-phases
7920 (add-after 'unpack 'set-cryptography-version
7921 (lambda _
7922 (substitute* "tests/test_cryptography.py"
7923 (("^latest_cryptography_version = @version@")
7924 (format #f "latest_cryptography_version = ~s"
7925 #$(package-version
7926 (this-package-input "python-cryptography")))))))
7927 (add-before 'check 'configure-tests
7928 (lambda* (#:key tests? #:allow-other-keys)
7929 (when tests?
7930 (setenv "TRAVIS_TAG" "1")))))))
7931 (native-inputs
7932 (list nss-certs-for-test python-mock python-pytest python-setuptools))
7933 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
7934 (synopsis "Microsoft Authentication Library (MSAL) for Python")
7935 (description
7936 "The Microsoft Authentication Library for Python enables applications to
7937integrate with the Microsoft identity platform. It allows you to sign in
7938users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
7939Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
7940Microsoft Graph or your own APIs registered with the Microsoft identity
7941platform. It is built using industry standard OAuth2 and OpenID Connect
7942protocols.")
7943 (license license:expat)))
7944
7945(define-public oauth2ms
7946 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
7947 (revision "0"))
7948 (package
7949 (name "oauth2ms")
7950 (version (git-version "0.0.0" revision commit))
7951 (source (origin
7952 (method git-fetch)
7953 (uri (git-reference
7954 (url "https://github.com/harishkrupo/oauth2ms")
7955 (commit commit)))
7956 (file-name (git-file-name name version))
7957 (sha256
7958 (base32
7959 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
7960 (build-system copy-build-system)
7961 (arguments
7962 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
7963 ("." #$(string-append "share/doc/" name "-"
7964 version "/")
7965 #:include-regexp ("\\.org$")))
7966 #:phases #~(modify-phases %standard-phases
7967 (add-after 'install 'wrap-pythonpath
7968 (lambda* (#:key inputs outputs #:allow-other-keys)
7969 (let ((path (getenv "GUIX_PYTHONPATH")))
7970 (wrap-program (string-append #$output
7971 "/bin/oauth2ms")
7972 `("GUIX_PYTHONPATH" ":" prefix
7973 (,path)))))))))
7974 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
7975 (home-page "https://github.com/harishkrupo/oauth2ms")
7976 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
7977 (description
7978 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
7979endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
7980used as authentication in IMAP mail servers.")
7981 (license license:asl2.0))))
7982
7983(define-public python-oauthlib
7984 (package
7985 (name "python-oauthlib")
7986 (version "3.3.1")
7987 (source
7988 (origin
7989 (method git-fetch)
7990 (uri (git-reference
7991 (url "https://github.com/oauthlib/oauthlib")
7992 (commit (string-append "v" version))))
7993 (file-name (git-file-name name version))
7994 (sha256
7995 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
7996 (build-system pyproject-build-system)
7997 (native-inputs (list python-pytest python-mock python-setuptools))
7998 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
7999 (home-page "https://github.com/oauthlib/oauthlib")
8000 (synopsis "OAuth implementation for Python")
8001 (description
8002 "Oauthlib is a generic, spec-compliant, thorough implementation of the
8003OAuth request-signing logic.")
8004 (license license:bsd-3)))
8005
8006(define-public python-urllib3
8007 (package
8008 (name "python-urllib3")
8009 (version "2.7.0")
8010 (source
8011 (origin
8012 (method url-fetch)
8013 (uri (pypi-uri "urllib3" version))
8014 (sha256
8015 (base32
8016 "0k2za0kdl4y8mdhay0wbnf6522n4ybr61gk7gik19srwnv1hw7i3"))))
8017 (build-system pyproject-build-system)
8018 (arguments `(#:tests? #f))
8019 (native-inputs
8020 (list python-hatch-vcs
8021 python-hatchling
8022 python-setuptools-scm))
8023 (propagated-inputs
8024 (append
8025 ;; These 5 inputs are used to build urrlib3[secure]
8026 (list python-certifi
8027 python-idna
8028 python-pysocks)
8029 (if (member (%current-system)
8030 (package-transitive-supported-systems python-cryptography))
8031 (list python-cryptography)
8032 '())
8033 (if (member (%current-system)
8034 (package-transitive-supported-systems python-pyopenssl))
8035 (list python-pyopenssl)
8036 '())))
8037 (home-page "https://urllib3.readthedocs.io/")
8038 (synopsis "HTTP library with thread-safe connection pooling")
8039 (description
8040 "Urllib3 supports features left out of urllib and urllib2 libraries. It
8041can reuse the same socket connection for multiple requests, it can POST files,
8042supports url redirection and retries, and also gzip and deflate decoding.")
8043 (license license:expat)))
8044
8045(define-public python-urllib3-1.26
8046 (package
8047 (inherit python-urllib3)
8048 (version "1.26.17")
8049 (source
8050 (origin
8051 (method url-fetch)
8052 (uri (pypi-uri "urllib3" version))
8053 (sha256
8054 (base32
8055 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
8056 (native-inputs
8057 (list python-setuptools
8058 python-wheel))))
8059
8060(define-public python-awscrt
8061 (package
8062 (name "python-awscrt")
8063 (version "0.36.0")
8064 (source
8065 (origin
8066 (method url-fetch)
8067 (uri (pypi-uri "awscrt" version))
8068 (sha256
8069 (base32 "0jh6niq9kgv0canm11ad8zibywwirdfxg4bqyd8jhaiv3x39h8dd"))))
8070 (build-system pyproject-build-system)
8071 (arguments
8072 (list
8073 #:test-backend #~'unittest
8074 #:test-flags #~(list "discover" "--verbose")
8075 #:phases
8076 #~(modify-phases %standard-phases
8077 (add-after 'unpack 'disable-broken-tests
8078 (lambda _
8079 ;; Disable broken tests. These tests fail because they depend on
8080 ;; specific DNS configuration and/or AWS credentials, which isn't
8081 ;; available in this context.
8082 (substitute* "test/test_auth.py"
8083 (("def test_default_provider")
8084 "def _test_default_provider"))
8085 (substitute* "test/test_aiohttp_client.py"
8086 (("def test_h2_remote_end_stream_ordering")
8087 "def _test_h2_remote_end_stream_ordering")
8088 (("def test_cross_thread_http2_client")
8089 "def _test_cross_thread_http2_client")
8090 (("def test_h2_client")
8091 "def _test_h2_client")
8092 (("def test_h2_manual_write_exception")
8093 "def _test_h2_manual_write_exception"))
8094 (substitute* "test/test_http_client.py"
8095 (("def test_h2_client")
8096 "def _test_h2_client")
8097 (("def test_h2_remote_end_stream_ordering")
8098 "def _test_h2_remote_end_stream_ordering")
8099 (("def test_h2_manual_write_exception")
8100 "def _test_h2_manual_write_exception"))
8101 (substitute* "test/test_s3.py"
8102 (("def test_sanity")
8103 "def _test_sanity")
8104 (("def test_sanity_secure")
8105 "def _test_sanity_secure")
8106 (("def test_wait_shutdown")
8107 "def _test_wait_shutdown"))
8108 (substitute* "test/test_io.py"
8109 ;; This test seems specifically broken. It waits for a shutdown event
8110 ;; from a group of singletons that will never occur because several of
8111 ;; the singleton references are held beyond the lifetime of this test.
8112 (("def test_shutdown_complete_singleton")
8113 "def _test_shutdown_complete_singleton"))))
8114 (add-after 'unpack 'override-cert-bundle-location
8115 (lambda* (#:key inputs #:allow-other-keys)
8116 (let ((bundle (search-input-file inputs
8117 "/etc/ssl/certs/ca-certificates.crt")))
8118 (setenv "SSL_CERT_FILE" bundle)
8119 (substitute* "awscrt/io.py"
8120 (("( +)opt = TlsContextOptions\\(\\)" m indent)
8121 (string-append m "\n"
8122 indent "import os\n"
8123 indent "\
8124opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n"))
8125 (("^( +)self\\.no_certificate_revocation = False" all indent)
8126 (string-append all "\n"
8127 indent "import os as _os\n"
8128 indent "_ca_file = _os.environ.get('SSL_CERT_FILE')\n"
8129 indent "if _ca_file:\n"
8130 indent " self.override_default_trust_store(_read_binary_file(_ca_file))\n")))
8131 (substitute* "test/appexit_http.py"
8132 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
8133 (string-append m indent
8134 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
8135 bundle "')\n")))
8136 (substitute* "test/test_io.py"
8137 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
8138 (string-append m indent
8139 "opt.override_default_trust_store_from_path(None, '"
8140 bundle "')\n"))))))
8141 (add-after 'unpack 'use-system-libraries
8142 (lambda _
8143 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
8144 (inputs (list openssl))
8145 (native-inputs (list cmake-minimal
8146 nss-certs-for-test
8147 python-boto3
8148 python-setuptools
8149 python-websockets
8150 python-h2))
8151 (home-page "https://github.com/awslabs/aws-crt-python")
8152 (synopsis "Common runtime for AWS Python projects")
8153 (description
8154 "This package provides a common runtime for AWS Python projects.")
8155 (license license:asl2.0)))
8156
8157(define-public awscli
8158 (package
8159 ;; Note: updating awscli typically requires updating botocore as well.
8160 (name "awscli")
8161 (version "1.43.11")
8162 (source
8163 (origin
8164 (method git-fetch)
8165 (uri (git-reference
8166 (url "https://github.com/aws/aws-cli")
8167 (commit version)))
8168 (file-name (git-file-name name version))
8169 (sha256
8170 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
8171 (build-system pyproject-build-system)
8172 (arguments
8173 (list
8174 ;; tests: 2715 passed, 32 warnings
8175 #:test-flags
8176 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8177 ;; Complete test suite is huge and compute hungry, run just unit
8178 ;; tests.
8179 "--ignore=tests/dependencies"
8180 "--ignore=tests/functional"
8181 "--ignore=tests/integration"
8182 ;; TypeError: 'Mock' object is not subscriptable.
8183 "-k" "not test_no_groff_or_mandoc_exists")
8184 #:phases
8185 #~(modify-phases %standard-phases
8186 (add-after 'unpack 'fix-reference-to-groff
8187 (lambda _
8188 ;; XXX: Consider to use wrap-program instead, it tries to parse
8189 ;; the PATH.
8190 (substitute* "awscli/help.py"
8191 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
8192 (("raise ExecutableNotFoundError\\('groff'\\)") "")
8193 (("cmdline = \\['groff'")
8194 (format #f "cmdline = ['~a/bin/groff'"
8195 #$(this-package-input "groff-minimal"))))))
8196 (add-before 'check 'set-environment
8197 (lambda _
8198 ;; PermissionError: [Errno 13] Permission denied:
8199 ;; '/homeless-shelter'
8200 (setenv "HOME" "/tmp"))))))
8201 (native-inputs
8202 (list python-pytest
8203 python-pytest-xdist
8204 python-setuptools
8205 python-wheel))
8206 (inputs
8207 (list groff-minimal
8208 python-botocore
8209 python-colorama
8210 python-docutils-0.19
8211 python-pyyaml
8212 python-rsa-for-awscli-1
8213 python-s3transfer))
8214 (home-page "https://aws.amazon.com/cli/")
8215 (synopsis "Command line client for AWS")
8216 (description
8217 "AWS CLI provides a unified command line interface to the Amazon Web
8218Services (AWS) API.")
8219 (license license:asl2.0)))
8220
8221(define-public awscli-2
8222 (package
8223 (inherit awscli)
8224 ;; Note: updating awscli-2 typically requires updating python-awscrt.
8225 (name "awscli")
8226 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
8227 ;; any fresh one compatible with current state of dependencies in Guix.
8228 (version "2.36.20")
8229 (source
8230 (origin
8231 (method git-fetch)
8232 (uri (git-reference
8233 (url "https://github.com/aws/aws-cli")
8234 (commit version)))
8235 (file-name (git-file-name name version))
8236 (sha256
8237 (base32
8238 "1hv2zs5pm86b5bd66j2kfb9r8gz13cqnf8x5hmfv0ddszf9vnfgp"))))
8239 (build-system pyproject-build-system)
8240 (arguments
8241 (list
8242 ;; When updating and checking locally be very patient as build phase may
8243 ;; hang for 6-8 minutes but eventually passes through.
8244 ;;
8245 ;; tests: 4189 passed, 1 skipped, 2 warnings
8246 #:test-flags
8247 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8248 ;; Full test suite contains more than 70k tests; ignore network
8249 ;; dependent, slow and compute intense tests, keep just unit
8250 ;; tests.
8251 "--ignore=tests/backends"
8252 "--ignore=tests/dependencies"
8253 "--ignore=tests/functional"
8254 "--ignore=tests/integration"
8255 "--ignore=tests/unit/botocore"
8256 ;; Flaky, something to do with PATH disappearing from os.environ?
8257 ;; Passes when run on its own, so maybe something else is
8258 ;; modifying this during the test run.
8259 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
8260 ;; TypeError: 'Mock' object is not subscriptable
8261 "-k" "not test_no_groff_or_mandoc_exists")
8262 #:phases
8263 #~(modify-phases %standard-phases
8264 (add-after 'unpack 'ignore-deprecations
8265 (lambda _
8266 (substitute* "pyproject.toml"
8267 (("\"error::") "\"ignore::"))))
8268 (add-after 'unpack 'fix-reference-to-groff
8269 (lambda* (#:key inputs #:allow-other-keys)
8270 (substitute* "awscli/help.py"
8271 (("if self._exists_on_path\\('groff'\\):") "if True:")
8272 (("cmdline = \\['groff'")
8273 (string-append "cmdline = ['"
8274 (search-input-file inputs "bin/groff")
8275 "'")))))
8276 (add-before 'check 'pre-check
8277 (lambda _ (setenv "HOME" "/tmp"))))))
8278 (inputs
8279 (list groff
8280 ;; less
8281 nss-certs-for-test
8282 python-awscrt
8283 python-colorama
8284 python-dateutil
8285 python-distro
8286 python-docutils
8287 python-jmespath
8288 python-prompt-toolkit
8289 python-ruamel.yaml
8290 python-ruamel.yaml.clib
8291 python-urllib3
8292 python-wcwidth))
8293 (native-inputs
8294 (list python-flit-core
8295 python-pytest
8296 python-pytest-xdist))))
8297
8298(define-public python-wsgiproxy2
8299 (package
8300 (name "python-wsgiproxy2")
8301 (version "0.5.1")
8302 (source
8303 (origin
8304 (method git-fetch)
8305 (uri (git-reference
8306 (url "https://github.com/gawel/WSGIProxy2/")
8307 (commit version)))
8308 (file-name (git-file-name name version))
8309 (sha256
8310 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
8311 (build-system pyproject-build-system)
8312 (arguments (list #:test-backend #~'unittest))
8313 (native-inputs (list python-webtest python-setuptools))
8314 (propagated-inputs (list python-requests python-six python-urllib3
8315 python-webob))
8316 (home-page "https://github.com/gawel/WSGIProxy2/")
8317 (synopsis "WSGI Proxy with various http client backends")
8318 (description
8319 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
8320function calls into HTTP requests. It also includes code to sign requests and
8321pass private data, and to spawn subprocesses to handle requests.")
8322 (license license:expat)))
8323
8324(define-public python-pastedeploy
8325 (package
8326 (name "python-pastedeploy")
8327 (version "3.1.0")
8328 (source
8329 (origin
8330 (method url-fetch)
8331 (uri (pypi-uri "PasteDeploy" version))
8332 (sha256
8333 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
8334 (build-system pyproject-build-system)
8335 (native-inputs (list python-pytest python-setuptools))
8336 (home-page "https://pylonsproject.org/")
8337 (synopsis "Load, configure, and compose WSGI applications and servers")
8338 (description
8339 "This tool provides code to load WSGI applications and servers from URIs;
8340these URIs can refer to Python Eggs for INI-style configuration files. Paste
8341Script provides commands to serve applications based on this configuration
8342file.")
8343 (license license:expat)))
8344
8345(define-public python-webtest
8346 (package
8347 (name "python-webtest")
8348 (version "3.0.6")
8349 (source
8350 (origin
8351 (method url-fetch)
8352 (uri (pypi-uri "webtest" version))
8353 (sha256
8354 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
8355 (build-system pyproject-build-system)
8356 (arguments
8357 ;; Tests require python-pyquery, which creates a circular dependency.
8358 `(#:tests? #f))
8359 (native-inputs
8360 (list python-setuptools))
8361 (propagated-inputs
8362 (list python-beautifulsoup4
8363 python-waitress
8364 python-webob))
8365 (home-page "https://docs.pylonsproject.org/projects/webtest/")
8366 (synopsis "Helper to test WSGI applications")
8367 (description
8368 "Webtest allows you to test your Python web applications without
8369starting an HTTP server. It supports anything that supports the minimum of
8370WSGI.")
8371 (license license:expat)))
8372
8373(define-public python-flask
8374 (package
8375 (name "python-flask")
8376 (version "3.1.3")
8377 (source
8378 (origin
8379 (method git-fetch)
8380 (uri (git-reference
8381 (url "https://github.com/pallets/flask")
8382 (commit version)))
8383 (file-name (git-file-name name version))
8384 (sha256
8385 (base32 "006s5rm4syg48ymmwlnrkx8f8j758waksvhdsfiqx51zv52c0p8l"))))
8386 (build-system pyproject-build-system)
8387 (arguments
8388 (list
8389 #:test-flags
8390 ;; assert 404 == 400
8391 ;; This test is removed on master branch.
8392 #~(list (string-append "--deselect=tests/test_reqctx.py"
8393 "::test_bad_environ_raises_bad_request"))))
8394 (native-inputs
8395 (list python-flit-core
8396 python-pytest))
8397 (propagated-inputs
8398 (list python-blinker
8399 python-click
8400 python-itsdangerous
8401 python-jinja2
8402 python-markupsafe
8403 python-werkzeug
8404 ;; [optional]
8405 python-asgiref
8406 python-dotenv))
8407 (home-page "https://palletsprojects.com/p/flask/")
8408 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
8409 (description "Flask is a micro web framework based on the Werkzeug toolkit
8410and Jinja2 template engine. It is called a micro framework because it does not
8411presume or force a developer to use a particular tool or library.")
8412 (license license:bsd-3)))
8413
8414(define-public python-flask-compress
8415 (package
8416 (name "python-flask-compress")
8417 (version "1.24")
8418 (source
8419 (origin
8420 (method git-fetch)
8421 (uri (git-reference
8422 (url "https://github.com/colour-science/flask-compress")
8423 (commit (string-append "v" version))))
8424 (file-name (git-file-name name version))
8425 (sha256
8426 (base32 "0mid5c34r75vax1r7l2l5sjjhs6bl8rbsdmhc7kz39snq6xw3cr5"))))
8427 (build-system pyproject-build-system)
8428 (native-inputs
8429 (list python-flask-caching
8430 python-pytest
8431 python-setuptools
8432 python-setuptools-scm))
8433 (propagated-inputs
8434 (list python-backports-zstd
8435 python-brotli
8436 python-flask))
8437 (home-page "https://github.com/colour-science/flask-compress")
8438 (synopsis "Compress responses in a Flask app")
8439 (description
8440 "This package lets you compress Flask application responses and static
8441files with gzip, deflate or brotli. Flask-Compress both adds the various
8442headers required for a compressed response and compresses the response data.")
8443 (license license:expat)))
8444
8445(define-public python-flask-seasurf
8446 (package
8447 (name "python-flask-seasurf")
8448 (version "2.0.0")
8449 (source (origin
8450 (method url-fetch)
8451 (uri (pypi-uri "Flask-SeaSurf" version))
8452 (sha256
8453 (base32
8454 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
8455 (build-system pyproject-build-system)
8456 (arguments
8457 (list #:tests? #false)) ;there are none
8458 (propagated-inputs (list python-flask))
8459 (native-inputs (list python-setuptools python-wheel))
8460 (home-page "https://github.com/maxcountryman/flask-seasurf/")
8461 (synopsis "CSRF extension for Flask")
8462 (description "SeaSurf is a Flask extension for preventing cross-site
8463request forgery (CSRF). CSRF attacks are problematic because the mechanism
8464they use is relatively easy to exploit. This extension attempts to aid you in
8465securing your application from such attacks. This extension is based on the
8466Django middleware.")
8467 (license license:bsd-3)))
8468
8469(define-public python-flask-wtf
8470 (package
8471 (name "python-flask-wtf")
8472 (version "1.2.2")
8473 (source
8474 (origin
8475 (method url-fetch)
8476 (uri (pypi-uri "Flask-WTF" version))
8477 (sha256
8478 (base32
8479 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
8480 (build-system pyproject-build-system)
8481 (propagated-inputs
8482 (list python-flask python-flask python-itsdangerous python-wtforms))
8483 (native-inputs
8484 (list python-hatchling python-pytest))
8485 (home-page "https://github.com/lepture/flask-wtf")
8486 (synopsis "Simple integration of Flask and WTForms")
8487 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
8488upload, and reCAPTCHA.")
8489 (license license:bsd-3)))
8490
8491(define-public python-flask-multistatic
8492 (package
8493 (name "python-flask-multistatic")
8494 (version "1.0")
8495 (source
8496 (origin
8497 (method url-fetch)
8498 (uri (pypi-uri "flask-multistatic" version))
8499 (sha256
8500 (base32
8501 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
8502 (build-system pyproject-build-system)
8503 (arguments (list #:tests? #f)) ; No tests upstream.
8504 (native-inputs (list python-setuptools))
8505 (propagated-inputs (list python-flask))
8506 (home-page "https://pagure.io/flask-multistatic")
8507 (synopsis "Flask plugin to allow overriding static files")
8508 (description "@code{flask-multistatic} is a flask plugin that adds support
8509for overriding static files.")
8510 (license license:gpl3+)))
8511
8512(define-public python-responses
8513 (package
8514 (name "python-responses")
8515 (version "0.25.3")
8516 (source (origin
8517 (method url-fetch)
8518 (uri (pypi-uri "responses" version))
8519 (sha256
8520 (base32
8521 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
8522 (build-system pyproject-build-system)
8523 (native-inputs
8524 (list python-pytest
8525 python-pytest-asyncio
8526 python-pytest-httpserver
8527 python-setuptools
8528 python-tomli
8529 python-tomli-w
8530 python-wheel))
8531 (propagated-inputs
8532 (list python-requests
8533 python-pyyaml
8534 python-urllib3))
8535 (home-page "https://github.com/getsentry/responses")
8536 (synopsis "Utility for mocking out the `requests` Python library")
8537 (description "A utility library for mocking out the `requests` Python
8538library.")
8539 (license license:asl2.0)))
8540
8541(define-public python-grequests
8542 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
8543 (revision "0"))
8544 (package
8545 (name "python-grequests")
8546 (version (git-version "0.7.0" revision commit))
8547 (source
8548 (origin
8549 (method git-fetch)
8550 (uri (git-reference
8551 (url "https://github.com/kennethreitz/grequests")
8552 (commit commit)))
8553 (file-name (git-file-name name version))
8554 (sha256
8555 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
8556 (build-system pyproject-build-system)
8557 (arguments
8558 (list
8559 ;; XXX: Most failing tests seem to be caused by network access,
8560 ;; but there is no easy/flag way to disable tests selectively.
8561 #:tests? #f
8562 #:test-backend #~'unittest
8563 #:test-flags #~(list "tests.py")))
8564 (propagated-inputs (list python-gevent python-requests))
8565 (native-inputs (list python-setuptools))
8566 (home-page "https://github.com/kennethreitz/grequests")
8567 (synopsis "Python library for asynchronous HTTP requests")
8568 (description
8569 "GRequests is a Python library that allows you to use @code{Requests}
8570with @code{Gevent} to make asynchronous HTTP Requests easily.")
8571 (license license:bsd-2))))
8572
8573(define-public python-gwebsockets
8574 (package
8575 (name "python-gwebsockets")
8576 (version "0.7")
8577 (source
8578 (origin
8579 (method git-fetch)
8580 (uri (git-reference
8581 (url "https://github.com/sugarlabs/gwebsockets")
8582 (commit (string-append "v" version))))
8583 (file-name (git-file-name name version))
8584 (sha256
8585 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
8586 (build-system pyproject-build-system)
8587 (arguments (list #:tests? #f)) ; No tests upstream.
8588 (native-inputs (list python-setuptools))
8589 (propagated-inputs (list python-pygobject))
8590 (home-page "https://github.com/sugarlabs/gwebsockets")
8591 (synopsis "GLib based websockets server")
8592 (description
8593 "This package provides a websocket server written in Python. It uses GIO
8594for network communication and hence it easily integrates with the GLib
8595mainloop.")
8596 (license license:asl2.0)))
8597
8598(define-public python-dpkt
8599 (package
8600 (name "python-dpkt")
8601 (version "1.9.8")
8602 (source
8603 (origin
8604 (method git-fetch)
8605 (uri (git-reference
8606 (url "https://github.com/kbandla/dpkt")
8607 (commit (string-append "v" version))))
8608 (file-name (git-file-name name version))
8609 (sha256
8610 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
8611 (build-system pyproject-build-system)
8612 (arguments
8613 (list
8614 #:test-flags
8615 #~(list "--pyargs" "dpkt")))
8616 (native-inputs (list python-pytest python-setuptools))
8617 (home-page "https://github.com/kbandla/dpkt")
8618 (synopsis "Packet generator and parser for TCP/IP protocols")
8619 (description
8620 "The dpkt module is a fast, simple packet generator and parser for the
8621basic TCP/IP protocols.")
8622 (license license:bsd-3)))
8623
8624(define-public python-geventhttpclient
8625 (package
8626 (name "python-geventhttpclient")
8627 (version "2.3.9")
8628 (source (origin
8629 (method git-fetch)
8630 (uri (git-reference
8631 (url "https://github.com/geventhttpclient/geventhttpclient")
8632 (commit version)
8633 (recursive? #true)))
8634 (file-name (git-file-name name version))
8635 (sha256
8636 (base32
8637 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
8638 (build-system pyproject-build-system)
8639 (arguments
8640 (list
8641 #:test-flags
8642 ;; Disable network tests.
8643 '(list "-k"
8644 (string-append "not test_client_simple"
8645 " and not test_client_ssl"
8646 " and not test_client_with_default_headers"
8647 " and not test_client_without_leading_slash"
8648 " and not test_download"
8649 " and not test_fail_invalid_ca_certificate"
8650 " and not test_httpbin_multipart"
8651 " and not test_multi_queries_greenlet_safe"
8652 " and not test_no_form_encode_header"
8653 " and not test_no_form_encoded_header"
8654 " and not test_request_with_headers"
8655 " and not test_response_context_manager"
8656 " and not test_urllib_request"))))
8657 (native-inputs (list nss-certs-for-test
8658 python-dpkt python-pytest python-requests
8659 python-setuptools python-wheel))
8660 (propagated-inputs (list python-brotli python-certifi python-gevent
8661 python-urllib3))
8662 (home-page "https://github.com/geventhttpclient/geventhttpclient")
8663 (synopsis "HTTP client library for gevent")
8664 (description "@code{python-geventhttpclient} is a high performance,
8665concurrent HTTP client library for python using @code{gevent}.")
8666 (license license:expat)))
8667
8668(define-public python-gevent-websocket
8669 (package
8670 (name "python-gevent-websocket")
8671 (version "0.10.1")
8672 (source
8673 (origin
8674 (method url-fetch)
8675 (uri (pypi-uri "gevent-websocket" version))
8676 (sha256
8677 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
8678 (build-system pyproject-build-system)
8679 (arguments
8680 (list #:tests? #f)) ; no tests in PyPI or git
8681 (native-inputs
8682 (list python-setuptools
8683 python-wheel))
8684 (propagated-inputs
8685 (list python-gevent))
8686 (home-page "https://gitlab.com/noppo/gevent-websocket")
8687 (synopsis "Websocket handler for the gevent pywsgi server")
8688 (description
8689 "Websocket handler for the gevent pywsgi server, a Python network
8690library.
8691
8692Features include:
8693@itemize
8694@item integration on both socket level or using an abstract interface
8695@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
8696Protocol, WAMP}
8697@item easily extendible using a simple WebSocket protocol plugin API
8698@end itemize")
8699 (license license:asl2.0)))
8700
8701(define-public python-requests-oauthlib
8702 (package
8703 (name "python-requests-oauthlib")
8704 (version "2.0.0")
8705 (source
8706 (origin
8707 (method git-fetch)
8708 (uri (git-reference (url
8709 "https://github.com/requests/requests-oauthlib")
8710 (commit (string-append "v" version))))
8711 (file-name (git-file-name name version))
8712 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
8713 (build-system pyproject-build-system)
8714 (arguments
8715 (list
8716 #:test-flags
8717 #~(list
8718 "--ignore=tests/test_core.py" ; requires network access.
8719 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
8720 "-k" "not test_fetch_access_token"))) ; flaky tests.
8721 (native-inputs
8722 (list python-requests-mock python-pytest python-setuptools))
8723 (propagated-inputs
8724 (list python-oauthlib python-requests))
8725 (home-page "https://github.com/requests/requests-oauthlib")
8726 (synopsis "OAuthlib authentication support for Requests")
8727 (description
8728 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
8729provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
8730 (license license:isc)))
8731
8732(define-public python-cachecontrol
8733 (package
8734 (name "python-cachecontrol")
8735 (version "0.14.1")
8736 (source
8737 (origin
8738 (method git-fetch)
8739 (uri (git-reference
8740 (url "https://github.com/ionrock/cachecontrol")
8741 (commit (string-append "v" version))))
8742 (file-name (git-file-name name version))
8743 (sha256
8744 (base32
8745 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
8746 (build-system pyproject-build-system)
8747 (propagated-inputs
8748 (list python-filelock python-msgpack python-requests))
8749 (native-inputs
8750 (list python-cherrypy python-flit-core python-pytest))
8751 (home-page "https://github.com/ionrock/cachecontrol")
8752 (synopsis "The httplib2 caching algorithms for use with requests")
8753 (description "CacheControl is a port of the caching algorithms in
8754@code{httplib2} for use with @code{requests} session objects.")
8755 (license license:asl2.0)))
8756
8757(define-public python-betamax
8758 (package
8759 (name "python-betamax")
8760 (version "0.9.0")
8761 (source
8762 (origin
8763 (method url-fetch)
8764 (uri (pypi-uri "betamax" version))
8765 (sha256
8766 (base32
8767 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
8768 (build-system pyproject-build-system)
8769 (arguments
8770 (list
8771 #:test-flags
8772 #~(list "-k" (string-join
8773 ;; Tests require network access to http://httpbin.org/get.
8774 (list "not test_creates_new_cassettes"
8775 "test_placeholders_work"
8776 "test_post_start_hook"
8777 "test_pre_stop_hook"
8778 "test_preplayback_hook"
8779 "test_prerecord_hook"
8780 "test_prerecord_ignoring_hook"
8781 "test_records_new_events_with_existing_cassette"
8782 "test_records_new_interaction"
8783 "test_records_new_interactions"
8784 "test_replaces_old_interactions"
8785 "test_replays_response_from_cassette"
8786 "test_requests_with_json_body"
8787 "test_saves_content_as_gzip"
8788 "test_unicode_is_saved_properly")
8789 " and not "))))
8790 (native-inputs
8791 (list nss-certs-for-test
8792 python-pytest
8793 python-setuptools))
8794 (propagated-inputs
8795 (list python-requests))
8796 (home-page "https://github.com/sigmavirus24/betamax")
8797 (synopsis "Record HTTP interactions with python-requests")
8798 (description
8799 "Betamax will record your test suite's HTTP interactions and replay them
8800during future tests. It is designed to work with python-requests.")
8801 (license license:expat)))
8802
8803(define-public python-betamax-matchers
8804 (package
8805 (name "python-betamax-matchers")
8806 (version "0.4.0")
8807 (source
8808 (origin
8809 (method git-fetch)
8810 (uri (git-reference
8811 (url "https://github.com/sigmavirus24/betamax_matchers")
8812 (commit version)))
8813 (file-name (git-file-name name version))
8814 (sha256
8815 (base32 "0lyg3r91hwfvavyi5k6sddcla37igigycfv1mx40c32byqwl6pq5"))))
8816 (build-system pyproject-build-system)
8817 (native-inputs (list python-pytest python-setuptools))
8818 (propagated-inputs (list python-betamax python-requests-toolbelt))
8819 (home-page "https://github.com/sigmavirus24/betamax_matchers")
8820 (synopsis "VCR imitation for python-requests")
8821 (description "@code{betamax-matchers} provides a set of Matchers for
8822Betamax.")
8823 (license license:asl2.0)))
8824
8825(define-public python-betamax-serializers
8826 (package
8827 (name "python-betamax-serializers")
8828 (version "0.2.1")
8829 (source
8830 (origin
8831 (method git-fetch)
8832 (uri (git-reference
8833 (url "https://gitlab.com/betamax/serializers")
8834 (commit version)))
8835 (file-name (git-file-name name version))
8836 (sha256
8837 (base32 "1p2l5w3vwvjacs2ndahgcjq55qb53i37p8mz1zh85pjxyszdyw2l"))))
8838 (build-system pyproject-build-system)
8839 (arguments (list #:tests? #f)) ; No tests.
8840 (native-inputs (list python-setuptools))
8841 (propagated-inputs (list python-betamax python-pyyaml))
8842 (synopsis "Set of third-party serializers for Betamax")
8843 (description
8844 "Betamax-Serializers are an experimental set of Serializers for Betamax
8845that may possibly end up in the main package.")
8846 (home-page "https://gitlab.com/betamax/serializers")
8847 (license license:asl2.0)))
8848
8849(define-public python-s3fs
8850 (package
8851 (name "python-s3fs")
8852 (version "2026.1.0")
8853 (source
8854 (origin
8855 (method url-fetch)
8856 (uri (pypi-uri "s3fs" version))
8857 (sha256
8858 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
8859 (build-system pyproject-build-system)
8860 ;; TODO: Many tests fail with "No such file or directory" raised by the
8861 ;; HTTP client.
8862 (arguments (list #:tests? #false))
8863 (native-inputs
8864 (list python-setuptools))
8865 (propagated-inputs
8866 (list python-aiobotocore
8867 python-aiohttp
8868 python-fsspec))
8869 (home-page "https://github.com/fsspec/s3fs/")
8870 (synopsis "Convenient filesystem interface over S3")
8871 (description "This package provides a convenient filesystem interface over
8872S3.")
8873 (license license:bsd-3)))
8874
8875(define-public python-s3transfer
8876 (package
8877 (name "python-s3transfer")
8878 (version "0.16.0")
8879 (source
8880 (origin
8881 (method url-fetch)
8882 (uri (pypi-uri "s3transfer" version))
8883 (sha256
8884 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
8885 (build-system pyproject-build-system)
8886 (arguments
8887 (list
8888 ;; tests: 630 passed, 51 skipped
8889 #:test-flags
8890 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8891 ;; Tests require networking.
8892 "--ignore" "tests/integration")))
8893 (native-inputs
8894 (list python-pytest
8895 python-pytest-xdist
8896 python-setuptools))
8897 (propagated-inputs
8898 (list python-botocore))
8899 (home-page "https://github.com/boto/s3transfer")
8900 (synopsis "Amazon S3 Transfer Manager")
8901 (description
8902 "S3transfer is a Python library for managing Amazon S3 transfers.")
8903 (license license:asl2.0)))
8904
8905(define-public python-flask-restful
8906 (package
8907 (name "python-flask-restful")
8908 (version "0.3.10")
8909 (source
8910 (origin
8911 (method url-fetch)
8912 (uri (pypi-uri "Flask-RESTful" version))
8913 (sha256
8914 (base32
8915 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
8916 (build-system pyproject-build-system)
8917 (arguments
8918 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
8919 (list #:tests? #f))
8920 (propagated-inputs
8921 (list python-aniso8601 python-flask python-pytz))
8922 (native-inputs
8923 (list python-blinker
8924 python-mock
8925 python-pytest
8926 python-setuptools
8927 python-six))
8928 (home-page "https://github.com/flask-restful/flask-restful/")
8929 (synopsis "Flask module for creating REST APIs")
8930 (description
8931 "This package contains a Flask module for creating REST APIs.")
8932 (license license:bsd-3)))
8933
8934(define-public python-flask-sqlalchemy
8935 (package
8936 (name "python-flask-sqlalchemy")
8937 ;; Released version fails tests in Python 3.12.
8938 (properties '((commit . "168cb4b7b50fe5176307a10d873781bfafc6eeda")
8939 (revision . "0")))
8940 (version (git-version "3.1.1"
8941 (assoc-ref properties 'revision)
8942 (assoc-ref properties 'commit)))
8943 (source
8944 (origin
8945 (method git-fetch)
8946 (uri (git-reference
8947 (url "https://github.com/pallets-eco/flask-sqlalchemy")
8948 (commit (assoc-ref properties 'commit))))
8949 (file-name (git-file-name name version))
8950 (sha256
8951 (base32
8952 "0xw8v1540m21x9crpgb0i3rxyhh1d24ldg354vndw9cif74ls5p6"))))
8953 (build-system pyproject-build-system)
8954 (arguments
8955 (list
8956 #:test-flags
8957 #~(list "-k" (string-append "not test_explicit_table[db2]"
8958 " and not test_explicit_table[db4]")
8959 "-W" "ignore::DeprecationWarning")))
8960 (native-inputs
8961 (list python-flit-core
8962 python-pytest))
8963 (propagated-inputs
8964 (list python-flask
8965 python-sqlalchemy-2))
8966 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
8967 (synopsis "Module adding SQLAlchemy support to your Flask application")
8968 (description
8969 "This package adds SQLAlchemy support to your Flask application.")
8970 (license license:bsd-3)))
8971
8972(define-public python-flask-restful-swagger
8973 (package
8974 (name "python-flask-restful-swagger")
8975 (version "0.20.1")
8976 ;; XXX: Unbundle minified javascript.
8977 (source
8978 (origin
8979 (method git-fetch)
8980 (uri (git-reference
8981 (url "https://github.com/rantav/flask-restful-swagger")
8982 (commit version)))
8983 (file-name (git-file-name name version))
8984 (sha256
8985 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
8986 (build-system pyproject-build-system)
8987 (arguments (list #:tests? #f)) ; No tests.
8988 (native-inputs (list python-setuptools))
8989 (propagated-inputs (list python-flask-restful python-six))
8990 (home-page "https://github.com/rantav/flask-restful-swagger")
8991 (synopsis "Extract Swagger specs from Flask-Restful projects")
8992 (description "This package lets you extract Swagger API documentation
8993specs from your Flask-Restful projects.")
8994 (license license:expat)))
8995
8996(define-public python-htmlmin
8997 (package
8998 (name "python-htmlmin")
8999 (version "0.1.12")
9000 (source
9001 (origin
9002 (method url-fetch)
9003 (uri (pypi-uri "htmlmin" version))
9004 (sha256
9005 (base32
9006 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
9007 (build-system pyproject-build-system)
9008 (arguments
9009 (list #:tests? #f)) ; no tests
9010 (native-inputs (list python-setuptools))
9011 (home-page "https://htmlmin.readthedocs.org/en/latest/")
9012 (synopsis "HTML minifier")
9013 (description "@code{htmlmin} is an HTML minifier that just works.
9014It comes with safe defaults and easily configurable options.")
9015 (license license:bsd-3)))
9016
9017;; XXX: Forked renamed and updated version.
9018(define-public python-htmlmin2
9019 (package/inherit python-htmlmin
9020 (name "python-htmlmin2")
9021 (version "0.1.13")
9022 (source
9023 (origin
9024 (method git-fetch)
9025 (uri (git-reference
9026 (url "https://github.com/wilhelmer/htmlmin")
9027 (commit (string-append "v" version))))
9028 (file-name (git-file-name name version))
9029 (sha256
9030 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
9031 (build-system pyproject-build-system)
9032 (arguments (list #:test-backend #~'unittest))
9033 (native-inputs (list python-setuptools))
9034 (home-page "https://github.com/wilhelmer/htmlmin")
9035 (description
9036 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
9037defaults and easily configurable options. This variant is an updated fork of
9038the original @code{python-htmlmin}.")
9039 (license license:bsd-3)))
9040
9041(define-public python-flask-htmlmin
9042 (package
9043 (name "python-flask-htmlmin")
9044 (version "3.0.0")
9045 (source
9046 (origin
9047 (method git-fetch)
9048 (uri (git-reference
9049 (url "https://github.com/hamidfzm/Flask-HTMLmin")
9050 (commit (string-append "v" version))))
9051 (file-name (git-file-name name version))
9052 (sha256
9053 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
9054 (build-system pyproject-build-system)
9055 (native-inputs (list python-pytest python-setuptools))
9056 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
9057 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
9058 (synopsis "HTML response minifier for Flask")
9059 (description
9060 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
9061 (license license:bsd-3)))
9062
9063(define-public python-jsmin
9064 (package
9065 (name "python-jsmin")
9066 (version "3.0.1")
9067 (source
9068 (origin
9069 (method url-fetch)
9070 (uri (pypi-uri "jsmin" version))
9071 (sha256
9072 (base32
9073 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
9074 (build-system pyproject-build-system)
9075 (arguments (list #:test-backend #~'unittest))
9076 (native-inputs
9077 (list python-setuptools))
9078 (home-page "https://github.com/tikitu/jsmin/")
9079 (synopsis "Python JavaScript minifier")
9080 (description
9081 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
9082on the command line.")
9083 (license license:expat)))
9084
9085(define-public python-flask-login
9086 (let ((commit "c8bba84b9ba6768e878317fc46c54bd13fa1ac07")
9087 (revision "0"))
9088 (package
9089 (name "python-flask-login")
9090 (version (git-version "0.6.3" revision commit))
9091 (source
9092 (origin
9093 (method git-fetch)
9094 (uri (git-reference
9095 (url "https://github.com/maxcountryman/flask-login")
9096 (commit commit)))
9097 (file-name (git-file-name name version))
9098 (sha256
9099 (base32 "0q0ga1zwm06kvpnsf50ckmsc77959i1spx7z2y3jkbwaa4klsyli"))))
9100 (build-system pyproject-build-system)
9101 (propagated-inputs
9102 (list python-flask))
9103 (native-inputs
9104 ;; For tests.
9105 (list python-blinker
9106 python-flit-core
9107 python-mock
9108 python-pytest
9109 python-semantic-version
9110 python-werkzeug))
9111 (home-page "https://github.com/maxcountryman/flask-login")
9112 (synopsis "User session management for Flask")
9113 (description
9114 "@code{Flask-Login} provides user session management for Flask. It
9115handles the common tasks of logging in, logging out, and remembering your
9116users' sessions over extended periods of time.")
9117 (license license:expat))))
9118
9119(define-public python-oauth2client
9120 (package
9121 (name "python-oauth2client")
9122 (version "4.1.3")
9123 (source
9124 (origin
9125 (method git-fetch)
9126 (uri (git-reference
9127 (url "https://github.com/google/oauth2client/")
9128 (commit (string-append "v" version))))
9129 (file-name (git-file-name name version))
9130 (sha256
9131 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
9132 (build-system pyproject-build-system)
9133 (arguments
9134 (list #:tests? #f))
9135 (native-inputs
9136 (list python-setuptools))
9137 (propagated-inputs
9138 (list python-httplib2
9139 python-pyasn1
9140 python-pyasn1-modules
9141 python-pyparsing
9142 python-rsa
9143 python-six))
9144 (home-page "https://github.com/google/oauth2client/")
9145 (synopsis "OAuth 2.0 client library")
9146 (description "@code{python-oauth2client} provides an OAuth 2.0 client
9147library for Python")
9148 (license license:asl2.0)))
9149
9150(define-public python-authlib
9151 (package
9152 (name "python-authlib")
9153 (version "1.5.1")
9154 (source
9155 (origin
9156 (method url-fetch)
9157 (uri (pypi-uri "authlib" version))
9158 (sha256
9159 (base32 "0blpvz2v2r8yvsgm1yr3n61mhwxvh1b0kyf2rp0i4wv6n3n8bg2w"))))
9160 (build-system pyproject-build-system)
9161 ;; No tests target.
9162 (arguments (list #:tests? #false))
9163 (propagated-inputs
9164 (list python-cryptography
9165 python-django
9166 python-flask
9167 python-httpx
9168 python-requests
9169 python-sqlalchemy-2
9170 python-starlette
9171 python-werkzeug))
9172 (native-inputs (list python-pytest python-setuptools python-wheel))
9173 (home-page "https://pypi.org/project/Authlib/1")
9174 (synopsis "Build OAuth and OpenID Connect servers and clients")
9175 (description
9176 "This is a Python library for building OAuth and OpenID Connect servers
9177and clients.")
9178 (license license:bsd-3)))
9179
9180(define-public python-flask-oidc
9181 (package
9182 (name "python-flask-oidc")
9183 (version "2.3.1")
9184 (source
9185 (origin
9186 (method url-fetch)
9187 (uri (pypi-uri "flask_oidc" version))
9188 (sha256
9189 (base32
9190 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
9191 (build-system pyproject-build-system)
9192 (propagated-inputs
9193 (list python-authlib
9194 python-blinker
9195 python-flask
9196 python-requests
9197 python-responses))
9198 (native-inputs
9199 (list python-pytest python-poetry-core))
9200 (home-page "https://github.com/puiterwijk/flask-oidc")
9201 (synopsis "OpenID Connect extension for Flask")
9202 (description "@code{python-flask-oidc} provides an OpenID Connect extension
9203for Flask.")
9204 (license license:bsd-2)))
9205
9206(define-public python-webassets
9207 (package
9208 (name "python-webassets")
9209 (version "3.0.0")
9210 (source
9211 (origin
9212 (method git-fetch)
9213 (uri (git-reference
9214 (url "https://github.com/miracle2k/webassets")
9215 (commit version)))
9216 (file-name (git-file-name name version))
9217 (sha256
9218 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
9219 (build-system pyproject-build-system)
9220 (propagated-inputs (list python-pyyaml python-zope-dottedname))
9221 (native-inputs (list python-hatchling python-pytest))
9222 (home-page "https://github.com/miracle2k/webassets")
9223 (synopsis "Media asset management")
9224 (description
9225 "This package provides utilities to merge, minify and compress Javascript
9226and CSS files,supporting a variety of different filters, including YUI, jsmin,
9227jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
9228 (license license:bsd-2)))
9229
9230(define-public python-cssmin
9231 (package
9232 (name "python-cssmin")
9233 (version "0.2.0")
9234 (source
9235 (origin
9236 (method git-fetch)
9237 (uri (git-reference
9238 (url "https://github.com/zacharyvoase/cssmin")
9239 (commit (string-append "v" version))))
9240 (file-name (git-file-name name version))
9241 (sha256
9242 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
9243 (build-system pyproject-build-system)
9244 (arguments (list #:tests? #f)) ; No tests.
9245 (native-inputs (list python-setuptools))
9246 (home-page "https://github.com/zacharyvoase/cssmin")
9247 (synopsis "Python port of the YUI CSS Compressor")
9248 (description "Python port of the YUI CSS Compressor.")
9249 (license (list license:expat license:bsd-3))))
9250
9251(define-public python-elastic-transport
9252 (package
9253 (name "python-elastic-transport")
9254 (version "9.1.0")
9255 (source
9256 (origin
9257 (method url-fetch)
9258 (uri (pypi-uri "elastic_transport" version))
9259 (sha256
9260 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
9261 (build-system pyproject-build-system)
9262 (arguments
9263 (list
9264 #:test-flags
9265 ;; Deselect failing tests (mostly due to network not reachable)
9266 #~(list "-k"
9267 (string-append
9268 "not .badssl.com"
9269 " and not test_assert_fingerprint_in_cert_chain_failure"))))
9270 (propagated-inputs (list python-certifi python-urllib3))
9271 (native-inputs (list nss-certs-for-test
9272 python-aiohttp
9273 ;; python-furo
9274 python-httpx
9275 python-opentelemetry-api
9276 python-opentelemetry-sdk
9277 python-orjson
9278 python-pytest
9279 python-pytest-asyncio-0.26
9280 ;; python-pytest-cov
9281 python-pytest-httpbin
9282 python-pytest-httpserver
9283 python-pytest-mock
9284 python-requests
9285 python-respx ;test
9286 python-setuptools
9287 ;; python-sphinx
9288 ;; python-sphinx-autodoc-typehints
9289 python-trustme
9290 python-wheel))
9291 (home-page "https://github.com/elastic/elastic-transport-python")
9292 (synopsis "Common library for Python Elastic client libraries")
9293 (description
9294 "This library was lifted from @code{elasticsearch-py} and then transformed to
9295be used across all Elastic services rather than only Elasticsearch. It
9296provides transport classes and utilities shared among Python Elastic client
9297libraries.")
9298 ;; Apache-2.0 in setup.py and LICENSE file.
9299 (license license:asl2.0)))
9300
9301(define-public python-elasticsearch
9302 (package
9303 (name "python-elasticsearch")
9304 (version "9.1.1")
9305 (source
9306 (origin
9307 (method git-fetch) ; no tests in PyPI release
9308 (uri (git-reference
9309 (url "https://github.com/elastic/elasticsearch-py")
9310 (commit (string-append "v" version))))
9311 (file-name (git-file-name name version))
9312 (sha256
9313 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
9314 (build-system pyproject-build-system)
9315 (native-inputs
9316 (list nss-certs-for-test
9317 python-aiohttp
9318 python-dateutil
9319 python-mock
9320 python-orjson
9321 python-pytest
9322 python-pytest-asyncio
9323 python-pytz
9324 python-pyyaml
9325 python-requests
9326 python-hatchling))
9327 (propagated-inputs
9328 (list python-certifi
9329 python-elastic-transport))
9330 (home-page "https://github.com/elastic/elasticsearch-py")
9331 (synopsis "Low-level client for Elasticsearch")
9332 (description "Official low-level client for Elasticsearch. Its goal is to
9333provide common ground for all Elasticsearch-related code in Python; because of
9334this it tries to be opinion-free and very extendable.")
9335 ;; Apache-2.0 in setup.py and LICENSE file.
9336 (license license:asl2.0)))
9337
9338(define-public python-engineio
9339 (package
9340 (name "python-engineio")
9341 (version "4.13.4")
9342 (source
9343 (origin
9344 (method git-fetch)
9345 (uri (git-reference
9346 (url "https://github.com/miguelgrinberg/python-engineio/")
9347 (commit (string-append "v" version))))
9348 (file-name (git-file-name name version))
9349 (sha256
9350 (base32 "1ndp68cqssjpvln958v236rg5jgpzy57vs3z45sz7xfscmbi893r"))))
9351 (build-system pyproject-build-system)
9352 (native-inputs
9353 (list python-pytest
9354 python-pytest-asyncio
9355 python-setuptools
9356 python-tornado))
9357 (propagated-inputs
9358 (list python-simple-websocket
9359 ;; [optional]
9360 python-aiohttp
9361 python-requests
9362 python-websocket-client))
9363 (home-page "https://github.com/miguelgrinberg/python-engineio/")
9364 (synopsis "Engine.IO server")
9365 (description "This package provides a Python implementation of the
9366@code{Engine.IO} realtime client and server.")
9367 (license license:expat)))
9368
9369(define-public python-ephemeral-port-reserve
9370 (package
9371 (name "python-ephemeral-port-reserve")
9372 (version "1.1.4")
9373 (source
9374 (origin
9375 (method git-fetch)
9376 (uri (git-reference
9377 (url "https://github.com/Yelp/ephemeral-port-reserve")
9378 (commit (string-append "v" version))))
9379 (file-name (git-file-name name version))
9380 (sha256
9381 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
9382 (build-system pyproject-build-system)
9383 (native-inputs
9384 (list python-pytest
9385 python-setuptools))
9386 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
9387 (synopsis "Find an unused port, reliably")
9388 (description
9389 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
9390it.")
9391 (license license:expat)))
9392
9393(define-public python-flask-migrate
9394 (package
9395 (name "python-flask-migrate")
9396 (version "4.1.0")
9397 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
9398 (source (origin
9399 (method git-fetch)
9400 (uri (git-reference (url home-page)
9401 (commit (string-append "v" version))))
9402 (file-name (git-file-name name version))
9403 (sha256
9404 (base32
9405 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
9406 (build-system pyproject-build-system)
9407 (propagated-inputs
9408 (list python-flask python-alembic python-flask-sqlalchemy))
9409 (native-inputs
9410 (list python-pytest python-setuptools python-wheel))
9411 (synopsis "SQLAlchemy database migrations for Flask programs using
9412Alembic")
9413 (description "This package contains SQLAlchemy database migration tools
9414for Flask programs that are using @code{python-alembic}.")
9415 (license license:expat)))
9416
9417(define-public python-genshi
9418 (package
9419 (name "python-genshi")
9420 (version "0.7.10")
9421 (source
9422 (origin
9423 (method git-fetch)
9424 (uri (git-reference
9425 (url "https://github.com/edgewall/genshi")
9426 (commit version)))
9427 (file-name (git-file-name name version))
9428 (sha256
9429 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
9430 (build-system pyproject-build-system)
9431 (arguments (list #:test-backend #~'unittest))
9432 (native-inputs (list python-setuptools))
9433 (propagated-inputs (list python-six))
9434 (home-page "https://genshi.edgewall.org/")
9435 (synopsis "Toolkit for generation of output for the web")
9436 (description "Genshi is a Python library that provides an integrated set
9437of components for parsing, generating, and processing HTML, XML or other
9438textual content for output generation on the web.")
9439 (license license:bsd-3)))
9440
9441(define-public python-flask-principal
9442 (package
9443 (name "python-flask-principal")
9444 (version "0.4.0")
9445 (source
9446 (origin
9447 (method git-fetch)
9448 (uri (git-reference
9449 (url "https://github.com/pallets-eco/flask-principal")
9450 (commit version)))
9451 (file-name (git-file-name name version))
9452 (sha256
9453 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
9454 (build-system pyproject-build-system)
9455 (propagated-inputs (list python-blinker))
9456 (native-inputs (list python-flask python-pynose python-setuptools))
9457 (home-page "https://github.com/pallets-eco/flask-principal")
9458 (synopsis "Identity management for Flask")
9459 (description
9460 "@code{flask_principal} is a identity management library for Flask. It
9461supports managing both authentication and authorization data in a thread-local
9462variable.")
9463 (license license:expat)))
9464
9465(define-public python-flask-httpauth
9466 (package
9467 (name "python-flask-httpauth")
9468 (version "4.8.0")
9469 (source
9470 (origin
9471 (method url-fetch)
9472 (uri (pypi-uri "Flask-HTTPAuth" version))
9473 (sha256
9474 (base32
9475 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
9476 (build-system pyproject-build-system)
9477 (propagated-inputs (list python-flask))
9478 (native-inputs
9479 (list nss-certs-for-test
9480 python-pytest
9481 python-setuptools
9482 python-wheel))
9483 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
9484 (synopsis "Basic and Digest HTTP authentication for Flask routes")
9485 (description "@code{flask_httpauth} provides Basic and Digest HTTP
9486authentication for Flask routes.")
9487 (license license:expat)))
9488
9489(define-public python-uritemplate
9490 (package
9491 (name "python-uritemplate")
9492 (version "4.2.0")
9493 (source
9494 (origin
9495 (method url-fetch)
9496 (uri (pypi-uri "uritemplate" version))
9497 (sha256
9498 (base32
9499 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
9500 (build-system pyproject-build-system)
9501 (native-inputs (list python-pytest python-setuptools))
9502 (home-page "https://uritemplate.readthedocs.io/")
9503 (synopsis "Library to deal with URI Templates")
9504 (description "@code{uritemplate} provides Python library to deal with URI
9505Templates.")
9506 ;; The software is made available under the terms of *either* of the
9507 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
9508 ;; are made under *both* licenses (excerpt from the LICENSE file).
9509 (license (list license:bsd-2 license:asl2.0))))
9510
9511(define-public python-uritemplate-3
9512 (package
9513 (inherit python-uritemplate)
9514 (name "python-uritemplate")
9515 (version "3.0.1")
9516 (source (origin
9517 (method url-fetch)
9518 (uri (pypi-uri "uritemplate" version))
9519 (sha256
9520 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
9521
9522(define-public python-publicsuffix2
9523 (package
9524 (name "python-publicsuffix2")
9525 (version "2.2019-12-21")
9526 (source
9527 (origin
9528 (method git-fetch)
9529 (uri (git-reference
9530 (url "https://github.com/pombredanne/python-publicsuffix2")
9531 (commit (string-append "release-" version))))
9532 (file-name (git-file-name name version))
9533 (sha256
9534 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
9535 (build-system pyproject-build-system)
9536 (arguments
9537 (list
9538 #:tests? #f ;the test suite requires network access
9539 #:phases
9540 #~(modify-phases %standard-phases
9541 (add-after 'unpack 'ignore-maintainer-inputs
9542 (lambda _
9543 ;; Comment out a demand for python-requests, which is used only by
9544 ;; the unused ‘update_psl’ helper command.
9545 (substitute* "setup.py"
9546 (("'requests " match)
9547 (format #f "# ~a" match))))))))
9548 (native-inputs (list python-setuptools))
9549 (home-page "https://github.com/pombredanne/python-publicsuffix2")
9550 (synopsis
9551 "Get a public suffix for a domain name using the Public Suffix List")
9552 (description
9553 "Get a public suffix for a domain name using the Public Suffix List.
9554Forked from and using the same API as the publicsuffix package.")
9555 (license (list license:expat license:mpl2.0))))
9556
9557(define-public python-werkzeug
9558 (package
9559 (name "python-werkzeug")
9560 (version "3.1.8")
9561 (source
9562 (origin
9563 (method git-fetch)
9564 (uri (git-reference
9565 (url "https://github.com/pallets/werkzeug")
9566 (commit version)))
9567 (file-name (git-file-name name version))
9568 (sha256
9569 (base32 "1jwrrjv50n5rcfzax4qf0237znkcpcafd17hx0r77f997yv3ghlv"))))
9570 (build-system pyproject-build-system)
9571 (arguments
9572 (list
9573 #:test-flags
9574 #~(list "-m" "not dev_server")))
9575 (native-inputs
9576 (list python-ephemeral-port-reserve
9577 python-flit-core
9578 python-pytest
9579 python-pytest-timeout
9580 python-watchdog))
9581 (propagated-inputs
9582 (list python-markupsafe))
9583 (home-page "https://palletsprojects.com/p/werkzeug/")
9584 (synopsis "Utilities for WSGI applications")
9585 (description "One of the most advanced WSGI utility modules. It includes a
9586powerful debugger, full-featured request and response objects, HTTP utilities to
9587handle entity tags, cache control headers, HTTP dates, cookie handling, file
9588uploads, a powerful URL routing system and a bunch of community-contributed
9589addon modules.")
9590 (license license:x11)))
9591
9592(define-public python-werkzeug-1.0
9593 (package
9594 (inherit python-werkzeug)
9595 (version "1.0.1")
9596 (source (origin
9597 (method url-fetch)
9598 (uri (pypi-uri "Werkzeug" version))
9599 (sha256
9600 (base32
9601 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
9602 (patches (search-patches "python-werkzeug-tests.patch"))))
9603 (arguments
9604 (list
9605 #:phases
9606 '(modify-phases %standard-phases
9607 (add-after 'unpack 'ignore-warnings
9608 (lambda _
9609 (substitute* "setup.cfg"
9610 ((" error.*") "")))))))
9611 (propagated-inputs
9612 (list python-requests))
9613 (native-inputs
9614 (list python-pytest python-pytest-timeout python-setuptools
9615 python-wheel))))
9616
9617(define-public python-bottle
9618 (package
9619 (name "python-bottle")
9620 (version "0.13.4")
9621 (source
9622 (origin
9623 (method url-fetch)
9624 (uri (pypi-uri "bottle" version))
9625 (sha256
9626 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
9627 (build-system pyproject-build-system)
9628 (native-inputs (list python-pytest python-setuptools))
9629 (home-page "https://bottlepy.org/")
9630 (synopsis "WSGI framework for small web-applications")
9631 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
9632 (license license:expat)))
9633
9634(define-public python-wtforms
9635 (package
9636 (name "python-wtforms")
9637 (version "3.2.2")
9638 (source
9639 (origin
9640 (method url-fetch)
9641 (uri (pypi-uri "wtforms" version))
9642 (sha256
9643 (base32 "14qbayp2gfmahaqn5migwyz2h1cq3gcdr4q2vd75vwvhhqzwf03v"))))
9644 (build-system pyproject-build-system)
9645 (native-inputs
9646 (list python-babel
9647 python-email-validator
9648 python-hatchling
9649 python-pytest
9650 python-setuptools))
9651 (propagated-inputs (list python-markupsafe))
9652 (home-page "https://wtforms.readthedocs.io/")
9653 (synopsis
9654 "Form validation and rendering library for Python web development")
9655 (description
9656 "WTForms is a flexible forms validation and rendering library
9657for Python web development. It is very similar to the web form API
9658available in Django, but is a standalone package.")
9659 (license license:bsd-3)))
9660
9661(define-public python-wtforms-sqlalchemy
9662 (package
9663 (name "python-wtforms-sqlalchemy")
9664 (version "0.4.1")
9665 (source
9666 (origin
9667 (method url-fetch)
9668 (uri (pypi-uri "WTForms-SQLAlchemy" version))
9669 (sha256
9670 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
9671 (build-system pyproject-build-system)
9672 (native-inputs (list python-pytest python-setuptools python-wheel))
9673 (propagated-inputs (list python-sqlalchemy python-wtforms))
9674 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
9675 (synopsis "SQLAlchemy tools for WTForms")
9676 (description
9677 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
9678package from WTForms. The package has been renamed to
9679@code{wtforms_sqlalchemy} but otherwise should function the same as
9680@code{wtforms.ext.sqlalchemy} did.")
9681 (license license:bsd-3)))
9682
9683(define-public python-urlgrabber
9684 (package
9685 (name "python-urlgrabber")
9686 (version "4.1.0")
9687 (source
9688 (origin
9689 (method url-fetch)
9690 (uri (pypi-uri "urlgrabber" version))
9691 (sha256
9692 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
9693 (build-system pyproject-build-system)
9694 (arguments
9695 (list
9696 #:tests? #f ; Most tests require network access.
9697 #:phases
9698 #~(modify-phases %standard-phases
9699 (replace 'check
9700 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
9701 (when tests?
9702 (invoke "python" "test/runtests.py")))))))
9703 (native-inputs (list python-setuptools))
9704 (propagated-inputs
9705 (list python-pycurl python-setuptools python-six))
9706 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
9707 (synopsis "High-level cross protocol url-grabber")
9708 (description
9709 "@code{urlgrabber} is a library that unifies access to files available on
9710the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
9711supports features like HTTP keep-alive, reget, throttling and more.")
9712 (license license:lgpl2.1+)))
9713
9714(define-public python-pycares
9715 (package
9716 (name "python-pycares")
9717 (version "4.11.0")
9718 (source
9719 (origin
9720 (method git-fetch)
9721 (uri (git-reference
9722 (url "https://github.com/saghul/pycares")
9723 (commit (string-append "v" version))))
9724 (file-name (git-file-name name version))
9725 (sha256
9726 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
9727 (snippet #~(begin
9728 (rmdir "deps/c-ares")))))
9729 (build-system pyproject-build-system)
9730 (arguments
9731 (list
9732 ;; XXX: Half of the tests require internet access
9733 ;; There is currently no markers to avoid running them.
9734 #:tests? #f
9735 #:phases
9736 #~(modify-phases %standard-phases
9737 (add-after 'unpack 'configure-system-lib
9738 (lambda _
9739 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
9740 (native-inputs (list python-pytest python-setuptools))
9741 (inputs (list c-ares))
9742 (propagated-inputs (list python-cffi))
9743 (home-page "https://github.com/saghul/pycares")
9744 (synopsis "Python interface for @code{c-ares}")
9745 (description
9746 "@code{pycares} is a Python module which provides an interface to
9747@code{c-ares}, a C library that performs DNS requests and name resolutions
9748asynchronously.")
9749 (license license:expat)))
9750
9751(define-public python-yarl
9752 (package
9753 (name "python-yarl")
9754 (version "1.18.3")
9755 (source
9756 (origin
9757 (method url-fetch)
9758 (uri (pypi-uri "yarl" version))
9759 (sha256
9760 (base32
9761 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
9762 (build-system pyproject-build-system)
9763 (arguments
9764 (list
9765 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
9766 #:phases
9767 '(modify-phases %standard-phases
9768 (add-after 'unpack 'avoid-pytest-cov-preload
9769 (lambda _
9770 (substitute* "pytest.ini"
9771 (("-p pytest_cov") ""))))
9772 (add-after 'unpack 'patch-build-system
9773 (lambda _
9774 ;; XXX: I don't know how to tell it to build the extensions in
9775 ;; place.
9776 (substitute* "packaging/pep517_backend/_backend.py"
9777 (("build_inplace=False") "build_inplace=True")))))))
9778 (native-inputs
9779 (list python-cython
9780 python-expandvars
9781 python-pytest
9782 python-pytest-xdist
9783 python-setuptools
9784 python-tomli))
9785 (propagated-inputs
9786 (list python-packaging python-idna python-multidict python-propcache))
9787 (home-page "https://github.com/aio-libs/yarl/")
9788 (synopsis "Yet another URL library")
9789 (description "@code{yarl} module provides handy @code{URL} class
9790for URL parsing and changing.")
9791 (license license:asl2.0)))
9792
9793(define-public python-canvasapi
9794 (package
9795 (name "python-canvasapi")
9796 (version "3.4.0")
9797 (source (origin
9798 (method git-fetch)
9799 (uri (git-reference
9800 (url "https://github.com/ucfopen/canvasapi")
9801 (commit (string-append "v" version))))
9802 (file-name (git-file-name name version))
9803 (sha256
9804 (base32
9805 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
9806 (build-system pyproject-build-system)
9807 (propagated-inputs (list python-arrow python-pytz python-requests))
9808 (native-inputs (list python-pytest
9809 python-requests-mock
9810 python-setuptools
9811 python-urllib3))
9812 (home-page "https://github.com/ucfopen/canvasapi")
9813 (synopsis "API wrapper for the Canvas LMS")
9814 (description
9815 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
9816The library enables developers to programmatically manage Canvas courses,
9817users, gradebooks, and more.")
9818 (license license:expat)))
9819
9820(define-public python-google
9821 (package
9822 (name "python-google")
9823 (version "3.0.0")
9824 (source
9825 (origin
9826 (method url-fetch)
9827 (uri (pypi-uri "google" version))
9828 (sha256
9829 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
9830 (build-system pyproject-build-system)
9831 (arguments (list #:tests? #f)) ;There are no tests.
9832 (native-inputs (list python-setuptools))
9833 (propagated-inputs (list python-beautifulsoup4))
9834 (home-page "https://breakingcode.wordpress.com/")
9835 (synopsis "Python bindings to the Google search engine")
9836 (description
9837 "This package provides Python bindings for using the Google search
9838engine. Its module is called @code{googlesearch}.")
9839 (license license:bsd-3)))
9840
9841(define-public python-google-api-client
9842 (package
9843 (name "python-google-api-client")
9844 (version "2.198.0")
9845 (source
9846 (origin
9847 (method git-fetch)
9848 (uri (git-reference
9849 (url "https://github.com/google/google-api-python-client")
9850 (commit (string-append "v" version))))
9851 (file-name (git-file-name name version))
9852 (sha256
9853 (base32 "1adjr3ylp8bwbvywxm11hs4y913pvaga0dn6nwmb3622y62zxfhg"))))
9854 (build-system pyproject-build-system)
9855 (arguments
9856 (list
9857 #:test-flags
9858 #~(list
9859 "-k"
9860 (string-join
9861 (list
9862 ;; XXX: Deprecated behavior.
9863 "not test_client_options_universe_configured_with_mtls"
9864 "test_universe_env_var_configured_with_mtls"
9865 ;; XXX: Requires CA certificates.
9866 "test_credentials_and_credentials_file_mutually_exclusive")
9867 " and not ")
9868 "tests")))
9869 (native-inputs
9870 (list python-parameterized
9871 python-pytest
9872 python-setuptools))
9873 (propagated-inputs
9874 (list python-google-api-core
9875 python-google-auth
9876 python-google-auth-httplib2
9877 python-httplib2
9878 python-pyparsing
9879 python-uritemplate-3))
9880 (home-page "https://github.com/google/google-api-python-client")
9881 (synopsis "Core Python library for accessing Google APIs")
9882 (description "Python client library for Google's discovery based APIs")
9883 (license license:asl2.0)))
9884
9885(define-public python-google-auth-httplib2
9886 (package
9887 (name "python-google-auth-httplib2")
9888 (version "0.4.0")
9889 (source (origin
9890 (method url-fetch)
9891 (uri (pypi-uri "google_auth_httplib2" version))
9892 (sha256
9893 (base32 "0dgdzy2ps3z71dc2b4s1fhmyx094nq0sg75sagav995p0ji31c6m"))))
9894 (build-system pyproject-build-system)
9895 (propagated-inputs
9896 (list python-google-auth python-httplib2))
9897 (native-inputs
9898 (list python-pytest
9899 python-pyparsing
9900 python-pytest-localserver
9901 python-flask
9902 python-setuptools))
9903 (home-page "https://github.com/googleapis/google-cloud-python")
9904 (synopsis "Google Authentication Library: httplib2 transport")
9905 (description "This package provides a Google Authentication Library plugin
9906for httplib2 transport.")
9907 (license license:asl2.0)))
9908
9909(define-public python-google-auth-oauthlib
9910 (package
9911 (name "python-google-auth-oauthlib")
9912 (version "1.2.4")
9913 (home-page
9914 "https://github.com/GoogleCloudPlatform/\
9915google-auth-library-python-oauthlib")
9916 (source
9917 (origin
9918 (method git-fetch)
9919 (uri (git-reference
9920 (url home-page)
9921 (commit (string-append "v" version))))
9922 (file-name (git-file-name name version))
9923 (sha256
9924 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
9925 (build-system pyproject-build-system)
9926 (propagated-inputs (list python-google-auth python-requests-oauthlib))
9927 (native-inputs
9928 (list python-click python-mock python-pytest python-setuptools))
9929 (synopsis "Google Authentication Library: oauthlib")
9930 (description "This package provides a Google Authentication Library plugin
9931with oauthlib.")
9932 (license license:asl2.0)))
9933
9934(define-public whoogle-search
9935 (package
9936 (name "whoogle-search")
9937 (version "0.8.4")
9938 (source (origin
9939 (method url-fetch)
9940 (uri (pypi-uri "whoogle-search" version))
9941 (sha256
9942 (base32
9943 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
9944 (build-system pyproject-build-system)
9945 (arguments
9946 (list
9947 ;; The tests need network access
9948 #:tests? #f))
9949 (propagated-inputs
9950 (list python-beautifulsoup4
9951 python-brotli
9952 python-cryptography
9953 python-cssutils
9954 python-defusedxml
9955 python-flask
9956 python-dotenv
9957 python-requests
9958 python-stem
9959 python-validators
9960 python-waitress))
9961 (native-inputs (list python-setuptools python-wheel))
9962 (home-page "https://github.com/benbusby/whoogle-search")
9963 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
9964 (description
9965 "Get Google results, but without any ads, javascript, AMP links,
9966cookies, or IP address tracking. Quick and simple to implement as a primary
9967search engine replacement on both desktop and mobile.")
9968 (license license:expat)))
9969
9970(define-public python-hawkauthlib
9971 (package
9972 (name "python-hawkauthlib")
9973 (version "2.0.0")
9974 (source
9975 (origin
9976 (method git-fetch)
9977 (uri (git-reference
9978 (url "https://github.com/mozilla-services/hawkauthlib")
9979 (commit (string-append "v" version))))
9980 (file-name (git-file-name name version))
9981 (sha256
9982 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
9983 (build-system pyproject-build-system)
9984 (arguments
9985 (list
9986 #:test-backend #~'unittest
9987 #:phases
9988 #~(modify-phases %standard-phases
9989 (add-after 'unpack 'fix-python-incompatibilities
9990 (lambda _
9991 (substitute* (find-files "hawkauthlib/tests" "\\.py$")
9992 (("assertEquals") "assertEqual")))))))
9993 (native-inputs (list python-setuptools))
9994 (propagated-inputs (list python-requests python-webob))
9995 (home-page "https://github.com/mozilla-services/hawkauthlib")
9996 (synopsis "Hawk Access Authentication protocol")
9997 (description
9998 "This is a low-level Python library for implementing Hawk Access
9999Authentication, a simple HTTP request-signing scheme.")
10000 (license license:mpl2.0)))
10001
10002(define-public python-pybrowserid
10003 (package
10004 (name "python-pybrowserid")
10005 (version "0.14.0")
10006 (source
10007 (origin
10008 (method git-fetch)
10009 (uri (git-reference
10010 (url "https://github.com/mozilla/PyBrowserID")
10011 (commit version)))
10012 (file-name (git-file-name name version))
10013 (sha256
10014 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
10015 (build-system pyproject-build-system)
10016 (arguments
10017 (list
10018 #:test-backend #~'unittest
10019 #:phases
10020 #~(modify-phases %standard-phases
10021 (add-after 'unpack 'python-3.12-compatibility
10022 (lambda _
10023 (substitute* (find-files "browserid/tests" "\\.py")
10024 (("assertEquals") "assertEqual")))))))
10025 (propagated-inputs (list python-requests))
10026 (native-inputs (list python-mock python-setuptools))
10027 (home-page "https://github.com/mozilla/PyBrowserID")
10028 (synopsis "Python library for the BrowserID protocol")
10029 (description
10030 "This is a Python client library for the BrowserID protocol that
10031underlies Mozilla Persona.")
10032 (license license:mpl2.0)))
10033
10034(define-public python-pyfxa
10035 (package
10036 (name "python-pyfxa")
10037 (version "0.8.1")
10038 (source
10039 (origin
10040 (method git-fetch)
10041 (uri (git-reference
10042 (url "https://github.com/mozilla/PyFxA")
10043 (commit (string-append "v" version))))
10044 (file-name (git-file-name name version))
10045 (sha256
10046 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
10047 (build-system pyproject-build-system)
10048 (arguments
10049 (list
10050 ;; These tests require network access
10051 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
10052 (propagated-inputs
10053 (list python-cryptography
10054 python-pyjwt
10055 python-parameterized
10056 python-hawkauthlib
10057 python-requests))
10058 (native-inputs
10059 (list python-grequests
10060 python-hatchling
10061 python-mock
10062 python-pytest
10063 python-responses))
10064 (home-page "https://github.com/mozilla/PyFxA")
10065 (synopsis "Firefox Accounts client library for Python")
10066 (description
10067 "This is a Python library for interacting with the Firefox Accounts
10068ecosystem.")
10069 (license license:mpl2.0)))
10070
10071(define-public python-hyperlink
10072 (package
10073 (name "python-hyperlink")
10074 (version "21.0.0")
10075 (source
10076 (origin
10077 (method url-fetch)
10078 (uri (pypi-uri "hyperlink" version))
10079 (sha256
10080 (base32
10081 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
10082 (build-system pyproject-build-system)
10083 (arguments
10084 (list #:phases
10085 #~(modify-phases %standard-phases
10086 (add-before 'check 'pretend-to-be-CI
10087 (lambda _
10088 ;; Pretend to be a CI system to skip flaky tests.
10089 (setenv "CI" "true"))))))
10090 (native-inputs
10091 (list python-pytest python-setuptools python-wheel))
10092 (propagated-inputs
10093 (list python-idna))
10094 (home-page "https://github.com/python-hyper/hyperlink")
10095 (synopsis "Python module to create immutable URLs according to spec")
10096 (description "This package provides a Python module to create immutable, and
10097correct URLs for Python according to RFCs 3986 and 3987.")
10098 (license license:expat)))
10099
10100(define-public python-treq
10101 (package
10102 (name "python-treq")
10103 (version "24.9.1")
10104 (source
10105 (origin
10106 (method url-fetch)
10107 (uri (pypi-uri "treq" version))
10108 (sha256
10109 (base32
10110 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
10111 (build-system pyproject-build-system)
10112 (native-inputs
10113 (list python-httpbin
10114 python-pytest
10115 python-service-identity
10116 python-setuptools
10117 python-wheel))
10118 (propagated-inputs
10119 (list python-attrs
10120 python-hyperlink
10121 python-incremental
10122 python-requests
10123 python-twisted
10124 python-typing-extensions))
10125 (home-page "https://github.com/twisted/treq")
10126 (synopsis "Requests-like API built on top of twisted.web's Agent")
10127 (description "This package provides an HTTP library inspired by
10128@code{requests} but written on top of Twisted's @code{Agents}. It offers a
10129high level API for making HTTP requests when using Twisted.")
10130 (license license:expat)))
10131
10132(define-public python-autobahn
10133 (package
10134 (name "python-autobahn")
10135 (version "25.11.1")
10136 (source
10137 (origin
10138 (method url-fetch)
10139 (uri (pypi-uri "autobahn" version))
10140 (sha256
10141 (base32
10142 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
10143 (build-system pyproject-build-system)
10144 (arguments
10145 (list
10146 ;; The tests fail to run:
10147 ;; https://github.com/crossbario/autobahn-python/issues/1117
10148 #:tests? #f
10149 #:phases #~(modify-phases %standard-phases
10150 (add-after 'unpack 'relax-zope-interface
10151 (lambda _
10152 ;; python-zope-interface is a world rebuild package
10153 ;; and our one-digit lower minor version seems to be
10154 ;; fine.
10155 (substitute* "setup.py"
10156 (("zope.interface>=5.2.0")
10157 "zope.interface>=5.1.0"))))
10158 (add-after 'unpack 'strip-xbr
10159 (lambda _
10160 ;; Strip new XBR feature which isn't available in Guix.
10161 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
10162 (native-inputs (list python-setuptools python-wheel))
10163 (propagated-inputs (list python-cbor2
10164 python-cryptography
10165 python-hyperlink
10166 python-msgpack
10167 python-py-ubjson
10168 python-twisted
10169 python-txaio
10170 python-ujson))
10171 (home-page "https://github.com/crossbario/autobahn-python/")
10172 (synopsis "Web Application Messaging Protocol implementation")
10173 (description "This package provides an implementation of the @dfn{Web Application
10174Messaging Protocol} (WAMP). WAMP connects components in distributed
10175applications using Publish and Subscribe (PubSub) and routed Remote Procedure
10176Calls (rRPC). It is ideal for distributed, multi-client and server applications
10177such as IoT applications or multi-user database-driven business applications.")
10178 (license license:expat)))
10179
10180(define-public python-ws4py
10181 (package
10182 (name "python-ws4py")
10183 (version "0.6.0")
10184 (source
10185 (origin
10186 (method git-fetch)
10187 (uri (git-reference
10188 (url "https://github.com/Lawouach/WebSocket-for-Python")
10189 (commit version)))
10190 (file-name (git-file-name name version))
10191 (sha256
10192 (base32
10193 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
10194 (build-system pyproject-build-system)
10195 (arguments
10196 (list
10197 #:phases
10198 #~(modify-phases %standard-phases
10199 (add-after 'unpack 'remove-cherrypy-support
10200 (lambda _
10201 (delete-file "ws4py/server/cherrypyserver.py")
10202 (delete-file "test/test_cherrypy.py"))))))
10203 (native-inputs (list python-setuptools python-pytest))
10204 (propagated-inputs
10205 (list python-gevent python-tornado))
10206 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
10207 (synopsis "WebSocket client and server library")
10208 (description
10209 "This package provides a WebSocket client and server library for Python.")
10210 (license license:bsd-3)))
10211
10212(define-public python-slowapi
10213 (package
10214 (name "python-slowapi")
10215 (version "0.1.9")
10216 (source
10217 (origin
10218 (method git-fetch)
10219 (uri (git-reference
10220 (url "https://github.com/laurents/slowapi")
10221 (commit (string-append "v" version))))
10222 (file-name (git-file-name name version))
10223 (sha256
10224 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
10225 (build-system pyproject-build-system)
10226 (arguments
10227 (list
10228 #:test-flags
10229 ;; These tests fail because the timestamp contains more decimal points
10230 ;; than expected, so a simple equality comparison fails.
10231 '(list "-k" (string-append "not test_headers_no_breach"
10232 " and not test_headers_breach"))))
10233 (propagated-inputs (list python-limits python-redis))
10234 (native-inputs
10235 (list python-fastapi
10236 python-hiro
10237 python-mock
10238 python-poetry-core
10239 python-pytest))
10240 (home-page "https://github.com/laurents/slowapi")
10241 (synopsis "Rate limiting extension for Starlette and Fastapi")
10242 (description
10243 "This package provides a rate limiting extension for Starlette and
10244Fastapi.")
10245 (license license:expat)))
10246
10247(define-public python-slugify
10248 (package
10249 (name "python-slugify")
10250 (version "8.0.4")
10251 (source
10252 (origin
10253 (method git-fetch)
10254 (uri (git-reference
10255 (url "https://github.com/un33k/python-slugify")
10256 (commit (string-append "v" version))))
10257 (file-name (git-file-name name version))
10258 (sha256
10259 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
10260 (build-system pyproject-build-system)
10261 (arguments (list #:test-backend #~'unittest))
10262 (native-inputs (list python-setuptools))
10263 (propagated-inputs (list python-unidecode python-text-unidecode))
10264 (home-page "https://github.com/un33k/python-slugify")
10265 (synopsis "Python Slugify application that handles Unicode")
10266 (description "This package provides a @command{slufigy} command and
10267library to create slugs from unicode strings while keeping it DRY.")
10268 (license license:expat)))
10269
10270(define-public python-branca
10271 (package
10272 (name "python-branca")
10273 (version "0.7.2")
10274 (source
10275 (origin
10276 (method git-fetch) ; no tests in PyPI
10277 (uri (git-reference
10278 (url "https://github.com/python-visualization/branca")
10279 (commit (string-append "v" version))))
10280 (file-name (git-file-name name version))
10281 (sha256
10282 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
10283 (build-system pyproject-build-system)
10284 (arguments
10285 ;; This file requires Selenium.
10286 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
10287 ;; This test passes but is very slow.
10288 "-k" "not test_color_brewer_extendability")))
10289 (propagated-inputs (list python-jinja2))
10290 (native-inputs
10291 (list python-numpy
10292 python-pytest
10293 python-setuptools
10294 python-setuptools-scm
10295 python-wheel))
10296 (home-page "https://github.com/python-visualization/branca")
10297 (synopsis "Generate complex HTML+JS pages with Python")
10298 (description "This library is a spinoff from @code{folium} that would host
10299the non-map-specific features. It can be used to generate HTML + JS.")
10300 (license license:expat)))
10301
10302(define-public python-tinycss2
10303 (package
10304 (name "python-tinycss2")
10305 (version "1.5.1")
10306 (source
10307 (origin
10308 (method git-fetch)
10309 (uri (git-reference
10310 (url "https://github.com/Kozea/tinycss2")
10311 (commit (string-append "v" version))
10312 (recursive? #true)))
10313 (file-name (git-file-name name version))
10314 (sha256
10315 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
10316 (build-system pyproject-build-system)
10317 (native-inputs
10318 (list python-flit-core
10319 python-pytest))
10320 (propagated-inputs
10321 (list python-webencodings))
10322 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
10323 (synopsis "Low-level CSS parser for Python")
10324 (description "@code{tinycss2} can parse strings, return Python objects
10325representing tokens and blocks, and generate CSS strings corresponding to
10326these objects.
10327
10328Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
10329grammar of CSS but doesn’t know specific rules, properties or values supported
10330in various CSS modules.")
10331 (license license:bsd-3)))
10332
10333(define-public python-tinyhtml5
10334 (package
10335 (name "python-tinyhtml5")
10336 (version "2.1.0")
10337 (source
10338 (origin
10339 (method git-fetch)
10340 (uri (git-reference
10341 (url "https://github.com/CourtBouillon/tinyhtml5")
10342 (commit version)))
10343 (file-name (git-file-name name version))
10344 (sha256
10345 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
10346 (build-system pyproject-build-system)
10347 (propagated-inputs
10348 (list python-webencodings))
10349 (native-inputs
10350 (list python-flit-core
10351 python-pytest))
10352 (home-page "https://github.com/CourtBouillon/tinyhtml5")
10353 (synopsis "Small HTML parser based on the WHATWG HTML specification")
10354 (description "This Python module is a HTML5 parser that transforms a
10355possibly malformed HTML document into an ElementTree tree. This module is a
10356simplified fork of html5lib.")
10357 (license license:expat)))
10358
10359(define-public python-cssselect2
10360 (package
10361 (name "python-cssselect2")
10362 (version "0.9.0")
10363 (source
10364 (origin
10365 (method git-fetch)
10366 (uri (git-reference
10367 (url "https://github.com/Kozea/cssselect2")
10368 (commit version)))
10369 (file-name (git-file-name name version))
10370 (sha256
10371 (base32 "1drvb83siq9s6dygyhab6kzk2v2ib6cv51ls42p4jrxs9q8cdiw0"))))
10372 (build-system pyproject-build-system)
10373 (propagated-inputs
10374 (list python-tinycss2))
10375 (native-inputs
10376 (list python-flit-core
10377 python-pytest))
10378 (home-page "https://doc.courtbouillon.org/cssselect2/stable/")
10379 (synopsis "CSS selectors for Python ElementTree")
10380 (description "@code{cssselect2} is a straightforward implementation of
10381CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
10382ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
10383
10384Unlike the Python package @code{cssselect}, it does not translate selectors to
10385XPath and therefore does not have all the correctness corner cases that are
10386hard or impossible to fix in cssselect.")
10387 (license license:bsd-3)))
10388
10389(define-public python-uvloop
10390 (package
10391 (name "python-uvloop")
10392 (version "0.22.1")
10393 (source
10394 (origin
10395 (method git-fetch)
10396 (uri (git-reference
10397 (url "https://github.com/MagicStack/uvloop")
10398 (commit (string-append "v" version))))
10399 (file-name (git-file-name name version))
10400 (sha256
10401 (base32 "1qbykwwz4ac3f7472g22z4i5rrd5kcr8hmxn5kswmja57j1nxlpl"))
10402 (modules '((guix build utils)))
10403 (snippet
10404 '(begin
10405 (delete-file-recursively "vendor")))))
10406 (build-system pyproject-build-system)
10407 (arguments
10408 (list
10409 ;; tests: 470 passed, 32 skipped, 8 deselected, 5 warnings, 104 subtests passed
10410 #:test-flags
10411 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
10412 ;; to get a meaningful idea about where.
10413 #~(list "--timeout=300"
10414 "--timeout-method=thread"
10415 "-k" (string-join
10416 (list
10417 ;; Timeout, because SIGINT cannot be sent to child.
10418 "not test_signals_sigint_pycode_continue"
10419 "test_signals_sigint_pycode_stop"
10420 "test_signals_sigint_uvcode"
10421 "test_signals_sigint_uvcode_two_loop_runs"
10422 #$@(if (target-riscv64?)
10423 `("test_renegotiation")
10424 `()))
10425 " and not "))
10426 #:phases
10427 #~(modify-phases %standard-phases
10428 (add-after 'unpack 'preparations
10429 (lambda _
10430 ;; Use packaged libuv.
10431 (substitute* "setup.py" (("self.use_system_libuv = False")
10432 "self.use_system_libuv = True"))
10433 ;; Replace hardcoded shell command.
10434 (substitute* "uvloop/loop.pyx"
10435 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))
10436 (substitute* "tests/test_process.py"
10437 (("'env'") (string-append "'" (which "env") "'")))))
10438 #$@(if (target-riscv64?)
10439 `((add-after 'unpack 'adjust-test-timeouts
10440 (lambda _
10441 (substitute* '("tests/test_tcp.py"
10442 "tests/test_unix.py")
10443 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
10444 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
10445 '())
10446 (add-before 'check 'pre-check
10447 (lambda* (#:key tests? #:allow-other-keys)
10448 (when tests?
10449 ;; Remove Python module, which conflicts with the installed
10450 ;; version, but lacks the built C module.
10451 (delete-file-recursively "uvloop")))))))
10452 (native-inputs
10453 (list python-aiohttp
10454 python-cython
10455 python-psutil
10456 python-pyopenssl
10457 python-pytest
10458 python-pytest-timeout
10459 python-setuptools))
10460 (inputs
10461 (list libuv))
10462 (home-page "https://github.com/MagicStack/uvloop")
10463 (synopsis "Fast implementation of asyncio event loop on top of libuv")
10464 (description
10465 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
10466event loop. It is implemented in Cython and uses libuv under the hood.")
10467 (license license:expat)))
10468
10469(define-public gunicorn
10470 (package
10471 (name "gunicorn")
10472 (version "25.3.0")
10473 (source
10474 (origin
10475 (method url-fetch)
10476 (uri (pypi-uri "gunicorn" version))
10477 (sha256
10478 (base32
10479 "12g85w735s4dszjfidi4vh786rfxsa5rd60il0fcvxknkwpinkpp"))))
10480 (outputs '("out" "doc"))
10481 (build-system pyproject-build-system)
10482 (arguments
10483 `(#:test-flags
10484 ;; Disable the geventlet tests because eventlet uses dnspython, which
10485 ;; does not work in the build container due to lack of /etc/resolv.conf
10486 '("--ignore=tests/workers/test_geventlet.py")
10487 #:phases (modify-phases %standard-phases
10488 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
10489 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
10490 ;; size. Override it to only add the essential entries.
10491 (replace 'wrap
10492 (lambda* (#:key native-inputs inputs outputs
10493 #:allow-other-keys)
10494 (let* ((out (assoc-ref outputs "out"))
10495 (python (assoc-ref (or native-inputs inputs)
10496 "python"))
10497 (sitedir (string-append "/lib/python"
10498 (python-version python)
10499 "/site-packages")))
10500 (wrap-program (string-append out "/bin/gunicorn")
10501 `("PYTHONPATH" ":" prefix
10502 ,(map (lambda (output)
10503 (string-append output sitedir))
10504 (list python out))))))))))
10505 (inputs (list bash-minimal))
10506 (native-inputs
10507 (list binutils ;for ctypes.util.find_library()
10508 python-eventlet
10509 python-gevent
10510 python-h2
10511 python-httpx
10512 python-pytest
10513 python-pytest-asyncio
10514 python-setuptools
10515 python-uvloop))
10516 (propagated-inputs
10517 (list python-packaging
10518 python-setuptools
10519 python-wheel))
10520 (home-page "https://gunicorn.org/")
10521 (synopsis "Python WSGI HTTP Server for UNIX")
10522 (description
10523 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
10524Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
10525Unicorn project. The Gunicorn server is broadly compatible with
10526various web frameworks, simply implemented, light on server resources,
10527and fairly speedy.")
10528 (license license:expat)))
10529
10530;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
10531;; its tests
10532(define-public gunicorn-bootstrap
10533 (package
10534 (inherit gunicorn)
10535 (name "gunicorn")
10536 (arguments `(#:tests? #f))
10537 (properties '((hidden? . #t)))
10538 (native-inputs `())))
10539
10540(define-public python-httptools
10541 (package
10542 (name "python-httptools")
10543 (version "0.7.1")
10544 (source
10545 (origin
10546 ;; PyPI tarball comes with a vendored http-parser and no tests.
10547 (method git-fetch)
10548 (uri (git-reference
10549 (url "https://github.com/MagicStack/httptools")
10550 (commit (string-append "v" version))))
10551 (file-name (git-file-name name version))
10552 (sha256
10553 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
10554 (modules '((guix build utils)))
10555 (snippet
10556 #~(begin (delete-file-recursively "vendor")))))
10557 (build-system pyproject-build-system)
10558 (arguments
10559 (list
10560 #:test-flags
10561 ;; XXX: AssertionError: HttpParserError not raised.
10562 #~(list "-k" "not test_parser_response_leninent_headers_1")
10563 #:phases
10564 #~(modify-phases %standard-phases
10565 (add-after 'unpack 'configure-build-ext
10566 (lambda _
10567 (with-output-to-file "setup.cfg"
10568 (lambda ()
10569 (display "\
10570[build_ext]
10571use_system_llhttp = true
10572use_system_http_parser = true
10573cython_always = true"))))))))
10574 (native-inputs
10575 (list python-cython
10576 python-pytest
10577 python-setuptools))
10578 (inputs
10579 (list http-parser
10580 llhttp))
10581 (home-page "https://github.com/MagicStack/httptools")
10582 (synopsis "Collection of framework independent HTTP protocol utils")
10583 (description
10584 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
10585 (license license:expat)))
10586
10587(define-public python-uvicorn
10588 (package
10589 (name "python-uvicorn")
10590 ;; 0.49.0 (2026-06-03), release does not work with python-websockets 16.0,
10591 ;; see: <https://github.com/Kludex/uvicorn/pull/2985>.
10592 (properties '((commit . "e8a31bca03254b8457c4c89596e310282cc33edc")
10593 (revision . "0")))
10594 (version (git-version "0.49.0"
10595 (assoc-ref properties 'revision)
10596 (assoc-ref properties 'commit)))
10597 (source
10598 (origin
10599 (method git-fetch)
10600 (uri (git-reference
10601 (url "https://github.com/encode/uvicorn")
10602 (commit (assoc-ref properties 'commit))))
10603 (file-name (git-file-name name version))
10604 (sha256
10605 (base32 "1vd1680a1k3jcdgc3jd5p3a6zmhz4r8bgzb7v7zhpxrkkdsisrxj"))))
10606 (build-system pyproject-build-system)
10607 (arguments
10608 (list
10609 #:test-flags
10610 #~(list "--ignore=tests/benchmarks"
10611 #$@(cond
10612 ((or (target-aarch64?)
10613 (target-riscv64?))
10614 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
10615 (#t '())))))
10616 (native-inputs
10617 (list nss-certs-for-test
10618 python-a2wsgi
10619 python-hatchling
10620 python-httpx-bootstrap
10621 python-pytest
10622 python-pytest-asyncio
10623 python-pytest-mock
10624 python-pytest-xdist
10625 python-requests
10626 python-trustme
10627 python-wsproto))
10628 (propagated-inputs
10629 (list python-a2wsgi
10630 python-click
10631 python-dotenv
10632 python-h11
10633 python-httptools
10634 python-pyyaml
10635 python-uvloop
10636 python-watchfiles
10637 python-websockets))
10638 (home-page "https://github.com/encode/uvicorn")
10639 (synopsis "Fast ASGI server implementation")
10640 (description
10641 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
10642and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
10643for HTTP/2 is planned.")
10644 (license license:bsd-3)))
10645
10646(define-public python-translation-finder
10647 (package
10648 (name "python-translation-finder")
10649 (version "2.22")
10650 (source
10651 (origin
10652 (method url-fetch)
10653 (uri (pypi-uri "translation_finder" version))
10654 (sha256
10655 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
10656 (build-system pyproject-build-system)
10657 (arguments
10658 (list
10659 #:test-flags
10660 ;; AssertionError: 31 != 30 : Mismatched count of results
10661 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
10662 (native-inputs
10663 (list python-pytest
10664 python-setuptools))
10665 (propagated-inputs
10666 (list python-charset-normalizer
10667 python-ruamel.yaml
10668 python-weblate-language-data))
10669 (home-page "https://weblate.org/")
10670 (synopsis "Translation file finder for Weblate")
10671 (description "This package provides a function to find translation file in
10672the source code of a project. It supports many translation file formats and
10673is part of the Weblate translation platform.")
10674 (license license:gpl3+)))
10675
10676(define-public python-gitlab
10677 (package
10678 (name "python-gitlab")
10679 (version "7.0.0")
10680 (source
10681 (origin
10682 (method git-fetch)
10683 (uri (git-reference
10684 (url "https://github.com/python-gitlab/python-gitlab")
10685 (commit (string-append "v" version))))
10686 (file-name (git-file-name name version))
10687 (sha256
10688 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
10689 (build-system pyproject-build-system)
10690 (arguments
10691 (list
10692 #:test-flags
10693 #~(list "--ignore=tests/unit/test_graphql.py"
10694 ;; XXX: Missing helper script.
10695 "-k" "not test_data_from_helper" "tests/unit")))
10696 (native-inputs
10697 (list python-anyio
10698 python-pytest
10699 python-responses
10700 python-setuptools))
10701 (propagated-inputs (list python-requests python-requests-toolbelt))
10702 (home-page "https://github.com/python-gitlab/python-gitlab")
10703 (synopsis "Interact with GitLab API")
10704 (description "This package provides an extended library for interacting
10705with GitLab instances through their API.")
10706 (license license:lgpl3+)))
10707
10708(define-public python-path-and-address
10709 (package
10710 (name "python-path-and-address")
10711 (version "2.0.1")
10712 (source
10713 (origin
10714 (method git-fetch)
10715 (uri (git-reference
10716 (url "https://github.com/joeyespo/path-and-address")
10717 (commit (string-append "v" version))))
10718 (file-name (git-file-name name version))
10719 (sha256
10720 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
10721 (build-system pyproject-build-system)
10722 (native-inputs
10723 (list python-pytest python-setuptools))
10724 (home-page "https://github.com/joeyespo/path-and-address")
10725 (synopsis "Functions for command-line server tools used by humans")
10726 (description "Path-and-address resolves ambiguities of command-line
10727interfaces, inferring which argument is the path, and which is the address.")
10728 (license license:expat)))
10729
10730;; XXX: This project missed maintainer upstream, see
10731;; <https://github.com/joeyespo/grip/issues/387>.
10732;; Consider to remove if it keeps failing to build.
10733(define-public grip
10734 (package
10735 (name "grip")
10736 (version "4.6.1")
10737 (source
10738 (origin
10739 (method git-fetch)
10740 (uri (git-reference
10741 (url "https://github.com/joeyespo/grip")
10742 (commit (string-append "v" version))))
10743 (file-name (git-file-name name version))
10744 (sha256
10745 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
10746 (build-system pyproject-build-system)
10747 (arguments
10748 (list
10749 #:test-flags
10750 ;; All tests fail requiring network access, ignore the whole file.
10751 #~(list "--ignore=tests/test_github.py")
10752 #:phases
10753 #~(modify-phases %standard-phases
10754 ;; This fixes the removal of `charset` attribute of requests from
10755 ;; Werkzeug 2.3.0.
10756 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
10757 (add-after 'unpack 'fix-response-encoding
10758 (lambda _
10759 (substitute* "grip/app.py"
10760 (("response.charset")
10761 "getattr(response, 'charset', 'utf-8')")))))))
10762 (native-inputs
10763 (list nss-certs-for-test
10764 python-pytest
10765 python-responses
10766 python-setuptools
10767 python-wheel))
10768 (propagated-inputs
10769 (list python-docopt
10770 python-flask
10771 python-markdown
10772 python-path-and-address
10773 python-pygments
10774 python-requests))
10775 (home-page "https://github.com/joeyespo/grip")
10776 (synopsis "Preview Markdown files using the GitHub API")
10777 (description
10778 "Grip is a command-line server application written in Python that uses
10779the GitHub Markdown API to render a local Markdown file. The styles and
10780rendering come directly from GitHub, so you'll know exactly how it will
10781appear. Changes you make to the file will be instantly reflected in the
10782browser without requiring a page refresh.")
10783 (license license:expat)))
10784
10785(define-public python-port-for
10786 (package
10787 (name "python-port-for")
10788 (version "0.7.4")
10789 (source
10790 (origin
10791 (method url-fetch)
10792 (uri (pypi-uri "port_for" version))
10793 (sha256
10794 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
10795 (build-system pyproject-build-system)
10796 (propagated-inputs
10797 (list python-urllib3))
10798 (native-inputs
10799 (list python-pytest python-setuptools python-wheel))
10800 (home-page "https://github.com/kmike/port-for/")
10801 (synopsis "TCP localhost port finder and association manager")
10802 (description
10803 "This package provides a utility that helps with local TCP ports
10804management. It can find an unused TCP localhost port and remember the
10805association.")
10806 (license license:expat)))
10807
10808(define-public python-livereload
10809 (package
10810 (name "python-livereload")
10811 (version "2.7.1")
10812 (source
10813 (origin
10814 (method git-fetch)
10815 (uri (git-reference
10816 (url "https://github.com/lepture/python-livereload")
10817 (commit (string-append "v" version))))
10818 (file-name (git-file-name name version))
10819 (sha256
10820 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
10821 (build-system pyproject-build-system)
10822 (arguments (list #:test-backend #~'unittest))
10823 (native-inputs (list python-django python-setuptools))
10824 (propagated-inputs (list python-tornado))
10825 (home-page "https://github.com/lepture/python-livereload")
10826 (synopsis "Python LiveReload")
10827 (description
10828 "Python LiveReload provides a command line utility, @command{livereload},
10829for starting a web server in a directory. It can trigger arbitrary commands
10830and serve updated contents upon changes to the directory.")
10831 (license license:bsd-3)))
10832
10833(define-public python-vf-1
10834 (package
10835 (name "python-vf-1")
10836 (version "1.0.0")
10837 (source
10838 (origin
10839 (method git-fetch)
10840 (uri (git-reference
10841 (url "https://git.sr.ht/~solderpunk/VF-1")
10842 (commit (string-append "v" version))))
10843 (file-name (git-file-name name version))
10844 (sha256
10845 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
10846 (build-system pyproject-build-system)
10847 (arguments (list #:tests? #f)) ; No tests.
10848 (native-inputs (list python-setuptools))
10849 (home-page "https://git.sr.ht/~solderpunk/VF-1")
10850 (synopsis "Command line gopher client")
10851 (description "@code{VF-1} is a command line gopher client with
10852@acronym{TLS, Transport Layer Security} support.")
10853 (license license:bsd-2)))
10854
10855(define-public python-httpcore
10856 (package
10857 (name "python-httpcore")
10858 (version "1.0.9")
10859 (source
10860 (origin
10861 ;; PyPI tarball does not contain tests.
10862 (method git-fetch)
10863 (uri (git-reference
10864 (url "https://github.com/encode/httpcore")
10865 (commit version)))
10866 (file-name (git-file-name name version))
10867 (sha256
10868 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
10869 (build-system pyproject-build-system)
10870 (native-inputs
10871 (list nss-certs-for-test
10872 python-hatch-fancy-pypi-readme
10873 python-hatchling
10874 python-pytest
10875 python-pytest-asyncio
10876 python-pytest-httpbin
10877 python-pytest-trio
10878 python-uvicorn
10879 python-trustme))
10880 (propagated-inputs
10881 (list python-anyio
10882 python-certifi
10883 python-h11
10884 python-h2
10885 python-sniffio
10886 python-socksio
10887 python-trio
10888 python-trio-typing))
10889 (home-page "https://github.com/encode/httpcore")
10890 (synopsis "Minimal, low-level HTTP client")
10891 (description
10892 "HTTP Core provides a minimal and low-level HTTP client, which does one
10893thing only: send HTTP requests.
10894
10895Some things HTTP Core does do:
10896
10897@itemize
10898@item Sending HTTP requests.
10899@item Provides both sync and async interfaces.
10900@item Supports HTTP/1.1 and HTTP/2.
10901@item Async backend support for asyncio and trio.
10902@item Automatic connection pooling.
10903@item HTTP(S) proxy support.
10904@end itemize")
10905 (license license:bsd-3)))
10906
10907;;; Variant used to break a cycle between python-httpx and python-uvicorn.
10908(define-public python-httpcore-bootstrap
10909 (hidden-package
10910 (package/inherit python-httpcore
10911 (name "python-httpcore-bootstrap")
10912 (arguments (list #:tests? #f))
10913 (native-inputs (list python-hatchling
10914 python-hatch-fancy-pypi-readme)))))
10915
10916(define-public python-httpx
10917 (package
10918 (name "python-httpx")
10919 (version "0.28.1")
10920 (source
10921 (origin
10922 ;; PyPI tarball does not contain tests.
10923 (method git-fetch)
10924 (uri (git-reference
10925 (url "https://github.com/encode/httpx")
10926 (commit version)))
10927 (file-name (git-file-name name version))
10928 (sha256
10929 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
10930 (build-system pyproject-build-system)
10931 (arguments
10932 (list
10933 ;; 1401 passed, 1 skipped, 5 deselected
10934 #:test-flags
10935 #~(list "-o" "asyncio_mode=auto"
10936 ;; CLI tests are broken.
10937 "--ignore=tests/test_main.py"
10938 "-k" (string-join
10939 ;; These tests try to open an outgoing connection.
10940 (list "not test_async_proxy_close"
10941 "test_sync_proxy_clos"
10942 "test_write_timeout")
10943 " and not "))))
10944 (native-inputs
10945 (list nss-certs-for-test
10946 python-chardet
10947 python-cryptography
10948 python-hatch-fancy-pypi-readme
10949 python-hatchling
10950 python-pytest
10951 python-pytest-asyncio
10952 python-pytest-trio
10953 python-setuptools
10954 python-trio
10955 python-trustme
10956 python-uvicorn))
10957 (propagated-inputs
10958 (list python-anyio
10959 python-certifi
10960 python-httpcore
10961 python-idna
10962 ;; [brotli]
10963 python-brotli
10964 ;; [http2]
10965 python-h2
10966 ;; [socks]
10967 python-socksio
10968 ;; [zstd]
10969 python-zstandard
10970 ;; For trio, see:
10971 ;; <https://github.com/python-trio/trio/issues/2802>.
10972 python-sniffio))
10973 (home-page "https://www.python-httpx.org/")
10974 (synopsis "HTTP client for Python")
10975 (description
10976 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
10977and async APIs, and support for both HTTP/1.1 and HTTP/2.
10978
10979HTTPX builds on the well-established usability of requests, and gives you:
10980
10981@itemize
10982@item A broadly requests-compatible API.
10983@item Standard synchronous interface, but with async support if you need it.
10984@item HTTP/1.1 and HTTP/2 support.
10985@item Ability to make requests directly to WSGI applications or ASGI applications.
10986@item Strict timeouts everywhere.
10987@item Fully type annotated.
10988@item 99% test coverage.
10989@end itemize
10990
10991Plus all the standard features of requests:
10992
10993@itemize
10994@item International Domains and URLs
10995@item Keep-Alive & Connection Pooling
10996@item Sessions with Cookie Persistence
10997@item Browser-style SSL Verification
10998@item Basic/Digest Authentication
10999@item Elegant Key/Value Cookies
11000@item Automatic Decompression
11001@item Automatic Content Decoding
11002@item Unicode Response Bodies
11003@item Multipart File Uploads
11004@item HTTP(S) Proxy Support
11005@item Connection Timeouts
11006@item Streaming Downloads
11007@item .netrc Support
11008@item Chunked Requests
11009@end itemize")
11010 (license license:bsd-3)))
11011
11012;;; Variant used to break a cycle with python-uvicorn.
11013(define-public python-httpx-bootstrap
11014 (hidden-package
11015 (package/inherit python-httpx
11016 (name "python-httpx-bootstrap")
11017 (arguments (list #:tests? #f))
11018 (native-inputs
11019 (list python-hatchling
11020 python-hatch-fancy-pypi-readme))
11021 (propagated-inputs
11022 (modify-inputs propagated-inputs
11023 (replace "python-httpcore" python-httpcore-bootstrap))))))
11024
11025(define-public python-httpx-sse
11026 (package
11027 (name "python-httpx-sse")
11028 (version "0.4.3")
11029 (source
11030 (origin
11031 (method git-fetch)
11032 (uri (git-reference
11033 (url "https://github.com/florimondmanca/httpx-sse")
11034 (commit version)))
11035 (file-name (git-file-name name version))
11036 (sha256
11037 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
11038 (build-system pyproject-build-system)
11039 (native-inputs
11040 (list python-pytest
11041 python-pytest-asyncio
11042 python-setuptools
11043 python-setuptools-scm
11044 python-sse-starlette))
11045 (propagated-inputs (list python-httpx))
11046 (home-page "https://github.com/florimondmanca/httpx-sse")
11047 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
11048 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
11049 (license license:expat)))
11050
11051(define-public python-httpx-ws
11052 (package
11053 (name "python-httpx-ws")
11054 (version "0.9.0")
11055 (source
11056 (origin
11057 (method git-fetch)
11058 (uri (git-reference
11059 (url "https://github.com/frankie567/httpx-ws")
11060 (commit (string-append "v" version))))
11061 (file-name (git-file-name name version))
11062 (sha256
11063 (base32 "1hin6fndvfnx3mjgy30x0ghgjalikxavyj24klcknnly9sqzg83v"))))
11064 (build-system pyproject-build-system)
11065 (propagated-inputs
11066 (list python-anyio
11067 python-httpcore
11068 python-httpx
11069 python-wsproto))
11070 (native-inputs
11071 (list nss-certs-for-test
11072 python-hatch-regex-commit
11073 python-hatchling
11074 python-pytest
11075 python-pytest-cov
11076 python-starlette
11077 python-uvicorn))
11078 (home-page "https://github.com/frankie567/httpx-ws")
11079 (synopsis "WebSockets support for HTTPX")
11080 (description "This package provides @code{WebSockets} support for HTTPX.")
11081 (license license:expat)))
11082
11083(define-public python-wsgiprox
11084 (package
11085 (name "python-wsgiprox")
11086 (version "1.5.2")
11087 (source
11088 (origin
11089 (method url-fetch)
11090 (uri (pypi-uri "wsgiprox" version))
11091 (sha256
11092 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
11093 (build-system pyproject-build-system)
11094 (arguments
11095 ;; The test suite hangs (see:
11096 ;; https://github.com/webrecorder/wsgiprox/issues/6).
11097 (list
11098 #:tests? #f
11099 #:phases
11100 #~(modify-phases %standard-phases
11101 (add-after 'unpack 'fix-pytest-argument
11102 (lambda _
11103 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
11104 (substitute* "setup.py"
11105 (("--doctest-module")
11106 "--doctest-modules")))))))
11107 (propagated-inputs
11108 (list python-certauth
11109 python-gevent
11110 python-six
11111 python-websocket-client))
11112 (native-inputs
11113 (list python-mock python-waitress python-setuptools))
11114 (home-page "https://github.com/webrecorder/wsgiprox")
11115 (synopsis "HTTP/S proxy with WebSockets over WSGI")
11116 (description
11117 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
11118middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
11119The library accepts HTTP and HTTPS proxy connections, and routes them to a
11120designated prefix.")
11121 (license license:asl2.0)))
11122
11123(define-public python-warcio
11124 ;; The PyPI release is missing some test support files (see:
11125 ;; https://github.com/webrecorder/warcio/issues/132).
11126 (package
11127 (name "python-warcio")
11128 (version "1.8.1")
11129 (source
11130 (origin
11131 (method git-fetch)
11132 (uri (git-reference
11133 (url "https://github.com/webrecorder/warcio")
11134 (commit (string-append "v" version))))
11135 (file-name (git-file-name name version))
11136 (sha256
11137 (base32
11138 "19wwg7zmx33c942dbahdkng1byiwr4c9cd1ayrsh13f818n17zps"))))
11139 (build-system pyproject-build-system)
11140 (arguments
11141 (list
11142 #:test-flags ; These tests fail due to networking requirements.
11143 '(list "-k" (format #f "not ~a"
11144 (string-join
11145 '("test_post_chunked"
11146 "test_remote"
11147 "test_capture_http_proxy"
11148 "test_capture_https_proxy"
11149 "test_capture_https_proxy_same_session")
11150 " and not "))
11151 ; The following test requires the hookdns package.
11152 "--ignore=test/test_capture_http_proxy.py")))
11153 (native-inputs
11154 (list python-httpbin
11155 python-pytest
11156 python-requests
11157 python-setuptools
11158 python-wsgiprox))
11159 (home-page "https://github.com/webrecorder/warcio")
11160 (synopsis "Streaming web archival archive (WARC) library")
11161 (description "warcio is a Python library to read and write the WARC format
11162commonly used in Web archives. It is designed for fast, low-level access to
11163web archival content, oriented around a stream of WARC records rather than
11164files.")
11165 (license license:asl2.0)))
11166
11167(define-public python-websockets
11168 (package
11169 (name "python-websockets")
11170 (version "16.0")
11171 (source
11172 (origin
11173 (method git-fetch)
11174 (uri (git-reference
11175 (url "https://github.com/aaugustin/websockets")
11176 (commit version)))
11177 (file-name (git-file-name name version))
11178 (sha256
11179 (base32
11180 "1f71siwmjxn8b671x8lkkxx56q3xm99f2kmjqpzfcv3air9n94gg"))))
11181 (build-system pyproject-build-system)
11182 (arguments
11183 (list #:test-backend #~'unittest
11184 #:phases
11185 #~(modify-phases %standard-phases
11186 (add-before 'check 'extend-test-timeout
11187 (lambda _
11188 ;; Some architectures need an even longer timeout. Make it
11189 ;; long enough that it should never fail due to timeout.
11190 #$@(if (target-riscv64?)
11191 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
11192 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
11193 (native-inputs
11194 (list python-setuptools))
11195 (home-page "https://github.com/aaugustin/websockets")
11196 (synopsis
11197 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
11198 (description
11199 "@code{websockets} is a library for building WebSocket servers and clients
11200in Python with a focus on correctness and simplicity.
11201
11202Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
11203it provides an elegant coroutine-based API.")
11204 (license license:bsd-3)))
11205
11206(define-public selenium-manager
11207 (package
11208 (name "selenium-manager")
11209 (version "4.34.2")
11210 (source
11211 (origin
11212 (method git-fetch)
11213 (uri (git-reference
11214 (url "https://github.com/SeleniumHQ/selenium")
11215 (commit (string-append "selenium-" version "-python"))))
11216 (file-name (git-file-name name version))
11217 (sha256
11218 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
11219 (build-system cargo-build-system)
11220 (arguments
11221 (list
11222 ;; XXX: Almost all tests require either browsers or network access.
11223 #:tests? #f
11224 #:install-source? #f ; Most likely intended as a leaf.
11225 #:phases
11226 #~(modify-phases %standard-phases
11227 (add-after 'unpack 'chdir
11228 (lambda _
11229 (chdir "rust"))))))
11230 (native-inputs (list pkg-config))
11231 (inputs (cons* (list zstd "lib") xz
11232 (cargo-inputs 'selenium-manager)))
11233 (home-page "https://www.selenium.dev")
11234 (synopsis "CLI tool to manager the browser test infrastructure")
11235 (description
11236 "Selenium simplifies web browser automation. It specifically provides
11237infrastructure for the W3C WebDriver specification — a platform and
11238language-neutral coding interface compatible with all major web browsers.
11239
11240Selenium Manager is a CLI tool that automatically manages the browser/driver
11241infrastructure required by Selenium.")
11242 (license license:asl2.0)))
11243
11244(define-public python-selenium
11245 (package/inherit selenium-manager
11246 (name "python-selenium")
11247 (build-system pyproject-build-system)
11248 (arguments
11249 (list
11250 ;; XXX: Disable failing tests.
11251 #:test-flags
11252 #~(list "--ignore-glob=test/selenium/webdriver/*"
11253 ;; Probably requires those.
11254 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
11255 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
11256 ;; XXX: SSL certificates access.
11257 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
11258 "-k" "not test_missing_cdp_devtools_version_falls_back")
11259 #:phases
11260 #~(modify-phases %standard-phases
11261 (add-after 'unpack 'chdir
11262 (lambda _
11263 (chdir "py")))
11264 (add-after 'chdir 'inject-selenium-manager-binary
11265 (lambda* (#:key inputs #:allow-other-keys)
11266 (substitute* "selenium/webdriver/common/selenium_manager.py"
11267 (("compiled_path = Path.*")
11268 (format #f "return Path(~s)~%"
11269 (search-input-file inputs "bin/selenium-manager"))))
11270 (substitute* "pyproject.toml"
11271 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
11272 "")
11273 (("target = \"selenium\\.webdriver\\.common.*\"")
11274 ""))))
11275 (add-after 'chdir 'relax-requirements
11276 (lambda _
11277 (substitute* "pyproject.toml"
11278 (("\"(typing_extensions|trio|urllib3.*)~=.*\"," _ target)
11279 (format #f "~s," target))))))))
11280 (propagated-inputs (list python-certifi
11281 python-trio
11282 python-trio-websocket
11283 python-typing-extensions
11284 python-urllib3
11285 python-websocket-client))
11286 (inputs (list selenium-manager))
11287 (native-inputs (list python-filetype
11288 python-pytest
11289 python-pytest-mock
11290 python-pytest-trio
11291 python-setuptools
11292 python-setuptools-rust))
11293 (synopsis "Python bindings for Selenium")
11294 (description
11295 "Selenium enables web browser automation. It specifically provides
11296infrastructure for the W3C WebDriver specification — a platform and
11297language-neutral coding interface compatible with all major web browsers.")))
11298
11299(define-public python-rapidjson
11300 (package
11301 (name "python-rapidjson")
11302 (version "1.23")
11303 (source
11304 (origin
11305 (method git-fetch)
11306 (uri (git-reference
11307 (url "https://github.com/python-rapidjson/python-rapidjson")
11308 (commit (string-append "v" version))))
11309 (file-name (git-file-name name version))
11310 (sha256
11311 (base32 "0ajf919gg3qmi68jb0m6v80al2n65cn2ac36qz46s0h6zh92cl86"))
11312 (modules '((guix build utils)))
11313 (snippet
11314 '(delete-file-recursively "rapidjson"))))
11315 (build-system pyproject-build-system)
11316 (arguments
11317 (list
11318 #:test-flags '(list "tests")
11319 #:phases
11320 #~(modify-phases %standard-phases
11321 ;; We cannot seem to use #:configure-flags with the
11322 ;; pyproject-build-system to override rj_include_dir.
11323 (add-after 'unpack 'override-rapidjson-sources
11324 (lambda _
11325 (substitute* "setup.py"
11326 (("^rj_include_dir =.*")
11327 (string-append "rj_include_dir = '"
11328 #$(this-package-native-input "rapidjson")
11329 "/include/rapidjson" "'"))
11330 (("if not os.path.isdir.*") "if False:")))))))
11331 (native-inputs
11332 (list rapidjson python-pytest python-pytz python-setuptools))
11333 (home-page "https://github.com/python-rapidjson/python-rapidjson")
11334 (synopsis "Python wrapper around rapidjson")
11335 (description "This package provides a python wrapper around rapidjson.")
11336 (license license:expat)))
11337
11338(define-public python-venusian
11339 (package
11340 (name "python-venusian")
11341 (version "3.1.1")
11342 (source
11343 (origin
11344 (method url-fetch)
11345 (uri (pypi-uri "venusian" version))
11346 (sha256
11347 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
11348 (build-system pyproject-build-system)
11349 (native-inputs
11350 (list python-pytest
11351 python-setuptools))
11352 (home-page "https://docs.pylonsproject.org/projects/venusian")
11353 (synopsis "Library for deferring decorator actions")
11354 (description
11355 "Venusian is a library which allows framework authors to defer decorator
11356actions. Instead of taking actions when a function (or class) decorator is
11357executed at import time, you can defer the action usually taken by the
11358decorator until a separate scan phase.")
11359 (license license:repoze)))
11360
11361(define-public python-zope-deprecation
11362 (package
11363 (name "python-zope-deprecation")
11364 (version "6.0")
11365 (source (origin
11366 (method url-fetch)
11367 (uri (pypi-uri "zope_deprecation" version))
11368 (sha256
11369 (base32
11370 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
11371 (build-system pyproject-build-system)
11372 (arguments
11373 (list #:tests? #f)) ;no tests in PyPI
11374 (native-inputs
11375 (list python-setuptools))
11376 (home-page "https://zopedeprecation.readthedocs.io/")
11377 (synopsis "Function for marking deprecations")
11378 (description "The @code{zope.deprecation} module provides a function for
11379marking modules, classes, functions, methods and properties as deprecated,
11380displaying warnings when usaged in application code.")
11381 (license license:zpl2.1)))
11382
11383(define-public python-translationstring
11384 (package
11385 (name "python-translationstring")
11386 (version "1.4")
11387 (source (origin
11388 (method url-fetch)
11389 (uri (pypi-uri "translationstring" version))
11390 (sha256
11391 (base32
11392 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
11393 (build-system pyproject-build-system)
11394 (native-inputs
11395 (list python-pytest
11396 python-setuptools))
11397 (home-page "https://docs.pylonsproject.org/projects/translationstring")
11398 (synopsis "Internationalization tooling for the Pylons project")
11399 (description "This package provides a library used by various Pylons
11400project packages for internationalization (i18n) duties related to
11401translation.")
11402 (license license:repoze)))
11403
11404(define-public python-plaster
11405 (package
11406 (name "python-plaster")
11407 (version "1.1.2")
11408 (source (origin
11409 (method url-fetch)
11410 (uri (pypi-uri "plaster" version))
11411 (sha256
11412 (base32
11413 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
11414 (build-system pyproject-build-system)
11415 (native-inputs
11416 (list python-pytest
11417 python-setuptools))
11418 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
11419 (synopsis "Configuration loader for multiple config file formats")
11420 (description
11421 "Plaster is a loader interface around multiple config file formats. It
11422exists to define a common API for applications to use when they wish to load
11423configuration. The library itself does not aim to handle anything except a
11424basic API that applications may use to find and load configuration settings.
11425Any specific constraints should be implemented in a pluggable loader which can
11426be registered via an entrypoint.")
11427 (license license:repoze)))
11428
11429(define-public python-plaster-pastedeploy
11430 (package
11431 (name "python-plaster-pastedeploy")
11432 (version "1.0.1")
11433 (source (origin
11434 (method url-fetch)
11435 (uri (pypi-uri "plaster_pastedeploy" version))
11436 (sha256
11437 (base32
11438 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
11439 (build-system pyproject-build-system)
11440 (native-inputs
11441 (list python-pytest
11442 python-setuptools))
11443 (propagated-inputs
11444 (list python-plaster python-pastedeploy))
11445 (home-page "https://github.com/Pylons/plaster_pastedeploy")
11446 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
11447 (description
11448 "This plugin for @code{python-plaster} adds support for PasteDeploy
11449syntax, it provides a plaster @code{Loader} object that can parse ini files
11450according to the standard set by PasteDeploy")
11451 (license license:expat)))
11452
11453(define-public python-hupper
11454 (package
11455 (name "python-hupper")
11456 (version "1.12.1")
11457 (source
11458 (origin
11459 (method url-fetch)
11460 (uri (pypi-uri "hupper" version))
11461 (sha256
11462 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
11463 (build-system pyproject-build-system)
11464 (arguments
11465 (list
11466 ;; RuntimeError: timeout waiting for change to
11467 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
11468 #:test-flags #~(list "--ignore=tests/test_it.py")))
11469 (native-inputs
11470 (list python-pytest python-setuptools python-wheel))
11471 (propagated-inputs
11472 (list python-watchdog))
11473 (home-page "https://readthedocs.org/projects/hupper")
11474 (synopsis "Integrated process monitor tracking changes to imported Python files")
11475 (description
11476 "Hupper is an integrated process monitor that will track changes to any
11477imported Python files in sys.modules as well as custom paths. When files are
11478changed the process is restarted.")
11479 (license license:expat)))
11480
11481(define-public python-pyowm
11482 (package
11483 (name "python-pyowm")
11484 (version "3.3.0")
11485 (source
11486 (origin
11487 (method git-fetch)
11488 (uri (git-reference
11489 (url "https://github.com/csparpa/pyowm")
11490 (commit version)))
11491 (file-name (git-file-name name version))
11492 (sha256
11493 (base32
11494 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
11495 (build-system pyproject-build-system)
11496 (arguments (list #:test-flags #~(list "tests/unit")))
11497 (native-inputs (list python-pytest python-setuptools python-wheel))
11498 (propagated-inputs
11499 (list python-geojson-for-pyowm
11500 python-pysocks
11501 python-requests))
11502 (home-page "https://github.com/csparpa/pyowm")
11503 (synopsis "Python wrapper around OpenWeatherMap web APIs")
11504 (description
11505 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
11506 (license license:expat)))
11507
11508(define-public python-pyramid
11509 (package
11510 (name "python-pyramid")
11511 (version "2.1")
11512 (source
11513 (origin
11514 (method git-fetch)
11515 (uri (git-reference
11516 (url "https://github.com/Pylons/pyramid")
11517 (commit version)))
11518 (file-name (git-file-name name version))
11519 (sha256
11520 (base32 "0my03b81009w9zqx5cdn9qixh0jah49hr0379n98kx2j3b8cfk1p"))))
11521 (build-system pyproject-build-system)
11522 (native-inputs
11523 (list python-pytest
11524 python-setuptools
11525 python-webtest
11526 python-zope-component))
11527 (propagated-inputs
11528 (list python-hupper
11529 python-plaster
11530 python-plaster-pastedeploy
11531 python-translationstring
11532 python-venusian
11533 python-webob
11534 python-zope-deprecation
11535 python-zope-interface))
11536 (home-page "https://trypyramid.com/")
11537 (synopsis "Python web-framework suitable for small and large sites")
11538 (description
11539 "Pyramid makes it easy to write web applications. From minimal
11540request/response web apps to larger, grown applications.")
11541 (license license:repoze)))
11542
11543(define-public python-pyramid-chameleon
11544 ;; PyPI lacks a fresh release, use the latest commit associated with
11545 ;; unrleased version, see:
11546 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
11547 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
11548 (revision "0"))
11549 (package
11550 (name "python-pyramid-chameleon")
11551 (version (git-version "0.4.dev0" revision commit))
11552 (source
11553 (origin
11554 (method git-fetch)
11555 (uri (git-reference
11556 (url "https://github.com/Pylons/pyramid_chameleon")
11557 (commit commit)))
11558 (file-name (git-file-name name version))
11559 (sha256
11560 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
11561 (build-system pyproject-build-system)
11562 (native-inputs
11563 (list python-pytest
11564 python-setuptools))
11565 (propagated-inputs
11566 (list python-chameleon
11567 python-pyramid))
11568 (home-page "https://github.com/Pylons/pyramid_chameleon")
11569 (synopsis "Chameleon template compiler for pyramid")
11570 (description
11571 "These package provides bindings for the Chameleon templating system
11572 for the Pyramid web framework.")
11573 (license license:repoze))))
11574
11575(define-public python-pyramid-debugtoolbar
11576 (package
11577 (name "python-pyramid-debugtoolbar")
11578 (version "4.12.1")
11579 (source
11580 (origin
11581 (method git-fetch)
11582 (uri (git-reference
11583 (url "https://github.com/Pylons/pyramid_debugtoolbar")
11584 (commit version)))
11585 (file-name (git-file-name name version))
11586 (sha256
11587 (base32 "0kalb5rsrlcz62zv9a39kp28mvwg9j6gymvzxbybdnvk51v9if56"))))
11588 (build-system pyproject-build-system)
11589 (arguments
11590 (list
11591 #:test-flags
11592 ;; Large diff assertion not equal faileurs.
11593 #~(list #$@(map (lambda (test)
11594 (string-append "--deselect=tests"
11595 "/test_panels/test_sqla.py::" test))
11596 (list "TestSimpleSelect::test_panel"
11597 "TestTransactionCommit::test_panel"
11598 "TestTransactionRollback::test_panel")))))
11599 (native-inputs
11600 (list python-pytest
11601 python-setuptools
11602 python-webtest))
11603 (propagated-inputs
11604 (list python-pyramid
11605 python-pyramid-chameleon
11606 python-pyramid-jinja2
11607 python-pyramid-mako
11608 python-selenium
11609 python-sqlalchemy
11610 python-waitress))
11611 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
11612 (synopsis "Pyramid debug toolbar")
11613 (description
11614 "This package provides an interactive HTML debugger for Pyramid
11615application development.")
11616 (license license:bsd-3)))
11617
11618(define-public python-pyramid-jinja2
11619 (package
11620 (name "python-pyramid-jinja2")
11621 (version "2.10.1")
11622 (source
11623 (origin
11624 (method url-fetch)
11625 (uri (pypi-uri "pyramid_jinja2" version))
11626 (sha256
11627 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
11628 (build-system pyproject-build-system)
11629 (arguments
11630 (list
11631 #:test-flags
11632 ;; Two tests failed with assertion not equal.
11633 #~(list "-k" "not test_it_relative_to_package and not test_options")))
11634 (native-inputs
11635 (list python-pytest
11636 python-setuptools
11637 python-webtest))
11638 (propagated-inputs
11639 (list python-jinja2
11640 python-markupsafe
11641 python-pyramid
11642 python-zope-deprecation))
11643 (home-page "https://github.com/Pylons/pyramid_jinja2")
11644 (synopsis "Jinja2 template bindings for the Pyramid web framework")
11645 (description "This package provides Jinja2 template bindings for the
11646Pyramid web framework.")
11647 (license license:repoze)))
11648
11649(define-public python-pyramid-mako
11650 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
11651 ;; master, us the latest commit for now.
11652 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
11653 (revision "0"))
11654 (package
11655 (name "python-pyramid-mako")
11656 (version (git-version "1.1.0" revision commit))
11657 (source
11658 (origin
11659 (method git-fetch)
11660 (uri (git-reference
11661 (url "https://github.com/Pylons/pyramid_mako")
11662 (commit commit)))
11663 (file-name (git-file-name name version))
11664 (sha256
11665 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
11666 (build-system pyproject-build-system)
11667 (native-inputs
11668 (list python-pytest
11669 python-setuptools))
11670 (propagated-inputs
11671 (list python-mako
11672 python-pyramid))
11673 (home-page "https://github.com/Pylons/pyramid_mako")
11674 (synopsis "Mako template bindings for the Pyramid web framework")
11675 (description
11676 "This package provides Mako template bindings for the Pyramid web
11677framework.")
11678 (license license:repoze))))
11679
11680(define-public python-pyramid-retry
11681 (package
11682 (name "python-pyramid-retry")
11683 (version "2.1.1")
11684 (source
11685 (origin
11686 (method url-fetch)
11687 (uri (pypi-uri "pyramid_retry" version))
11688 (sha256
11689 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
11690 (build-system pyproject-build-system)
11691 (native-inputs
11692 (list python-pytest
11693 python-setuptools
11694 python-webtest))
11695 (propagated-inputs
11696 (list python-pyramid
11697 python-zope-interface))
11698 (home-page "https://github.com/Pylons/pyramid_retry")
11699 (synopsis "Pyramid execution policy supporting retrying failed requests")
11700 (description
11701 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
11702and can retry them a configurable number of times under certain \"retryable\"
11703error conditions before indicating a failure to the client.")
11704 (license license:expat)))
11705
11706(define-public python-pyramid-tm
11707 (package
11708 (name "python-pyramid-tm")
11709 (version "2.6")
11710 (source
11711 (origin
11712 (method url-fetch)
11713 (uri (pypi-uri "pyramid_tm" version))
11714 (sha256
11715 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
11716 (build-system pyproject-build-system)
11717 (native-inputs
11718 (list python-pytest
11719 python-setuptools
11720 python-webtest))
11721 (propagated-inputs
11722 (list python-pyramid
11723 python-transaction))
11724 (home-page "https://github.com/Pylons/pyramid_tm")
11725 (synopsis "Centralized transaction management for Pyramid")
11726 (description
11727 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
11728active @url{https://pypi.org/project/transaction/, transaction} as provided by
11729the Python transaction package.")
11730 (license license:repoze)))
11731
11732(define-public python-random-user-agent
11733 (package
11734 (name "python-random-user-agent")
11735 (version "1.0.1")
11736 (source
11737 (origin
11738 (method url-fetch)
11739 (uri (pypi-uri "random_user_agent" version))
11740 (sha256
11741 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
11742 (build-system pyproject-build-system)
11743 (arguments (list #:tests? #f)) ; No tests.
11744 (native-inputs (list python-setuptools))
11745 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
11746 (synopsis "List of user agents")
11747 (description
11748 "This package provides a list of user agents, from a collection of more
11749than 326,000 known user-agents. Users can pick a random one, or select one
11750based on filters.")
11751 (license license:expat)))
11752
11753(define-public python-rangehttpserver
11754 (package
11755 (name "python-rangehttpserver")
11756 (version "1.4.0")
11757 (source
11758 (origin
11759 (method git-fetch)
11760 (uri (git-reference
11761 (url "https://github.com/danvk/RangeHTTPServer")
11762 (commit version)))
11763 (file-name (git-file-name name version))
11764 (sha256
11765 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
11766 (build-system pyproject-build-system)
11767 (native-inputs
11768 (list python-pytest
11769 python-requests
11770 python-setuptools))
11771 (home-page "https://github.com/danvk/RangeHTTPServer")
11772 (synopsis "SimpleHTTPServer with support for range requests")
11773 (description
11774 "This tool provides a simple HTTP server with support for Range
11775requests.")
11776 (license license:asl2.0)))
11777
11778(define-public python-flask-restx
11779 (package
11780 (name "python-flask-restx")
11781 (version "1.3.0")
11782 (source
11783 (origin
11784 (method git-fetch) ;no tests in PyPI archive
11785 (uri (git-reference
11786 (url "https://github.com/python-restx/flask-restx")
11787 (commit version)))
11788 (file-name (git-file-name name version))
11789 (sha256
11790 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
11791 (build-system pyproject-build-system)
11792 (arguments
11793 (list
11794 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
11795 #:test-flags
11796 #~(list "--benchmark-skip"
11797 ;; ValueError: http://www.google.com is not a valid URL. Domain
11798 ;; does not exists.
11799 "--deselect=tests/test_inputs.py::URLTest::test_check"
11800 "-k" (string-join
11801 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
11802 (list "not test_rfc822_value"
11803 "test_iso8601_value"
11804 ;; assert 404 == 2000
11805 "test_specs_endpoint_host_and_subdomain"
11806 ;; ValueError: [email protected] is not a valid email
11807 "test_valid_value_check")
11808 " and not "))))
11809 (native-inputs
11810 (list python-blinker
11811 python-faker
11812 python-pytest
11813 python-pytest-benchmark
11814 python-pytest-flask
11815 python-pytest-mock
11816 python-setuptools))
11817 (propagated-inputs
11818 (list python-aniso8601
11819 python-flask
11820 python-importlib-resources
11821 python-jsonschema
11822 python-pytz
11823 python-werkzeug))
11824 (home-page "https://github.com/python-restx/flask-restx")
11825 (synopsis
11826 "Framework for fast, easy and documented API development with Flask")
11827 (description
11828 "Flask-RESTX is an extension for Flask that adds support for quickly building
11829REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
11830 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
11831decorators and tools to describe your API and expose its documentation properly using
11832Swagger.")
11833 (license license:bsd-3)))
11834
11835(define-public python-flask-socketio
11836 (package
11837 (name "python-flask-socketio")
11838 (version "5.6.1")
11839 (source
11840 (origin
11841 (method git-fetch)
11842 (uri (git-reference
11843 (url "https://github.com/miguelgrinberg/Flask-SocketIO/")
11844 (commit (string-append "v" version))))
11845 (file-name (git-file-name name version))
11846 (sha256
11847 (base32 "1bs594bxggwn78yhf86whv6bcs8gb7mhrm5dnk5x4c3jb20nhfmm"))))
11848 (build-system pyproject-build-system)
11849 (native-inputs
11850 (list python-pytest
11851 python-redis
11852 python-setuptools))
11853 (propagated-inputs
11854 (list python-flask
11855 python-socketio))
11856 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
11857 (synopsis "Socket.IO integration for Flask applications")
11858 (description "Socket.IO integration for Flask applications")
11859 (license license:expat)))
11860
11861(define-public python-manuel
11862 (package
11863 (name "python-manuel")
11864 (version "1.13.0")
11865 (source
11866 (origin
11867 (method url-fetch)
11868 (uri (pypi-uri "manuel" version))
11869 (sha256
11870 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
11871 (build-system pyproject-build-system)
11872 (arguments
11873 (list
11874 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
11875 #:tests? #f))
11876 (propagated-inputs
11877 (list python-setuptools)) ;install requires
11878 (home-page "https://pypi.org/project/manuel/")
11879 (synopsis "Build tested documentation")
11880 (description
11881 "Manuel lets you mix and match traditional doctests with custom test syntax.")
11882 (license license:asl2.0)))
11883
11884(define-public python-marshmallow-jsonapi
11885 (package
11886 (name "python-marshmallow-jsonapi")
11887 (version "0.26.0")
11888 (source
11889 (origin
11890 (method git-fetch)
11891 (uri (git-reference
11892 ;; XXX: Deprecated upstream: This repository has been archived
11893 ;; by the owner on Jun 6, 2024. It is now read-only.
11894 ;; Using a maintained fork. The pypi name of this fork
11895 ;; is marshmallow-jsonapi-minfork.
11896 (url "https://github.com/tadams42/marshmallow-jsonapi")
11897 (commit version)))
11898 (file-name (git-file-name name version))
11899 (sha256
11900 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
11901 (build-system pyproject-build-system)
11902 (native-inputs
11903 (list python-faker
11904 python-flask
11905 python-pytest
11906 python-setuptools))
11907 (propagated-inputs (list python-marshmallow))
11908 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
11909 (synopsis "JSON:API 1.0 formatting with Marshmallow")
11910 (description
11911 "The marshmallow-jsonapi package provides a simple way to produce
11912@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
11913framework. It includes optional utilities to integrate with Flask. This is a
11914forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
11915 (license license:expat)))
11916
11917(define-public python-pecan
11918 (package
11919 (name "python-pecan")
11920 (version "1.8.0")
11921 (source
11922 (origin
11923 (method git-fetch)
11924 (uri (git-reference
11925 (url "https://github.com/pecan/pecan")
11926 (commit version)))
11927 (file-name (git-file-name name version))
11928 (sha256
11929 (base32 "0w693jpnjy358992f3jrrlf31knkqn0jvz2jx0iz7ziikprc61p8"))))
11930 (build-system pyproject-build-system)
11931 (arguments
11932 (list
11933 #:test-flags '(list "--pyargs" "pecan")))
11934 (native-inputs
11935 (list gunicorn
11936 python-genshi
11937 python-jinja2
11938 python-pytest
11939 python-sqlalchemy-2
11940 python-webtest))
11941 (propagated-inputs
11942 (list python-mako
11943 python-webob))
11944 (home-page "http://github.com/pecan/pecan")
11945 (synopsis "WSGI object-dispatching web framework")
11946 (description "This package provides a WSGI object-dispatching web
11947framework, designed to be lean and fast, with few dependencies.")
11948 (license license:bsd-3)))
11949
11950(define-public python-persistent
11951 (package
11952 (name "python-persistent")
11953 (version "6.1.1")
11954 (source
11955 (origin
11956 (method git-fetch)
11957 (uri (git-reference
11958 (url "https://github.com/zopefoundation/persistent/")
11959 (commit version)))
11960 (file-name (git-file-name name version))
11961 (sha256
11962 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
11963 (build-system pyproject-build-system)
11964 (arguments
11965 (list
11966 #:phases
11967 #~(modify-phases %standard-phases
11968 (replace 'check
11969 (lambda* (#:key tests? #:allow-other-keys)
11970 (if tests?
11971 (invoke "zope-testrunner" "--test-path=src"
11972 ;; XXX: Ignore doc tests.
11973 "!persistent.tests.test_docs")
11974 (format #t "test suite not run~%")))))))
11975 (propagated-inputs
11976 (list python-cffi
11977 python-zope-deferredimport
11978 python-zope-interface
11979 python-zope-testrunner))
11980 (native-inputs
11981 (list python-manuel python-zope-testrunner python-setuptools))
11982 (home-page "https://github.com/zopefoundation/persistent/")
11983 (synopsis "Translucent persistent objects")
11984 (description
11985 "This package contains a generic persistence implementation for Python.
11986It forms the core protocol for making objects interact \"transparently\" with
11987a database such as the ZODB.")
11988 (license license:zpl2.1)))
11989
11990(define-public python-btrees
11991 (package
11992 (name "python-btrees")
11993 (version "6.1")
11994 (source
11995 (origin
11996 (method git-fetch)
11997 (uri (git-reference
11998 (url "https://github.com/zopefoundation/BTrees")
11999 (commit version)))
12000 (file-name (git-file-name name version))
12001 (sha256
12002 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
12003 (build-system pyproject-build-system)
12004 (arguments
12005 (list
12006 #:phases
12007 #~(modify-phases %standard-phases
12008 (replace 'check
12009 (lambda* (#:key tests? #:allow-other-keys)
12010 (if tests?
12011 (invoke "zope-testrunner" "--test-path=src")
12012 (format #t "test suite not run~%")))))))
12013 (propagated-inputs (list python-persistent python-zope-interface))
12014 (native-inputs (list python-persistent python-transaction
12015 python-zope-testrunner python-setuptools))
12016 (home-page "https://github.com/zopefoundation/BTrees")
12017 (synopsis "Scalable persistent object containers")
12018 (description
12019 "This package contains a set of persistent object containers built around a
12020modified BTree data structure. The trees are optimized for use inside ZODB's
12021\"optimistic concurrency\" paradigm, and include explicit resolution of
12022conflicts detected by that mechanism.")
12023 (license license:zpl2.1)))
12024
12025(define-public python-transaction
12026 (package
12027 (name "python-transaction")
12028 (version "5.0")
12029 (source
12030 (origin
12031 (method url-fetch)
12032 (uri (pypi-uri "transaction" version))
12033 (sha256
12034 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
12035 (build-system pyproject-build-system)
12036 (native-inputs
12037 (list python-pytest
12038 python-setuptools))
12039 (propagated-inputs
12040 (list python-zope-interface))
12041 (home-page "https://github.com/zopefoundation/transaction")
12042 (synopsis "Transaction management for Python")
12043 (description "This package contains a generic transaction implementation
12044for Python. It is mainly used by the ZODB.")
12045 (license license:zpl2.1)))
12046
12047(define-public python-truststore
12048 (package
12049 (name "python-truststore")
12050 (version "0.10.4")
12051 (source
12052 (origin
12053 (method url-fetch)
12054 (uri (pypi-uri "truststore" version))
12055 (sha256
12056 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
12057 (build-system pyproject-build-system)
12058 (arguments
12059 (list #:tests? #f)) ;all tests require Internet access
12060 (native-inputs
12061 (list python-flit-core))
12062 (home-page "https://github.com/sethmlarson/truststore")
12063 (synopsis "Verify certificates using native system trust stores")
12064 (description
12065 "Truststore is a library which exposes native system certificate stores (ie
12066\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
12067Python applications no longer need to rely on certifi as a root certificate
12068store.")
12069 (license license:expat)))
12070
12071(define-public python-robot-detection
12072 (package
12073 (name "python-robot-detection")
12074 (version "0.4.0")
12075 (source
12076 (origin
12077 (method git-fetch)
12078 (uri (git-reference
12079 (url "https://github.com/rory/robot-detection")
12080 (commit (string-append "v" version))))
12081 (file-name (git-file-name name version))
12082 (sha256
12083 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
12084 (build-system pyproject-build-system)
12085 (arguments (list #:test-backend #~'unittest))
12086 (native-inputs (list python-setuptools))
12087 (propagated-inputs (list python-six))
12088 (home-page "https://github.com/rory/robot-detection")
12089 (synopsis "Detect web crawlers")
12090 (description
12091 "@code{robot_detection} is a python module to detect if a given HTTP User
12092Agent is a web crawler. It uses the list of registered robots from
12093@url{http://www.robotstxt.org}.")
12094 (license license:gpl3+)))
12095
12096(define-public python-robotframework-requests
12097 (package
12098 (name "python-robotframework-requests")
12099 (version "0.9.7")
12100 (source
12101 (origin
12102 (method git-fetch) ; no tests in PyPI release
12103 (uri (git-reference
12104 (url "https://github.com/MarketSquare/robotframework-requests")
12105 (commit (string-append "v" version))))
12106 (file-name (git-file-name name version))
12107 (sha256
12108 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
12109 (build-system pyproject-build-system)
12110 (native-inputs
12111 (list python-pytest
12112 python-setuptools
12113 python-wheel))
12114 (propagated-inputs
12115 (list python-requests
12116 python-robotframework))
12117 (home-page "https://github.com/MarketSquare/robotframework-requests")
12118 (synopsis "Robot Framework keyword library wrapper around requests")
12119 (description
12120 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
12121Framework} library aimed to provide HTTP API testing functionalities by
12122wrapping the @code{requests} Python library.")
12123 (license license:expat)))
12124
12125(define-public python-pysolr
12126 (package
12127 (name "python-pysolr")
12128 (version "3.10.0")
12129 (source
12130 (origin
12131 (method url-fetch)
12132 (uri (pypi-uri "pysolr" version))
12133 (sha256
12134 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
12135 (build-system pyproject-build-system)
12136 (arguments
12137 '(#:tests? #f)) ; Tests require network access.
12138 (native-inputs
12139 (list python-setuptools
12140 python-setuptools-scm
12141 python-wheel))
12142 (propagated-inputs
12143 (list python-requests))
12144 (home-page "https://github.com/django-haystack/pysolr/")
12145 (synopsis "Lightweight python wrapper for Apache Solr")
12146 (description
12147 "This module provides an interface that queries the Apache Solr server
12148using a pure Python implementation.")
12149 (license license:bsd-3)))
12150
12151(define-public python-pyjsparser
12152 ;; XXX: This project is potentially abandonware, consider to remove in next
12153 ;; refresh cycle, see:
12154 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
12155 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
12156 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
12157 (package
12158 (name "python-pyjsparser")
12159 (version "2.7.1")
12160 (source
12161 (origin
12162 (method url-fetch)
12163 (uri (pypi-uri "pyjsparser" version))
12164 (sha256
12165 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
12166 (build-system pyproject-build-system)
12167 (arguments
12168 '(#:tests? #f)) ;no tests in PyPI
12169 (native-inputs (list python-setuptools))
12170 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
12171 (synopsis "Fast JavaScript parser")
12172 (description
12173 "This package provides a fast JavaScript parser (based on esprima.js)")
12174 (license license:expat)))
12175
12176(define-public python-js2py
12177 (package
12178 (name "python-js2py")
12179 (properties '((commit . "2e017b86e2f18a6c8a842293b1687f2ce7baa12e")
12180 (revision . "0")))
12181 (version (git-version "0.74"
12182 (assoc-ref properties 'revision)
12183 (assoc-ref properties 'commit)))
12184 (source
12185 (origin
12186 (method git-fetch)
12187 (uri (git-reference
12188 (url "https://github.com/PiotrDabkowski/Js2Py")
12189 (commit (assoc-ref properties 'commit))))
12190 (file-name (git-file-name name version))
12191 (sha256
12192 (base32 "0rsac03shkm0yxq91hzxdvhb96wy168bxdw8azi25bvlm8s3l27p"))
12193 (patches
12194 (list
12195 (origin
12196 (method url-fetch)
12197 (uri (string-append "https://github.com/PiotrDabkowski/Js2Py/commit"
12198 "/fd7df4a91fb08060914c7b1d9e94583d18f3371b"
12199 ".patch"))
12200 (file-name (string-append name "-" version "-pull-327.patch"))
12201 (sha256
12202 (base32 "14v89v8qqrsq0d63xbilkvx19l1rk59mlrbxvd4sj138lk7160ki")))))))
12203 (build-system pyproject-build-system)
12204 (arguments
12205 (list #:tests? #f)) ; tests require Node
12206 (native-inputs
12207 (list python-setuptools))
12208 (propagated-inputs
12209 (list python-pyjsparser
12210 python-six
12211 python-tzlocal))
12212 (home-page "https://github.com/PiotrDabkowski/Js2Py")
12213 (synopsis "JavaScript to Python translator")
12214 (description
12215 "This package provides a JavaScript to Python translator and a JavaScript
12216interpreter written in pure Python.")
12217 (license license:expat)))
12218
12219(define-public python-http-ece
12220 (package
12221 (name "python-http-ece")
12222 (version "1.2.1")
12223 (source
12224 (origin
12225 (method git-fetch)
12226 (uri (git-reference
12227 (url "https://github.com/web-push-libs/encrypted-content-encoding")
12228 (commit (string-append "v" version))))
12229 (file-name (git-file-name name version))
12230 (sha256
12231 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
12232 (build-system pyproject-build-system)
12233 (arguments
12234 `(#:phases
12235 (modify-phases %standard-phases
12236 (add-after 'unpack 'change-directory
12237 (lambda _ (chdir "python") #t)))))
12238 (native-inputs
12239 (list python-pytest python-setuptools))
12240 (propagated-inputs
12241 (list python-cryptography))
12242 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
12243 (synopsis "Encrypted Content Encoding for HTTP")
12244 (description
12245 "This package provides a simple implementation of Encrypted Content
12246Encoding for HTTP.")
12247 (license license:expat)))
12248
12249(define-public python-cloud-init
12250 (package
12251 (name "python-cloud-init")
12252 (version "24.2")
12253 (source
12254 (origin
12255 (method git-fetch)
12256 (uri (git-reference
12257 (url "https://github.com/canonical/cloud-init")
12258 (commit version)))
12259 (file-name (git-file-name name version))
12260 (sha256
12261 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
12262 (build-system pyproject-build-system)
12263 (arguments
12264 (list
12265 #:test-flags
12266 '(list
12267 ;; This requires usermod
12268 "--ignore=tests/unittests/distros/test_create_users.py"
12269 ;; This writes to /var
12270 "--ignore=tests/unittests/net/test_dhcp.py"
12271 "-k"
12272 (string-append
12273 ;; This test messes with PATH, so it cannot find mkdir
12274 "not test_path_env_gets_set_from_main"
12275 " and not test_apt_configure_sources_list_"
12276 ;; These all fail because /bin/sh doesn't exist. We cannot patch
12277 ;; this because the generated scripts must use /bin/sh as they are
12278 ;; supposed to be run on minimal systems.
12279 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
12280 " and not test_handler_runs_bootcmd_script_with_error"
12281 " and not test_subp_combined_stderr_stdout"
12282 " and not test_handle_part"))
12283 #:phases
12284 #~(modify-phases %standard-phases
12285 (add-after 'unpack 'patch-references
12286 (lambda _
12287 (substitute* "tests/unittests/cmd/test_clean.py"
12288 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
12289 (add-after 'install 'move-files
12290 (lambda* (#:key inputs outputs #:allow-other-keys)
12291 (for-each (lambda (dir)
12292 (let ((source (string-append (site-packages inputs outputs) "/" dir))
12293 (target (string-append #$output "/" (basename dir))))
12294 (copy-recursively source target)
12295 (delete-file-recursively source)))
12296 (list "etc" "lib" "usr/lib" "usr/share")))))))
12297 (propagated-inputs
12298 (list python-configobj
12299 python-jinja2
12300 python-jsonpatch
12301 python-jsonschema
12302 python-netifaces
12303 python-oauthlib
12304 python-pyserial
12305 python-pyyaml
12306 python-responses))
12307 (native-inputs
12308 (list procps ;for ps when running tests
12309 python-pytest
12310 python-pytest-mock
12311 python-passlib
12312 python-setuptools
12313 python-wheel))
12314 (home-page "https://github.com/canonical/cloud-init")
12315 (synopsis "Cloud instance initialization tools")
12316 (description
12317 "Cloud-init is the multi-distribution method for cross-platform cloud
12318instance initialization. It is supported across all major public cloud
12319providers, provisioning systems for private cloud infrastructure, and
12320bare-metal installations.")
12321 ;; Either license can be chosen
12322 (license (list license:asl2.0 license:gpl3))))
12323
12324(define-public python-cloudscraper
12325 (package
12326 (name "python-cloudscraper")
12327 (version "3.0.0")
12328 (source
12329 (origin
12330 (method git-fetch)
12331 (uri (git-reference
12332 (url "https://github.com/VeNoMouS/cloudscraper")
12333 (commit version)))
12334 (file-name (git-file-name name version))
12335 (sha256
12336 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
12337 (modules '((guix build utils)))
12338 (snippet
12339 '(with-directory-excursion "cloudscraper"
12340 (for-each delete-file
12341 '("captcha/9kw.py" "captcha/anticaptcha.py"))
12342 (substitute* "__init__.py"
12343 ;; Perhaps it's a joke, but don't promote proprietary software.
12344 (("([Th]is feature is not available) in the .*'" _ prefix)
12345 (string-append prefix ".'")))))))
12346 (build-system pyproject-build-system)
12347 (arguments
12348 (list
12349 #:test-flags
12350 #~(list "-k" "not test_403_handling")
12351 #:phases
12352 #~(modify-phases %standard-phases
12353 (add-after 'unpack 'relax-requirements
12354 (lambda _
12355 ;; XXX: Relax brotli dependency.
12356 (substitute* "pyproject.toml"
12357 (("\"brotli>=.*\"")
12358 "\"brotli\""))
12359 ;; XXX: Dependencies, that have not yet been packaged
12360 ;; and cause an import error when included.
12361 (delete-file "cloudscraper/interpreters/v8.py")))
12362 (add-after 'unpack 'fix-references
12363 (lambda _
12364 (substitute* "cloudscraper/interpreters/nodejs.py"
12365 (("'node'")
12366 (string-append "'" (which "node") "'"))))))))
12367 (inputs (list node-lts))
12368 (propagated-inputs
12369 (list python-pycryptodome
12370 python-brotli
12371 python-js2py
12372 python-polling2
12373 python-requests
12374 python-requests-toolbelt
12375 python-responses
12376 python-pyparsing
12377 python-websocket-client))
12378 (native-inputs (list python-pytest python-setuptools))
12379 (home-page "https://github.com/venomous/cloudscraper")
12380 (synopsis "Cloudflare anti-bot bypass")
12381 (description
12382 "This module acts as a webbrowser solving Cloudflare's Javascript
12383challenges.")
12384 (license license:expat)))
12385
12386(define-public python-imap-tools
12387 (package
12388 (name "python-imap-tools")
12389 (version "1.9.0")
12390 (source
12391 (origin
12392 (method git-fetch) ; no tests in PyPI release
12393 (uri (git-reference
12394 (url "https://github.com/ikvk/imap_tools")
12395 (commit (string-append "v" version))))
12396 (file-name (git-file-name name version))
12397 (sha256
12398 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
12399 (arguments
12400 (list
12401 #:test-flags
12402 ;; Tests require a network connection
12403 #~(list "-k" (string-append "not test_action"
12404 " and not test_attributes"
12405 " and not test_connection"
12406 " and not test_folders"
12407 " and not test_idle"
12408 " and not test_live"))))
12409 (build-system pyproject-build-system)
12410 (native-inputs
12411 (list python-pytest python-setuptools python-wheel))
12412 (home-page "https://github.com/ikvk/imap_tools")
12413 (synopsis "Work with email and mailbox by IMAP")
12414 (description
12415 "This Python library provides tools to deal with email and mailboxes
12416over IMAP:
12417
12418@itemize
12419@item Parsed email message attributes
12420@item Query builder for searching emails
12421@item Work with emails in folders (copy, delete, flag, move, seen)
12422@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
12423@end itemize")
12424 (license license:asl2.0)))
12425
12426(define-public python-giturlparse
12427 (package
12428 (name "python-giturlparse")
12429 (version "0.12.0")
12430 (source
12431 (origin
12432 (method git-fetch)
12433 (uri (git-reference
12434 (url "https://github.com/nephila/giturlparse")
12435 (commit version)))
12436 (file-name (git-file-name name version))
12437 (sha256
12438 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
12439 (build-system pyproject-build-system)
12440 (native-inputs (list python-pytest python-setuptools))
12441 (home-page "https://github.com/nephila/giturlparse")
12442 (synopsis "Git URL parsing module")
12443 (description
12444 "This package provides a git URL parsing module which supports parsing
12445and rewriting of remote git URLs from various hosting providers.")
12446 (license license:asl2.0)))
12447
12448(define-public python-hstspreload
12449 (package
12450 (name "python-hstspreload")
12451 (version "2025.1.1")
12452 (source
12453 (origin
12454 (method git-fetch)
12455 (uri (git-reference
12456 (url "https://github.com/sethmlarson/hstspreload")
12457 (commit version)))
12458 (file-name (git-file-name name version))
12459 (sha256
12460 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
12461 (build-system pyproject-build-system)
12462 (arguments (list #:tests? #f)) ; tests require external resources.
12463 (native-inputs (list python-setuptools))
12464 (home-page "https://github.com/sethmlarson/hstspreload")
12465 (synopsis "Chromium HSTS Preload list as a Python package")
12466 (description
12467 "@code{python-hstspreload} contains Chromium HSTS Preload list
12468as a Python package.")
12469 (license license:bsd-3)))
12470
12471(define-public python-sanic-routing
12472 (package
12473 (name "python-sanic-routing")
12474 (version "23.12.0")
12475 (source
12476 (origin
12477 (method url-fetch)
12478 (uri (pypi-uri "sanic-routing" version))
12479 (sha256
12480 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
12481 (build-system pyproject-build-system)
12482 (arguments
12483 ;; PyPi sources does not contain tests, recursive dependency on
12484 ;; python-sanic.
12485 (list #:tests? #f))
12486 (native-inputs (list python-setuptools python-wheel))
12487 (home-page "https://github.com/sanic-org/sanic-routing/")
12488 (synopsis "Routing component for Sanic")
12489 (description "Internal package for @code{python-sanic}, which provides
12490the @code{BasicRouter}.")
12491 (license license:expat)))
12492
12493(define-public python-sanic-testing
12494 (package
12495 (name "python-sanic-testing")
12496 (version "23.12.0")
12497 (source
12498 (origin
12499 (method url-fetch)
12500 (uri (pypi-uri "sanic-testing" version))
12501 (sha256
12502 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
12503 (build-system pyproject-build-system)
12504 (arguments
12505 ;; PyPi sources does not contain tests, recursive dependency on
12506 ;; python-sanic.
12507 (list #:tests? #f))
12508 (propagated-inputs (list python-httpx python-sanic-bootstrap))
12509 (native-inputs (list python-setuptools python-wheel))
12510 (home-page "https://github.com/sanic-org/sanic-testing/")
12511 (synopsis "Test clients for Sanic")
12512 (description "Internal package for @code{python-sanic}, which is
12513meant to be the core testing utility and clients for testing Sanic
12514applications.")
12515 (license license:expat)))
12516
12517(define-public python-sanic
12518 (package
12519 (name "python-sanic")
12520 (version "25.12.1")
12521 (source
12522 (origin
12523 (method url-fetch)
12524 (uri (pypi-uri "sanic" version))
12525 (sha256
12526 (base32 "0zxll83cvmcpiad3rri7cn9y8wi8xn7x0b00dimg0c20irhbylbv"))
12527 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
12528 (modules '((guix build utils)))
12529 (snippet #~(substitute* "setup.py"
12530 (("setuptools>=[0-9.]*")
12531 "setuptools")))))
12532 (build-system pyproject-build-system)
12533 (arguments
12534 (list
12535 #:test-flags
12536 #~(list "--asyncio-mode=auto"
12537 "--ignore=tests/benchmark/"
12538 "--ignore=tests/typing/test_typing.py"
12539 ;; Most tests hang or fail
12540 "--ignore=tests/test_cli.py"
12541 "--ignore=tests/worker/test_worker_serve.py"
12542 "-k"
12543 (string-append
12544 ;; PyPi sources lack examples module.
12545 "not test_gunicorn_"
12546 ;; Does not expect brotli and reordered headers.
12547 " and not test_raw_headers"
12548 ;; These look like buggy testcases.
12549 " and not test_zero_downtime"
12550 " and not test_non_default_uvloop_config_raises_warning"
12551 " and not test_listeners_triggered"
12552 " and not test_keep_alive_connection_context"
12553 " and not test_keep_alive_client_timeout"
12554 " and not test_conflicting_body_methods_overload"
12555 " and not test_unix_connection"
12556 ;; Unclear why they fail since core-updates merge.
12557 " and not test_missing_sni"
12558 " and not test_no_matching_cert"
12559 " and not test_wildcards"
12560 ;; These tests fail because subprotocols appear to be
12561 ;; parameterized as None
12562 " and not test_websocket_route_with_subprotocols"
12563 ;; AF_UNIX path too long
12564 " and not test_setup_and_teardown_unix"
12565 " and not test_configure_socket"
12566 ;; Freezes
12567 " and not test_server_run_with_repl"
12568 " and not test_server_run"
12569 " and not test_no_workers"
12570 ;; Raises DaemonError: Group 'root' does not exist
12571 " and not test_validate_user_sets_uid_and_gid"
12572 " and not test_validate_group_sets_gid"
12573 ;; Raises AssertionError:
12574 ;; assert 'text/xml; charset=utf-8' == 'application/xml'
12575 " and not test_guess_content_type"
12576 ;; Don't know.
12577 " and not test_chained_exception_handler"))))
12578 (propagated-inputs
12579 (list python-aiofiles
12580 python-aioquic
12581 python-html5tagger
12582 python-httptools
12583 python-multidict
12584 python-sanic-routing
12585 python-tracerite
12586 python-typing-extensions
12587 python-ujson
12588 python-uvloop
12589 python-websockets))
12590 (native-inputs
12591 (list python-bandit
12592 python-beautifulsoup4
12593 python-chardet
12594 python-cryptography
12595 python-docutils
12596 python-pygments
12597 python-pytest
12598 python-pytest-asyncio
12599 python-pytest-benchmark
12600 python-pytest-sanic
12601 python-pytest-xdist
12602 python-sanic-testing
12603 python-setuptools
12604 python-slotscheck
12605 python-towncrier
12606 python-types-ujson
12607 python-uvicorn))
12608 (home-page "https://github.com/sanic-org/sanic/")
12609 (synopsis "Async Python web server/framework")
12610 (description
12611 "Sanic is a Python web server and web framework that's written to go
12612fast. It allows the usage of the @code{async/await} syntax added in Python
126133.5, which makes your code non-blocking and speedy.")
12614 (license license:expat)))
12615
12616(define-public python-sanic-bootstrap
12617 (package
12618 (inherit python-sanic)
12619 (name "python-sanic-bootstrap")
12620 (arguments (list #:tests? #f))
12621 (native-inputs (list python-setuptools))))
12622
12623(define-public python-socketio
12624 (package
12625 (name "python-socketio")
12626 (version "5.16.4")
12627 (source
12628 (origin
12629 (method git-fetch)
12630 (uri (git-reference
12631 (url "https://github.com/miguelgrinberg/python-socketio/")
12632 (commit (string-append "v" version))))
12633 (file-name (git-file-name name version))
12634 (sha256
12635 (base32 "0695mq1nijlljkmpgn3nk6gfv34rzpgxrdsld1l1vix6gxyxna0y"))))
12636 (build-system pyproject-build-system)
12637 (arguments
12638 (list
12639 ;; tests: 642 passed, 5 warnings
12640 #:test-flags
12641 ;; Tests freeze.
12642 #~(list "--ignore=tests/async/test_admin.py"
12643 "--ignore=tests/common/test_admin.py")))
12644 (native-inputs
12645 (list python-msgpack
12646 python-pytest
12647 python-pytest-asyncio
12648 python-pytest-timeout
12649 python-redis
12650 python-setuptools
12651 python-uvicorn
12652 python-valkey))
12653 (propagated-inputs
12654 (list python-bidict
12655 python-engineio
12656 ;; [optional]
12657 python-aiohttp
12658 python-requests
12659 python-websocket-client))
12660 (home-page "https://github.com/miguelgrinberg/python-socketio/")
12661 (synopsis "Python Socket.IO server")
12662 (description
12663 "This package provides a Python implementation of the @code{Socket.IO}
12664realtime client and server.")
12665 (license license:expat)))
12666
12667(define-public python-socks
12668 (package
12669 (name "python-socks")
12670 (version "2.8.1")
12671 (source
12672 (origin
12673 (method git-fetch)
12674 (uri (git-reference
12675 (url "https://github.com/romis2012/python-socks")
12676 (commit (string-append "v" version))))
12677 (file-name (git-file-name name version))
12678 (sha256
12679 (base32 "1x95i9w3izivdgz6hadh5kiil12i4ljk4ashgh3g0rjv2rw33vhj"))))
12680 (build-system pyproject-build-system)
12681 (propagated-inputs (list python-trio))
12682 (native-inputs
12683 (list python-anyio
12684 python-flask
12685 python-pytest
12686 python-pytest-asyncio
12687 python-pytest-trio
12688 python-setuptools
12689 python-tiny-proxy
12690 python-trustme
12691 python-yarl))
12692 (home-page "https://github.com/romis2012/python-socks")
12693 (synopsis
12694 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
12695 (description
12696 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
12697 functionality.")
12698 (license license:asl2.0)))
12699
12700(define-public python-socksio
12701 (package
12702 (name "python-socksio")
12703 (version "1.0.0")
12704 (source
12705 (origin
12706 (method url-fetch)
12707 (uri (pypi-uri "socksio" version))
12708 (sha256
12709 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
12710 (build-system pyproject-build-system)
12711 (native-inputs
12712 (list python-flit-core python-pytest))
12713 (home-page "https://github.com/sethmlarson/socksio")
12714 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
12715 (description "The @code{socksio} Python module is a client-side sans-I/O
12716SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
12717@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
12718means the library itself does not handle the actual sending of the bytes
12719through the network, it only deals with the implementation details of the
12720SOCKS protocols. It can be paired with any I/O library.")
12721 (license license:expat)))
12722
12723(define-public python-simple-websocket
12724 (package
12725 (name "python-simple-websocket")
12726 (version "1.1.0")
12727 (source
12728 (origin
12729 (method url-fetch)
12730 (uri (pypi-uri "simple_websocket" version))
12731 (sha256
12732 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
12733 (build-system pyproject-build-system)
12734 (arguments
12735 ;; Requires Internet access to resolve example.com
12736 (list #:test-flags '(list "--ignore=tests/test_client.py")))
12737 (propagated-inputs (list python-wsproto))
12738 (native-inputs (list python-pytest
12739 python-setuptools))
12740 (home-page "https://github.com/miguelgrinberg/simple-websocket")
12741 (synopsis "Simple WebSocket server and client for Python")
12742 (description "This package provides a simple @code{WebSocket} server and
12743client for Python.")
12744 (license license:expat)))
12745
12746(define-public python-siosocks
12747 (package
12748 (name "python-siosocks")
12749 (version "0.3.0")
12750 (source
12751 (origin
12752 (method git-fetch)
12753 (uri (git-reference
12754 (url "https://github.com/pohmelie/siosocks")
12755 (commit (string-append "v" version))))
12756 (file-name (git-file-name name version))
12757 (sha256
12758 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
12759 (build-system pyproject-build-system)
12760 (native-inputs
12761 (list python-pytest
12762 python-pytest-asyncio
12763 python-pytest-trio
12764 python-setuptools))
12765 (propagated-inputs (list python-trio))
12766 (home-page "https://github.com/pohmelie/siosocks")
12767 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
12768 (description
12769 "This package provides a Python module and framework for sans-io socks proxy
12770client/server with couple io backends.
12771
12772Features:
12773@itemize
12774@item Only TCP connect (no BIND, no UDP)
12775@item Both client and server
12776@item SOCKS versions: 4, 4a, 5
12777@item SOCKSv5 auth: no auth, username/password
12778@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
12779@item One-shot socks server (@code{python -m siosocks})
12780@end itemize")
12781 (license license:expat)))
12782
12783(define-public python-tiny-proxy
12784 (package
12785 (name "python-tiny-proxy")
12786 (version "0.2.1")
12787 (source
12788 (origin
12789 (method url-fetch)
12790 (uri (pypi-uri "tiny_proxy" version))
12791 (sha256
12792 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
12793 (build-system pyproject-build-system)
12794 ;; There are only a handful of tests and they require the as yet
12795 ;; unpackaged httpx_socks.
12796 (arguments (list #:tests? #false))
12797 (propagated-inputs (list python-anyio))
12798 (native-inputs
12799 (list python-httpx
12800 python-pytest
12801 python-setuptools
12802 python-wheel))
12803 (home-page "https://github.com/romis2012/tiny-proxy")
12804 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
12805 (description "This package provides a simple proxy server (SOCKS4(a),
12806SOCKS5(h), HTTP tunnel).")
12807 (license license:asl2.0)))
12808
12809(define-public python-azure-nspkg
12810 (package
12811 (name "python-azure-nspkg")
12812 (version "3.0.2")
12813 (source
12814 (origin
12815 (method url-fetch)
12816 (uri (pypi-uri "azure-nspkg" version ".zip"))
12817 (sha256
12818 (base32
12819 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
12820 (build-system pyproject-build-system)
12821 (arguments (list #:tests? #f)) ;no tests in package
12822 (native-inputs (list unzip python-setuptools))
12823 (home-page "https://github.com/Azure/azure-sdk-for-python")
12824 (synopsis "Azure namespace internals")
12825 (description
12826 "This package is an internal Azure namespace package.")
12827 (license license:expat)))
12828
12829(define-public python-azure-storage-nspkg
12830 (package
12831 (name "python-azure-storage-nspkg")
12832 (version "3.1.0")
12833 (source
12834 (origin
12835 (method url-fetch)
12836 (uri (pypi-uri "azure-storage-nspkg" version))
12837 (sha256
12838 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
12839 (build-system pyproject-build-system)
12840 (arguments
12841 (list #:tests? #f)) ;no tests in PyPI archive
12842 (native-inputs (list python-setuptools))
12843 (propagated-inputs (list python-azure-nspkg))
12844 (home-page "https://github.com/Azure/azure-storage-python")
12845 (synopsis "Microsoft Azure Storage Namespace package")
12846 (description
12847 "This project provides a client library in Python that makes it easy to
12848communicate with Microsoft Azure Storage services.")
12849 (license license:expat)))
12850
12851(define-public python-azure-common
12852 (package
12853 (name "python-azure-common")
12854 (version "1.1.28")
12855 (source
12856 (origin
12857 (method url-fetch)
12858 (uri (pypi-uri "azure-common" version ".zip"))
12859 (sha256
12860 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
12861 (build-system pyproject-build-system)
12862 (arguments
12863 (list #:tests? #f)) ;no tests in PyPI archive
12864 (propagated-inputs (list python-azure-nspkg))
12865 (native-inputs (list python-setuptools unzip))
12866 (home-page "https://github.com/Azure/azure-sdk-for-python")
12867 (synopsis "Microsoft Azure Client library for Python")
12868 (description "This package provides the Microsoft Azure Client library for
12869Python.")
12870 (license license:expat)))
12871
12872(define-public python-azure-core
12873 (package
12874 (name "python-azure-core")
12875 (version "1.32.0")
12876 (source
12877 (origin
12878 (method url-fetch)
12879 (uri (pypi-uri "azure_core" version))
12880 (sha256
12881 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
12882 (build-system pyproject-build-system)
12883 (arguments
12884 (list
12885 #:test-flags
12886 `(list ;; This fails because devtools_testutils doesn't exist.
12887 "--ignore=tests/test_connection_string_parsing.py"
12888 ;; These all need network access.
12889 "--ignore=samples"
12890 "--ignore=tests/async_tests/test_streaming_async.py"
12891 "--ignore=tests/test_streaming.py"
12892 "-m" "not asyncio and not live_test_only"
12893 "-k" ,(string-append
12894 "not test_decompress_plain_no_header"
12895 " and not test_compress_plain_no_header"
12896 " and not test_decompress_compressed_no_header"
12897 " and not test_requests_socket_timeout"))
12898 #:phases
12899 #~(modify-phases %standard-phases
12900 (add-before 'check 'add-test-pythonpath
12901 (lambda* (#:key tests? #:allow-other-keys)
12902 (when tests?
12903 (setenv "PYTHONPATH"
12904 (string-append
12905 (getcwd) "/tests/testserver_tests/coretestserver:"
12906 (getenv "GUIX_PYTHONPATH")))))))))
12907 (propagated-inputs
12908 (list python-aiohttp
12909 python-requests
12910 python-six
12911 python-typing-extensions))
12912 (native-inputs
12913 (list python-flask
12914 python-pytest-8
12915 python-pytest-aiohttp
12916 python-pytest-asyncio
12917 python-pytest-trio
12918 python-setuptools
12919 python-wheel))
12920 (home-page "https://github.com/Azure/azure-sdk-for-python")
12921 (synopsis "Microsoft Azure Core library for Python")
12922 (description "This package provides the Microsoft Azure Core library for
12923Python.")
12924 (license license:expat)))
12925
12926(define-public python-azure-storage-blob
12927 (package
12928 (name "python-azure-storage-blob")
12929 (version "12.27.0")
12930 (source
12931 (origin
12932 (method url-fetch)
12933 (uri (pypi-uri "azure_storage_blob" version))
12934 (sha256
12935 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
12936 (build-system pyproject-build-system)
12937 (arguments
12938 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12939 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12940 ;; it hard to package in Guix.
12941 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12942 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12943 (list #:tests? #f))
12944 (native-inputs
12945 (list python-setuptools))
12946 (propagated-inputs
12947 (list python-azure-core
12948 python-cryptography
12949 python-isodate
12950 python-typing-extensions))
12951 (home-page "https://github.com/Azure/azure-sdk-for-python/")
12952 (synopsis "Microsoft Azure Blob Storage client library for Python")
12953 (description "This package provides the Microsoft Azure Blob Storage
12954Client Library for Python.")
12955 (license license:expat)))
12956
12957(define-public python-azure-storage-file-datalake
12958 (package
12959 (name "python-azure-storage-file-datalake")
12960 (version "12.22.0")
12961 (source
12962 (origin
12963 (method url-fetch)
12964 (uri (pypi-uri "azure_storage_file_datalake" version))
12965 (sha256
12966 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
12967 (build-system pyproject-build-system)
12968 (arguments
12969 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12970 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12971 ;; it hard to package in Guix.
12972 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12973 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12974 (list #:tests? #f))
12975 (native-inputs
12976 (list python-setuptools))
12977 (propagated-inputs
12978 (list python-azure-core
12979 python-azure-storage-blob
12980 python-isodate
12981 python-typing-extensions))
12982 (home-page "https://github.com/Azure/azure-sdk-for-python")
12983 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
12984 (description
12985 "This package provides the Microsoft Azure File @code{DataLake} Storage
12986Client Library for Python.")
12987 (license license:expat)))
12988
12989(define-public python-google-auth
12990 (package
12991 (name "python-google-auth")
12992 (version "2.56.0")
12993 (source
12994 (origin
12995 (method url-fetch)
12996 (uri (pypi-uri "google_auth" version))
12997 (sha256
12998 (base32 "0lx5cw49lfjqvd9vx1vlslrxyh9q0xd6d46np5a2dab9nlqa03zr"))))
12999 (build-system pyproject-build-system)
13000 (propagated-inputs
13001 (list python-aiohttp
13002 python-cryptography
13003 python-pyasn1-modules
13004 python-requests
13005 python-rsa
13006 python-urllib3))
13007 (native-inputs
13008 (list nss-certs-for-test
13009 python-aiohttp
13010 python-aioresponses
13011 python-flask
13012 python-freezegun
13013 python-grpcio
13014 python-oauth2client
13015 python-packaging
13016 python-pyjwt
13017 python-pyopenssl
13018 python-pytest
13019 python-pytest-asyncio
13020 python-pytest-localserver
13021 python-pyu2f
13022 python-requests
13023 python-responses
13024 python-rsa
13025 python-setuptools
13026 python-urllib3))
13027 (home-page "https://github.com/googleapis/google-auth-library-python")
13028 (synopsis "Google Authentication Library")
13029 (description "This library simplifies using Google's various
13030server-to-server authentication mechanisms to access Google APIs.")
13031 (license license:asl2.0)))
13032
13033(define-public python-google-resumable-media
13034 (package
13035 (name "python-google-resumable-media")
13036 (version "2.8.0")
13037 (source
13038 (origin
13039 (method git-fetch)
13040 (uri (git-reference
13041 (url
13042 "https://github.com/googleapis/google-resumable-media-python")
13043 (commit (string-append "v" version))))
13044 (file-name (git-file-name name version))
13045 (sha256
13046 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
13047 (build-system pyproject-build-system)
13048 (arguments
13049 (list
13050 #:test-flags
13051 #~(list
13052 ;; XXX: Missing test_utils.retry.
13053 "--ignore-glob=tests*/system/"
13054 ;; XXX: md5_hash is not mock.sentinel.md5_hash
13055 "-k" (string-join
13056 (list "not test_brotli"
13057 "test_constructor"
13058 "test_decompress")
13059 " and not "))))
13060 (propagated-inputs (list python-google-crc32c))
13061 (native-inputs
13062 (list python-google-auth
13063 python-mock
13064 python-pytest
13065 python-pytest-asyncio
13066 python-setuptools
13067 python-test-utils))
13068 (home-page "https://github.com/googleapis/google-resumable-media-python")
13069 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
13070 (description "This package provides utilities for Google Media Downloads
13071and Resumable Uploads.")
13072 (license license:asl2.0)))
13073
13074(define-public python-googleapis-common-protos
13075 (package
13076 (name "python-googleapis-common-protos")
13077 (version "1.66.0")
13078 (source
13079 (origin
13080 (method git-fetch)
13081 (uri (git-reference
13082 (url "https://github.com/googleapis/python-api-common-protos")
13083 (commit (string-append "v" version))))
13084 (file-name (git-file-name name version))
13085 (sha256
13086 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
13087 (build-system pyproject-build-system)
13088 (propagated-inputs (list python-protobuf))
13089 (native-inputs (list python-pytest python-setuptools))
13090 (home-page "https://github.com/googleapis/python-api-common-protos")
13091 (synopsis "Common protobufs used in Google APIs")
13092 (description
13093 "This package contains Python classes generated from the common protos in
13094the @code{googleapis/api-common-protos} repository.")
13095 (license license:asl2.0)))
13096
13097(define-public python-google-api-core
13098 (package
13099 (name "python-google-api-core")
13100 (version "2.29.0")
13101 (source
13102 (origin
13103 (method git-fetch)
13104 (uri (git-reference
13105 (url "https://github.com/googleapis/python-api-core")
13106 (commit (string-append "v" version))))
13107 (file-name (git-file-name name version))
13108 (sha256
13109 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
13110 (build-system pyproject-build-system)
13111 (arguments
13112 (list
13113 #:test-flags
13114 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13115 ;; deprecated and scheduled for removal in a future version. Use
13116 ;; timezone-aware objects to represent datetimes in UTC:
13117 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13118 #~(list "-W" "ignore::DeprecationWarning")))
13119 (propagated-inputs
13120 (list python-google-auth
13121 python-googleapis-common-protos
13122 python-protobuf
13123 python-proto-plus
13124 python-requests))
13125 (native-inputs
13126 (list python-mock
13127 python-pytest
13128 python-pytest-asyncio
13129 python-pytest-mock
13130 python-setuptools))
13131 (home-page "https://github.com/googleapis/python-api-core")
13132 (synopsis "Google API client core library")
13133 (description
13134 "This library defines common helpers used by all Google API clients.")
13135 (license license:asl2.0)))
13136
13137(define-public python-google-cloud-core
13138 (package
13139 (name "python-google-cloud-core")
13140 (version "2.5.0")
13141 (source
13142 (origin
13143 (method git-fetch)
13144 (uri (git-reference
13145 (url "https://github.com/googleapis/python-cloud-core")
13146 (commit (string-append "v" version))))
13147 (file-name (git-file-name name version))
13148 (sha256
13149 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
13150 (build-system pyproject-build-system)
13151 (arguments
13152 (list
13153 #:test-flags
13154 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13155 ;; deprecated and scheduled for removal in a future version. Use
13156 ;; timezone-aware objects to represent datetimes in UTC:
13157 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13158 #~(list "-W" "ignore::DeprecationWarning")))
13159 (propagated-inputs (list python-google-api-core python-google-auth))
13160 (native-inputs
13161 (list python-grpcio
13162 python-grpcio-status
13163 python-pytest
13164 python-setuptools))
13165 (home-page "https://github.com/googleapis/python-cloud-core")
13166 (synopsis "Google Cloud API client core library")
13167 (description
13168 "This library defines common helpers (e.g. base @code{Client} classes)
13169used by all of the @code{google-cloud-*} packages.")
13170 (license license:asl2.0)))
13171
13172(define-public python-google-cloud-storage
13173 (package
13174 (name "python-google-cloud-storage")
13175 (version "2.19.0")
13176 (source
13177 (origin
13178 (method git-fetch)
13179 (uri (git-reference
13180 (url "https://github.com/googleapis/python-storage")
13181 (commit (string-append "v" version))))
13182 (file-name (git-file-name name version))
13183 (sha256
13184 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
13185 (build-system pyproject-build-system)
13186 (arguments
13187 (list
13188 #:test-flags
13189 #~(list
13190 ;; XXX: Missing test_utils.retry.
13191 "--ignore=tests/system/"
13192 ;; Needs docker.
13193 "--ignore=tests/conformance/"
13194 ;; XXX: Deprecations.
13195 "-k" (string-join
13196 (list "not test_set_api_request_attr"
13197 "test_create_bucket_w_custom_endpoint"
13198 "test_ctor_w_api_endpoint_override"
13199 "test_ctor_w_custom_endpoint_use_auth"
13200 "test_list_buckets_w_custom_endpoint")
13201 " and not ")
13202 "tests")))
13203 (native-inputs
13204 (list python-googleapis-common-protos
13205 python-mock
13206 python-pytest
13207 python-test-utils
13208 python-setuptools))
13209 (propagated-inputs
13210 (list python-google-api-core
13211 python-google-auth
13212 python-google-cloud-core
13213 python-google-resumable-media
13214 python-protobuf
13215 python-requests))
13216 (home-page "https://github.com/googleapis/python-storage")
13217 (synopsis "Google Cloud Storage API client library")
13218 (description
13219 "Google Cloud Storage allows you to store data on Google infrastructure,
13220and it can be used to distribute large data objects to users via direct
13221download. This package provides a Google Cloud Storage API client library for
13222Python.")
13223 (license license:asl2.0)))
13224
13225(define-public python-smart-open
13226 (package
13227 (name "python-smart-open")
13228 (version "7.3.0")
13229 (source
13230 (origin
13231 (method git-fetch) ;no tests in PyPI archive
13232 (uri (git-reference
13233 (url "https://github.com/piskvorky/smart_open")
13234 (commit (string-append "v" version))))
13235 (file-name (git-file-name name version))
13236 (sha256
13237 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
13238 (build-system pyproject-build-system)
13239 (arguments
13240 (list
13241 #:test-flags
13242 #~(list "--ignore=ci_helpers/"
13243 "--ignore=integration-tests/"
13244 ;; FIXME: Enable when guix/guix#1436 is resolved.
13245 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
13246 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
13247 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
13248 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
13249 "--ignore=tests/test_gcs.py")))
13250 (propagated-inputs
13251 (list python-azure-common
13252 python-azure-core
13253 python-azure-storage-blob
13254 python-boto3
13255 ;; python-google-cloud-storage ;see guix/guix#1436
13256 python-paramiko
13257 python-requests
13258 python-wrapt
13259 python-zstandard))
13260 (native-inputs
13261 (list python-numpy
13262 python-moto
13263 python-pytest
13264 python-pytest-rerunfailures
13265 python-responses
13266 python-setuptools
13267 python-setuptools-scm
13268 python-wheel))
13269 (home-page "https://github.com/piskvorky/smart_open")
13270 (synopsis "Utilities for streaming large files")
13271 (description
13272 "This package provides utilities for streaming large files (S3, HDFS,
13273GCS, Azure Blob Storage, gzip, bz2, etc.)")
13274 (license license:expat)))
13275
13276(define-public python-smart-open-6
13277 (package
13278 (inherit python-smart-open)
13279 (name "python-smart-open")
13280 (version "6.4.0")
13281 (source
13282 (origin
13283 (method git-fetch)
13284 (uri (git-reference
13285 (url "https://github.com/piskvorky/smart_open")
13286 (commit (string-append "v" version))))
13287 (file-name (git-file-name name version))
13288 (sha256
13289 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
13290 (arguments
13291 (list
13292 ;; XXX: Tests need some older native inputs, disable for now.
13293 #:tests? #f))))
13294
13295(define-public python-w3lib
13296 (package
13297 (name "python-w3lib")
13298 (version "2.3.1")
13299 (source
13300 (origin
13301 (method url-fetch)
13302 (uri (pypi-uri "w3lib" version))
13303 (sha256
13304 (base32
13305 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
13306 (build-system pyproject-build-system)
13307 (native-inputs
13308 (list python-pytest python-setuptools python-wheel))
13309 (home-page "https://github.com/scrapy/w3lib")
13310 (synopsis "Python library of web-related functions")
13311 (description
13312 "This is a Python library of web-related functions, such as: remove
13313comments, or tags from HTML snippets, extract base url from HTML snippets,
13314translate entities on HTML strings, among other things.")
13315 (license license:bsd-3)))
13316
13317(define-public python-webcolors
13318 (package
13319 (name "python-webcolors")
13320 (version "25.10.0")
13321 (source
13322 (origin
13323 (method git-fetch)
13324 (uri (git-reference
13325 (url "https://github.com/ubernostrum/webcolors")
13326 (commit version)))
13327 (sha256
13328 (base32 "1wknzir5252y30wcpwxb04ngmrdw1llzqmrpiajyhkm81x2lgrym"))))
13329 (build-system pyproject-build-system)
13330 (native-inputs
13331 (list python-pdm-backend python-pytest))
13332 (home-page "https://github.com/ubernostrum/webcolors")
13333 (synopsis "HTML/CSS color definitions library")
13334 (description "@code{python-webcolors} is a module for working with
13335HTML/CSS color definitions. Normalizing and converting between the following
13336formats is supported.
13337@itemize
13338@item Specification-defined color names
13339@item Six-digit hexadecimal
13340@item Three-digit hexadecimal
13341@item Integer rgb() triplet
13342@item Percentage rgb() triplet
13343@end itemize
13344Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
13345can be handled by the @code{colorsys} module in the Python standard library.")
13346 (license license:bsd-3)))
13347
13348(define-public python-woob
13349 ;; TODO: woob requires backends which are currently installed on the fly in
13350 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
13351 ;; them in the store instead. Many modules are included in the modules
13352 ;; directory in the source tree, but it is unclear how to install them.
13353 ;; Many modules require extra dependencies though, so maybe they should be
13354 ;; packaged independently of woob itself.
13355 (package
13356 (name "python-woob")
13357 (version "3.7")
13358 (source
13359 (origin
13360 (method git-fetch)
13361 (uri (git-reference
13362 (url "https://gitlab.com/woob/woob.git")
13363 (commit version)))
13364 (file-name (git-file-name name version))
13365 (sha256
13366 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
13367 (build-system pyproject-build-system)
13368 (arguments
13369 (list
13370 #:test-flags
13371 ;; Deselect tests that require DNS lookup.
13372 #~(list
13373 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
13374 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
13375 #:phases
13376 #~(modify-phases %standard-phases
13377 (add-before 'build 'relax-requirements
13378 (lambda _
13379 (substitute* "pyproject.toml"
13380 ;; packaging ~= 23.0
13381 (("\"packaging .*\",")
13382 "")
13383 ;; rich~=13.0
13384 (("\"rich .*\",")
13385 "\"rich\",")))))))
13386 (native-inputs
13387 (list nss-certs-for-test
13388 python-pytest
13389 python-setuptools))
13390 (propagated-inputs
13391 (list python-babel
13392 python-colorama
13393 python-cssselect
13394 python-dateutil
13395 python-feedparser
13396 python-html2text
13397 python-lxml
13398 python-packaging
13399 python-pillow
13400 python-prettytable
13401 python-pycountry
13402 python-pyyaml
13403 python-requests
13404 python-responses
13405 python-rich
13406 python-termcolor
13407 python-unidecode))
13408 (home-page "https://woob.tech/")
13409 (synopsis "Woob, Web Outside Of Browsers")
13410 (description
13411 "Woob is a collection of applications able to interact with
13412websites, without requiring the user to open them in a browser. It also
13413provides well-defined APIs to talk to websites lacking one.")
13414 (license license:lgpl3+)))
13415
13416(define-public python-flask-combo-jsonapi
13417 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
13418 (revision "0"))
13419 (package
13420 (name "python-flask-combo-jsonapi")
13421 (version (git-version "1.1.0" revision commit))
13422 (source
13423 (origin
13424 (method git-fetch)
13425 (uri (git-reference
13426 (url "https://github.com/AdCombo/flask-combo-jsonapi")
13427 (commit commit)))
13428 (file-name (git-file-name name version))
13429 (sha256
13430 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
13431 (build-system pyproject-build-system)
13432 (arguments
13433 (list
13434 #:test-flags
13435 #~(list
13436 "-k"
13437 (string-join
13438 (list
13439 ;; XXX: This tests a feature that doesn't make sense when dropping
13440 ;; marshmallow < 3 support.
13441 "not test_compute_schema_propagate_context"
13442 ;; The following tests fail for unknown reasons (see:
13443 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
13444 "test_get_list_with_simple_filter_relationship_custom_qs_api"
13445 "test_get_list_with_simple_filter_relationship_error")
13446 " and not "))
13447 #:phases
13448 #~(modify-phases %standard-phases
13449 (add-after 'unpack 'loosen-requirements
13450 (lambda _
13451 ;; Don't pin specific versions of dependencies.
13452 (substitute* "requirements.txt"
13453 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
13454 (string-append dep "\n"))
13455 (("^marshmallow_jsonapi[=<>].*")
13456 "marshmallow_jsonapi_minfork\n"))
13457 ;; Drop support for marshmallow < 3.
13458 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
13459 "flask_combo_jsonapi/schema.py")
13460 (("from marshmallow\\.base import SchemaABC")
13461 "from marshmallow import Schema")
13462 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
13463 "if isinstance(related_schema_cls, Schema):"))
13464 (substitute* "tests/test_sqlalchemy_data_layer.py"
13465 (("default=None")
13466 "dump_default=None")
13467 (("missing=")
13468 "load_default=")))))))
13469 (propagated-inputs
13470 (list python-flask
13471 python-marshmallow
13472 python-marshmallow-jsonapi
13473 python-simplejson
13474 python-sqlalchemy
13475 python-apispec
13476 python-simplejson
13477 python-six))
13478 (native-inputs
13479 (list python-pytest python-setuptools))
13480 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
13481 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
13482 (description
13483 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
13484APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
13485specification.
13486
13487It tries to combine the power of Flask-Restless with the flexibility of
13488Flask-RESTful to quickly build APIs that fit the complexity of existing
13489real-life projects with legacy data and diverse storage providers.")
13490 (license license:expat))))
13491
13492(define-public python-mwparserfromhell
13493 (package
13494 (name "python-mwparserfromhell")
13495 (version "0.7.2")
13496 (source
13497 (origin
13498 (method git-fetch)
13499 (uri (git-reference
13500 (url "https://github.com/earwig/mwparserfromhell")
13501 (commit (string-append "v" version))))
13502 (file-name (git-file-name name version))
13503 (sha256
13504 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
13505 (build-system pyproject-build-system)
13506 (native-inputs (list python-pytest python-setuptools))
13507 (home-page "https://github.com/earwig/mwparserfromhell")
13508 (synopsis "Python parser for MediaWiki wikicode")
13509 (description
13510 "The MediaWiki Parser From Hell is a python library package that provides
13511a parser for MediaWiki.
13512
13513It exposes parses as normal string objects with additional methods giving
13514access to the special Wikicode features it contains (hyperlinks, tags,
13515templates…). The parser doesn't interpolate strings at all, it remains at a
13516purely formal level.
13517
13518Full documentation may be found at
13519@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
13520 (license license:expat)))
13521
13522(define-public python-tweepy
13523 (package
13524 (name "python-tweepy")
13525 (version "4.16.0")
13526 (source
13527 (origin
13528 (method git-fetch)
13529 (uri
13530 (git-reference
13531 (url "https://github.com/tweepy/tweepy")
13532 (commit (string-append "v" version))))
13533 (file-name (git-file-name name version))
13534 (sha256
13535 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
13536 (build-system pyproject-build-system)
13537 (arguments
13538 ;; tests: 149 passed, 3 skipped, 1 warning
13539 (list #:test-backend #~'unittest
13540 #:test-flags #~(list "discover" "tests")))
13541 (native-inputs
13542 (list nss-certs-for-test
13543 python-flit-core
13544 python-urllib3-1.26
13545 python-vcrpy))
13546 (propagated-inputs
13547 (list python-aiohttp
13548 python-async-lru
13549 python-oauthlib
13550 python-requests
13551 python-requests-oauthlib))
13552 (home-page "https://www.tweepy.org/")
13553 (synopsis "Twitter library for Python")
13554 (description
13555 "This package provides @code{Tweepy}, an easy-to-use Python library for
13556accessing the Twitter API.")
13557 (license license:expat)))
13558
13559(define-public python-quart
13560 (package
13561 (name "python-quart")
13562 (version "0.20.0")
13563 (source
13564 (origin
13565 (method git-fetch)
13566 (uri (git-reference
13567 (url "https://github.com/pallets/quart")
13568 (commit version)))
13569 (file-name (git-file-name name version))
13570 (sha256
13571 (base32 "1gk6vg2cwpn70aald3m50xibjqjamgpz7an11h82w1fig6zmw2il"))))
13572 (build-system pyproject-build-system)
13573 (arguments
13574 (list
13575 #:test-flags
13576 ;; Not sure why test fails; related to a change in dependencies.
13577 #~(list "-k" "not test_cli_blueprints[cli_group2-args2]")))
13578 (native-inputs
13579 (list python-flit-core
13580 python-pytest
13581 python-pytest-asyncio))
13582 (propagated-inputs
13583 (list hypercorn
13584 python-aiofiles
13585 python-blinker
13586 python-click
13587 python-dotenv
13588 python-flask
13589 python-itsdangerous
13590 python-jinja2
13591 python-markupsafe
13592 python-toml
13593 python-werkzeug))
13594 (home-page "https://gitlab.com/pgjones/quart/")
13595 (synopsis "Python ASGI web microframework with the same API as Flask")
13596 (description
13597 "This package provides a Python ASGI web microframework with the same API
13598as Flask.")
13599 (license license:expat)))
13600
13601(define-public python-quart-trio
13602 (package
13603 (name "python-quart-trio")
13604 (version "0.12.0")
13605 (source
13606 (origin
13607 (method url-fetch)
13608 (uri (pypi-uri "quart_trio" version))
13609 (sha256
13610 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
13611 (build-system pyproject-build-system)
13612 (arguments
13613 (list
13614 #:phases
13615 #~(modify-phases %standard-phases
13616 (add-after 'unpack 'remove-coverage-pytest-options
13617 (lambda _
13618 (substitute* "pyproject.toml"
13619 (("--no-cov-on-fail") "")))))))
13620 (native-inputs
13621 (list python-pdm-backend
13622 python-pytest
13623 python-pytest-sugar
13624 python-pytest-trio))
13625 (propagated-inputs
13626 (list hypercorn
13627 python-quart
13628 python-trio))
13629 (home-page "https://github.com/pgjones/quart-trio")
13630 (synopsis "Extension for Quart to support the Trio event loop")
13631 (description
13632 "This package provides a Quart extension to provide Trio support. This
13633is an alternative to using the asyncio event loop present in the Python
13634standard library and supported by default in Quart.")
13635 (license license:expat)))
13636
13637(define-public python-ajsonrpc
13638 (package
13639 (name "python-ajsonrpc")
13640 (version "1.2.0")
13641 (source
13642 (origin
13643 (method git-fetch)
13644 (uri (git-reference
13645 (url "https://github.com/pavlov99/ajsonrpc")
13646 (commit version)))
13647 (file-name (git-file-name name version))
13648 (sha256
13649 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
13650 (build-system pyproject-build-system)
13651 (arguments
13652 (list
13653 #:phases
13654 #~(modify-phases %standard-phases
13655 (add-after 'unpack 'set-version
13656 (lambda _
13657 (substitute* "ajsonrpc/__init__.py"
13658 (("^__version__ = .*")
13659 (string-append "__version__ = \"" #$version "\"\n"))))))))
13660 (native-inputs
13661 (list python-pytest
13662 python-setuptools))
13663 (propagated-inputs
13664 (list python-quart
13665 python-sanic
13666 python-tornado))
13667 (home-page "https://github.com/pavlov99/ajsonrpc")
13668 (synopsis "Async JSON-RPC 2.0 protocol and server")
13669 (description
13670 "This package provides a Python JSON-RPC 2.0 protocol and server powered
13671by asyncio.")
13672 (license license:expat)))
13673
13674(define-public python-protego
13675 (package
13676 (name "python-protego")
13677 (version "0.4.0")
13678 (source
13679 (origin
13680 (method url-fetch)
13681 (uri (pypi-uri "protego" version))
13682 (sha256
13683 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
13684 (build-system pyproject-build-system)
13685 (native-inputs (list python-pytest python-setuptools python-wheel))
13686 (home-page "https://github.com/scrapy/protego")
13687 (synopsis "Python robots.txt parser with support for modern conventions")
13688 (description "Protego is a pure-Python @file{robots.txt} parser with support
13689for modern conventions.")
13690 (license license:bsd-3)))
13691
13692(define-public python-parsel
13693 (package
13694 (name "python-parsel")
13695 (version "1.10.0")
13696 (source
13697 (origin
13698 (method url-fetch)
13699 (uri (pypi-uri "parsel" version))
13700 (sha256
13701 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
13702 (build-system pyproject-build-system)
13703 (propagated-inputs
13704 (list python-cssselect
13705 python-jmespath
13706 python-lxml
13707 python-typing-extensions
13708 python-w3lib))
13709 (native-inputs
13710 (list python-psutil python-pytest python-setuptools python-wheel))
13711 (home-page "https://github.com/scrapy/parsel")
13712 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
13713 (description "Parsel is a library to extract and remove data from
13714HTML and XML using XPath and CSS selectors, optionally combined with
13715regular expressions.")
13716 (license license:bsd-3)))
13717
13718(define-public python-scrapy
13719 (package
13720 (name "python-scrapy")
13721 (version "2.13.3")
13722 (source
13723 (origin
13724 (method url-fetch)
13725 (uri (pypi-uri "scrapy" version))
13726 (sha256
13727 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
13728 (build-system pyproject-build-system)
13729 (arguments
13730 (list #:test-flags
13731 #~(list "--numprocesses" (number->string (parallel-job-count))
13732 "-k" (string-join
13733 ;; ConnectionRefusedError: [Errno 111] Connection
13734 ;; refused
13735 (list "not test_append"
13736 "test_append_active_mode"
13737 "test_overwrite"
13738 "test_overwrite_active_mode"
13739 "test_persist"
13740 ;; AssertionError
13741 "test_start_deprecated_super")
13742 " and not ")
13743 ;; Skip documentation testing.
13744 "--ignore=docs")
13745 #:phases
13746 #~(modify-phases %standard-phases
13747 (add-before 'check 'prepare-test-environment
13748 (lambda _
13749 (setenv "HOME" "/tmp"))))))
13750 (propagated-inputs
13751 (list python-cryptography
13752 python-cssselect
13753 python-defusedxml
13754 python-itemadapter
13755 python-itemloaders
13756 python-lxml
13757 python-packaging
13758 python-parsel
13759 python-protego
13760 python-pydispatcher
13761 python-pyopenssl
13762 python-pypydispatcher
13763 python-queuelib
13764 python-service-identity
13765 python-tldextract
13766 python-twisted
13767 python-w3lib
13768 python-zope-interface))
13769 (native-inputs
13770 (list nss-certs-for-test
13771 python-hatchling
13772 python-pexpect
13773 python-pytest
13774 python-pytest-xdist
13775 python-setuptools
13776 python-sybil
13777 python-testfixtures))
13778 (home-page "https://scrapy.org")
13779 (synopsis "High-level Web crawling and Web scraping framework")
13780 (description "Scrapy is a fast high-level web crawling and web
13781scraping framework, used to crawl websites and extract structured data
13782from their pages. It can be used for a wide range of purposes, from data
13783mining to monitoring and automated testing.")
13784 (license license:bsd-3)))
13785
13786(define sdmx-test-data
13787 (let* ((commit "cd7899341b46e179e9f19b638478d70197e12c74")
13788 (revision "1")
13789 (name "sdmx-test-data")
13790 (version (git-version "0" revision commit)))
13791 (origin
13792 (method git-fetch)
13793 (uri (git-reference
13794 (url "https://github.com/khaeru/sdmx-test-data")
13795 (commit commit)))
13796 (file-name (git-file-name name version))
13797 (sha256
13798 (base32 "1n9y83raxxpgljbi0wjj27lhmyn19fnc2325a6cchwsa3b65ywv7")))))
13799
13800(define-public python-sdmx1
13801 (package
13802 (name "python-sdmx1")
13803 (version "2.26.0")
13804 (source
13805 (origin
13806 (method git-fetch)
13807 (uri (git-reference
13808 (url "https://github.com/khaeru/sdmx")
13809 (commit (string-append "v" version))))
13810 (file-name (git-file-name name version))
13811 (sha256
13812 (base32 "096c60pxzcw71bc9fj3hpjprrdiia365rqalapxx56g6g1vkgka9"))))
13813 (build-system pyproject-build-system)
13814 (arguments
13815 (list
13816 #:test-flags
13817 #~(list
13818 ;; 804 passed, 122 skipped, 28 deselected, 23 xfailed, 1 xpassed, 3 warnings
13819 ;; XXX: 'Version' object has no attribute 'pre'
13820 "--ignore=sdmx/tests/model/test_version.py"
13821 ;; Most of these tests require network connection.
13822 "--ignore=sdmx/tests/test_client.py"
13823 "--ignore=sdmx/tests/test_sources.py"
13824 "--ignore=sdmx/tests/test_docs.py"
13825 "--ignore=sdmx/tests/test_session.py"
13826 "--ignore=sdmx/tests/writer/test_xml.py"
13827 "--ignore=sdmx/tests/reader/test_xml_v21.py"
13828 "--deselect=sdmx/tests/convert/test_pandas.py::test_dataset_constraint"
13829 ;; Wrong python-flaky version
13830 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas_in_user_cache"
13831 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas"
13832 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v2_1_samples"
13833 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v3_0_samples"
13834 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_doc"
13835 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_message_type"
13836 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_max_errors"
13837 ;; sqlite3.OperationalError
13838 "--deselect=sdmx/tests/util/test_requests.py::TestOfflineAdapter::test_raises")
13839 #:phases
13840 #~(modify-phases %standard-phases
13841 (add-after 'unpack 'fix-version
13842 (lambda _
13843 ;; versioningit needs git tags; patch pyproject.toml to use
13844 ;; static version and create _version.py directly.
13845 (substitute* "pyproject.toml"
13846 (("version.source = \"versioningit\"")
13847 "
13848[tool.hatch.version]
13849path = \"sdmx/_version.py\"")
13850 ((", \"versioningit\"")
13851 ""))
13852 (call-with-output-file "sdmx/_version.py"
13853 (lambda (port)
13854 (format port "__version__ = \"~a\"~%" #$version)))))
13855 (add-before 'check 'pre-check
13856 (lambda _
13857 (setenv "SDMX_TEST_DATA" #$sdmx-test-data)
13858 (setenv "HOME" (dirname (getcwd))))))))
13859 (propagated-inputs
13860 (list python-dateutil
13861 python-lxml
13862 python-pandas
13863 python-platformdirs
13864 python-requests))
13865 (native-inputs
13866 (list python-filelock
13867 python-flaky
13868 python-hatchling
13869 python-jinja2
13870 python-pyarrow
13871 python-pytest
13872 python-pytest-cov
13873 python-pytest-xdist
13874 python-requests-mock
13875 python-requests-cache
13876 python-responses))
13877 (home-page "https://sdmx1.readthedocs.io")
13878 (synopsis "Statistical Data and Metadata eXchange (SDMX) for Python")
13879 (description "This package provides a Python implementation of the
13880SDMX 2.1 and 3.0 standards for Statistical Data and Metadata eXchange.
13881These standards are developed and used by statistical agencies and
13882international organisations. This package can be used to:
13883@itemize
13884@item Explore and retrieve data available from SDMX-REST web services
13885operated by providers including the World Bank, International Monetary
13886Fund, Eurostat, OECD, and United Nations;
13887@item Read and write data and metadata in file formats including
13888SDMX-ML (XML), SDMX-JSON, and SDMX-CSV;
13889@item Convert data and metadata into @code{python-pandas} objects, for
13890use with the analysis, plotting, and other tools in the Python data
13891science ecosystem;
13892@item Apply the SDMX information model (IM) to structure and publish
13893your own data.
13894@end itemize")
13895 (license license:asl2.0)))
13896
13897(define-public python-jstyleson
13898 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
13899 (revision "0"))
13900 (package
13901 (name "python-jstyleson")
13902 (version (git-version "0.0.2" revision commit))
13903 (source
13904 (origin
13905 (method git-fetch)
13906 (uri (git-reference
13907 (url "https://github.com/linjackson78/jstyleson")
13908 (commit commit)))
13909 (file-name (git-file-name name version))
13910 (sha256
13911 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
13912 (build-system pyproject-build-system)
13913 (native-inputs (list python-pytest python-setuptools))
13914 (home-page "https://github.com/linjackson78/jstyleson")
13915 (synopsis "JSON parser supporting js-style comments")
13916 (description
13917 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
13918standard Python @code{json} library, it understands js-style comments.
13919Trailing comma is also supported.")
13920 (license license:expat))))
13921
13922(define-public python-html-text
13923 (package
13924 (name "python-html-text")
13925 (version "0.7.0")
13926 (source
13927 (origin
13928 (method url-fetch)
13929 (uri (pypi-uri "html_text" version))
13930 (sha256
13931 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
13932 (build-system pyproject-build-system)
13933 (native-inputs
13934 (list python-pytest
13935 python-setuptools
13936 python-wheel))
13937 (propagated-inputs
13938 (list python-lxml
13939 python-lxml-html-clean))
13940 (home-page "https://github.com/TeamHG-Memex/html-text")
13941 (synopsis "Extract text from HTML")
13942 (description "HTML to Text is a Python library for extract text from HTML.
13943Contrary to other solution such as LXML or Beautiful Soup, the text extracted
13944with @code{html_text} does not contain elements such as JavaScript or inline
13945styles not normally visible to users. It also normalizes white space
13946characters in a smarter, more visually pleasing style.")
13947 (license license:expat)))
13948
13949(define-public python-mf2py
13950 (package
13951 (name "python-mf2py")
13952 (version "2.0.1")
13953 (source
13954 (origin
13955 (method git-fetch)
13956 (uri (git-reference
13957 (url "https://github.com/microformats/mf2py")
13958 (commit (string-append "v" version))))
13959 (file-name (git-file-name name version))
13960 (sha256
13961 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
13962 (build-system pyproject-build-system)
13963 (native-inputs (list python-mock python-poetry-core python-pytest))
13964 (propagated-inputs
13965 (list python-beautifulsoup4 python-html5lib python-requests))
13966 (home-page "https://github.com/microformats/mf2py")
13967 (synopsis "Python Microformats2 parser")
13968 (description
13969 "This Python library provides a Microformats2 parser implementing the
13970full Microformats2 (mf2) specification, including backward compatibility with
13971Microformats1 (mf1).")
13972 (license license:expat)))
13973
13974(define-public python-extruct
13975 (package
13976 (name "python-extruct")
13977 (version "0.18.0")
13978 (source (origin
13979 (method git-fetch) ;for tests
13980 (uri (git-reference
13981 (url "https://github.com/scrapinghub/extruct")
13982 (commit (string-append "v" version))))
13983 (file-name (git-file-name name version))
13984 (sha256
13985 (base32
13986 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
13987 (build-system pyproject-build-system)
13988 (arguments
13989 (list
13990 #:test-flags
13991 ;; 67 passed, 3 deselected
13992 ;; XXX: 3 tests fail with errors in assertion.
13993 #~(list "-k" (string-append
13994 "not test_microformat"
13995 " and not test_microformat"
13996 " and not test_umicroformat"))))
13997 (native-inputs
13998 (list python-pytest
13999 python-setuptools
14000 python-wheel))
14001 (propagated-inputs
14002 (list python-html-text
14003 python-jstyleson
14004 python-lxml
14005 python-mf2py
14006 python-pyrdfa3
14007 python-rdflib
14008 python-w3lib))
14009 (home-page "https://github.com/scrapinghub/extruct")
14010 (synopsis "Extract embedded metadata from HTML markup")
14011 (description "@code{extruct} is a Python library for extracting embedded
14012metadata from HTML markup. Currently, extruct supports:
14013@itemize
14014@item W3C's HTML Microdata
14015@item embedded JSON-LD
14016@item Microformat via mf2py
14017@item Facebook's Open Graph
14018@item (experimental) RDFa via rdflib
14019@item Dublin Core Metadata (DC-HTML-2003)
14020@end itemize")
14021 (license license:bsd-3)))
14022
14023(define-public python-wadllib
14024 (package
14025 (name "python-wadllib")
14026 (version "2.0.0")
14027 (source
14028 (origin
14029 (method url-fetch)
14030 (uri (pypi-uri "wadllib" version))
14031 (sha256
14032 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
14033 (build-system pyproject-build-system)
14034 (arguments
14035 (list
14036 ;; XXX: Doctests are currently failing.
14037 #:tests? #f
14038 #:phases
14039 #~(modify-phases %standard-phases
14040 (replace 'check
14041 (lambda* (#:key tests? #:allow-other-keys)
14042 (if tests?
14043 (invoke "zope-testrunner" "--test-path=src")
14044 (format #t "test suite not run~%")))))))
14045 (native-inputs
14046 (list python-multipart python-setuptools python-zope-testrunner))
14047 (propagated-inputs (list python-lazr-uri))
14048 (home-page "https://launchpad.net/wadllib")
14049 (synopsis "Web Application Description Language (WADL) navigation library")
14050 (description "The @code{wadllib} Python library allows navigating HTTP
14051resources using Web Application Description Language (WADL) files as guides.")
14052 (license license:lgpl3)))
14053
14054(define-public python-zeep
14055 (package
14056 (name "python-zeep")
14057 (version "4.3.1")
14058 (source
14059 (origin
14060 (method url-fetch)
14061 (uri (pypi-uri "zeep" version))
14062 (sha256
14063 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
14064 (build-system pyproject-build-system)
14065 (arguments
14066 (list
14067 #:phases
14068 '(modify-phases %standard-phases
14069 (add-after 'unpack 'compatibility
14070 (lambda _
14071 ;; Relax requests-file requirement.
14072 (substitute* "pyproject.toml"
14073 (("\"requests-file.*\",")
14074 "\"requests-file\","))
14075 ;; httpx removed the "proxies" keyword. It's now either "mounts"
14076 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
14077 (substitute* "src/zeep/transports.py"
14078 (("proxies=") "proxy="))))
14079 ;; One test requires write access
14080 (add-before 'check 'set-HOME
14081 (lambda _ (setenv "HOME" (getcwd)))))))
14082 (propagated-inputs
14083 (list python-attrs
14084 python-isodate
14085 python-lxml
14086 python-platformdirs
14087 python-pytz
14088 python-requests
14089 python-requests-file
14090 python-requests-toolbelt))
14091 (native-inputs
14092 (list nss-certs-for-test
14093 python-freezegun
14094 python-pretend
14095 python-pytest
14096 python-pytest-asyncio
14097 python-pytest-httpx
14098 python-requests-mock
14099 python-setuptools
14100 python-wheel))
14101 (home-page "https://docs.python-zeep.org/en/stable/")
14102 (synopsis "Python SOAP client based on lxml / requests")
14103 (description "Zeep is a Python SOAP client. Highlights:
14104
14105@itemize
14106@item Build on top of @code{lxml} and @code{requests}.
14107@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
14108@item Support for WS-Addressing headers.
14109@item Support for WSSE (UserNameToken / x.509 signing).
14110@item Support for @code{asyncio} via @code{httpx}.
14111@item Experimental support for XOP messages.
14112@end itemize")
14113 (license license:expat)))
14114
14115(define-public python-http-client
14116 (package
14117 (name "python-http-client")
14118 (version "3.3.7")
14119 (source
14120 (origin
14121 (method git-fetch)
14122 (uri (git-reference
14123 (url "https://github.com/sendgrid/python-http-client")
14124 (commit version)))
14125 (file-name (git-file-name name version))
14126 (sha256
14127 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
14128 (build-system pyproject-build-system)
14129 (arguments
14130 (list
14131 #:test-backend #~'unittest
14132 #:phases
14133 #~(modify-phases %standard-phases
14134 (add-after 'unpack 'fix-tests
14135 (lambda _
14136 ;; The test expects the copyright to be updated each year.
14137 (substitute* "tests/test_daterange.py"
14138 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
14139 (native-inputs
14140 (list python-setuptools))
14141 (home-page "https://github.com/sendgrid/python-http-client")
14142 (synopsis "HTTP REST client for Python")
14143 (description
14144 "This package provides access to any RESTful or RESTful-like API.")
14145 (license license:expat)))
14146
14147(define-public python-sendgrid
14148 (package
14149 (name "python-sendgrid")
14150 (version "6.9.7")
14151 (source
14152 (origin
14153 (method git-fetch)
14154 (uri (git-reference
14155 (url "https://github.com/sendgrid/sendgrid-python")
14156 (commit version)))
14157 (file-name (git-file-name name version))
14158 (sha256
14159 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
14160 (build-system pyproject-build-system)
14161 (arguments
14162 (list
14163 #:test-flags
14164 #~(list "--ignore=test/integ"
14165 ;; Network access is required.
14166 "--ignore=live_test.py")))
14167 (native-inputs
14168 (list python-pytest
14169 python-setuptools))
14170 (propagated-inputs
14171 (list python-cryptography
14172 python-http-client
14173 python-flask
14174 python-pyyaml
14175 python-six ;hard dependency
14176 python-starkbank-ecdsa
14177 python-werkzeug))
14178 (home-page "https://github.com/sendgrid/sendgrid-python/")
14179 (synopsis "SendGrid API library for Python")
14180 (description
14181 "The @code{sendgrid} Python library allows access to the
14182SendGrid Web API v3. Version 3+ of the library provides full support for all
14183SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
14184 (license license:expat)))
14185
14186(define-public python-sse-starlette
14187 (package
14188 (name "python-sse-starlette")
14189 (version "3.4.4")
14190 (source
14191 (origin
14192 (method git-fetch)
14193 (uri (git-reference
14194 (url "https://github.com/sysid/sse-starlette")
14195 (commit (string-append "v" version))))
14196 (file-name (git-file-name name version))
14197 (sha256
14198 (base32 "0jzy3mjszl7fr524cggyf8k97x6jpykvmxldmm2ckmrqjpyj8jmz"))))
14199 (build-system pyproject-build-system)
14200 (arguments
14201 (list
14202 #:test-flags
14203 #~(list
14204 ;; XXX: Server fails to start.
14205 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
14206 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
14207 ;; XXX: Missing test dependency - testcontainers, Docker is required.
14208 "--ignore=tests/integration/test_multiple_consumers.py")))
14209 (native-inputs
14210 (list python-asgi-lifespan
14211 python-httpx
14212 python-portend
14213 python-pytest
14214 python-pytest-asyncio
14215 python-psutil
14216 python-setuptools
14217 python-tenacity
14218 python-uvicorn))
14219 (propagated-inputs
14220 (list python-anyio
14221 python-starlette))
14222 (home-page "https://github.com/sysid/sse-starlette")
14223 (synopsis "SSE plugin for Starlette")
14224 (description
14225 "This package provides SSE plugin for Starlette.")
14226 (license license:bsd-3)))
14227
14228(define-public python-sseclient-py
14229 (package
14230 (name "python-sseclient-py")
14231 (version "1.9.0")
14232 (source
14233 (origin
14234 (method git-fetch)
14235 (uri (git-reference
14236 (url "https://github.com/mpetazzoni/sseclient")
14237 (commit (string-append "sseclient-py-" version))))
14238 (file-name (git-file-name name version))
14239 (sha256
14240 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
14241 (build-system pyproject-build-system)
14242 (native-inputs (list python-hatchling python-pytest))
14243 (arguments
14244 (list
14245 #:test-backend #~'unittest
14246 #:test-flags #~'("discover" "--verbose" "tests")))
14247 (home-page "https://github.com/mpetazzoni/sseclient")
14248 (synopsis "Pure-Python Server Side Events (SSE) client")
14249 (description
14250 "This package provides a Python client for SSE event sources that
14251seamlessly integrates with @code{urllib3} and @code{requests}.")
14252 (license license:asl2.0)))
14253
14254(define-public python-starlette
14255 (package
14256 (name "python-starlette")
14257 (version "0.49.1")
14258 (source (origin
14259 (method git-fetch)
14260 (uri (git-reference
14261 (url "https://github.com/encode/starlette")
14262 (commit version)))
14263 (file-name (git-file-name name version))
14264 (sha256
14265 (base32
14266 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
14267 (build-system pyproject-build-system)
14268 (propagated-inputs (list python-anyio
14269 python-typing-extensions
14270 ;; [all] extra dependencies:
14271 python-itsdangerous
14272 python-jinja2
14273 python-multipart
14274 python-pyyaml
14275 python-requests))
14276 (native-inputs (list python-hatchling
14277 python-httpx
14278 python-pytest
14279 python-typing-extensions))
14280 (home-page "https://github.com/encode/starlette")
14281 (synopsis "Little ASGI library")
14282 (description
14283 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
14284Interface) framework/toolkit for building async web services in Python.")
14285 (license license:bsd-3)))
14286
14287(define-public python-starsessions
14288 (package
14289 (name "python-starsessions")
14290 (version "1.3.0")
14291 (source (origin
14292 (method git-fetch)
14293 (uri (git-reference
14294 (url "https://github.com/alex-oleshkevich/starsessions")
14295 (commit (string-append "v" version))))
14296 (file-name (git-file-name name version))
14297 (sha256
14298 (base32
14299 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
14300 (build-system pyproject-build-system)
14301 (arguments
14302 (list
14303 #:test-flags
14304 ;; These tests require a running redis server
14305 '(list "--ignore=tests/backends/test_redis.py"
14306 ;; XXX: this failure indicates a real compatibility problem, but
14307 ;; it seems restricted to the tests only.
14308 ;; AttributeError: 'Cookies' object has no attribute
14309 ;; 'clear_session_cookies'
14310 "-k"
14311 (string-append "not test_session_clears_on_tab_close"
14312 ;; This fails because an error is not raised.
14313 " and not test_session_wants_secret_key"))
14314 #:phases
14315 '(modify-phases %standard-phases
14316 (add-after 'unpack 'compatibilitiy
14317 (lambda _
14318 ;; aioredis has been renamed
14319 (substitute* "starsessions/backends/redis.py"
14320 (("aioredis") "redis")))))))
14321 (propagated-inputs
14322 (list python-redis
14323 python-itsdangerous
14324 python-starlette))
14325 (native-inputs
14326 (list python-httpx
14327 python-poetry-core
14328 python-pytest
14329 python-pytest-asyncio
14330 python-requests))
14331 (home-page "https://github.com/alex-oleshkevich/starsessions")
14332 (synopsis "Pluggable session support for Starlette and FastAPI")
14333 (description
14334 "This package adds pluggable session backends and ships default
14335@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
14336and FastAPI.")
14337 (license license:expat)))
14338
14339(define-public python-whereismyip
14340 (package
14341 (name "python-whereismyip")
14342 (version "0.1.0")
14343 (source
14344 (origin
14345 (method url-fetch)
14346 (uri (pypi-uri "whereismyip" version))
14347 (sha256
14348 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
14349 (build-system pyproject-build-system)
14350 (arguments (list #:tests? #false)) ; There are no tests.
14351 (native-inputs (list python-setuptools))
14352 (home-page "https://pypi.org/project/whereismyip/")
14353 (synopsis "Queries multiple geolocation services until one succeeds")
14354 (description
14355 "This package provides a simple Python library that queries multiple geolocation
14356services until one succeeds.")
14357 (license license:gpl3)))
14358
14359(define-public python-whitenoise
14360 (package
14361 (name "python-whitenoise")
14362 (version "6.9.0")
14363 (source (origin
14364 (method git-fetch) ; PyPI missing test fails
14365 (uri (git-reference
14366 (url "https://github.com/evansd/whitenoise")
14367 (commit version)))
14368 (file-name (git-file-name name version))
14369 (sha256
14370 (base32
14371 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
14372 (build-system pyproject-build-system)
14373 (arguments
14374 (list
14375 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
14376 (native-inputs (list python-brotli
14377 python-django
14378 python-requests
14379 python-pytest
14380 python-setuptools
14381 python-wheel))
14382 (home-page "https://github.com/evansd/whitenoise")
14383 (synopsis "Static file serving for WSGI applications")
14384 (description
14385 "WhiteNoise allows your web app to serve its own static files, making it
14386a self-contained unit that can be deployed anywhere without relying on nginx,
14387Amazon S3 or any other external service.")
14388 (license license:expat)))
14389
14390(define-public python-suds
14391 (package
14392 (name "python-suds")
14393 (version "1.2.0")
14394 (source
14395 (origin
14396 (method url-fetch)
14397 (uri (pypi-uri "suds" version))
14398 (sha256
14399 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
14400 (build-system pyproject-build-system)
14401 (arguments
14402 (list #:phases
14403 #~(modify-phases %standard-phases
14404 ;; XXX: chirp expects suds instead of suds_community
14405 (add-after 'install 'add-custom-dist-info
14406 (lambda _
14407 (for-each
14408 (lambda (dir)
14409 (with-directory-excursion (dirname dir)
14410 (symlink
14411 (basename dir)
14412 (string-append "suds-" #$version ".dist-info"))))
14413 (find-files #$output
14414 (lambda (file stat)
14415 (string-suffix? ".dist-info" file))
14416 #:directories? #t)))))))
14417 (native-inputs
14418 (list python-pytest
14419 python-setuptools
14420 python-wheel))
14421 (home-page "https://github.com/suds-community/suds")
14422 (synopsis "Lightweight SOAP python client for consuming Web Services")
14423 (description
14424 "Suds is a lightweight SOAP-based web service client for Python.")
14425 (license license:lgpl3+)))
14426
14427(define-public python-fastapi
14428 (package
14429 (name "python-fastapi")
14430 (version "0.137.1")
14431 (source
14432 (origin
14433 (method url-fetch)
14434 (uri (pypi-uri "fastapi" version))
14435 (sha256
14436 (base32 "072lzn48rwf9rjix4nqb5ym6hnaj2fb3jxclilym7n9h89q608w2"))))
14437 (build-system pyproject-build-system)
14438 (arguments
14439 (list
14440 ;; tests: 1126 passed, 12 skipped, 2 deselected
14441 #:test-backend #~'custom
14442 #:test-flags
14443 #~(list
14444 ;; Cannot import 'scripts' with just 'pytest'.
14445 "-m" "pytest"
14446 ;; Needs strawberry and sqlmodel.
14447 "--ignore=tests/test_tutorial/"
14448 ;; Fails due to failure to capture stdout.
14449 "--ignore=tests/test_fastapi_cli.py")))
14450 (native-inputs
14451 (list python-anyio
14452 python-dirty-equals
14453 python-flask
14454 python-inline-snapshot
14455 python-pdm-backend
14456 ;; python-pwdlib
14457 python-pyjwt
14458 python-pytest
14459 python-pytest-timeout
14460 python-pytest-xdist
14461 python-sqlalchemy-2
14462 ;; python-sqlmodel
14463 python-types-orjson
14464 python-types-ujson))
14465 (propagated-inputs
14466 (list python-starlette
14467 python-pydantic
14468 python-typing-extensions
14469 python-annotated-doc
14470 ;; [optional]
14471 python-email-validator
14472 python-fastapi-cli
14473 ;; python-fastar
14474 python-httpx
14475 python-itsdangerous
14476 python-jinja2
14477 python-multipart
14478 python-orjson
14479 python-pydantic
14480 python-pydantic-extra-types
14481 python-pydantic-settings
14482 python-pyyaml
14483 python-ujson
14484 python-uvicorn))
14485 (home-page "https://github.com/fastapi/fastapi")
14486 (synopsis "Web framework based on type hints")
14487 (description "FastAPI provides a web API framework based on pydantic and
14488starlette.")
14489 (license license:expat)))
14490
14491(define-public python-fastapi-csrf-protect
14492 (package
14493 (name "python-fastapi-csrf-protect")
14494 (version "0.3.3")
14495 (source (origin
14496 (method git-fetch)
14497 (uri (git-reference
14498 (url "https://github.com/aekasitt/fastapi-csrf-protect")
14499 (commit (string-append "v" version))))
14500 (file-name (git-file-name name version))
14501 (sha256
14502 (base32
14503 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
14504 (build-system pyproject-build-system)
14505 (propagated-inputs
14506 (list python-fastapi python-itsdangerous
14507 python-pydantic))
14508 (native-inputs
14509 (list python-poetry-core
14510 python-pytest))
14511 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
14512 (synopsis "Cross-Site Request Forgery (XSRF) protection")
14513 (description
14514 "This package provides a stateless implementation of @dfn{Cross-Site
14515Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
14516pattern.")
14517 (license license:expat)))
14518
14519(define-public python-fastapi-pagination-minimal
14520 (package
14521 (name "python-fastapi-pagination-minimal")
14522 (version "0.15.15")
14523 (source (origin
14524 (method git-fetch)
14525 (uri (git-reference
14526 (url "https://github.com/uriyyo/fastapi-pagination")
14527 (commit version)))
14528 (file-name (git-file-name name version))
14529 (sha256
14530 (base32
14531 "0jfmk5m2yrki9rw9izci2fxamam45mk36gl77rwbd5hnngkqbahv"))))
14532 (build-system pyproject-build-system)
14533 ;; We run the tests in python-fastapi-pagination only.
14534 (arguments (list #:tests? #false))
14535 ;; These are the only required dependencies,
14536 ;; please add all optional dependencies to the
14537 ;; full python-fastapi-pagination below.
14538 (propagated-inputs (list python-fastapi python-pydantic))
14539 (native-inputs (list python-hatchling))
14540 (home-page "https://github.com/uriyyo/fastapi-pagination")
14541 (synopsis "FastAPI pagination library")
14542 (description "@code{fastapi-pagination} is a Python library designed to
14543simplify pagination in FastAPI applications. It provides a set of utility
14544functions and data models to help you paginate your database queries and
14545return paginated responses to your clients.")
14546 (license license:expat)))
14547
14548(define-public python-fastapi-pagination
14549 (package
14550 (inherit python-fastapi-pagination-minimal)
14551 (name "python-fastapi-pagination")
14552 (arguments
14553 (list
14554 #:test-flags
14555 #~(list "--asyncio-mode=auto"
14556 "--ignore=tests/ext"
14557 ;; Netwok access is required.
14558 "-k" (string-join
14559 (list "not test_optional_params[postgres-default]"
14560 "test_optional_params[postgres-limit-offset]"
14561 "test_optional_params[sqlite-default]"
14562 "test_optional_params[sqlite-limit-offset]")
14563 " and not "))
14564 #:phases
14565 '(modify-phases %standard-phases
14566 (add-after 'unpack 'patch-tests
14567 (lambda _
14568 ;; We don't have a package for python-cassandra or motor, but we
14569 ;; also don't need them as we only run the unit tests anyway.
14570 (substitute* "tests/conftest.py"
14571 (("from cassandra.*") "")
14572 (("from motor.*") "")))))))
14573 (propagated-inputs
14574 (modify-inputs (package-propagated-inputs
14575 python-fastapi-pagination-minimal)
14576 (prepend python-asyncpg
14577 python-databases
14578 python-django
14579 python-fastapi
14580 python-pydantic
14581 python-sqlalchemy
14582 (package
14583 (inherit python-tortoise-orm)
14584 (arguments
14585 (substitute-keyword-arguments (package-arguments
14586 python-tortoise-orm)
14587 ((#:phases phases '%standard-phases)
14588 `(modify-phases ,phases
14589 (delete 'sanity-check)))))
14590 (propagated-inputs
14591 (modify-inputs propagated-inputs
14592 (replace "python-aiosqlite" python-aiosqlite)))))))
14593 (native-inputs
14594 (list python-aiosqlite
14595 python-asgi-lifespan
14596 python-asyncpg
14597 python-dirty-equals
14598 python-faker
14599 python-hatchling
14600 python-httpx
14601 python-pytest
14602 python-pytest-asyncio
14603 python-sqlalchemy
14604 python-typing-extensions))
14605 (description
14606 (string-append (package-description python-fastapi-pagination-minimal)
14607 "
14608
14609This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
14610all available optional dependencies supported by mainline
14611@code{fastapi-pagination}."))))
14612
14613(define-public python-fastapi-cli
14614 (package
14615 (name "python-fastapi-cli")
14616 (version "0.0.7")
14617 (source
14618 (origin
14619 (method url-fetch)
14620 (uri (pypi-uri "fastapi_cli" version))
14621 (sha256
14622 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
14623 (build-system pyproject-build-system)
14624 ;; Tests require fastapi, which depends on this package.
14625 (arguments (list #:tests? #false))
14626 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
14627 (native-inputs
14628 (list python-inline-snapshot python-pdm-backend python-pytest))
14629 (home-page "https://pypi.org/project/fastapi-cli/")
14630 (synopsis
14631 "Run and manage FastAPI apps from the command line with FastAPI CLI")
14632 (description
14633 "FastAPI CLI is a command line program fastapi that you can use to serve
14634your FastAPI app, manage your FastAPI project, and more.")
14635 (license license:expat)))
14636
14637(define-public python-pyactiveresource
14638 (package
14639 (name "python-pyactiveresource")
14640 (version "2.2.2")
14641 (source
14642 (origin
14643 (method git-fetch)
14644 (uri (git-reference
14645 (url "https://github.com/Shopify/pyactiveresource")
14646 (commit (string-append "v" version))))
14647 (file-name (git-file-name name version))
14648 (sha256
14649 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
14650 (build-system pyproject-build-system)
14651 ;; XXX: The package is fine, but the tests started failing on [email protected].
14652 ;; The package is not actively maintained, consider removing it once leaf.
14653 (arguments (list #:tests? #f))
14654 (native-inputs
14655 (list python-dateutil python-pytest python-pyyaml python-setuptools))
14656 (propagated-inputs (list python-six))
14657 (home-page "https://github.com/Shopify/pyactiveresource/")
14658 (synopsis "ActiveResource for Python")
14659 (description
14660 "This package provides a Python port of the ActiveResource project.
14661
14662Active Resource attempts to provide a coherent wrapper object-relational
14663mapping for REST web services. It follows the same philosophy as Active
14664Record, in that one of its prime aims is to reduce the amount of code needed
14665to map to these resources. This is made possible by relying on a number of
14666code- and protocol-based conventions that make it easy for Active Resource to
14667infer complex relations and structures.")
14668 (license license:expat)))
14669
14670(define-public python-shopifyapi
14671 (package
14672 (name "python-shopifyapi")
14673 (version "12.7.0")
14674 (source
14675 (origin
14676 (method git-fetch)
14677 (uri (git-reference
14678 (url "https://github.com/Shopify/shopify_python_api")
14679 (commit (string-append "v" version))))
14680 (file-name (git-file-name name version))
14681 (sha256
14682 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
14683 (build-system pyproject-build-system)
14684 (arguments
14685 (list
14686 #:test-flags
14687 #~'("-k"
14688 ;; Disable a failing test.
14689 "not test_raises_if_aud_doesnt_match_api_key")))
14690 (native-inputs (list python-mock python-pytest python-setuptools))
14691 (propagated-inputs (list python-pyactiveresource python-pyjwt
14692 python-pyyaml python-six))
14693 (home-page "https://github.com/Shopify/shopify_python_api")
14694 (synopsis "Shopify API for Python")
14695 (description
14696 "This package provides the Shopify API for Python.
14697
14698The ShopifyAPI library allows Python developers to programmatically access the
14699admin section of stores using an ActiveResource-like interface similar the
14700ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
14701list, create, update, or delete resources (e.g. Order, Product, Collection).")
14702 (license license:expat)))
14703
14704(define-public python-pybadges
14705 (package
14706 (name "python-pybadges")
14707 (version "3.0.1")
14708 (source (origin
14709 (method git-fetch)
14710 (uri (git-reference
14711 (url "https://github.com/google/pybadges")
14712 (commit version)))
14713 (file-name (git-file-name name version))
14714 (sha256
14715 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
14716 (build-system pyproject-build-system)
14717 (arguments
14718 (list
14719 #:test-flags
14720 #~'("-k"
14721 ;; Disable network dependent tests.
14722 "not test_changes and not test_not_image_url and not test_http_url")))
14723 (propagated-inputs (list python-jinja2 python-requests python-setuptools))
14724 (native-inputs (list python-flask
14725 python-fonttools
14726 python-pillow
14727 python-pytest
14728 python-wheel
14729 python-xmldiff))
14730 (home-page "https://github.com/google/pybadges")
14731 (synopsis "Generate Github-style badges on the command-line")
14732 (description
14733 "This package provides @code{python-pybadges}: a library and command-line
14734tool for generating Github-style badges as SVG images.")
14735 (license license:asl2.0)))
14736
14737(define-public python-grid5000
14738 (package
14739 (name "python-grid5000")
14740 (version "1.2.4")
14741 (source (origin
14742 (method git-fetch)
14743 (uri (git-reference
14744 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
14745 (commit (string-append "v" version))))
14746 (file-name (git-file-name name version))
14747 (sha256
14748 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
14749 (build-system pyproject-build-system)
14750 (arguments
14751 (list #:tests? #f)) ; No tests.
14752 (native-inputs (list python-setuptools))
14753 (propagated-inputs (list python-requests python-ipython python-pyyaml))
14754 (home-page "https://pypi.org/project/python-grid5000/")
14755 (synopsis "Grid5000 python client")
14756 (description
14757 "python-grid5000 is a python package wrapping the Grid5000 REST API.
14758You can use it as a library in your python project or you can explore the
14759Grid5000 resources interactively using the embedded shell.")
14760 (license license:gpl3+)))
14761
14762(define-public python-enoslib
14763 (package
14764 (name "python-enoslib")
14765 (version "8.0.1")
14766 (source
14767 (origin
14768 (method git-fetch)
14769 (uri (git-reference
14770 (url "https://gitlab.inria.fr/discovery/enoslib")
14771 (commit (string-append "v" version))))
14772 (file-name (git-file-name name version))
14773 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
14774 (arguments
14775 (list
14776 #:test-flags
14777 #~(list "enoslib/tests/unit"
14778 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
14779 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
14780 #:phases
14781 #~(modify-phases %standard-phases
14782 (add-before 'check 'pre-check
14783 (lambda* (#:key tests? #:allow-other-keys)
14784 (when tests?
14785 ;; Otherwise Ansible fails to create its config directory.
14786 (setenv "HOME" "/tmp"))))
14787 ;; Disable the sanity check, which fails with the following error:
14788 ;;
14789 ;; ContextualVersionConflict(rich 12.4.1
14790 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
14791 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
14792 ;;
14793 ;; The optional jupyter dependency of rich isn't critical for
14794 ;; EnOSlib to work
14795 (delete 'sanity-check))))
14796 (build-system pyproject-build-system)
14797 (native-inputs
14798 (list python-ddt
14799 python-freezegun
14800 python-pytest
14801 python-setuptools
14802 python-wheel))
14803 (propagated-inputs
14804 (list ansible
14805 python-cryptography
14806 python-grid5000
14807 python-jsonschema
14808 python-netaddr
14809 python-packaging
14810 python-requests
14811 python-rich
14812 python-sshtunnel
14813 python-pytz))
14814 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
14815 (synopsis "Deploy distributed testbeds on a variety of platforms")
14816 (description
14817 "EnOSlib is a library to build experimental frameworks on various
14818scientific testbeds. It lets you deploy networks of machines on actual
14819hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
14820 (license license:gpl3+)))
14821
14822(define-public python-pynetbox
14823 (package
14824 (name "python-pynetbox")
14825 (version "7.4.1")
14826 (source (origin
14827 (method url-fetch)
14828 (uri (pypi-uri "pynetbox" version))
14829 (sha256
14830 (base32
14831 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
14832 (build-system pyproject-build-system)
14833 (arguments
14834 (list
14835 #:test-flags
14836 ;; Integration tests depend on docker.
14837 '(list "--ignore=tests/integration")))
14838 (propagated-inputs (list python-packaging python-requests))
14839 (native-inputs
14840 (list python-pytest
14841 python-setuptools
14842 python-setuptools-scm
14843 python-wheel))
14844 (home-page "https://github.com/netbox-community/pynetbox")
14845 (synopsis "NetBox API client library")
14846 (description "Python module to query and edit data stored in a
14847@url{https://netbox.dev,NetBox} instance.")
14848 (license license:asl2.0)))
14849
14850(define-public python-waybackpack
14851 (package
14852 (name "python-waybackpack")
14853 (version "0.6.4")
14854 (source
14855 (origin
14856 (method url-fetch)
14857 (uri (pypi-uri "waybackpack" version))
14858 (sha256
14859 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14860 (build-system pyproject-build-system)
14861 (arguments
14862 (list #:tests? #f)) ; would require network (and SSL certificates)
14863 (propagated-inputs (list python-requests))
14864 (native-inputs (list python-pytest python-setuptools python-wheel))
14865 (home-page "https://github.com/jsvine/waybackpack")
14866 (synopsis
14867 "Download the entire Wayback Machine archive for a given URL")
14868 (description
14869 "This package provides a library and a command-line tool that lets
14870you download the entire Wayback Machine archive for a given URL.")
14871 (license license:expat)))
14872
14873(define-public python-xyzservices
14874 (package
14875 (name "python-xyzservices")
14876 (version "2025.4.0")
14877 (source
14878 (origin
14879 (method url-fetch)
14880 (uri (pypi-uri "xyzservices" version))
14881 (sha256
14882 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14883 (build-system pyproject-build-system)
14884 (arguments
14885 (list
14886 #:test-flags #~(list "-m" "not request")))
14887 (native-inputs
14888 (list python-pytest
14889 python-mercantile
14890 python-requests
14891 python-setuptools
14892 python-setuptools-scm))
14893 (home-page "https://github.com/geopandas/xyzservices")
14894 (synopsis "Source of XYZ tiles providers")
14895 (description "@code{xyzservices} is a lightweight library providing a
14896repository of available XYZ services offering raster basemap tiles. The
14897repository is provided via Python API and as a compressed JSON file.")
14898 (license license:bsd-3)))
14899
14900(define-public s3cmd
14901 (package
14902 (name "s3cmd")
14903 (version "2.4.0")
14904 (source
14905 (origin
14906 (method git-fetch)
14907 (uri (git-reference
14908 (url "https://github.com/s3tools/s3cmd")
14909 (commit (string-append "v" version))))
14910 (file-name (git-file-name name version))
14911 (sha256
14912 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14913 (build-system pyproject-build-system)
14914 (arguments
14915 (list
14916 #:tests? #f ; XXX: Tests require network access.
14917 #:phases
14918 #~(modify-phases %standard-phases
14919 (add-after 'unpack 'hide-wrapping
14920 (lambda _
14921 (substitute* "S3/MultiPart.py"
14922 (("sys\\.argv\\[0\\]")
14923 "\"s3cmd\""))
14924 (substitute* "s3cmd"
14925 (("optparser\\.get_prog_name\\(\\)")
14926 "\"s3cmd\"")))))))
14927 (native-inputs (list python-setuptools))
14928 (inputs (list python-dateutil python-magic))
14929 (home-page "https://s3tools.org/s3cmd")
14930 (synopsis "Command line tool for S3-compatible storage services")
14931 (description
14932 "S3cmd is a command line tool for uploading, retrieving and managing data
14933in storage services that are compatible with the Amazon Simple Storage
14934Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14935GnuPG encryption, and more. It also supports management of Amazon's
14936CloudFront content delivery network.")
14937 (license license:gpl2+)))