projects/guix·blob kde-team · refs

14942 lines · 540.5 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015-2025 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Christopher Baines <[email protected]>
5;;; Copyright © 2017 Muriithi Frederick Muriuki <[email protected]>
6;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
7;;; Copyright © 2013, 2014, 2015, 2016, 2020, 2023 Andreas Enge <[email protected]>
8;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
9;;; Copyright © 2015-2025 Ricardo Wurmus <[email protected]>
10;;; Copyright © 2017, 2021 Roel Janssen <[email protected]>
11;;; Copyright © 2016, 2017, 2020 Julien Lepiller <[email protected]>
12;;; Copyright © 2016, 2017 Nikita <[email protected]>
13;;; Copyright © 2014, 2017, 2021 Eric Bavier <[email protected]>
14;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
15;;; Copyright © 2015 Cyril Roelandt <[email protected]>
16;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
17;;; Copyright © 2016, 2019, 2022, 2025 Hartmut Goebel <[email protected]>
18;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <[email protected]>
19;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
20;;; Copyright © 2015, 2016 Christine Lemmer-Webber <[email protected]>
21;;; Copyright © 2017 Adriano Peluso <[email protected]>
22;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
23;;; Copyright © 2016 David Craven <[email protected]>
24;;; Copyright © 2017 Oleg Pykhalov <[email protected]>
25;;; Copyright © 2015, 2016 David Thompson <[email protected]>
26;;; Copyright © 2017 Mark Meyer <[email protected]>
27;;; Copyright © 2018 Clément Lassieur <[email protected]>
28;;; Copyright © 2018 Tomáš Čech <[email protected]>
29;;; Copyright © 2018, 2019, 2021, 2024 Nicolas Goaziou <[email protected]>
30;;; Copyright © 2018 Mathieu Othacehe <[email protected]>
31;;; Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
32;;; Copyright © 2018 swedebugia <[email protected]>
33;;; Copyright © 2019 Vagrant Cascadian <[email protected]>
34;;; Copyright © 2019, 2023 Brendan Tildesley <[email protected]>
35;;; Copyright © 2019 Pierre Langlois <[email protected]>
36;;; Copyright © 2019, 2020 Tanguy Le Carrour <[email protected]>
37;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
38;;; Copyright © 2020 Josh Marshall <[email protected]>
39;;; Copyright © 2020 Evan Straw <[email protected]>
40;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
41;;; Copyright © 2020 Holger Peters <[email protected]>
42;;; Copyright © 2020 Noisytoot <[email protected]>
43;;; Copyright © 2020 Edouard Klein <[email protected]>
44;;; Copyright © 2020, 2021, 2022, 2023, 2025 Vinicius Monego <[email protected]>
45;;; Copyright © 2020 Konrad Hinsen <[email protected]>
46;;; Copyright © 2020, 2022, 2024 Giacomo Leidi <[email protected]>
47;;; Copyright © 2020 Raghav Gururajan <[email protected]>
48;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
49;;; Copyright © 2021 Greg Hogan <[email protected]>
50;;; Copyright © 2021 Maxime Devos <[email protected]>
51;;; Copyright © 2021 Pradana Aumars <[email protected]>
52;;; Copyright © 2021, 2022, 2024, 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;;; Copyright © 2026 Goran Vukoman <[email protected]>
93;;;
94;;; This file is part of GNU Guix.
95;;;
96;;; GNU Guix is free software; you can redistribute it and/or modify it
97;;; under the terms of the GNU General Public License as published by
98;;; the Free Software Foundation; either version 3 of the License, or (at
99;;; your option) any later version.
100;;;
101;;; GNU Guix is distributed in the hope that it will be useful, but
102;;; WITHOUT ANY WARRANTY; without even the implied warranty of
103;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
104;;; GNU General Public License for more details.
105;;;
106;;; You should have received a copy of the GNU General Public License
107;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
108
109(define-module (gnu packages python-web)
110 #:use-module (gnu packages admin)
111 #:use-module (gnu packages base)
112 #:use-module (gnu packages bash)
113 #:use-module (gnu packages build-tools)
114 #:use-module (gnu packages check)
115 #:use-module (gnu packages cmake)
116 #:use-module (gnu packages compression)
117 #:use-module (gnu packages curl)
118 #:use-module (gnu packages databases)
119 #:use-module (gnu packages django)
120 #:use-module (gnu packages dns)
121 #:use-module (gnu packages freedesktop)
122 #:use-module (gnu packages glib)
123 #:use-module (gnu packages gnupg)
124 #:use-module (gnu packages graphviz)
125 #:use-module (gnu packages groff)
126 #:use-module (gnu packages iso-codes)
127 #:use-module (gnu packages libevent)
128 #:use-module (gnu packages libffi)
129 #:use-module (gnu packages libidn)
130 #:use-module (gnu packages linux)
131 #:use-module (gnu packages lsof)
132 #:use-module (gnu packages node)
133 #:use-module (gnu packages nss)
134 #:use-module (gnu packages openstack)
135 #:use-module (gnu packages pcre)
136 #:use-module (gnu packages pkg-config)
137 #:use-module (gnu packages protobuf)
138 #:use-module (gnu packages python)
139 #:use-module (gnu packages python-build)
140 #:use-module (gnu packages python-check)
141 #:use-module (gnu packages python-compression)
142 #:use-module (gnu packages python-crypto)
143 #:use-module (gnu packages python-science)
144 #:use-module (gnu packages python-xyz)
145 #:use-module (gnu packages qt)
146 #:use-module (gnu packages rdf)
147 #:use-module (gnu packages rpc)
148 #:use-module (gnu packages rust)
149 #:use-module (gnu packages serialization)
150 #:use-module (gnu packages sphinx)
151 #:use-module (gnu packages texinfo)
152 #:use-module (gnu packages time)
153 #:use-module (gnu packages tls)
154 #:use-module (gnu packages version-control)
155 #:use-module (gnu packages web)
156 #:use-module (gnu packages xml)
157 #:use-module (gnu packages)
158 #:use-module (guix build-system cargo)
159 #:use-module (guix build-system copy)
160 #:use-module (guix build-system pyproject)
161 #:use-module (guix deprecation)
162 #:use-module (guix download)
163 #:use-module (guix gexp)
164 #:use-module (guix git-download)
165 #:use-module ((guix licenses) #:prefix license:)
166 #:use-module (guix packages)
167 #:use-module (guix utils)
168 #:use-module (srfi srfi-1))
169
170(define-public python-aioboto3
171 (package
172 (name "python-aioboto3")
173 (version "15.5.0")
174 (source
175 (origin
176 (method git-fetch)
177 (uri (git-reference
178 (url "https://github.com/terricain/aioboto3")
179 (commit (string-append "v" version))))
180 (file-name (git-file-name name version))
181 (sha256
182 (base32 "05644x17f9sl8mv9bp8l0rjcmw5x2ssyd5z1v3xmgcspk5qs6qn8"))))
183 (build-system pyproject-build-system)
184 (arguments
185 (list
186 #:tests? #f ;XXX: all tests faild
187 #:phases
188 #~(modify-phases %standard-phases
189 (add-after 'unpack 'relax-requirements
190 (lambda _
191 (substitute* "pyproject.toml"
192 (("aiobotocore\\[boto3\\]==2.25.1")
193 "aiobotocore >= 2.25.1")))))))
194 (native-inputs
195 (list python-setuptools
196 python-setuptools-scm))
197 (propagated-inputs
198 (list python-aiobotocore
199 python-aiofiles
200 ;; [optional]
201 python-boto3
202 python-cryptography))
203 (home-page "https://github.com/terricain/aioboto3")
204 (synopsis "Async boto3 wrapper")
205 (description
206 "This package is mostly just a wrapper combining the great work of boto3
207and aiobotocore.")
208 (license license:asl2.0)))
209
210(define-public python-aiocoap
211 (package
212 (name "python-aiocoap")
213 (version "0.4.14")
214 (source
215 (origin
216 (method git-fetch) ; tests miss data and module files in PyPI release
217 (uri (git-reference
218 (url "https://github.com/chrysn/aiocoap")
219 (commit version)))
220 (file-name (git-file-name name version))
221 (sha256
222 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
223 (build-system pyproject-build-system)
224 (arguments
225 (list
226 #:test-flags
227 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
228 ;; 8683, 0, 0): address already in use
229 #~(list "--ignore=tests/test_server.py"
230 "-k" (string-join
231 ;; TypeError: can only concatenate str (not "NoneType") to
232 ;; str
233 (list "not test_options"
234 "test_uri_parser"
235 "test_help" ; returned non-zero exit status 1.
236 "test_routing" ; address already in use
237 "test_tls")
238 " and not "))))
239 (native-inputs
240 (list openssl ;for tests/test_tls.py
241 python-pytest
242 python-setuptools
243 python-wheel))
244 (propagated-inputs
245 (list ;; python-cbor-diag
246 python-cbor2
247 python-cryptography
248 ;; python-dtlssocket
249 python-filelock
250 ;; python-ge25519
251 python-pygments
252 python-termcolor
253 python-websockets))
254 (home-page "https://github.com/chrysn/aiocoap")
255 (synopsis "Python CoAP library")
256 (description
257 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
258Constrained Application Protocol}, http://coap.space/}. It facilitates
259writing applications that talk to network enabled embedded
260@acronym{IoT,Internet of Things} devices.")
261 (license license:expat)))
262
263(define-public python-alpaca-py
264 (package
265 (name "python-alpaca-py")
266 (version "0.43.5")
267 (source
268 (origin
269 (method git-fetch)
270 (uri (git-reference
271 (url "https://github.com/alpacahq/alpaca-py")
272 (commit (string-append "v" version))))
273 (file-name (git-file-name name version))
274 (sha256
275 (base32 "1kiq8b1v58yj7fypmnfn4mij1n96ym1i9lxsd4gmbv0cgpn10nqv"))))
276 (build-system pyproject-build-system)
277 (native-inputs
278 (list python-poetry-core
279 python-poetry-dynamic-versioning
280 python-pytest
281 python-pytest-asyncio
282 python-requests-mock))
283 (propagated-inputs
284 (list python-msgpack
285 python-pandas
286 python-pydantic
287 python-pytz
288 python-requests
289 python-sseclient-py
290 python-websockets))
291 (home-page "https://alpaca.markets/sdks/python/")
292 (synopsis "Alpaca API official Python SDK")
293 (description
294 "Alpaca-py provides an interface to REST, WebSocket and SSE endpoints
295that allow interaction with the @url{https://alpaca.markets/, Alpaca} API.")
296 (license license:asl2.0)))
297
298(define-public python-anaconda-client
299 (package
300 (name "python-anaconda-client")
301 (version "1.13.1")
302 (source
303 (origin
304 (method git-fetch)
305 (uri (git-reference
306 (url "https://github.com/Anaconda-Platform/anaconda-client")
307 (commit version)))
308 (file-name (git-file-name name version))
309 (sha256
310 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
311 (build-system pyproject-build-system)
312 (arguments
313 (list
314 #:test-flags
315 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
316 "--deselect=tests/utils/test_conda.py::test_conda_vars")
317 #:phases
318 #~(modify-phases %standard-phases
319 (add-after 'unpack 'fix-pytest-config
320 (lambda _
321 (substitute* "setup.cfg"
322 (("addopts=.*") "addopts=\n")))))))
323 (native-inputs
324 (list python-freezegun
325 python-pytest
326 python-setuptools))
327 (propagated-inputs
328 (list python-anaconda-cli-base
329 python-conda-package-handling
330 python-conda-package-streaming
331 python-dateutil
332 python-defusedxml
333 python-nbformat
334 python-pillow
335 python-platformdirs
336 python-pytz
337 python-pyyaml
338 python-requests
339 python-requests-toolbelt
340 python-setuptools
341 python-tqdm
342 python-urllib3))
343 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
344 (synopsis "Anaconda Cloud command line client library")
345 (description
346 "Anaconda Cloud command line client library provides an interface to
347Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
348environments.")
349 (license license:bsd-3)))
350
351(define-public python-apprise
352 (package
353 (name "python-apprise")
354 (version "1.9.4")
355 (source
356 (origin
357 (method url-fetch)
358 (uri (pypi-uri "apprise" version))
359 (sha256
360 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
361 (build-system pyproject-build-system)
362 (arguments
363 (list
364 ;; These tests used to be ran with --numprocesses, but that seems to have
365 ;; made them non-deterministic.
366 #:test-flags
367 #~(list "--ignore=tests/test_plugin_macosx.py"
368 "-k" "not test_plugin_glib_send_raises_generic")))
369 (native-inputs
370 (list python-babel
371 python-pytest
372 python-pytest-mock
373 python-setuptools))
374 (propagated-inputs
375 (list python-certifi
376 python-click
377 python-markdown
378 python-pygobject
379 python-pyyaml
380 python-requests
381 python-requests-oauthlib))
382 (home-page "https://github.com/caronc/apprise")
383 (synopsis "Push notification library")
384 (description
385 "Apprise is a Python library that allows sending push notifications to a
386broad range of notification services, such as Telegram, Discord, Slack, Amazon
387SNS, Gotify, etc.")
388 (license license:bsd-2)))
389
390(define-public python-arxiv
391 (package
392 (name "python-arxiv")
393 (version "4.0.0")
394 (source
395 (origin
396 (method git-fetch)
397 (uri (git-reference
398 (url "https://github.com/lukasschwab/arxiv.py")
399 (commit version)))
400 (file-name (git-file-name name version))
401 (sha256
402 (base32 "13363igvv3q5aj04jcrrc0cfliinlk8js84h2a9xhpwizsq96l4j"))))
403 (build-system pyproject-build-system)
404 (arguments
405 (list #:test-flags
406 #~(list "-k" ;to skip intenet connection tests
407 (string-append "not (TestAPIBugs "
408 "or TestClient "
409 "or TestResult "
410 "or TestDownload)"))
411 #:phases
412 #~(modify-phases %standard-phases
413 (add-after 'unpack 'relax-dependencies
414 (lambda _
415 (substitute* "pyproject.toml"
416 ;; pyproject.toml wants 6.10, guix has 6.02, seems fine
417 (("\"lxml.*\"") "\"lxml\"")
418 ;; artificial capped at <2.34 by dependabot
419 (("\"requests.*\"") "\"requests\"")))))))
420 (native-inputs
421 (list python-pytest
422 python-hatch-vcs
423 python-hatchling))
424 (propagated-inputs
425 (list python-feedparser
426 python-lxml
427 python-requests))
428 (home-page "https://github.com/lukasschwab/arxiv.py")
429 (synopsis "Python wrapper for the arXiv API")
430 (description "Python wrapper for the @code{arXiv} API.")
431 (license license:expat)))
432
433(define-public python-asyncer
434 (package
435 (name "python-asyncer")
436 (version "0.0.17")
437 (source
438 (origin
439 (method git-fetch)
440 (uri (git-reference
441 (url "https://github.com/fastapi/asyncer")
442 (commit version)))
443 (file-name (git-file-name name version))
444 (sha256
445 (base32 "1f4ids6sxwmz89yj98z0qc4qvfkklh0psbxv5px39k807g9aq7p2"))))
446 (build-system pyproject-build-system)
447 (native-inputs
448 (list python-pdm-backend
449 python-pytest))
450 (propagated-inputs
451 (list python-anyio
452 python-sniffio
453 python-typing-extensions))
454 (home-page "https://asyncer.tiangolo.com/")
455 (synopsis "Asyncer, async and await, focused on developer experience")
456 (description
457 "Asyncer is a small library built on top of
458@url{https://anyio.readthedocs.io/en/stable/, AnyIO}.
459
460The main goal of Asyncer is to improve developer experience by providing
461better support for autocompletion and inline errors in the editor, and more
462certainty that the code is bug-free by providing better support for type
463checking tools like mypy.")
464 (license license:expat)))
465
466(define-public python-asyncudp
467 (package
468 (name "python-asyncudp")
469 (version "0.11.0")
470 (source
471 (origin
472 (method git-fetch)
473 (uri (git-reference
474 (url "https://github.com/eerimoq/asyncudp")
475 (commit version)))
476 (file-name (git-file-name name version))
477 (sha256
478 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
479 (build-system pyproject-build-system)
480 (native-inputs (list python-pytest python-setuptools))
481 (home-page (git-reference-url (origin-uri source)))
482 (synopsis "High level UDP sockets for asyncio")
483 (description
484 "This package provides a Python library offering high level UDP sockets
485for asyncio. Import it alongside asyncio and use its API to send and receive
486UDP packets.")
487 (license license:expat)))
488
489(define-public python-behave-web-api
490 (package
491 (name "python-behave-web-api")
492 (version "2.3.0")
493 (source
494 (origin
495 (method git-fetch)
496 (uri (git-reference
497 (url "https://github.com/jefersondaniel/behave-web-api")
498 (commit (string-append "v" version))))
499 (file-name (git-file-name name version))
500 (sha256
501 (base32 "1r8yx8gb5m599cpdqfvk6z9ax3qj26fpvczdr84z8jya0dxfch4p"))))
502 (build-system pyproject-build-system)
503 (native-inputs
504 (list python-pytest
505 python-setuptools))
506 (propagated-inputs
507 (list behave
508 python-requests))
509 (home-page "https://github.com/jefersondaniel/behave-web-api")
510 (synopsis "Provides testing for JSON APIs with Behave for Python")
511 (description "This package provides testing utility modules for testing
512JSON APIs with Behave.")
513 (license license:expat)))
514
515(define-public python-blacksheep
516 (package
517 (name "python-blacksheep")
518 (version "2.6.3")
519 (source
520 (origin
521 (method git-fetch)
522 (uri (git-reference
523 (url "https://github.com/Neoteroi/BlackSheep")
524 (commit (string-append "v" version))))
525 (file-name (git-file-name name version))
526 (sha256
527 (base32 "1k6yqsqnh6nnhi8z5v2yqpxs7qsk35zwd7gcr7cdh825f2vrl7js"))))
528 (build-system pyproject-build-system)
529 (arguments
530 (list
531 ;; tests: 1821 passed
532 ;;
533 ;; Run all unit tests, but do not run integration tests from `itests`
534 ;; directory.
535 #:test-flags
536 #~(list "tests")
537 #:phases
538 #~(modify-phases %standard-phases
539 (add-before 'build 'cythonize
540 (lambda _
541 (with-directory-excursion "blacksheep"
542 (for-each (lambda (file)
543 (invoke "cython" "-3" file "-I" "."))
544 (find-files "." ".*\\.pyx$"))))))))
545 (native-inputs
546 (list nss-certs-for-test
547 python-cython
548 python-defusedxml
549 python-flask
550 python-jinja2
551 python-pydantic
552 python-pyjwt
553 python-pytest
554 python-pytest-asyncio
555 python-setuptools
556 python-starlette))
557 (propagated-inputs
558 (list python-certifi
559 python-essentials
560 python-essentials-openapi
561 python-guardpost
562 python-httptools
563 python-rodi
564 python-itsdangerous))
565 (home-page "https://github.com/Neoteroi/BlackSheep")
566 (synopsis "Asynchronous framework to build event based web applications")
567 (description
568 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
569
570The framework offers
571@itemize
572@item A rich code API, based on dependency injection and inspired by Flask and
573ASP.NET Core.
574@item A typing-friendly codebase, which enables a comfortable development
575experience thanks to hints when coding with IDEs.
576@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
577and JSON.
578@item A cross-platform framework, using the most modern versions of Python.
579@item Good performance.
580@end itemize")
581 (license license:expat)))
582
583(define-public python-bleach
584 (package
585 (name "python-bleach")
586 (version "6.3.0")
587 (source
588 (origin
589 (method git-fetch)
590 (uri (git-reference
591 (url "https://github.com/mozilla/bleach")
592 (commit (string-append "v" version))))
593 (file-name (git-file-name name version))
594 (sha256
595 (base32 "02abk9ixn010sqpbdsd7nxms0gv4prwv6d3nplb8giq85lpn1kkb"))
596 (snippet
597 #~(begin
598 (use-modules (guix build utils))
599 (substitute* (find-files "." "\\.py$")
600 (("bleach\\._vendor\\.html5lib") "html5lib"))
601 (delete-file-recursively "bleach/_vendor/html5lib")))))
602 (build-system pyproject-build-system)
603 (arguments
604 (list
605 ;; tests: 448 passed, 1 deselected, 3 xfailed
606 #:test-flags
607 #~(list (string-append "--deselect=tests/test_clean.py::"
608 "test_self_closing_tags_self_close[wbr]"))
609 #:phases
610 #~(modify-phases %standard-phases
611 (add-after 'unpack 'relax-requirements
612 (lambda _
613 ;; "tinycss2>=1.1.0,<1.5"
614 ;; The 'sanity-check of python-nbclassic fails without this.
615 (substitute* "setup.py"
616 (("\"tinycss2.*") "")))))))
617 (native-inputs
618 (list python-pytest
619 python-setuptools))
620 (propagated-inputs
621 (list python-html5lib
622 python-tinycss2
623 python-webencodings))
624 (home-page "https://github.com/mozilla/bleach")
625 (synopsis "Whitelist-based HTML-sanitizing tool")
626 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
627 (license license:asl2.0)))
628
629(define-public python-cloudpathlib
630 (package
631 (name "python-cloudpathlib")
632 (version "0.23.0")
633 (source
634 (origin
635 (method git-fetch)
636 (uri (git-reference
637 (url "https://github.com/drivendataorg/cloudpathlib")
638 (commit (string-append "v" version))))
639 (file-name (git-file-name name version))
640 (sha256
641 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
642 (build-system pyproject-build-system)
643 (arguments
644 (list
645 ;; tests: 977 passed, 15 skipped, 8642 warnings
646 #:test-flags
647 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
648 ;; TODO: Package azure-identity (required for this file)
649 "--ignore=tests/test_azure_specific.py"
650 ;; TypeError: Retry.__init__() got an unexpected keyword
651 ;; argument 'timeout'
652 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")))
653 (native-inputs
654 (list ;; python-azure-identity
655 python-dotenv
656 python-flit-core
657 python-psutil
658 python-pydantic
659 python-pytest
660 python-pytest-cases
661 python-pytest-reportlog
662 python-pytest-xdist
663 python-shortuuid
664 python-tenacity))
665 (propagated-inputs
666 (list python-azure-storage-blob
667 python-azure-storage-file-datalake
668 python-boto3
669 python-google-cloud-storage
670 python-typing-extensions))
671 (home-page "https://github.com/drivendataorg/cloudpathlib")
672 (synopsis "Pathlib-style classes for cloud storage services")
673 (description
674 "This package provides a Python library with classes that mimic
675@code{pathlib.Path}'s interface for URIs from different cloud storage
676services.")
677 (license license:expat)))
678
679(define-public python-conda-package-handling
680 (package
681 (name "python-conda-package-handling")
682 (version "2.4.0")
683 (source
684 (origin
685 (method git-fetch)
686 (uri (git-reference
687 (url "https://github.com/conda/conda-package-handling/")
688 (commit version)))
689 (file-name (git-file-name name version))
690 (sha256
691 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
692 (build-system pyproject-build-system)
693 (native-inputs
694 (list python-bottle
695 python-mock
696 python-pytest-8
697 python-pytest-mock
698 python-setuptools))
699 (propagated-inputs
700 (list python-conda-package-streaming))
701 (home-page "https://conda.io")
702 (synopsis "Create and extract conda packages of various formats")
703 (description
704 "This library is an abstraction of Conda package handling and a tool for
705extracting, creating, and converting between formats.")
706 (license license:bsd-3)))
707
708(define-public python-conda-package-streaming
709 (package
710 (name "python-conda-package-streaming")
711 (version "0.12.0")
712 (source
713 (origin
714 (method url-fetch)
715 (uri (pypi-uri "conda_package_streaming" version))
716 (sha256
717 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
718 (build-system pyproject-build-system)
719 (arguments
720 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
721 (list #:tests? #f))
722 (native-inputs
723 (list python-flit-core))
724 (propagated-inputs
725 (list python-requests
726 python-zstandard))
727 (home-page "https://conda.github.io/conda-package-streaming/")
728 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
729 (description
730 "This package provides an efficient library to read from new and old format
731@code{.conda} and @code{.tar.bz2} conda packages.")
732 (license license:bsd-3)))
733
734(define-public python-dependency-groups
735 (package
736 (name "python-dependency-groups")
737 (version "1.3.1")
738 (source
739 (origin
740 (method url-fetch)
741 (uri (pypi-uri "dependency_groups" version))
742 (sha256
743 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
744 (build-system pyproject-build-system)
745 (propagated-inputs (list python-packaging python-tomli))
746 (native-inputs (list python-flit-core python-pytest))
747 (home-page "https://dependency-groups.readthedocs.io/")
748 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
749 (description
750 "This package provides a library which is able to parse dependency groups (PEP
751735), following includes, and provide that data as output.")
752 (license license:expat)))
753
754(define-public python-devpi-common
755 (package
756 (name "python-devpi-common")
757 (version "4.0.4")
758 (source
759 (origin
760 (method url-fetch)
761 (uri (pypi-uri "devpi_common" version))
762 (sha256
763 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
764 (build-system pyproject-build-system)
765 (propagated-inputs (list python-lazy python-packaging-legacy
766 python-requests))
767 (native-inputs
768 (list python-pytest
769 python-setuptools
770 python-wheel))
771 (home-page "https://github.com/devpi/devpi")
772 (synopsis
773 "Utilities jointly used by devpi-server, devpi-client and others")
774 (description
775 "This package provides utilities jointly used by devpi-server,
776devpi-client and others.")
777 (license license:expat)))
778
779(define-public python-devpi-client
780 (package
781 (name "python-devpi-client")
782 (version "7.2.0")
783 (source
784 (origin
785 (method url-fetch)
786 (uri (pypi-uri "devpi-client" version))
787 (sha256
788 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
789 (build-system pyproject-build-system)
790 (arguments
791 (list
792 #:test-flags
793 ;; This wants to use pip install
794 '(list "--ignore=testing/test_upload.py"
795 ;; These complain about finding distutils. It's not my fault,
796 ;; mate, setuptools is right there, but you won't pick it!
797 "--ignore=testing/test_list_remove.py"
798 "--ignore=testing/test_main.py"
799 "--ignore=testing/test_install.py"
800 "--ignore=testing/test_functional.py"
801 "--ignore=testing/test_test.py")
802 #:phases
803 '(modify-phases %standard-phases
804 (add-after 'unpack 'patch-tests
805 (lambda _
806 ;; Do not replace the directory name of the store item.
807 (substitute* "testing/conftest.py"
808 (("\"devpi-server\", \"devpi-init\"")
809 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
810 (add-before 'check 'set-HOME
811 ;; Some tests need this
812 (lambda _ (setenv "HOME" "/tmp"))))))
813 (propagated-inputs (list python-pypa-build
814 python-check-manifest
815 python-colorama
816 python-devpi-common
817 python-iniconfig
818 python-pkginfo
819 python-platformdirs
820 python-pluggy
821 python-pypitoken
822 python-tomli))
823 (native-inputs
824 (list python-devpi-server
825 python-pytest
826 python-setuptools
827 python-virtualenv))
828 (home-page "https://github.com/devpi/devpi")
829 (synopsis "Devpi upload/install/... commands for Python developers")
830 (description
831 "The devpi command line tool is typically used in conjunction with
832devpi-server. It allows uploading, testing and installing packages from devpi
833indexes.")
834 (license license:expat)))
835
836(define-public python-devpi-process
837 (package
838 (name "python-devpi-process")
839 (version "1.0.2")
840 (source
841 (origin
842 (method url-fetch)
843 (uri (pypi-uri "devpi_process" version))
844 (sha256
845 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
846 (build-system pyproject-build-system)
847 (arguments
848 (list
849 #:phases
850 '(modify-phases %standard-phases
851 (add-after 'unpack 'relax-requirements
852 (lambda _
853 ;; Our package is too old, sorry.
854 (substitute* "pyproject.toml"
855 (("typing-extensions>=4.12.2")
856 "typing-extensions>=4.10.0"))))
857 (add-after 'unpack 'patch-tool-locations
858 (lambda* (#:key inputs #:allow-other-keys)
859 (substitute* "src/devpi_process/__init__.py"
860 (("_exe\\(\"devpi-init\"\\)")
861 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
862 (("_exe\\(\"devpi-server\"\\)")
863 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
864 (("_exe\\(\"devpi\"\\)")
865 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
866 (propagated-inputs (list python-devpi-client python-devpi-server
867 python-typing-extensions))
868 (native-inputs
869 (list nss-certs-for-test
870 python-hatchling
871 python-hatch-vcs
872 python-httpx
873 python-pytest))
874 (home-page "https://github.com/devpi/devpi")
875 (synopsis "API to create and use a devpi server process")
876 (description
877 "This package provides a programmatic API to create and use a devpi
878server process.")
879 (license license:expat)))
880
881(define-public python-devpi-server
882 (package
883 (name "python-devpi-server")
884 (version "6.20.3")
885 (source
886 (origin
887 (method git-fetch)
888 (uri (git-reference
889 (url "https://github.com/devpi/devpi")
890 (commit (string-append "server-" version))))
891 (file-name (git-file-name name version))
892 (sha256
893 (base32 "11q1bnd8rl55gcv99xkmg10i8z9l91kvmgrvcz1803mwkcs0isp8"))))
894 (build-system pyproject-build-system)
895 (arguments
896 (list
897 ;; tests: 1134 passed, 53 skipped, 29 warnings
898 #:phases
899 #~(modify-phases %standard-phases
900 (add-after 'unpack 'chdir
901 (lambda _
902 (chdir "server")))
903 (add-after 'chdir 'relax-requirements
904 (lambda _
905 (substitute* "pyproject.toml"
906 ;; It straggles to check argon2 in passlib on any versions
907 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
908 ;; such extra feature 'argon2'",).
909 (("passlib\\[argon2\\]") "passlib")
910 (("\"py>=1.4.23\",") ""))))
911 (add-before 'check 'pre-check
912 (lambda _
913 (setenv "HOME" "/tmp"))))))
914 (propagated-inputs (list python-argon2-cffi
915 python-attrs
916 python-defusedxml
917 python-devpi-common
918 python-httpx
919 python-itsdangerous
920 python-lazy
921 python-passlib
922 python-platformdirs
923 python-pluggy
924 python-pyramid
925 python-repoze-lru
926 python-requests
927 python-ruamel.yaml-0.16 ;FIXME: rename
928 python-strictyaml
929 python-waitress))
930 (native-inputs
931 (list nss-certs-for-test
932 python-execnet
933 python-pytest
934 python-pytest-asyncio
935 python-pytest-timeout
936 python-setuptools
937 python-webtest))
938 (home-page "https://devpi.net")
939 (synopsis "Pypi.org caching server")
940 (description "This package implements a reliable private and pypi.org
941caching server.")
942 (license license:expat)))
943
944(define-public python-dicomweb-client
945 (package
946 (name "python-dicomweb-client")
947 (version "0.60.0")
948 (source
949 (origin
950 (method git-fetch)
951 (uri (git-reference
952 (url "https://github.com/ImagingDataCommons/dicomweb-client")
953 (commit (string-append "v" version))))
954 (file-name (git-file-name name version))
955 (sha256
956 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
957 (build-system pyproject-build-system)
958 (arguments
959 (list
960 #:phases
961 #~(modify-phases %standard-phases
962 (add-after 'unpack 'remove-dynamic-versioning
963 (lambda _
964 (substitute* "pyproject.toml"
965 ;; Dynamic versioning via 'uv-dynamic-versioning' is
966 ;; not suitable for Guix.
967 (("dynamic = \\[\"version\"\\]")
968 (string-append "version = \""
969 #$version "\""))))))))
970 (native-inputs
971 (list python-hatchling
972 python-pytest
973 python-pytest-localserver))
974 (propagated-inputs
975 (list python-numpy
976 python-pillow
977 python-pydicom
978 python-requests
979 python-retrying))
980 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
981 (synopsis "Python client for DICOMweb RESTful services")
982 (description
983 "@code{dicomweb_client} provides client interfaces for DICOMweb RESTful
984services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
985DICOM objects over the web, respectively.")
986 (license license:expat)))
987
988(define-public python-dnslib
989 (package
990 (name "python-dnslib")
991 (version "0.9.26")
992 (source
993 (origin
994 (method git-fetch)
995 (uri (git-reference
996 (url "https://github.com/paulc/dnslib")
997 (commit version)))
998 (file-name (git-file-name name version))
999 (sha256
1000 (base32 "1x1l727qx6x0kw7yhzhxhbm40wgrh367dr3y0vaix0wrhi30qsyk"))))
1001 (build-system pyproject-build-system)
1002 (arguments
1003 (list
1004 #:phases
1005 #~(modify-phases %standard-phases
1006 (replace 'check
1007 (lambda* (#:key tests? #:allow-other-keys)
1008 (when tests?
1009 (invoke "./run_tests.sh")))))))
1010 (native-inputs
1011 (list python-setuptools))
1012 (home-page "https://github.com/paulc/dnslib")
1013 (synopsis "Library to encode/decode DNS wire-format packets")
1014 (description
1015 "This package provides a simple Python library to encode/decode DNS
1016wire-format packets.")
1017 (license license:bsd-3)))
1018
1019(define-public python-docusign-esign
1020 (package
1021 (name "python-docusign-esign")
1022 (version "5.0.0")
1023 (source
1024 (origin
1025 (method url-fetch)
1026 (uri (pypi-uri "docusign-esign" version))
1027 (sha256
1028 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
1029 (build-system pyproject-build-system)
1030 ;; Testing requires undocumented setup changes with network access to
1031 ;; <demo.docusign.net>, and so testing is disabled here.
1032 (arguments `(#:tests? #f))
1033 (native-inputs
1034 (list python-setuptools
1035 python-wheel))
1036 (propagated-inputs
1037 (list python-certifi
1038 python-dateutil
1039 python-urllib3
1040 python-pyjwt
1041 python-cryptography))
1042 (home-page "https://developers.docusign.com/")
1043 (synopsis "DocuSign Python Client")
1044 (description
1045 "The Official DocuSign Python Client Library used to interact with the
1046eSign REST API. Send, sign, and approve documents using this client.")
1047 (license license:expat)))
1048
1049(define-public python-domain-connect
1050 (package
1051 (name "python-domain-connect")
1052 (version "0.0.11")
1053 (source
1054 (origin
1055 (method git-fetch) ;no tests in PyPI archive
1056 (uri (git-reference
1057 (url "https://github.com/Domain-Connect/domainconnect_python")
1058 (commit (string-append "v" version))))
1059 (file-name (git-file-name name version))
1060 (sha256
1061 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
1062 (build-system pyproject-build-system)
1063 (arguments
1064 (list
1065 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
1066 ;; present in container.
1067 #:tests? #f
1068 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
1069 (native-inputs
1070 (list python-setuptools))
1071 (propagated-inputs
1072 (list python-cryptography
1073 python-dnspython
1074 python-future
1075 python-publicsuffixlist))
1076 (home-page "https://github.com/Domain-Connect/domainconnect_python")
1077 (synopsis "Client library for Domain Connect protocol")
1078 (description
1079 "This package provides a Service Provider functionality in both Sync and
1080Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
1081 (license license:expat)))
1082
1083(define-public python-domain-connect-dyndns
1084 (package
1085 (name "python-domain-connect-dyndns")
1086 (version "0.0.9")
1087 (source
1088 (origin
1089 (method url-fetch)
1090 (uri (pypi-uri "domain-connect-dyndns" version))
1091 (sha256
1092 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
1093 (build-system pyproject-build-system)
1094 (arguments
1095 (list
1096 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
1097 ;; present in container.
1098 #:tests? #f
1099 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
1100 (native-inputs
1101 (list python-setuptools
1102 python-wheel))
1103 (propagated-inputs
1104 (list python-dnspython
1105 python-domain-connect
1106 python-requests
1107 python-validators))
1108 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
1109 (synopsis "Domain Connect Dynamic DNS in Python")
1110 ;; Project lacks meaningful description in README, see
1111 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
1112 (description
1113 "Python client library for Dynamic DNS using
1114@url{https://www.domainconnect.org/, Domain Connect} protocol.")
1115 (license license:expat)))
1116
1117(define-public python-dominate
1118 (package
1119 (name "python-dominate")
1120 (version "2.9.1")
1121 (source
1122 (origin
1123 (method git-fetch)
1124 (uri (git-reference
1125 (url "https://github.com/Knio/dominate")
1126 (commit version)))
1127 (file-name (git-file-name name version))
1128 (sha256
1129 (base32 "0kv5ly8w2026pwvgamfjxav1g58wmgim30nr9w9qfwcipfjxwn5c"))))
1130 (build-system pyproject-build-system)
1131 (native-inputs
1132 (list python-pytest
1133 python-setuptools))
1134 (home-page "https://github.com/Knio/dominate")
1135 (synopsis "Python library for creating and manipulating HTML documents")
1136 (description
1137 "Dominate is a Python library for creating and manipulating HTML
1138documents using an elegant DOM API.")
1139 (license license:lgpl3+)))
1140
1141(define-public python-dropbox
1142 (package
1143 (name "python-dropbox")
1144 (version "12.0.2")
1145 (source
1146 (origin
1147 (method git-fetch) ; no tests in PyPI release
1148 (uri (git-reference
1149 (url "https://github.com/dropbox/dropbox-sdk-python")
1150 (commit (string-append "v" version))))
1151 (file-name (git-file-name name version))
1152 (sha256
1153 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
1154 (build-system pyproject-build-system)
1155 (arguments
1156 (list
1157 #:test-flags
1158 #~(list "-k" (string-join
1159 ;; Network access is required.
1160 (list "not test_bad_auth"
1161 "test_app_auth"
1162 "test_bad_pins"
1163 "test_bad_pins_session"
1164 "test_downscope"
1165 "test_multi_auth"
1166 "test_path_root"
1167 "test_path_root_err"
1168 "test_refresh"
1169 "test_rpc"
1170 "test_team"
1171 "test_upload_download"
1172 "test_versioned_route")
1173 " and not "))
1174 #:phases
1175 #~(modify-phases %standard-phases
1176 (add-after 'unpack 'relax-requirements
1177 (lambda _
1178 (substitute* "setup.py"
1179 ;; 'stone>=2,<3.3.3',
1180 ((">=2,<3.3.3") ">=2,<3.4.0"))))
1181 (add-before 'check 'pre-check
1182 (lambda _
1183 ;; Otherwise tests setup erroring.
1184 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
1185 (setenv "LEGACY_USER_CLIENT_ID" "guix")
1186 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
1187 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
1188 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
1189 (setenv "SCOPED_USER_CLIENT_ID" "guix")
1190 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
1191 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
1192 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
1193 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
1194 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
1195 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
1196 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
1197 (native-inputs
1198 (list nss-certs-for-test
1199 python-mock
1200 python-pytest
1201 python-pytest-mock
1202 python-setuptools
1203 python-wheel))
1204 (propagated-inputs
1205 (list python-requests python-six python-stone))
1206 (home-page "https://www.dropbox.com/developers")
1207 (synopsis "Official Dropbox API Client")
1208 (description "This package provides a Python SDK for integrating with the
1209Dropbox API v2.")
1210 (license license:expat)))
1211
1212(define-public python-dukpy
1213 (package
1214 (name "python-dukpy")
1215 (version "0.5.1")
1216 (source
1217 (origin
1218 (method git-fetch)
1219 (uri (git-reference
1220 (url "https://github.com/amol-/dukpy")
1221 (commit version)))
1222 (file-name (git-file-name name version))
1223 (sha256
1224 (base32 "1qsqfgy12frrdikjf353bsvhln11jixc3qs9rc1zra55k0569036"))))
1225 (build-system pyproject-build-system)
1226 (arguments
1227 (list
1228 #:test-flags
1229 #~(list #$@(map (lambda (test)
1230 (string-append "--deselect=tests/test_installer.py"
1231 "::TestPackageInstaller::"
1232 test))
1233 ;; Network access is required.
1234 (list "test_install_command"
1235 "test_install_command_latest_ver"
1236 "test_install_command_substrate_error"
1237 "test_install_command_without_dest"
1238 "test_install_react"
1239 "test_install_scoped_package"
1240 "test_install_unexisting_package"
1241 "test_install_unexisting_version")))))
1242 (native-inputs
1243 (list python-mock
1244 python-pytest
1245 python-setuptools
1246 python-webassets))
1247 (home-page "https://github.com/amol-/dukpy")
1248 (synopsis "Simple JavaScript interpreter for Python")
1249 (description
1250 "DukPy is a simple JavaScript interpreter for Python built on top of
1251duktape engine without any external dependency. It comes with a bunch of
1252common transpilers built-in for convenience:
1253@itemize
1254@item CoffeeScript
1255@item BabelJS
1256@item TypeScript
1257@item JSX
1258@item LESS
1259@end itemize")
1260 (license license:expat)))
1261
1262(define-public python-essentials-openapi
1263 (package
1264 (name "python-essentials-openapi")
1265 (version "1.2.1")
1266 (source
1267 (origin
1268 (method git-fetch)
1269 (uri (git-reference
1270 (url "https://github.com/Neoteroi/essentials-openapi")
1271 (commit (string-append "v" version))))
1272 (file-name (git-file-name name version))
1273 (sha256
1274 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
1275 (build-system pyproject-build-system)
1276 (native-inputs
1277 (list python-flask
1278 python-hatchling
1279 python-pydantic
1280 python-pytest
1281 python-rich))
1282 (propagated-inputs
1283 (list python-essentials
1284 python-httpx
1285 python-jinja2
1286 python-markupsafe
1287 python-pyyaml))
1288 (home-page "https://github.com/Neoteroi/essentials-openapi/")
1289 (synopsis "Generator for OpenAPI Documentation")
1290 (description
1291 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
1292formats. Generator for other kinds of documents from OpenAPI Documentation
1293files.")
1294 (license license:expat)))
1295
1296(define-public python-eventlet
1297 (package
1298 (name "python-eventlet")
1299 (version "0.41.0")
1300 (source
1301 (origin
1302 (method git-fetch)
1303 (uri (git-reference
1304 (url "https://github.com/eventlet/eventlet")
1305 (commit version)))
1306 (file-name (git-file-name name version))
1307 (sha256
1308 (base32 "1rn8f5v08n48dh6aycdxfwz17w4xwkgny7bhy5llqn5dl0g2dw43"))))
1309 (build-system pyproject-build-system)
1310 (arguments
1311 (list
1312 ;; tests: 618 passed, 121 skipped, 20 deselected, 52 warnings
1313 #:test-flags
1314 #~(list
1315 #$@(map (lambda (test)
1316 (string-append "--deselect=tests/" test))
1317 (list
1318 ;; dns.resolver.NoResolverConfiguration: cannot open
1319 ;; /etc/resolv.conf
1320 "greendns_test.py::TestProxyResolver::test_clear"
1321 "greendns_test.py::TinyDNSTests::test_noraise_dns_tcp"
1322 "greendns_test.py::TinyDNSTests::test_raise_dns_tcp"
1323 ;; assert <built-in function gethostbyname> is <function
1324 ;; gethostbyname at 0x7ffff3491120>
1325 "socket_test.py::test_dns_methods_are_green"
1326 ;; socket.gaierror: [Errno -8] Servname not supported for
1327 ;; ai_socktype
1328 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo"
1329 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_idn"
1330 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_inet"
1331 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_inet6"
1332 "greendns_test.py::test_hosts_no_network"
1333 ;; AssertionError: Expected single line "pass" in stdout
1334 "asyncio_test.py::test_asyncio_does_not_use_greendns"
1335 "greendns_test.py::test_import_rdtypes_then_eventlet"
1336 "patcher_test.py::test_patcher_existing_logging_module_lock")))
1337 #:phases
1338 #~(modify-phases %standard-phases
1339 (add-after 'unpack 'avoid-OSError
1340 (lambda _
1341 ;; If eventlet tries to load greendns, an OSError is thrown when
1342 ;; getprotobyname is called. Thankfully there is an environment
1343 ;; variable to disable the greendns import, so use it. Note that
1344 ;; this error is propagated to child packages too, so enforce the
1345 ;; changed default.
1346 (substitute* "eventlet/green/socket.py"
1347 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
1348 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")"))))
1349 (add-before 'check 'pre-check
1350 (lambda _
1351 (setenv "EVENTLET_HUB" "asyncio"))))))
1352 (native-inputs
1353 (list python-hatchling
1354 python-hatch-vcs
1355 python-pytest
1356 python-pytest-aiohttp))
1357 (propagated-inputs
1358 (list python-dnspython
1359 python-greenlet))
1360 (home-page "https://eventlet.net")
1361 (synopsis "Concurrent networking library for Python")
1362 (description
1363 "Eventlet is a concurrent networking library for Python that
1364allows you to change how you run your code, not how you write it.
1365It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1366Coroutines ensure that the developer uses a blocking style of programming
1367that is similar to threading, but provide the benefits of non-blocking I/O.
1368The event dispatch is implicit, which means you can easily use @code{Eventlet}
1369from the Python interpreter, or as a small part of a larger application.
1370
1371Note: In Guix, this package assumes the environment variable
1372@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
1373to anything else.")
1374 (license license:expat)))
1375
1376(define-public python-feedgen
1377 (package
1378 (name "python-feedgen")
1379 (version "1.0.0")
1380 (source
1381 (origin
1382 (method git-fetch)
1383 (uri (git-reference
1384 (url "https://github.com/lkiesow/python-feedgen")
1385 (commit (string-append "v" version))))
1386 (file-name (git-file-name name version))
1387 (sha256
1388 (base32
1389 "1ppwxp9yck29pk2p2dlrrad6rz16l9h4fhcajp9yb7ns94fm5v3l"))))
1390 (build-system pyproject-build-system)
1391 (propagated-inputs
1392 (list python-dateutil
1393 python-lxml))
1394 (native-inputs
1395 (list python-pytest
1396 python-setuptools))
1397 (home-page "https://feedgen.kiesow.be")
1398 (synopsis "Atom and RSS feed generator")
1399 (description
1400 "This module can be used to generate web feeds in both Atom and RSS
1401format. It also extensible and comes with an extension to produce podcasts.")
1402 ;; The README says that this package is released under both licenses, and
1403 ;; permits the user to choose whichever is more convenient to them.
1404 (license (list license:bsd-2
1405 license:lgpl3+))))
1406
1407(define-public python-flask-caching
1408 (package
1409 (name "python-flask-caching")
1410 (version "2.3.1")
1411 (source
1412 (origin
1413 (method url-fetch)
1414 (uri (pypi-uri "flask_caching" version))
1415 (sha256
1416 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
1417 (build-system pyproject-build-system)
1418 (arguments
1419 (list
1420 #:test-flags
1421 ;; Tests requiring running Redis or dated python-cache.
1422 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
1423 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
1424 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
1425 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
1426 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
1427 "-k" "not test_client_override_reflected_on_cachelib_methods")))
1428 (native-inputs
1429 (list python-pytest
1430 python-pytest-asyncio
1431 python-pytest-xprocess
1432 python-setuptools))
1433 (propagated-inputs
1434 (list python-cachelib
1435 python-flask))
1436 (home-page "https://github.com/pallets-eco/flask-caching")
1437 (synopsis "Caching extension for Flask")
1438 (description
1439 "This package provides a caching support to Flask applications, it's a
1440fort ok https://github.com/thadeusb/flask-cache.")
1441 (license license:bsd-3)))
1442
1443(define-public python-flask-paginate
1444 (package
1445 (name "python-flask-paginate")
1446 (version "2024.4.12")
1447 (source
1448 (origin
1449 (method git-fetch)
1450 (uri (git-reference
1451 (url "https://github.com/lixxu/flask-paginate")
1452 (commit (string-append "v" version))))
1453 (file-name (git-file-name name version))
1454 (sha256
1455 (base32 "1q4ajwk0pzc6934g07gdryjcwi6rd9iqcwv5g5s718dfx2bj1831"))))
1456 (arguments
1457 (list #:test-backend #~'custom
1458 #:test-flags #~(list "tests/tests.py")))
1459 (build-system pyproject-build-system)
1460 (native-inputs
1461 (list python-pytest
1462 python-setuptools))
1463 (propagated-inputs
1464 (list python-flask))
1465 (home-page "https://github.com/lixxu/flask-paginate")
1466 (synopsis "Simple paginate support for Flask")
1467 (description
1468 "Flask-paginate is a simple pagination extension for Flask which is
1469inspired by Ruby's will_paginate library. It supports several CSS frameworks.")
1470 (license license:bsd-3)))
1471
1472(define-public python-flask-limiter
1473 (package
1474 (name "python-flask-limiter")
1475 (version "4.1.1")
1476 (source
1477 (origin
1478 (method git-fetch)
1479 (uri (git-reference
1480 (url "https://github.com/alisaifee/flask-limiter")
1481 (commit version)))
1482 (file-name (git-file-name name version))
1483 (sha256
1484 (base32 "18n12iayzw6qqys26824j5lfbphfcammpmyrvys1k0rn4xcbifln"))))
1485 (build-system pyproject-build-system)
1486 (arguments
1487 (list
1488 ;; tests: 155 passed, 620 deselected
1489 #:test-flags
1490 #~(list "-k" (simple-format #f "not (~a)"
1491 (string-join
1492 (append
1493 ;; The test suite spawns storages in Docker.
1494 '("memcache" "reset_unsupported")
1495 '("mongo")
1496 '("redis" "clear_limits"
1497 "constructor_arguments_over_config"
1498 "custom_key_prefix" "fallback_to_memory"))
1499 " or ")))
1500 #:phases
1501 #~(modify-phases %standard-phases
1502 (add-before 'check 'adjust-tests
1503 (lambda _
1504 (substitute* "pytest.ini"
1505 ((".*--cov=.*") ""))
1506 (substitute* (find-files "tests" "\\.py$")
1507 (("import pymemcache.*") "")
1508 (("import pymongo.*") "")
1509 (("import redis.*") "")))))))
1510 (native-inputs (list python-flask-restful
1511 python-hatch-vcs
1512 python-hatchling
1513 python-hiro
1514 python-pytest
1515 python-pytest-check
1516 python-pytest-mock))
1517 (propagated-inputs (list python-flask
1518 python-limits
1519 python-ordered-set
1520 python-rich))
1521 (home-page "https://flask-limiter.readthedocs.org/")
1522 (synopsis "Rate limiting for Flask applications")
1523 (description
1524 "Flask-Limiter adds rate limiting to Flask applications.
1525Rate limits can be configured at different levels such as:
1526
1527@itemize
1528@item Application wide global limits per user
1529@item Default limits per route
1530@item By blueprints
1531@item By class-based views
1532@item By individual routes
1533@end itemize")
1534 (license license:expat)))
1535
1536(define-public python-gdown
1537 (package
1538 (name "python-gdown")
1539 (version "5.2.0")
1540 (source
1541 (origin
1542 (method url-fetch)
1543 (uri (pypi-uri "gdown" version))
1544 (sha256
1545 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
1546 (build-system pyproject-build-system)
1547 (arguments (list #:tests? #f)) ;network access is required
1548 (native-inputs
1549 (list python-hatch-fancy-pypi-readme
1550 python-hatch-vcs
1551 python-hatchling))
1552 (propagated-inputs
1553 (list python-beautifulsoup4
1554 python-filelock
1555 python-requests
1556 python-tqdm))
1557 (home-page "https://github.com/wkentaro/gdown")
1558 (synopsis "Google Drive Public File/Folder Downloader")
1559 (description
1560 "This package implements a functionality to download large files
1561recursively from Google Drive with option to filter them by file
1562formats (PDF/XML/CSV).")
1563 (license license:expat)))
1564
1565(define-public python-globus-sdk
1566 (package
1567 (name "python-globus-sdk")
1568 (version "4.4.0")
1569 (source
1570 (origin
1571 (method git-fetch)
1572 (uri (git-reference
1573 (url "https://github.com/globus/globus-sdk-python")
1574 (commit version)))
1575 (file-name (git-file-name name version))
1576 (sha256
1577 (base32 "1d0zw9dkpdhsf9zdg3nk6b55gqwzc3v2rj76nj7999hjmq8350vh"))))
1578 (build-system pyproject-build-system)
1579 (arguments
1580 (list
1581 #:phases
1582 #~(modify-phases %standard-phases
1583 (add-before 'check 'pre-check
1584 (lambda _ (setenv "HOME" "/tmp"))))))
1585 (native-inputs
1586 (list python-flaky
1587 python-pytest
1588 python-pytest-randomly
1589 python-responses
1590 python-setuptools))
1591 (propagated-inputs
1592 (list python-cryptography
1593 python-importlib-resources
1594 python-pyjwt
1595 python-requests))
1596 (home-page "https://github.com/globus/globus-sdk-python")
1597 (synopsis "Globus SDK for Python")
1598 (description
1599 "This package provides a SDK for convenient Pythonic interface to
1600@url{https://www.globus.org/, Globus} APIs.")
1601 (license license:asl2.0)))
1602
1603(define-public python-guardpost
1604 (package
1605 (name "python-guardpost")
1606 (version "1.0.4")
1607 (source
1608 (origin
1609 (method git-fetch)
1610 (uri (git-reference
1611 (url "https://github.com/Neoteroi/guardpost")
1612 (commit (string-append "v" version))))
1613 (file-name (git-file-name name version))
1614 (sha256
1615 (base32 "1xsakqn36g2h1s5rnbaf1lasx1jn4skqhmb8kdl1k4pgxp5sczyy"))))
1616 (build-system pyproject-build-system)
1617 (arguments
1618 (list
1619 ;; Possible timing issue, see:
1620 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
1621 #:test-flags '(list "--ignore=tests/test_jwts.py")))
1622 (native-inputs
1623 (list python-flask
1624 python-hatchling
1625 python-pytest
1626 python-pytest-asyncio))
1627 (propagated-inputs
1628 (list python-rodi
1629 ;; [optional]
1630 python-cryptography
1631 python-essentials
1632 python-pyjwt))
1633 (home-page "https://github.com/Neoteroi/GuardPost/")
1634 (synopsis
1635 "Authentication and authorization framework for Python applications")
1636 (description
1637 "GuardPost is a framework to handle authentication and
1638authorization in asynchronous Python applications.
1639
1640Its features include
1641
1642@itemize
1643@item Strategy to implement authentication.
1644@item Strategy to implement authorization.
1645@item Support for dependency injection
1646@item Built-in support for JSON Web Tokens (JWTs) authentication.
1647@end itemize")
1648 (license license:expat)))
1649
1650(define-public python-habanero
1651 (package
1652 (name "python-habanero")
1653 (version "2.3.0")
1654 (source
1655 (origin
1656 (method git-fetch)
1657 (uri (git-reference
1658 (url "https://github.com/sckott/habanero")
1659 (commit (string-append "v" version))))
1660 (file-name (git-file-name name version))
1661 (sha256
1662 (base32 "1a842izcc8l4wb8004v92zsq1h4yc7qc2wi9am6x0f7idlx993sw"))))
1663 (build-system pyproject-build-system)
1664 (arguments
1665 ;; Run only a small portion of unit tests without network access
1666 ;; requirement.
1667 (list #:test-flags #~(list "test/test-filters.py")))
1668 (native-inputs
1669 (list python-hatchling
1670 python-pytest))
1671 (propagated-inputs
1672 (list python-httpx
1673 python-packaging
1674 python-tqdm
1675 python-urllib3))
1676 (home-page "https://github.com/sckott/habanero")
1677 (synopsis "Low Level Client for Crossref Search API")
1678 (description
1679 "Low Level Client for
1680@url{https://api.crossref.org/swagger-ui/index.html, Crossref Search API}.")
1681 (license license:expat)))
1682
1683(define-public python-hookdns
1684 (package
1685 (name "python-hookdns")
1686 (version "2.0.0")
1687 (source
1688 (origin
1689 (method url-fetch)
1690 (uri (pypi-uri "hookdns" version))
1691 (sha256
1692 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
1693 (build-system pyproject-build-system)
1694 (arguments
1695 (list
1696 #:test-flags
1697 #~(list "-k" (string-join
1698 ;; Tests requiring networking.
1699 (list
1700 "not test_patch_contextmanager_with_another_hostname"
1701 "test_patch_contextmanager_with_another_hostname_ipv6"
1702 "test_patch_contextmanager_with_ipv4"
1703 "test_patch_contextmanager_with_name"
1704 "test_patch_contextmanager_with_public_fqdn_and_"
1705 "test_patch_contextmanager_with_unknown_hostname"
1706 "test_patch_decorator_with_another_hostname"
1707 "test_patch_decorator_with_another_hostname_ipv6"
1708 "test_patch_decorator_with_ipv4"
1709 "test_patch_decorator_with_name"
1710 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
1711 "test_patch_decorator_with_unknown_hostname"
1712 "test_real_getaddrinfo_with_name_ipv6"
1713 "test_real_getaddrinfo_with_public_fqdn_ipv4"
1714 "test_real_getaddrinfo_with_public_fqdn_ipv6"
1715 "test_real_gethostbyname_ex_with_public_fqdn"
1716 "test_real_gethostbyname_with_public_fqdn"
1717 "test_real_requests_ip"
1718 "test_real_requests_name"
1719 "test_real_requests_with_public_fqdn"
1720 "test_reentrant")
1721 " and not "))))
1722 (native-inputs
1723 (list python-pytest
1724 python-requests
1725 python-setuptools
1726 python-wheel))
1727 (home-page "https://github.com/cle-b/hookdns")
1728 (synopsis "DNS resolution customization library")
1729 (description
1730 "HookDNS implements functionality that allows for modifying name
1731resolution in a Python script without any changes to the hosts file or the use
1732of a fake DNS resolver.")
1733 (license license:asl2.0)))
1734
1735(define-public python-httpcore2
1736 (package
1737 (name "python-httpcore2")
1738 (version "2.4.0")
1739 (source
1740 (origin
1741 (method git-fetch)
1742 (uri (git-reference
1743 (url "https://github.com/pydantic/httpx2")
1744 (commit (string-append "v" version))))
1745 (file-name (git-file-name name version))
1746 (sha256
1747 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
1748 (build-system pyproject-build-system)
1749 (arguments
1750 (list
1751 #:phases
1752 #~(modify-phases %standard-phases
1753 (add-after 'unpack 'preparation
1754 (lambda _
1755 (chdir "src/httpcore2")
1756 (copy-recursively "../../tests/httpcore2" "tests")
1757 (substitute* (find-files "tests" "\\.py$")
1758 (("tests\\.httpcore2") "tests")
1759 (("tests/httpcore2") "tests"))))
1760 (add-before 'build 'set-version
1761 (lambda _
1762 (substitute* "pyproject.toml"
1763 ((".*uv-dynamic-versioning>.*") "")
1764 (("source.*uv-dynamic-versioning.*") "source = 'vcs'"))
1765 (substitute* "httpcore2/__init__.py"
1766 ((".*= version\\(.*")
1767 (format #f "__version__ = ~s~%" #$version))))))))
1768 (native-inputs
1769 (list python-hatch-fancy-pypi-readme
1770 python-hatch-vcs
1771 python-hatchling
1772 python-pytest
1773 python-pytest-httpbin
1774 python-pytest-trio))
1775 (propagated-inputs
1776 (list python-h11
1777 python-truststore
1778 ;; [optional]
1779 python-anyio
1780 python-h2
1781 python-socksio
1782 python-trio))
1783 (home-page "https://github.com/pydantic/httpx2")
1784 (synopsis "Minimal low-level HTTP client")
1785 (description
1786 "The HTTP Core package provides a minimal low-level HTTP client, which
1787does one thing only. Sending HTTP requests.
1788
1789Some things HTTP Core does do:
1790@itemize
1791@item Sending HTTP requests.
1792@item Thread-safe / task-safe connection pooling.
1793@item HTTP(S) proxy & SOCKS proxy support.
1794@item Supports HTTP/1.1 and HTTP/2.
1795@item Provides both sync and async interfaces.
1796@item Async backend support for @code{asyncio} and @code{trio}.
1797@end itemize")
1798 (license license:bsd-3)))
1799
1800(define-public python-httpretty
1801 (package
1802 (name "python-httpretty")
1803 (version "1.1.4")
1804 (source
1805 (origin
1806 (method url-fetch)
1807 (uri (pypi-uri "httpretty" version))
1808 (sha256
1809 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
1810 (build-system pyproject-build-system)
1811 (arguments
1812 (list
1813 #:test-flags
1814 ;; Only run Unit tests.
1815 #~(list "--ignore=tests/bugfixes"
1816 "--ignore=tests/functional"
1817 "--ignore=tests/pyopenssl"
1818 "-k" (string-join
1819 ;; Tests pattern failing with one of these errors:
1820 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
1821 ;; has no attribute 'should'
1822 ;; AttributeError: 'function' object has no attribute
1823 ;; 'when'
1824 ;; AttributeError: 'AssertionBuilder' object has no
1825 ;; attribute 'should_not'
1826 (list "not fake_socket_passes_through"
1827 "fakesock_socket"
1828 "request_parse_body_when"
1829 "test_Entry_class_normalizes_headers"
1830 "test_has_request"
1831 "test_httpretty_should_raise_proper"
1832 "test_parse_request_line_connect"
1833 "test_request_parse_querystring"
1834 "test_request_string_representation"
1835 "test_request_stubs_internals")
1836 " and not "))))
1837 (native-inputs
1838 (list nss-certs-for-test
1839 python-freezegun
1840 python-mock
1841 python-pytest
1842 python-setuptools
1843 python-sure
1844 python-wheel))
1845 (home-page "https://httpretty.readthedocs.io")
1846 (synopsis "HTTP client mock for Python")
1847 (description
1848 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
1849@code{fakeweb}.")
1850 (license license:expat)))
1851
1852(define-public python-httpx2
1853 (package
1854 (name "python-httpx2")
1855 (version "2.4.0")
1856 (source
1857 (origin
1858 (method git-fetch)
1859 (uri (git-reference
1860 (url "https://github.com/pydantic/httpx2")
1861 (commit (string-append "v" version))))
1862 (file-name (git-file-name name version))
1863 (sha256
1864 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
1865 (arguments
1866 (list
1867 ;; tests: 1227 passed, 200 deselected
1868 #:test-flags
1869 ;; Networking tests.
1870 #~(list "-k" (string-join
1871 (list "not test_async_proxy_close[asyncio]"
1872 "test_async_proxy_close[trio]"
1873 "test_auth"
1874 "test_binary"
1875 "test_client_decode_text_using_autodetect"
1876 "test_client_decode_text_using_explicit_encoding"
1877 "test_follow_redirects"
1878 "test_get"
1879 "test_idna_url[http_with_custom_port]"
1880 "test_idna_url[http_with_port]"
1881 "test_idna_url[https_with_custom_port]"
1882 "test_idna_url[https_with_port]"
1883 "test_idna_url[https_without_port]"
1884 "test_idna_url[idna_label_after_ascii_label]"
1885 "test_idna_url[unicode_tr46_compat]"
1886 "test_json"
1887 "test_post"
1888 "test_redirects"
1889 "test_response_decode_text_using_autodetect"
1890 "test_sync_proxy_close"
1891 "test_url_malformed_idna_label_after_ascii_label"
1892 "test_url_mixed_valid_and_malformed_idna_labels"
1893 "test_verbose")
1894 " and not "))
1895 #:phases
1896 #~(modify-phases %standard-phases
1897 (add-after 'unpack 'preparation
1898 (lambda _
1899 (chdir "src/httpx2")
1900 (copy-recursively "../../tests/httpx2" "tests")
1901 (substitute* (find-files "tests" "\\.py$")
1902 (("tests\\.httpx2") "tests")
1903 (("tests/httpx2") "tests"))))
1904 (add-before 'build 'set-version
1905 (lambda _
1906 (substitute* "pyproject.toml"
1907 (("\"uv-dynamic-versioning>=0\\.8\\.0\"") "")
1908 (("source.*uv-dynamic-versioning.*") "source = 'vcs'")
1909 (("\\.uv-dynamic-versioning") ".vcs")))))))
1910 (build-system pyproject-build-system)
1911 (native-inputs
1912 (list python-chardet
1913 python-hatch-fancy-pypi-readme
1914 python-hatch-vcs
1915 python-hatchling
1916 python-pytest
1917 python-trustme
1918 python-uvicorn))
1919 (propagated-inputs
1920 (list python-anyio
1921 python-httpcore2
1922 python-idna
1923 python-truststore
1924 python-typing-extensions ;Python version < 3.13
1925 ;; [optional]
1926 python-brotli
1927 python-click
1928 python-h2
1929 python-pygments
1930 python-rich
1931 python-socksio
1932 python-zstandard))
1933 (home-page "https://github.com/pydantic/httpx2")
1934 (synopsis "The next generation HTTP client")
1935 (description
1936 "HTTPX2 is a fully featured HTTP client library for Python. It includes
1937an integrated command line client, has support for both HTTP/1.1 and HTTP/2,
1938and provides both sync and async APIs.")
1939 (license license:bsd-3)))
1940
1941(define-public python-jiter
1942 (package
1943 (name "python-jiter")
1944 (version "0.15.0")
1945 (source
1946 (origin
1947 (method git-fetch)
1948 (uri (git-reference
1949 (url "https://github.com/pydantic/jiter/")
1950 (commit (string-append "v" version))))
1951 (file-name (git-file-name name version))
1952 (sha256
1953 (base32 "1z2ljacsc64yykkxvjnq6rq4z56xwr8jhcw02ckv6b85kc66x63p"))))
1954 (build-system pyproject-build-system)
1955 (arguments
1956 (list
1957 #:imported-modules (append %cargo-build-system-modules
1958 %pyproject-build-system-modules)
1959 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
1960 (guix build pyproject-build-system)
1961 (guix build utils))
1962 #:phases
1963 #~(modify-phases %standard-phases
1964 (add-after 'unpack 'prepare-cargo-build-system
1965 (lambda args
1966 (for-each (lambda (phase)
1967 (format #t "Running cargo phase: ~a~%" phase)
1968 (apply (assoc-ref cargo:%standard-phases phase)
1969 #:cargo-target #$(cargo-triplet)
1970 args))
1971 '(prepare-rust-crates
1972 unpack-rust-crates
1973 configure
1974 check-for-pregenerated-files
1975 patch-cargo-checksums))))
1976 (add-after 'prepare-cargo-build-system 'chdir
1977 (lambda _
1978 (chdir "crates/jiter-python"))))))
1979 (native-inputs
1980 (append (list maturin
1981 python-dirty-equals
1982 python-pytest
1983 rust
1984 `(,rust "cargo"))
1985 (or (and=> (%current-target-system)
1986 (compose list make-rust-sysroot))
1987 '())))
1988 (inputs (cargo-inputs 'jiter))
1989 (home-page "https://github.com/pydantic/jiter/")
1990 (synopsis "Iterable JSON parser")
1991 (description
1992 "This package provides a fast Python iterable JSON parser, backed by Rust
1993libraries.")
1994 (license license:bsd-3)))
1995
1996(define-public python-justhtml
1997 (package
1998 (name "python-justhtml")
1999 (version "1.13.0")
2000 (source
2001 (origin
2002 (method git-fetch)
2003 (uri (git-reference
2004 (url "https://github.com/emilstenstrom/justhtml")
2005 (commit (string-append "v" version))))
2006 (file-name (git-file-name name version))
2007 (sha256
2008 (base32 "1hy5w3lr08sj3pivs46nnlfsvrd9ynmicxcrjk4sxbpg7411lyj5"))))
2009 (build-system pyproject-build-system)
2010 (native-inputs
2011 (list python-hatchling))
2012 (home-page "https://github.com/emilstenstrom/justhtml")
2013 (synopsis "Pure Python HTML5 parser")
2014 (description
2015 "JustHTML is a pure Python HTML5 parser. It has a simple API and does
2016not require C extensions or system dependencies.")
2017 (license license:expat)))
2018
2019(define-public python-hf-xet
2020 (package
2021 (name "python-hf-xet")
2022 (version "1.5.1")
2023 (source
2024 (origin
2025 (method git-fetch)
2026 (uri (git-reference
2027 (url "https://github.com/huggingface/xet-core")
2028 (commit (string-append "v" version))))
2029 (file-name (git-file-name name version))
2030 (sha256
2031 (base32 "0bczy0a8g7fnscpz2plq2pq0b8vapx9q5sny13rs2fa04ypq992f"))
2032 (modules '((guix build utils)))
2033 (snippet #~(for-each delete-file
2034 (find-files "." "Cargo\\.lock$")))))
2035 (build-system pyproject-build-system)
2036 (arguments
2037 (list
2038 #:imported-modules (append %cargo-build-system-modules
2039 %pyproject-build-system-modules)
2040 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
2041 (guix build pyproject-build-system)
2042 (guix build utils))
2043 #:phases
2044 #~(modify-phases %standard-phases
2045 (add-after 'unpack 'prepare-cargo-build-system
2046 (lambda args
2047 (for-each (lambda (phase)
2048 (format #t "Running cargo phase: ~a~%" phase)
2049 (apply (assoc-ref cargo:%standard-phases phase)
2050 #:cargo-target #$(cargo-triplet)
2051 args))
2052 '(prepare-rust-crates
2053 unpack-rust-crates
2054 configure
2055 check-for-pregenerated-files
2056 patch-cargo-checksums))))
2057 (add-after 'prepare-cargo-build-system 'chdir
2058 (lambda _
2059 (chdir "hf_xet"))))))
2060 (native-inputs
2061 (append (list maturin
2062 python-pytest
2063 rust
2064 `(,rust "cargo"))
2065 (or (and=> (%current-target-system)
2066 (compose list make-rust-sysroot))
2067 '())))
2068 (inputs (cargo-inputs 'hf_xet))
2069 (home-page "https://github.com/huggingface/xet-core")
2070 (synopsis "Transfer large files with the Hugging Face Hub")
2071 (description
2072 "This package enables @code{python-huggingface-hub} to utilize xet
2073storage for uploading and downloading to HF Hub. Xet storage provides
2074chunk-based deduplication, efficient storage/retrieval with local disk
2075caching, and backwards compatibility with Git LFS. This library is not meant
2076to be used directly, and is instead intended to be used from
2077@code{python-huggingface-hub}.")
2078 (license license:asl2.0)))
2079
2080(define-public python-huggingface-hub
2081 (package
2082 (name "python-huggingface-hub")
2083 (version "0.36.2")
2084 (source
2085 (origin
2086 (method git-fetch)
2087 (uri (git-reference
2088 (url "https://github.com/huggingface/huggingface_hub")
2089 (commit (string-append "v" version))))
2090 (file-name (git-file-name name version))
2091 (sha256
2092 (base32 "0hgdkfp7472sp0fjm5mwsx2rdlbr2ms8mzfzs0zr501gdwr7jjki"))))
2093 (build-system pyproject-build-system)
2094 (arguments
2095 (list
2096 #:test-flags
2097 ;; We don't have sentence_transformers...
2098 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
2099 ;; ...nor do we have InquirerPy...
2100 "--ignore=tests/test_command_delete_cache.py"
2101 ;; ...or timm...
2102 "--ignore=contrib/timm/test_timm.py"
2103 ;; ...or spacy_huggingface_hub
2104 "--ignore=contrib/spacy/test_spacy.py"
2105 ;; These all require internet access
2106 "--ignore=tests/test_cache_no_symlinks.py"
2107 "--ignore=tests/test_cache_layout.py"
2108 "--ignore=tests/test_commit_scheduler.py"
2109 "--ignore=tests/test_file_download.py"
2110 "--ignore=tests/test_hf_api.py"
2111 "--ignore=tests/test_hf_file_system.py"
2112 "--ignore=tests/test_inference_api.py"
2113 "--ignore=tests/test_inference_async_client.py"
2114 "--ignore=tests/test_inference_client.py"
2115 "--ignore=tests/test_inference_text_generation.py"
2116 "--ignore=tests/test_login_utils.py"
2117 "--ignore=tests/test_offline_utils.py"
2118 "--ignore=tests/test_repocard.py"
2119 "--ignore=tests/test_repository.py"
2120 "--ignore=tests/test_snapshot_download.py"
2121 "--ignore=tests/test_utils_cache.py"
2122 "--ignore=tests/test_utils_git_credentials.py"
2123 "--ignore=tests/test_utils_http.py"
2124 "--ignore=tests/test_utils_pagination.py"
2125 "--ignore=tests/test_webhooks_server.py"
2126 "-k" (string-append
2127 "not test_push_to_hub"
2128 " and not test_from_pretrained_model_id_only"
2129 " and not test_from_pretrained_model_id_and_revision"
2130 ;; These all require internet access
2131 " and not test_auth"
2132 " and not test_oauth"
2133 " and not test_utils_sha"
2134 " and not test_inference_providers"
2135 " and not test_xet"))
2136 #:phases
2137 '(modify-phases %standard-phases
2138 (add-before 'check 'pre-check
2139 ;; Some tests need to write to HOME.
2140 (lambda _ (setenv "HOME" "/tmp"))))))
2141 (propagated-inputs
2142 (list python-filelock
2143 python-fsspec
2144 python-hf-xet
2145 python-packaging
2146 python-pyyaml
2147 python-requests
2148 python-tqdm
2149 python-typing-extensions))
2150 (native-inputs
2151 (list python-aiohttp
2152 python-fastapi
2153 python-jedi
2154 python-jinja2
2155 python-numpy
2156 python-pillow
2157 python-pydantic
2158 python-pytest
2159 python-pytest-asyncio
2160 python-pytest-env
2161 python-pytest-mock
2162 python-pytest-rerunfailures
2163 python-pytest-vcr
2164 python-pytest-xdist
2165 python-setuptools
2166 python-types-requests
2167 python-types-toml
2168 python-types-urllib3
2169 python-typing-extensions
2170 python-urllib3))
2171 (home-page "https://huggingface.co/docs/huggingface_hub/")
2172 (synopsis "Client library for accessing the huggingface.co hub")
2173 (description
2174 "This package provides a client library to download and publish models,
2175datasets and other repos on the @url{huggingface.co} hub.")
2176 (license license:asl2.0)))
2177
2178(define-public python-kubernetes
2179 (package
2180 (name "python-kubernetes")
2181 (version "35.0.0")
2182 (source
2183 (origin
2184 (method url-fetch)
2185 (uri (pypi-uri "kubernetes" version))
2186 (sha256
2187 (base32 "1vh9bzq175fzv9av3v37lcfh37yzss2d9vxrb0a84fa2ji2d601x"))))
2188 (build-system pyproject-build-system)
2189 (arguments
2190 (list
2191 #:test-flags
2192 #~(list
2193 ;; The following tests expect a local running Kubernetes cluster.
2194 "--ignore=kubernetes/e2e_test"
2195 "--ignore=kubernetes/dynamic")))
2196 (native-inputs
2197 (list python-pytest
2198 python-setuptools))
2199 (propagated-inputs
2200 (list python-certifi
2201 python-dateutil
2202 python-durationpy
2203 python-google-auth
2204 python-pyyaml
2205 python-requests
2206 python-requests-oauthlib
2207 python-six ;XXX: hard dependency
2208 python-urllib3
2209 python-websocket-client))
2210 (home-page "https://github.com/kubernetes-client/python")
2211 (synopsis "Python client for Kubernetes")
2212 (description
2213 "This package provides an official Python client library for
2214@url{http://kubernetes.io, Kubernetes}.")
2215 (license license:asl2.0)))
2216
2217(define-public python-lazr-restfulclient
2218 (package
2219 (name "python-lazr-restfulclient")
2220 (version "0.14.6")
2221 (source
2222 (origin
2223 (method url-fetch)
2224 (uri (pypi-uri "lazr.restfulclient" version))
2225 (sha256
2226 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
2227 (build-system pyproject-build-system)
2228 (arguments
2229 (list
2230 #:phases
2231 #~(modify-phases %standard-phases
2232 ;; Disable part of the test suite to avoid the lazr.authentication
2233 ;; requirement, which requires 'oauth', a Python 2 only library.
2234 (add-after 'unpack 'remove-some-checks
2235 (lambda _
2236 (with-directory-excursion "src/lazr/restfulclient/tests"
2237 (for-each delete-file '("test_oauth.py" "test_docs.py")))
2238 (substitute* "setup.py"
2239 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
2240 ""))))
2241 (replace 'check
2242 (lambda* (#:key tests? #:allow-other-keys)
2243 (if tests?
2244 (invoke "zope-testrunner" "--test-path=src")
2245 (format #t "test suite not run~%")))))))
2246 (native-inputs
2247 (list python-setuptools
2248 python-testtools
2249 python-wheel
2250 python-wsgi-intercept
2251 python-zope-testrunner))
2252 (propagated-inputs
2253 (list python-distro
2254 python-httplib2
2255 python-oauthlib
2256 python-pyparsing
2257 python-setuptools
2258 python-six
2259 python-wadllib))
2260 (home-page "https://launchpad.net/lazr.restfulclient")
2261 (synopsis "Web client Python library extending wadlib")
2262 (description "This package provides a programmable client library that
2263adds functionality on top of @code{wadlib}.")
2264 (license license:lgpl3+)))
2265
2266(define-public python-launchpadlib
2267 (package
2268 (name "python-launchpadlib")
2269 (version "2.1.0")
2270 (source
2271 (origin
2272 (method url-fetch)
2273 (uri (pypi-uri "launchpadlib" version))
2274 (sha256
2275 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
2276 (build-system pyproject-build-system)
2277 (arguments
2278 (list #:phases #~(modify-phases %standard-phases
2279 (add-before 'check 'set-home
2280 (lambda _
2281 ;; Tests require a writable home.
2282 (setenv "HOME" "/tmp"))))))
2283 (propagated-inputs
2284 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
2285 (native-inputs (list python-pytest python-testresources python-wadllib
2286 python-setuptools python-wheel))
2287 (home-page "https://documentation.ubuntu.com/launchpad")
2288 (synopsis "Python client library for Launchpad's web service")
2289 (description "@code{launchpadlib} is a Python library that allows
2290scripting Launchpad via its the web service API.")
2291 (license license:lgpl3+)))
2292
2293(define-public python-lazr-uri
2294 (package
2295 (name "python-lazr-uri")
2296 (version "1.0.7")
2297 (source
2298 (origin
2299 (method url-fetch)
2300 (uri (pypi-uri "lazr_uri" version))
2301 (sha256
2302 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
2303 (build-system pyproject-build-system)
2304 (arguments
2305 (list
2306 #:phases
2307 #~(modify-phases %standard-phases
2308 (replace 'check
2309 (lambda* (#:key tests? #:allow-other-keys)
2310 (if tests?
2311 (invoke "zope-testrunner" "--test-path=src")
2312 (format #t "test suite not run~%")))))))
2313 (native-inputs (list python-setuptools python-zope-testrunner))
2314 (home-page "https://launchpad.net/lazr.uri")
2315 (synopsis "Python URI manipulation library")
2316 (description "This Python package provides a self-contained, easily
2317reusable library for parsing, manipulating, and generating URIs.")
2318 (license license:lgpl3)))
2319
2320(define-public python-ldaptor
2321 (package
2322 (name "python-ldaptor")
2323 (version "21.2.0")
2324 (source
2325 (origin
2326 (method url-fetch)
2327 (uri (pypi-uri "ldaptor" version))
2328 (sha256
2329 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
2330 (build-system pyproject-build-system)
2331 (arguments
2332 (list
2333 #:test-flags
2334 #~(list "-m" "twisted.trial"
2335 (string-append "-j" (number->string (parallel-job-count)))
2336 "ldaptor")
2337 #:phases
2338 #~(modify-phases %standard-phases
2339 (add-after 'unpack 'python-3.12-patch
2340 (lambda _
2341 (substitute* "ldaptor/config.py"
2342 (("SafeConfigParser")
2343 "ConfigParser"))))
2344 (add-before 'check 'disable-failing-tests
2345 (lambda _
2346 ;; Testing with Twisted 22.4 results in infinite loop creating
2347 ;; temporary config files, see
2348 ;; <https://github.com/twisted/ldaptor/issues/238>.
2349 (delete-file "ldaptor/test/test_config.py")))
2350 (replace 'check
2351 (lambda* (#:key tests? test-flags #:allow-other-keys)
2352 (when tests?
2353 (apply invoke "python" test-flags)))))))
2354 (native-inputs
2355 (list python-setuptools
2356 python-wheel))
2357 (propagated-inputs
2358 (list python-passlib
2359 python-pyopenssl
2360 python-service-identity ; to pass sanity check, for Twisted[tls]
2361 python-pyparsing
2362 python-twisted
2363 python-zope-interface))
2364 (home-page "https://github.com/twisted/ldaptor")
2365 (synopsis "Pure-Python Twisted library for LDAP")
2366 (description
2367 "This package provides a Python Twisted library for LDAP, which key
2368feaatures are:
2369@itemize
2370@item LDAP client logic
2371@item separately-accessible LDAP and BER protocol message generation/parsing
2372@item ASCII-format LDAP filter generation and parsing
2373@item LDIF format data generation
2374@item Samba password changing logic
2375@end itemize")
2376 (license license:expat)))
2377
2378(define-public python-legacy-cgi
2379 (package
2380 (name "python-legacy-cgi")
2381 (version "2.6.1")
2382 (source
2383 (origin
2384 (method url-fetch)
2385 (uri (pypi-uri "legacy_cgi" version))
2386 (sha256
2387 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
2388 (build-system pyproject-build-system)
2389 (native-inputs (list python-poetry-core python-pytest))
2390 (home-page "https://github.com/jackrosenthal/legacy-cgi")
2391 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
2392 (description
2393 "This is a fork of the standard library modules @code{cgi} and
2394@code{cgitb}. They are slated to be removed from the Python standard library
2395in Python 3.13 by PEP-594.")
2396 (license license:psfl)))
2397
2398(define-public python-librouteros
2399 (package
2400 (name "python-librouteros")
2401 (version "4.0.0")
2402 (source
2403 (origin
2404 (method git-fetch)
2405 (uri (git-reference
2406 (url "https://github.com/luqasz/librouteros")
2407 (commit version)))
2408 (file-name (git-file-name name version))
2409 (sha256
2410 (base32 "0in952b2idb5j8v6sxfm21gqbr5i5776w5ir0hdsxjrl2f29305v"))))
2411 (build-system pyproject-build-system)
2412 (arguments
2413 (list
2414 #:build-backend "hatchling.build"
2415 #:test-flags
2416 #~(list "tests/unit")))
2417 (native-inputs
2418 (list python-hatchling
2419 python-pytest
2420 python-pytest-asyncio
2421 python-stamina))
2422 (home-page "https://github.com/luqasz/librouteros")
2423 (synopsis "Python implementation of MikroTik RouterOS API")
2424 (description
2425 "This package implements MikroTik's @code{RouterOS} API.")
2426 (license license:gpl2+)))
2427
2428(define-public python-opentelemetry-api
2429 (package
2430 (name "python-opentelemetry-api")
2431 (version "1.37.0")
2432 (source
2433 (origin
2434 (method url-fetch)
2435 (uri (pypi-uri "opentelemetry_api" version))
2436 (sha256
2437 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
2438 (build-system pyproject-build-system)
2439 (propagated-inputs (list python-importlib-metadata
2440 python-typing-extensions))
2441 (native-inputs (list python-hatchling
2442 python-opentelemetry-test-utils-bootstrap))
2443 (home-page "https://opentelemetry.io/docs/languages/python/")
2444 (synopsis "OpenTelemetry Python API")
2445 (description "@code{OpenTelemetry} Python API.")
2446 (license license:asl2.0)))
2447
2448(define-public python-opentelemetry-api-bootstrap
2449 (hidden-package
2450 (package/inherit python-opentelemetry-api
2451 (name "python-opentelemetry-api-bootstrap")
2452 (arguments
2453 (list
2454 #:tests? #f))
2455 (native-inputs (list python-hatchling)))))
2456
2457(define-public python-opentelemetry-sdk
2458 (package
2459 (name "python-opentelemetry-sdk")
2460 (version "1.37.0")
2461 (source
2462 (origin
2463 (method url-fetch)
2464 (uri (pypi-uri "opentelemetry_sdk" version))
2465 (sha256
2466 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
2467 (build-system pyproject-build-system)
2468 (propagated-inputs (list python-opentelemetry-api
2469 python-opentelemetry-semantic-conventions
2470 python-typing-extensions))
2471 (native-inputs (list python-hatchling
2472 python-opentelemetry-test-utils-bootstrap
2473 python-pytest))
2474 (home-page "https://opentelemetry.io/docs/languages/python/")
2475 (synopsis "OpenTelemetry Python SDK")
2476 (description "@code{OpenTelemetry} Python SDK.")
2477 (license license:asl2.0)))
2478
2479(define-public python-opentelemetry-sdk-bootstrap
2480 (hidden-package
2481 (package/inherit python-opentelemetry-sdk
2482 (name "python-opentelemetry-sdk-bootstrap")
2483 (arguments (list #:tests? #f))
2484 (propagated-inputs (list python-opentelemetry-api-bootstrap
2485 python-opentelemetry-semantic-conventions-bootstrap))
2486 (native-inputs (list python-hatchling)))))
2487
2488(define-public python-opentelemetry-semantic-conventions
2489 (package
2490 (name "python-opentelemetry-semantic-conventions")
2491 (version "0.58b0")
2492 (source
2493 (origin
2494 (method url-fetch)
2495 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
2496 (sha256
2497 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
2498 (build-system pyproject-build-system)
2499 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
2500 (native-inputs (list python-hatchling))
2501 (home-page "https://opentelemetry.io/docs/languages/python/")
2502 (synopsis "OpenTelemetry Semantic Conventions")
2503 (description "@code{OpenTelemetry} Semantic Conventions.")
2504 (license license:asl2.0)))
2505
2506(define-public python-opentelemetry-semantic-conventions-bootstrap
2507 (hidden-package
2508 (package/inherit python-opentelemetry-semantic-conventions
2509 (name "python-opentelemetry-semantic-conventions-bootstrap")
2510 (arguments
2511 (list
2512 #:tests? #f))
2513 (propagated-inputs (list python-opentelemetry-api-bootstrap
2514 python-typing-extensions)))))
2515
2516(define-public python-opentelemetry-test-utils
2517 (package
2518 (name "python-opentelemetry-test-utils")
2519 (version "0.58b0")
2520 (source
2521 (origin
2522 (method url-fetch)
2523 (uri (pypi-uri "opentelemetry_test_utils" version))
2524 (sha256
2525 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
2526 (build-system pyproject-build-system)
2527 (arguments (list #:tests? #f)) ; No tests in the wheel.
2528 (propagated-inputs
2529 (list python-asgiref
2530 python-opentelemetry-api
2531 python-opentelemetry-sdk))
2532 (native-inputs (list python-hatchling))
2533 (home-page "https://opentelemetry.io/docs/languages/python/")
2534 (synopsis "Test utilities for OpenTelemetry unit tests")
2535 (description "Test utilities for @code{OpenTelemetry} unit tests.")
2536 (license license:asl2.0)))
2537
2538(define-public python-opentelemetry-test-utils-bootstrap
2539 (hidden-package
2540 (package/inherit python-opentelemetry-test-utils
2541 (name "python-opentelemetry-test-utils-bootstrap")
2542 (propagated-inputs
2543 (list python-asgiref
2544 python-opentelemetry-api-bootstrap
2545 python-opentelemetry-sdk-bootstrap)))))
2546
2547(define-public python-pathy
2548 (package
2549 (name "python-pathy")
2550 (version "0.11.0")
2551 (source
2552 (origin
2553 (method url-fetch)
2554 (uri (pypi-uri "pathy" version))
2555 (sha256
2556 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
2557 (build-system pyproject-build-system)
2558 (native-inputs
2559 (list python-mock
2560 python-pytest
2561 python-setuptools))
2562 (propagated-inputs
2563 (list python-pathlib-abc-for-python-pathy
2564 python-smart-open-6
2565 python-typer))
2566 (home-page "https://github.com/justindujardin/pathy")
2567 (synopsis "Path interface for local and cloud bucket storage")
2568 (description "Pathy is a python package (with type annotations) for
2569working with Cloud Bucket storage providers using a @code{pathlib} interface.
2570It provides @code{pathlib.Path} subclasses for local and cloud bucket
2571storage.")
2572 (license license:asl2.0)))
2573
2574(define-public python-portend
2575 (package
2576 (name "python-portend")
2577 (version "3.2.1")
2578 (source
2579 (origin
2580 (method url-fetch)
2581 (uri (pypi-uri "portend" version))
2582 (sha256
2583 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
2584 (build-system pyproject-build-system)
2585 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
2586 ;; download dependencies.
2587 (arguments
2588 '(#:test-flags '("-k" "not project")))
2589 (native-inputs
2590 (list python-pytest
2591 python-setuptools
2592 python-setuptools-scm))
2593 (propagated-inputs
2594 (list python-tempora))
2595 (home-page "https://github.com/jaraco/portend")
2596 (synopsis "Monitor TCP ports for bound or unbound states")
2597 (description
2598 "@code{python-portend} can be used to monitor TCP ports for bound or
2599unbound states. For example, waiting for a port to be occupied or freed
2600within a set timeout. @code{python-portend} can also be used directly from
2601the command line.")
2602 (license license:expat)))
2603
2604(define-public python-prawcore
2605 (package
2606 (name "python-prawcore")
2607 (version "4.0.0")
2608 (source
2609 (origin
2610 (method git-fetch)
2611 (uri (git-reference
2612 (url "https://github.com/praw-dev/prawcore")
2613 (commit (string-append "v" version))))
2614 (file-name (git-file-name name version))
2615 (sha256
2616 (base32 "1kqqv1n9bibxfgagbyd8vl0yzrd4lr58xl59swz5v70w0kfap5fm"))))
2617 (build-system pyproject-build-system)
2618 (arguments
2619 (list
2620 ;; This test fails with a str rather than a bytes-like object.
2621 #:test-flags #~(list "-k" "not test_request__service_unavailable")))
2622 (native-inputs
2623 (list nss-certs-for-test
2624 python-betamax
2625 python-betamax-matchers
2626 python-betamax-serializers
2627 python-hatchling
2628 python-mock
2629 python-pytest
2630 python-testfixtures
2631 python-vcrpy))
2632 (propagated-inputs
2633 (list python-requests))
2634 (synopsis "Core component of PRAW")
2635 (description "PRAWcore is a low-level communication layer used by PRAW.")
2636 (home-page "https://praw.readthedocs.io/en/latest/")
2637 (license license:bsd-2)))
2638
2639(define-public python-praw
2640 (package
2641 (name "python-praw")
2642 (version "8.0.2")
2643 (source
2644 (origin
2645 (method git-fetch)
2646 (uri (git-reference
2647 (url "https://github.com/praw-dev/praw")
2648 (commit (string-append "v" version))))
2649 (file-name (git-file-name name version))
2650 (sha256
2651 (base32 "15kwvkc6ag83p3mrfnq6ffyvbw4d3njx0dl0vv00y7724b2rpqxw"))))
2652 (build-system pyproject-build-system)
2653 (arguments
2654 (list #:test-flags
2655 #~(list "--ignore=tests/units/models"
2656 "--ignore=tests/integration/models"
2657 "--ignore=tests/unit/test_config.py"
2658 "--ignore=tests/integration/test_reddit.py")))
2659 (native-inputs
2660 (list nss-certs-for-test
2661 python-betamax
2662 python-betamax-matchers
2663 python-hatchling
2664 python-pytest
2665 python-vcrpy))
2666 (propagated-inputs
2667 (list python-defusedxml
2668 python-prawcore
2669 python-update-checker
2670 python-websocket-client))
2671 (synopsis "Python Reddit API Wrapper")
2672 (description "PRAW is a Python package that allows for simple access to
2673Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
2674API rules.")
2675 (home-page "https://praw.readthedocs.io/en/latest/")
2676 (license license:bsd-2)))
2677
2678(define-public python-frozenlist
2679 (package
2680 (name "python-frozenlist")
2681 (version "1.8.0")
2682 (source
2683 (origin
2684 (method git-fetch)
2685 (uri (git-reference
2686 (url "https://github.com/aio-libs/frozenlist")
2687 (commit (string-append "v" version))))
2688 (file-name (git-file-name name version))
2689 (sha256
2690 (base32 "0r1kxf5b562zrn04nl912i6a8y1fyc891l1284v0zj9llb97limy"))))
2691 ;; XXX: Without "wheel", the 'install phase can't find the wheel.
2692 (outputs (list "out" "wheel"))
2693 (build-system pyproject-build-system)
2694 ;; The configuration contains explicit early calls to pytest_cov.
2695 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
2696 (native-inputs
2697 (list python-cython
2698 python-expandvars
2699 python-pytest
2700 python-setuptools
2701 python-tomli))
2702 (home-page "https://github.com/aio-libs/frozenlist")
2703 (synopsis "List-like data structure for Python")
2704 (description "@code{frozenlist.FrozenList} is a list-like structure which
2705implements @code{collections.abc.MutableSequence}. It can be made immutable
2706by calling @code{FrozenList.freeze}.")
2707 (license license:asl2.0)))
2708
2709(define-public python-aiobotocore
2710 (package
2711 (name "python-aiobotocore")
2712 (version "3.0.0")
2713 (source
2714 (origin
2715 (method url-fetch)
2716 (uri (pypi-uri "aiobotocore" version))
2717 (sha256
2718 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
2719 (build-system pyproject-build-system)
2720 (arguments
2721 ;; TODO: Tests need some setupt, see Makefile.
2722 (list #:tests? #f))
2723 (native-inputs
2724 (list python-setuptools))
2725 (propagated-inputs
2726 (list python-aiohttp
2727 python-aioitertools
2728 python-botocore
2729 python-dateutil
2730 python-jmespath
2731 python-multidict
2732 python-typing-extensions
2733 python-wrapt))
2734 (home-page "https://github.com/aio-libs/aiobotocore")
2735 (synopsis "Async client for AWS services using botocore and aiohttp")
2736 (description "This package provides an async client for Amazon services
2737using botocore and aiohttp/asyncio. This library is a mostly full featured
2738asynchronous version of botocore.")
2739 (license license:asl2.0)))
2740
2741(define-public python-aiohappyeyeballs
2742 (package
2743 (name "python-aiohappyeyeballs")
2744 (properties '((commit . "cc53cf8a1d31f7b460a0114214aac66956f0e2ed")
2745 (revision . "0")))
2746 (version (git-version "2.6.1"
2747 (assoc-ref properties 'revision)
2748 (assoc-ref properties 'commit)))
2749 (source
2750 (origin
2751 (method git-fetch)
2752 (uri (git-reference
2753 (url "https://github.com/aio-libs/aiohappyeyeballs")
2754 (commit (assoc-ref properties 'commit))))
2755 (file-name (git-file-name name version))
2756 (sha256
2757 (base32 "0nc723f4sxryg5h9z8paysmy9dnqw2jy4srxp9axrxkv9qrawa7n"))))
2758 (build-system pyproject-build-system)
2759 (native-inputs
2760 (list python-poetry-core
2761 python-pytest
2762 python-pytest-asyncio))
2763 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
2764 (synopsis "Happy Eyeballs for asyncio")
2765 (description "This library exists to allow connecting with Happy
2766Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
2767DNS name.")
2768 (license license:psfl)))
2769
2770(define-public python-aioitertools
2771 (package
2772 (name "python-aioitertools")
2773 (version "0.12.0")
2774 (source
2775 (origin
2776 (method url-fetch)
2777 (uri (pypi-uri "aioitertools" version))
2778 (sha256
2779 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
2780 (build-system pyproject-build-system)
2781 (arguments
2782 (list #:test-backend #~'custom
2783 #:test-flags #~(list "-m" "aioitertools.tests")))
2784 (native-inputs
2785 (list python-flit-core))
2786 (home-page "https://pypi.org/project/aioitertools/")
2787 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
2788 (description
2789 "This package provides an implementation of itertools, builtins, and more
2790for AsyncIO and mixed-type iterables.")
2791 (license license:expat)))
2792
2793(define-public python-aiosignal
2794 (package
2795 (name "python-aiosignal")
2796 (version "1.4.0")
2797 (source
2798 (origin
2799 (method url-fetch)
2800 (uri (pypi-uri "aiosignal" version))
2801 (sha256
2802 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
2803 (build-system pyproject-build-system)
2804 (arguments
2805 (list
2806 #:phases
2807 #~(modify-phases %standard-phases
2808 (add-after 'unpack 'avoid-pytest-cov-preload
2809 (lambda _
2810 (substitute* "pytest.ini"
2811 (("-p pytest_cov") "")))))))
2812 (native-inputs
2813 (list python-pytest
2814 python-pytest-asyncio
2815 python-setuptools))
2816 (propagated-inputs
2817 (list python-frozenlist))
2818 (home-page "https://github.com/aio-libs/aiosignal")
2819 (synopsis "Callback manager for Python @code{asyncio} projects")
2820 (description "This Python module provides @code{Signal}, an abstraction to
2821register asynchronous callbacks. The @code{Signal} abstraction can be used
2822for adding, removing and dropping callbacks.")
2823 (license license:asl2.0)))
2824
2825(define-public python-aiohttp
2826 (package
2827 (name "python-aiohttp")
2828 (version "3.13.5")
2829 (source
2830 (origin
2831 (method git-fetch)
2832 (uri (git-reference
2833 (url "https://github.com/aio-libs/aiohttp/")
2834 (commit (string-append "v" version))))
2835 (file-name (git-file-name name version))
2836 (sha256
2837 (base32 "0l9jcmhqd2v97gy1bxvimwi3aajxhxqn6jkzzgg7cf42mpyza0vc"))
2838 (snippet
2839 #~(begin
2840 (use-modules ((guix build utils)))
2841 (delete-file-recursively "vendor")))))
2842 (build-system pyproject-build-system)
2843 (arguments
2844 (list
2845 ;; tests: 4003 passed, 80 skipped, 31 xfailed, 2 subtests passed
2846 #:test-flags
2847 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
2848 ;; This tests requires the 'proxy.py' module, not yet packaged.
2849 "--ignore=tests/test_proxy_functional.py"
2850 ;; No benchamrks.
2851 "--ignore-glob=tests/test_benchmarks_*"
2852 "-k"
2853 (string-join
2854 ;; Combinatin of tests failing with similar errors:
2855 ;; - Cannot connect to host example.com:443 ssl:default [Could
2856 ;; not contact DNS servers].
2857 ;; - aiohttp.http_exceptions.ContentEncodingError: 400.
2858 ;; - Can not decode content-encoding: br
2859 (list "not test_add_static_path_resolution"
2860 "test_empty_header_name"
2861 "test_http_payload_brotli"
2862 "test_http_payload_zstandard"
2863 "test_invalid_header_spacing"
2864 "test_payload_decompress_size_limit_brotli"
2865 "test_reject_obsolete_line_folding"
2866 "test_response_with_precompressed_body_brotli"
2867 "test_static_file_custom_content_type_compress"
2868 "test_static_file_with_encoding_and_enable_compression"
2869 "test_tcp_connector_ssl_shutdown_timeout_nonzero_passed"
2870 "test_tcp_connector_ssl_shutdown_timeout_passed_to_"
2871 "test_tcp_connector_ssl_shutdown_timeout_zero_not_")
2872 " and not "))
2873 #:phases
2874 #~(modify-phases %standard-phases
2875 (add-after 'unpack 'set-libllhtp-pkgconfig
2876 (lambda _
2877 ;; pkg-config can't find the libllhttp library.
2878 (if (getenv "PKG_CONFIG_PATH")
2879 (setenv "PKG_CONFIG_PATH"
2880 (string-append
2881 #$(this-package-input "llhttp") "/lib/pkgconfig"
2882 (getenv "PKG_CONFIG_PATH")))
2883 (setenv "PKG_CONFIG_PATH"
2884 (string-append
2885 #$(this-package-input "llhttp") "/lib/pkgconfig")))))
2886 (add-after 'unpack 'fix-pytest-config
2887 (lambda _
2888 (substitute* "setup.cfg"
2889 (("--numprocesses=auto") "")
2890 (("-p pytest_cov") "")
2891 (("--cov=aiohttp") "")
2892 (("--cov=tests/") ""))))
2893 (add-after 'unpack 'fix-tests
2894 (lambda _
2895 ;; Make sure the timestamp of this file is > 1990, because a few
2896 ;; tests like test_static_file_if_modified_since_past_date
2897 ;; depend on it.
2898 (let ((late-90s (* 60 60 24 365 30)))
2899 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
2900 (add-before 'build 'pre-build
2901 (lambda _
2902 (setenv "USE_SYSTEM_DEPS" "true")
2903 ;; Help setup.py to determine project's root.
2904 (with-output-to-file ".git"
2905 (lambda () (display "")))
2906 (substitute* "Makefile"
2907 (("cythonize: .install-cython") "cythonize:"))
2908 (invoke "make" "cythonize")))
2909 (add-before 'check 'remove-local-source
2910 (lambda _
2911 (delete-file-recursively "aiohttp"))))))
2912 (native-inputs
2913 (list gunicorn-bootstrap
2914 python-freezegun
2915 python-cython
2916 python-pkgconfig
2917 ;; python-proxy-py ;not packaged yet in Guix
2918 python-pytest
2919 python-pytest-mock
2920 python-pytest-xdist
2921 python-re-assert
2922 python-setuptools
2923 python-zlib-ng))
2924 (inputs
2925 (list llhttp))
2926 (propagated-inputs
2927 (list python-aiohappyeyeballs
2928 python-aiosignal
2929 python-attrs
2930 python-frozenlist
2931 python-multidict
2932 python-propcache
2933 python-yarl
2934 ;; [optional]
2935 python-aiodns
2936 python-backports-zstd ;Python version < 3.14
2937 python-brotli))
2938 (home-page "https://github.com/aio-libs/aiohttp/")
2939 (synopsis "Async HTTP client/server framework (asyncio)")
2940 (description "@code{aiohttp} is an asynchronous HTTP client/server
2941framework.
2942
2943Its main features are:
2944@itemize
2945@item Supports both client and server side of HTTP protocol.
2946@item Supports both client and server Web-Sockets out-of-the-box without the
2947Callback Hell.
2948@item Web-server has middlewares and pluggable routing.
2949@end itemize")
2950 (license license:asl2.0)))
2951
2952(define-public python-aiohttp-oauthlib
2953 (package
2954 (name "python-aiohttp-oauthlib")
2955 (version "0.1.0")
2956 (source
2957 (origin
2958 (method url-fetch)
2959 (uri (pypi-uri "aiohttp-oauthlib" version))
2960 (sha256
2961 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
2962 (build-system pyproject-build-system)
2963 (arguments (list #:tests? #f)) ; none included
2964 (propagated-inputs (list python-aiohttp python-oauthlib))
2965 (native-inputs (list python-setuptools python-setuptools-scm))
2966 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
2967 (synopsis "OAuthlib authentication support for aiohttp")
2968 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
2969provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
2970 (license license:isc)))
2971
2972(define-public python-aiohttp-client-cache
2973 (package
2974 (name "python-aiohttp-client-cache")
2975 (version "0.14.3")
2976 (source
2977 (origin
2978 (method git-fetch)
2979 (uri (git-reference
2980 (url "https://github.com/requests-cache/aiohttp-client-cache")
2981 (commit (string-append "v" version))))
2982 (file-name (git-file-name name version))
2983 (sha256
2984 (base32
2985 "13xbmjjvcbzh3yh5z92mc0gwicwfjfq2av5jbqv09sbfzhggs92y"))))
2986 (build-system pyproject-build-system)
2987 (arguments
2988 (list
2989 #:test-flags #~(list "--ignore=test/integration/")))
2990 (native-inputs
2991 (list python-brotli
2992 python-faker
2993 python-hatchling
2994 python-pytest
2995 python-pytest-aiohttp
2996 python-pytest-asyncio
2997 python-types-aiofiles))
2998 (propagated-inputs
2999 (list python-aiohttp
3000 python-attrs
3001 python-itsdangerous
3002 python-url-normalize
3003 ;; [optional]
3004 python-aioboto3
3005 python-aiobotocore
3006 python-aiofiles
3007 python-aiosqlite
3008 python-pymongo
3009 python-redis))
3010 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
3011 (synopsis "Persistent cache for aiohttp requests")
3012 (description
3013 "This package is an asynchronous persistent caching library specifically
3014designed for @samp{aiohttp} requests in Python. With support for various
3015storage backends, it offers flexibility in how and where the cache is stored.
3016Please note that MongoDB and DynamoDB backends are not currently supported due
3017to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
3018 (license license:expat)))
3019
3020(define-public python-aiohttp-cors
3021 (package
3022 (name "python-aiohttp-cors")
3023 (version "0.8.1")
3024 (source
3025 (origin
3026 (method url-fetch)
3027 (uri (pypi-uri "aiohttp_cors" version))
3028 (sha256
3029 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
3030 (build-system pyproject-build-system)
3031 (arguments
3032 (list
3033 #:tests? #f)) ; network access is required to run tests
3034 (native-inputs
3035 (list python-setuptools
3036 python-wheel))
3037 (propagated-inputs
3038 (list python-aiohttp))
3039 (home-page "https://github.com/aio-libs/aiohttp-cors")
3040 (synopsis "CORS support for aiohttp")
3041 (description
3042 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
3043support for aiohttp asyncio-powered asynchronous HTTP server.")
3044 (license license:asl2.0)))
3045
3046(define-public python-aiohttp-retry
3047 (package
3048 (name "python-aiohttp-retry")
3049 (version "2.9.1")
3050 (source
3051 (origin
3052 (method git-fetch)
3053 (uri (git-reference
3054 (url "https://github.com/inyutin/aiohttp_retry")
3055 (commit (string-append "v" version))))
3056 (file-name (git-file-name name version))
3057 (sha256
3058 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
3059 (build-system pyproject-build-system)
3060 (native-inputs
3061 (list python-pytest
3062 python-pytest-aiohttp
3063 python-setuptools))
3064 (propagated-inputs
3065 (list python-aiohttp))
3066 (home-page "https://github.com/inyutin/aiohttp_retry")
3067 (synopsis "Simple retry client for aiohttp")
3068 (description
3069 "This package implements @code{RetryClient} for @code{aiohttp} to retry
3070connection to provided endpoint with timeouts logic or use:
3071
3072@itemize
3073@item @code{ExponentialRetry} with exponential backoff
3074@item @code{RandomRetry} for random backoff
3075@item @code{ListRetry} with backoff you predefine by list
3076@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
3077@item @code{JitterRetry} exponential retry with a bit of randomness
3078@end itemize")
3079 (license license:expat)))
3080
3081(define-public python-aiohttp-socks
3082 (package
3083 (name "python-aiohttp-socks")
3084 (version "0.10.1")
3085 (source
3086 (origin
3087 (method url-fetch)
3088 (uri (pypi-uri "aiohttp_socks" version))
3089 (sha256
3090 (base32
3091 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
3092 (build-system pyproject-build-system)
3093 (arguments (list #:tests? #false)) ;none included
3094 (propagated-inputs
3095 (list python-aiohttp python-socks))
3096 (native-inputs (list python-setuptools python-wheel))
3097 (home-page "https://github.com/romis2012/aiohttp-socks")
3098 (synopsis "SOCKS proxy connector for aiohttp")
3099 (description "This package provides a SOCKS proxy connector for
3100aiohttp. It supports SOCKS4(a) and SOCKS5.")
3101 (license license:asl2.0)))
3102
3103(define-public python-aiodns
3104 (package
3105 (name "python-aiodns")
3106 (version "3.5.0")
3107 (source
3108 (origin
3109 (method git-fetch)
3110 (uri (git-reference
3111 (url "https://github.com/saghul/aiodns")
3112 (commit (string-append "v" version))))
3113 (file-name (git-file-name name version))
3114 (sha256
3115 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
3116 (build-system pyproject-build-system)
3117 (arguments
3118 (list
3119 #:tests? #f)) ;tests require internet access
3120 (native-inputs
3121 (list python-pytest python-pytest-asyncio python-setuptools))
3122 (propagated-inputs (list python-pycares))
3123 (home-page "https://github.com/saghul/aiodns")
3124 (synopsis "Simple DNS resolver for asyncio")
3125 (description
3126 "@code{aiodns} provides a simple way for doing asynchronous DNS
3127resolutions with a synchronous looking interface by using
3128@url{https://github.com/saghul/pycares,pycares}.")
3129 (license license:expat)))
3130
3131(define-public python-aioquic
3132 (package
3133 (name "python-aioquic")
3134 (version "1.3.0")
3135 (source
3136 (origin
3137 (method git-fetch)
3138 (uri (git-reference
3139 (url "https://github.com/aiortc/aioquic")
3140 (commit version)))
3141 (file-name (git-file-name name version))
3142 (sha256
3143 (base32 "0dyzh8xipxbd7fcykfz8g5bgri38prwg050szqawq2p0pg538dgb"))))
3144 (build-system pyproject-build-system)
3145 (native-inputs
3146 (list nss-certs-for-test
3147 python-pytest
3148 python-setuptools))
3149 (inputs
3150 (list openssl))
3151 (propagated-inputs
3152 (list python-certifi
3153 python-cryptography
3154 python-pylsqpack
3155 python-pyopenssl
3156 python-service-identity))
3157 (home-page "https://github.com/aiortc/aioquic")
3158 (synopsis "QUIC and HTTP3 implementation in Python")
3159 (description
3160 "@code{aioquic} is a library for the QUIC network protocol in Python.
3161It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
3162 (license license:bsd-3)))
3163
3164(define-public python-aiorpcx
3165 (package
3166 (name "python-aiorpcx")
3167 (version "0.25.0")
3168 (source
3169 (origin
3170 (method git-fetch)
3171 ;; PyPI misses the util.py file used for tests.
3172 (uri (git-reference
3173 (url "https://github.com/kyuupichan/aiorpcX")
3174 (commit version)))
3175 (file-name (git-file-name name version))
3176 (sha256
3177 (base32
3178 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
3179 (build-system pyproject-build-system)
3180 (arguments
3181 (list
3182 #:test-flags
3183 ;; This test opens a remote connection.
3184 #~(list "-k" "not test_create_connection_resolve_good")))
3185 (native-inputs (list python-pytest
3186 python-pytest-asyncio-0.26
3187 python-setuptools))
3188 (propagated-inputs
3189 (list python-attrs python-websockets))
3190 (home-page "https://github.com/kyuupichan/aiorpcX")
3191 (synopsis "Generic asyncio RPC implementation")
3192 (description
3193 "The aiorpcX library is a generic asyncio implementation of RPC suitable
3194for an application that is a client, server or both.
3195
3196The package includes a module with full coverage of JSON RPC versions 1.0 and
31972.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
3198comes with a SOCKS proxy client.")
3199 (license (list license:expat license:bsd-2))))
3200
3201(define-public python-aiostream
3202 (package
3203 (name "python-aiostream")
3204 (version "0.7.0")
3205 (source
3206 (origin
3207 (method git-fetch) ;no tests in PyPI archive
3208 (uri (git-reference
3209 (url "https://github.com/vxgmichel/aiostream")
3210 (commit (string-append "v" version))))
3211 (file-name (git-file-name name version))
3212 (sha256
3213 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
3214 (build-system pyproject-build-system)
3215 (native-inputs
3216 (list python-pytest python-pytest-asyncio python-setuptools))
3217 (propagated-inputs
3218 (list python-typing-extensions))
3219 (home-page "https://github.com/vxgmichel/aiostream")
3220 (synopsis "Generator-based operators for asynchronous iteration")
3221 (description "@code{aiostream} provides a collection of stream operators that can
3222be combined to create asynchronous pipelines of operations. It can be seen as an
3223asynchronous version of @code{itertools}, although some aspects are slightly
3224different. All the provided operators return a unified interface called a stream. A
3225stream is an enhanced asynchronous iterable.")
3226 (license license:gpl3)))
3227
3228(define-public python-asgiref
3229 (package
3230 (name "python-asgiref")
3231 (version "3.11.1")
3232 (source
3233 (origin
3234 (method git-fetch)
3235 (uri (git-reference
3236 (url "https://github.com/django/asgiref/")
3237 (commit version)))
3238 (file-name (git-file-name name version))
3239 (sha256
3240 (base32 "19l03mx81dqhnnqa98073x1q243ndlknax0kva7azr9g12ixl69j"))))
3241 (build-system pyproject-build-system)
3242 (native-inputs
3243 (list python-pytest
3244 python-pytest-asyncio
3245 python-setuptools))
3246 (home-page "https://github.com/django/asgiref/")
3247 (synopsis "ASGI specs, helper code, and adapters")
3248 (description
3249 "ASGI is a standard for Python asynchronous web apps and servers to
3250communicate with each other, and positioned as an asynchronous successor to
3251WSGI. This package includes libraries for implementing ASGI servers.")
3252 (license license:bsd-3)))
3253
3254(define-public python-asgi-csrf
3255 (package
3256 (name "python-asgi-csrf")
3257 (version "0.11")
3258 (source (origin
3259 (method git-fetch) ;for tests
3260 (uri (git-reference
3261 (url "https://github.com/simonw/asgi-csrf")
3262 (commit version)))
3263 (file-name (git-file-name name version))
3264 (sha256
3265 (base32
3266 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))
3267 (patches
3268 (search-patches "python-asgi-csrf-fix-formparser.patch"))))
3269 (build-system pyproject-build-system)
3270 (propagated-inputs (list python-itsdangerous python-multipart))
3271 (native-inputs (list python-asgi-lifespan
3272 python-httpx
3273 python-pytest
3274 python-pytest-asyncio
3275 python-starlette
3276 python-setuptools
3277 python-wheel))
3278 (home-page "https://github.com/simonw/asgi-csrf")
3279 (synopsis "ASGI middleware for protecting against CSRF attacks")
3280 (description "This Asynchronous Server Gateway Interface (ASGI)
3281middleware protects against Cross-site request forgery (CSRF) attacks.
3282It implements the Double Submit Cookie pattern, where a cookie is set
3283that is then compared to a @code{csrftoken} hidden form field or a
3284@code{x-csrftoken} HTTP header.")
3285 (license license:asl2.0)))
3286
3287(define-public python-asgi-lifespan
3288 (package
3289 (name "python-asgi-lifespan")
3290 (version "2.1.0")
3291 (source (origin
3292 (method git-fetch) ;for tests
3293 (uri (git-reference
3294 (url "https://github.com/florimondmanca/asgi-lifespan")
3295 (commit version)))
3296 (file-name (git-file-name name version))
3297 (sha256
3298 (base32
3299 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
3300 (build-system pyproject-build-system)
3301 (arguments
3302 (list
3303 #:test-flags
3304 '(list "-k"
3305 (string-append
3306 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
3307 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
3308 " or test_lifespan_manager[trio-None-BodyFailed-None]"
3309 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
3310 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
3311 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
3312 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
3313 " or test_lifespan_timeout[trio-slow_shutdown]"
3314 " or test_lifespan_not_supported[trio-http_only]"
3315 " or test_lifespan_not_supported[trio-http_no_assert]"
3316 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
3317 ")"))
3318 #:phases
3319 '(modify-phases %standard-phases
3320 (add-after 'unpack 'compatibility
3321 (lambda _
3322 ;; httpx version 0.28.0 removed the "app" shortcut.
3323 (substitute* "tests/test_manager.py"
3324 (("app=manager.app")
3325 "transport=httpx.ASGITransport(manager.app)")))))))
3326 (native-inputs (list python-httpx
3327 python-pytest
3328 python-pytest-asyncio
3329 python-pytest-trio
3330 python-starlette
3331 python-setuptools
3332 python-wheel))
3333 (propagated-inputs (list python-sniffio))
3334 (home-page "https://github.com/florimondmanca/asgi-lifespan")
3335 (synopsis "Programmatic startup/shutdown of ASGI apps")
3336 (description "Programmatically send startup/shutdown lifespan events
3337into Asynchronous Server Gateway Interface (ASGI) applications. When
3338used in combination with an ASGI-capable HTTP client such as HTTPX, this
3339allows mocking or testing ASGI applications without having to spin up an
3340ASGI server.")
3341 (license license:expat)))
3342
3343(define-public python-a2wsgi
3344 (package
3345 (name "python-a2wsgi")
3346 (version "1.10.7")
3347 (source (origin
3348 (method url-fetch)
3349 (uri (pypi-uri "a2wsgi" version))
3350 (sha256
3351 (base32
3352 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
3353 (build-system pyproject-build-system)
3354 (arguments
3355 (list
3356 #:test-flags
3357 #~(list "-k" (string-join
3358 (list "not test_starlette_stream_response"
3359 "test_starlette_base_http_middleware"
3360 "test_baize_stream_response"
3361 ;; Fails because of harmless whitespace differences.
3362 "test_wsgi_post")
3363 " and not "))
3364 #:build-backend "pdm.backend"))
3365 (native-inputs
3366 (list python-pdm-backend
3367 python-pytest
3368 ;; python-baize ; not packed yet
3369 python-httpx-bootstrap
3370 ;; Cycle: python-a2wsgi->python-uvicorn->
3371 ;; python-httpx->python-starlette->python-a2wsgi
3372 ;; python-starlette
3373 python-pytest-asyncio))
3374 (home-page "https://github.com/abersheeran/a2wsgi")
3375 (synopsis "Convert WSGI to ASGI or vice versa")
3376 (description
3377 "This program converts a WSGI program to an ASGI program or the other
3378way around. It depends only on the Python standard library.")
3379 (license license:asl2.0)))
3380
3381(define-public python-httpauth
3382 (package
3383 (name "python-httpauth")
3384 (version "0.4.1")
3385 (source (origin
3386 (method url-fetch)
3387 (uri (pypi-uri "httpauth" version))
3388 (sha256
3389 (base32
3390 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
3391 (build-system pyproject-build-system)
3392 (native-inputs (list python-pytest python-setuptools python-wheel))
3393 (home-page "https://github.com/jonashaag/httpauth")
3394 (synopsis "WSGI HTTP Digest Authentication middleware")
3395 (description "@code{python-httpauth} is WSGI middleware that secures some/all
3396routes using HTTP Digest Authentication.")
3397 (license license:bsd-2)))
3398
3399(define-public python-css-html-js-minify
3400 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
3401 (revision "0"))
3402 (package
3403 (name "python-css-html-js-minify")
3404 (version (git-version "2.5.5" revision commit))
3405 (source
3406 (origin
3407 (method git-fetch)
3408 (uri (git-reference
3409 (url "https://github.com/juancarlospaco/css-html-js-minify")
3410 (commit commit)))
3411 (file-name (git-file-name name version))
3412 (sha256
3413 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
3414 (build-system pyproject-build-system)
3415 (arguments
3416 (list
3417 #:phases
3418 #~(modify-phases %standard-phases
3419 (add-after 'unpack 'relax-requirements
3420 (lambda _
3421 (substitute* "setup.cfg"
3422 (("^tests_require.*") "")))))))
3423 (native-inputs (list python-pytest python-setuptools))
3424 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
3425 (synopsis "CSS/HTML/JS minifier")
3426 (description
3427 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
3428 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
3429 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
3430 ;; looks like the user can choose a license.
3431 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
3432
3433(define-public python-aws-sam-translator
3434 (package
3435 (name "python-aws-sam-translator")
3436 (version "1.107.0")
3437 (source
3438 (origin
3439 (method git-fetch) ; no tests in PyPI release
3440 (uri (git-reference
3441 (url "https://github.com/aws/serverless-application-model")
3442 (commit (string-append "v" version))))
3443 (file-name (git-file-name name version))
3444 (sha256
3445 (base32 "0bx9ha9k6zx6gl1hsgm6cpq4xrfn604v2g1d5dh2d5zq0463gwfq"))))
3446 (build-system pyproject-build-system)
3447 (arguments
3448 (list
3449 #:test-flags
3450 #~(list "--numprocesses" (number->string (parallel-job-count))
3451 "--ignore=tests/bin/test_public_interface.py"
3452 "tests")
3453 #:phases
3454 #~(modify-phases %standard-phases
3455 (add-before 'check 'pre-check
3456 (lambda _
3457 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
3458 (native-inputs
3459 (list python-pytest
3460 python-pytest-rerunfailures
3461 python-pytest-xdist
3462 python-parameterized
3463 python-pyyaml
3464 python-setuptools))
3465 (propagated-inputs
3466 (list python-boto3
3467 python-jsonschema
3468 python-pydantic
3469 python-typing-extensions))
3470 (home-page "https://github.com/aws/serverless-application-model")
3471 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
3472 (description
3473 "AWS SAM Translator is a library that transform @dfn{Serverless Application
3474Model} (SAM) templates into AWS CloudFormation templates.")
3475 (license license:asl2.0)))
3476
3477(define-public python-aws-xray-sdk
3478 (package
3479 (name "python-aws-xray-sdk")
3480 (version "2.14.0")
3481 (home-page "https://github.com/aws/aws-xray-sdk-python")
3482 (source (origin
3483 (method git-fetch)
3484 (uri (git-reference (url home-page) (commit version)))
3485 (file-name (git-file-name name version))
3486 (sha256
3487 (base32
3488 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
3489 (build-system pyproject-build-system)
3490 (arguments
3491 (list
3492 #:test-flags
3493 '(list ;; Tries to connect to external network resources
3494 "--ignore=tests/ext/aiohttp/test_client.py"
3495 "--ignore=tests/ext/httplib/test_httplib.py"
3496 "--ignore=tests/ext/httpx"
3497 "--ignore=tests/ext/requests/test_requests.py"
3498 ;; TODO: How to configure Django for these tests?
3499 "--ignore=tests/ext/django"
3500 ;; These tests require packages not yet in Guix.
3501 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
3502 "--ignore=tests/ext/aiohttp/test_middleware.py"
3503 "--ignore=tests/ext/pg8000/test_pg8000.py"
3504 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
3505 "--ignore=tests/ext/pymysql/test_pymysql.py"
3506 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
3507 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
3508 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
3509 "--ignore=tests/test_async_recorder.py"
3510 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
3511 "--ignore-glob=tests/ext/sqlalchemy*"
3512 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
3513 ;; FIXME: Why is this failing?
3514 "--ignore=tests/test_patcher.py"
3515 "--ignore=tests/test_lambda_context.py")
3516 #:phases
3517 '(modify-phases %standard-phases
3518 (add-before 'check 'pre-check
3519 (lambda _
3520 ;; Allow "import tests.utils" to work as expected.
3521 (setenv "PYTHONPATH" (getcwd)))))))
3522 (native-inputs
3523 (list ;; These are required for the test suite.
3524 python-aiohttp
3525 python-bottle
3526 python-flask
3527 python-flask-sqlalchemy
3528 python-httpx
3529 python-mock
3530 python-pymysql
3531 python-pytest
3532 python-pytest-asyncio-0.26
3533 python-pytest-benchmark
3534 python-setuptools
3535 python-sqlalchemy
3536 python-webtest))
3537 (propagated-inputs
3538 (list python-botocore
3539 python-jsonpickle
3540 python-requests
3541 python-wrapt))
3542 (synopsis "Profile applications on AWS X-Ray")
3543 (description
3544 "The AWS X-Ray SDK for Python enables Python developers to record and
3545emit information from within their applications to the AWS X-Ray service.")
3546 (license license:asl2.0)))
3547
3548(define-public python-publicsuffixlist
3549 (package
3550 (name "python-publicsuffixlist")
3551 (version "1.0.2.20250202")
3552 (source
3553 (origin
3554 (method url-fetch)
3555 (uri (pypi-uri "publicsuffixlist" version))
3556 (sha256
3557 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
3558 (build-system pyproject-build-system)
3559 (arguments (list #:test-backend #~'unittest))
3560 (native-inputs (list python-setuptools))
3561 (home-page "https://github.com/ko-zu/psl")
3562 (synopsis "Public suffix list for Python")
3563 (description
3564 "This package provides an implementation of
3565@url{https://publicsuffix.org/, Public Suffix List } as Python library.
3566
3567Features:
3568@itemize
3569@item supports IDN (unicode and punycoded)
3570@item shipped with built-in PSL and an updater script
3571@item written in Pure Python with no library dependencies
3572@end itemize")
3573 (license license:mpl2.0)))
3574
3575(define-public python-pycognito
3576 (package
3577 (name "python-pycognito")
3578 (version "2024.5.1")
3579 (source
3580 (origin
3581 (method url-fetch)
3582 (uri (pypi-uri "pycognito" version))
3583 (sha256
3584 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
3585 (build-system pyproject-build-system)
3586 (arguments
3587 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
3588 (list #:tests? #f))
3589 (native-inputs
3590 (list python-setuptools))
3591 (propagated-inputs
3592 (list python-boto3
3593 python-envs
3594 python-pyjwt
3595 python-requests))
3596 (home-page "https://github.com/pvizeli/pycognito")
3597 (synopsis "Python library for using AWS Cognito")
3598 (description
3599 "This package provides a Python class to integrate Boto3's Cognito
3600client so it is easy to login users, with @acronym{Secure Remote Password,
3601SRP} support.")
3602 (license license:asl2.0)))
3603
3604(define-public python-pydap
3605 (package
3606 (name "python-pydap")
3607 (version "3.5.10")
3608 (source
3609 (origin
3610 (method git-fetch)
3611 (uri (git-reference
3612 (url "https://github.com/pydap/pydap")
3613 (commit version)))
3614 (file-name (git-file-name name version))
3615 (sha256
3616 (base32 "000b7jqjpx71miwxhbi07amyjyijq925x9x3paa7kzrr268klc2z"))))
3617 (build-system pyproject-build-system)
3618 (arguments
3619 (list
3620 ;; tests: 435 passed, 6 skipped
3621 #:test-flags
3622 ;; Tests need extra packaging.
3623 #~(list "--ignore=src/pydap/tests/test_wsgi_functions.py"
3624 "--ignore=src/pydap/tests/test_wsgi_ssf.py"
3625 ;; Network access is required.
3626 "--ignore=src/pydap/tests/test_client.py"
3627 "--ignore=src/pydap/tests/test_handlers_dap.py"
3628 "--ignore=src/pydap/tests/test_open_dap4_url.py"
3629 "--ignore=src/pydap/tests/test_virtualizarr.py")))
3630 (native-inputs
3631 (list nss-certs-for-test
3632 python-requests-mock
3633 python-pytest
3634 python-setuptools
3635 python-setuptools-scm
3636 python-webtest))
3637 (propagated-inputs
3638 (list python-beautifulsoup4
3639 python-jinja2
3640 python-lxml
3641 python-numpy
3642 python-requests
3643 python-requests-cache
3644 python-scipy
3645 python-webob
3646 ;; [optional]
3647 gunicorn
3648 python-docopt-ng
3649 ;; python-coards ;not packaged yet in Guix
3650 python-fastparquet
3651 ;; python-gsw ;not packaged yet in Guix
3652 python-netcdf4
3653 python-openpyxl
3654 python-pastedeploy
3655 python-werkzeug))
3656 (home-page "https://pydap.github.io/pydap/en/intro.html")
3657 (synopsis "Data Access Protocol implementation in Python")
3658 (description
3659 "This package provides a pure Python implementation of the Data Access
3660Protocol (DAP, aka OPeNDAP).")
3661 (license license:expat)))
3662
3663(define-public python-python3-saml
3664 (package
3665 (name "python-python3-saml")
3666 (version "1.16.0")
3667 (source
3668 (origin
3669 (method git-fetch)
3670 (uri (git-reference
3671 (url "https://github.com/SAML-Toolkits/python3-saml")
3672 (commit (string-append "v" version))))
3673 (file-name (git-file-name name version))
3674 (sha256
3675 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
3676 (build-system pyproject-build-system)
3677 (arguments
3678 (list
3679 ;; 214 tests pass, 50 fail; many fail because of required Internet
3680 ;; access or because of assumptions about the location of test files.
3681 #:tests? #false))
3682 (native-inputs
3683 (list python-freezegun
3684 python-poetry-core))
3685 (inputs
3686 (list xmlsec-openssl))
3687 (propagated-inputs
3688 (list python-isodate
3689 python-lxml
3690 python-xmlsec))
3691 (home-page "https://github.com/SAML-Toolkits/python3-saml")
3692 (synopsis "Saml Python toolkit")
3693 (description
3694 "The SAML Python Toolkit lets you add SAML support to your Python
3695software.")
3696 (license license:expat)))
3697
3698(define-public python-ovh
3699 (package
3700 (name "python-ovh")
3701 (version "1.1.0")
3702 (source (origin
3703 (method url-fetch)
3704 (uri (pypi-uri "ovh" version))
3705 (sha256
3706 (base32
3707 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
3708 (build-system pyproject-build-system)
3709 (arguments (list #:tests? #f)) ; XXX: tests require networking
3710 (propagated-inputs (list python-requests))
3711 (native-inputs (list python-setuptools))
3712 (home-page "https://api.ovh.com")
3713 (synopsis "Interact with OVHcloud APIs")
3714 (description "This package provides the official module to perform HTTP requests
3715to the OVHcloud APIs.")
3716 (license license:bsd-3)))
3717
3718(define-public python-cbor2
3719 (package
3720 (name "python-cbor2")
3721 (version "5.4.2.post1")
3722 (source
3723 (origin
3724 (method url-fetch)
3725 (uri (pypi-uri "cbor2" version))
3726 (sha256
3727 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
3728 (build-system pyproject-build-system)
3729 (native-inputs
3730 (list python-pytest python-setuptools python-setuptools-scm))
3731 (home-page "https://github.com/agronholm/cbor2")
3732 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
3733 (description "This Python library provides encoding and decoding for the
3734Concise Binary Object
3735Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
37368949}) serialization format. The specification is fully compatible with the
3737original RFC 7049. Among its features are:
3738@itemize
3739@item Simple API like the @code{json} or @code{pickle} modules.
3740@item Support many CBOR tags with stdlib objects.
3741@item Generic tag decoding.
3742@item Shared value references including cyclic references.
3743@item String references compact encoding with repeated strings replaced with
3744indices.
3745@item Optional C module backend tested on big- and little-endian architectures.
3746@item Extensible tagged value handling using tag_hook and object_hook on
3747decode and default on encode.
3748@end itemize")
3749 (license license:expat)))
3750
3751(define-public python-cfn-lint
3752 (package
3753 (name "python-cfn-lint")
3754 (version "1.38.1")
3755 (source
3756 (origin
3757 (method git-fetch)
3758 (uri (git-reference
3759 (url "https://github.com/aws-cloudformation/cfn-lint")
3760 (commit (string-append "v" version))))
3761 (file-name (git-file-name name version))
3762 (sha256
3763 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
3764 (build-system pyproject-build-system)
3765 (arguments
3766 (list
3767 ;; tests: 2136 passed, 11 deselected, 1 warning
3768 #:test-flags
3769 #~(list "--ignore=test/integration/"
3770 "-k" (string-join
3771 ;; Tests failing on doctest or comparing diff.
3772 (list "not test_build_graph"
3773 "test_good_template"
3774 "test_success_run"
3775 "test_update_docs"
3776 ;; ImportError: Missing optional dependencies sarif
3777 "test_sarif_formatter")
3778 " and not "))
3779 #:phases
3780 #~(modify-phases %standard-phases
3781 (add-after 'unpack 'remove-deprecated
3782 (lambda _
3783 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
3784 (("deprecated\": \"2025")
3785 "deprecated\": \"2125")))))))
3786 (native-inputs
3787 (list python-defusedxml
3788 python-pydot
3789 python-pytest
3790 python-setuptools))
3791 (propagated-inputs
3792 (list python-aws-sam-translator
3793 python-jsonpatch
3794 python-networkx
3795 python-pyyaml
3796 python-regex
3797 python-sympy
3798 python-typing-extensions
3799 ;; [optional]
3800 python-junit-xml))
3801 (home-page "https://github.com/aws-cloudformation/cfn-lint")
3802 (synopsis "Validate CloudFormation templates")
3803 (description
3804 "This package lets you validate CloudFormation YAML/JSON templates against
3805the CloudFormation spec and additional checks. Includes checking valid values
3806for resource properties and best practices.")
3807 (license license:expat)))
3808
3809(define-public python-pyzabbix
3810 (package
3811 (name "python-pyzabbix")
3812 (version "1.3.1")
3813 (source
3814 (origin
3815 (method git-fetch)
3816 (uri (git-reference
3817 (url "https://github.com/lukecyca/pyzabbix")
3818 (commit version)))
3819 (file-name (git-file-name name version))
3820 (sha256
3821 (base32 "1dbs3bz1mjlvlg46ikhg5j7agwni61ljlpiziknklv95yp29n86v"))))
3822 (build-system pyproject-build-system)
3823 (arguments
3824 (list #:test-flags #~(list "tests")))
3825 (native-inputs
3826 (list python-pytest
3827 python-requests-mock
3828 python-setuptools))
3829 (propagated-inputs
3830 (list python-packaging
3831 python-requests))
3832 (home-page "https://github.com/lukecyca/pyzabbix")
3833 (synopsis "Python interface to the Zabbix API")
3834 (description
3835 "@code{pyzabbix} is a Python module for working with the Zabbix API.")
3836 (license license:lgpl2.1+)))
3837
3838(define-public python-requests-cache
3839 (package
3840 (name "python-requests-cache")
3841 (version "1.3.2")
3842 (source
3843 (origin
3844 (method git-fetch)
3845 (uri (git-reference
3846 (url "https://github.com/requests-cache/requests-cache")
3847 (commit (string-append "v" version))))
3848 (file-name (git-file-name name version))
3849 (sha256
3850 (base32 "1yhvidmmd02c95i1hamyy34rb3wfzgzxil2k8ay1p4r4kv7pjada"))))
3851 (build-system pyproject-build-system)
3852 (arguments
3853 (list
3854 ;; tests: 429 passed, 1051 warnings
3855 #:test-flags
3856 #~(list "--numprocesses" (number->string (parallel-job-count))
3857 ;; These tests require access to external services, e.g. MongoDB
3858 ;; and Redis.
3859 "--ignore=tests/integration")
3860 #:phases
3861 #~(modify-phases %standard-phases
3862 (add-before 'check 'pre-check
3863 (lambda _
3864 ;; PermissionError: [Errno 13] Permission denied:
3865 ;; '/homeless-shelter'
3866 (setenv "HOME" "/tmp"))))))
3867 (native-inputs
3868 (list python-hatchling
3869 python-pytest
3870 python-pytest-rerunfailures
3871 python-pytest-xdist
3872 python-requests-mock
3873 python-responses
3874 python-rich
3875 python-tenacity
3876 python-time-machine
3877 python-timeout-decorator))
3878 (propagated-inputs
3879 (list python-attrs
3880 python-cattrs
3881 python-platformdirs
3882 python-requests
3883 python-url-normalize
3884 python-urllib3
3885 ;; [optional]
3886 python-boto3
3887 python-botocore
3888 python-itsdangerous
3889 python-orjson ;Python version < 3.14
3890 python-pymongo
3891 python-pyyaml
3892 python-redis
3893 python-ujson))
3894 (home-page "https://github.com/requests-cache/requests-cache")
3895 (synopsis "Persistent HTTP cache for Python requests")
3896 (description
3897 "This package provides a drop-in replacement for @code{requests.Session}
3898with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
3899responses as planin JSON/YAML file or save responses as plain JSON/YAML
3900files.")
3901 (license license:bsd-2)))
3902
3903(define-public python-requests-futures
3904 (package
3905 (name "python-requests-futures")
3906 (version "1.0.2")
3907 (source
3908 (origin
3909 (method url-fetch)
3910 (uri (pypi-uri "requests_futures" version))
3911 (sha256
3912 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
3913 (build-system pyproject-build-system)
3914 (native-inputs
3915 (list python-greenlet
3916 python-pytest
3917 python-pytest-httpbin
3918 python-setuptools
3919 python-werkzeug))
3920 (propagated-inputs (list python-requests))
3921 (home-page "https://github.com/ross/requests-futures")
3922 (synopsis "Asynchronous Python HTTP for Humans")
3923 (description
3924 "This package provides and add-on the Python Requests HTTP library to run
3925code asynchronously.")
3926 (license license:asl2.0)))
3927
3928(define-public python-requests-unixsocket
3929 (package
3930 (name "python-requests-unixsocket")
3931 (version "0.4.1")
3932 (source
3933 (origin
3934 (method git-fetch)
3935 (uri (git-reference
3936 (url "https://github.com/msabramo/requests-unixsocket")
3937 (commit (string-append "v" version))))
3938 (file-name (git-file-name name version))
3939 (sha256
3940 (base32 "1f0pi31xqzm3cdag4s4gpdj36x169jwc8ibqvcwqz6h9c0pklf3n"))))
3941 (build-system pyproject-build-system)
3942 (native-inputs
3943 (list python-pytest
3944 python-setuptools
3945 python-setuptools-scm
3946 python-waitress))
3947 (propagated-inputs
3948 (list python-requests))
3949 (home-page "https://github.com/msabramo/requests-unixsocket")
3950 (synopsis "Use requests to talk HTTP via a UNIX domain socket")
3951 (description
3952 "This package provides an extension to @code{requests} which let it talk
3953HTTP via a UNIX domain socket.")
3954 (license license:asl2.0)))
3955
3956(define-public python-s3path
3957 (package
3958 (name "python-s3path")
3959 (version "0.6.4")
3960 (source
3961 (origin
3962 (method url-fetch)
3963 (uri (pypi-uri "s3path" version))
3964 (sha256
3965 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
3966 (build-system pyproject-build-system)
3967 (arguments
3968 (list
3969 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
3970 #:tests? #f))
3971 (native-inputs
3972 (list python-setuptools
3973 python-wheel))
3974 (propagated-inputs
3975 (list python-boto3
3976 python-smart-open))
3977 (home-page "https://github.com/liormizr/s3path")
3978 (synopsis "Pathlib extension for AWS S3 Service")
3979 (description
3980 "S3Path provide a Python convenient File-System/Path like interface for
3981AWS S3 Service using boto3 S3 resource as a driver.")
3982 (license license:asl2.0)))
3983
3984(define-public python-falcon
3985 (package
3986 (name "python-falcon")
3987 (version "4.0.2")
3988 (source
3989 (origin
3990 ;; Use git, as there are some test files missing from the PyPI release,
3991 ;; such as 'examples' directory.
3992 (method git-fetch)
3993 (uri (git-reference
3994 (url "https://github.com/falconry/falcon")
3995 (commit version)))
3996 (file-name (git-file-name name version))
3997 (sha256
3998 (base32
3999 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
4000 (build-system pyproject-build-system)
4001 (arguments
4002 (list
4003 #:test-flags
4004 '(list "-k" "not slow"
4005 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
4006 #:phases
4007 '(modify-phases %standard-phases
4008 (add-before 'check 'pre-check
4009 (lambda _
4010 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
4011 (setenv "FALCON_TESTING_SESSION" "Y")
4012 (setenv "PYTHONASYNCIODEBUG" "1")
4013 (setenv "HOME" "/tmp"))))))
4014 (propagated-inputs
4015 (list python-mimeparse))
4016 (native-inputs
4017 (list python-aiofiles
4018 python-cbor2
4019 python-cython ;for faster binaries
4020 python-fakeredis
4021 python-httpx
4022 python-mujson
4023 python-msgpack
4024 python-orjson
4025 python-pecan
4026 python-pillow
4027 python-pytest
4028 python-pytest-asyncio
4029 python-pyyaml
4030 python-rapidjson
4031 python-requests
4032 python-setuptools
4033 python-testtools
4034 python-ujson
4035 python-websockets
4036 python-wheel))
4037 (home-page "https://falconframework.org")
4038 (synopsis "Web framework for building APIs and application backends")
4039 (description "Falcon is a web API framework for building microservices,
4040application backends and higher-level frameworks. Among its features are:
4041@itemize
4042@item Optimized and extensible code base
4043@item Routing via URI templates and REST-inspired resource
4044classes
4045@item Access to headers and bodies through request and response
4046classes
4047@item Request processing via middleware components and hooks
4048@item Idiomatic HTTP error responses
4049@item Straightforward exception handling
4050@item Unit testing support through WSGI helpers and mocks
4051@item Compatible with both CPython and PyPy
4052@item Cython support for better performance when used with CPython
4053@end itemize")
4054 (license license:asl2.0)))
4055
4056(define-public python-falcon-cors
4057 (package
4058 (name "python-falcon-cors")
4059 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
4060 (revision . "0")))
4061 (version (git-version "1.1.7"
4062 (assoc-ref properties 'revision)
4063 (assoc-ref properties 'commit)))
4064 (source
4065 (origin
4066 (method git-fetch)
4067 (uri (git-reference
4068 (url "https://github.com/lwcolton/falcon-cors")
4069 (commit (assoc-ref properties 'commit))))
4070 (file-name (git-file-name name version))
4071 (sha256
4072 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
4073 (build-system pyproject-build-system)
4074 (arguments
4075 (list
4076 ;; XXX: The last commit's tests are incompatible with the more recent
4077 ;; version of python-falcon.
4078 #:tests? #f))
4079 (native-inputs
4080 (list python-falcon python-mock python-pynose python-setuptools))
4081 (home-page "https://github.com/lwcolton/falcon-cors")
4082 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
4083 (description
4084 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
4085support for Falcon. It allows applying a specially crafted CORS object to the
4086incoming requests, enabling the ability to serve resources over a different
4087origin than that of the web application.")
4088 (license license:asl2.0)))
4089
4090(define-public python-furl
4091 (package
4092 (name "python-furl")
4093 (version "2.1.4")
4094 (source
4095 (origin
4096 (method url-fetch)
4097 (uri (pypi-uri "furl" version))
4098 (sha256
4099 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
4100 (build-system pyproject-build-system)
4101 (arguments
4102 (list #:test-flags
4103 #~(list "-k" (string-append "not test_hosts"
4104 " and not test_netloc"
4105 " and not test_odd_urls"))))
4106 (propagated-inputs
4107 (list python-orderedmultidict python-six))
4108 (native-inputs
4109 (list python-pytest python-setuptools python-wheel))
4110 (home-page "https://github.com/gruns/furl")
4111 (synopsis "URL manipulation in Python")
4112 (description "Furl provides an easy-to-use alternative to the
4113@code{urllib} and @code{urlparse} modules for manipulating URLs.")
4114 (license license:unlicense)))
4115
4116(define-public python-httplib2
4117 (package
4118 (name "python-httplib2")
4119 (version "0.31.2")
4120 (source
4121 (origin
4122 (method git-fetch)
4123 (uri (git-reference
4124 (url "https://github.com/httplib2/httplib2")
4125 (commit (string-append "v" version))))
4126 (file-name (git-file-name name version))
4127 (sha256
4128 (base32
4129 "0wdnf4rhw9ar8b15lzvif11ibnnpqkfif3alkhkfywy3ikk8nrxb"))))
4130 (build-system pyproject-build-system)
4131 (arguments
4132 (list
4133 #:phases
4134 #~(modify-phases %standard-phases
4135 (add-after 'unpack 'adjust-test-requirements
4136 (lambda _
4137 (substitute* "requirements-test.txt"
4138 (("==") ">=")))))))
4139 (propagated-inputs
4140 (list python-pyparsing
4141 python-pysocks))
4142 (native-inputs
4143 (list python-cryptography
4144 python-mock
4145 python-pytest
4146 python-pytest-randomly
4147 python-pytest-timeout
4148 python-setuptools))
4149 (home-page "https://github.com/httplib2/httplib2")
4150 (synopsis "Comprehensive HTTP client library")
4151 (description
4152 "A comprehensive HTTP client library supporting many features left out of
4153other HTTP libraries.")
4154 (license license:expat)))
4155
4156(define-public python-cheroot
4157 (package
4158 (name "python-cheroot")
4159 (version "11.1.2")
4160 (source
4161 (origin
4162 (method git-fetch)
4163 (uri (git-reference
4164 (url "https://github.com/cherrypy/cheroot")
4165 (commit (string-append "v" version))))
4166 (file-name (git-file-name name version))
4167 (sha256
4168 (base32 "02rhci01m5fcn8mqpvq3c35rs4n28gxlfvfw2if2f85rgwrji8y8"))
4169 ;; TODO: Remove this patch on next release.
4170 (patches (search-patches "python-cheroot-openssl-test.patch"))))
4171 (build-system pyproject-build-system)
4172 (arguments
4173 (list
4174 ;; tests: 150 passed, 3 xfailed, 7 warnings
4175 #:test-flags
4176 ;; To prevent dependency on python-pypytools which depends on python-py
4177 ;; both marked as deprecated by maintainers, see:
4178 ;; <https://codeberg.org/guix/guix/issues/7475>.
4179 #~(list "--ignore=cheroot/test/test_server.py")
4180 #:phases
4181 #~(modify-phases %standard-phases
4182 (add-after 'unpack 'fix-pytest-config
4183 (lambda _
4184 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
4185 (delete-file "pytest.ini"))))))
4186 (native-inputs
4187 (list python-portend
4188 python-pyopenssl
4189 python-pytest
4190 python-pytest-mock
4191 python-requests
4192 python-requests-toolbelt
4193 python-setuptools
4194 python-setuptools-scm
4195 python-trustme))
4196 (propagated-inputs
4197 (list python-jaraco-functools
4198 python-more-itertools))
4199 (home-page "https://cheroot.cherrypy.dev")
4200 (synopsis "Highly-optimized, pure-python HTTP server")
4201 (description
4202 "Cheroot is a high-performance, pure-Python HTTP server.")
4203 (license license:bsd-3)))
4204
4205(define-public python-cherrypy
4206 (package
4207 (name "python-cherrypy")
4208 (properties '((commit . "1f75bc9eed8e0e385f64f368bd69f58d96fb8c2b")
4209 (revision . "0")))
4210 (version (git-version "18.10.0"
4211 (assoc-ref properties 'revision)
4212 (assoc-ref properties 'commit)))
4213 (source
4214 (origin
4215 (method git-fetch)
4216 (uri (git-reference
4217 (url "https://github.com/cherrypy/cherrypy")
4218 (commit (assoc-ref properties 'commit))))
4219 (file-name (git-file-name name version))
4220 (sha256
4221 (base32 "1l01a4sbfm42s5xp6ngphgqf0yb65ksqbsb27kznvybblyaxfa9p"))))
4222 (build-system pyproject-build-system)
4223 (arguments
4224 (list
4225 ;; tests: 288 passed, 9 skipped, 1 xfailed, 2 xpassed, 15 warnings
4226 #:phases
4227 #~(modify-phases %standard-phases
4228 (add-after 'unpack 'fix-pytest-config
4229 (lambda _
4230 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
4231 (delete-file "pytest.ini")))
4232 (add-after 'unpack 'patch-pyproject
4233 (lambda _
4234 (substitute* "pyproject.toml"
4235 (("\"cherrypy.scaffold\",")
4236 (string-join
4237 (list "\"cherrypy.scaffold\""
4238 "\"cherrypy._private_api\""
4239 "\"cherrypy._private_api.compat\",")
4240 ",\n "))))))))
4241 (propagated-inputs
4242 (list python-cheroot
4243 python-filelock
4244 python-jaraco-collections
4245 python-more-itertools
4246 python-portend))
4247 (native-inputs
4248 (list python-path
4249 python-pytest
4250 python-pytest-services
4251 python-requests
4252 python-requests-toolbelt
4253 python-setuptools
4254 python-setuptools-scm))
4255 (home-page "https://www.cherrypy.dev")
4256 (synopsis "Object-Oriented HTTP framework")
4257 (description
4258 "CherryPy is a pythonic, object-oriented web framework. It helps in
4259building web applications in the same way any other object-oriented Python
4260program would be built.")
4261 (license license:bsd-3)))
4262
4263(define-public python-parfive
4264 (package
4265 (name "python-parfive")
4266 (version "2.3.1")
4267 (source
4268 (origin
4269 (method git-fetch)
4270 (uri (git-reference
4271 (url "https://github.com/Cadair/parfive")
4272 (commit (string-append "v" version))))
4273 (file-name (git-file-name name version))
4274 (sha256
4275 (base32 "09kkh7kp9qy8m26zk6p7zc84yrc81pjgsi594kaa1v1n83mprl4b"))))
4276 (build-system pyproject-build-system)
4277 (arguments
4278 (list
4279 #:test-flags
4280 ;; Disable tests requiring network access.
4281 #~(list "-k" (string-join
4282 (list "not test_ftp"
4283 "test_ftp_http"
4284 "test_ftp_pasv_command"
4285 "test_problematic_http_urls")
4286 " and not "))))
4287 (native-inputs
4288 (list python-aiofiles
4289 python-pytest
4290 python-pytest-asyncio
4291 python-pytest-localserver
4292 python-pytest-socket
4293 python-setuptools
4294 python-setuptools-scm))
4295 (propagated-inputs
4296 (list python-aiohttp
4297 python-tqdm
4298 ;; [optional]
4299 python-aioftp))
4300 (home-page "https://parfive.readthedocs.io/")
4301 (synopsis "HTTP and FTP parallel file downloader")
4302 (description
4303 "This package provides CLI tool and Python library @code{parallel} file
4304downloader using asyncio. parfive can handle downloading multiple files in
4305parallel as well as downloading each file in a number of chunks.
4306
4307asciicast demo of parfive parfive works by creating a downloader object,
4308appending files to it and then running the download. parfive has a synchronous
4309API, but uses asyncio to parallelise downloading the files.")
4310 (license license:expat)))
4311
4312(define-public python-html2text
4313 (package
4314 (name "python-html2text")
4315 (version "2020.1.16")
4316 (source
4317 (origin
4318 (method url-fetch)
4319 (uri (pypi-uri "html2text" version))
4320 (sha256
4321 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
4322 (build-system pyproject-build-system)
4323 (native-inputs (list python-pytest python-setuptools python-wheel))
4324 (home-page "https://github.com/Alir3z4/html2text")
4325 (synopsis "Convert HTML into plain text")
4326 (description
4327 "html2text takes HTML and converts it into plain ASCII text
4328which is also valid markdown. html2text was originally written by Aaron
4329Swartz.")
4330 (license license:gpl3+)))
4331
4332(define-public python-jose
4333 (package
4334 (name "python-jose")
4335 (version "3.5.0")
4336 (home-page "https://github.com/mpdavis/python-jose")
4337 (source (origin
4338 (method git-fetch)
4339 (uri (git-reference (url home-page) (commit version)))
4340 (file-name (git-file-name name version))
4341 (sha256
4342 (base32
4343 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
4344 (build-system pyproject-build-system)
4345 (native-inputs
4346 (list python-pyasn1 python-pytest python-setuptools))
4347 (propagated-inputs
4348 (list python-cryptography python-ecdsa python-rsa))
4349 (synopsis "JOSE implementation in Python")
4350 (description
4351 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
4352- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
4353JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
4354content using a variety of algorithms.")
4355 (license license:expat)))
4356
4357(define-public python-joserfc
4358 (package
4359 (name "python-joserfc")
4360 (version "1.0.1")
4361 (source
4362 (origin
4363 (method url-fetch)
4364 (uri (pypi-uri "joserfc" version))
4365 (sha256
4366 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
4367 (build-system pyproject-build-system)
4368 (arguments
4369 (list
4370 #:test-flags
4371 ;; No module named 'Crypto'
4372 '(list "--ignore=tests/jwe/test_chacha20.py"
4373 ;; Deprecation warnings are not raised.
4374 "-k" (string-append "not test_guess_bytes_key"
4375 " and not test_guess_callable_key"
4376 " and not test_guess_str_key"))))
4377 (propagated-inputs (list python-cryptography))
4378 (native-inputs (list python-pytest python-setuptools python-wheel))
4379 (home-page "https://github.com/authlib/joserfc")
4380 (synopsis "Python library for JOSE RFCs")
4381 (description
4382 "This package provides a Python library for JOSE RFCs, including JWS,
4383JWE, JWK, JWA, and JWT.")
4384 (license license:bsd-3)))
4385
4386(define-public python-jwcrypto
4387 (package
4388 (name "python-jwcrypto")
4389 (version "1.5.6")
4390 (source
4391 (origin
4392 (method url-fetch)
4393 (uri (pypi-uri "jwcrypto" version))
4394 (sha256
4395 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
4396 (build-system pyproject-build-system)
4397 (native-inputs
4398 (list python-pytest
4399 python-setuptools))
4400 (propagated-inputs
4401 (list python-cryptography
4402 python-typing-extensions))
4403 (home-page "https://github.com/latchset/jwcrypto")
4404 (synopsis "Implementation of JOSE Web standards")
4405 (description
4406 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
4407Encryption} (JOSE) Web Standards.")
4408 (license license:lgpl3+)))
4409
4410(define-public python-pypitoken
4411 (package
4412 (name "python-pypitoken")
4413 (version "7.0.1")
4414 (source
4415 (origin
4416 (method url-fetch)
4417 (uri (pypi-uri "pypitoken" version))
4418 (sha256
4419 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
4420 (build-system pyproject-build-system)
4421 ;; There are no tests.
4422 (arguments (list #:tests? #false))
4423 (propagated-inputs (list python-jsonschema python-pymacaroons
4424 python-typing-extensions))
4425 (native-inputs (list python-poetry-core))
4426 (home-page "https://pypitoken.readthedocs.io/en/latest/")
4427 (synopsis "Manipulate PyPI API tokens")
4428 (description "This package lets you manipulate PyPI API tokens.")
4429 (license license:expat)))
4430
4431(define-public python-pyscss
4432 ;; XXX: no fresh release supporting Python 3.11, use the latest commit, see
4433 ;; <https://github.com/Kronuz/pyScss/issues/428>,
4434 ;; <https://github.com/Kronuz/pyScss/issues/431>.
4435 (let ((commit "73559d047706ccd4593cf6aa092de71f35164723")
4436 (revision "0"))
4437 (package
4438 (name "python-pyscss")
4439 (version (git-version "1.4.0" revision commit))
4440 (source
4441 (origin
4442 (method git-fetch) ; no tests in PyPI release
4443 (uri (git-reference
4444 (url "https://github.com/Kronuz/pyScss")
4445 (commit commit)))
4446 (file-name (git-file-name name version))
4447 (sha256
4448 (base32 "00msypxf5dm57gyfp3jxvjinigi4km84v33w83635pms9li2k3y7"))))
4449 (build-system pyproject-build-system)
4450 (native-inputs
4451 (list python-pytest-8
4452 python-setuptools))
4453 (inputs
4454 (list pcre))
4455 (propagated-inputs
4456 (list python-six)) ;hard dependency in scss/compiler.py
4457 (home-page "https://github.com/Kronuz/pyScss")
4458 (synopsis "Scss compiler for Python")
4459 (description
4460 "@code{pyScss} is a compiler for Sass, a superset language of
4461CSS3 that adds programming capabilities and some other syntactic sugar.")
4462 (license license:expat))))
4463
4464(define-public python-jsonpickle
4465 (package
4466 (name "python-jsonpickle")
4467 (version "4.0.0")
4468 (source (origin
4469 (method url-fetch)
4470 (uri (pypi-uri "jsonpickle" version))
4471 (sha256
4472 (base32
4473 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
4474 (build-system pyproject-build-system)
4475 (arguments
4476 (list
4477 #:test-flags '(list "tests")
4478 #:phases
4479 '(modify-phases %standard-phases
4480 (add-before 'check 'pre-check
4481 (lambda* (#:key inputs #:allow-other-keys)
4482 (setenv "TZ" "UTC")
4483 (setenv "TZDIR"
4484 (search-input-directory inputs "share/zoneinfo")))))))
4485 (native-inputs
4486 (list python-bson
4487 python-ecdsa
4488 python-feedparser
4489 python-pymongo
4490 python-pytest
4491 python-pytest-benchmark
4492 python-pytest-enabler
4493 python-setuptools
4494 python-setuptools-scm
4495 python-simplejson
4496 python-sqlalchemy
4497 python-ujson
4498 python-wheel
4499 tzdata-for-tests))
4500 (home-page "https://jsonpickle.github.io/")
4501 (synopsis "Serialize object graphs into JSON")
4502 (description
4503 "This package provides a Python library for serializing any arbitrary
4504object graph to and from JSON.")
4505 (license license:bsd-3)))
4506
4507(define-public python-mcp
4508 (package
4509 (name "python-mcp")
4510 (version "1.25.0")
4511 (source
4512 (origin
4513 (method url-fetch)
4514 (uri (pypi-uri "mcp" version))
4515 (sha256
4516 (base32 "00k87bl4jvnh7hrmicwb2m715fwccvvlanwf8cnlwdphxdhh6can"))))
4517 (build-system pyproject-build-system)
4518 (arguments
4519 (list
4520 ;; XXX: 186 failed, 648 passed, 94 skipped, 54 errors
4521 ;; A lot of tests fail for unclear reasons.
4522 #:tests? #f))
4523 (propagated-inputs
4524 (list python-httpx
4525 python-httpx-sse
4526 python-pydantic
4527 python-sse-starlette))
4528 (native-inputs
4529 (list python-hatchling
4530 python-jsonschema
4531 python-pydantic-settings
4532 python-pytest
4533 python-pytest-examples
4534 python-pytest-xdist
4535 python-starlette
4536 python-typer
4537 python-typing-inspection
4538 python-uvicorn))
4539 (home-page "https://modelcontextprotocol.io")
4540 (synopsis "Model Context Protocol SDK")
4541 (description
4542 "This package provides a Python Software Development Kit for the Model
4543Context Protocol (MCP).")
4544 (license license:expat)))
4545
4546(define-public python-mechanicalsoup
4547 (package
4548 (name "python-mechanicalsoup")
4549 (version "1.4.0")
4550 (source
4551 (origin
4552 (method url-fetch)
4553 (uri (pypi-uri "mechanicalsoup" version))
4554 (sha256
4555 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
4556 (build-system pyproject-build-system)
4557 (arguments
4558 (list
4559 #:test-flags
4560 ;; Unclear why test fails.
4561 #~(list "-k" "not test_select_form_associated_elements")
4562 ;; The following dependencies are not directly required, the developer
4563 ;; only pinned versions because of vulnerabilities. They also break
4564 ;; sanity-check because it checks for a python-certifi version which is
4565 ;; more recent than the one available in Guix.
4566 #:phases #~(modify-phases %standard-phases
4567 (add-after 'unpack 'relax-dependencies
4568 (lambda _
4569 (substitute* "requirements.txt"
4570 (("certifi.*") "")
4571 (("urllib3.*") "")))))))
4572 (propagated-inputs
4573 (list python-beautifulsoup4 python-lxml python-requests))
4574 (native-inputs
4575 (list python-pytest
4576 python-pytest-flake8
4577 python-pytest-httpbin
4578 python-pytest-mock
4579 python-requests-mock
4580 python-setuptools
4581 python-wheel))
4582 (home-page "https://mechanicalsoup.readthedocs.io/")
4583 (synopsis "Python library for automating website interaction")
4584 (description
4585 "MechanicalSoup is a Python library for automating interaction with
4586websites. It automatically stores and sends cookies, follows redirects, and can
4587follow links and submit forms. It doesn’t do JavaScript.")
4588 (license license:expat)))
4589
4590(define-public python-hypercorn
4591 (package
4592 (name "python-hypercorn")
4593 (version "0.18.0")
4594 (source
4595 (origin
4596 (method git-fetch)
4597 (uri (git-reference
4598 (url "https://github.com/pgjones/hypercorn")
4599 (commit version)))
4600 (file-name (git-file-name name version))
4601 (sha256
4602 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
4603 (build-system pyproject-build-system)
4604 (propagated-inputs
4605 (list python-aioquic
4606 python-h11
4607 python-h2
4608 python-priority
4609 python-pydata-sphinx-theme
4610 python-sphinxcontrib-mermaid
4611 python-tomli
4612 python-trio
4613 python-typing-extensions
4614 python-uvloop
4615 python-wsproto))
4616 (native-inputs
4617 (list nss-certs-for-test
4618 python-httpx
4619 python-pdm-backend
4620 python-pytest
4621 python-pytest-asyncio
4622 python-pytest-cov
4623 python-pytest-trio))
4624 (home-page "https://github.com/pgjones/hypercorn")
4625 (synopsis "ASGI Server based on Hyper libraries")
4626 (description
4627 "This package provides an ASGI (Asynchronous Server Gateway Interface)
4628Server based on Hyper libraries and inspired by @code{python-gunicorn}.")
4629 (license license:expat)))
4630
4631(define-public python-hyperframe
4632 (package
4633 (name "python-hyperframe")
4634 (version "6.1.0")
4635 (source
4636 (origin
4637 (method url-fetch)
4638 (uri (pypi-uri "hyperframe" version))
4639 (sha256
4640 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
4641 (build-system pyproject-build-system)
4642 (native-inputs
4643 (list python-pytest python-setuptools))
4644 (home-page "https://github.com/python-hyper/hyperframe")
4645 (synopsis "HTTP/2 framing layer for Python")
4646 (description
4647 "This library contains the HTTP/2 framing code used in the hyper project.
4648It provides a pure-Python codebase that is capable of decoding a binary stream
4649into HTTP/2 frames.")
4650 (license license:expat)))
4651
4652(define-public python-hpack
4653 (package
4654 (name "python-hpack")
4655 (version "4.1.0")
4656 (source
4657 (origin
4658 ;; PyPI tarball is missing some files necessary for the tests.
4659 (method git-fetch)
4660 (uri (git-reference
4661 (url "https://github.com/python-hyper/hpack")
4662 (commit (string-append "v" version))))
4663 (file-name (git-file-name name version))
4664 (sha256
4665 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
4666 (build-system pyproject-build-system)
4667 (native-inputs
4668 (list python-pytest python-setuptools))
4669 (home-page "https://hyper.rtfd.org")
4670 (synopsis "Pure-Python HPACK header compression")
4671 (description
4672 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
4673for use in Python programs that implement HTTP/2.")
4674 (license license:expat)))
4675
4676(define-public python-h11
4677 (package
4678 (name "python-h11")
4679 (version "0.16.0")
4680 (source
4681 (origin
4682 (method url-fetch)
4683 (uri (pypi-uri "h11" version))
4684 (sha256
4685 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
4686 (build-system pyproject-build-system)
4687 (native-inputs
4688 (list python-pytest python-setuptools))
4689 (home-page "https://github.com/python-hyper/h11")
4690 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
4691 (description
4692 "This is a little HTTP/1.1 library written from scratch in Python, heavily
4693inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
4694code whatsoever. This means you can hook h11 up to your favorite network API,
4695and that could be anything you want.")
4696 (license license:expat)))
4697
4698(define-public python-h2
4699 (package
4700 (name "python-h2")
4701 (version "4.3.0")
4702 (source
4703 (origin
4704 (method git-fetch)
4705 (uri (git-reference
4706 (url "https://github.com/python-hyper/h2")
4707 (commit (string-append "v" version))))
4708 (file-name (git-file-name name version))
4709 (sha256
4710 (base32 "00rf0ii4xgdczx5xmv1k6b65q1axvxizbnl20d5vpr512zdix36k"))))
4711 (build-system pyproject-build-system)
4712 (arguments
4713 (list
4714 ;; tests: 1594 passed, 5 deselected
4715 ;; AssertionError: assert '<RemoteSettingsChanged
4716 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
4717 ;; new_value=32768)}>' == '<RemoteSettingsChanged
4718 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
4719 ;; original_value=65536, new_value=32768)}>'
4720 #:test-flags
4721 #~(list "-k"
4722 (string-join
4723 (list "not test_remotesettingschanged_repr"
4724 ;; This test exceededs the Hypothesis deadline.
4725 #$@(if (target-riscv64?)
4726 #~("test_changing_max_frame_size")
4727 #~())
4728 "test_streamreset_repr"
4729 "test_settingsacknowledged_repr"
4730 "test_connectionterminated_repr[None-None]"
4731 "test_connectionterminated_repr[some"
4732 "test_remotesettingschanged_repr"
4733 "test_streamreset_repr"
4734 "test_settingsacknowledged_repr"
4735 "test_connectionterminated_repr[None-None]"
4736 "test_connectionterminated_repr[some")
4737 " and not "))))
4738 (native-inputs
4739 (list python-pytest
4740 python-setuptools))
4741 (propagated-inputs
4742 (list python-hpack
4743 python-hyperframe))
4744 (home-page "https://github.com/python-hyper/h2")
4745 (synopsis "HTTP/2 State-Machine based protocol implementation")
4746 (description
4747 "This module contains a pure-Python implementation of a HTTP/2 protocol
4748stack. It does not provide a parsing layer, a network layer, or any rules
4749about concurrency. Instead, it's a purely in-memory solution, defined in
4750terms of data actions and HTTP/2 frames. This is one building block of a full
4751Python HTTP implementation.")
4752 (license license:expat)))
4753
4754(define-public python-slixmpp
4755 (package
4756 (name "python-slixmpp")
4757 (version "1.17.0")
4758 (source
4759 (origin
4760 (method git-fetch)
4761 (uri (git-reference
4762 (url "https://codeberg.org/poezio/slixmpp")
4763 (commit (string-append "slix-" version))))
4764 (file-name (git-file-name name version))
4765 (sha256
4766 (base32 "0ml590qs3siajz00f40pdxcz27d41i25ld30819qrf0n9ilqlc6n"))))
4767 (build-system pyproject-build-system)
4768 (arguments
4769 (list
4770 ;; Use the upstream runner: it collects only tests/, skips itests/
4771 ;; which need a live XMPP server, and additionally runs the doctests.
4772 #:test-backend #~'custom
4773 #:test-flags #~'("run_tests.py")
4774 #:phases
4775 #~(modify-phases %standard-phases
4776 (add-after 'unpack 'disable-rust-extension
4777 ;; Upstream marks the Rust JID implementation as optional; skip
4778 ;; it and use the pure Python one in slixmpp/jid.py to avoid
4779 ;; pulling in the Cargo dependency tree.
4780 (lambda _
4781 (substitute* "pyproject.toml"
4782 (("\"setuptools-rust\", ") "")
4783 (("\\[\\[tool\\.setuptools-rust\\.ext-modules\\]\\]")
4784 "[tool.slixmpp-rust-disabled]"))))
4785 (add-before 'build 'set-version
4786 ;; setuptools-scm cannot determine the version without .git.
4787 (lambda _
4788 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
4789 (native-inputs
4790 (list gnupg ; 'gnupg' is required by the XEP-0027 tests.
4791 python-setuptools
4792 python-setuptools-scm))
4793 (propagated-inputs
4794 (list python-aiodns
4795 python-aiohttp
4796 python-cryptography
4797 python-defusedxml
4798 python-emoji
4799 python-pyasn1
4800 python-pyasn1-modules))
4801 (home-page "https://codeberg.org/poezio/slixmpp")
4802 (synopsis "XMPP library without threads")
4803 (description
4804 "Slixmpp is a XMPP library for Python 3.11+. It is a fork of SleekXMPP.
4805Its goal is to only rewrite the core of the library (the low level socket
4806handling, the timers, the events dispatching) in order to remove all
4807threads.")
4808 (license license:expat)))
4809
4810(define-public python-sockjs-tornado
4811 (package
4812 (name "python-sockjs-tornado")
4813 (version "1.0.6")
4814 (source
4815 (origin
4816 (method git-fetch)
4817 (uri (git-reference
4818 (url "https://github.com/mrjoes/sockjs-tornado/")
4819 (commit (string-append "v" version))))
4820 (file-name (git-file-name name version))
4821 (sha256
4822 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
4823 (build-system pyproject-build-system)
4824 (arguments
4825 (list
4826 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
4827 (native-inputs (list python-setuptools))
4828 (propagated-inputs (list python-tornado))
4829 (home-page "https://github.com/mrjoes/sockjs-tornado/")
4830 (synopsis
4831 "SockJS Python server implementation on top of the Tornado framework")
4832 (description
4833 "SockJS-tornado provides the server-side counterpart to a SockJS client
4834library, through the Tornado framework.
4835
4836SockJS provides a low-latency, full-duplex, cross-domain communication channel
4837between a web browser and web server.")
4838 (license license:expat)))
4839
4840(define-public python-flask-assets
4841 ;; The latest release still depends on the abandoned flask-script, whereas
4842 ;; at this later commit (already 2 years old at the time of this writing)
4843 ;; the dependency has been lifted.
4844 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
4845 (revision "1"))
4846 (package
4847 (name "python-flask-assets")
4848 (version (git-version "2.1.0" revision commit))
4849 (source
4850 (origin
4851 (method git-fetch)
4852 (uri (git-reference
4853 (url "https://github.com/miracle2k/flask-assets/")
4854 (commit commit)))
4855 (file-name (git-file-name name version))
4856 (sha256
4857 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
4858 (build-system pyproject-build-system)
4859 (propagated-inputs
4860 (list python-flask python-webassets))
4861 (native-inputs
4862 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
4863 (home-page "https://github.com/miracle2k/flask-assets")
4864 (synopsis "Asset management for Flask")
4865 (description "This package integrates @code{webassets} with Flask, adding
4866support for merging, minifying and compiling CSS and Javascript files.")
4867 (license license:bsd-2))))
4868
4869(define-public python-flask-babel
4870 (package
4871 (name "python-flask-babel")
4872 (version "4.0.0")
4873 (source
4874 (origin
4875 (method git-fetch) ;no tests in pypi release
4876 (uri (git-reference
4877 (url "https://github.com/python-babel/flask-babel")
4878 (commit (string-append "v" version))))
4879 (sha256
4880 (base32
4881 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
4882 (build-system pyproject-build-system)
4883 (native-inputs
4884 (list python-poetry-core
4885 python-pytest
4886 python-pytest-mock))
4887 (propagated-inputs
4888 (list python-babel
4889 python-flask
4890 python-jinja2
4891 python-pytz))
4892 (home-page "https://github.com/python-babel/flask-babel")
4893 (synopsis "Add i18n/l10n support to Flask applications")
4894 (description "This package implements internationalization and localization
4895support for Flask. This is based on the Python babel module as well as pytz -
4896both of which are installed automatically if you install this library.")
4897 (license license:bsd-3)))
4898
4899(define-public python-flask-cors
4900 (package
4901 (name "python-flask-cors")
4902 (version "6.0.2")
4903 (source
4904 (origin
4905 (method git-fetch) ;no tests in PyPI archive
4906 (uri (git-reference
4907 (url "https://github.com/CoryDolphin/flask-cors")
4908 (commit version)))
4909 (file-name (git-file-name name version))
4910 (sha256
4911 (base32 "02y740h951dscgkm7ghsss1bc0m8ymsfdpsimm1j0nkl0zjl6sgm"))))
4912 (build-system pyproject-build-system)
4913 (arguments
4914 (list
4915 #:phases
4916 #~(modify-phases %standard-phases
4917 (add-after 'unpack 'fix-version
4918 (lambda _
4919 ;; Otherwise sanity-check of dependents will fail.
4920 (substitute* "pyproject.toml"
4921 (("version = \"0\\.0\\.1\"" all)
4922 (string-append "version = \"" #$version "\""))))))))
4923 (native-inputs
4924 (list python-pytest
4925 python-setuptools))
4926 (propagated-inputs
4927 (list python-flask
4928 python-werkzeug))
4929 (home-page "https://flask-cors.readthedocs.io/en/latest/")
4930 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
4931 (description
4932 "This package provides a Flask extension for handling @acronym{CORS,Cross
4933Origin Resource Sharing}, making cross-origin AJAX possible.")
4934 (license license:expat)))
4935
4936(define-public python-flask-markdown
4937 (package
4938 (name "python-flask-markdown")
4939 (version "0.3")
4940 (source
4941 (origin
4942 (method git-fetch)
4943 (uri (git-reference
4944 (url "https://github.com/dcolish/flask-markdown")
4945 (commit version)))
4946 (file-name (git-file-name name version))
4947 (sha256
4948 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
4949 (build-system pyproject-build-system)
4950 (arguments
4951 (list
4952 #:tests? #f ;Tests seem to be incompatible with latest python
4953 #:phases
4954 #~(modify-phases %standard-phases
4955 (add-after 'unpack 'set-version
4956 (lambda _
4957 (substitute* "setup.py"
4958 (("dev")
4959 #$version)))))))
4960 (propagated-inputs (list python-markdown python-flask))
4961 (native-inputs (list python-pynose python-setuptools))
4962 (home-page "https://github.com/dcolish/flask-markdown")
4963 (synopsis "Small extension to help with using Markdown in Flask")
4964 (description
4965 "Flask-Markdown supports several extensions for Markdown and integrates
4966into Jinja2 by default.")
4967 (license license:bsd-3)))
4968
4969(define-public python-flask-session
4970 (package
4971 (name "python-flask-session")
4972 (version "0.8.0")
4973 (source
4974 (origin
4975 (method url-fetch)
4976 (uri (pypi-uri "flask_session" version))
4977 (sha256
4978 (base32
4979 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
4980 (build-system pyproject-build-system)
4981 (arguments
4982 '(#:tests? #f)) ; Tests require the various storage backends to be present
4983 (native-inputs (list python-flit-core))
4984 (propagated-inputs
4985 (list python-cachelib python-flask python-msgspec))
4986 (home-page "https://github.com/pallets-eco/flask-session")
4987 (synopsis "Adds server-side session support to your Flask application")
4988 (description
4989 "Flask-Session is an extension for Flask that adds support for
4990Server-side sessions, with a variety of different backends for session
4991storage.")
4992 (license license:bsd-3)))
4993
4994(define-public python-html5lib
4995 (package
4996 (name "python-html5lib")
4997 (version "1.1")
4998 (source
4999 (origin
5000 (method url-fetch)
5001 (uri (pypi-uri "html5lib" version))
5002 (sha256
5003 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
5004 (build-system pyproject-build-system)
5005 (arguments
5006 '(#:tests? #f)) ;tests depend on dated pytest-expect
5007 (native-inputs
5008 (list python-setuptools))
5009 (propagated-inputs
5010 (list python-six
5011 python-webencodings
5012 ;; Required by Calibre 5.
5013 python-chardet))
5014 (home-page "https://github.com/html5lib/html5lib-python")
5015 (synopsis "Python HTML parser based on the WHATWG HTML specification")
5016 (description
5017 "Html5lib is an HTML parser based on the WHATWG HTML specification
5018and written in Python.")
5019 (license license:expat)))
5020
5021(define-public python-html5-parser
5022 (package
5023 (name "python-html5-parser")
5024 (version "0.4.12")
5025 (source
5026 (origin
5027 (method git-fetch)
5028 (uri (git-reference
5029 (url "https://github.com/kovidgoyal/html5-parser")
5030 (commit (string-append "v" version))))
5031 (file-name (git-file-name name version))
5032 (sha256
5033 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
5034 (build-system pyproject-build-system)
5035 (arguments
5036 (list
5037 #:phases
5038 #~(modify-phases %standard-phases
5039 (add-before 'build 'set-configure-flags
5040 (lambda _
5041 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
5042 (native-inputs (list pkg-config python-setuptools))
5043 (inputs (list libxml2))
5044 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
5045 (home-page "https://html5-parser.readthedocs.io")
5046 (synopsis "Fast C-based HTML5 parsing for Python")
5047 (description
5048 "This package provides a fast implementation of the HTML5 parsing spec
5049for Python. Parsing is done in C using a variant of the gumbo parser. The
5050gumbo parse tree is then transformed into an lxml tree, also in C, yielding
5051parse times that can be a thirtieth of the html5lib parse times.")
5052 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
5053 ;; indicate ASL2.0, including the LICENSE file for the whole project.
5054 (license (list license:asl2.0 license:gpl3))))
5055
5056(define-public python-html5tagger
5057 (package
5058 (name "python-html5tagger")
5059 (version "2.0.0")
5060 (source (origin
5061 (method url-fetch)
5062 (uri (pypi-uri "html5tagger" version))
5063 (sha256
5064 (base32
5065 "090nmjhr0yj3x5iy9zmbmv07dpxn234dqpi2lglk0fa4aj83rvhd"))))
5066 (build-system pyproject-build-system)
5067 (arguments
5068 (list #:tests? #f)) ;no tests in PyPI or Git
5069 (native-inputs
5070 (list python-hatch-vcs python-hatchling))
5071 (home-page "https://github.com/sanic-org/html5tagger")
5072 (synopsis "Create HTML documents from Python")
5073 (description
5074 "@code{html5tagger} provides a simplified HTML5 syntax that can
5075be written directly in Python without templates.")
5076 (license license:unlicense)))
5077
5078(define-public python-minio
5079 (package
5080 (name "python-minio")
5081 (version "7.1.9")
5082 (source
5083 (origin
5084 (method git-fetch)
5085 (uri (git-reference
5086 (url "https://github.com/minio/minio-py")
5087 (commit version)))
5088 (file-name (git-file-name name version))
5089 (sha256
5090 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
5091 (build-system pyproject-build-system)
5092 (arguments
5093 (list
5094 #:test-flags
5095 ;; XXX: requires network access.
5096 #~(list "--ignore=tests/unit/credentials_test.py")))
5097 (native-inputs (list python-pytest python-setuptools))
5098 (propagated-inputs
5099 (list python-certifi python-dateutil python-pytz python-urllib3))
5100 (home-page "https://github.com/minio/minio-py")
5101 (synopsis "Programmatically access Amazon S3 from Python")
5102 (description
5103 "This package provides a Python library for interacting with any
5104Amazon S3 compatible object storage server.")
5105 (license license:asl2.0)))
5106
5107(define-public python-pycrdt
5108 (package
5109 (name "python-pycrdt")
5110 (version "0.13.0")
5111 (source
5112 (origin
5113 (method git-fetch)
5114 (uri (git-reference
5115 (url "https://github.com/y-crdt/pycrdt")
5116 (commit version)))
5117 (file-name (git-file-name name version))
5118 (sha256
5119 (base32 "18mnjbxdlra1w3jl42bf1jb25z9j3inh6s61qighqrvnylgxvxc1"))))
5120 (build-system pyproject-build-system)
5121 (arguments
5122 (list
5123 #:imported-modules `(,@%cargo-build-system-modules
5124 ,@%pyproject-build-system-modules)
5125 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
5126 (guix build pyproject-build-system)
5127 (guix build utils))
5128 #:test-flags #~(list "--ignore=tests/test_types.py")
5129 #:phases
5130 #~(modify-phases %standard-phases
5131 (add-after 'unpack 'relax-requirements
5132 (lambda _
5133 (substitute* "pyproject.toml"
5134 (("requires = \\[\"maturin>=.*\"\\]")
5135 "requires = [\"maturin\"]"))))
5136 (add-after 'unpack 'prepare-cargo-build-system
5137 (lambda args
5138 (for-each
5139 (lambda (phase)
5140 (format #t "Running cargo phase: ~a~%" phase)
5141 (apply (assoc-ref cargo:%standard-phases phase)
5142 #:cargo-target #$(cargo-triplet)
5143 args))
5144 '(unpack-rust-crates
5145 configure
5146 check-for-pregenerated-files
5147 patch-cargo-checksums)))))))
5148 (propagated-inputs
5149 (list python-anyio
5150 python-typing-extensions))
5151 (inputs (cargo-inputs 'pycrdt))
5152 (native-inputs
5153 (append
5154 (list maturin
5155 python-pydantic
5156 python-pytest
5157 rust
5158 `(,rust "cargo"))
5159 (or (and=> (%current-target-system)
5160 (compose list make-rust-sysroot))
5161 '())))
5162 (home-page "https://github.com/y-crdt/pycrdt")
5163 (synopsis "Python CRDTs library ported from Yjs framework")
5164 (description
5165 "Conflict-free Replicated Data Types (CRDTs) allow creating shared
5166documents that can automatically merge changes made concurrently on different
5167copies of the data. When the data lives on different machines, they make it
5168possible to build distributed systems that work with local data, leaving the
5169synchronization and conflict resolution with remote data to the CRDT
5170algorithm, which ensures that all data replicas eventually converge to the
5171same state.
5172
5173This is a Python CRDT library that provides bindings for Yrs, the Rust port of
5174the Yjs framework.")
5175 (license license:expat)))
5176
5177(define-public python-pycrdt-store
5178 (package
5179 (name "python-pycrdt-store")
5180 (version "0.1.3")
5181 (source
5182 (origin
5183 (method git-fetch)
5184 (uri (git-reference
5185 (url "https://github.com/y-crdt/pycrdt-store")
5186 (commit version)))
5187 (file-name (git-file-name name version))
5188 (sha256
5189 (base32 "18yvv5lgxb4v0qlbi8bbkcm1666nxbkmhbx445sxpzab7027fl1a"))))
5190 (build-system pyproject-build-system)
5191 (propagated-inputs
5192 (list python-anyio
5193 python-pycrdt
5194 python-sqlite-anyio))
5195 (native-inputs
5196 (list python-hatchling
5197 python-pytest
5198 python-pytest-rerunfailures
5199 python-trio))
5200 (home-page "https://github.com/y-crdt/pycrdt-store")
5201 (synopsis "Persistent storage for pycrdt")
5202 (description
5203 "This package provides a persistent storage feature for
5204@code{python-pycrdt}.")
5205 (license license:expat)))
5206
5207(define-public python-pycrdt-websocket
5208 (package
5209 (name "python-pycrdt-websocket")
5210 (version "0.16.0")
5211 (source
5212 (origin
5213 (method git-fetch)
5214 (uri (git-reference
5215 (url "https://github.com/y-crdt/pycrdt-websocket")
5216 (commit version)))
5217 (file-name (git-file-name name version))
5218 (sha256
5219 (base32 "1bcxivdra0v5fwlz3hcz98vxi61884bfvcwifsdp3mji28iprv22"))))
5220 (build-system pyproject-build-system)
5221 (arguments
5222 (list
5223 ;; These tests require the unpackaged Yjs.
5224 #:test-flags #~(list "--deselect=tests/test_pycrdt_yjs.py")))
5225 (propagated-inputs
5226 (list python-anyio
5227 python-pycrdt
5228 python-pycrdt-store))
5229 (native-inputs
5230 (list nss-certs-for-test
5231 python-hatchling
5232 python-hypercorn
5233 python-httpx-ws
5234 python-pytest))
5235 (home-page "https://github.com/y-crdt/pycrdt-websocket")
5236 (synopsis "WebSocket connector for pycrdt")
5237 (description "This package provides an asynchronous @code{WebSocket}
5238connector for @code{python-pycrdt}.")
5239 (license license:expat)))
5240
5241(define-public python-pycurl
5242 (package
5243 (name "python-pycurl")
5244 (version "7.45.7")
5245 (source
5246 (origin
5247 (method git-fetch)
5248 (uri (git-reference
5249 (url "https://github.com/pycurl/pycurl")
5250 (commit (string-append
5251 "REL_" (string-replace-substring version "." "_")))))
5252 (file-name (git-file-name name version))
5253 (sha256
5254 (base32 "1gkbv3cvrwd7z3vgqlvcf0wpvm3g6dia8xbx3g4bplnb2cascfiq"))))
5255 (build-system pyproject-build-system)
5256 (arguments
5257 '(#:test-flags
5258 ;; The test suite is not thread safe:
5259 ;; - some tests want to use the same port: address already in use
5260 ;; - some tests use signal.Signal, i.e. main-thread only
5261 (list "-k" (string-append
5262 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
5263 ;; open shared object file: No such file or directory
5264 "not test_libcurl_ssl_gnutls"
5265 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
5266 ;; open shared object file: No such file or directory
5267 " and not test_libcurl_ssl_nss"
5268 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
5269 ;; open shared object file: No such file or directory
5270 " and not test_libcurl_ssl_openssl"
5271 ;; "A requested feature, protocol or option was not
5272 ;; found built-in in this libcurl due to a build-time
5273 ;; decision."
5274 " and not test_issuercert_blob"
5275 " and not test_krb4level"
5276 " and not test_krblevel"))
5277 #:phases (modify-phases %standard-phases
5278 (add-before 'build 'configure-tls-backend
5279 (lambda _
5280 ;; XXX: PycURL fails to automatically determine which
5281 ;; TLS backend to use when cURL is built with
5282 ;; --disable-static. See setup.py and
5283 ;; <https://github.com/pycurl/pycurl/pull/147>.
5284 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
5285 (native-inputs
5286 (list python-bottle
5287 python-flaky
5288 python-flask
5289 python-pytest
5290 python-setuptools
5291 python-wheel))
5292 (inputs
5293 (list curl gnutls))
5294 (home-page "http://pycurl.io/")
5295 (synopsis "Lightweight Python wrapper around libcurl")
5296 (description "Pycurl is a lightweight wrapper around libcurl. It provides
5297high-speed transfers via libcurl and frequently outperforms alternatives.")
5298
5299 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
5300 ;; under the terms of LGPLv2.1+ or Expat.
5301 (license (list license:lgpl2.1+ license:expat))))
5302
5303(define-public python-stamina
5304 (package
5305 (name "python-stamina")
5306 (version "25.2.0")
5307 (source
5308 (origin
5309 (method git-fetch)
5310 (uri (git-reference
5311 (url "https://github.com/hynek/stamina")
5312 (commit version)))
5313 (file-name (git-file-name name version))
5314 (sha256
5315 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
5316 (build-system pyproject-build-system)
5317 (native-inputs
5318 (list python-pytest
5319 python-anyio
5320 python-dirty-equals
5321 python-hatch-fancy-pypi-readme
5322 python-hatch-vcs
5323 python-hatchling
5324 python-structlog))
5325 (propagated-inputs
5326 (list python-tenacity
5327 python-typing-extensions))
5328 (home-page "https://github.com/hynek/stamina")
5329 (synopsis "Retries library for Python")
5330 (description
5331 "@code{stamina} is an opinionated wrapper around the
5332@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
5333 (license license:expat)))
5334
5335(define-public python-stripe
5336 (package
5337 (name "python-stripe")
5338 (version "13.2.0")
5339 (source
5340 (origin
5341 (method git-fetch)
5342 (uri (git-reference
5343 (url "https://github.com/stripe/stripe-python")
5344 (commit (string-append "v" version))))
5345 (file-name (git-file-name name version))
5346 (sha256
5347 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
5348 (build-system pyproject-build-system)
5349 (arguments
5350 '(#:tests? #f)) ;; tests require network
5351 (native-inputs
5352 (list python-flit-core))
5353 (propagated-inputs
5354 (list python-httpx
5355 python-requests))
5356 (home-page "https://github.com/stripe/stripe-python")
5357 (synopsis "Python bindings for the Stripe financial services' API")
5358 (description "This package provides access to the Stripe financial
5359services' API. It includes a pre-defined set of classes for API resources
5360that initialize themselves dynamically from API responses which makes it
5361compatible with a wide range of versions of the Stripe API.")
5362 (license license:expat)))
5363
5364(define-public python-stripe-12
5365 (hidden-package
5366 (package/inherit python-stripe
5367 (name "python-stripe")
5368 (version "12.5.1")
5369 (source
5370 (origin
5371 (inherit (package-source python-stripe))
5372 (uri (git-reference
5373 (url "https://github.com/stripe/stripe-python")
5374 (commit (string-append "v" version))))
5375 (file-name (git-file-name name version))
5376 (sha256 (base32
5377 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
5378 (native-inputs
5379 (list python-setuptools)))))
5380
5381(define-public python-tldextract
5382 (package
5383 (name "python-tldextract")
5384 (version "5.3.0")
5385 (source
5386 (origin
5387 (method url-fetch)
5388 (uri (pypi-uri "tldextract" version))
5389 (sha256
5390 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
5391 (build-system pyproject-build-system)
5392 (arguments
5393 (list
5394 #:phases
5395 #~(modify-phases %standard-phases
5396 (add-after 'unpack 'relax-requirements
5397 (lambda _
5398 (substitute* "pyproject.toml"
5399 (("\"requests-file.*\",")
5400 "\"requests-file\",")))))))
5401 (native-inputs
5402 (list nss-certs-for-test
5403 python-pytest
5404 python-pytest-mock
5405 python-responses
5406 python-setuptools
5407 python-setuptools-scm
5408 python-syrupy))
5409 (propagated-inputs
5410 (list python-filelock
5411 python-idna
5412 python-requests
5413 python-requests-file))
5414 (home-page "https://github.com/john-kurkowski/tldextract")
5415 (synopsis
5416 "Separate the TLD from the registered domain and subdomains of a URL")
5417 (description
5418 "TLDExtract accurately separates the TLD from the registered domain and
5419subdomains of a URL, using the Public Suffix List. By default, this includes
5420the public ICANN TLDs and their exceptions. It can optionally support the
5421Public Suffix List's private domains as well.")
5422 (license license:bsd-3)))
5423
5424(define-public python-tracerite
5425 (package
5426 (name "python-tracerite")
5427 (version "2.5.2")
5428 (source
5429 (origin
5430 (method url-fetch)
5431 (uri (pypi-uri "tracerite" version))
5432 (sha256
5433 (base32 "087i51ybbj62nx5jzx8znhqb6cd7279mi7v9j6lrxf8lhb81nr3r"))))
5434 (build-system pyproject-build-system)
5435 (arguments
5436 (list #:tests? #f)) ;no tests in PyPI or Git
5437 (native-inputs
5438 (list python-hatch-vcs python-hatchling))
5439 (propagated-inputs
5440 (list python-html5tagger))
5441 (home-page "https://github.com/sanic-org/tracerite")
5442 (synopsis "Human-readable HTML tracebacks")
5443 (description
5444 "@code{tracerite} converts Python tracebacks into useful error messages
5445in human-readable HTML format.")
5446 (license license:unlicense)))
5447
5448(define-public python-trio-websocket
5449 (package
5450 (name "python-trio-websocket")
5451 (version "0.12.2")
5452 (source
5453 (origin
5454 (method git-fetch)
5455 (uri (git-reference
5456 (url "https://github.com/HyperionGray/trio-websocket")
5457 (commit version)))
5458 (file-name (git-file-name name version))
5459 (sha256
5460 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
5461 (build-system pyproject-build-system)
5462 (native-inputs
5463 (list python-pytest
5464 python-pytest-trio
5465 python-setuptools
5466 python-trustme))
5467 (propagated-inputs
5468 (list python-outcome
5469 python-trio
5470 python-wsproto))
5471 (home-page "https://github.com/HyperionGray/trio-websocket")
5472 (synopsis "WebSocket library for Trio")
5473 (description "This library implements both server and client aspects of
5474the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
5475striving for safety, correctness, and ergonomics. It is based on the
5476@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
5477@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
5478the majority of the WebSocket protocol, including framing, codecs, and events.
5479This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
5480the Trio framework}.")
5481 (license license:expat)))
5482
5483(define-public python-txacme
5484 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
5485 ;; compatibility with twisted, use the latest commit from trunk branch.
5486 ;;
5487 ;;See: <https://github.com/twisted/txacme/issues/165>.
5488 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
5489 (revision "0"))
5490 (package
5491 (name "python-txacme")
5492 (version (git-version "0.9.3" revision commit))
5493 (source
5494 (origin
5495 (method git-fetch) ;no fresh release in PyPI
5496 (uri (git-reference
5497 (url "https://github.com/twisted/txacme")
5498 (commit commit)))
5499 (file-name (git-file-name name version))
5500 (sha256
5501 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
5502 (build-system pyproject-build-system)
5503 (arguments
5504 (list #:test-backend #~'custom
5505 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
5506 (native-inputs
5507 (list python-setuptools))
5508 (propagated-inputs
5509 (list python-acme
5510 python-attrs
5511 python-eliot
5512 python-josepy
5513 python-pem
5514 python-treq
5515 python-twisted
5516 python-txsni))
5517 (home-page "https://github.com/twisted/txacme")
5518 (synopsis "Twisted implexmentation of the ACME protocol")
5519 (description
5520 "ACME is Automatic Certificate Management Environment, a protocol that
5521allows clients and certificate authorities to automate verification and
5522certificate issuance. The ACME protocol is used by the free Let's Encrypt
5523Certificate Authority.
5524
5525txacme is an implementation of the protocol for Twisted, the event-driven
5526networking engine for Python.")
5527 (license license:expat))))
5528
5529(define-public python-txaio
5530 (package
5531 (name "python-txaio")
5532 (version "25.9.2")
5533 (source
5534 (origin
5535 (method url-fetch)
5536 (uri (pypi-uri "txaio" version))
5537 (sha256
5538 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
5539 (build-system pyproject-build-system)
5540 (native-inputs
5541 (list python-pytest
5542 python-setuptools))
5543 (home-page "https://github.com/crossbario/txaio")
5544 (synopsis "Compatibility layer between Python asyncio and Twisted")
5545 (description
5546 "Txaio provides a compatibility layer between the Python @code{asyncio}
5547 bsmodule and @code{Twisted}.")
5548 (license license:expat)))
5549
5550;; XXX: Potentially abandonware since 2017, consider to remove when nothing
5551;; depends on it or fails to build.
5552(define-public python-txamqp
5553 (package
5554 (name "python-txamqp")
5555 (version "0.8.2")
5556 (source
5557 (origin
5558 (method url-fetch)
5559 (uri (pypi-uri "txAMQP" version))
5560 (sha256
5561 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
5562 (build-system pyproject-build-system)
5563 (arguments
5564 (list #:tests? #f)) ;all tests failed
5565 (native-inputs
5566 (list python-setuptools))
5567 (propagated-inputs
5568 (list python-six python-twisted))
5569 (home-page "https://github.com/txamqp/txamqp")
5570 (synopsis "Communicate with AMQP peers and brokers using Twisted")
5571 (description
5572 "This package provides a Python library for communicating with AMQP peers
5573and brokers using the asynchronous networking framework Twisted. It contains
5574all the necessary code to connect, send and receive messages to/from an
5575AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
5576also includes support for using Thrift RPC over AMQP in Twisted
5577applications.")
5578 (license license:asl2.0)))
5579
5580(define-public python-txsni
5581 (package
5582 (name "python-txsni")
5583 (version "0.2.0")
5584 (source
5585 (origin
5586 (method git-fetch)
5587 (uri (git-reference
5588 (url "https://github.com/glyph/txsni")
5589 (commit (string-append "v" version))))
5590 (file-name (git-file-name name version))
5591 (sha256
5592 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
5593 (build-system pyproject-build-system)
5594 (arguments
5595 (list #:test-backend #~'custom
5596 #:test-flags #~(list "-m" "twisted.trial"
5597 "--temp-directory=/tmp/_trial_temp"
5598 "txsni")))
5599 (native-inputs
5600 (list python-setuptools))
5601 (propagated-inputs
5602 (list python-pyopenssl
5603 python-service-identity
5604 python-twisted))
5605 (home-page "https://github.com/glyph/txsni")
5606 (synopsis "Run TLS servers with Twisted")
5607 (description
5608 "This package provides an easy-to-use SNI endpoint for use with the
5609Twisted web framework.")
5610 (license license:expat)))
5611
5612(define-public python-txtorcon
5613 (package
5614 (name "python-txtorcon")
5615 (version "24.8.0")
5616 (source
5617 (origin
5618 (method url-fetch)
5619 (uri (pypi-uri "txtorcon" version))
5620 (sha256
5621 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
5622 (build-system pyproject-build-system)
5623 (native-inputs
5624 (list python-pytest
5625 python-setuptools
5626 python-wheel))
5627 (inputs
5628 (list lsof))
5629 (propagated-inputs
5630 (list python-automat
5631 python-idna
5632 python-incremental
5633 python-pyopenssl
5634 python-service-identity
5635 python-twisted
5636 python-zope-interface))
5637 (home-page "https://github.com/meejah/txtorcon")
5638 (synopsis "Twisted-based Tor controller client")
5639 (description
5640 "This package provides a Twisted-based Tor controller client,with
5641state-tracking and configuration abstractions.")
5642 (license license:expat)))
5643
5644(define-public python-url-normalize
5645 (package
5646 (name "python-url-normalize")
5647 (version "2.2.1")
5648 (source
5649 (origin
5650 (method git-fetch) ; no tests in PyPI release
5651 (uri (git-reference
5652 (url "https://github.com/niksite/url-normalize")
5653 (commit (string-append "v" version))))
5654 (file-name (git-file-name name version))
5655 (sha256
5656 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
5657 (build-system pyproject-build-system)
5658 (arguments
5659 (list
5660 #:test-flags #~(list "--ignore=tests/test_cli.py")))
5661 (native-inputs
5662 (list python-pytest python-pytest-socket python-setuptools))
5663 (propagated-inputs
5664 (list python-idna))
5665 (home-page "https://github.com/niksite/url-normalize")
5666 (synopsis "URL normalization for Python")
5667 (description
5668 "This package provides a URI Normalization function with following
5669features:
5670@itemize
5671@item take care of IDN domains
5672@item always provide the URI scheme in lowercase characters
5673@item always provide the host, if any, in lowercase characters
5674@item only perform percent-encoding where it is essential
5675@item always use uppercase A-through-F characters when percent-encoding
5676@item prevent dot-segments appearing in non-relative URI paths
5677@item for schemes that define a default authority, use an empty authority if
5678the default is desired
5679@item for schemes that define an empty path to be equivalent to a path of
5680@code{/}, use @code{/}
5681@item for schemes that define a port, use an empty port if the default is
5682desired
5683@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
5684@end itemize")
5685 (license license:expat)))
5686
5687(define-public python-waitress
5688 (package
5689 (name "python-waitress")
5690 (version "3.0.2")
5691 (source
5692 (origin
5693 (method url-fetch)
5694 (uri (pypi-uri "waitress" version))
5695 (sha256
5696 (base32
5697 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
5698 (build-system pyproject-build-system)
5699 (arguments
5700 (list
5701 ;; https://github.com/Pylons/waitress/issues/443
5702 #:test-flags #~(list "-k" "not test_service_port")))
5703 (native-inputs (list python-pytest python-setuptools))
5704 (home-page "https://github.com/Pylons/waitress")
5705 (synopsis "Waitress WSGI server")
5706 (description
5707 "Waitress is meant to be a production-quality pure-Python WSGI server
5708with very acceptable performance.")
5709 (license license:zpl2.1)))
5710
5711(define-public python-weasel
5712 (package
5713 (name "python-weasel")
5714 (version "1.0.0")
5715 (source
5716 (origin
5717 (method git-fetch)
5718 (uri (git-reference
5719 (url "https://github.com/explosion/weasel/")
5720 (commit (string-append "release-v" version))))
5721 (file-name (git-file-name name version))
5722 (sha256
5723 (base32 "1sxcxri9hl9rs1kvdrv81g6mlg7lifhq9xacskracz63v4nyh8na"))))
5724 (build-system pyproject-build-system)
5725 (arguments
5726 (list
5727 #:test-flags
5728 ;; This test raises an error, but not the one expected by pytest.
5729 #~(list (string-append "--deselect=weasel/tests/test_validation.py::"
5730 "test_project_config_interpolation[10_0]")
5731 ;; Network access is required.
5732 #$@(map (lambda (test) (string-append "--deselect="
5733 "weasel/tests/cli/"
5734 test))
5735 (list "test_cli.py::test_project_git_dir_asset"
5736 "test_cli.py::test_project_git_file_asset"
5737 "test_cli_app.py::test_project_assets")))))
5738 (native-inputs
5739 (list python-pytest
5740 python-setuptools))
5741 (propagated-inputs
5742 (list python-cloudpathlib
5743 python-confection
5744 python-httpx
5745 python-packaging
5746 python-pydantic
5747 python-smart-open
5748 python-srsly
5749 python-typer
5750 python-wasabi))
5751 (home-page "https://github.com/explosion/weasel/")
5752 (synopsis "Small and easy workflow system")
5753 (description
5754 "This package provides a minimalistic workflow system to manage and
5755share end-to-end workflows for different use cases and domains.")
5756 (license license:expat)))
5757
5758(define-public python-webencodings
5759 (package
5760 (name "python-webencodings")
5761 (version "0.5.1")
5762 (source
5763 (origin
5764 (method url-fetch)
5765 (uri (pypi-uri "webencodings" version))
5766 (sha256
5767 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
5768 (build-system pyproject-build-system)
5769 (arguments
5770 (list #:test-flags #~(list "webencodings/tests.py")))
5771 (native-inputs
5772 (list python-pytest python-setuptools))
5773 (home-page "https://github.com/SimonSapin/python-webencodings")
5774 (synopsis "Character encoding aliases for legacy web content")
5775 (description
5776 "In order to be compatible with legacy web content when interpreting
5777something like @code{Content-Type: text/html; charset=latin1}, tools need to
5778use a particular set of aliases for encoding labels as well as some overriding
5779rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
5780actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
5781BOM takes precedence over any other encoding declaration. The WHATWG
5782@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
5783details so that implementations do not have to reverse-engineer each other.
5784
5785This module implements the Encoding standard and has encoding labels and BOM
5786detection, but the actual implementation for encoders and decoders is
5787Python’s.")
5788 (license license:bsd-3)))
5789
5790(define-public python-omnipath
5791 (package
5792 (name "python-omnipath")
5793 (version "1.0.10")
5794 (source
5795 (origin
5796 (method git-fetch)
5797 (uri (git-reference
5798 (url "https://github.com/saezlab/omnipath/")
5799 (commit (string-append "v" version))))
5800 (file-name (git-file-name name version))
5801 (sha256
5802 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
5803 (build-system pyproject-build-system)
5804 (arguments
5805 (list
5806 #:test-flags '(list "-k"
5807 (string-append
5808 ;; These require internet access
5809 "not test_download_homologene"
5810 " and not test_complex_genes"
5811 ;; These tests are not compatible with pandas 3
5812 " and not test_no_dtype_conversion"
5813 " and not test_strip_resource_label_no_func"
5814 " and not test_split_unique_join_no_func"
5815 " and not test_auto_dtype"))
5816 #:phases
5817 #~(modify-phases %standard-phases
5818 (add-after 'unpack 'set-home
5819 (lambda _
5820 (setenv "HOME" "/tmp"))))))
5821 (propagated-inputs (list python-attrs
5822 python-docrep
5823 python-inflect
5824 python-networkx
5825 python-packaging
5826 python-pandas
5827 python-requests
5828 python-tqdm
5829 python-typing-extensions
5830 python-urllib3
5831 python-wrapt))
5832 (native-inputs (list nss-certs-for-test
5833 python-bump2version
5834 python-hatchling
5835 python-pytest
5836 python-pytest-mock
5837 python-pytest-socket
5838 python-requests-mock))
5839 (home-page "https://omnipathdb.org/")
5840 (synopsis "Python client for the OmniPath web service")
5841 (description "This package provides a Python client for the OmniPath web
5842service.")
5843 (license license:expat)))
5844
5845(define-public python-openai
5846 (package
5847 (name "python-openai")
5848 (version "2.42.0")
5849 (source
5850 (origin
5851 (method git-fetch)
5852 (uri (git-reference
5853 (url "https://github.com/openai/openai-python")
5854 (commit (string-append "v" version))))
5855 (file-name (git-file-name name version))
5856 (sha256
5857 (base32 "1p0vzy34cx2gfkhsqg2kxzam51cjlpa99q0skzj4426sx2hsw3g6"))))
5858 (build-system pyproject-build-system)
5859 (arguments
5860 (list
5861 #:test-flags
5862 ;; These require internet access and an openai API key.
5863 #~(list "--ignore=openai/tests/asyncio/test_endpoints.py"
5864 "--ignore=openai/tests/test_endpoints.py"
5865 "--ignore-glob=tests/api_resources/*")))
5866 (propagated-inputs
5867 (list python-aiohttp
5868 python-distro
5869 python-httpx
5870 python-jiter
5871 python-pydantic
5872 python-requests
5873 python-tqdm
5874 python-typing-extensions))
5875 (native-inputs
5876 (list nss-certs-for-test
5877 python-dirty-equals
5878 python-hatchling
5879 python-hatch-fancy-pypi-readme
5880 python-inline-snapshot
5881 python-pytest
5882 python-pytest-asyncio
5883 python-pytest-mock
5884 python-pytest-xdist
5885 python-respx
5886 python-rich
5887 python-setuptools))
5888 (home-page "https://github.com/openai/openai-python")
5889 (synopsis "Python client library for the OpenAI API")
5890 (description "This package provides a Python client library for the
5891OpenAI API.")
5892 (license license:expat)))
5893
5894(define-public python-openapi-schema-validator
5895 (package
5896 (name "python-openapi-schema-validator")
5897 (version "0.6.2")
5898 (source
5899 (origin
5900 (method git-fetch) ;no tests in pypi release
5901 (uri (git-reference
5902 (url "https://github.com/p1c2u/openapi-schema-validator")
5903 (commit version)))
5904 (file-name (git-file-name name version))
5905 (sha256
5906 (base32
5907 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
5908 (build-system pyproject-build-system)
5909 (arguments
5910 (list
5911 #:test-flags
5912 ;; This one returns 5 instead of 4 elements
5913 '(list "-k" "not test_array_prefixitems_invalid")
5914 #:phases
5915 #~(modify-phases %standard-phases
5916 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
5917 (add-after 'unpack 'relax-requirements
5918 (lambda _
5919 (substitute* "pyproject.toml"
5920 (("jsonschema-specifications.*")
5921 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
5922 (native-inputs (list python-poetry-core python-pytest))
5923 (propagated-inputs
5924 (list python-isodate
5925 python-jsonschema
5926 python-rfc3339-validator
5927 python-strict-rfc3339))
5928 (home-page "https://github.com/p1c2u/openapi-schema-validator")
5929 (synopsis "OpenAPI schema validation library for Python")
5930 (description "Openapi-schema-validator is a Python library that validates
5931a schema against:
5932@itemize
5933@item OpenAPI Schema Specification v3.0 which is an extended subset of the
5934JSON Schema Specification Wright Draft 00.
5935@item OpenAPI Schema Specification v3.1 which is an extended superset of the
5936JSON Schema Specification Draft 2020-12.
5937@end itemize")
5938 (license license:bsd-3)))
5939
5940(define-public python-openapi-spec-validator
5941 (package
5942 (name "python-openapi-spec-validator")
5943 (version "0.7.1")
5944 (source
5945 (origin
5946 (method git-fetch) ;no tests in pypi release
5947 (uri (git-reference
5948 (url "https://github.com/p1c2u/openapi-spec-validator")
5949 (commit version)))
5950 (file-name (git-file-name name version))
5951 (sha256
5952 (base32
5953 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
5954 (build-system pyproject-build-system)
5955 (arguments
5956 (list
5957 ;; These tests attempt to fetch resources from the Internet
5958 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
5959 "-k" "not example")))
5960 (native-inputs
5961 (list python-poetry-core
5962 python-pytest))
5963 (propagated-inputs
5964 (list python-jsonschema
5965 python-jsonschema-path
5966 python-lazy-object-proxy
5967 python-openapi-schema-validator
5968 python-pyyaml
5969 python-requests
5970 python-setuptools))
5971 (home-page "https://github.com/p1c2u/openapi-spec-validator")
5972 (synopsis "OpenAPI spec validator")
5973 (description "OpenAPI Spec Validator is a Python library that validates an
5974OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
59753.0 and OpenAPI 3.1 specifications. The validator aims to check for full
5976compliance with the specification.")
5977 (license license:asl2.0)))
5978
5979(define-public python-openapi-core
5980 (package
5981 (name "python-openapi-core")
5982 (version "0.19.4")
5983 (source
5984 (origin
5985 (method git-fetch)
5986 (uri (git-reference
5987 (url "https://github.com/p1c2u/openapi-core")
5988 (commit version)))
5989 (file-name (git-file-name name version))
5990 (sha256
5991 (base32
5992 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
5993 (build-system pyproject-build-system)
5994 (arguments
5995 (list
5996 #:test-flags
5997 '(list "tests/unit"
5998 "-k" "not test_chars_valid")))
5999 (native-inputs (list python-django
6000 python-falcon
6001 python-flask
6002 python-mock
6003 python-poetry-core
6004 python-pytest
6005 python-pytest-asyncio
6006 python-responses))
6007 (propagated-inputs
6008 (list python-attrs
6009 python-aiohttp
6010 python-isodate
6011 python-jsonschema
6012 python-lazy-object-proxy
6013 python-more-itertools
6014 python-openapi-schema-validator
6015 python-openapi-spec-validator
6016 python-parse
6017 python-six
6018 python-werkzeug))
6019 (home-page "https://github.com/p1c2u/openapi-core")
6020 (synopsis "OpenAPI core library")
6021 (description "Openapi-core is a Python library that adds client-side and
6022server-side support for the OpenAPI Specification v3. It has features such
6023as:
6024@itemize
6025@item Validation of requests and responses
6026@item Schema casting and unmarshalling
6027@item Media type and parameters deserialization
6028@item Security providers (API keys, Cookie, Basic and Bearer HTTP
6029authentications)
6030@item Custom deserializers and formats
6031@item Integration with libraries and frameworks.
6032@end itemize")
6033 (license license:bsd-3)))
6034
6035(define-public python-openid
6036 (package
6037 (name "python-openid")
6038 (version "3.2.0")
6039 (source
6040 (origin
6041 (method url-fetch)
6042 (uri (pypi-uri "python3-openid" version))
6043 (sha256
6044 (base32
6045 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
6046 (build-system pyproject-build-system)
6047 (arguments
6048 `(#:phases
6049 (modify-phases %standard-phases
6050 (replace 'check
6051 (lambda* (#:key tests? #:allow-other-keys)
6052 (when tests?
6053 (invoke "python" "-m" "unittest" "openid.test.test_suite")))))))
6054 (propagated-inputs
6055 (list python-defusedxml))
6056 (native-inputs
6057 (list python-psycopg2 python-django python-setuptools python-wheel))
6058 (home-page "https://github.com/necaris/python3-openid")
6059 (synopsis "OpenID support for servers and consumers")
6060 (description "This library provides OpenID authentication for Python, both
6061for clients and servers.")
6062 (license license:asl2.0)))
6063
6064(define-public python-cssutils
6065 (package
6066 (name "python-cssutils")
6067 (version "2.11.1")
6068 (source
6069 (origin
6070 (method url-fetch)
6071 (uri (pypi-uri "cssutils" version))
6072 (sha256
6073 (base32
6074 "1qpq7xvzqp4cfcb8837rnd30x4hws3rkp33qpvmnxbxn2djsfqq5"))))
6075 (build-system pyproject-build-system)
6076 (arguments
6077 (list
6078 #:phases
6079 #~(modify-phases %standard-phases
6080 (replace 'check
6081 (lambda _
6082 (invoke "pytest" "-vv" "-k"
6083 (string-append "not encutils "
6084 "and not website.logging")))))))
6085 (native-inputs
6086 (list python-cssselect
6087 python-jaraco-test
6088 python-lxml
6089 python-pytest
6090 python-setuptools
6091 python-wheel))
6092 (propagated-inputs
6093 (list python-more-itertools))
6094 (home-page "https://github.com/jaraco/cssutils")
6095 (synopsis
6096 "CSS Cascading Style Sheets library for Python")
6097 (description
6098 "Cssutils is a Python package for parsing and building CSS
6099Cascading Style Sheets. Currently it provides a DOM only and no rendering
6100options.")
6101 (license license:lgpl3+)))
6102
6103(define-public python-css-parser
6104 (package
6105 (inherit python-cssutils)
6106 (name "python-css-parser")
6107 (version "1.0.10")
6108 (source
6109 (origin
6110 (method url-fetch)
6111 (uri (pypi-uri "css-parser" version))
6112 (sha256
6113 (base32 "0qs375slcwqd7slizh6hzkwxx7cdj36v8kwn0qrfji1kscm9f7mz"))))
6114 (home-page "https://github.com/ebook-utils/css-parser")
6115 (synopsis "Fork of cssutils modified for parsing ebooks")
6116 (description
6117 "Css-parser is a Python package for parsing and building CSS
6118Cascading Style Sheets. Currently it provides a DOM only and no rendering
6119options.
6120
6121It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
6122cssutils not receiving updates as of 1.0.2.")
6123 (license license:lgpl3+)))
6124
6125(define-public python-cssselect
6126 (package
6127 (name "python-cssselect")
6128 (version "1.4.0")
6129 (source
6130 (origin
6131 (method git-fetch)
6132 (uri (git-reference
6133 (url "https://github.com/scrapy/cssselect")
6134 (commit (string-append "v" version))))
6135 (file-name (git-file-name name version))
6136 (sha256
6137 (base32 "110l98x1mz1mxcal89xscsg28vg624sc0y6b5x1n2clwa19q5g4y"))))
6138 (build-system pyproject-build-system)
6139 (native-inputs
6140 (list python-hatchling python-lxml python-pytest))
6141 (home-page "https://github.com/scrapy/cssselect")
6142 (synopsis "CSS3 selector parser and translator to XPath 1.0")
6143 (description
6144 "Cssselect ia a Python module that parses CSS3 Selectors and translates
6145them to XPath 1.0 expressions. Such expressions can be used in lxml or
6146another XPath engine to find the matching elements in an XML or HTML document.")
6147 (license license:bsd-3)))
6148
6149(define-public python-databricks-cli
6150 (package
6151 (name "python-databricks-cli")
6152 (version "0.18.0")
6153 (home-page "https://github.com/databricks/databricks-cli")
6154 (source (origin
6155 (method git-fetch)
6156 (uri (git-reference (url home-page) (commit version)))
6157 (file-name (git-file-name name version))
6158 (sha256
6159 (base32
6160 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
6161 (build-system pyproject-build-system)
6162 (arguments
6163 (list #:phases #~(modify-phases %standard-phases
6164 (replace 'check
6165 (lambda _
6166 (invoke "pytest" "tests" "-vv"))))))
6167 (native-inputs
6168 ;; For tests.
6169 (list python-decorator
6170 python-mock
6171 python-pytest
6172 python-requests-mock
6173 python-setuptools
6174 python-wheel))
6175 (propagated-inputs
6176 (list python-click
6177 python-oauthlib
6178 python-pyjwt
6179 python-requests
6180 python-six
6181 python-tabulate))
6182 (synopsis "Command line interface for Databricks")
6183 (description
6184 "The Databricks Command Line Interface is a tool which provides an easy
6185to use interface to the Databricks platform. The CLI is built on top of the
6186Databricks REST APIs.")
6187 (license license:asl2.0)))
6188
6189(define-public python-openid-cla
6190 ;; XXX: Last updated in 2015.
6191 (package
6192 (name "python-openid-cla")
6193 (version "1.2")
6194 (source
6195 (origin
6196 (method url-fetch)
6197 (uri (pypi-uri "python-openid-cla" version))
6198 (sha256
6199 (base32
6200 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
6201 (build-system pyproject-build-system)
6202 (arguments '(#:tests? #f)) ; No tests.
6203 (native-inputs (list python-setuptools python-wheel))
6204 (propagated-inputs (list python-openid python-six))
6205 (home-page "https://github.com/puiterwijk/python-openid-cla/")
6206 (synopsis "Implementation of the OpenID CLA extension for python-openid")
6207 (description "@code{openid-cla} is an implementation of the OpenID
6208contributor license agreement extension for python-openid.")
6209 (license license:bsd-3)))
6210
6211(define-public python-openid-teams
6212 ;; XXX: Last updated in 2018.
6213 (package
6214 (name "python-openid-teams")
6215 (version "1.1")
6216 (source
6217 (origin
6218 (method url-fetch)
6219 (uri (pypi-uri "python-openid-teams" version))
6220 (sha256
6221 (base32
6222 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
6223 (build-system pyproject-build-system)
6224 (arguments '(#:tests? #f)) ; No tests.
6225 (native-inputs (list python-setuptools python-wheel))
6226 (propagated-inputs (list python-openid python-six))
6227 (home-page "https://github.com/puiterwijk/python-openid-teams/")
6228 (synopsis "Implementation of the OpenID teams extension for python-openid")
6229 (description
6230 "@code{openid-teams} is an implementation of the OpenID
6231teams extension for python-openid.")
6232 (license license:bsd-3)))
6233
6234(define-public python-priority
6235 (package
6236 (name "python-priority")
6237 (version "2.0.0")
6238 (source
6239 (origin
6240 (method url-fetch)
6241 (uri (pypi-uri "priority" version))
6242 (sha256
6243 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
6244 (build-system pyproject-build-system)
6245 (native-inputs
6246 (list python-pytest python-setuptools python-wheel))
6247 (home-page "https://python-hyper.org/projects/priority/en/latest/")
6248 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
6249 (description
6250 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
6251set out in RFC 7540 Section 5.3 (Stream Priority).")
6252 (license license:expat)))
6253
6254(define-public python-weblate-language-data
6255 (package
6256 (name "python-weblate-language-data")
6257 (version "2025.8")
6258 (source
6259 (origin
6260 (method url-fetch)
6261 (uri (pypi-uri "weblate_language_data" version))
6262 (sha256
6263 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
6264 (build-system pyproject-build-system)
6265 (arguments (list #:tests? #f)) ;not tests, just data files
6266 (native-inputs
6267 (list python-setuptools))
6268 (propagated-inputs
6269 (list python-translate-toolkit))
6270 (home-page "https://github.com/WeblateOrg/language-data")
6271 (synopsis "Language definitions for Weblate")
6272 (description
6273 "This package provides language definitions used by
6274@url{https://weblate.org/, Weblate}i.")
6275 (license license:expat)))
6276
6277(define-public python-wikidata
6278 (package
6279 (name "python-wikidata")
6280 (version "0.8.1")
6281 (source
6282 (origin
6283 (method git-fetch)
6284 (uri (git-reference
6285 (url "https://github.com/dahlia/wikidata")
6286 (commit version)))
6287 (file-name (git-file-name name version))
6288 (sha256
6289 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
6290 (build-system pyproject-build-system)
6291 (native-inputs
6292 (list python-pytest python-setuptools))
6293 (home-page "https://github.com/dahlia/wikidata")
6294 (synopsis "Wikidata client library")
6295 (description
6296 "This package provides a Python interface to @url{https://www.wikidata.org/,
6297Wikidata}.")
6298 (license license:gpl3+)))
6299
6300(define-public python-wsproto
6301 (package
6302 (name "python-wsproto")
6303 (version "1.3.2")
6304 (source
6305 (origin
6306 (method git-fetch)
6307 (uri (git-reference
6308 (url "https://github.com/python-hyper/wsproto/")
6309 (commit version)))
6310 (file-name (git-file-name name version))
6311 (sha256
6312 (base32 "1n67xnnq3mvnxp61r4d8730hh8hzrq8i9bdrv8jivhj369fhndn9"))))
6313 (build-system pyproject-build-system)
6314 (native-inputs
6315 (list python-pytest
6316 python-setuptools))
6317 (propagated-inputs
6318 (list python-h11))
6319 (home-page "https://github.com/python-hyper/wsproto/")
6320 (synopsis "WebSockets state-machine based protocol implementation")
6321 (description
6322 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
6323stack. It's written from the ground up to be embeddable in whatever program
6324you choose to use, ensuring that you can communicate via WebSockets, as
6325defined in RFC6455, regardless of your programming paradigm.")
6326 (license license:expat)))
6327
6328(define-public hypercorn
6329 (package
6330 (name "hypercorn")
6331 (version "0.18.0")
6332 (source
6333 (origin
6334 (method git-fetch) ;PyPI does not have tests
6335 (uri (git-reference
6336 (url "https://github.com/pgjones/hypercorn")
6337 (commit version)))
6338 (file-name (git-file-name name version))
6339 (sha256
6340 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
6341 (build-system pyproject-build-system)
6342 ;; Propagate because Hypercorn also exposes functionality over a module.
6343 (propagated-inputs (list python-h11
6344 python-h2
6345 python-priority
6346 python-tomli
6347 python-wsproto))
6348 (native-inputs (list nss-certs-for-test
6349 python-httpx
6350 python-pdm-backend
6351 python-poetry-core
6352 python-pytest
6353 python-pytest-asyncio
6354 python-pytest-trio
6355 python-trio))
6356 (home-page "https://gitlab.com/pgjones/hypercorn/")
6357 (synopsis "ASGI Server based on Hyper libraries")
6358 (description
6359 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
6360wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
6361WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
6362can utilise asyncio, uvloop, or trio worker types.")
6363 (license license:expat)))
6364
6365(define-public python-querystring-parser
6366 (package
6367 (name "python-querystring-parser")
6368 (version "1.2.4")
6369 (source
6370 (origin
6371 (method git-fetch)
6372 (uri (git-reference
6373 (url "https://github.com/bernii/querystring-parser")
6374 (commit version)))
6375 (file-name (git-file-name name version))
6376 (sha256
6377 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
6378 (build-system pyproject-build-system)
6379 (arguments
6380 (list
6381 #:test-backend #~'custom
6382 #:test-flags #~(list "querystring_parser/tests.py")
6383 #:phases
6384 #~(modify-phases %standard-phases
6385 (add-after 'unpack 'fix-python-incompatibilities
6386 (lambda _
6387 (substitute* "querystring_parser/tests.py"
6388 ;; XXX FIXME: This test is broken with Python 3.7:
6389 ;; https://github.com/bernii/querystring-parser/issues/35
6390 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
6391 "True")
6392 ;; Removed in Python 3.12.
6393 (("assertEquals")
6394 "assertEqual")))))))
6395 (native-inputs (list python-setuptools))
6396 (propagated-inputs (list python-six))
6397 (home-page "https://github.com/bernii/querystring-parser")
6398 (synopsis "QueryString parser that correctly handles nested dictionaries")
6399 (description
6400 "This package provides a query string parser for Python and Django
6401projects that correctly creates nested dictionaries from sent form/querystring
6402data.")
6403 (license license:expat)))
6404
6405(define-public python-tornado
6406 (package
6407 (name "python-tornado")
6408 (version "6.4.2")
6409 (source
6410 (origin
6411 (method url-fetch)
6412 (uri (pypi-uri "tornado" version))
6413 (sha256
6414 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
6415 (build-system pyproject-build-system)
6416 (arguments
6417 (list
6418 #:test-flags
6419 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
6420 #~(list "--ignore=tornado/test/iostream_test.py")))
6421 (native-inputs
6422 (list python-certifi
6423 python-pytest
6424 python-setuptools))
6425 (home-page "https://www.tornadoweb.org/")
6426 (synopsis "Python web framework and asynchronous networking library")
6427 (description
6428 "Tornado is a Python web framework and asynchronous networking library,
6429originally developed at FriendFeed. By using non-blocking network I/O,
6430Tornado can scale to tens of thousands of open connections, making it ideal
6431for long polling, WebSockets, and other applications that require a long-lived
6432connection to each user.")
6433 (license license:asl2.0)))
6434
6435(define-public python-tornado-http-auth
6436 (package
6437 (name "python-tornado-http-auth")
6438 (version "1.1.1")
6439 (source
6440 (origin
6441 (method git-fetch)
6442 (uri (git-reference
6443 (url "https://github.com/gvalkov/tornado-http-auth")
6444 (commit (string-append "v" version))))
6445 (file-name (git-file-name name version))
6446 (sha256
6447 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
6448 (build-system pyproject-build-system)
6449 ;; XXX: This version is incompatible with current tornado.testing.
6450 (arguments (list #:tests? #f))
6451 (native-inputs (list python-setuptools))
6452 (propagated-inputs (list python-tornado))
6453 (home-page "https://github.com/gvalkov/tornado-http-auth")
6454 (synopsis "Digest and basic authentication module for Tornado")
6455 (description
6456 "Provides support for adding authentication to services using the Tornado
6457web framework, either via the basic or digest authentication schemes.")
6458 (license license:asl2.0)))
6459
6460(define-public python-wsgi-intercept
6461 (package
6462 (name "python-wsgi-intercept")
6463 (version "1.13.1")
6464 (source (origin
6465 (method url-fetch)
6466 (uri (pypi-uri "wsgi_intercept" version))
6467 (sha256
6468 (base32
6469 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
6470 (build-system pyproject-build-system)
6471 (arguments
6472 (list
6473 ;; XXX: tests required internet access
6474 #:tests? #f))
6475 (propagated-inputs
6476 (list python-six))
6477 (native-inputs
6478 (list python-httplib2
6479 python-pytest
6480 python-requests
6481 python-setuptools
6482 python-urllib3
6483 python-wheel))
6484 (synopsis "Puts a WSGI application in place of a real URI for testing")
6485 (description "Wsgi_intercept installs a WSGI application in place of a real
6486URI for testing. Testing a WSGI application normally involves starting a
6487server at a local host and port, then pointing your test code to that address.
6488Instead, this library lets you intercept calls to any specific host/port
6489combination and redirect them into a WSGI application importable by your test
6490program. Thus, you can avoid spawning multiple processes or threads to test
6491your Web app.")
6492 (home-page "https://github.com/cdent/wsgi-intercept")
6493 (license license:expat)))
6494
6495(define-public python-webob
6496 (package
6497 (name "python-webob")
6498 (version "1.8.10")
6499 (source
6500 (origin
6501 (method url-fetch)
6502 (uri (pypi-uri "webob" version))
6503 (sha256
6504 (base32
6505 "0avwfsqqva46aix1p61jbwjsw7kh6zkxvfds9xi3zg07yc8km5hw"))))
6506 (build-system pyproject-build-system)
6507 ;; tests: 2394 passed, 9 skipped, 1 xfailed, 35 warnings
6508 (native-inputs
6509 (list python-pytest
6510 python-setuptools))
6511 (home-page "https://webob.org/")
6512 (synopsis "WSGI request and response object")
6513 (description
6514 "WebOb provides wrappers around the WSGI request environment, and an
6515object to help create WSGI responses.")
6516 (license license:expat)))
6517
6518(define-public python-yewtube-search
6519 (package
6520 (name "python-yewtube-search")
6521 ;; Original repository for python-youtube-search package is archived, see:
6522 ;; <https://github.com/alexmercerind/youtube-search-python/issues/189>.
6523 ;; The most promising fork was
6524 ;; <https://github.com/ahmedayyad-dev/youtube-search-python-fork> which is
6525 ;; archived since <2026-04-04>. This is another fork with a different PyPI
6526 ;; name for python-yewtube.
6527 (version "1.6.7")
6528 (source
6529 (origin
6530 (method url-fetch)
6531 (uri (pypi-uri "yewtube_search_python" version))
6532 (sha256
6533 (base32 "0vjh4wrlqx4lv9qi6572jx2d0rsp6gkvaqf0f2ar4npdz0ldgl47"))))
6534 (build-system pyproject-build-system)
6535 (arguments (list #:tests? #f)) ;no tests in repository
6536 (native-inputs
6537 (list python-setuptools))
6538 (propagated-inputs
6539 (list python-httpx))
6540 (home-page "https://github.com/iamtalhaasghar/youtube-search-python")
6541 (synopsis "Search for YouTube videos, channels & playlists")
6542 (description
6543 "This package provides tools to search for @code{YouTube} videos,
6544channels and playlists; as well as getting video metadata from links. This
6545package does not rely on the @code{YouTube} Data API v3.")
6546 (license license:expat)))
6547
6548(define-public python-zc-lockfile
6549 (package
6550 (name "python-zc-lockfile")
6551 (version "4.0")
6552 (source
6553 (origin
6554 (method git-fetch)
6555 (uri (git-reference
6556 (url "https://github.com/zopefoundation/zc.lockfile")
6557 (commit version)))
6558 (file-name (git-file-name name version))
6559 (sha256
6560 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
6561 (build-system pyproject-build-system)
6562 (arguments
6563 (list
6564 #:phases
6565 #~(modify-phases %standard-phases
6566 (replace 'check
6567 (lambda* (#:key tests? #:allow-other-keys)
6568 (if tests?
6569 (invoke "zope-testrunner" "--test-path=src")
6570 (format #t "test suite not run~%")))))))
6571 (native-inputs (list python-zope-testing python-zope-testrunner
6572 python-setuptools))
6573 (home-page "https://github.com/zopefoundation/zc.lockfile")
6574 (synopsis "Interprocess locks using lock files")
6575 (description
6576 "This package provides an implementation of interprocess locks using lock
6577files. These locks can also be used to mediate access to other files.")
6578 (license license:zpl2.1)))
6579
6580(define-public python-zconfig
6581 (package
6582 (name "python-zconfig")
6583 (version "4.3")
6584 (source
6585 (origin
6586 (method git-fetch)
6587 (uri (git-reference
6588 (url "https://github.com/zopefoundation/ZConfig/")
6589 (commit version)))
6590 (file-name (git-file-name name version))
6591 (sha256
6592 (base32 "06c4vffk51fw03q87r31s81b0xbxg2qqvjfmcl2z4hg21fr088c2"))))
6593 (build-system pyproject-build-system)
6594 (arguments
6595 (list
6596 #:phases
6597 #~(modify-phases %standard-phases
6598 (replace 'check
6599 (lambda* (#:key tests? #:allow-other-keys)
6600 (if tests?
6601 (begin
6602 ;; This test assumes we still have setup.py in the
6603 ;; directory from which we import zconfig, which
6604 ;; does not work after installing the package.
6605 (delete-file-recursively
6606 "src/ZConfig/tests/test_readme.py")
6607 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
6608 (format #t "test suite not run~%")))))))
6609 (native-inputs (list python-docutils python-manuel python-zope-exceptions
6610 python-zope-testrunner python-setuptools))
6611 (home-page "https://github.com/zopefoundation/ZConfig/")
6612 (synopsis "Structured configuration library intended for general use")
6613 (description
6614 "@code{zconfig} is a configuration library intended for general use. It
6615supports a hierarchical schema-driven configuration model that allows a schema
6616to specify data conversion routines written in Python. Its model is very
6617different from the model supported by the @code{configparser} module found in
6618Python's standard library, and is more suitable to configuration-intensive
6619applications.")
6620 (license license:zpl2.1)))
6621
6622(define-public python-zodb
6623 (package
6624 (name "python-zodb")
6625 (version "6.0.1")
6626 (source
6627 (origin
6628 (method url-fetch)
6629 (uri (pypi-uri "zodb" version))
6630 (sha256
6631 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
6632 (build-system pyproject-build-system)
6633 (arguments
6634 (list
6635 #:phases
6636 #~(modify-phases %standard-phases
6637 (replace 'check
6638 (lambda* (#:key tests? #:allow-other-keys)
6639 (if tests?
6640 (begin
6641 ;; This test does not work after installing the
6642 ;; package, since it expects the ZODB source code
6643 ;; to reside in the src/ directory.
6644 (delete-file-recursively
6645 "src/ZODB/tests/testdocumentation.py")
6646 (invoke "zope-testrunner" "-vv" "--test-path=src"
6647 "--all"))
6648 (format #t "test suite not run~%")))))))
6649 (native-inputs
6650 (list python-manuel
6651 python-wheel
6652 python-zope-testing
6653 python-zope-testrunner))
6654 (propagated-inputs
6655 (list python-btrees
6656 python-persistent
6657 python-transaction
6658 python-zc-lockfile
6659 python-zconfig
6660 python-zodbpickle
6661 python-zope-interface))
6662 (home-page "http://zodb-docs.readthedocs.io")
6663 (synopsis "Object-oriented database for Python")
6664 (description
6665 "@code{ZODB} provides an object-oriented and @acronym{ACID,
6666Atomicity Consistency Isolation Durability} compliant database for Python with
6667a high degree of transparency. @code{ZODB} is an object-oriented database,
6668not an object-relational mapping. This comes with several advantaged:
6669
6670@itemize
6671@item no separate language for database operations
6672@item very little impact on your code to make objects persistent
6673@item no database mapper that partially hides the database.
6674@item almost no seam between code and database.
6675@end itemize")
6676 (license license:zpl2.1)))
6677
6678(define-public python-zodbpickle
6679 (package
6680 (name "python-zodbpickle")
6681 (version "3.2")
6682 (source
6683 (origin
6684 (method url-fetch)
6685 (uri (pypi-uri "zodbpickle" version))
6686 (sha256
6687 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
6688 (build-system pyproject-build-system)
6689 (arguments
6690 '(#:phases (modify-phases %standard-phases
6691 (replace 'check
6692 (lambda* (#:key tests? #:allow-other-keys)
6693 (if tests?
6694 (invoke "zope-testrunner" "-vv" "--test-path=src"
6695 "--all")
6696 (format #t "test suite not run~%")))))))
6697 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
6698 (home-page "https://github.com/zopefoundation/zodbpickle")
6699 (synopsis "Uniform pickling interface for @code{zodb}")
6700 (description
6701 "This package is a fork of the @code{pickle} module (and the
6702supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
6703support for the @code{noload} operations used by @code{zodb}.")
6704 (license (list license:psfl license:zpl2.1))))
6705
6706(define-public python-zope-dottedname
6707 (package
6708 (name "python-zope-dottedname")
6709 (version "7.0")
6710 (source
6711 (origin
6712 (method git-fetch)
6713 (uri (git-reference
6714 (url "https://github.com/zopefoundation/zope.dottedname")
6715 (commit version)))
6716 (file-name (git-file-name name version))
6717 (sha256
6718 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
6719 (build-system pyproject-build-system)
6720 (arguments
6721 (list #:test-backend #~'custom
6722 #:test-flags #~(list "src/zope/dottedname/tests.py")))
6723 (native-inputs (list python-setuptools))
6724 (home-page "https://zopedottedname.readthedocs.io")
6725 (synopsis "Resolver for Python dotted names")
6726 (description
6727 "This package provides a @code{resolve()} function that resolves strings
6728containing dotted names into the appropriate Python object.")
6729 (license license:zpl2.1)))
6730
6731(define-public python-zope-event
6732 (package
6733 (name "python-zope-event")
6734 (version "6.0")
6735 (source
6736 (origin
6737 (method git-fetch)
6738 (uri (git-reference
6739 (url "https://github.com/zopefoundation/zope.event")
6740 (commit version)))
6741 (file-name (git-file-name name version))
6742 (sha256
6743 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
6744 (build-system pyproject-build-system)
6745 (arguments
6746 (list
6747 #:test-flags
6748 #~(list "src/zope/event/tests.py")))
6749 (native-inputs (list python-pytest python-setuptools))
6750 (home-page "https://zopeevent.readthedocs.io/en/latest/")
6751 (synopsis "Event publishing system for Python")
6752 (description
6753 "Zope.event provides an event publishing API, intended for use by
6754applications which are unaware of any subscribers to their events. It is a
6755simple event-dispatching system on which more sophisticated event dispatching
6756systems can be built.")
6757 (license license:zpl2.1)))
6758
6759(define-public python-zope-interface
6760 (package
6761 (name "python-zope-interface")
6762 (version "7.2")
6763 (source
6764 (origin
6765 (method git-fetch)
6766 (uri (git-reference
6767 (url "https://github.com/zopefoundation/zope.interface")
6768 (commit version)))
6769 (file-name (git-file-name name version))
6770 (sha256
6771 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
6772 (build-system pyproject-build-system)
6773 (arguments
6774 ;; XXX: test suite can't find python-zope-testing
6775 (list #:tests? #f))
6776 (native-inputs (list python-setuptools))
6777 (home-page "https://zopeinterface.readthedocs.io")
6778 (synopsis "\"Design by contract\" methodology in Python")
6779 (description
6780 "Zope.interface provides an implementation of \"object interfaces\" for
6781Python. Interfaces are a mechanism for labeling objects as conforming to a
6782given API or contract.")
6783 (license license:zpl2.1)))
6784
6785(define-public python-zope-exceptions
6786 (package
6787 (name "python-zope-exceptions")
6788 (version "6.0")
6789 (source
6790 (origin
6791 (method git-fetch)
6792 (uri (git-reference
6793 (url "https://github.com/zopefoundation/zope.exceptions")
6794 (commit version)))
6795 (file-name (git-file-name name version))
6796 (sha256
6797 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
6798 (build-system pyproject-build-system)
6799 (arguments
6800 (list
6801 #:phases
6802 #~(modify-phases %standard-phases
6803 (replace 'check
6804 (lambda* (#:key tests? #:allow-other-keys)
6805 (if tests?
6806 (invoke "zope-testrunner" "--test-path=src")
6807 (format #t "test suite not run~%")))))))
6808 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
6809 (propagated-inputs (list python-zope-interface))
6810 (home-page "https://github.com/zopefoundation/zope.exceptions")
6811 (synopsis "Zope exceptions")
6812 (description
6813 "Zope.exceptions provides general-purpose exception types that have uses
6814outside of the Zope framework.")
6815 (license license:zpl2.1)))
6816
6817(define (python-zope-bootstrap-package orig)
6818 (package
6819 (inherit orig)
6820 (name (string-append (package-name orig) "-bootstrap"))
6821 (arguments
6822 (if (null? (package-arguments orig))
6823 (list
6824 #:tests? #f
6825 #:phases #~(modify-phases %standard-phases
6826 (delete 'sanity-check)))
6827 (substitute-keyword-arguments arguments
6828 ((#:tests? _ #f) #f)
6829 ((#:phases phases '%standard-phases)
6830 #~(modify-phases #$phases
6831 (delete 'sanity-check))))))
6832 (propagated-inputs `())
6833 (native-inputs (list python-setuptools))
6834 (properties `((hidden? . #t)))))
6835
6836(define-public python-zope-exceptions-bootstrap
6837 (python-zope-bootstrap-package python-zope-exceptions))
6838
6839(define-public python-zope-testing
6840 (package
6841 (name "python-zope-testing")
6842 (version "6.0")
6843 (source
6844 (origin
6845 (method git-fetch)
6846 (uri (git-reference
6847 (url "https://github.com/zopefoundation/zope.testing")
6848 (commit version)))
6849 (file-name (git-file-name name version))
6850 (sha256
6851 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
6852 (build-system pyproject-build-system)
6853 (arguments
6854 (list
6855 #:phases
6856 #~(modify-phases %standard-phases
6857 (replace 'check
6858 (lambda* (#:key tests? #:allow-other-keys)
6859 (if tests?
6860 (invoke "zope-testrunner" "--test-path=src")
6861 (format #t "test suite not run~%")))))))
6862 (native-inputs (list python-setuptools
6863 python-zope-interface
6864 python-zope-testrunner-bootstrap))
6865 (home-page "https://zopetesting.readthedocs.io/")
6866 (synopsis "Zope testing helpers")
6867 (description
6868 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
6869servers, regular expressions, and more.")
6870 (license license:zpl2.1)))
6871
6872(define-public python-zope-testrunner
6873 (package
6874 (name "python-zope-testrunner")
6875 (version "7.4")
6876 (source
6877 (origin
6878 (method git-fetch)
6879 (uri (git-reference
6880 (url "https://github.com/zopefoundation/zope.testrunner")
6881 (commit version)))
6882 (file-name (git-file-name name version))
6883 (sha256
6884 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
6885 (build-system pyproject-build-system)
6886 (arguments
6887 (list
6888 #:phases
6889 #~(modify-phases %standard-phases
6890 (add-after 'unpack 'remove-problematic-test
6891 (lambda _
6892 ;; This test contains invalid syntax, which breaks bytecode
6893 ;; compilation. For simplicity just remove it.
6894 (delete-file
6895 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
6896 (replace 'check
6897 (lambda* (#:key tests? #:allow-other-keys)
6898 (if tests?
6899 (invoke "zope-testrunner" "--test-path=src")
6900 (format #t "test suite not run~%")))))))
6901 (native-inputs (list python-setuptools python-zope-testing))
6902 (propagated-inputs (list python-zope-exceptions python-zope-interface))
6903 (home-page "https://zopetestrunner.readthedocs.io")
6904 (synopsis "Zope testrunner script")
6905 (description "This package provides a script for running Python tests.")
6906 (license license:zpl2.1)))
6907
6908(define-public python-zope-testrunner-bootstrap
6909 (package
6910 (inherit (python-zope-bootstrap-package python-zope-testrunner))
6911 (propagated-inputs
6912 (list python-six python-zope-exceptions-bootstrap))
6913 (properties `((hidden? . #t)))))
6914
6915(define-public python-zope-i18nmessageid
6916 (package
6917 (name "python-zope-i18nmessageid")
6918 (version "7.0")
6919 (source
6920 (origin
6921 (method git-fetch)
6922 (uri (git-reference
6923 (url "https://github.com/zopefoundation/zope.i18nmessageid")
6924 (commit version)))
6925 (file-name (git-file-name name version))
6926 (sha256
6927 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
6928 (build-system pyproject-build-system)
6929 (arguments
6930 (list
6931 #:phases
6932 #~(modify-phases %standard-phases
6933 (replace 'check
6934 (lambda* (#:key tests? #:allow-other-keys)
6935 (if tests?
6936 (invoke "zope-testrunner" "--test-path=src")
6937 (format #t "test suite not run~%")))))))
6938 (native-inputs (list python-setuptools python-zope-testrunner))
6939 (home-page "https://zopei18nmessageid.readthedocs.io")
6940 (synopsis "Message identifiers for internationalization")
6941 (description "Zope.i18nmessageid provides facilities for declaring
6942internationalized messages within program source text.")
6943 (license license:zpl2.1)))
6944
6945(define-public python-zope-schema
6946 (package
6947 (name "python-zope-schema")
6948 (version "7.0.1")
6949 (source
6950 (origin
6951 (method git-fetch)
6952 (uri (git-reference
6953 (url "https://github.com/zopefoundation/zope.schema")
6954 (commit version)))
6955 (file-name (git-file-name name version))
6956 (sha256
6957 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
6958 (build-system pyproject-build-system)
6959 (arguments
6960 (list
6961 #:phases
6962 #~(modify-phases %standard-phases
6963 (replace 'check
6964 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6965 (add-installed-pythonpath inputs outputs)
6966 (if tests?
6967 (invoke "zope-testrunner" "--test-path=src")
6968 (format #t "test suite not run.~%")))))))
6969 (propagated-inputs (list python-zope-event python-zope-interface))
6970 (native-inputs (list python-zope-i18nmessageid python-zope-testing
6971 python-zope-testrunner python-setuptools))
6972 (home-page "https://zopeschema.readthedocs.io")
6973 (synopsis "Zope data schemas")
6974 (description "Zope.scheme provides extensions to zope.interface for
6975defining data schemas.")
6976 (license license:zpl2.1)))
6977
6978(define-public python-zope-sqlalchemy
6979 (package
6980 (name "python-zope-sqlalchemy")
6981 (version "1.6")
6982 (source
6983 (origin
6984 (method git-fetch)
6985 (uri (git-reference
6986 (url "https://github.com/zopefoundation/zope.sqlalchemy")
6987 (commit version)))
6988 (file-name (git-file-name name version))
6989 (sha256
6990 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
6991 (build-system pyproject-build-system)
6992 (arguments
6993 (list
6994 #:phases
6995 #~(modify-phases %standard-phases
6996 (replace 'check
6997 (lambda* (#:key tests? #:allow-other-keys)
6998 (if tests?
6999 (invoke "zope-testrunner" "--test-path=src")
7000 (format #t "test suite not run~%")))))))
7001 (propagated-inputs (list python-sqlalchemy python-transaction
7002 python-zope-interface))
7003 (native-inputs (list python-zope-testing python-zope-testrunner
7004 python-setuptools))
7005 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
7006 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
7007 (description
7008 "The aim of this package is to unify the plethora of existing packages
7009integrating SQLAlchemy with Zope's transaction management. As such,it only
7010provides a data manager and makes no attempt to define a @i{zopeish} way to
7011configure engines.")
7012 (license license:zpl2.1)))
7013
7014(define-public python-zope-configuration
7015 (package
7016 (name "python-zope-configuration")
7017 (version "7.0")
7018 (source
7019 (origin
7020 (method git-fetch)
7021 (uri (git-reference
7022 (url "https://github.com/zopefoundation/zope.configuration")
7023 (commit version)))
7024 (file-name (git-file-name name version))
7025 (sha256
7026 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
7027 (build-system pyproject-build-system)
7028 (arguments
7029 (list
7030 #:phases
7031 #~(modify-phases %standard-phases
7032 (replace 'check
7033 (lambda* (#:key tests? #:allow-other-keys)
7034 (if tests?
7035 (invoke "zope-testrunner" "--test-path=src")
7036 (format #t "test suite not run~%")))))))
7037 (native-inputs (list python-manuel python-setuptools python-zope-testing
7038 python-zope-testrunner))
7039 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
7040 python-zope-schema))
7041 (home-page "https://zopeconfiguration.readthedocs.io")
7042 (synopsis "Zope Configuration Markup Language")
7043 (description "Zope.configuration implements ZCML, the Zope Configuration
7044Markup Language.")
7045 (license license:zpl2.1)))
7046
7047(define-public python-zope-configuration-bootstrap
7048 (python-zope-bootstrap-package python-zope-configuration))
7049
7050(define-public python-zope-copy
7051 (package
7052 (name "python-zope-copy")
7053 (version "6.0")
7054 (source
7055 (origin
7056 (method git-fetch)
7057 (uri (git-reference
7058 (url "https://github.com/zopefoundation/zope.copy")
7059 (commit version)))
7060 (file-name (git-file-name name version))
7061 (sha256
7062 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
7063 (build-system pyproject-build-system)
7064 (arguments
7065 (list
7066 #:phases
7067 #~(modify-phases %standard-phases
7068 (replace 'check
7069 (lambda* (#:key tests? #:allow-other-keys)
7070 (if tests?
7071 (invoke "zope-testrunner" "--test-path=src")
7072 (format #t "test suite not run~%")))))))
7073 (propagated-inputs (list python-zope-interface))
7074 (native-inputs
7075 (list python-zodbpickle
7076 python-zope-component-bootstrap
7077 python-zope-location-bootstrap
7078 python-zope-proxy
7079 python-zope-schema
7080 python-zope-testing
7081 python-zope-testrunner
7082 python-setuptools))
7083 (home-page "https://zopecopy.readthedocs.io")
7084 (synopsis "Pluggable object copying mechanism")
7085 (description
7086 "This package provides a pluggable mechanism for copying persistent objects.")
7087 (license license:zpl2.1)))
7088
7089(define-public python-zope-proxy
7090 (package
7091 (name "python-zope-proxy")
7092 (version "7.0")
7093 (source
7094 (origin
7095 (method git-fetch)
7096 (uri (git-reference
7097 (url "https://github.com/zopefoundation/zope.proxy")
7098 (commit version)))
7099 (file-name (git-file-name name version))
7100 (sha256
7101 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
7102 (build-system pyproject-build-system)
7103 (arguments
7104 (list
7105 #:phases
7106 #~(modify-phases %standard-phases
7107 (replace 'check
7108 (lambda* (#:key tests? #:allow-other-keys)
7109 (if tests?
7110 (invoke "zope-testrunner" "--test-path=src")
7111 (format #t "test suite not run~%")))))))
7112 (native-inputs
7113 (list python-zope-location-bootstrap
7114 python-zope-security-bootstrap
7115 python-zope-testrunner
7116 python-setuptools))
7117 (propagated-inputs (list python-zope-interface))
7118 (home-page "https://zopeproxy.readthedocs.io")
7119 (synopsis "Generic, transparent proxies")
7120 (description
7121 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
7122special objects which serve as mostly-transparent wrappers around another
7123object, intervening in the apparent behavior of the wrapped object only when
7124necessary to apply the policy (e.g., access checking, location brokering,
7125etc.) for which the proxy is responsible.")
7126 (license license:zpl2.1)))
7127
7128(define-public python-zope-proxy-bootstrap
7129 (python-zope-bootstrap-package python-zope-proxy))
7130
7131(define-public python-zope-hookable
7132 (package
7133 (name "python-zope-hookable")
7134 (version "7.0")
7135 (source
7136 (origin
7137 (method git-fetch)
7138 (uri (git-reference
7139 (url "https://github.com/zopefoundation/zope.hookable")
7140 (commit version)))
7141 (file-name (git-file-name name version))
7142 (sha256
7143 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
7144 (build-system pyproject-build-system)
7145 (arguments
7146 (list
7147 #:phases
7148 #~(modify-phases %standard-phases
7149 (replace 'check
7150 (lambda* (#:key tests? #:allow-other-keys)
7151 (if tests?
7152 (invoke "zope-testrunner" "--test-path=src")
7153 (format #t "test suite not run~%")))))))
7154 (native-inputs (list python-zope-testing python-zope-testrunner
7155 python-setuptools))
7156 (home-page "https://zopehookable.readthedocs.io")
7157 (synopsis "Zope hookable")
7158 (description
7159 "This package supports the efficient creation of hookable objects, which
7160are callable objects that are meant to be optionally replaced. The idea is
7161that you create a function that does some default thing and make i hookable.
7162Later, someone can modify what it does by calling its sethook method and
7163changing its implementation. All users of the function, including those that
7164imported it, will see the change.")
7165 (license license:zpl2.1)))
7166
7167(define-public python-zope-location
7168 (package
7169 (name "python-zope-location")
7170 (version "6.0")
7171 (source
7172 (origin
7173 (method git-fetch)
7174 (uri (git-reference
7175 (url "https://github.com/zopefoundation/zope.location")
7176 (commit version)))
7177 (file-name (git-file-name name version))
7178 (sha256
7179 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
7180 (build-system pyproject-build-system)
7181 (arguments
7182 (list
7183 #:phases
7184 #~(modify-phases %standard-phases
7185 (replace 'check
7186 (lambda* (#:key tests? #:allow-other-keys)
7187 (if tests?
7188 (invoke "zope-testrunner" "--test-path=src")
7189 (format #t "test suite not run~%")))))))
7190 (native-inputs (list python-zope-testrunner python-setuptools))
7191 (propagated-inputs (list python-zope-interface python-zope-proxy
7192 python-zope-schema))
7193 (home-page "https://zopelocation.readthedocs.io")
7194 (synopsis "Zope location library")
7195 (description
7196 "Zope.location implements the concept of \"locations\" in Zope3, which
7197are are special objects that have a structural location.")
7198 (license license:zpl2.1)))
7199
7200(define-public python-zope-location-bootstrap
7201 (python-zope-bootstrap-package python-zope-location))
7202
7203(define-public python-zope-security
7204 (package
7205 (name "python-zope-security")
7206 (version "7.3")
7207 (source
7208 (origin
7209 (method git-fetch)
7210 (uri (git-reference
7211 (url "https://github.com/zopefoundation/zope.security")
7212 (commit version)))
7213 (file-name (git-file-name name version))
7214 (sha256
7215 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
7216 (build-system pyproject-build-system)
7217 (arguments
7218 (list
7219 #:phases
7220 #~(modify-phases %standard-phases
7221 (replace 'check
7222 (lambda* (#:key tests? #:allow-other-keys)
7223 (if tests?
7224 (invoke "zope-testrunner" "--test-path=src")
7225 (format #t "test suite not run~%")))))))
7226 (propagated-inputs
7227 (list python-zope-component
7228 python-zope-i18nmessageid
7229 python-zope-interface
7230 python-zope-location
7231 python-zope-proxy
7232 python-zope-schema))
7233 (native-inputs
7234 (list python-btrees
7235 python-zope-component-bootstrap
7236 python-zope-configuration-bootstrap
7237 python-zope-location-bootstrap
7238 python-zope-testing
7239 python-zope-testrunner
7240 python-setuptools))
7241 (home-page "https://zopesecurity.readthedocs.io")
7242 (synopsis "Zope security framework")
7243 (description "Zope.security provides a generic mechanism to implement
7244security policies on Python objects.")
7245 (license license:zpl2.1)))
7246
7247(define-public python-zope-security-bootstrap
7248 (package
7249 (inherit (python-zope-bootstrap-package python-zope-security))
7250 (propagated-inputs
7251 (list python-zope-i18nmessageid
7252 python-zope-interface
7253 python-zope-proxy-bootstrap
7254 python-zope-schema))))
7255
7256(define-public python-zope-component
7257 (package
7258 (name "python-zope-component")
7259 (version "7.0")
7260 (source
7261 (origin
7262 (method git-fetch)
7263 (uri (git-reference
7264 (url "https://github.com/zopefoundation/zope.component")
7265 (commit version)))
7266 (file-name (git-file-name name version))
7267 (sha256
7268 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
7269 (build-system pyproject-build-system)
7270 (arguments
7271 (list
7272 #:phases
7273 #~(modify-phases %standard-phases
7274 (replace 'check
7275 (lambda* (#:key tests? #:allow-other-keys)
7276 (if tests?
7277 (invoke "zope-testrunner" "--test-path=src")
7278 (format #t "test suite not run~%")))))))
7279 (native-inputs
7280 (list python-persistent
7281 python-zope-configuration-bootstrap
7282 python-zope-i18nmessageid
7283 python-zope-location-bootstrap
7284 python-zope-proxy-bootstrap
7285 python-zope-security-bootstrap
7286 python-zope-testing
7287 python-zope-testrunner
7288 python-setuptools))
7289 (propagated-inputs
7290 (list python-zope-deferredimport python-zope-deprecation
7291 python-zope-event python-zope-hookable python-zope-interface))
7292 (home-page "https://zopecomponent.readthedocs.io")
7293 (synopsis "Zope Component Architecture")
7294 (description
7295 "Zope.component represents the core of the Zope Component Architecture.
7296Together with the zope.interface package, it provides facilities for defining,
7297registering and looking up components.")
7298 (license license:zpl2.1)))
7299
7300(define-public python-zope-component-bootstrap
7301 (python-zope-bootstrap-package python-zope-component))
7302
7303(define-public python-zope-deferredimport
7304 (package
7305 (name "python-zope-deferredimport")
7306 (version "6.0")
7307 (source
7308 (origin
7309 (method git-fetch)
7310 (uri (git-reference
7311 (url "https://github.com/zopefoundation/zope.deferredimport")
7312 (commit version)))
7313 (file-name (git-file-name name version))
7314 (sha256
7315 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
7316 (build-system pyproject-build-system)
7317 (arguments
7318 (list
7319 #:phases
7320 #~(modify-phases %standard-phases
7321 (replace 'check
7322 (lambda* (#:key tests? #:allow-other-keys)
7323 (if tests?
7324 (invoke "zope-testrunner" "--test-path=src")
7325 (format #t "test suite not run~%")))))))
7326 (propagated-inputs (list python-zope-proxy))
7327 (native-inputs (list python-zope-testrunner python-setuptools))
7328 (home-page "https://zopedeferredimport.readthedocs.io")
7329 (synopsis "Defer imports until used by code")
7330 (description
7331 "Often, especially for package modules, you want to import names for
7332convenience, but not actually perform the imports until necessary. The
7333@code{zope.deferredimport} package provided facilities for defining names in
7334modules that will be imported from somewhere else when used. You can also cause
7335deprecation warnings to be issued when a variable is used.")
7336 (license license:zpl2.1)))
7337
7338(define-public python-ndg-httpsclient
7339 (package
7340 (name "python-ndg-httpsclient")
7341 (version "0.5.1")
7342 (source
7343 (origin
7344 (method git-fetch)
7345 (uri (git-reference
7346 (url "https://github.com/cedadev/ndg_httpsclient/")
7347 (commit version)))
7348 (file-name (git-file-name name version))
7349 (sha256
7350 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
7351 (build-system pyproject-build-system)
7352 (arguments
7353 (list
7354 #:tests? #f)) ;Tests appear to require networking.
7355 (native-inputs (list python-setuptools))
7356 (propagated-inputs (list python-pyasn1 python-pyopenssl))
7357 (synopsis "HTTPS support for Python's httplib and urllib2")
7358 (description
7359 "This is a HTTPS client implementation for httplib and urllib2 based on
7360PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
7361the default provided with Python and, importantly, enables full verification
7362of the SSL peer.")
7363 (home-page "https://github.com/cedadev/ndg_httpsclient/")
7364 (license license:bsd-3)))
7365
7366(define-public python-netaddr
7367 (package
7368 (name "python-netaddr")
7369 (version "1.3.0")
7370 (source
7371 (origin
7372 (method url-fetch)
7373 (uri (pypi-uri "netaddr" version))
7374 (sha256
7375 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
7376 (build-system pyproject-build-system)
7377 (native-inputs (list python-poetry-core
7378 python-pytest
7379 python-setuptools
7380 python-wheel))
7381 (home-page "https://netaddr.readthedocs.io")
7382 (synopsis "Pythonic manipulation of network addresses")
7383 (description
7384 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
7385and MAC network addresses.")
7386 (license license:bsd-3)))
7387
7388(define-public python-nh3
7389 (package
7390 (name "python-nh3")
7391 (version "0.2.20")
7392 (source
7393 (origin
7394 (method url-fetch)
7395 (uri (pypi-uri "nh3" version))
7396 (sha256
7397 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
7398 (build-system pyproject-build-system)
7399 (arguments
7400 (list
7401 #:imported-modules `(,@%cargo-build-system-modules
7402 ,@%pyproject-build-system-modules)
7403 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
7404 (guix build pyproject-build-system)
7405 (guix build utils))
7406 #:phases
7407 #~(modify-phases %standard-phases
7408 (add-after 'unpack 'prepare-cargo-build-system
7409 (lambda args
7410 (for-each
7411 (lambda (phase)
7412 (format #t "Running cargo phase: ~a~%" phase)
7413 (apply (assoc-ref cargo:%standard-phases phase)
7414 #:cargo-target #$(cargo-triplet)
7415 args))
7416 '(unpack-rust-crates
7417 configure
7418 check-for-pregenerated-files
7419 patch-cargo-checksums)))))))
7420 (native-inputs
7421 (append
7422 (list maturin python-pytest rust `(,rust "cargo"))
7423 (or (and=> (%current-target-system)
7424 (compose list make-rust-sysroot))
7425 '())))
7426 (inputs (cargo-inputs 'python-nh3))
7427 (home-page "https://nh3.readthedocs.io")
7428 (synopsis "Python bindings to Ammonia HTML sanitization library")
7429 (description "This package provides Python bindings to Ammonia HTML
7430sanitizer Rust crate.")
7431 (license license:expat)))
7432
7433(define-public python-noiseprotocol
7434 (package
7435 (name "python-noiseprotocol")
7436 (version "0.3.1")
7437 (source
7438 (origin
7439 (method git-fetch)
7440 (uri (git-reference
7441 (url "https://github.com/plizonczyk/noiseprotocol")
7442 (commit (string-append "v" version))))
7443 (file-name (git-file-name name version))
7444 (sha256
7445 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
7446 (build-system pyproject-build-system)
7447 (propagated-inputs (list python-cryptography))
7448 (native-inputs (list python-setuptools python-pytest))
7449 (home-page "https://github.com/plizonczyk/noiseprotocol")
7450 (synopsis "Implementation of Noise Protocol Framework")
7451 (description
7452 "This package provides an implementation of Noise Protocol Framework.")
7453 (license license:expat)))
7454
7455(define-public python-webrtcvad-wheels
7456 (package
7457 (name "python-webrtcvad-wheels")
7458 (version "2.0.14")
7459 (source
7460 (origin
7461 (method git-fetch)
7462 (uri (git-reference
7463 (url "https://github.com/daanzu/py-webrtcvad-wheels")
7464 (commit (string-append "v" version))))
7465 (file-name (git-file-name name version))
7466 (sha256
7467 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
7468 (build-system pyproject-build-system)
7469 (native-inputs (list python-psutil python-pytest python-setuptools))
7470 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
7471 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
7472 (description
7473 "This package provides a Python interface to the Google
7474@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
7475 (license license:expat)))
7476
7477(define-public python-websocket-client
7478 (package
7479 (name "python-websocket-client")
7480 (version "1.8.0")
7481 (source
7482 (origin
7483 (method url-fetch)
7484 (uri (pypi-uri "websocket_client" version))
7485 (sha256
7486 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
7487 (build-system pyproject-build-system)
7488 (arguments
7489 (list
7490 #:test-flags
7491 ;; This test requires networking.
7492 '(list "-k" "not testConnect")))
7493 (native-inputs
7494 (list python-pysocks
7495 python-pytest
7496 python-setuptools
7497 python-websockets
7498 python-wheel))
7499 (home-page "https://github.com/websocket-client/websocket-client")
7500 (synopsis "WebSocket client for Python")
7501 (description "The Websocket-client module provides the low level APIs for
7502WebSocket usage in Python programs.")
7503 (license license:lgpl2.1+)))
7504
7505(define-public python-websocket-client-0.59
7506 (package
7507 (inherit python-websocket-client)
7508 (version "0.59.0")
7509 (source
7510 (origin
7511 (method url-fetch)
7512 (uri (pypi-uri "websocket-client" version))
7513 (sha256
7514 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
7515 (native-inputs
7516 (modify-inputs native-inputs
7517 (append python-six)))))
7518
7519(define-public python-purl
7520 (package
7521 (name "python-purl")
7522 (version "1.6")
7523 (source
7524 (origin
7525 (method git-fetch)
7526 (uri (git-reference
7527 (url "https://github.com/codeinthehole/purl")
7528 (commit version)))
7529 (file-name (git-file-name name version))
7530 (sha256
7531 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
7532 (build-system pyproject-build-system)
7533 (arguments
7534 (list
7535 #:test-flags #~(list "--pyargs" "./tests")))
7536 (native-inputs (list python-pytest python-setuptools))
7537 (propagated-inputs (list python-six))
7538 (home-page "https://github.com/codeinthehole/purl")
7539 (synopsis "Python package for URL manipulation")
7540 (description "Purl is a Python package for handling URLs.")
7541 (license license:expat)))
7542
7543(define-public python-apiron
7544 (package
7545 (name "python-apiron")
7546 (version "5.1.0")
7547 (source
7548 (origin
7549 (method url-fetch)
7550 (uri (pypi-uri "apiron" version))
7551 (sha256
7552 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
7553 (build-system pyproject-build-system)
7554 (arguments
7555 (list #:test-flags '(list "-k" "not test_call")))
7556 (propagated-inputs
7557 (list python-requests))
7558 (native-inputs
7559 (list python-pytest
7560 python-setuptools
7561 python-wheel))
7562 (home-page "https://github.com/ithaka/apiron")
7563 (synopsis "Python wrapper for interacting with RESTful APIs")
7564 (description
7565 "@code{apiron} provides a declarative, structured configuration of
7566services and endpoints with a unified interface for interacting with RESTful
7567APIs.")
7568 (license license:expat)))
7569
7570(define-public python-beren
7571 (package
7572 (name "python-beren")
7573 (version "0.7.0")
7574 (source
7575 (origin
7576 (method git-fetch)
7577 (uri (git-reference
7578 (url "https://github.com/teffalump/beren")
7579 (commit (string-append "v" version))))
7580 (file-name (git-file-name name version))
7581 (sha256
7582 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
7583 (build-system pyproject-build-system)
7584 (arguments
7585 ;; The test tries to open a connection to a remote server.
7586 `(#:tests? #f))
7587 (native-inputs (list python-setuptools))
7588 (propagated-inputs (list python-apiron))
7589 (home-page "https://github.com/teffalump/beren")
7590 (synopsis "REST client for Orthanc DICOM servers")
7591 (description
7592 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
7593 (license license:gpl3+)))
7594
7595(define-public python-requests
7596 (package
7597 (name "python-requests")
7598 (version "2.34.2")
7599 (source (origin
7600 (method url-fetch)
7601 (uri (pypi-uri "requests" version))
7602 (sha256
7603 (base32
7604 "1vdrc3lq9x848760n7mdhn8whsfslk30pmnnk0v4caafmr69527j"))))
7605 (build-system pyproject-build-system)
7606 (arguments
7607 (list #:test-flags
7608 ;; These require internet access
7609 '(list "--ignore=tests/test_requests.py"
7610 "-k" (string-append "not test_use_proxy_from_environment"
7611 " and not requests.sessions.Session"
7612 " and not requests.models.PreparedRequest"
7613 " and not requests.api.request")
7614 "tests/")))
7615 (propagated-inputs
7616 (list python-certifi
7617 python-charset-normalizer
7618 python-idna
7619 python-urllib3))
7620 (native-inputs
7621 (list python-pytest
7622 python-pytest-mock
7623 python-setuptools))
7624 (home-page "https://requests.readthedocs.io/")
7625 (synopsis "Python HTTP library")
7626 (description
7627 "Requests is a Python HTTP client library. It aims to be easier to use
7628than Python’s urllib2 library.")
7629 (license license:asl2.0)))
7630
7631(define-public python-requests-kerberos
7632 (package
7633 (name "python-requests-kerberos")
7634 (version "0.14.0")
7635 ;; No tests in the PyPI tarball.
7636 (source
7637 (origin
7638 (method git-fetch)
7639 (uri (git-reference
7640 (url "https://github.com/requests/requests-kerberos")
7641 (commit (string-append "v" version))))
7642 (file-name (git-file-name name version))
7643 (sha256
7644 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
7645 (build-system pyproject-build-system)
7646 (propagated-inputs (list python-cryptography
7647 python-pyspnego
7648 python-requests))
7649 (native-inputs (list python-pytest python-pytest-mock python-setuptools
7650 python-wheel))
7651 (home-page "https://github.com/requests/requests-kerberos")
7652 (synopsis "Kerberos authentication handler for python-requests")
7653 (description "This package provides a Kerberos authentication handler for
7654python-requests.")
7655 (license license:isc)))
7656
7657(define-public python-requests-unixsocket2
7658 (package
7659 (name "python-requests-unixsocket2")
7660 (version "1.0.1")
7661 (source
7662 (origin
7663 (method git-fetch)
7664 (uri (git-reference
7665 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
7666 (commit (string-append "v" version))))
7667 (sha256
7668 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
7669 (build-system pyproject-build-system)
7670 (native-inputs
7671 (list nss-certs-for-test
7672 python-hatchling
7673 python-pytest
7674 python-waitress))
7675 (propagated-inputs
7676 (list python-requests
7677 python-urllib3))
7678 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
7679 (synopsis "Talk HTTP via a UNIX domain socket")
7680 (description
7681 "This Python package lets you use the @code{requests} library to talk
7682HTTP via a UNIX domain socket.")
7683 (license license:asl2.0)))
7684
7685(define-public python-requests-ntlm
7686 (package
7687 (name "python-requests-ntlm")
7688 (version "1.3.0")
7689 (source
7690 (origin
7691 (method git-fetch)
7692 (uri (git-reference
7693 (url "https://github.com/requests/requests-ntlm")
7694 (commit (string-append "v" version))))
7695 (file-name (git-file-name name version))
7696 (sha256
7697 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
7698 (build-system pyproject-build-system)
7699 (arguments
7700 (list
7701 #:test-flags
7702 ;; XXX: Connection refused.
7703 #~(list "-k" (string-join
7704 (list "not test_ntlm_http_with_cbt"
7705 "test_ntlm_http_without_cbt"
7706 "test_ntlm_https_with_cbt"
7707 "test_ntlm_https_without_cbt")
7708 " and not "))
7709 #:phases
7710 #~(modify-phases %standard-phases
7711 (add-before 'check 'spawn-test-server
7712 (lambda _
7713 ;; Taken from .github/workflows/ci.yml.
7714 (spawn "python"
7715 (list "python" "-m" "tests.test_server")))))))
7716 (propagated-inputs
7717 (list python-cryptography python-pyspnego python-requests))
7718 (native-inputs (list python-flask python-pytest python-setuptools))
7719 (home-page "https://github.com/requests/requests-ntlm")
7720 (synopsis "NTLM authentication support for Requests")
7721 (description
7722 "This package allows for HTTP NTLM authentication using the requests
7723library.")
7724 (license license:isc)))
7725
7726(define-public python-requests-mock
7727 (package
7728 (name "python-requests-mock")
7729 (version "1.12.1")
7730 (source
7731 (origin
7732 (method url-fetch)
7733 (uri (pypi-uri "requests-mock" version))
7734 (sha256
7735 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
7736 (build-system pyproject-build-system)
7737 (native-inputs
7738 (list python-purl
7739 python-pytest
7740 python-requests-futures
7741 python-setuptools
7742 python-setuptools-scm
7743 python-testtools))
7744 (propagated-inputs
7745 (list python-requests))
7746 (home-page "https://requests-mock.readthedocs.org/")
7747 (synopsis "Mock out responses from the requests package")
7748 (description
7749 "This module provides a building block to stub out the HTTP requests
7750portions of your testing code.")
7751 (license license:asl2.0)))
7752
7753(define-public python-requests-toolbelt
7754 (package
7755 (name "python-requests-toolbelt")
7756 (version "1.0.0")
7757 (source
7758 (origin
7759 (method url-fetch)
7760 (uri (pypi-uri "requests-toolbelt" version))
7761 (sha256
7762 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
7763 (build-system pyproject-build-system)
7764 (arguments
7765 (list
7766 #:test-flags
7767 ;; Requiring networking or fail due not valid certs: AttributeError:
7768 ;; 'MockHTTPResponse' object has no attribute 'close'
7769 #~(list "-k" (string-append "not test_dump_all"
7770 " and not test_dump_response"
7771 " and not test_prepared_request_override_base"
7772 " and not test_prepared_request_with_base"
7773 " and not test_request_override_base"
7774 " and not test_request_with_base"))))
7775 (native-inputs
7776 (list python-betamax
7777 python-mock
7778 python-pyopenssl
7779 python-pytest
7780 python-setuptools
7781 python-trustme
7782 python-wheel))
7783 (propagated-inputs
7784 (list python-requests))
7785 (synopsis "Extensions to python-requests")
7786 (description "This is a toolbelt of useful classes and functions to be used
7787with python-requests.")
7788 (home-page "https://github.com/requests/toolbelt/")
7789 (license license:asl2.0)))
7790
7791(define-public python-requests-ftp
7792 (package
7793 (name "python-requests-ftp")
7794 (version "0.3.1")
7795 (source
7796 (origin
7797 (method git-fetch)
7798 (uri (git-reference
7799 (url "https://github.com/Lukasa/requests-ftp")
7800 (commit (string-append "v" version))))
7801 (file-name (git-file-name name version))
7802 (sha256
7803 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
7804 (build-system pyproject-build-system)
7805 (arguments
7806 ;; XXX: No connection adapters found.
7807 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
7808 (native-inputs
7809 (list python-pyftpdlib python-pytest python-setuptools python-six))
7810 (propagated-inputs (list python-requests))
7811 (home-page "https://github.com/Lukasa/requests-ftp")
7812 (synopsis "FTP Transport Adapter for Requests")
7813 (description "Requests-FTP is an implementation of a simple FTP transport
7814adapter for use with the Requests library.")
7815 (license license:asl2.0)))
7816
7817(define-public python-aioftp
7818 (package
7819 (name "python-aioftp")
7820 (version "0.27.2")
7821 (source
7822 (origin
7823 (method git-fetch)
7824 (uri (git-reference
7825 (url "https://github.com/aio-libs/aioftp")
7826 (commit version)))
7827 (file-name (git-file-name name version))
7828 (sha256
7829 (base32 "1lshyac5zk1w4x7ygkim3726f8gbkvpvlyiqkn9cs6qjxhxn5bxc"))))
7830 (build-system pyproject-build-system)
7831 (arguments
7832 (list
7833 #:phases
7834 #~(modify-phases %standard-phases
7835 (add-after 'unpack 'use-default-asyncio
7836 ;; async_timeout is deprecated, upstream recommends to use
7837 ;; asyncio, available since Python 3.11.
7838 (lambda _
7839 (substitute* "tests/conftest.py"
7840 (("async_timeout") "asyncio")))))))
7841 (native-inputs
7842 (list python-pytest
7843 python-pytest-mock
7844 python-pytest-asyncio
7845 python-setuptools
7846 python-siosocks
7847 python-trustme))
7848 (home-page "https://aioftp.readthedocs.io/")
7849 (synopsis "FTP client/server for asyncio in Python")
7850 (description
7851 "FTP client and server for asyncio (Python 3) Library implementing FTP
7852protocol, both client and server for Python asyncio module.
7853
7854 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
7855 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
7856 REST, LIST (as fallback).
7857
7858 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
7859 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
7860 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
7861 (license license:asl2.0)))
7862
7863(define-public python-mohawk
7864 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
7865 (revision "0"))
7866 (package
7867 (name "python-mohawk")
7868 (version (git-version "1.1.0" revision commit))
7869 (source
7870 (origin
7871 (method git-fetch)
7872 (uri (git-reference
7873 (url "https://github.com/kumar303/mohawk")
7874 (commit commit)))
7875 (file-name (git-file-name name version))
7876 (sha256
7877 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
7878 (patches
7879 (search-patches "python-mohawk-pytest.patch"))))
7880 (build-system pyproject-build-system)
7881 (arguments
7882 (list #:test-flags #~(list "mohawk/tests.py")))
7883 (native-inputs (list python-pytest python-setuptools))
7884 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
7885 ;python-six is removed?
7886 (home-page "https://github.com/kumar303/mohawk")
7887 (synopsis "Library for Hawk HTTP authorization")
7888 (description
7889 "Mohawk is an alternate Python implementation of the Hawk HTTP
7890authorization scheme.")
7891 (license license:bsd-3))))
7892
7893(define-public python-msal
7894 (package
7895 (name "python-msal")
7896 (version "1.34.0")
7897 (home-page
7898 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
7899 (source
7900 (origin
7901 (method git-fetch)
7902 (uri (git-reference
7903 (url home-page)
7904 (commit version)))
7905 (file-name (git-file-name name version))
7906 (sha256
7907 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
7908 (patches (search-patches "python-msal-requests.patch"))))
7909 (build-system pyproject-build-system)
7910 (arguments
7911 (list
7912 #:test-flags
7913 #~(list
7914 "--ignore=tests/test_benchmark.py"
7915 ;; XXX: Ignoring cryptography version scheme tests.
7916 "-k"
7917 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
7918 ;; XXX: These tests try to access the network.
7919 "--ignore=tests/test_application.py"
7920 "--ignore=tests/test_ccs.py"
7921 ;; XXX: These tests assume they are run on Windows.
7922 "--ignore=tests/test_mi.py")
7923 #:phases
7924 #~(modify-phases %standard-phases
7925 (add-after 'unpack 'set-cryptography-version
7926 (lambda _
7927 (substitute* "tests/test_cryptography.py"
7928 (("^latest_cryptography_version = @version@")
7929 (format #f "latest_cryptography_version = ~s"
7930 #$(package-version
7931 (this-package-input "python-cryptography")))))))
7932 (add-before 'check 'configure-tests
7933 (lambda* (#:key tests? #:allow-other-keys)
7934 (when tests?
7935 (setenv "TRAVIS_TAG" "1")))))))
7936 (native-inputs
7937 (list nss-certs-for-test python-mock python-pytest python-setuptools))
7938 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
7939 (synopsis "Microsoft Authentication Library (MSAL) for Python")
7940 (description
7941 "The Microsoft Authentication Library for Python enables applications to
7942integrate with the Microsoft identity platform. It allows you to sign in
7943users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
7944Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
7945Microsoft Graph or your own APIs registered with the Microsoft identity
7946platform. It is built using industry standard OAuth2 and OpenID Connect
7947protocols.")
7948 (license license:expat)))
7949
7950(define-public oauth2ms
7951 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
7952 (revision "0"))
7953 (package
7954 (name "oauth2ms")
7955 (version (git-version "0.0.0" revision commit))
7956 (source (origin
7957 (method git-fetch)
7958 (uri (git-reference
7959 (url "https://github.com/harishkrupo/oauth2ms")
7960 (commit commit)))
7961 (file-name (git-file-name name version))
7962 (sha256
7963 (base32
7964 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
7965 (build-system copy-build-system)
7966 (arguments
7967 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
7968 ("." #$(string-append "share/doc/" name "-"
7969 version "/")
7970 #:include-regexp ("\\.org$")))
7971 #:phases #~(modify-phases %standard-phases
7972 (add-after 'install 'wrap-pythonpath
7973 (lambda* (#:key inputs outputs #:allow-other-keys)
7974 (let ((path (getenv "GUIX_PYTHONPATH")))
7975 (wrap-program (string-append #$output
7976 "/bin/oauth2ms")
7977 `("GUIX_PYTHONPATH" ":" prefix
7978 (,path)))))))))
7979 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
7980 (home-page "https://github.com/harishkrupo/oauth2ms")
7981 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
7982 (description
7983 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
7984endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
7985used as authentication in IMAP mail servers.")
7986 (license license:asl2.0))))
7987
7988(define-public python-oauthlib
7989 (package
7990 (name "python-oauthlib")
7991 (version "3.3.1")
7992 (source
7993 (origin
7994 (method git-fetch)
7995 (uri (git-reference
7996 (url "https://github.com/oauthlib/oauthlib")
7997 (commit (string-append "v" version))))
7998 (file-name (git-file-name name version))
7999 (sha256
8000 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
8001 (build-system pyproject-build-system)
8002 (native-inputs (list python-pytest python-mock python-setuptools))
8003 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
8004 (home-page "https://github.com/oauthlib/oauthlib")
8005 (synopsis "OAuth implementation for Python")
8006 (description
8007 "Oauthlib is a generic, spec-compliant, thorough implementation of the
8008OAuth request-signing logic.")
8009 (license license:bsd-3)))
8010
8011(define-public python-urllib3
8012 (package
8013 (name "python-urllib3")
8014 (version "2.7.0")
8015 (source
8016 (origin
8017 (method url-fetch)
8018 (uri (pypi-uri "urllib3" version))
8019 (sha256
8020 (base32
8021 "0k2za0kdl4y8mdhay0wbnf6522n4ybr61gk7gik19srwnv1hw7i3"))))
8022 (build-system pyproject-build-system)
8023 (arguments `(#:tests? #f))
8024 (native-inputs
8025 (list python-hatch-vcs
8026 python-hatchling
8027 python-setuptools-scm))
8028 (propagated-inputs
8029 (append
8030 ;; These 5 inputs are used to build urrlib3[secure]
8031 (list python-certifi
8032 python-idna
8033 python-pysocks)
8034 (if (member (%current-system)
8035 (package-transitive-supported-systems python-cryptography))
8036 (list python-cryptography)
8037 '())
8038 (if (member (%current-system)
8039 (package-transitive-supported-systems python-pyopenssl))
8040 (list python-pyopenssl)
8041 '())))
8042 (home-page "https://urllib3.readthedocs.io/")
8043 (synopsis "HTTP library with thread-safe connection pooling")
8044 (description
8045 "Urllib3 supports features left out of urllib and urllib2 libraries. It
8046can reuse the same socket connection for multiple requests, it can POST files,
8047supports url redirection and retries, and also gzip and deflate decoding.")
8048 (license license:expat)))
8049
8050(define-public python-urllib3-1.26
8051 (package
8052 (inherit python-urllib3)
8053 (version "1.26.17")
8054 (source
8055 (origin
8056 (method url-fetch)
8057 (uri (pypi-uri "urllib3" version))
8058 (sha256
8059 (base32
8060 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
8061 (native-inputs
8062 (list python-setuptools
8063 python-wheel))))
8064
8065(define-public python-awscrt
8066 (package
8067 (name "python-awscrt")
8068 (version "0.36.0")
8069 (source
8070 (origin
8071 (method url-fetch)
8072 (uri (pypi-uri "awscrt" version))
8073 (sha256
8074 (base32 "0jh6niq9kgv0canm11ad8zibywwirdfxg4bqyd8jhaiv3x39h8dd"))))
8075 (build-system pyproject-build-system)
8076 (arguments
8077 (list
8078 #:test-backend #~'unittest
8079 #:test-flags #~(list "discover" "--verbose")
8080 #:phases
8081 #~(modify-phases %standard-phases
8082 (add-after 'unpack 'disable-broken-tests
8083 (lambda _
8084 ;; Disable broken tests. These tests fail because they depend on
8085 ;; specific DNS configuration and/or AWS credentials, which isn't
8086 ;; available in this context.
8087 (substitute* "test/test_auth.py"
8088 (("def test_default_provider")
8089 "def _test_default_provider"))
8090 (substitute* "test/test_aiohttp_client.py"
8091 (("def test_h2_remote_end_stream_ordering")
8092 "def _test_h2_remote_end_stream_ordering")
8093 (("def test_cross_thread_http2_client")
8094 "def _test_cross_thread_http2_client")
8095 (("def test_h2_client")
8096 "def _test_h2_client")
8097 (("def test_h2_manual_write_exception")
8098 "def _test_h2_manual_write_exception"))
8099 (substitute* "test/test_http_client.py"
8100 (("def test_h2_client")
8101 "def _test_h2_client")
8102 (("def test_h2_remote_end_stream_ordering")
8103 "def _test_h2_remote_end_stream_ordering")
8104 (("def test_h2_manual_write_exception")
8105 "def _test_h2_manual_write_exception"))
8106 (substitute* "test/test_s3.py"
8107 (("def test_sanity")
8108 "def _test_sanity")
8109 (("def test_sanity_secure")
8110 "def _test_sanity_secure")
8111 (("def test_wait_shutdown")
8112 "def _test_wait_shutdown"))
8113 (substitute* "test/test_io.py"
8114 ;; This test seems specifically broken. It waits for a shutdown event
8115 ;; from a group of singletons that will never occur because several of
8116 ;; the singleton references are held beyond the lifetime of this test.
8117 (("def test_shutdown_complete_singleton")
8118 "def _test_shutdown_complete_singleton"))))
8119 (add-after 'unpack 'override-cert-bundle-location
8120 (lambda* (#:key inputs #:allow-other-keys)
8121 (let ((bundle (search-input-file inputs
8122 "/etc/ssl/certs/ca-certificates.crt")))
8123 (setenv "SSL_CERT_FILE" bundle)
8124 (substitute* "awscrt/io.py"
8125 (("( +)opt = TlsContextOptions\\(\\)" m indent)
8126 (string-append m "\n"
8127 indent "import os\n"
8128 indent "\
8129opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n"))
8130 (("^( +)self\\.no_certificate_revocation = False" all indent)
8131 (string-append all "\n"
8132 indent "import os as _os\n"
8133 indent "_ca_file = _os.environ.get('SSL_CERT_FILE')\n"
8134 indent "if _ca_file:\n"
8135 indent " self.override_default_trust_store(_read_binary_file(_ca_file))\n")))
8136 (substitute* "test/appexit_http.py"
8137 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
8138 (string-append m indent
8139 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
8140 bundle "')\n")))
8141 (substitute* "test/test_io.py"
8142 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
8143 (string-append m indent
8144 "opt.override_default_trust_store_from_path(None, '"
8145 bundle "')\n"))))))
8146 (add-after 'unpack 'use-system-libraries
8147 (lambda _
8148 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
8149 (inputs (list openssl))
8150 (native-inputs (list cmake-minimal
8151 nss-certs-for-test
8152 python-boto3
8153 python-setuptools
8154 python-websockets
8155 python-h2))
8156 (home-page "https://github.com/awslabs/aws-crt-python")
8157 (synopsis "Common runtime for AWS Python projects")
8158 (description
8159 "This package provides a common runtime for AWS Python projects.")
8160 (license license:asl2.0)))
8161
8162(define-public awscli
8163 (package
8164 ;; Note: updating awscli typically requires updating botocore as well.
8165 (name "awscli")
8166 (version "1.43.11")
8167 (source
8168 (origin
8169 (method git-fetch)
8170 (uri (git-reference
8171 (url "https://github.com/aws/aws-cli")
8172 (commit version)))
8173 (file-name (git-file-name name version))
8174 (sha256
8175 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
8176 (build-system pyproject-build-system)
8177 (arguments
8178 (list
8179 ;; tests: 2715 passed, 32 warnings
8180 #:test-flags
8181 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8182 ;; Complete test suite is huge and compute hungry, run just unit
8183 ;; tests.
8184 "--ignore=tests/dependencies"
8185 "--ignore=tests/functional"
8186 "--ignore=tests/integration"
8187 ;; TypeError: 'Mock' object is not subscriptable.
8188 "-k" "not test_no_groff_or_mandoc_exists")
8189 #:phases
8190 #~(modify-phases %standard-phases
8191 (add-after 'unpack 'fix-reference-to-groff
8192 (lambda _
8193 ;; XXX: Consider to use wrap-program instead, it tries to parse
8194 ;; the PATH.
8195 (substitute* "awscli/help.py"
8196 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
8197 (("raise ExecutableNotFoundError\\('groff'\\)") "")
8198 (("cmdline = \\['groff'")
8199 (format #f "cmdline = ['~a/bin/groff'"
8200 #$(this-package-input "groff-minimal"))))))
8201 (add-before 'check 'set-environment
8202 (lambda _
8203 ;; PermissionError: [Errno 13] Permission denied:
8204 ;; '/homeless-shelter'
8205 (setenv "HOME" "/tmp"))))))
8206 (native-inputs
8207 (list python-pytest
8208 python-pytest-xdist
8209 python-setuptools
8210 python-wheel))
8211 (inputs
8212 (list groff-minimal
8213 python-botocore
8214 python-colorama
8215 python-docutils-0.19
8216 python-pyyaml
8217 python-rsa-for-awscli-1
8218 python-s3transfer))
8219 (home-page "https://aws.amazon.com/cli/")
8220 (synopsis "Command line client for AWS")
8221 (description
8222 "AWS CLI provides a unified command line interface to the Amazon Web
8223Services (AWS) API.")
8224 (license license:asl2.0)))
8225
8226(define-public awscli-2
8227 (package
8228 (inherit awscli)
8229 ;; Note: updating awscli-2 typically requires updating python-awscrt.
8230 (name "awscli")
8231 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
8232 ;; any fresh one compatible with current state of dependencies in Guix.
8233 (version "2.36.20")
8234 (source
8235 (origin
8236 (method git-fetch)
8237 (uri (git-reference
8238 (url "https://github.com/aws/aws-cli")
8239 (commit version)))
8240 (file-name (git-file-name name version))
8241 (sha256
8242 (base32
8243 "1hv2zs5pm86b5bd66j2kfb9r8gz13cqnf8x5hmfv0ddszf9vnfgp"))))
8244 (build-system pyproject-build-system)
8245 (arguments
8246 (list
8247 ;; When updating and checking locally be very patient as build phase may
8248 ;; hang for 6-8 minutes but eventually passes through.
8249 ;;
8250 ;; tests: 4189 passed, 1 skipped, 2 warnings
8251 #:test-flags
8252 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8253 ;; Full test suite contains more than 70k tests; ignore network
8254 ;; dependent, slow and compute intense tests, keep just unit
8255 ;; tests.
8256 "--ignore=tests/backends"
8257 "--ignore=tests/dependencies"
8258 "--ignore=tests/functional"
8259 "--ignore=tests/integration"
8260 "--ignore=tests/unit/botocore"
8261 ;; Flaky, something to do with PATH disappearing from os.environ?
8262 ;; Passes when run on its own, so maybe something else is
8263 ;; modifying this during the test run.
8264 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
8265 ;; TypeError: 'Mock' object is not subscriptable
8266 "-k" "not test_no_groff_or_mandoc_exists")
8267 #:phases
8268 #~(modify-phases %standard-phases
8269 (add-after 'unpack 'ignore-deprecations
8270 (lambda _
8271 (substitute* "pyproject.toml"
8272 (("\"error::") "\"ignore::"))))
8273 (add-after 'unpack 'fix-reference-to-groff
8274 (lambda* (#:key inputs #:allow-other-keys)
8275 (substitute* "awscli/help.py"
8276 (("if self._exists_on_path\\('groff'\\):") "if True:")
8277 (("cmdline = \\['groff'")
8278 (string-append "cmdline = ['"
8279 (search-input-file inputs "bin/groff")
8280 "'")))))
8281 (add-before 'check 'pre-check
8282 (lambda _ (setenv "HOME" "/tmp"))))))
8283 (inputs
8284 (list groff
8285 ;; less
8286 nss-certs-for-test
8287 python-awscrt
8288 python-colorama
8289 python-dateutil
8290 python-distro
8291 python-docutils
8292 python-jmespath
8293 python-prompt-toolkit
8294 python-ruamel.yaml
8295 python-ruamel.yaml.clib
8296 python-urllib3
8297 python-wcwidth))
8298 (native-inputs
8299 (list python-flit-core
8300 python-pytest
8301 python-pytest-xdist))))
8302
8303(define-public python-wsgiproxy2
8304 (package
8305 (name "python-wsgiproxy2")
8306 (version "0.5.1")
8307 (source
8308 (origin
8309 (method git-fetch)
8310 (uri (git-reference
8311 (url "https://github.com/gawel/WSGIProxy2/")
8312 (commit version)))
8313 (file-name (git-file-name name version))
8314 (sha256
8315 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
8316 (build-system pyproject-build-system)
8317 (arguments (list #:test-backend #~'unittest))
8318 (native-inputs (list python-webtest python-setuptools))
8319 (propagated-inputs (list python-requests python-six python-urllib3
8320 python-webob))
8321 (home-page "https://github.com/gawel/WSGIProxy2/")
8322 (synopsis "WSGI Proxy with various http client backends")
8323 (description
8324 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
8325function calls into HTTP requests. It also includes code to sign requests and
8326pass private data, and to spawn subprocesses to handle requests.")
8327 (license license:expat)))
8328
8329(define-public python-pastedeploy
8330 (package
8331 (name "python-pastedeploy")
8332 (version "3.1.0")
8333 (source
8334 (origin
8335 (method url-fetch)
8336 (uri (pypi-uri "PasteDeploy" version))
8337 (sha256
8338 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
8339 (build-system pyproject-build-system)
8340 (native-inputs (list python-pytest python-setuptools))
8341 (home-page "https://pylonsproject.org/")
8342 (synopsis "Load, configure, and compose WSGI applications and servers")
8343 (description
8344 "This tool provides code to load WSGI applications and servers from URIs;
8345these URIs can refer to Python Eggs for INI-style configuration files. Paste
8346Script provides commands to serve applications based on this configuration
8347file.")
8348 (license license:expat)))
8349
8350(define-public python-webtest
8351 (package
8352 (name "python-webtest")
8353 (version "3.0.6")
8354 (source
8355 (origin
8356 (method url-fetch)
8357 (uri (pypi-uri "webtest" version))
8358 (sha256
8359 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
8360 (build-system pyproject-build-system)
8361 (arguments
8362 ;; Tests require python-pyquery, which creates a circular dependency.
8363 `(#:tests? #f))
8364 (native-inputs
8365 (list python-setuptools))
8366 (propagated-inputs
8367 (list python-beautifulsoup4
8368 python-waitress
8369 python-webob))
8370 (home-page "https://docs.pylonsproject.org/projects/webtest/")
8371 (synopsis "Helper to test WSGI applications")
8372 (description
8373 "Webtest allows you to test your Python web applications without
8374starting an HTTP server. It supports anything that supports the minimum of
8375WSGI.")
8376 (license license:expat)))
8377
8378(define-public python-flask
8379 (package
8380 (name "python-flask")
8381 (version "3.1.3")
8382 (source
8383 (origin
8384 (method git-fetch)
8385 (uri (git-reference
8386 (url "https://github.com/pallets/flask")
8387 (commit version)))
8388 (file-name (git-file-name name version))
8389 (sha256
8390 (base32 "006s5rm4syg48ymmwlnrkx8f8j758waksvhdsfiqx51zv52c0p8l"))))
8391 (build-system pyproject-build-system)
8392 (arguments
8393 (list
8394 #:test-flags
8395 ;; assert 404 == 400
8396 ;; This test is removed on master branch.
8397 #~(list (string-append "--deselect=tests/test_reqctx.py"
8398 "::test_bad_environ_raises_bad_request"))))
8399 (native-inputs
8400 (list python-flit-core
8401 python-pytest))
8402 (propagated-inputs
8403 (list python-blinker
8404 python-click
8405 python-itsdangerous
8406 python-jinja2
8407 python-markupsafe
8408 python-werkzeug
8409 ;; [optional]
8410 python-asgiref
8411 python-dotenv))
8412 (home-page "https://palletsprojects.com/p/flask/")
8413 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
8414 (description "Flask is a micro web framework based on the Werkzeug toolkit
8415and Jinja2 template engine. It is called a micro framework because it does not
8416presume or force a developer to use a particular tool or library.")
8417 (license license:bsd-3)))
8418
8419(define-public python-flask-compress
8420 (package
8421 (name "python-flask-compress")
8422 (version "1.24")
8423 (source
8424 (origin
8425 (method git-fetch)
8426 (uri (git-reference
8427 (url "https://github.com/colour-science/flask-compress")
8428 (commit (string-append "v" version))))
8429 (file-name (git-file-name name version))
8430 (sha256
8431 (base32 "0mid5c34r75vax1r7l2l5sjjhs6bl8rbsdmhc7kz39snq6xw3cr5"))))
8432 (build-system pyproject-build-system)
8433 (native-inputs
8434 (list python-flask-caching
8435 python-pytest
8436 python-setuptools
8437 python-setuptools-scm))
8438 (propagated-inputs
8439 (list python-backports-zstd
8440 python-brotli
8441 python-flask))
8442 (home-page "https://github.com/colour-science/flask-compress")
8443 (synopsis "Compress responses in a Flask app")
8444 (description
8445 "This package lets you compress Flask application responses and static
8446files with gzip, deflate or brotli. Flask-Compress both adds the various
8447headers required for a compressed response and compresses the response data.")
8448 (license license:expat)))
8449
8450(define-public python-flask-seasurf
8451 (package
8452 (name "python-flask-seasurf")
8453 (version "2.0.0")
8454 (source (origin
8455 (method url-fetch)
8456 (uri (pypi-uri "Flask-SeaSurf" version))
8457 (sha256
8458 (base32
8459 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
8460 (build-system pyproject-build-system)
8461 (arguments
8462 (list #:tests? #false)) ;there are none
8463 (propagated-inputs (list python-flask))
8464 (native-inputs (list python-setuptools python-wheel))
8465 (home-page "https://github.com/maxcountryman/flask-seasurf/")
8466 (synopsis "CSRF extension for Flask")
8467 (description "SeaSurf is a Flask extension for preventing cross-site
8468request forgery (CSRF). CSRF attacks are problematic because the mechanism
8469they use is relatively easy to exploit. This extension attempts to aid you in
8470securing your application from such attacks. This extension is based on the
8471Django middleware.")
8472 (license license:bsd-3)))
8473
8474(define-public python-flask-wtf
8475 (package
8476 (name "python-flask-wtf")
8477 (version "1.2.2")
8478 (source
8479 (origin
8480 (method url-fetch)
8481 (uri (pypi-uri "Flask-WTF" version))
8482 (sha256
8483 (base32
8484 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
8485 (build-system pyproject-build-system)
8486 (propagated-inputs
8487 (list python-flask python-flask python-itsdangerous python-wtforms))
8488 (native-inputs
8489 (list python-hatchling python-pytest))
8490 (home-page "https://github.com/lepture/flask-wtf")
8491 (synopsis "Simple integration of Flask and WTForms")
8492 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
8493upload, and reCAPTCHA.")
8494 (license license:bsd-3)))
8495
8496(define-public python-flask-multistatic
8497 (package
8498 (name "python-flask-multistatic")
8499 (version "1.0")
8500 (source
8501 (origin
8502 (method url-fetch)
8503 (uri (pypi-uri "flask-multistatic" version))
8504 (sha256
8505 (base32
8506 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
8507 (build-system pyproject-build-system)
8508 (arguments (list #:tests? #f)) ; No tests upstream.
8509 (native-inputs (list python-setuptools))
8510 (propagated-inputs (list python-flask))
8511 (home-page "https://pagure.io/flask-multistatic")
8512 (synopsis "Flask plugin to allow overriding static files")
8513 (description "@code{flask-multistatic} is a flask plugin that adds support
8514for overriding static files.")
8515 (license license:gpl3+)))
8516
8517(define-public python-responses
8518 (package
8519 (name "python-responses")
8520 (version "0.25.3")
8521 (source (origin
8522 (method url-fetch)
8523 (uri (pypi-uri "responses" version))
8524 (sha256
8525 (base32
8526 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
8527 (build-system pyproject-build-system)
8528 (native-inputs
8529 (list python-pytest
8530 python-pytest-asyncio
8531 python-pytest-httpserver
8532 python-setuptools
8533 python-tomli
8534 python-tomli-w
8535 python-wheel))
8536 (propagated-inputs
8537 (list python-requests
8538 python-pyyaml
8539 python-urllib3))
8540 (home-page "https://github.com/getsentry/responses")
8541 (synopsis "Utility for mocking out the `requests` Python library")
8542 (description "A utility library for mocking out the `requests` Python
8543library.")
8544 (license license:asl2.0)))
8545
8546(define-public python-grequests
8547 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
8548 (revision "0"))
8549 (package
8550 (name "python-grequests")
8551 (version (git-version "0.7.0" revision commit))
8552 (source
8553 (origin
8554 (method git-fetch)
8555 (uri (git-reference
8556 (url "https://github.com/kennethreitz/grequests")
8557 (commit commit)))
8558 (file-name (git-file-name name version))
8559 (sha256
8560 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
8561 (build-system pyproject-build-system)
8562 (arguments
8563 (list
8564 ;; XXX: Most failing tests seem to be caused by network access,
8565 ;; but there is no easy/flag way to disable tests selectively.
8566 #:tests? #f
8567 #:test-backend #~'unittest
8568 #:test-flags #~(list "tests.py")))
8569 (propagated-inputs (list python-gevent python-requests))
8570 (native-inputs (list python-setuptools))
8571 (home-page "https://github.com/kennethreitz/grequests")
8572 (synopsis "Python library for asynchronous HTTP requests")
8573 (description
8574 "GRequests is a Python library that allows you to use @code{Requests}
8575with @code{Gevent} to make asynchronous HTTP Requests easily.")
8576 (license license:bsd-2))))
8577
8578(define-public python-gwebsockets
8579 (package
8580 (name "python-gwebsockets")
8581 (version "0.7")
8582 (source
8583 (origin
8584 (method git-fetch)
8585 (uri (git-reference
8586 (url "https://github.com/sugarlabs/gwebsockets")
8587 (commit (string-append "v" version))))
8588 (file-name (git-file-name name version))
8589 (sha256
8590 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
8591 (build-system pyproject-build-system)
8592 (arguments (list #:tests? #f)) ; No tests upstream.
8593 (native-inputs (list python-setuptools))
8594 (propagated-inputs (list python-pygobject))
8595 (home-page "https://github.com/sugarlabs/gwebsockets")
8596 (synopsis "GLib based websockets server")
8597 (description
8598 "This package provides a websocket server written in Python. It uses GIO
8599for network communication and hence it easily integrates with the GLib
8600mainloop.")
8601 (license license:asl2.0)))
8602
8603(define-public python-dpkt
8604 (package
8605 (name "python-dpkt")
8606 (version "1.9.8")
8607 (source
8608 (origin
8609 (method git-fetch)
8610 (uri (git-reference
8611 (url "https://github.com/kbandla/dpkt")
8612 (commit (string-append "v" version))))
8613 (file-name (git-file-name name version))
8614 (sha256
8615 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
8616 (build-system pyproject-build-system)
8617 (arguments
8618 (list
8619 #:test-flags
8620 #~(list "--pyargs" "dpkt")))
8621 (native-inputs (list python-pytest python-setuptools))
8622 (home-page "https://github.com/kbandla/dpkt")
8623 (synopsis "Packet generator and parser for TCP/IP protocols")
8624 (description
8625 "The dpkt module is a fast, simple packet generator and parser for the
8626basic TCP/IP protocols.")
8627 (license license:bsd-3)))
8628
8629(define-public python-geventhttpclient
8630 (package
8631 (name "python-geventhttpclient")
8632 (version "2.3.9")
8633 (source (origin
8634 (method git-fetch)
8635 (uri (git-reference
8636 (url "https://github.com/geventhttpclient/geventhttpclient")
8637 (commit version)
8638 (recursive? #true)))
8639 (file-name (git-file-name name version))
8640 (sha256
8641 (base32
8642 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
8643 (build-system pyproject-build-system)
8644 (arguments
8645 (list
8646 #:test-flags
8647 ;; Disable network tests.
8648 '(list "-k"
8649 (string-append "not test_client_simple"
8650 " and not test_client_ssl"
8651 " and not test_client_with_default_headers"
8652 " and not test_client_without_leading_slash"
8653 " and not test_download"
8654 " and not test_fail_invalid_ca_certificate"
8655 " and not test_httpbin_multipart"
8656 " and not test_multi_queries_greenlet_safe"
8657 " and not test_no_form_encode_header"
8658 " and not test_no_form_encoded_header"
8659 " and not test_request_with_headers"
8660 " and not test_response_context_manager"
8661 " and not test_urllib_request"))))
8662 (native-inputs (list nss-certs-for-test
8663 python-dpkt python-pytest python-requests
8664 python-setuptools python-wheel))
8665 (propagated-inputs (list python-brotli python-certifi python-gevent
8666 python-urllib3))
8667 (home-page "https://github.com/geventhttpclient/geventhttpclient")
8668 (synopsis "HTTP client library for gevent")
8669 (description "@code{python-geventhttpclient} is a high performance,
8670concurrent HTTP client library for python using @code{gevent}.")
8671 (license license:expat)))
8672
8673(define-public python-gevent-websocket
8674 (package
8675 (name "python-gevent-websocket")
8676 (version "0.10.1")
8677 (source
8678 (origin
8679 (method url-fetch)
8680 (uri (pypi-uri "gevent-websocket" version))
8681 (sha256
8682 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
8683 (build-system pyproject-build-system)
8684 (arguments
8685 (list #:tests? #f)) ; no tests in PyPI or git
8686 (native-inputs
8687 (list python-setuptools
8688 python-wheel))
8689 (propagated-inputs
8690 (list python-gevent))
8691 (home-page "https://gitlab.com/noppo/gevent-websocket")
8692 (synopsis "Websocket handler for the gevent pywsgi server")
8693 (description
8694 "Websocket handler for the gevent pywsgi server, a Python network
8695library.
8696
8697Features include:
8698@itemize
8699@item integration on both socket level or using an abstract interface
8700@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
8701Protocol, WAMP}
8702@item easily extendible using a simple WebSocket protocol plugin API
8703@end itemize")
8704 (license license:asl2.0)))
8705
8706(define-public python-requests-oauthlib
8707 (package
8708 (name "python-requests-oauthlib")
8709 (version "2.0.0")
8710 (source
8711 (origin
8712 (method git-fetch)
8713 (uri (git-reference (url
8714 "https://github.com/requests/requests-oauthlib")
8715 (commit (string-append "v" version))))
8716 (file-name (git-file-name name version))
8717 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
8718 (build-system pyproject-build-system)
8719 (arguments
8720 (list
8721 #:test-flags
8722 #~(list
8723 "--ignore=tests/test_core.py" ; requires network access.
8724 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
8725 "-k" "not test_fetch_access_token"))) ; flaky tests.
8726 (native-inputs
8727 (list python-requests-mock python-pytest python-setuptools))
8728 (propagated-inputs
8729 (list python-oauthlib python-requests))
8730 (home-page "https://github.com/requests/requests-oauthlib")
8731 (synopsis "OAuthlib authentication support for Requests")
8732 (description
8733 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
8734provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
8735 (license license:isc)))
8736
8737(define-public python-cachecontrol
8738 (package
8739 (name "python-cachecontrol")
8740 (version "0.14.1")
8741 (source
8742 (origin
8743 (method git-fetch)
8744 (uri (git-reference
8745 (url "https://github.com/ionrock/cachecontrol")
8746 (commit (string-append "v" version))))
8747 (file-name (git-file-name name version))
8748 (sha256
8749 (base32
8750 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
8751 (build-system pyproject-build-system)
8752 (propagated-inputs
8753 (list python-filelock python-msgpack python-requests))
8754 (native-inputs
8755 (list python-cherrypy python-flit-core python-pytest))
8756 (home-page "https://github.com/ionrock/cachecontrol")
8757 (synopsis "The httplib2 caching algorithms for use with requests")
8758 (description "CacheControl is a port of the caching algorithms in
8759@code{httplib2} for use with @code{requests} session objects.")
8760 (license license:asl2.0)))
8761
8762(define-public python-betamax
8763 (package
8764 (name "python-betamax")
8765 (version "0.9.0")
8766 (source
8767 (origin
8768 (method url-fetch)
8769 (uri (pypi-uri "betamax" version))
8770 (sha256
8771 (base32
8772 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
8773 (build-system pyproject-build-system)
8774 (arguments
8775 (list
8776 #:test-flags
8777 #~(list "-k" (string-join
8778 ;; Tests require network access to http://httpbin.org/get.
8779 (list "not test_creates_new_cassettes"
8780 "test_placeholders_work"
8781 "test_post_start_hook"
8782 "test_pre_stop_hook"
8783 "test_preplayback_hook"
8784 "test_prerecord_hook"
8785 "test_prerecord_ignoring_hook"
8786 "test_records_new_events_with_existing_cassette"
8787 "test_records_new_interaction"
8788 "test_records_new_interactions"
8789 "test_replaces_old_interactions"
8790 "test_replays_response_from_cassette"
8791 "test_requests_with_json_body"
8792 "test_saves_content_as_gzip"
8793 "test_unicode_is_saved_properly")
8794 " and not "))))
8795 (native-inputs
8796 (list nss-certs-for-test
8797 python-pytest
8798 python-setuptools))
8799 (propagated-inputs
8800 (list python-requests))
8801 (home-page "https://github.com/sigmavirus24/betamax")
8802 (synopsis "Record HTTP interactions with python-requests")
8803 (description
8804 "Betamax will record your test suite's HTTP interactions and replay them
8805during future tests. It is designed to work with python-requests.")
8806 (license license:expat)))
8807
8808(define-public python-betamax-matchers
8809 (package
8810 (name "python-betamax-matchers")
8811 (version "0.4.0")
8812 (source
8813 (origin
8814 (method git-fetch)
8815 (uri (git-reference
8816 (url "https://github.com/sigmavirus24/betamax_matchers")
8817 (commit version)))
8818 (file-name (git-file-name name version))
8819 (sha256
8820 (base32 "0lyg3r91hwfvavyi5k6sddcla37igigycfv1mx40c32byqwl6pq5"))))
8821 (build-system pyproject-build-system)
8822 (native-inputs (list python-pytest python-setuptools))
8823 (propagated-inputs (list python-betamax python-requests-toolbelt))
8824 (home-page "https://github.com/sigmavirus24/betamax_matchers")
8825 (synopsis "VCR imitation for python-requests")
8826 (description "@code{betamax-matchers} provides a set of Matchers for
8827Betamax.")
8828 (license license:asl2.0)))
8829
8830(define-public python-betamax-serializers
8831 (package
8832 (name "python-betamax-serializers")
8833 (version "0.2.1")
8834 (source
8835 (origin
8836 (method git-fetch)
8837 (uri (git-reference
8838 (url "https://gitlab.com/betamax/serializers")
8839 (commit version)))
8840 (file-name (git-file-name name version))
8841 (sha256
8842 (base32 "1p2l5w3vwvjacs2ndahgcjq55qb53i37p8mz1zh85pjxyszdyw2l"))))
8843 (build-system pyproject-build-system)
8844 (arguments (list #:tests? #f)) ; No tests.
8845 (native-inputs (list python-setuptools))
8846 (propagated-inputs (list python-betamax python-pyyaml))
8847 (synopsis "Set of third-party serializers for Betamax")
8848 (description
8849 "Betamax-Serializers are an experimental set of Serializers for Betamax
8850that may possibly end up in the main package.")
8851 (home-page "https://gitlab.com/betamax/serializers")
8852 (license license:asl2.0)))
8853
8854(define-public python-s3fs
8855 (package
8856 (name "python-s3fs")
8857 (version "2026.1.0")
8858 (source
8859 (origin
8860 (method url-fetch)
8861 (uri (pypi-uri "s3fs" version))
8862 (sha256
8863 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
8864 (build-system pyproject-build-system)
8865 ;; TODO: Many tests fail with "No such file or directory" raised by the
8866 ;; HTTP client.
8867 (arguments (list #:tests? #false))
8868 (native-inputs
8869 (list python-setuptools))
8870 (propagated-inputs
8871 (list python-aiobotocore
8872 python-aiohttp
8873 python-fsspec))
8874 (home-page "https://github.com/fsspec/s3fs/")
8875 (synopsis "Convenient filesystem interface over S3")
8876 (description "This package provides a convenient filesystem interface over
8877S3.")
8878 (license license:bsd-3)))
8879
8880(define-public python-s3transfer
8881 (package
8882 (name "python-s3transfer")
8883 (version "0.16.0")
8884 (source
8885 (origin
8886 (method url-fetch)
8887 (uri (pypi-uri "s3transfer" version))
8888 (sha256
8889 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
8890 (build-system pyproject-build-system)
8891 (arguments
8892 (list
8893 ;; tests: 630 passed, 51 skipped
8894 #:test-flags
8895 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8896 ;; Tests require networking.
8897 "--ignore" "tests/integration")))
8898 (native-inputs
8899 (list python-pytest
8900 python-pytest-xdist
8901 python-setuptools))
8902 (propagated-inputs
8903 (list python-botocore))
8904 (home-page "https://github.com/boto/s3transfer")
8905 (synopsis "Amazon S3 Transfer Manager")
8906 (description
8907 "S3transfer is a Python library for managing Amazon S3 transfers.")
8908 (license license:asl2.0)))
8909
8910(define-public python-flask-restful
8911 (package
8912 (name "python-flask-restful")
8913 (version "0.3.10")
8914 (source
8915 (origin
8916 (method url-fetch)
8917 (uri (pypi-uri "Flask-RESTful" version))
8918 (sha256
8919 (base32
8920 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
8921 (build-system pyproject-build-system)
8922 (arguments
8923 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
8924 (list #:tests? #f))
8925 (propagated-inputs
8926 (list python-aniso8601 python-flask python-pytz))
8927 (native-inputs
8928 (list python-blinker
8929 python-mock
8930 python-pytest
8931 python-setuptools
8932 python-six))
8933 (home-page "https://github.com/flask-restful/flask-restful/")
8934 (synopsis "Flask module for creating REST APIs")
8935 (description
8936 "This package contains a Flask module for creating REST APIs.")
8937 (license license:bsd-3)))
8938
8939(define-public python-flask-sqlalchemy
8940 (package
8941 (name "python-flask-sqlalchemy")
8942 ;; Released version fails tests in Python 3.12.
8943 (properties '((commit . "168cb4b7b50fe5176307a10d873781bfafc6eeda")
8944 (revision . "0")))
8945 (version (git-version "3.1.1"
8946 (assoc-ref properties 'revision)
8947 (assoc-ref properties 'commit)))
8948 (source
8949 (origin
8950 (method git-fetch)
8951 (uri (git-reference
8952 (url "https://github.com/pallets-eco/flask-sqlalchemy")
8953 (commit (assoc-ref properties 'commit))))
8954 (file-name (git-file-name name version))
8955 (sha256
8956 (base32
8957 "0xw8v1540m21x9crpgb0i3rxyhh1d24ldg354vndw9cif74ls5p6"))))
8958 (build-system pyproject-build-system)
8959 (arguments
8960 (list
8961 #:test-flags
8962 #~(list "-k" (string-append "not test_explicit_table[db2]"
8963 " and not test_explicit_table[db4]")
8964 "-W" "ignore::DeprecationWarning")))
8965 (native-inputs
8966 (list python-flit-core
8967 python-pytest))
8968 (propagated-inputs
8969 (list python-flask
8970 python-sqlalchemy-2))
8971 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
8972 (synopsis "Module adding SQLAlchemy support to your Flask application")
8973 (description
8974 "This package adds SQLAlchemy support to your Flask application.")
8975 (license license:bsd-3)))
8976
8977(define-public python-flask-restful-swagger
8978 (package
8979 (name "python-flask-restful-swagger")
8980 (version "0.20.1")
8981 ;; XXX: Unbundle minified javascript.
8982 (source
8983 (origin
8984 (method git-fetch)
8985 (uri (git-reference
8986 (url "https://github.com/rantav/flask-restful-swagger")
8987 (commit version)))
8988 (file-name (git-file-name name version))
8989 (sha256
8990 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
8991 (build-system pyproject-build-system)
8992 (arguments (list #:tests? #f)) ; No tests.
8993 (native-inputs (list python-setuptools))
8994 (propagated-inputs (list python-flask-restful python-six))
8995 (home-page "https://github.com/rantav/flask-restful-swagger")
8996 (synopsis "Extract Swagger specs from Flask-Restful projects")
8997 (description "This package lets you extract Swagger API documentation
8998specs from your Flask-Restful projects.")
8999 (license license:expat)))
9000
9001(define-public python-htmlmin
9002 (package
9003 (name "python-htmlmin")
9004 (version "0.1.12")
9005 (source
9006 (origin
9007 (method url-fetch)
9008 (uri (pypi-uri "htmlmin" version))
9009 (sha256
9010 (base32
9011 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
9012 (build-system pyproject-build-system)
9013 (arguments
9014 (list #:tests? #f)) ; no tests
9015 (native-inputs (list python-setuptools))
9016 (home-page "https://htmlmin.readthedocs.org/en/latest/")
9017 (synopsis "HTML minifier")
9018 (description "@code{htmlmin} is an HTML minifier that just works.
9019It comes with safe defaults and easily configurable options.")
9020 (license license:bsd-3)))
9021
9022;; XXX: Forked renamed and updated version.
9023(define-public python-htmlmin2
9024 (package/inherit python-htmlmin
9025 (name "python-htmlmin2")
9026 (version "0.1.13")
9027 (source
9028 (origin
9029 (method git-fetch)
9030 (uri (git-reference
9031 (url "https://github.com/wilhelmer/htmlmin")
9032 (commit (string-append "v" version))))
9033 (file-name (git-file-name name version))
9034 (sha256
9035 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
9036 (build-system pyproject-build-system)
9037 (arguments (list #:test-backend #~'unittest))
9038 (native-inputs (list python-setuptools))
9039 (home-page "https://github.com/wilhelmer/htmlmin")
9040 (description
9041 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
9042defaults and easily configurable options. This variant is an updated fork of
9043the original @code{python-htmlmin}.")
9044 (license license:bsd-3)))
9045
9046(define-public python-flask-htmlmin
9047 (package
9048 (name "python-flask-htmlmin")
9049 (version "3.0.0")
9050 (source
9051 (origin
9052 (method git-fetch)
9053 (uri (git-reference
9054 (url "https://github.com/hamidfzm/Flask-HTMLmin")
9055 (commit (string-append "v" version))))
9056 (file-name (git-file-name name version))
9057 (sha256
9058 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
9059 (build-system pyproject-build-system)
9060 (native-inputs (list python-pytest python-setuptools))
9061 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
9062 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
9063 (synopsis "HTML response minifier for Flask")
9064 (description
9065 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
9066 (license license:bsd-3)))
9067
9068(define-public python-jsmin
9069 (package
9070 (name "python-jsmin")
9071 (version "3.0.1")
9072 (source
9073 (origin
9074 (method url-fetch)
9075 (uri (pypi-uri "jsmin" version))
9076 (sha256
9077 (base32
9078 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
9079 (build-system pyproject-build-system)
9080 (arguments (list #:test-backend #~'unittest))
9081 (native-inputs
9082 (list python-setuptools))
9083 (home-page "https://github.com/tikitu/jsmin/")
9084 (synopsis "Python JavaScript minifier")
9085 (description
9086 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
9087on the command line.")
9088 (license license:expat)))
9089
9090(define-public python-flask-login
9091 (let ((commit "c8bba84b9ba6768e878317fc46c54bd13fa1ac07")
9092 (revision "0"))
9093 (package
9094 (name "python-flask-login")
9095 (version (git-version "0.6.3" revision commit))
9096 (source
9097 (origin
9098 (method git-fetch)
9099 (uri (git-reference
9100 (url "https://github.com/maxcountryman/flask-login")
9101 (commit commit)))
9102 (file-name (git-file-name name version))
9103 (sha256
9104 (base32 "0q0ga1zwm06kvpnsf50ckmsc77959i1spx7z2y3jkbwaa4klsyli"))))
9105 (build-system pyproject-build-system)
9106 (propagated-inputs
9107 (list python-flask))
9108 (native-inputs
9109 ;; For tests.
9110 (list python-blinker
9111 python-flit-core
9112 python-mock
9113 python-pytest
9114 python-semantic-version
9115 python-werkzeug))
9116 (home-page "https://github.com/maxcountryman/flask-login")
9117 (synopsis "User session management for Flask")
9118 (description
9119 "@code{Flask-Login} provides user session management for Flask. It
9120handles the common tasks of logging in, logging out, and remembering your
9121users' sessions over extended periods of time.")
9122 (license license:expat))))
9123
9124(define-public python-oauth2client
9125 (package
9126 (name "python-oauth2client")
9127 (version "4.1.3")
9128 (source
9129 (origin
9130 (method git-fetch)
9131 (uri (git-reference
9132 (url "https://github.com/google/oauth2client/")
9133 (commit (string-append "v" version))))
9134 (file-name (git-file-name name version))
9135 (sha256
9136 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
9137 (build-system pyproject-build-system)
9138 (arguments
9139 (list #:tests? #f))
9140 (native-inputs
9141 (list python-setuptools))
9142 (propagated-inputs
9143 (list python-httplib2
9144 python-pyasn1
9145 python-pyasn1-modules
9146 python-pyparsing
9147 python-rsa
9148 python-six))
9149 (home-page "https://github.com/google/oauth2client/")
9150 (synopsis "OAuth 2.0 client library")
9151 (description "@code{python-oauth2client} provides an OAuth 2.0 client
9152library for Python")
9153 (license license:asl2.0)))
9154
9155(define-public python-authlib
9156 (package
9157 (name "python-authlib")
9158 (version "1.5.1")
9159 (source
9160 (origin
9161 (method url-fetch)
9162 (uri (pypi-uri "authlib" version))
9163 (sha256
9164 (base32 "0blpvz2v2r8yvsgm1yr3n61mhwxvh1b0kyf2rp0i4wv6n3n8bg2w"))))
9165 (build-system pyproject-build-system)
9166 ;; No tests target.
9167 (arguments (list #:tests? #false))
9168 (propagated-inputs
9169 (list python-cryptography
9170 python-django
9171 python-flask
9172 python-httpx
9173 python-requests
9174 python-sqlalchemy-2
9175 python-starlette
9176 python-werkzeug))
9177 (native-inputs (list python-pytest python-setuptools python-wheel))
9178 (home-page "https://pypi.org/project/Authlib/1")
9179 (synopsis "Build OAuth and OpenID Connect servers and clients")
9180 (description
9181 "This is a Python library for building OAuth and OpenID Connect servers
9182and clients.")
9183 (license license:bsd-3)))
9184
9185(define-public python-flask-oidc
9186 (package
9187 (name "python-flask-oidc")
9188 (version "2.3.1")
9189 (source
9190 (origin
9191 (method url-fetch)
9192 (uri (pypi-uri "flask_oidc" version))
9193 (sha256
9194 (base32
9195 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
9196 (build-system pyproject-build-system)
9197 (propagated-inputs
9198 (list python-authlib
9199 python-blinker
9200 python-flask
9201 python-requests
9202 python-responses))
9203 (native-inputs
9204 (list python-pytest python-poetry-core))
9205 (home-page "https://github.com/puiterwijk/flask-oidc")
9206 (synopsis "OpenID Connect extension for Flask")
9207 (description "@code{python-flask-oidc} provides an OpenID Connect extension
9208for Flask.")
9209 (license license:bsd-2)))
9210
9211(define-public python-webassets
9212 (package
9213 (name "python-webassets")
9214 (version "3.0.0")
9215 (source
9216 (origin
9217 (method git-fetch)
9218 (uri (git-reference
9219 (url "https://github.com/miracle2k/webassets")
9220 (commit version)))
9221 (file-name (git-file-name name version))
9222 (sha256
9223 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
9224 (build-system pyproject-build-system)
9225 (propagated-inputs (list python-pyyaml python-zope-dottedname))
9226 (native-inputs (list python-hatchling python-pytest))
9227 (home-page "https://github.com/miracle2k/webassets")
9228 (synopsis "Media asset management")
9229 (description
9230 "This package provides utilities to merge, minify and compress Javascript
9231and CSS files,supporting a variety of different filters, including YUI, jsmin,
9232jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
9233 (license license:bsd-2)))
9234
9235(define-public python-cssmin
9236 (package
9237 (name "python-cssmin")
9238 (version "0.2.0")
9239 (source
9240 (origin
9241 (method git-fetch)
9242 (uri (git-reference
9243 (url "https://github.com/zacharyvoase/cssmin")
9244 (commit (string-append "v" version))))
9245 (file-name (git-file-name name version))
9246 (sha256
9247 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
9248 (build-system pyproject-build-system)
9249 (arguments (list #:tests? #f)) ; No tests.
9250 (native-inputs (list python-setuptools))
9251 (home-page "https://github.com/zacharyvoase/cssmin")
9252 (synopsis "Python port of the YUI CSS Compressor")
9253 (description "Python port of the YUI CSS Compressor.")
9254 (license (list license:expat license:bsd-3))))
9255
9256(define-public python-elastic-transport
9257 (package
9258 (name "python-elastic-transport")
9259 (version "9.1.0")
9260 (source
9261 (origin
9262 (method url-fetch)
9263 (uri (pypi-uri "elastic_transport" version))
9264 (sha256
9265 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
9266 (build-system pyproject-build-system)
9267 (arguments
9268 (list
9269 #:test-flags
9270 ;; Deselect failing tests (mostly due to network not reachable)
9271 #~(list "-k"
9272 (string-append
9273 "not .badssl.com"
9274 " and not test_assert_fingerprint_in_cert_chain_failure"))))
9275 (propagated-inputs (list python-certifi python-urllib3))
9276 (native-inputs (list nss-certs-for-test
9277 python-aiohttp
9278 ;; python-furo
9279 python-httpx
9280 python-opentelemetry-api
9281 python-opentelemetry-sdk
9282 python-orjson
9283 python-pytest
9284 python-pytest-asyncio-0.26
9285 ;; python-pytest-cov
9286 python-pytest-httpbin
9287 python-pytest-httpserver
9288 python-pytest-mock
9289 python-requests
9290 python-respx ;test
9291 python-setuptools
9292 ;; python-sphinx
9293 ;; python-sphinx-autodoc-typehints
9294 python-trustme
9295 python-wheel))
9296 (home-page "https://github.com/elastic/elastic-transport-python")
9297 (synopsis "Common library for Python Elastic client libraries")
9298 (description
9299 "This library was lifted from @code{elasticsearch-py} and then transformed to
9300be used across all Elastic services rather than only Elasticsearch. It
9301provides transport classes and utilities shared among Python Elastic client
9302libraries.")
9303 ;; Apache-2.0 in setup.py and LICENSE file.
9304 (license license:asl2.0)))
9305
9306(define-public python-elasticsearch
9307 (package
9308 (name "python-elasticsearch")
9309 (version "9.1.1")
9310 (source
9311 (origin
9312 (method git-fetch) ; no tests in PyPI release
9313 (uri (git-reference
9314 (url "https://github.com/elastic/elasticsearch-py")
9315 (commit (string-append "v" version))))
9316 (file-name (git-file-name name version))
9317 (sha256
9318 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
9319 (build-system pyproject-build-system)
9320 (native-inputs
9321 (list nss-certs-for-test
9322 python-aiohttp
9323 python-dateutil
9324 python-mock
9325 python-orjson
9326 python-pytest
9327 python-pytest-asyncio
9328 python-pytz
9329 python-pyyaml
9330 python-requests
9331 python-hatchling))
9332 (propagated-inputs
9333 (list python-certifi
9334 python-elastic-transport))
9335 (home-page "https://github.com/elastic/elasticsearch-py")
9336 (synopsis "Low-level client for Elasticsearch")
9337 (description "Official low-level client for Elasticsearch. Its goal is to
9338provide common ground for all Elasticsearch-related code in Python; because of
9339this it tries to be opinion-free and very extendable.")
9340 ;; Apache-2.0 in setup.py and LICENSE file.
9341 (license license:asl2.0)))
9342
9343(define-public python-engineio
9344 (package
9345 (name "python-engineio")
9346 (version "4.13.4")
9347 (source
9348 (origin
9349 (method git-fetch)
9350 (uri (git-reference
9351 (url "https://github.com/miguelgrinberg/python-engineio/")
9352 (commit (string-append "v" version))))
9353 (file-name (git-file-name name version))
9354 (sha256
9355 (base32 "1ndp68cqssjpvln958v236rg5jgpzy57vs3z45sz7xfscmbi893r"))))
9356 (build-system pyproject-build-system)
9357 (native-inputs
9358 (list python-pytest
9359 python-pytest-asyncio
9360 python-setuptools
9361 python-tornado))
9362 (propagated-inputs
9363 (list python-simple-websocket
9364 ;; [optional]
9365 python-aiohttp
9366 python-requests
9367 python-websocket-client))
9368 (home-page "https://github.com/miguelgrinberg/python-engineio/")
9369 (synopsis "Engine.IO server")
9370 (description "This package provides a Python implementation of the
9371@code{Engine.IO} realtime client and server.")
9372 (license license:expat)))
9373
9374(define-public python-ephemeral-port-reserve
9375 (package
9376 (name "python-ephemeral-port-reserve")
9377 (version "1.1.4")
9378 (source
9379 (origin
9380 (method git-fetch)
9381 (uri (git-reference
9382 (url "https://github.com/Yelp/ephemeral-port-reserve")
9383 (commit (string-append "v" version))))
9384 (file-name (git-file-name name version))
9385 (sha256
9386 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
9387 (build-system pyproject-build-system)
9388 (native-inputs
9389 (list python-pytest
9390 python-setuptools))
9391 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
9392 (synopsis "Find an unused port, reliably")
9393 (description
9394 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
9395it.")
9396 (license license:expat)))
9397
9398(define-public python-flask-migrate
9399 (package
9400 (name "python-flask-migrate")
9401 (version "4.1.0")
9402 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
9403 (source (origin
9404 (method git-fetch)
9405 (uri (git-reference (url home-page)
9406 (commit (string-append "v" version))))
9407 (file-name (git-file-name name version))
9408 (sha256
9409 (base32
9410 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
9411 (build-system pyproject-build-system)
9412 (propagated-inputs
9413 (list python-flask python-alembic python-flask-sqlalchemy))
9414 (native-inputs
9415 (list python-pytest python-setuptools python-wheel))
9416 (synopsis "SQLAlchemy database migrations for Flask programs using
9417Alembic")
9418 (description "This package contains SQLAlchemy database migration tools
9419for Flask programs that are using @code{python-alembic}.")
9420 (license license:expat)))
9421
9422(define-public python-genshi
9423 (package
9424 (name "python-genshi")
9425 (version "0.7.10")
9426 (source
9427 (origin
9428 (method git-fetch)
9429 (uri (git-reference
9430 (url "https://github.com/edgewall/genshi")
9431 (commit version)))
9432 (file-name (git-file-name name version))
9433 (sha256
9434 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
9435 (build-system pyproject-build-system)
9436 (arguments (list #:test-backend #~'unittest))
9437 (native-inputs (list python-setuptools))
9438 (propagated-inputs (list python-six))
9439 (home-page "https://genshi.edgewall.org/")
9440 (synopsis "Toolkit for generation of output for the web")
9441 (description "Genshi is a Python library that provides an integrated set
9442of components for parsing, generating, and processing HTML, XML or other
9443textual content for output generation on the web.")
9444 (license license:bsd-3)))
9445
9446(define-public python-flask-principal
9447 (package
9448 (name "python-flask-principal")
9449 (version "0.4.0")
9450 (source
9451 (origin
9452 (method git-fetch)
9453 (uri (git-reference
9454 (url "https://github.com/pallets-eco/flask-principal")
9455 (commit version)))
9456 (file-name (git-file-name name version))
9457 (sha256
9458 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
9459 (build-system pyproject-build-system)
9460 (propagated-inputs (list python-blinker))
9461 (native-inputs (list python-flask python-pynose python-setuptools))
9462 (home-page "https://github.com/pallets-eco/flask-principal")
9463 (synopsis "Identity management for Flask")
9464 (description
9465 "@code{flask_principal} is a identity management library for Flask. It
9466supports managing both authentication and authorization data in a thread-local
9467variable.")
9468 (license license:expat)))
9469
9470(define-public python-flask-httpauth
9471 (package
9472 (name "python-flask-httpauth")
9473 (version "4.8.0")
9474 (source
9475 (origin
9476 (method url-fetch)
9477 (uri (pypi-uri "Flask-HTTPAuth" version))
9478 (sha256
9479 (base32
9480 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
9481 (build-system pyproject-build-system)
9482 (propagated-inputs (list python-flask))
9483 (native-inputs
9484 (list nss-certs-for-test
9485 python-pytest
9486 python-setuptools
9487 python-wheel))
9488 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
9489 (synopsis "Basic and Digest HTTP authentication for Flask routes")
9490 (description "@code{flask_httpauth} provides Basic and Digest HTTP
9491authentication for Flask routes.")
9492 (license license:expat)))
9493
9494(define-public python-uritemplate
9495 (package
9496 (name "python-uritemplate")
9497 (version "4.2.0")
9498 (source
9499 (origin
9500 (method url-fetch)
9501 (uri (pypi-uri "uritemplate" version))
9502 (sha256
9503 (base32
9504 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
9505 (build-system pyproject-build-system)
9506 (native-inputs (list python-pytest python-setuptools))
9507 (home-page "https://uritemplate.readthedocs.io/")
9508 (synopsis "Library to deal with URI Templates")
9509 (description "@code{uritemplate} provides Python library to deal with URI
9510Templates.")
9511 ;; The software is made available under the terms of *either* of the
9512 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
9513 ;; are made under *both* licenses (excerpt from the LICENSE file).
9514 (license (list license:bsd-2 license:asl2.0))))
9515
9516(define-public python-uritemplate-3
9517 (package
9518 (inherit python-uritemplate)
9519 (name "python-uritemplate")
9520 (version "3.0.1")
9521 (source (origin
9522 (method url-fetch)
9523 (uri (pypi-uri "uritemplate" version))
9524 (sha256
9525 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
9526
9527(define-public python-publicsuffix2
9528 (package
9529 (name "python-publicsuffix2")
9530 (version "2.2019-12-21")
9531 (source
9532 (origin
9533 (method git-fetch)
9534 (uri (git-reference
9535 (url "https://github.com/pombredanne/python-publicsuffix2")
9536 (commit (string-append "release-" version))))
9537 (file-name (git-file-name name version))
9538 (sha256
9539 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
9540 (build-system pyproject-build-system)
9541 (arguments
9542 (list
9543 #:tests? #f ;the test suite requires network access
9544 #:phases
9545 #~(modify-phases %standard-phases
9546 (add-after 'unpack 'ignore-maintainer-inputs
9547 (lambda _
9548 ;; Comment out a demand for python-requests, which is used only by
9549 ;; the unused ‘update_psl’ helper command.
9550 (substitute* "setup.py"
9551 (("'requests " match)
9552 (format #f "# ~a" match))))))))
9553 (native-inputs (list python-setuptools))
9554 (home-page "https://github.com/pombredanne/python-publicsuffix2")
9555 (synopsis
9556 "Get a public suffix for a domain name using the Public Suffix List")
9557 (description
9558 "Get a public suffix for a domain name using the Public Suffix List.
9559Forked from and using the same API as the publicsuffix package.")
9560 (license (list license:expat license:mpl2.0))))
9561
9562(define-public python-werkzeug
9563 (package
9564 (name "python-werkzeug")
9565 (version "3.1.8")
9566 (source
9567 (origin
9568 (method git-fetch)
9569 (uri (git-reference
9570 (url "https://github.com/pallets/werkzeug")
9571 (commit version)))
9572 (file-name (git-file-name name version))
9573 (sha256
9574 (base32 "1jwrrjv50n5rcfzax4qf0237znkcpcafd17hx0r77f997yv3ghlv"))))
9575 (build-system pyproject-build-system)
9576 (arguments
9577 (list
9578 #:test-flags
9579 #~(list "-m" "not dev_server")))
9580 (native-inputs
9581 (list python-ephemeral-port-reserve
9582 python-flit-core
9583 python-pytest
9584 python-pytest-timeout
9585 python-watchdog))
9586 (propagated-inputs
9587 (list python-markupsafe))
9588 (home-page "https://palletsprojects.com/p/werkzeug/")
9589 (synopsis "Utilities for WSGI applications")
9590 (description "One of the most advanced WSGI utility modules. It includes a
9591powerful debugger, full-featured request and response objects, HTTP utilities to
9592handle entity tags, cache control headers, HTTP dates, cookie handling, file
9593uploads, a powerful URL routing system and a bunch of community-contributed
9594addon modules.")
9595 (license license:x11)))
9596
9597(define-public python-werkzeug-1.0
9598 (package
9599 (inherit python-werkzeug)
9600 (version "1.0.1")
9601 (source (origin
9602 (method url-fetch)
9603 (uri (pypi-uri "Werkzeug" version))
9604 (sha256
9605 (base32
9606 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
9607 (patches (search-patches "python-werkzeug-tests.patch"))))
9608 (arguments
9609 (list
9610 #:phases
9611 '(modify-phases %standard-phases
9612 (add-after 'unpack 'ignore-warnings
9613 (lambda _
9614 (substitute* "setup.cfg"
9615 ((" error.*") "")))))))
9616 (propagated-inputs
9617 (list python-requests))
9618 (native-inputs
9619 (list python-pytest python-pytest-timeout python-setuptools
9620 python-wheel))))
9621
9622(define-public python-bottle
9623 (package
9624 (name "python-bottle")
9625 (version "0.13.4")
9626 (source
9627 (origin
9628 (method url-fetch)
9629 (uri (pypi-uri "bottle" version))
9630 (sha256
9631 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
9632 (build-system pyproject-build-system)
9633 (native-inputs (list python-pytest python-setuptools))
9634 (home-page "https://bottlepy.org/")
9635 (synopsis "WSGI framework for small web-applications")
9636 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
9637 (license license:expat)))
9638
9639(define-public python-wtforms
9640 (package
9641 (name "python-wtforms")
9642 (version "3.2.2")
9643 (source
9644 (origin
9645 (method url-fetch)
9646 (uri (pypi-uri "wtforms" version))
9647 (sha256
9648 (base32 "14qbayp2gfmahaqn5migwyz2h1cq3gcdr4q2vd75vwvhhqzwf03v"))))
9649 (build-system pyproject-build-system)
9650 (native-inputs
9651 (list python-babel
9652 python-email-validator
9653 python-hatchling
9654 python-pytest
9655 python-setuptools))
9656 (propagated-inputs (list python-markupsafe))
9657 (home-page "https://wtforms.readthedocs.io/")
9658 (synopsis
9659 "Form validation and rendering library for Python web development")
9660 (description
9661 "WTForms is a flexible forms validation and rendering library
9662for Python web development. It is very similar to the web form API
9663available in Django, but is a standalone package.")
9664 (license license:bsd-3)))
9665
9666(define-public python-wtforms-sqlalchemy
9667 (package
9668 (name "python-wtforms-sqlalchemy")
9669 (version "0.4.1")
9670 (source
9671 (origin
9672 (method url-fetch)
9673 (uri (pypi-uri "WTForms-SQLAlchemy" version))
9674 (sha256
9675 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
9676 (build-system pyproject-build-system)
9677 (native-inputs (list python-pytest python-setuptools python-wheel))
9678 (propagated-inputs (list python-sqlalchemy python-wtforms))
9679 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
9680 (synopsis "SQLAlchemy tools for WTForms")
9681 (description
9682 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
9683package from WTForms. The package has been renamed to
9684@code{wtforms_sqlalchemy} but otherwise should function the same as
9685@code{wtforms.ext.sqlalchemy} did.")
9686 (license license:bsd-3)))
9687
9688(define-public python-urlgrabber
9689 (package
9690 (name "python-urlgrabber")
9691 (version "4.1.0")
9692 (source
9693 (origin
9694 (method url-fetch)
9695 (uri (pypi-uri "urlgrabber" version))
9696 (sha256
9697 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
9698 (build-system pyproject-build-system)
9699 (arguments
9700 (list
9701 #:tests? #f ; Most tests require network access.
9702 #:phases
9703 #~(modify-phases %standard-phases
9704 (replace 'check
9705 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
9706 (when tests?
9707 (invoke "python" "test/runtests.py")))))))
9708 (native-inputs (list python-setuptools))
9709 (propagated-inputs
9710 (list python-pycurl python-setuptools python-six))
9711 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
9712 (synopsis "High-level cross protocol url-grabber")
9713 (description
9714 "@code{urlgrabber} is a library that unifies access to files available on
9715the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
9716supports features like HTTP keep-alive, reget, throttling and more.")
9717 (license license:lgpl2.1+)))
9718
9719(define-public python-pycares
9720 (package
9721 (name "python-pycares")
9722 (version "4.11.0")
9723 (source
9724 (origin
9725 (method git-fetch)
9726 (uri (git-reference
9727 (url "https://github.com/saghul/pycares")
9728 (commit (string-append "v" version))))
9729 (file-name (git-file-name name version))
9730 (sha256
9731 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
9732 (snippet #~(begin
9733 (rmdir "deps/c-ares")))))
9734 (build-system pyproject-build-system)
9735 (arguments
9736 (list
9737 ;; XXX: Half of the tests require internet access
9738 ;; There is currently no markers to avoid running them.
9739 #:tests? #f
9740 #:phases
9741 #~(modify-phases %standard-phases
9742 (add-after 'unpack 'configure-system-lib
9743 (lambda _
9744 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
9745 (native-inputs (list python-pytest python-setuptools))
9746 (inputs (list c-ares))
9747 (propagated-inputs (list python-cffi))
9748 (home-page "https://github.com/saghul/pycares")
9749 (synopsis "Python interface for @code{c-ares}")
9750 (description
9751 "@code{pycares} is a Python module which provides an interface to
9752@code{c-ares}, a C library that performs DNS requests and name resolutions
9753asynchronously.")
9754 (license license:expat)))
9755
9756(define-public python-yarl
9757 (package
9758 (name "python-yarl")
9759 (version "1.18.3")
9760 (source
9761 (origin
9762 (method url-fetch)
9763 (uri (pypi-uri "yarl" version))
9764 (sha256
9765 (base32
9766 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
9767 (build-system pyproject-build-system)
9768 (arguments
9769 (list
9770 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
9771 #:phases
9772 '(modify-phases %standard-phases
9773 (add-after 'unpack 'avoid-pytest-cov-preload
9774 (lambda _
9775 (substitute* "pytest.ini"
9776 (("-p pytest_cov") ""))))
9777 (add-after 'unpack 'patch-build-system
9778 (lambda _
9779 ;; XXX: I don't know how to tell it to build the extensions in
9780 ;; place.
9781 (substitute* "packaging/pep517_backend/_backend.py"
9782 (("build_inplace=False") "build_inplace=True")))))))
9783 (native-inputs
9784 (list python-cython
9785 python-expandvars
9786 python-pytest
9787 python-pytest-xdist
9788 python-setuptools
9789 python-tomli))
9790 (propagated-inputs
9791 (list python-packaging python-idna python-multidict python-propcache))
9792 (home-page "https://github.com/aio-libs/yarl/")
9793 (synopsis "Yet another URL library")
9794 (description "@code{yarl} module provides handy @code{URL} class
9795for URL parsing and changing.")
9796 (license license:asl2.0)))
9797
9798(define-public python-canvasapi
9799 (package
9800 (name "python-canvasapi")
9801 (version "3.4.0")
9802 (source (origin
9803 (method git-fetch)
9804 (uri (git-reference
9805 (url "https://github.com/ucfopen/canvasapi")
9806 (commit (string-append "v" version))))
9807 (file-name (git-file-name name version))
9808 (sha256
9809 (base32
9810 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
9811 (build-system pyproject-build-system)
9812 (propagated-inputs (list python-arrow python-pytz python-requests))
9813 (native-inputs (list python-pytest
9814 python-requests-mock
9815 python-setuptools
9816 python-urllib3))
9817 (home-page "https://github.com/ucfopen/canvasapi")
9818 (synopsis "API wrapper for the Canvas LMS")
9819 (description
9820 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
9821The library enables developers to programmatically manage Canvas courses,
9822users, gradebooks, and more.")
9823 (license license:expat)))
9824
9825(define-public python-google
9826 (package
9827 (name "python-google")
9828 (version "3.0.0")
9829 (source
9830 (origin
9831 (method url-fetch)
9832 (uri (pypi-uri "google" version))
9833 (sha256
9834 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
9835 (build-system pyproject-build-system)
9836 (arguments (list #:tests? #f)) ;There are no tests.
9837 (native-inputs (list python-setuptools))
9838 (propagated-inputs (list python-beautifulsoup4))
9839 (home-page "https://breakingcode.wordpress.com/")
9840 (synopsis "Python bindings to the Google search engine")
9841 (description
9842 "This package provides Python bindings for using the Google search
9843engine. Its module is called @code{googlesearch}.")
9844 (license license:bsd-3)))
9845
9846(define-public python-google-api-client
9847 (package
9848 (name "python-google-api-client")
9849 (version "2.198.0")
9850 (source
9851 (origin
9852 (method git-fetch)
9853 (uri (git-reference
9854 (url "https://github.com/google/google-api-python-client")
9855 (commit (string-append "v" version))))
9856 (file-name (git-file-name name version))
9857 (sha256
9858 (base32 "1adjr3ylp8bwbvywxm11hs4y913pvaga0dn6nwmb3622y62zxfhg"))))
9859 (build-system pyproject-build-system)
9860 (arguments
9861 (list
9862 #:test-flags
9863 #~(list
9864 "-k"
9865 (string-join
9866 (list
9867 ;; XXX: Deprecated behavior.
9868 "not test_client_options_universe_configured_with_mtls"
9869 "test_universe_env_var_configured_with_mtls"
9870 ;; XXX: Requires CA certificates.
9871 "test_credentials_and_credentials_file_mutually_exclusive")
9872 " and not ")
9873 "tests")))
9874 (native-inputs
9875 (list python-parameterized
9876 python-pytest
9877 python-setuptools))
9878 (propagated-inputs
9879 (list python-google-api-core
9880 python-google-auth
9881 python-google-auth-httplib2
9882 python-httplib2
9883 python-pyparsing
9884 python-uritemplate-3))
9885 (home-page "https://github.com/google/google-api-python-client")
9886 (synopsis "Core Python library for accessing Google APIs")
9887 (description "Python client library for Google's discovery based APIs")
9888 (license license:asl2.0)))
9889
9890(define-public python-google-auth-httplib2
9891 (package
9892 (name "python-google-auth-httplib2")
9893 (version "0.4.0")
9894 (source (origin
9895 (method url-fetch)
9896 (uri (pypi-uri "google_auth_httplib2" version))
9897 (sha256
9898 (base32 "0dgdzy2ps3z71dc2b4s1fhmyx094nq0sg75sagav995p0ji31c6m"))))
9899 (build-system pyproject-build-system)
9900 (propagated-inputs
9901 (list python-google-auth python-httplib2))
9902 (native-inputs
9903 (list python-pytest
9904 python-pyparsing
9905 python-pytest-localserver
9906 python-flask
9907 python-setuptools))
9908 (home-page "https://github.com/googleapis/google-cloud-python")
9909 (synopsis "Google Authentication Library: httplib2 transport")
9910 (description "This package provides a Google Authentication Library plugin
9911for httplib2 transport.")
9912 (license license:asl2.0)))
9913
9914(define-public python-google-auth-oauthlib
9915 (package
9916 (name "python-google-auth-oauthlib")
9917 (version "1.2.4")
9918 (home-page
9919 "https://github.com/GoogleCloudPlatform/\
9920google-auth-library-python-oauthlib")
9921 (source
9922 (origin
9923 (method git-fetch)
9924 (uri (git-reference
9925 (url home-page)
9926 (commit (string-append "v" version))))
9927 (file-name (git-file-name name version))
9928 (sha256
9929 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
9930 (build-system pyproject-build-system)
9931 (propagated-inputs (list python-google-auth python-requests-oauthlib))
9932 (native-inputs
9933 (list python-click python-mock python-pytest python-setuptools))
9934 (synopsis "Google Authentication Library: oauthlib")
9935 (description "This package provides a Google Authentication Library plugin
9936with oauthlib.")
9937 (license license:asl2.0)))
9938
9939(define-public whoogle-search
9940 (package
9941 (name "whoogle-search")
9942 (version "0.8.4")
9943 (source (origin
9944 (method url-fetch)
9945 (uri (pypi-uri "whoogle-search" version))
9946 (sha256
9947 (base32
9948 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
9949 (build-system pyproject-build-system)
9950 (arguments
9951 (list
9952 ;; The tests need network access
9953 #:tests? #f))
9954 (propagated-inputs
9955 (list python-beautifulsoup4
9956 python-brotli
9957 python-cryptography
9958 python-cssutils
9959 python-defusedxml
9960 python-flask
9961 python-dotenv
9962 python-requests
9963 python-stem
9964 python-validators
9965 python-waitress))
9966 (native-inputs (list python-setuptools python-wheel))
9967 (home-page "https://github.com/benbusby/whoogle-search")
9968 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
9969 (description
9970 "Get Google results, but without any ads, javascript, AMP links,
9971cookies, or IP address tracking. Quick and simple to implement as a primary
9972search engine replacement on both desktop and mobile.")
9973 (license license:expat)))
9974
9975(define-public python-hawkauthlib
9976 (package
9977 (name "python-hawkauthlib")
9978 (version "2.0.0")
9979 (source
9980 (origin
9981 (method git-fetch)
9982 (uri (git-reference
9983 (url "https://github.com/mozilla-services/hawkauthlib")
9984 (commit (string-append "v" version))))
9985 (file-name (git-file-name name version))
9986 (sha256
9987 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
9988 (build-system pyproject-build-system)
9989 (arguments
9990 (list
9991 #:test-backend #~'unittest
9992 #:phases
9993 #~(modify-phases %standard-phases
9994 (add-after 'unpack 'fix-python-incompatibilities
9995 (lambda _
9996 (substitute* (find-files "hawkauthlib/tests" "\\.py$")
9997 (("assertEquals") "assertEqual")))))))
9998 (native-inputs (list python-setuptools))
9999 (propagated-inputs (list python-requests python-webob))
10000 (home-page "https://github.com/mozilla-services/hawkauthlib")
10001 (synopsis "Hawk Access Authentication protocol")
10002 (description
10003 "This is a low-level Python library for implementing Hawk Access
10004Authentication, a simple HTTP request-signing scheme.")
10005 (license license:mpl2.0)))
10006
10007(define-public python-pybrowserid
10008 (package
10009 (name "python-pybrowserid")
10010 (version "0.14.0")
10011 (source
10012 (origin
10013 (method git-fetch)
10014 (uri (git-reference
10015 (url "https://github.com/mozilla/PyBrowserID")
10016 (commit version)))
10017 (file-name (git-file-name name version))
10018 (sha256
10019 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
10020 (build-system pyproject-build-system)
10021 (arguments
10022 (list
10023 #:test-backend #~'unittest
10024 #:phases
10025 #~(modify-phases %standard-phases
10026 (add-after 'unpack 'python-3.12-compatibility
10027 (lambda _
10028 (substitute* (find-files "browserid/tests" "\\.py")
10029 (("assertEquals") "assertEqual")))))))
10030 (propagated-inputs (list python-requests))
10031 (native-inputs (list python-mock python-setuptools))
10032 (home-page "https://github.com/mozilla/PyBrowserID")
10033 (synopsis "Python library for the BrowserID protocol")
10034 (description
10035 "This is a Python client library for the BrowserID protocol that
10036underlies Mozilla Persona.")
10037 (license license:mpl2.0)))
10038
10039(define-public python-pyfxa
10040 (package
10041 (name "python-pyfxa")
10042 (version "0.8.1")
10043 (source
10044 (origin
10045 (method git-fetch)
10046 (uri (git-reference
10047 (url "https://github.com/mozilla/PyFxA")
10048 (commit (string-append "v" version))))
10049 (file-name (git-file-name name version))
10050 (sha256
10051 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
10052 (build-system pyproject-build-system)
10053 (arguments
10054 (list
10055 ;; These tests require network access
10056 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
10057 (propagated-inputs
10058 (list python-cryptography
10059 python-pyjwt
10060 python-parameterized
10061 python-hawkauthlib
10062 python-requests))
10063 (native-inputs
10064 (list python-grequests
10065 python-hatchling
10066 python-mock
10067 python-pytest
10068 python-responses))
10069 (home-page "https://github.com/mozilla/PyFxA")
10070 (synopsis "Firefox Accounts client library for Python")
10071 (description
10072 "This is a Python library for interacting with the Firefox Accounts
10073ecosystem.")
10074 (license license:mpl2.0)))
10075
10076(define-public python-hyperlink
10077 (package
10078 (name "python-hyperlink")
10079 (version "21.0.0")
10080 (source
10081 (origin
10082 (method url-fetch)
10083 (uri (pypi-uri "hyperlink" version))
10084 (sha256
10085 (base32
10086 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
10087 (build-system pyproject-build-system)
10088 (arguments
10089 (list #:phases
10090 #~(modify-phases %standard-phases
10091 (add-before 'check 'pretend-to-be-CI
10092 (lambda _
10093 ;; Pretend to be a CI system to skip flaky tests.
10094 (setenv "CI" "true"))))))
10095 (native-inputs
10096 (list python-pytest python-setuptools python-wheel))
10097 (propagated-inputs
10098 (list python-idna))
10099 (home-page "https://github.com/python-hyper/hyperlink")
10100 (synopsis "Python module to create immutable URLs according to spec")
10101 (description "This package provides a Python module to create immutable, and
10102correct URLs for Python according to RFCs 3986 and 3987.")
10103 (license license:expat)))
10104
10105(define-public python-treq
10106 (package
10107 (name "python-treq")
10108 (version "24.9.1")
10109 (source
10110 (origin
10111 (method url-fetch)
10112 (uri (pypi-uri "treq" version))
10113 (sha256
10114 (base32
10115 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
10116 (build-system pyproject-build-system)
10117 (native-inputs
10118 (list python-httpbin
10119 python-pytest
10120 python-service-identity
10121 python-setuptools
10122 python-wheel))
10123 (propagated-inputs
10124 (list python-attrs
10125 python-hyperlink
10126 python-incremental
10127 python-requests
10128 python-twisted
10129 python-typing-extensions))
10130 (home-page "https://github.com/twisted/treq")
10131 (synopsis "Requests-like API built on top of twisted.web's Agent")
10132 (description "This package provides an HTTP library inspired by
10133@code{requests} but written on top of Twisted's @code{Agents}. It offers a
10134high level API for making HTTP requests when using Twisted.")
10135 (license license:expat)))
10136
10137(define-public python-autobahn
10138 (package
10139 (name "python-autobahn")
10140 (version "25.11.1")
10141 (source
10142 (origin
10143 (method url-fetch)
10144 (uri (pypi-uri "autobahn" version))
10145 (sha256
10146 (base32
10147 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
10148 (build-system pyproject-build-system)
10149 (arguments
10150 (list
10151 ;; The tests fail to run:
10152 ;; https://github.com/crossbario/autobahn-python/issues/1117
10153 #:tests? #f
10154 #:phases #~(modify-phases %standard-phases
10155 (add-after 'unpack 'relax-zope-interface
10156 (lambda _
10157 ;; python-zope-interface is a world rebuild package
10158 ;; and our one-digit lower minor version seems to be
10159 ;; fine.
10160 (substitute* "setup.py"
10161 (("zope.interface>=5.2.0")
10162 "zope.interface>=5.1.0"))))
10163 (add-after 'unpack 'strip-xbr
10164 (lambda _
10165 ;; Strip new XBR feature which isn't available in Guix.
10166 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
10167 (native-inputs (list python-setuptools python-wheel))
10168 (propagated-inputs (list python-cbor2
10169 python-cryptography
10170 python-hyperlink
10171 python-msgpack
10172 python-py-ubjson
10173 python-twisted
10174 python-txaio
10175 python-ujson))
10176 (home-page "https://github.com/crossbario/autobahn-python/")
10177 (synopsis "Web Application Messaging Protocol implementation")
10178 (description "This package provides an implementation of the @dfn{Web Application
10179Messaging Protocol} (WAMP). WAMP connects components in distributed
10180applications using Publish and Subscribe (PubSub) and routed Remote Procedure
10181Calls (rRPC). It is ideal for distributed, multi-client and server applications
10182such as IoT applications or multi-user database-driven business applications.")
10183 (license license:expat)))
10184
10185(define-public python-ws4py
10186 (package
10187 (name "python-ws4py")
10188 (version "0.6.0")
10189 (source
10190 (origin
10191 (method git-fetch)
10192 (uri (git-reference
10193 (url "https://github.com/Lawouach/WebSocket-for-Python")
10194 (commit version)))
10195 (file-name (git-file-name name version))
10196 (sha256
10197 (base32
10198 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
10199 (build-system pyproject-build-system)
10200 (arguments
10201 (list
10202 #:phases
10203 #~(modify-phases %standard-phases
10204 (add-after 'unpack 'remove-cherrypy-support
10205 (lambda _
10206 (delete-file "ws4py/server/cherrypyserver.py")
10207 (delete-file "test/test_cherrypy.py"))))))
10208 (native-inputs (list python-setuptools python-pytest))
10209 (propagated-inputs
10210 (list python-gevent python-tornado))
10211 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
10212 (synopsis "WebSocket client and server library")
10213 (description
10214 "This package provides a WebSocket client and server library for Python.")
10215 (license license:bsd-3)))
10216
10217(define-public python-slowapi
10218 (package
10219 (name "python-slowapi")
10220 (version "0.1.9")
10221 (source
10222 (origin
10223 (method git-fetch)
10224 (uri (git-reference
10225 (url "https://github.com/laurents/slowapi")
10226 (commit (string-append "v" version))))
10227 (file-name (git-file-name name version))
10228 (sha256
10229 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
10230 (build-system pyproject-build-system)
10231 (arguments
10232 (list
10233 #:test-flags
10234 ;; These tests fail because the timestamp contains more decimal points
10235 ;; than expected, so a simple equality comparison fails.
10236 '(list "-k" (string-append "not test_headers_no_breach"
10237 " and not test_headers_breach"))))
10238 (propagated-inputs (list python-limits python-redis))
10239 (native-inputs
10240 (list python-fastapi
10241 python-hiro
10242 python-mock
10243 python-poetry-core
10244 python-pytest))
10245 (home-page "https://github.com/laurents/slowapi")
10246 (synopsis "Rate limiting extension for Starlette and Fastapi")
10247 (description
10248 "This package provides a rate limiting extension for Starlette and
10249Fastapi.")
10250 (license license:expat)))
10251
10252(define-public python-slugify
10253 (package
10254 (name "python-slugify")
10255 (version "8.0.4")
10256 (source
10257 (origin
10258 (method git-fetch)
10259 (uri (git-reference
10260 (url "https://github.com/un33k/python-slugify")
10261 (commit (string-append "v" version))))
10262 (file-name (git-file-name name version))
10263 (sha256
10264 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
10265 (build-system pyproject-build-system)
10266 (arguments (list #:test-backend #~'unittest))
10267 (native-inputs (list python-setuptools))
10268 (propagated-inputs (list python-unidecode python-text-unidecode))
10269 (home-page "https://github.com/un33k/python-slugify")
10270 (synopsis "Python Slugify application that handles Unicode")
10271 (description "This package provides a @command{slufigy} command and
10272library to create slugs from unicode strings while keeping it DRY.")
10273 (license license:expat)))
10274
10275(define-public python-branca
10276 (package
10277 (name "python-branca")
10278 (version "0.7.2")
10279 (source
10280 (origin
10281 (method git-fetch) ; no tests in PyPI
10282 (uri (git-reference
10283 (url "https://github.com/python-visualization/branca")
10284 (commit (string-append "v" version))))
10285 (file-name (git-file-name name version))
10286 (sha256
10287 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
10288 (build-system pyproject-build-system)
10289 (arguments
10290 ;; This file requires Selenium.
10291 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
10292 ;; This test passes but is very slow.
10293 "-k" "not test_color_brewer_extendability")))
10294 (propagated-inputs (list python-jinja2))
10295 (native-inputs
10296 (list python-numpy
10297 python-pytest
10298 python-setuptools
10299 python-setuptools-scm
10300 python-wheel))
10301 (home-page "https://github.com/python-visualization/branca")
10302 (synopsis "Generate complex HTML+JS pages with Python")
10303 (description "This library is a spinoff from @code{folium} that would host
10304the non-map-specific features. It can be used to generate HTML + JS.")
10305 (license license:expat)))
10306
10307(define-public python-tinycss2
10308 (package
10309 (name "python-tinycss2")
10310 (version "1.5.1")
10311 (source
10312 (origin
10313 (method git-fetch)
10314 (uri (git-reference
10315 (url "https://github.com/Kozea/tinycss2")
10316 (commit (string-append "v" version))
10317 (recursive? #true)))
10318 (file-name (git-file-name name version))
10319 (sha256
10320 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
10321 (build-system pyproject-build-system)
10322 (native-inputs
10323 (list python-flit-core
10324 python-pytest))
10325 (propagated-inputs
10326 (list python-webencodings))
10327 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
10328 (synopsis "Low-level CSS parser for Python")
10329 (description "@code{tinycss2} can parse strings, return Python objects
10330representing tokens and blocks, and generate CSS strings corresponding to
10331these objects.
10332
10333Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
10334grammar of CSS but doesn’t know specific rules, properties or values supported
10335in various CSS modules.")
10336 (license license:bsd-3)))
10337
10338(define-public python-tinyhtml5
10339 (package
10340 (name "python-tinyhtml5")
10341 (version "2.1.0")
10342 (source
10343 (origin
10344 (method git-fetch)
10345 (uri (git-reference
10346 (url "https://github.com/CourtBouillon/tinyhtml5")
10347 (commit version)))
10348 (file-name (git-file-name name version))
10349 (sha256
10350 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
10351 (build-system pyproject-build-system)
10352 (propagated-inputs
10353 (list python-webencodings))
10354 (native-inputs
10355 (list python-flit-core
10356 python-pytest))
10357 (home-page "https://github.com/CourtBouillon/tinyhtml5")
10358 (synopsis "Small HTML parser based on the WHATWG HTML specification")
10359 (description "This Python module is a HTML5 parser that transforms a
10360possibly malformed HTML document into an ElementTree tree. This module is a
10361simplified fork of html5lib.")
10362 (license license:expat)))
10363
10364(define-public python-cssselect2
10365 (package
10366 (name "python-cssselect2")
10367 (version "0.9.0")
10368 (source
10369 (origin
10370 (method git-fetch)
10371 (uri (git-reference
10372 (url "https://github.com/Kozea/cssselect2")
10373 (commit version)))
10374 (file-name (git-file-name name version))
10375 (sha256
10376 (base32 "1drvb83siq9s6dygyhab6kzk2v2ib6cv51ls42p4jrxs9q8cdiw0"))))
10377 (build-system pyproject-build-system)
10378 (propagated-inputs
10379 (list python-tinycss2))
10380 (native-inputs
10381 (list python-flit-core
10382 python-pytest))
10383 (home-page "https://doc.courtbouillon.org/cssselect2/stable/")
10384 (synopsis "CSS selectors for Python ElementTree")
10385 (description "@code{cssselect2} is a straightforward implementation of
10386CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
10387ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
10388
10389Unlike the Python package @code{cssselect}, it does not translate selectors to
10390XPath and therefore does not have all the correctness corner cases that are
10391hard or impossible to fix in cssselect.")
10392 (license license:bsd-3)))
10393
10394(define-public python-uvloop
10395 (package
10396 (name "python-uvloop")
10397 (version "0.22.1")
10398 (source
10399 (origin
10400 (method git-fetch)
10401 (uri (git-reference
10402 (url "https://github.com/MagicStack/uvloop")
10403 (commit (string-append "v" version))))
10404 (file-name (git-file-name name version))
10405 (sha256
10406 (base32 "1qbykwwz4ac3f7472g22z4i5rrd5kcr8hmxn5kswmja57j1nxlpl"))
10407 (modules '((guix build utils)))
10408 (snippet
10409 '(begin
10410 (delete-file-recursively "vendor")))))
10411 (build-system pyproject-build-system)
10412 (arguments
10413 (list
10414 ;; tests: 470 passed, 32 skipped, 8 deselected, 5 warnings, 104 subtests passed
10415 #:test-flags
10416 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
10417 ;; to get a meaningful idea about where.
10418 #~(list "--timeout=300"
10419 "--timeout-method=thread"
10420 "-k" (string-join
10421 (list
10422 ;; Timeout, because SIGINT cannot be sent to child.
10423 "not test_signals_sigint_pycode_continue"
10424 "test_signals_sigint_pycode_stop"
10425 "test_signals_sigint_uvcode"
10426 "test_signals_sigint_uvcode_two_loop_runs"
10427 #$@(if (target-riscv64?)
10428 `("test_renegotiation")
10429 `()))
10430 " and not "))
10431 #:phases
10432 #~(modify-phases %standard-phases
10433 (add-after 'unpack 'preparations
10434 (lambda _
10435 ;; Use packaged libuv.
10436 (substitute* "setup.py" (("self.use_system_libuv = False")
10437 "self.use_system_libuv = True"))
10438 ;; Replace hardcoded shell command.
10439 (substitute* "uvloop/loop.pyx"
10440 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))
10441 (substitute* "tests/test_process.py"
10442 (("'env'") (string-append "'" (which "env") "'")))))
10443 #$@(if (target-riscv64?)
10444 `((add-after 'unpack 'adjust-test-timeouts
10445 (lambda _
10446 (substitute* '("tests/test_tcp.py"
10447 "tests/test_unix.py")
10448 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
10449 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
10450 '())
10451 (add-before 'check 'pre-check
10452 (lambda* (#:key tests? #:allow-other-keys)
10453 (when tests?
10454 ;; Remove Python module, which conflicts with the installed
10455 ;; version, but lacks the built C module.
10456 (delete-file-recursively "uvloop")))))))
10457 (native-inputs
10458 (list python-aiohttp
10459 python-cython
10460 python-psutil
10461 python-pyopenssl
10462 python-pytest
10463 python-pytest-timeout
10464 python-setuptools))
10465 (inputs
10466 (list libuv))
10467 (home-page "https://github.com/MagicStack/uvloop")
10468 (synopsis "Fast implementation of asyncio event loop on top of libuv")
10469 (description
10470 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
10471event loop. It is implemented in Cython and uses libuv under the hood.")
10472 (license license:expat)))
10473
10474(define-public gunicorn
10475 (package
10476 (name "gunicorn")
10477 (version "25.3.0")
10478 (source
10479 (origin
10480 (method url-fetch)
10481 (uri (pypi-uri "gunicorn" version))
10482 (sha256
10483 (base32
10484 "12g85w735s4dszjfidi4vh786rfxsa5rd60il0fcvxknkwpinkpp"))))
10485 (outputs '("out" "doc"))
10486 (build-system pyproject-build-system)
10487 (arguments
10488 `(#:test-flags
10489 ;; Disable the geventlet tests because eventlet uses dnspython, which
10490 ;; does not work in the build container due to lack of /etc/resolv.conf
10491 '("--ignore=tests/workers/test_geventlet.py")
10492 #:phases (modify-phases %standard-phases
10493 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
10494 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
10495 ;; size. Override it to only add the essential entries.
10496 (replace 'wrap
10497 (lambda* (#:key native-inputs inputs outputs
10498 #:allow-other-keys)
10499 (let* ((out (assoc-ref outputs "out"))
10500 (python (assoc-ref (or native-inputs inputs)
10501 "python"))
10502 (sitedir (string-append "/lib/python"
10503 (python-version python)
10504 "/site-packages")))
10505 (wrap-program (string-append out "/bin/gunicorn")
10506 `("PYTHONPATH" ":" prefix
10507 ,(map (lambda (output)
10508 (string-append output sitedir))
10509 (list python out))))))))))
10510 (inputs (list bash-minimal))
10511 (native-inputs
10512 (list binutils ;for ctypes.util.find_library()
10513 python-eventlet
10514 python-gevent
10515 python-h2
10516 python-httpx
10517 python-pytest
10518 python-pytest-asyncio
10519 python-setuptools
10520 python-uvloop))
10521 (propagated-inputs
10522 (list python-packaging
10523 python-setuptools
10524 python-wheel))
10525 (home-page "https://gunicorn.org/")
10526 (synopsis "Python WSGI HTTP Server for UNIX")
10527 (description
10528 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
10529Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
10530Unicorn project. The Gunicorn server is broadly compatible with
10531various web frameworks, simply implemented, light on server resources,
10532and fairly speedy.")
10533 (license license:expat)))
10534
10535;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
10536;; its tests
10537(define-public gunicorn-bootstrap
10538 (package
10539 (inherit gunicorn)
10540 (name "gunicorn")
10541 (arguments `(#:tests? #f))
10542 (properties '((hidden? . #t)))
10543 (native-inputs `())))
10544
10545(define-public python-httptools
10546 (package
10547 (name "python-httptools")
10548 (version "0.7.1")
10549 (source
10550 (origin
10551 ;; PyPI tarball comes with a vendored http-parser and no tests.
10552 (method git-fetch)
10553 (uri (git-reference
10554 (url "https://github.com/MagicStack/httptools")
10555 (commit (string-append "v" version))))
10556 (file-name (git-file-name name version))
10557 (sha256
10558 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
10559 (modules '((guix build utils)))
10560 (snippet
10561 #~(begin (delete-file-recursively "vendor")))))
10562 (build-system pyproject-build-system)
10563 (arguments
10564 (list
10565 #:test-flags
10566 ;; XXX: AssertionError: HttpParserError not raised.
10567 #~(list "-k" "not test_parser_response_leninent_headers_1")
10568 #:phases
10569 #~(modify-phases %standard-phases
10570 (add-after 'unpack 'configure-build-ext
10571 (lambda _
10572 (with-output-to-file "setup.cfg"
10573 (lambda ()
10574 (display "\
10575[build_ext]
10576use_system_llhttp = true
10577use_system_http_parser = true
10578cython_always = true"))))))))
10579 (native-inputs
10580 (list python-cython
10581 python-pytest
10582 python-setuptools))
10583 (inputs
10584 (list http-parser
10585 llhttp))
10586 (home-page "https://github.com/MagicStack/httptools")
10587 (synopsis "Collection of framework independent HTTP protocol utils")
10588 (description
10589 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
10590 (license license:expat)))
10591
10592(define-public python-uvicorn
10593 (package
10594 (name "python-uvicorn")
10595 ;; 0.49.0 (2026-06-03), release does not work with python-websockets 16.0,
10596 ;; see: <https://github.com/Kludex/uvicorn/pull/2985>.
10597 (properties '((commit . "e8a31bca03254b8457c4c89596e310282cc33edc")
10598 (revision . "0")))
10599 (version (git-version "0.49.0"
10600 (assoc-ref properties 'revision)
10601 (assoc-ref properties 'commit)))
10602 (source
10603 (origin
10604 (method git-fetch)
10605 (uri (git-reference
10606 (url "https://github.com/encode/uvicorn")
10607 (commit (assoc-ref properties 'commit))))
10608 (file-name (git-file-name name version))
10609 (sha256
10610 (base32 "1vd1680a1k3jcdgc3jd5p3a6zmhz4r8bgzb7v7zhpxrkkdsisrxj"))))
10611 (build-system pyproject-build-system)
10612 (arguments
10613 (list
10614 #:test-flags
10615 #~(list "--ignore=tests/benchmarks"
10616 #$@(cond
10617 ((or (target-aarch64?)
10618 (target-riscv64?))
10619 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
10620 (#t '())))))
10621 (native-inputs
10622 (list nss-certs-for-test
10623 python-a2wsgi
10624 python-hatchling
10625 python-httpx-bootstrap
10626 python-pytest
10627 python-pytest-asyncio
10628 python-pytest-mock
10629 python-pytest-xdist
10630 python-requests
10631 python-trustme
10632 python-wsproto))
10633 (propagated-inputs
10634 (list python-a2wsgi
10635 python-click
10636 python-dotenv
10637 python-h11
10638 python-httptools
10639 python-pyyaml
10640 python-uvloop
10641 python-watchfiles
10642 python-websockets))
10643 (home-page "https://github.com/encode/uvicorn")
10644 (synopsis "Fast ASGI server implementation")
10645 (description
10646 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
10647and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
10648for HTTP/2 is planned.")
10649 (license license:bsd-3)))
10650
10651(define-public python-translation-finder
10652 (package
10653 (name "python-translation-finder")
10654 (version "2.22")
10655 (source
10656 (origin
10657 (method url-fetch)
10658 (uri (pypi-uri "translation_finder" version))
10659 (sha256
10660 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
10661 (build-system pyproject-build-system)
10662 (arguments
10663 (list
10664 #:test-flags
10665 ;; AssertionError: 31 != 30 : Mismatched count of results
10666 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
10667 (native-inputs
10668 (list python-pytest
10669 python-setuptools))
10670 (propagated-inputs
10671 (list python-charset-normalizer
10672 python-ruamel.yaml
10673 python-weblate-language-data))
10674 (home-page "https://weblate.org/")
10675 (synopsis "Translation file finder for Weblate")
10676 (description "This package provides a function to find translation file in
10677the source code of a project. It supports many translation file formats and
10678is part of the Weblate translation platform.")
10679 (license license:gpl3+)))
10680
10681(define-public python-gitlab
10682 (package
10683 (name "python-gitlab")
10684 (version "7.0.0")
10685 (source
10686 (origin
10687 (method git-fetch)
10688 (uri (git-reference
10689 (url "https://github.com/python-gitlab/python-gitlab")
10690 (commit (string-append "v" version))))
10691 (file-name (git-file-name name version))
10692 (sha256
10693 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
10694 (build-system pyproject-build-system)
10695 (arguments
10696 (list
10697 #:test-flags
10698 #~(list "--ignore=tests/unit/test_graphql.py"
10699 ;; XXX: Missing helper script.
10700 "-k" "not test_data_from_helper" "tests/unit")))
10701 (native-inputs
10702 (list python-anyio
10703 python-pytest
10704 python-responses
10705 python-setuptools))
10706 (propagated-inputs (list python-requests python-requests-toolbelt))
10707 (home-page "https://github.com/python-gitlab/python-gitlab")
10708 (synopsis "Interact with GitLab API")
10709 (description "This package provides an extended library for interacting
10710with GitLab instances through their API.")
10711 (license license:lgpl3+)))
10712
10713(define-public python-path-and-address
10714 (package
10715 (name "python-path-and-address")
10716 (version "2.0.1")
10717 (source
10718 (origin
10719 (method git-fetch)
10720 (uri (git-reference
10721 (url "https://github.com/joeyespo/path-and-address")
10722 (commit (string-append "v" version))))
10723 (file-name (git-file-name name version))
10724 (sha256
10725 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
10726 (build-system pyproject-build-system)
10727 (native-inputs
10728 (list python-pytest python-setuptools))
10729 (home-page "https://github.com/joeyespo/path-and-address")
10730 (synopsis "Functions for command-line server tools used by humans")
10731 (description "Path-and-address resolves ambiguities of command-line
10732interfaces, inferring which argument is the path, and which is the address.")
10733 (license license:expat)))
10734
10735;; XXX: This project missed maintainer upstream, see
10736;; <https://github.com/joeyespo/grip/issues/387>.
10737;; Consider to remove if it keeps failing to build.
10738(define-public grip
10739 (package
10740 (name "grip")
10741 (version "4.6.1")
10742 (source
10743 (origin
10744 (method git-fetch)
10745 (uri (git-reference
10746 (url "https://github.com/joeyespo/grip")
10747 (commit (string-append "v" version))))
10748 (file-name (git-file-name name version))
10749 (sha256
10750 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
10751 (build-system pyproject-build-system)
10752 (arguments
10753 (list
10754 #:test-flags
10755 ;; All tests fail requiring network access, ignore the whole file.
10756 #~(list "--ignore=tests/test_github.py")
10757 #:phases
10758 #~(modify-phases %standard-phases
10759 ;; This fixes the removal of `charset` attribute of requests from
10760 ;; Werkzeug 2.3.0.
10761 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
10762 (add-after 'unpack 'fix-response-encoding
10763 (lambda _
10764 (substitute* "grip/app.py"
10765 (("response.charset")
10766 "getattr(response, 'charset', 'utf-8')")))))))
10767 (native-inputs
10768 (list nss-certs-for-test
10769 python-pytest
10770 python-responses
10771 python-setuptools
10772 python-wheel))
10773 (propagated-inputs
10774 (list python-docopt
10775 python-flask
10776 python-markdown
10777 python-path-and-address
10778 python-pygments
10779 python-requests))
10780 (home-page "https://github.com/joeyespo/grip")
10781 (synopsis "Preview Markdown files using the GitHub API")
10782 (description
10783 "Grip is a command-line server application written in Python that uses
10784the GitHub Markdown API to render a local Markdown file. The styles and
10785rendering come directly from GitHub, so you'll know exactly how it will
10786appear. Changes you make to the file will be instantly reflected in the
10787browser without requiring a page refresh.")
10788 (license license:expat)))
10789
10790(define-public python-port-for
10791 (package
10792 (name "python-port-for")
10793 (version "0.7.4")
10794 (source
10795 (origin
10796 (method url-fetch)
10797 (uri (pypi-uri "port_for" version))
10798 (sha256
10799 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
10800 (build-system pyproject-build-system)
10801 (propagated-inputs
10802 (list python-urllib3))
10803 (native-inputs
10804 (list python-pytest python-setuptools python-wheel))
10805 (home-page "https://github.com/kmike/port-for/")
10806 (synopsis "TCP localhost port finder and association manager")
10807 (description
10808 "This package provides a utility that helps with local TCP ports
10809management. It can find an unused TCP localhost port and remember the
10810association.")
10811 (license license:expat)))
10812
10813(define-public python-livereload
10814 (package
10815 (name "python-livereload")
10816 (version "2.7.1")
10817 (source
10818 (origin
10819 (method git-fetch)
10820 (uri (git-reference
10821 (url "https://github.com/lepture/python-livereload")
10822 (commit (string-append "v" version))))
10823 (file-name (git-file-name name version))
10824 (sha256
10825 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
10826 (build-system pyproject-build-system)
10827 (arguments (list #:test-backend #~'unittest))
10828 (native-inputs (list python-django python-setuptools))
10829 (propagated-inputs (list python-tornado))
10830 (home-page "https://github.com/lepture/python-livereload")
10831 (synopsis "Python LiveReload")
10832 (description
10833 "Python LiveReload provides a command line utility, @command{livereload},
10834for starting a web server in a directory. It can trigger arbitrary commands
10835and serve updated contents upon changes to the directory.")
10836 (license license:bsd-3)))
10837
10838(define-public python-vf-1
10839 (package
10840 (name "python-vf-1")
10841 (version "1.0.0")
10842 (source
10843 (origin
10844 (method git-fetch)
10845 (uri (git-reference
10846 (url "https://git.sr.ht/~solderpunk/VF-1")
10847 (commit (string-append "v" version))))
10848 (file-name (git-file-name name version))
10849 (sha256
10850 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
10851 (build-system pyproject-build-system)
10852 (arguments (list #:tests? #f)) ; No tests.
10853 (native-inputs (list python-setuptools))
10854 (home-page "https://git.sr.ht/~solderpunk/VF-1")
10855 (synopsis "Command line gopher client")
10856 (description "@code{VF-1} is a command line gopher client with
10857@acronym{TLS, Transport Layer Security} support.")
10858 (license license:bsd-2)))
10859
10860(define-public python-httpcore
10861 (package
10862 (name "python-httpcore")
10863 (version "1.0.9")
10864 (source
10865 (origin
10866 ;; PyPI tarball does not contain tests.
10867 (method git-fetch)
10868 (uri (git-reference
10869 (url "https://github.com/encode/httpcore")
10870 (commit version)))
10871 (file-name (git-file-name name version))
10872 (sha256
10873 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
10874 (build-system pyproject-build-system)
10875 (native-inputs
10876 (list nss-certs-for-test
10877 python-hatch-fancy-pypi-readme
10878 python-hatchling
10879 python-pytest
10880 python-pytest-asyncio
10881 python-pytest-httpbin
10882 python-pytest-trio
10883 python-uvicorn
10884 python-trustme))
10885 (propagated-inputs
10886 (list python-anyio
10887 python-certifi
10888 python-h11
10889 python-h2
10890 python-sniffio
10891 python-socksio
10892 python-trio
10893 python-trio-typing))
10894 (home-page "https://github.com/encode/httpcore")
10895 (synopsis "Minimal, low-level HTTP client")
10896 (description
10897 "HTTP Core provides a minimal and low-level HTTP client, which does one
10898thing only: send HTTP requests.
10899
10900Some things HTTP Core does do:
10901
10902@itemize
10903@item Sending HTTP requests.
10904@item Provides both sync and async interfaces.
10905@item Supports HTTP/1.1 and HTTP/2.
10906@item Async backend support for asyncio and trio.
10907@item Automatic connection pooling.
10908@item HTTP(S) proxy support.
10909@end itemize")
10910 (license license:bsd-3)))
10911
10912;;; Variant used to break a cycle between python-httpx and python-uvicorn.
10913(define-public python-httpcore-bootstrap
10914 (hidden-package
10915 (package/inherit python-httpcore
10916 (name "python-httpcore-bootstrap")
10917 (arguments (list #:tests? #f))
10918 (native-inputs (list python-hatchling
10919 python-hatch-fancy-pypi-readme)))))
10920
10921(define-public python-httpx
10922 (package
10923 (name "python-httpx")
10924 (version "0.28.1")
10925 (source
10926 (origin
10927 ;; PyPI tarball does not contain tests.
10928 (method git-fetch)
10929 (uri (git-reference
10930 (url "https://github.com/encode/httpx")
10931 (commit version)))
10932 (file-name (git-file-name name version))
10933 (sha256
10934 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
10935 (build-system pyproject-build-system)
10936 (arguments
10937 (list
10938 ;; 1401 passed, 1 skipped, 5 deselected
10939 #:test-flags
10940 #~(list "-o" "asyncio_mode=auto"
10941 ;; CLI tests are broken.
10942 "--ignore=tests/test_main.py"
10943 "-k" (string-join
10944 ;; These tests try to open an outgoing connection.
10945 (list "not test_async_proxy_close"
10946 "test_sync_proxy_clos"
10947 "test_write_timeout")
10948 " and not "))))
10949 (native-inputs
10950 (list nss-certs-for-test
10951 python-chardet
10952 python-cryptography
10953 python-hatch-fancy-pypi-readme
10954 python-hatchling
10955 python-pytest
10956 python-pytest-asyncio
10957 python-pytest-trio
10958 python-setuptools
10959 python-trio
10960 python-trustme
10961 python-uvicorn))
10962 (propagated-inputs
10963 (list python-anyio
10964 python-certifi
10965 python-httpcore
10966 python-idna
10967 ;; [brotli]
10968 python-brotli
10969 ;; [http2]
10970 python-h2
10971 ;; [socks]
10972 python-socksio
10973 ;; [zstd]
10974 python-zstandard
10975 ;; For trio, see:
10976 ;; <https://github.com/python-trio/trio/issues/2802>.
10977 python-sniffio))
10978 (home-page "https://www.python-httpx.org/")
10979 (synopsis "HTTP client for Python")
10980 (description
10981 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
10982and async APIs, and support for both HTTP/1.1 and HTTP/2.
10983
10984HTTPX builds on the well-established usability of requests, and gives you:
10985
10986@itemize
10987@item A broadly requests-compatible API.
10988@item Standard synchronous interface, but with async support if you need it.
10989@item HTTP/1.1 and HTTP/2 support.
10990@item Ability to make requests directly to WSGI applications or ASGI applications.
10991@item Strict timeouts everywhere.
10992@item Fully type annotated.
10993@item 99% test coverage.
10994@end itemize
10995
10996Plus all the standard features of requests:
10997
10998@itemize
10999@item International Domains and URLs
11000@item Keep-Alive & Connection Pooling
11001@item Sessions with Cookie Persistence
11002@item Browser-style SSL Verification
11003@item Basic/Digest Authentication
11004@item Elegant Key/Value Cookies
11005@item Automatic Decompression
11006@item Automatic Content Decoding
11007@item Unicode Response Bodies
11008@item Multipart File Uploads
11009@item HTTP(S) Proxy Support
11010@item Connection Timeouts
11011@item Streaming Downloads
11012@item .netrc Support
11013@item Chunked Requests
11014@end itemize")
11015 (license license:bsd-3)))
11016
11017;;; Variant used to break a cycle with python-uvicorn.
11018(define-public python-httpx-bootstrap
11019 (hidden-package
11020 (package/inherit python-httpx
11021 (name "python-httpx-bootstrap")
11022 (arguments (list #:tests? #f))
11023 (native-inputs
11024 (list python-hatchling
11025 python-hatch-fancy-pypi-readme))
11026 (propagated-inputs
11027 (modify-inputs propagated-inputs
11028 (replace "python-httpcore" python-httpcore-bootstrap))))))
11029
11030(define-public python-httpx-sse
11031 (package
11032 (name "python-httpx-sse")
11033 (version "0.4.3")
11034 (source
11035 (origin
11036 (method git-fetch)
11037 (uri (git-reference
11038 (url "https://github.com/florimondmanca/httpx-sse")
11039 (commit version)))
11040 (file-name (git-file-name name version))
11041 (sha256
11042 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
11043 (build-system pyproject-build-system)
11044 (native-inputs
11045 (list python-pytest
11046 python-pytest-asyncio
11047 python-setuptools
11048 python-setuptools-scm
11049 python-sse-starlette))
11050 (propagated-inputs (list python-httpx))
11051 (home-page "https://github.com/florimondmanca/httpx-sse")
11052 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
11053 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
11054 (license license:expat)))
11055
11056(define-public python-httpx-ws
11057 (package
11058 (name "python-httpx-ws")
11059 (version "0.9.0")
11060 (source
11061 (origin
11062 (method git-fetch)
11063 (uri (git-reference
11064 (url "https://github.com/frankie567/httpx-ws")
11065 (commit (string-append "v" version))))
11066 (file-name (git-file-name name version))
11067 (sha256
11068 (base32 "1hin6fndvfnx3mjgy30x0ghgjalikxavyj24klcknnly9sqzg83v"))))
11069 (build-system pyproject-build-system)
11070 (propagated-inputs
11071 (list python-anyio
11072 python-httpcore
11073 python-httpx
11074 python-wsproto))
11075 (native-inputs
11076 (list nss-certs-for-test
11077 python-hatch-regex-commit
11078 python-hatchling
11079 python-pytest
11080 python-pytest-cov
11081 python-starlette
11082 python-uvicorn))
11083 (home-page "https://github.com/frankie567/httpx-ws")
11084 (synopsis "WebSockets support for HTTPX")
11085 (description "This package provides @code{WebSockets} support for HTTPX.")
11086 (license license:expat)))
11087
11088(define-public python-wsgiprox
11089 (package
11090 (name "python-wsgiprox")
11091 (version "1.5.2")
11092 (source
11093 (origin
11094 (method url-fetch)
11095 (uri (pypi-uri "wsgiprox" version))
11096 (sha256
11097 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
11098 (build-system pyproject-build-system)
11099 (arguments
11100 ;; The test suite hangs (see:
11101 ;; https://github.com/webrecorder/wsgiprox/issues/6).
11102 (list
11103 #:tests? #f
11104 #:phases
11105 #~(modify-phases %standard-phases
11106 (add-after 'unpack 'fix-pytest-argument
11107 (lambda _
11108 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
11109 (substitute* "setup.py"
11110 (("--doctest-module")
11111 "--doctest-modules")))))))
11112 (propagated-inputs
11113 (list python-certauth
11114 python-gevent
11115 python-six
11116 python-websocket-client))
11117 (native-inputs
11118 (list python-mock python-waitress python-setuptools))
11119 (home-page "https://github.com/webrecorder/wsgiprox")
11120 (synopsis "HTTP/S proxy with WebSockets over WSGI")
11121 (description
11122 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
11123middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
11124The library accepts HTTP and HTTPS proxy connections, and routes them to a
11125designated prefix.")
11126 (license license:asl2.0)))
11127
11128(define-public python-warcio
11129 ;; The PyPI release is missing some test support files (see:
11130 ;; https://github.com/webrecorder/warcio/issues/132).
11131 (package
11132 (name "python-warcio")
11133 (version "1.8.1")
11134 (source
11135 (origin
11136 (method git-fetch)
11137 (uri (git-reference
11138 (url "https://github.com/webrecorder/warcio")
11139 (commit (string-append "v" version))))
11140 (file-name (git-file-name name version))
11141 (sha256
11142 (base32
11143 "19wwg7zmx33c942dbahdkng1byiwr4c9cd1ayrsh13f818n17zps"))))
11144 (build-system pyproject-build-system)
11145 (arguments
11146 (list
11147 #:test-flags ; These tests fail due to networking requirements.
11148 '(list "-k" (format #f "not ~a"
11149 (string-join
11150 '("test_post_chunked"
11151 "test_remote"
11152 "test_capture_http_proxy"
11153 "test_capture_https_proxy"
11154 "test_capture_https_proxy_same_session")
11155 " and not "))
11156 ; The following test requires the hookdns package.
11157 "--ignore=test/test_capture_http_proxy.py")))
11158 (native-inputs
11159 (list python-httpbin
11160 python-pytest
11161 python-requests
11162 python-setuptools
11163 python-wsgiprox))
11164 (home-page "https://github.com/webrecorder/warcio")
11165 (synopsis "Streaming web archival archive (WARC) library")
11166 (description "warcio is a Python library to read and write the WARC format
11167commonly used in Web archives. It is designed for fast, low-level access to
11168web archival content, oriented around a stream of WARC records rather than
11169files.")
11170 (license license:asl2.0)))
11171
11172(define-public python-websockets
11173 (package
11174 (name "python-websockets")
11175 (version "16.0")
11176 (source
11177 (origin
11178 (method git-fetch)
11179 (uri (git-reference
11180 (url "https://github.com/aaugustin/websockets")
11181 (commit version)))
11182 (file-name (git-file-name name version))
11183 (sha256
11184 (base32
11185 "1f71siwmjxn8b671x8lkkxx56q3xm99f2kmjqpzfcv3air9n94gg"))))
11186 (build-system pyproject-build-system)
11187 (arguments
11188 (list #:test-backend #~'unittest
11189 #:phases
11190 #~(modify-phases %standard-phases
11191 (add-before 'check 'extend-test-timeout
11192 (lambda _
11193 ;; Some architectures need an even longer timeout. Make it
11194 ;; long enough that it should never fail due to timeout.
11195 #$@(if (target-riscv64?)
11196 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
11197 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
11198 (native-inputs
11199 (list python-setuptools))
11200 (home-page "https://github.com/aaugustin/websockets")
11201 (synopsis
11202 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
11203 (description
11204 "@code{websockets} is a library for building WebSocket servers and clients
11205in Python with a focus on correctness and simplicity.
11206
11207Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
11208it provides an elegant coroutine-based API.")
11209 (license license:bsd-3)))
11210
11211(define-public selenium-manager
11212 (package
11213 (name "selenium-manager")
11214 (version "4.34.2")
11215 (source
11216 (origin
11217 (method git-fetch)
11218 (uri (git-reference
11219 (url "https://github.com/SeleniumHQ/selenium")
11220 (commit (string-append "selenium-" version "-python"))))
11221 (file-name (git-file-name name version))
11222 (sha256
11223 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
11224 (build-system cargo-build-system)
11225 (arguments
11226 (list
11227 ;; XXX: Almost all tests require either browsers or network access.
11228 #:tests? #f
11229 #:install-source? #f ; Most likely intended as a leaf.
11230 #:phases
11231 #~(modify-phases %standard-phases
11232 (add-after 'unpack 'chdir
11233 (lambda _
11234 (chdir "rust"))))))
11235 (native-inputs (list pkg-config))
11236 (inputs (cons* (list zstd "lib") xz
11237 (cargo-inputs 'selenium-manager)))
11238 (home-page "https://www.selenium.dev")
11239 (synopsis "CLI tool to manager the browser test infrastructure")
11240 (description
11241 "Selenium simplifies web browser automation. It specifically provides
11242infrastructure for the W3C WebDriver specification — a platform and
11243language-neutral coding interface compatible with all major web browsers.
11244
11245Selenium Manager is a CLI tool that automatically manages the browser/driver
11246infrastructure required by Selenium.")
11247 (license license:asl2.0)))
11248
11249(define-public python-selenium
11250 (package/inherit selenium-manager
11251 (name "python-selenium")
11252 (build-system pyproject-build-system)
11253 (arguments
11254 (list
11255 ;; XXX: Disable failing tests.
11256 #:test-flags
11257 #~(list "--ignore-glob=test/selenium/webdriver/*"
11258 ;; Probably requires those.
11259 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
11260 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
11261 ;; XXX: SSL certificates access.
11262 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
11263 "-k" "not test_missing_cdp_devtools_version_falls_back")
11264 #:phases
11265 #~(modify-phases %standard-phases
11266 (add-after 'unpack 'chdir
11267 (lambda _
11268 (chdir "py")))
11269 (add-after 'chdir 'inject-selenium-manager-binary
11270 (lambda* (#:key inputs #:allow-other-keys)
11271 (substitute* "selenium/webdriver/common/selenium_manager.py"
11272 (("compiled_path = Path.*")
11273 (format #f "return Path(~s)~%"
11274 (search-input-file inputs "bin/selenium-manager"))))
11275 (substitute* "pyproject.toml"
11276 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
11277 "")
11278 (("target = \"selenium\\.webdriver\\.common.*\"")
11279 ""))))
11280 (add-after 'chdir 'relax-requirements
11281 (lambda _
11282 (substitute* "pyproject.toml"
11283 (("\"(typing_extensions|trio|urllib3.*)~=.*\"," _ target)
11284 (format #f "~s," target))))))))
11285 (propagated-inputs (list python-certifi
11286 python-trio
11287 python-trio-websocket
11288 python-typing-extensions
11289 python-urllib3
11290 python-websocket-client))
11291 (inputs (list selenium-manager))
11292 (native-inputs (list python-filetype
11293 python-pytest
11294 python-pytest-mock
11295 python-pytest-trio
11296 python-setuptools
11297 python-setuptools-rust))
11298 (synopsis "Python bindings for Selenium")
11299 (description
11300 "Selenium enables web browser automation. It specifically provides
11301infrastructure for the W3C WebDriver specification — a platform and
11302language-neutral coding interface compatible with all major web browsers.")))
11303
11304(define-public python-rapidjson
11305 (package
11306 (name "python-rapidjson")
11307 (version "1.23")
11308 (source
11309 (origin
11310 (method git-fetch)
11311 (uri (git-reference
11312 (url "https://github.com/python-rapidjson/python-rapidjson")
11313 (commit (string-append "v" version))))
11314 (file-name (git-file-name name version))
11315 (sha256
11316 (base32 "0ajf919gg3qmi68jb0m6v80al2n65cn2ac36qz46s0h6zh92cl86"))
11317 (modules '((guix build utils)))
11318 (snippet
11319 '(delete-file-recursively "rapidjson"))))
11320 (build-system pyproject-build-system)
11321 (arguments
11322 (list
11323 #:test-flags '(list "tests")
11324 #:phases
11325 #~(modify-phases %standard-phases
11326 ;; We cannot seem to use #:configure-flags with the
11327 ;; pyproject-build-system to override rj_include_dir.
11328 (add-after 'unpack 'override-rapidjson-sources
11329 (lambda _
11330 (substitute* "setup.py"
11331 (("^rj_include_dir =.*")
11332 (string-append "rj_include_dir = '"
11333 #$(this-package-native-input "rapidjson")
11334 "/include/rapidjson" "'"))
11335 (("if not os.path.isdir.*") "if False:")))))))
11336 (native-inputs
11337 (list rapidjson python-pytest python-pytz python-setuptools))
11338 (home-page "https://github.com/python-rapidjson/python-rapidjson")
11339 (synopsis "Python wrapper around rapidjson")
11340 (description "This package provides a python wrapper around rapidjson.")
11341 (license license:expat)))
11342
11343(define-public python-venusian
11344 (package
11345 (name "python-venusian")
11346 (version "3.1.1")
11347 (source
11348 (origin
11349 (method url-fetch)
11350 (uri (pypi-uri "venusian" version))
11351 (sha256
11352 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
11353 (build-system pyproject-build-system)
11354 (native-inputs
11355 (list python-pytest
11356 python-setuptools))
11357 (home-page "https://docs.pylonsproject.org/projects/venusian")
11358 (synopsis "Library for deferring decorator actions")
11359 (description
11360 "Venusian is a library which allows framework authors to defer decorator
11361actions. Instead of taking actions when a function (or class) decorator is
11362executed at import time, you can defer the action usually taken by the
11363decorator until a separate scan phase.")
11364 (license license:repoze)))
11365
11366(define-public python-zope-deprecation
11367 (package
11368 (name "python-zope-deprecation")
11369 (version "6.0")
11370 (source (origin
11371 (method url-fetch)
11372 (uri (pypi-uri "zope_deprecation" version))
11373 (sha256
11374 (base32
11375 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
11376 (build-system pyproject-build-system)
11377 (arguments
11378 (list #:tests? #f)) ;no tests in PyPI
11379 (native-inputs
11380 (list python-setuptools))
11381 (home-page "https://zopedeprecation.readthedocs.io/")
11382 (synopsis "Function for marking deprecations")
11383 (description "The @code{zope.deprecation} module provides a function for
11384marking modules, classes, functions, methods and properties as deprecated,
11385displaying warnings when usaged in application code.")
11386 (license license:zpl2.1)))
11387
11388(define-public python-translationstring
11389 (package
11390 (name "python-translationstring")
11391 (version "1.4")
11392 (source (origin
11393 (method url-fetch)
11394 (uri (pypi-uri "translationstring" version))
11395 (sha256
11396 (base32
11397 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
11398 (build-system pyproject-build-system)
11399 (native-inputs
11400 (list python-pytest
11401 python-setuptools))
11402 (home-page "https://docs.pylonsproject.org/projects/translationstring")
11403 (synopsis "Internationalization tooling for the Pylons project")
11404 (description "This package provides a library used by various Pylons
11405project packages for internationalization (i18n) duties related to
11406translation.")
11407 (license license:repoze)))
11408
11409(define-public python-plaster
11410 (package
11411 (name "python-plaster")
11412 (version "1.1.2")
11413 (source (origin
11414 (method url-fetch)
11415 (uri (pypi-uri "plaster" version))
11416 (sha256
11417 (base32
11418 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
11419 (build-system pyproject-build-system)
11420 (native-inputs
11421 (list python-pytest
11422 python-setuptools))
11423 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
11424 (synopsis "Configuration loader for multiple config file formats")
11425 (description
11426 "Plaster is a loader interface around multiple config file formats. It
11427exists to define a common API for applications to use when they wish to load
11428configuration. The library itself does not aim to handle anything except a
11429basic API that applications may use to find and load configuration settings.
11430Any specific constraints should be implemented in a pluggable loader which can
11431be registered via an entrypoint.")
11432 (license license:repoze)))
11433
11434(define-public python-plaster-pastedeploy
11435 (package
11436 (name "python-plaster-pastedeploy")
11437 (version "1.0.1")
11438 (source (origin
11439 (method url-fetch)
11440 (uri (pypi-uri "plaster_pastedeploy" version))
11441 (sha256
11442 (base32
11443 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
11444 (build-system pyproject-build-system)
11445 (native-inputs
11446 (list python-pytest
11447 python-setuptools))
11448 (propagated-inputs
11449 (list python-plaster python-pastedeploy))
11450 (home-page "https://github.com/Pylons/plaster_pastedeploy")
11451 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
11452 (description
11453 "This plugin for @code{python-plaster} adds support for PasteDeploy
11454syntax, it provides a plaster @code{Loader} object that can parse ini files
11455according to the standard set by PasteDeploy")
11456 (license license:expat)))
11457
11458(define-public python-hupper
11459 (package
11460 (name "python-hupper")
11461 (version "1.12.1")
11462 (source
11463 (origin
11464 (method url-fetch)
11465 (uri (pypi-uri "hupper" version))
11466 (sha256
11467 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
11468 (build-system pyproject-build-system)
11469 (arguments
11470 (list
11471 ;; RuntimeError: timeout waiting for change to
11472 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
11473 #:test-flags #~(list "--ignore=tests/test_it.py")))
11474 (native-inputs
11475 (list python-pytest python-setuptools python-wheel))
11476 (propagated-inputs
11477 (list python-watchdog))
11478 (home-page "https://readthedocs.org/projects/hupper")
11479 (synopsis "Integrated process monitor tracking changes to imported Python files")
11480 (description
11481 "Hupper is an integrated process monitor that will track changes to any
11482imported Python files in sys.modules as well as custom paths. When files are
11483changed the process is restarted.")
11484 (license license:expat)))
11485
11486(define-public python-pyowm
11487 (package
11488 (name "python-pyowm")
11489 (version "3.3.0")
11490 (source
11491 (origin
11492 (method git-fetch)
11493 (uri (git-reference
11494 (url "https://github.com/csparpa/pyowm")
11495 (commit version)))
11496 (file-name (git-file-name name version))
11497 (sha256
11498 (base32
11499 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
11500 (build-system pyproject-build-system)
11501 (arguments (list #:test-flags #~(list "tests/unit")))
11502 (native-inputs (list python-pytest python-setuptools python-wheel))
11503 (propagated-inputs
11504 (list python-geojson-for-pyowm
11505 python-pysocks
11506 python-requests))
11507 (home-page "https://github.com/csparpa/pyowm")
11508 (synopsis "Python wrapper around OpenWeatherMap web APIs")
11509 (description
11510 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
11511 (license license:expat)))
11512
11513(define-public python-pyramid
11514 (package
11515 (name "python-pyramid")
11516 (version "2.1")
11517 (source
11518 (origin
11519 (method git-fetch)
11520 (uri (git-reference
11521 (url "https://github.com/Pylons/pyramid")
11522 (commit version)))
11523 (file-name (git-file-name name version))
11524 (sha256
11525 (base32 "0my03b81009w9zqx5cdn9qixh0jah49hr0379n98kx2j3b8cfk1p"))))
11526 (build-system pyproject-build-system)
11527 (native-inputs
11528 (list python-pytest
11529 python-setuptools
11530 python-webtest
11531 python-zope-component))
11532 (propagated-inputs
11533 (list python-hupper
11534 python-plaster
11535 python-plaster-pastedeploy
11536 python-translationstring
11537 python-venusian
11538 python-webob
11539 python-zope-deprecation
11540 python-zope-interface))
11541 (home-page "https://trypyramid.com/")
11542 (synopsis "Python web-framework suitable for small and large sites")
11543 (description
11544 "Pyramid makes it easy to write web applications. From minimal
11545request/response web apps to larger, grown applications.")
11546 (license license:repoze)))
11547
11548(define-public python-pyramid-chameleon
11549 ;; PyPI lacks a fresh release, use the latest commit associated with
11550 ;; unrleased version, see:
11551 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
11552 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
11553 (revision "0"))
11554 (package
11555 (name "python-pyramid-chameleon")
11556 (version (git-version "0.4.dev0" revision commit))
11557 (source
11558 (origin
11559 (method git-fetch)
11560 (uri (git-reference
11561 (url "https://github.com/Pylons/pyramid_chameleon")
11562 (commit commit)))
11563 (file-name (git-file-name name version))
11564 (sha256
11565 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
11566 (build-system pyproject-build-system)
11567 (native-inputs
11568 (list python-pytest
11569 python-setuptools))
11570 (propagated-inputs
11571 (list python-chameleon
11572 python-pyramid))
11573 (home-page "https://github.com/Pylons/pyramid_chameleon")
11574 (synopsis "Chameleon template compiler for pyramid")
11575 (description
11576 "These package provides bindings for the Chameleon templating system
11577 for the Pyramid web framework.")
11578 (license license:repoze))))
11579
11580(define-public python-pyramid-debugtoolbar
11581 (package
11582 (name "python-pyramid-debugtoolbar")
11583 (version "4.12.1")
11584 (source
11585 (origin
11586 (method git-fetch)
11587 (uri (git-reference
11588 (url "https://github.com/Pylons/pyramid_debugtoolbar")
11589 (commit version)))
11590 (file-name (git-file-name name version))
11591 (sha256
11592 (base32 "0kalb5rsrlcz62zv9a39kp28mvwg9j6gymvzxbybdnvk51v9if56"))))
11593 (build-system pyproject-build-system)
11594 (arguments
11595 (list
11596 #:test-flags
11597 ;; Large diff assertion not equal faileurs.
11598 #~(list #$@(map (lambda (test)
11599 (string-append "--deselect=tests"
11600 "/test_panels/test_sqla.py::" test))
11601 (list "TestSimpleSelect::test_panel"
11602 "TestTransactionCommit::test_panel"
11603 "TestTransactionRollback::test_panel")))))
11604 (native-inputs
11605 (list python-pytest
11606 python-setuptools
11607 python-webtest))
11608 (propagated-inputs
11609 (list python-pyramid
11610 python-pyramid-chameleon
11611 python-pyramid-jinja2
11612 python-pyramid-mako
11613 python-selenium
11614 python-sqlalchemy
11615 python-waitress))
11616 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
11617 (synopsis "Pyramid debug toolbar")
11618 (description
11619 "This package provides an interactive HTML debugger for Pyramid
11620application development.")
11621 (license license:bsd-3)))
11622
11623(define-public python-pyramid-jinja2
11624 (package
11625 (name "python-pyramid-jinja2")
11626 (version "2.10.1")
11627 (source
11628 (origin
11629 (method url-fetch)
11630 (uri (pypi-uri "pyramid_jinja2" version))
11631 (sha256
11632 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
11633 (build-system pyproject-build-system)
11634 (arguments
11635 (list
11636 #:test-flags
11637 ;; Two tests failed with assertion not equal.
11638 #~(list "-k" "not test_it_relative_to_package and not test_options")))
11639 (native-inputs
11640 (list python-pytest
11641 python-setuptools
11642 python-webtest))
11643 (propagated-inputs
11644 (list python-jinja2
11645 python-markupsafe
11646 python-pyramid
11647 python-zope-deprecation))
11648 (home-page "https://github.com/Pylons/pyramid_jinja2")
11649 (synopsis "Jinja2 template bindings for the Pyramid web framework")
11650 (description "This package provides Jinja2 template bindings for the
11651Pyramid web framework.")
11652 (license license:repoze)))
11653
11654(define-public python-pyramid-mako
11655 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
11656 ;; master, us the latest commit for now.
11657 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
11658 (revision "0"))
11659 (package
11660 (name "python-pyramid-mako")
11661 (version (git-version "1.1.0" revision commit))
11662 (source
11663 (origin
11664 (method git-fetch)
11665 (uri (git-reference
11666 (url "https://github.com/Pylons/pyramid_mako")
11667 (commit commit)))
11668 (file-name (git-file-name name version))
11669 (sha256
11670 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
11671 (build-system pyproject-build-system)
11672 (native-inputs
11673 (list python-pytest
11674 python-setuptools))
11675 (propagated-inputs
11676 (list python-mako
11677 python-pyramid))
11678 (home-page "https://github.com/Pylons/pyramid_mako")
11679 (synopsis "Mako template bindings for the Pyramid web framework")
11680 (description
11681 "This package provides Mako template bindings for the Pyramid web
11682framework.")
11683 (license license:repoze))))
11684
11685(define-public python-pyramid-retry
11686 (package
11687 (name "python-pyramid-retry")
11688 (version "2.1.1")
11689 (source
11690 (origin
11691 (method url-fetch)
11692 (uri (pypi-uri "pyramid_retry" version))
11693 (sha256
11694 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
11695 (build-system pyproject-build-system)
11696 (native-inputs
11697 (list python-pytest
11698 python-setuptools
11699 python-webtest))
11700 (propagated-inputs
11701 (list python-pyramid
11702 python-zope-interface))
11703 (home-page "https://github.com/Pylons/pyramid_retry")
11704 (synopsis "Pyramid execution policy supporting retrying failed requests")
11705 (description
11706 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
11707and can retry them a configurable number of times under certain \"retryable\"
11708error conditions before indicating a failure to the client.")
11709 (license license:expat)))
11710
11711(define-public python-pyramid-tm
11712 (package
11713 (name "python-pyramid-tm")
11714 (version "2.6")
11715 (source
11716 (origin
11717 (method url-fetch)
11718 (uri (pypi-uri "pyramid_tm" version))
11719 (sha256
11720 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
11721 (build-system pyproject-build-system)
11722 (native-inputs
11723 (list python-pytest
11724 python-setuptools
11725 python-webtest))
11726 (propagated-inputs
11727 (list python-pyramid
11728 python-transaction))
11729 (home-page "https://github.com/Pylons/pyramid_tm")
11730 (synopsis "Centralized transaction management for Pyramid")
11731 (description
11732 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
11733active @url{https://pypi.org/project/transaction/, transaction} as provided by
11734the Python transaction package.")
11735 (license license:repoze)))
11736
11737(define-public python-random-user-agent
11738 (package
11739 (name "python-random-user-agent")
11740 (version "1.0.1")
11741 (source
11742 (origin
11743 (method url-fetch)
11744 (uri (pypi-uri "random_user_agent" version))
11745 (sha256
11746 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
11747 (build-system pyproject-build-system)
11748 (arguments (list #:tests? #f)) ; No tests.
11749 (native-inputs (list python-setuptools))
11750 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
11751 (synopsis "List of user agents")
11752 (description
11753 "This package provides a list of user agents, from a collection of more
11754than 326,000 known user-agents. Users can pick a random one, or select one
11755based on filters.")
11756 (license license:expat)))
11757
11758(define-public python-rangehttpserver
11759 (package
11760 (name "python-rangehttpserver")
11761 (version "1.4.0")
11762 (source
11763 (origin
11764 (method git-fetch)
11765 (uri (git-reference
11766 (url "https://github.com/danvk/RangeHTTPServer")
11767 (commit version)))
11768 (file-name (git-file-name name version))
11769 (sha256
11770 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
11771 (build-system pyproject-build-system)
11772 (native-inputs
11773 (list python-pytest
11774 python-requests
11775 python-setuptools))
11776 (home-page "https://github.com/danvk/RangeHTTPServer")
11777 (synopsis "SimpleHTTPServer with support for range requests")
11778 (description
11779 "This tool provides a simple HTTP server with support for Range
11780requests.")
11781 (license license:asl2.0)))
11782
11783(define-public python-flask-restx
11784 (package
11785 (name "python-flask-restx")
11786 (version "1.3.0")
11787 (source
11788 (origin
11789 (method git-fetch) ;no tests in PyPI archive
11790 (uri (git-reference
11791 (url "https://github.com/python-restx/flask-restx")
11792 (commit version)))
11793 (file-name (git-file-name name version))
11794 (sha256
11795 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
11796 (build-system pyproject-build-system)
11797 (arguments
11798 (list
11799 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
11800 #:test-flags
11801 #~(list "--benchmark-skip"
11802 ;; ValueError: http://www.google.com is not a valid URL. Domain
11803 ;; does not exists.
11804 "--deselect=tests/test_inputs.py::URLTest::test_check"
11805 "-k" (string-join
11806 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
11807 (list "not test_rfc822_value"
11808 "test_iso8601_value"
11809 ;; assert 404 == 2000
11810 "test_specs_endpoint_host_and_subdomain"
11811 ;; ValueError: [email protected] is not a valid email
11812 "test_valid_value_check")
11813 " and not "))))
11814 (native-inputs
11815 (list python-blinker
11816 python-faker
11817 python-pytest
11818 python-pytest-benchmark
11819 python-pytest-flask
11820 python-pytest-mock
11821 python-setuptools))
11822 (propagated-inputs
11823 (list python-aniso8601
11824 python-flask
11825 python-importlib-resources
11826 python-jsonschema
11827 python-pytz
11828 python-werkzeug))
11829 (home-page "https://github.com/python-restx/flask-restx")
11830 (synopsis
11831 "Framework for fast, easy and documented API development with Flask")
11832 (description
11833 "Flask-RESTX is an extension for Flask that adds support for quickly building
11834REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
11835 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
11836decorators and tools to describe your API and expose its documentation properly using
11837Swagger.")
11838 (license license:bsd-3)))
11839
11840(define-public python-flask-socketio
11841 (package
11842 (name "python-flask-socketio")
11843 (version "5.6.1")
11844 (source
11845 (origin
11846 (method git-fetch)
11847 (uri (git-reference
11848 (url "https://github.com/miguelgrinberg/Flask-SocketIO/")
11849 (commit (string-append "v" version))))
11850 (file-name (git-file-name name version))
11851 (sha256
11852 (base32 "1bs594bxggwn78yhf86whv6bcs8gb7mhrm5dnk5x4c3jb20nhfmm"))))
11853 (build-system pyproject-build-system)
11854 (native-inputs
11855 (list python-pytest
11856 python-redis
11857 python-setuptools))
11858 (propagated-inputs
11859 (list python-flask
11860 python-socketio))
11861 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
11862 (synopsis "Socket.IO integration for Flask applications")
11863 (description "Socket.IO integration for Flask applications")
11864 (license license:expat)))
11865
11866(define-public python-manuel
11867 (package
11868 (name "python-manuel")
11869 (version "1.13.0")
11870 (source
11871 (origin
11872 (method url-fetch)
11873 (uri (pypi-uri "manuel" version))
11874 (sha256
11875 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
11876 (build-system pyproject-build-system)
11877 (arguments
11878 (list
11879 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
11880 #:tests? #f))
11881 (propagated-inputs
11882 (list python-setuptools)) ;install requires
11883 (home-page "https://pypi.org/project/manuel/")
11884 (synopsis "Build tested documentation")
11885 (description
11886 "Manuel lets you mix and match traditional doctests with custom test syntax.")
11887 (license license:asl2.0)))
11888
11889(define-public python-marshmallow-jsonapi
11890 (package
11891 (name "python-marshmallow-jsonapi")
11892 (version "0.26.0")
11893 (source
11894 (origin
11895 (method git-fetch)
11896 (uri (git-reference
11897 ;; XXX: Deprecated upstream: This repository has been archived
11898 ;; by the owner on Jun 6, 2024. It is now read-only.
11899 ;; Using a maintained fork. The pypi name of this fork
11900 ;; is marshmallow-jsonapi-minfork.
11901 (url "https://github.com/tadams42/marshmallow-jsonapi")
11902 (commit version)))
11903 (file-name (git-file-name name version))
11904 (sha256
11905 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
11906 (build-system pyproject-build-system)
11907 (native-inputs
11908 (list python-faker
11909 python-flask
11910 python-pytest
11911 python-setuptools))
11912 (propagated-inputs (list python-marshmallow))
11913 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
11914 (synopsis "JSON:API 1.0 formatting with Marshmallow")
11915 (description
11916 "The marshmallow-jsonapi package provides a simple way to produce
11917@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
11918framework. It includes optional utilities to integrate with Flask. This is a
11919forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
11920 (license license:expat)))
11921
11922(define-public python-pecan
11923 (package
11924 (name "python-pecan")
11925 (version "1.8.0")
11926 (source
11927 (origin
11928 (method git-fetch)
11929 (uri (git-reference
11930 (url "https://github.com/pecan/pecan")
11931 (commit version)))
11932 (file-name (git-file-name name version))
11933 (sha256
11934 (base32 "0w693jpnjy358992f3jrrlf31knkqn0jvz2jx0iz7ziikprc61p8"))))
11935 (build-system pyproject-build-system)
11936 (arguments
11937 (list
11938 #:test-flags '(list "--pyargs" "pecan")))
11939 (native-inputs
11940 (list gunicorn
11941 python-genshi
11942 python-jinja2
11943 python-pytest
11944 python-sqlalchemy-2
11945 python-webtest))
11946 (propagated-inputs
11947 (list python-mako
11948 python-webob))
11949 (home-page "http://github.com/pecan/pecan")
11950 (synopsis "WSGI object-dispatching web framework")
11951 (description "This package provides a WSGI object-dispatching web
11952framework, designed to be lean and fast, with few dependencies.")
11953 (license license:bsd-3)))
11954
11955(define-public python-persistent
11956 (package
11957 (name "python-persistent")
11958 (version "6.1.1")
11959 (source
11960 (origin
11961 (method git-fetch)
11962 (uri (git-reference
11963 (url "https://github.com/zopefoundation/persistent/")
11964 (commit version)))
11965 (file-name (git-file-name name version))
11966 (sha256
11967 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
11968 (build-system pyproject-build-system)
11969 (arguments
11970 (list
11971 #:phases
11972 #~(modify-phases %standard-phases
11973 (replace 'check
11974 (lambda* (#:key tests? #:allow-other-keys)
11975 (if tests?
11976 (invoke "zope-testrunner" "--test-path=src"
11977 ;; XXX: Ignore doc tests.
11978 "!persistent.tests.test_docs")
11979 (format #t "test suite not run~%")))))))
11980 (propagated-inputs
11981 (list python-cffi
11982 python-zope-deferredimport
11983 python-zope-interface
11984 python-zope-testrunner))
11985 (native-inputs
11986 (list python-manuel python-zope-testrunner python-setuptools))
11987 (home-page "https://github.com/zopefoundation/persistent/")
11988 (synopsis "Translucent persistent objects")
11989 (description
11990 "This package contains a generic persistence implementation for Python.
11991It forms the core protocol for making objects interact \"transparently\" with
11992a database such as the ZODB.")
11993 (license license:zpl2.1)))
11994
11995(define-public python-btrees
11996 (package
11997 (name "python-btrees")
11998 (version "6.1")
11999 (source
12000 (origin
12001 (method git-fetch)
12002 (uri (git-reference
12003 (url "https://github.com/zopefoundation/BTrees")
12004 (commit version)))
12005 (file-name (git-file-name name version))
12006 (sha256
12007 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
12008 (build-system pyproject-build-system)
12009 (arguments
12010 (list
12011 #:phases
12012 #~(modify-phases %standard-phases
12013 (replace 'check
12014 (lambda* (#:key tests? #:allow-other-keys)
12015 (if tests?
12016 (invoke "zope-testrunner" "--test-path=src")
12017 (format #t "test suite not run~%")))))))
12018 (propagated-inputs (list python-persistent python-zope-interface))
12019 (native-inputs (list python-persistent python-transaction
12020 python-zope-testrunner python-setuptools))
12021 (home-page "https://github.com/zopefoundation/BTrees")
12022 (synopsis "Scalable persistent object containers")
12023 (description
12024 "This package contains a set of persistent object containers built around a
12025modified BTree data structure. The trees are optimized for use inside ZODB's
12026\"optimistic concurrency\" paradigm, and include explicit resolution of
12027conflicts detected by that mechanism.")
12028 (license license:zpl2.1)))
12029
12030(define-public python-transaction
12031 (package
12032 (name "python-transaction")
12033 (version "5.0")
12034 (source
12035 (origin
12036 (method url-fetch)
12037 (uri (pypi-uri "transaction" version))
12038 (sha256
12039 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
12040 (build-system pyproject-build-system)
12041 (native-inputs
12042 (list python-pytest
12043 python-setuptools))
12044 (propagated-inputs
12045 (list python-zope-interface))
12046 (home-page "https://github.com/zopefoundation/transaction")
12047 (synopsis "Transaction management for Python")
12048 (description "This package contains a generic transaction implementation
12049for Python. It is mainly used by the ZODB.")
12050 (license license:zpl2.1)))
12051
12052(define-public python-truststore
12053 (package
12054 (name "python-truststore")
12055 (version "0.10.4")
12056 (source
12057 (origin
12058 (method url-fetch)
12059 (uri (pypi-uri "truststore" version))
12060 (sha256
12061 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
12062 (build-system pyproject-build-system)
12063 (arguments
12064 (list #:tests? #f)) ;all tests require Internet access
12065 (native-inputs
12066 (list python-flit-core))
12067 (home-page "https://github.com/sethmlarson/truststore")
12068 (synopsis "Verify certificates using native system trust stores")
12069 (description
12070 "Truststore is a library which exposes native system certificate stores (ie
12071\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
12072Python applications no longer need to rely on certifi as a root certificate
12073store.")
12074 (license license:expat)))
12075
12076(define-public python-robot-detection
12077 (package
12078 (name "python-robot-detection")
12079 (version "0.4.0")
12080 (source
12081 (origin
12082 (method git-fetch)
12083 (uri (git-reference
12084 (url "https://github.com/rory/robot-detection")
12085 (commit (string-append "v" version))))
12086 (file-name (git-file-name name version))
12087 (sha256
12088 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
12089 (build-system pyproject-build-system)
12090 (arguments (list #:test-backend #~'unittest))
12091 (native-inputs (list python-setuptools))
12092 (propagated-inputs (list python-six))
12093 (home-page "https://github.com/rory/robot-detection")
12094 (synopsis "Detect web crawlers")
12095 (description
12096 "@code{robot_detection} is a python module to detect if a given HTTP User
12097Agent is a web crawler. It uses the list of registered robots from
12098@url{http://www.robotstxt.org}.")
12099 (license license:gpl3+)))
12100
12101(define-public python-robotframework-requests
12102 (package
12103 (name "python-robotframework-requests")
12104 (version "0.9.7")
12105 (source
12106 (origin
12107 (method git-fetch) ; no tests in PyPI release
12108 (uri (git-reference
12109 (url "https://github.com/MarketSquare/robotframework-requests")
12110 (commit (string-append "v" version))))
12111 (file-name (git-file-name name version))
12112 (sha256
12113 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
12114 (build-system pyproject-build-system)
12115 (native-inputs
12116 (list python-pytest
12117 python-setuptools
12118 python-wheel))
12119 (propagated-inputs
12120 (list python-requests
12121 python-robotframework))
12122 (home-page "https://github.com/MarketSquare/robotframework-requests")
12123 (synopsis "Robot Framework keyword library wrapper around requests")
12124 (description
12125 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
12126Framework} library aimed to provide HTTP API testing functionalities by
12127wrapping the @code{requests} Python library.")
12128 (license license:expat)))
12129
12130(define-public python-pysolr
12131 (package
12132 (name "python-pysolr")
12133 (version "3.10.0")
12134 (source
12135 (origin
12136 (method url-fetch)
12137 (uri (pypi-uri "pysolr" version))
12138 (sha256
12139 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
12140 (build-system pyproject-build-system)
12141 (arguments
12142 '(#:tests? #f)) ; Tests require network access.
12143 (native-inputs
12144 (list python-setuptools
12145 python-setuptools-scm
12146 python-wheel))
12147 (propagated-inputs
12148 (list python-requests))
12149 (home-page "https://github.com/django-haystack/pysolr/")
12150 (synopsis "Lightweight python wrapper for Apache Solr")
12151 (description
12152 "This module provides an interface that queries the Apache Solr server
12153using a pure Python implementation.")
12154 (license license:bsd-3)))
12155
12156(define-public python-pyjsparser
12157 ;; XXX: This project is potentially abandonware, consider to remove in next
12158 ;; refresh cycle, see:
12159 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
12160 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
12161 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
12162 (package
12163 (name "python-pyjsparser")
12164 (version "2.7.1")
12165 (source
12166 (origin
12167 (method url-fetch)
12168 (uri (pypi-uri "pyjsparser" version))
12169 (sha256
12170 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
12171 (build-system pyproject-build-system)
12172 (arguments
12173 '(#:tests? #f)) ;no tests in PyPI
12174 (native-inputs (list python-setuptools))
12175 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
12176 (synopsis "Fast JavaScript parser")
12177 (description
12178 "This package provides a fast JavaScript parser (based on esprima.js)")
12179 (license license:expat)))
12180
12181(define-public python-js2py
12182 (package
12183 (name "python-js2py")
12184 (properties '((commit . "2e017b86e2f18a6c8a842293b1687f2ce7baa12e")
12185 (revision . "0")))
12186 (version (git-version "0.74"
12187 (assoc-ref properties 'revision)
12188 (assoc-ref properties 'commit)))
12189 (source
12190 (origin
12191 (method git-fetch)
12192 (uri (git-reference
12193 (url "https://github.com/PiotrDabkowski/Js2Py")
12194 (commit (assoc-ref properties 'commit))))
12195 (file-name (git-file-name name version))
12196 (sha256
12197 (base32 "0rsac03shkm0yxq91hzxdvhb96wy168bxdw8azi25bvlm8s3l27p"))
12198 (patches
12199 (list
12200 (origin
12201 (method url-fetch)
12202 (uri (string-append "https://github.com/PiotrDabkowski/Js2Py/commit"
12203 "/fd7df4a91fb08060914c7b1d9e94583d18f3371b"
12204 ".patch"))
12205 (file-name (string-append name "-" version "-pull-327.patch"))
12206 (sha256
12207 (base32 "14v89v8qqrsq0d63xbilkvx19l1rk59mlrbxvd4sj138lk7160ki")))))))
12208 (build-system pyproject-build-system)
12209 (arguments
12210 (list #:tests? #f)) ; tests require Node
12211 (native-inputs
12212 (list python-setuptools))
12213 (propagated-inputs
12214 (list python-pyjsparser
12215 python-six
12216 python-tzlocal))
12217 (home-page "https://github.com/PiotrDabkowski/Js2Py")
12218 (synopsis "JavaScript to Python translator")
12219 (description
12220 "This package provides a JavaScript to Python translator and a JavaScript
12221interpreter written in pure Python.")
12222 (license license:expat)))
12223
12224(define-public python-http-ece
12225 (package
12226 (name "python-http-ece")
12227 (version "1.2.1")
12228 (source
12229 (origin
12230 (method git-fetch)
12231 (uri (git-reference
12232 (url "https://github.com/web-push-libs/encrypted-content-encoding")
12233 (commit (string-append "v" version))))
12234 (file-name (git-file-name name version))
12235 (sha256
12236 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
12237 (build-system pyproject-build-system)
12238 (arguments
12239 `(#:phases
12240 (modify-phases %standard-phases
12241 (add-after 'unpack 'change-directory
12242 (lambda _ (chdir "python") #t)))))
12243 (native-inputs
12244 (list python-pytest python-setuptools))
12245 (propagated-inputs
12246 (list python-cryptography))
12247 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
12248 (synopsis "Encrypted Content Encoding for HTTP")
12249 (description
12250 "This package provides a simple implementation of Encrypted Content
12251Encoding for HTTP.")
12252 (license license:expat)))
12253
12254(define-public python-cloud-init
12255 (package
12256 (name "python-cloud-init")
12257 (version "24.2")
12258 (source
12259 (origin
12260 (method git-fetch)
12261 (uri (git-reference
12262 (url "https://github.com/canonical/cloud-init")
12263 (commit version)))
12264 (file-name (git-file-name name version))
12265 (sha256
12266 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
12267 (build-system pyproject-build-system)
12268 (arguments
12269 (list
12270 #:test-flags
12271 '(list
12272 ;; This requires usermod
12273 "--ignore=tests/unittests/distros/test_create_users.py"
12274 ;; This writes to /var
12275 "--ignore=tests/unittests/net/test_dhcp.py"
12276 "-k"
12277 (string-append
12278 ;; This test messes with PATH, so it cannot find mkdir
12279 "not test_path_env_gets_set_from_main"
12280 " and not test_apt_configure_sources_list_"
12281 ;; These all fail because /bin/sh doesn't exist. We cannot patch
12282 ;; this because the generated scripts must use /bin/sh as they are
12283 ;; supposed to be run on minimal systems.
12284 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
12285 " and not test_handler_runs_bootcmd_script_with_error"
12286 " and not test_subp_combined_stderr_stdout"
12287 " and not test_handle_part"))
12288 #:phases
12289 #~(modify-phases %standard-phases
12290 (add-after 'unpack 'patch-references
12291 (lambda _
12292 (substitute* "tests/unittests/cmd/test_clean.py"
12293 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
12294 (add-after 'install 'move-files
12295 (lambda* (#:key inputs outputs #:allow-other-keys)
12296 (for-each (lambda (dir)
12297 (let ((source (string-append (site-packages inputs outputs) "/" dir))
12298 (target (string-append #$output "/" (basename dir))))
12299 (copy-recursively source target)
12300 (delete-file-recursively source)))
12301 (list "etc" "lib" "usr/lib" "usr/share")))))))
12302 (propagated-inputs
12303 (list python-configobj
12304 python-jinja2
12305 python-jsonpatch
12306 python-jsonschema
12307 python-netifaces
12308 python-oauthlib
12309 python-pyserial
12310 python-pyyaml
12311 python-responses))
12312 (native-inputs
12313 (list procps ;for ps when running tests
12314 python-pytest
12315 python-pytest-mock
12316 python-passlib
12317 python-setuptools
12318 python-wheel))
12319 (home-page "https://github.com/canonical/cloud-init")
12320 (synopsis "Cloud instance initialization tools")
12321 (description
12322 "Cloud-init is the multi-distribution method for cross-platform cloud
12323instance initialization. It is supported across all major public cloud
12324providers, provisioning systems for private cloud infrastructure, and
12325bare-metal installations.")
12326 ;; Either license can be chosen
12327 (license (list license:asl2.0 license:gpl3))))
12328
12329(define-public python-cloudscraper
12330 (package
12331 (name "python-cloudscraper")
12332 (version "3.0.0")
12333 (source
12334 (origin
12335 (method git-fetch)
12336 (uri (git-reference
12337 (url "https://github.com/VeNoMouS/cloudscraper")
12338 (commit version)))
12339 (file-name (git-file-name name version))
12340 (sha256
12341 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
12342 (modules '((guix build utils)))
12343 (snippet
12344 '(with-directory-excursion "cloudscraper"
12345 (for-each delete-file
12346 '("captcha/9kw.py" "captcha/anticaptcha.py"))
12347 (substitute* "__init__.py"
12348 ;; Perhaps it's a joke, but don't promote proprietary software.
12349 (("([Th]is feature is not available) in the .*'" _ prefix)
12350 (string-append prefix ".'")))))))
12351 (build-system pyproject-build-system)
12352 (arguments
12353 (list
12354 #:test-flags
12355 #~(list "-k" "not test_403_handling")
12356 #:phases
12357 #~(modify-phases %standard-phases
12358 (add-after 'unpack 'relax-requirements
12359 (lambda _
12360 ;; XXX: Relax brotli dependency.
12361 (substitute* "pyproject.toml"
12362 (("\"brotli>=.*\"")
12363 "\"brotli\""))
12364 ;; XXX: Dependencies, that have not yet been packaged
12365 ;; and cause an import error when included.
12366 (delete-file "cloudscraper/interpreters/v8.py")))
12367 (add-after 'unpack 'fix-references
12368 (lambda _
12369 (substitute* "cloudscraper/interpreters/nodejs.py"
12370 (("'node'")
12371 (string-append "'" (which "node") "'"))))))))
12372 (inputs (list node-lts))
12373 (propagated-inputs
12374 (list python-pycryptodome
12375 python-brotli
12376 python-js2py
12377 python-polling2
12378 python-requests
12379 python-requests-toolbelt
12380 python-responses
12381 python-pyparsing
12382 python-websocket-client))
12383 (native-inputs (list python-pytest python-setuptools))
12384 (home-page "https://github.com/venomous/cloudscraper")
12385 (synopsis "Cloudflare anti-bot bypass")
12386 (description
12387 "This module acts as a webbrowser solving Cloudflare's Javascript
12388challenges.")
12389 (license license:expat)))
12390
12391(define-public python-imap-tools
12392 (package
12393 (name "python-imap-tools")
12394 (version "1.9.0")
12395 (source
12396 (origin
12397 (method git-fetch) ; no tests in PyPI release
12398 (uri (git-reference
12399 (url "https://github.com/ikvk/imap_tools")
12400 (commit (string-append "v" version))))
12401 (file-name (git-file-name name version))
12402 (sha256
12403 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
12404 (arguments
12405 (list
12406 #:test-flags
12407 ;; Tests require a network connection
12408 #~(list "-k" (string-append "not test_action"
12409 " and not test_attributes"
12410 " and not test_connection"
12411 " and not test_folders"
12412 " and not test_idle"
12413 " and not test_live"))))
12414 (build-system pyproject-build-system)
12415 (native-inputs
12416 (list python-pytest python-setuptools python-wheel))
12417 (home-page "https://github.com/ikvk/imap_tools")
12418 (synopsis "Work with email and mailbox by IMAP")
12419 (description
12420 "This Python library provides tools to deal with email and mailboxes
12421over IMAP:
12422
12423@itemize
12424@item Parsed email message attributes
12425@item Query builder for searching emails
12426@item Work with emails in folders (copy, delete, flag, move, seen)
12427@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
12428@end itemize")
12429 (license license:asl2.0)))
12430
12431(define-public python-giturlparse
12432 (package
12433 (name "python-giturlparse")
12434 (version "0.12.0")
12435 (source
12436 (origin
12437 (method git-fetch)
12438 (uri (git-reference
12439 (url "https://github.com/nephila/giturlparse")
12440 (commit version)))
12441 (file-name (git-file-name name version))
12442 (sha256
12443 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
12444 (build-system pyproject-build-system)
12445 (native-inputs (list python-pytest python-setuptools))
12446 (home-page "https://github.com/nephila/giturlparse")
12447 (synopsis "Git URL parsing module")
12448 (description
12449 "This package provides a git URL parsing module which supports parsing
12450and rewriting of remote git URLs from various hosting providers.")
12451 (license license:asl2.0)))
12452
12453(define-public python-hstspreload
12454 (package
12455 (name "python-hstspreload")
12456 (version "2025.1.1")
12457 (source
12458 (origin
12459 (method git-fetch)
12460 (uri (git-reference
12461 (url "https://github.com/sethmlarson/hstspreload")
12462 (commit version)))
12463 (file-name (git-file-name name version))
12464 (sha256
12465 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
12466 (build-system pyproject-build-system)
12467 (arguments (list #:tests? #f)) ; tests require external resources.
12468 (native-inputs (list python-setuptools))
12469 (home-page "https://github.com/sethmlarson/hstspreload")
12470 (synopsis "Chromium HSTS Preload list as a Python package")
12471 (description
12472 "@code{python-hstspreload} contains Chromium HSTS Preload list
12473as a Python package.")
12474 (license license:bsd-3)))
12475
12476(define-public python-sanic-routing
12477 (package
12478 (name "python-sanic-routing")
12479 (version "23.12.0")
12480 (source
12481 (origin
12482 (method url-fetch)
12483 (uri (pypi-uri "sanic-routing" version))
12484 (sha256
12485 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
12486 (build-system pyproject-build-system)
12487 (arguments
12488 ;; PyPi sources does not contain tests, recursive dependency on
12489 ;; python-sanic.
12490 (list #:tests? #f))
12491 (native-inputs (list python-setuptools python-wheel))
12492 (home-page "https://github.com/sanic-org/sanic-routing/")
12493 (synopsis "Routing component for Sanic")
12494 (description "Internal package for @code{python-sanic}, which provides
12495the @code{BasicRouter}.")
12496 (license license:expat)))
12497
12498(define-public python-sanic-testing
12499 (package
12500 (name "python-sanic-testing")
12501 (version "23.12.0")
12502 (source
12503 (origin
12504 (method url-fetch)
12505 (uri (pypi-uri "sanic-testing" version))
12506 (sha256
12507 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
12508 (build-system pyproject-build-system)
12509 (arguments
12510 ;; PyPi sources does not contain tests, recursive dependency on
12511 ;; python-sanic.
12512 (list #:tests? #f))
12513 (propagated-inputs (list python-httpx python-sanic-bootstrap))
12514 (native-inputs (list python-setuptools python-wheel))
12515 (home-page "https://github.com/sanic-org/sanic-testing/")
12516 (synopsis "Test clients for Sanic")
12517 (description "Internal package for @code{python-sanic}, which is
12518meant to be the core testing utility and clients for testing Sanic
12519applications.")
12520 (license license:expat)))
12521
12522(define-public python-sanic
12523 (package
12524 (name "python-sanic")
12525 (version "25.12.1")
12526 (source
12527 (origin
12528 (method url-fetch)
12529 (uri (pypi-uri "sanic" version))
12530 (sha256
12531 (base32 "0zxll83cvmcpiad3rri7cn9y8wi8xn7x0b00dimg0c20irhbylbv"))
12532 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
12533 (modules '((guix build utils)))
12534 (snippet #~(substitute* "setup.py"
12535 (("setuptools>=[0-9.]*")
12536 "setuptools")))))
12537 (build-system pyproject-build-system)
12538 (arguments
12539 (list
12540 #:test-flags
12541 #~(list "--asyncio-mode=auto"
12542 "--ignore=tests/benchmark/"
12543 "--ignore=tests/typing/test_typing.py"
12544 ;; Most tests hang or fail
12545 "--ignore=tests/test_cli.py"
12546 "--ignore=tests/worker/test_worker_serve.py"
12547 "-k"
12548 (string-append
12549 ;; PyPi sources lack examples module.
12550 "not test_gunicorn_"
12551 ;; Does not expect brotli and reordered headers.
12552 " and not test_raw_headers"
12553 ;; These look like buggy testcases.
12554 " and not test_zero_downtime"
12555 " and not test_non_default_uvloop_config_raises_warning"
12556 " and not test_listeners_triggered"
12557 " and not test_keep_alive_connection_context"
12558 " and not test_keep_alive_client_timeout"
12559 " and not test_conflicting_body_methods_overload"
12560 " and not test_unix_connection"
12561 ;; Unclear why they fail since core-updates merge.
12562 " and not test_missing_sni"
12563 " and not test_no_matching_cert"
12564 " and not test_wildcards"
12565 ;; These tests fail because subprotocols appear to be
12566 ;; parameterized as None
12567 " and not test_websocket_route_with_subprotocols"
12568 ;; AF_UNIX path too long
12569 " and not test_setup_and_teardown_unix"
12570 " and not test_configure_socket"
12571 ;; Freezes
12572 " and not test_server_run_with_repl"
12573 " and not test_server_run"
12574 " and not test_no_workers"
12575 ;; Raises DaemonError: Group 'root' does not exist
12576 " and not test_validate_user_sets_uid_and_gid"
12577 " and not test_validate_group_sets_gid"
12578 ;; Raises AssertionError:
12579 ;; assert 'text/xml; charset=utf-8' == 'application/xml'
12580 " and not test_guess_content_type"
12581 ;; Don't know.
12582 " and not test_chained_exception_handler"))))
12583 (propagated-inputs
12584 (list python-aiofiles
12585 python-aioquic
12586 python-html5tagger
12587 python-httptools
12588 python-multidict
12589 python-sanic-routing
12590 python-tracerite
12591 python-typing-extensions
12592 python-ujson
12593 python-uvloop
12594 python-websockets))
12595 (native-inputs
12596 (list python-bandit
12597 python-beautifulsoup4
12598 python-chardet
12599 python-cryptography
12600 python-docutils
12601 python-pygments
12602 python-pytest
12603 python-pytest-asyncio
12604 python-pytest-benchmark
12605 python-pytest-sanic
12606 python-pytest-xdist
12607 python-sanic-testing
12608 python-setuptools
12609 python-slotscheck
12610 python-towncrier
12611 python-types-ujson
12612 python-uvicorn))
12613 (home-page "https://github.com/sanic-org/sanic/")
12614 (synopsis "Async Python web server/framework")
12615 (description
12616 "Sanic is a Python web server and web framework that's written to go
12617fast. It allows the usage of the @code{async/await} syntax added in Python
126183.5, which makes your code non-blocking and speedy.")
12619 (license license:expat)))
12620
12621(define-public python-sanic-bootstrap
12622 (package
12623 (inherit python-sanic)
12624 (name "python-sanic-bootstrap")
12625 (arguments (list #:tests? #f))
12626 (native-inputs (list python-setuptools))))
12627
12628(define-public python-socketio
12629 (package
12630 (name "python-socketio")
12631 (version "5.16.4")
12632 (source
12633 (origin
12634 (method git-fetch)
12635 (uri (git-reference
12636 (url "https://github.com/miguelgrinberg/python-socketio/")
12637 (commit (string-append "v" version))))
12638 (file-name (git-file-name name version))
12639 (sha256
12640 (base32 "0695mq1nijlljkmpgn3nk6gfv34rzpgxrdsld1l1vix6gxyxna0y"))))
12641 (build-system pyproject-build-system)
12642 (arguments
12643 (list
12644 ;; tests: 642 passed, 5 warnings
12645 #:test-flags
12646 ;; Tests freeze.
12647 #~(list "--ignore=tests/async/test_admin.py"
12648 "--ignore=tests/common/test_admin.py")))
12649 (native-inputs
12650 (list python-msgpack
12651 python-pytest
12652 python-pytest-asyncio
12653 python-pytest-timeout
12654 python-redis
12655 python-setuptools
12656 python-uvicorn
12657 python-valkey))
12658 (propagated-inputs
12659 (list python-bidict
12660 python-engineio
12661 ;; [optional]
12662 python-aiohttp
12663 python-requests
12664 python-websocket-client))
12665 (home-page "https://github.com/miguelgrinberg/python-socketio/")
12666 (synopsis "Python Socket.IO server")
12667 (description
12668 "This package provides a Python implementation of the @code{Socket.IO}
12669realtime client and server.")
12670 (license license:expat)))
12671
12672(define-public python-socks
12673 (package
12674 (name "python-socks")
12675 (version "2.8.1")
12676 (source
12677 (origin
12678 (method git-fetch)
12679 (uri (git-reference
12680 (url "https://github.com/romis2012/python-socks")
12681 (commit (string-append "v" version))))
12682 (file-name (git-file-name name version))
12683 (sha256
12684 (base32 "1x95i9w3izivdgz6hadh5kiil12i4ljk4ashgh3g0rjv2rw33vhj"))))
12685 (build-system pyproject-build-system)
12686 (propagated-inputs (list python-trio))
12687 (native-inputs
12688 (list python-anyio
12689 python-flask
12690 python-pytest
12691 python-pytest-asyncio
12692 python-pytest-trio
12693 python-setuptools
12694 python-tiny-proxy
12695 python-trustme
12696 python-yarl))
12697 (home-page "https://github.com/romis2012/python-socks")
12698 (synopsis
12699 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
12700 (description
12701 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
12702 functionality.")
12703 (license license:asl2.0)))
12704
12705(define-public python-socksio
12706 (package
12707 (name "python-socksio")
12708 (version "1.0.0")
12709 (source
12710 (origin
12711 (method url-fetch)
12712 (uri (pypi-uri "socksio" version))
12713 (sha256
12714 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
12715 (build-system pyproject-build-system)
12716 (native-inputs
12717 (list python-flit-core python-pytest))
12718 (home-page "https://github.com/sethmlarson/socksio")
12719 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
12720 (description "The @code{socksio} Python module is a client-side sans-I/O
12721SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
12722@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
12723means the library itself does not handle the actual sending of the bytes
12724through the network, it only deals with the implementation details of the
12725SOCKS protocols. It can be paired with any I/O library.")
12726 (license license:expat)))
12727
12728(define-public python-simple-websocket
12729 (package
12730 (name "python-simple-websocket")
12731 (version "1.1.0")
12732 (source
12733 (origin
12734 (method url-fetch)
12735 (uri (pypi-uri "simple_websocket" version))
12736 (sha256
12737 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
12738 (build-system pyproject-build-system)
12739 (arguments
12740 ;; Requires Internet access to resolve example.com
12741 (list #:test-flags '(list "--ignore=tests/test_client.py")))
12742 (propagated-inputs (list python-wsproto))
12743 (native-inputs (list python-pytest
12744 python-setuptools))
12745 (home-page "https://github.com/miguelgrinberg/simple-websocket")
12746 (synopsis "Simple WebSocket server and client for Python")
12747 (description "This package provides a simple @code{WebSocket} server and
12748client for Python.")
12749 (license license:expat)))
12750
12751(define-public python-siosocks
12752 (package
12753 (name "python-siosocks")
12754 (version "0.3.0")
12755 (source
12756 (origin
12757 (method git-fetch)
12758 (uri (git-reference
12759 (url "https://github.com/pohmelie/siosocks")
12760 (commit (string-append "v" version))))
12761 (file-name (git-file-name name version))
12762 (sha256
12763 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
12764 (build-system pyproject-build-system)
12765 (native-inputs
12766 (list python-pytest
12767 python-pytest-asyncio
12768 python-pytest-trio
12769 python-setuptools))
12770 (propagated-inputs (list python-trio))
12771 (home-page "https://github.com/pohmelie/siosocks")
12772 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
12773 (description
12774 "This package provides a Python module and framework for sans-io socks proxy
12775client/server with couple io backends.
12776
12777Features:
12778@itemize
12779@item Only TCP connect (no BIND, no UDP)
12780@item Both client and server
12781@item SOCKS versions: 4, 4a, 5
12782@item SOCKSv5 auth: no auth, username/password
12783@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
12784@item One-shot socks server (@code{python -m siosocks})
12785@end itemize")
12786 (license license:expat)))
12787
12788(define-public python-tiny-proxy
12789 (package
12790 (name "python-tiny-proxy")
12791 (version "0.2.1")
12792 (source
12793 (origin
12794 (method url-fetch)
12795 (uri (pypi-uri "tiny_proxy" version))
12796 (sha256
12797 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
12798 (build-system pyproject-build-system)
12799 ;; There are only a handful of tests and they require the as yet
12800 ;; unpackaged httpx_socks.
12801 (arguments (list #:tests? #false))
12802 (propagated-inputs (list python-anyio))
12803 (native-inputs
12804 (list python-httpx
12805 python-pytest
12806 python-setuptools
12807 python-wheel))
12808 (home-page "https://github.com/romis2012/tiny-proxy")
12809 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
12810 (description "This package provides a simple proxy server (SOCKS4(a),
12811SOCKS5(h), HTTP tunnel).")
12812 (license license:asl2.0)))
12813
12814(define-public python-azure-nspkg
12815 (package
12816 (name "python-azure-nspkg")
12817 (version "3.0.2")
12818 (source
12819 (origin
12820 (method url-fetch)
12821 (uri (pypi-uri "azure-nspkg" version ".zip"))
12822 (sha256
12823 (base32
12824 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
12825 (build-system pyproject-build-system)
12826 (arguments (list #:tests? #f)) ;no tests in package
12827 (native-inputs (list unzip python-setuptools))
12828 (home-page "https://github.com/Azure/azure-sdk-for-python")
12829 (synopsis "Azure namespace internals")
12830 (description
12831 "This package is an internal Azure namespace package.")
12832 (license license:expat)))
12833
12834(define-public python-azure-storage-nspkg
12835 (package
12836 (name "python-azure-storage-nspkg")
12837 (version "3.1.0")
12838 (source
12839 (origin
12840 (method url-fetch)
12841 (uri (pypi-uri "azure-storage-nspkg" version))
12842 (sha256
12843 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
12844 (build-system pyproject-build-system)
12845 (arguments
12846 (list #:tests? #f)) ;no tests in PyPI archive
12847 (native-inputs (list python-setuptools))
12848 (propagated-inputs (list python-azure-nspkg))
12849 (home-page "https://github.com/Azure/azure-storage-python")
12850 (synopsis "Microsoft Azure Storage Namespace package")
12851 (description
12852 "This project provides a client library in Python that makes it easy to
12853communicate with Microsoft Azure Storage services.")
12854 (license license:expat)))
12855
12856(define-public python-azure-common
12857 (package
12858 (name "python-azure-common")
12859 (version "1.1.28")
12860 (source
12861 (origin
12862 (method url-fetch)
12863 (uri (pypi-uri "azure-common" version ".zip"))
12864 (sha256
12865 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
12866 (build-system pyproject-build-system)
12867 (arguments
12868 (list #:tests? #f)) ;no tests in PyPI archive
12869 (propagated-inputs (list python-azure-nspkg))
12870 (native-inputs (list python-setuptools unzip))
12871 (home-page "https://github.com/Azure/azure-sdk-for-python")
12872 (synopsis "Microsoft Azure Client library for Python")
12873 (description "This package provides the Microsoft Azure Client library for
12874Python.")
12875 (license license:expat)))
12876
12877(define-public python-azure-core
12878 (package
12879 (name "python-azure-core")
12880 (version "1.32.0")
12881 (source
12882 (origin
12883 (method url-fetch)
12884 (uri (pypi-uri "azure_core" version))
12885 (sha256
12886 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
12887 (build-system pyproject-build-system)
12888 (arguments
12889 (list
12890 #:test-flags
12891 `(list ;; This fails because devtools_testutils doesn't exist.
12892 "--ignore=tests/test_connection_string_parsing.py"
12893 ;; These all need network access.
12894 "--ignore=samples"
12895 "--ignore=tests/async_tests/test_streaming_async.py"
12896 "--ignore=tests/test_streaming.py"
12897 "-m" "not asyncio and not live_test_only"
12898 "-k" ,(string-append
12899 "not test_decompress_plain_no_header"
12900 " and not test_compress_plain_no_header"
12901 " and not test_decompress_compressed_no_header"
12902 " and not test_requests_socket_timeout"))
12903 #:phases
12904 #~(modify-phases %standard-phases
12905 (add-before 'check 'add-test-pythonpath
12906 (lambda* (#:key tests? #:allow-other-keys)
12907 (when tests?
12908 (setenv "PYTHONPATH"
12909 (string-append
12910 (getcwd) "/tests/testserver_tests/coretestserver:"
12911 (getenv "GUIX_PYTHONPATH")))))))))
12912 (propagated-inputs
12913 (list python-aiohttp
12914 python-requests
12915 python-six
12916 python-typing-extensions))
12917 (native-inputs
12918 (list python-flask
12919 python-pytest-8
12920 python-pytest-aiohttp
12921 python-pytest-asyncio
12922 python-pytest-trio
12923 python-setuptools
12924 python-wheel))
12925 (home-page "https://github.com/Azure/azure-sdk-for-python")
12926 (synopsis "Microsoft Azure Core library for Python")
12927 (description "This package provides the Microsoft Azure Core library for
12928Python.")
12929 (license license:expat)))
12930
12931(define-public python-azure-storage-blob
12932 (package
12933 (name "python-azure-storage-blob")
12934 (version "12.27.0")
12935 (source
12936 (origin
12937 (method url-fetch)
12938 (uri (pypi-uri "azure_storage_blob" version))
12939 (sha256
12940 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
12941 (build-system pyproject-build-system)
12942 (arguments
12943 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12944 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12945 ;; it hard to package in Guix.
12946 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12947 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12948 (list #:tests? #f))
12949 (native-inputs
12950 (list python-setuptools))
12951 (propagated-inputs
12952 (list python-azure-core
12953 python-cryptography
12954 python-isodate
12955 python-typing-extensions))
12956 (home-page "https://github.com/Azure/azure-sdk-for-python/")
12957 (synopsis "Microsoft Azure Blob Storage client library for Python")
12958 (description "This package provides the Microsoft Azure Blob Storage
12959Client Library for Python.")
12960 (license license:expat)))
12961
12962(define-public python-azure-storage-file-datalake
12963 (package
12964 (name "python-azure-storage-file-datalake")
12965 (version "12.22.0")
12966 (source
12967 (origin
12968 (method url-fetch)
12969 (uri (pypi-uri "azure_storage_file_datalake" version))
12970 (sha256
12971 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
12972 (build-system pyproject-build-system)
12973 (arguments
12974 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12975 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12976 ;; it hard to package in Guix.
12977 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12978 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12979 (list #:tests? #f))
12980 (native-inputs
12981 (list python-setuptools))
12982 (propagated-inputs
12983 (list python-azure-core
12984 python-azure-storage-blob
12985 python-isodate
12986 python-typing-extensions))
12987 (home-page "https://github.com/Azure/azure-sdk-for-python")
12988 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
12989 (description
12990 "This package provides the Microsoft Azure File @code{DataLake} Storage
12991Client Library for Python.")
12992 (license license:expat)))
12993
12994(define-public python-google-auth
12995 (package
12996 (name "python-google-auth")
12997 (version "2.56.0")
12998 (source
12999 (origin
13000 (method url-fetch)
13001 (uri (pypi-uri "google_auth" version))
13002 (sha256
13003 (base32 "0lx5cw49lfjqvd9vx1vlslrxyh9q0xd6d46np5a2dab9nlqa03zr"))))
13004 (build-system pyproject-build-system)
13005 (propagated-inputs
13006 (list python-aiohttp
13007 python-cryptography
13008 python-pyasn1-modules
13009 python-requests
13010 python-rsa
13011 python-urllib3))
13012 (native-inputs
13013 (list nss-certs-for-test
13014 python-aiohttp
13015 python-aioresponses
13016 python-flask
13017 python-freezegun
13018 python-grpcio
13019 python-oauth2client
13020 python-packaging
13021 python-pyjwt
13022 python-pyopenssl
13023 python-pytest
13024 python-pytest-asyncio
13025 python-pytest-localserver
13026 python-pyu2f
13027 python-requests
13028 python-responses
13029 python-rsa
13030 python-setuptools
13031 python-urllib3))
13032 (home-page "https://github.com/googleapis/google-auth-library-python")
13033 (synopsis "Google Authentication Library")
13034 (description "This library simplifies using Google's various
13035server-to-server authentication mechanisms to access Google APIs.")
13036 (license license:asl2.0)))
13037
13038(define-public python-google-resumable-media
13039 (package
13040 (name "python-google-resumable-media")
13041 (version "2.8.0")
13042 (source
13043 (origin
13044 (method git-fetch)
13045 (uri (git-reference
13046 (url
13047 "https://github.com/googleapis/google-resumable-media-python")
13048 (commit (string-append "v" version))))
13049 (file-name (git-file-name name version))
13050 (sha256
13051 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
13052 (build-system pyproject-build-system)
13053 (arguments
13054 (list
13055 #:test-flags
13056 #~(list
13057 ;; XXX: Missing test_utils.retry.
13058 "--ignore-glob=tests*/system/"
13059 ;; XXX: md5_hash is not mock.sentinel.md5_hash
13060 "-k" (string-join
13061 (list "not test_brotli"
13062 "test_constructor"
13063 "test_decompress")
13064 " and not "))))
13065 (propagated-inputs (list python-google-crc32c))
13066 (native-inputs
13067 (list python-google-auth
13068 python-mock
13069 python-pytest
13070 python-pytest-asyncio
13071 python-setuptools
13072 python-test-utils))
13073 (home-page "https://github.com/googleapis/google-resumable-media-python")
13074 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
13075 (description "This package provides utilities for Google Media Downloads
13076and Resumable Uploads.")
13077 (license license:asl2.0)))
13078
13079(define-public python-googleapis-common-protos
13080 (package
13081 (name "python-googleapis-common-protos")
13082 (version "1.66.0")
13083 (source
13084 (origin
13085 (method git-fetch)
13086 (uri (git-reference
13087 (url "https://github.com/googleapis/python-api-common-protos")
13088 (commit (string-append "v" version))))
13089 (file-name (git-file-name name version))
13090 (sha256
13091 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
13092 (build-system pyproject-build-system)
13093 (propagated-inputs (list python-protobuf))
13094 (native-inputs (list python-pytest python-setuptools))
13095 (home-page "https://github.com/googleapis/python-api-common-protos")
13096 (synopsis "Common protobufs used in Google APIs")
13097 (description
13098 "This package contains Python classes generated from the common protos in
13099the @code{googleapis/api-common-protos} repository.")
13100 (license license:asl2.0)))
13101
13102(define-public python-google-api-core
13103 (package
13104 (name "python-google-api-core")
13105 (version "2.29.0")
13106 (source
13107 (origin
13108 (method git-fetch)
13109 (uri (git-reference
13110 (url "https://github.com/googleapis/python-api-core")
13111 (commit (string-append "v" version))))
13112 (file-name (git-file-name name version))
13113 (sha256
13114 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
13115 (build-system pyproject-build-system)
13116 (arguments
13117 (list
13118 #:test-flags
13119 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13120 ;; deprecated and scheduled for removal in a future version. Use
13121 ;; timezone-aware objects to represent datetimes in UTC:
13122 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13123 #~(list "-W" "ignore::DeprecationWarning")))
13124 (propagated-inputs
13125 (list python-google-auth
13126 python-googleapis-common-protos
13127 python-protobuf
13128 python-proto-plus
13129 python-requests))
13130 (native-inputs
13131 (list python-mock
13132 python-pytest
13133 python-pytest-asyncio
13134 python-pytest-mock
13135 python-setuptools))
13136 (home-page "https://github.com/googleapis/python-api-core")
13137 (synopsis "Google API client core library")
13138 (description
13139 "This library defines common helpers used by all Google API clients.")
13140 (license license:asl2.0)))
13141
13142(define-public python-google-cloud-core
13143 (package
13144 (name "python-google-cloud-core")
13145 (version "2.5.0")
13146 (source
13147 (origin
13148 (method git-fetch)
13149 (uri (git-reference
13150 (url "https://github.com/googleapis/python-cloud-core")
13151 (commit (string-append "v" version))))
13152 (file-name (git-file-name name version))
13153 (sha256
13154 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
13155 (build-system pyproject-build-system)
13156 (arguments
13157 (list
13158 #:test-flags
13159 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13160 ;; deprecated and scheduled for removal in a future version. Use
13161 ;; timezone-aware objects to represent datetimes in UTC:
13162 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13163 #~(list "-W" "ignore::DeprecationWarning")))
13164 (propagated-inputs (list python-google-api-core python-google-auth))
13165 (native-inputs
13166 (list python-grpcio
13167 python-grpcio-status
13168 python-pytest
13169 python-setuptools))
13170 (home-page "https://github.com/googleapis/python-cloud-core")
13171 (synopsis "Google Cloud API client core library")
13172 (description
13173 "This library defines common helpers (e.g. base @code{Client} classes)
13174used by all of the @code{google-cloud-*} packages.")
13175 (license license:asl2.0)))
13176
13177(define-public python-google-cloud-storage
13178 (package
13179 (name "python-google-cloud-storage")
13180 (version "2.19.0")
13181 (source
13182 (origin
13183 (method git-fetch)
13184 (uri (git-reference
13185 (url "https://github.com/googleapis/python-storage")
13186 (commit (string-append "v" version))))
13187 (file-name (git-file-name name version))
13188 (sha256
13189 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
13190 (build-system pyproject-build-system)
13191 (arguments
13192 (list
13193 #:test-flags
13194 #~(list
13195 ;; XXX: Missing test_utils.retry.
13196 "--ignore=tests/system/"
13197 ;; Needs docker.
13198 "--ignore=tests/conformance/"
13199 ;; XXX: Deprecations.
13200 "-k" (string-join
13201 (list "not test_set_api_request_attr"
13202 "test_create_bucket_w_custom_endpoint"
13203 "test_ctor_w_api_endpoint_override"
13204 "test_ctor_w_custom_endpoint_use_auth"
13205 "test_list_buckets_w_custom_endpoint")
13206 " and not ")
13207 "tests")))
13208 (native-inputs
13209 (list python-googleapis-common-protos
13210 python-mock
13211 python-pytest
13212 python-test-utils
13213 python-setuptools))
13214 (propagated-inputs
13215 (list python-google-api-core
13216 python-google-auth
13217 python-google-cloud-core
13218 python-google-resumable-media
13219 python-protobuf
13220 python-requests))
13221 (home-page "https://github.com/googleapis/python-storage")
13222 (synopsis "Google Cloud Storage API client library")
13223 (description
13224 "Google Cloud Storage allows you to store data on Google infrastructure,
13225and it can be used to distribute large data objects to users via direct
13226download. This package provides a Google Cloud Storage API client library for
13227Python.")
13228 (license license:asl2.0)))
13229
13230(define-public python-smart-open
13231 (package
13232 (name "python-smart-open")
13233 (version "7.3.0")
13234 (source
13235 (origin
13236 (method git-fetch) ;no tests in PyPI archive
13237 (uri (git-reference
13238 (url "https://github.com/piskvorky/smart_open")
13239 (commit (string-append "v" version))))
13240 (file-name (git-file-name name version))
13241 (sha256
13242 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
13243 (build-system pyproject-build-system)
13244 (arguments
13245 (list
13246 #:test-flags
13247 #~(list "--ignore=ci_helpers/"
13248 "--ignore=integration-tests/"
13249 ;; FIXME: Enable when guix/guix#1436 is resolved.
13250 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
13251 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
13252 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
13253 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
13254 "--ignore=tests/test_gcs.py")))
13255 (propagated-inputs
13256 (list python-azure-common
13257 python-azure-core
13258 python-azure-storage-blob
13259 python-boto3
13260 ;; python-google-cloud-storage ;see guix/guix#1436
13261 python-paramiko
13262 python-requests
13263 python-wrapt
13264 python-zstandard))
13265 (native-inputs
13266 (list python-numpy
13267 python-moto
13268 python-pytest
13269 python-pytest-rerunfailures
13270 python-responses
13271 python-setuptools
13272 python-setuptools-scm
13273 python-wheel))
13274 (home-page "https://github.com/piskvorky/smart_open")
13275 (synopsis "Utilities for streaming large files")
13276 (description
13277 "This package provides utilities for streaming large files (S3, HDFS,
13278GCS, Azure Blob Storage, gzip, bz2, etc.)")
13279 (license license:expat)))
13280
13281(define-public python-smart-open-6
13282 (package
13283 (inherit python-smart-open)
13284 (name "python-smart-open")
13285 (version "6.4.0")
13286 (source
13287 (origin
13288 (method git-fetch)
13289 (uri (git-reference
13290 (url "https://github.com/piskvorky/smart_open")
13291 (commit (string-append "v" version))))
13292 (file-name (git-file-name name version))
13293 (sha256
13294 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
13295 (arguments
13296 (list
13297 ;; XXX: Tests need some older native inputs, disable for now.
13298 #:tests? #f))))
13299
13300(define-public python-w3lib
13301 (package
13302 (name "python-w3lib")
13303 (version "2.3.1")
13304 (source
13305 (origin
13306 (method url-fetch)
13307 (uri (pypi-uri "w3lib" version))
13308 (sha256
13309 (base32
13310 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
13311 (build-system pyproject-build-system)
13312 (native-inputs
13313 (list python-pytest python-setuptools python-wheel))
13314 (home-page "https://github.com/scrapy/w3lib")
13315 (synopsis "Python library of web-related functions")
13316 (description
13317 "This is a Python library of web-related functions, such as: remove
13318comments, or tags from HTML snippets, extract base url from HTML snippets,
13319translate entities on HTML strings, among other things.")
13320 (license license:bsd-3)))
13321
13322(define-public python-webcolors
13323 (package
13324 (name "python-webcolors")
13325 (version "25.10.0")
13326 (source
13327 (origin
13328 (method git-fetch)
13329 (uri (git-reference
13330 (url "https://github.com/ubernostrum/webcolors")
13331 (commit version)))
13332 (sha256
13333 (base32 "1wknzir5252y30wcpwxb04ngmrdw1llzqmrpiajyhkm81x2lgrym"))))
13334 (build-system pyproject-build-system)
13335 (native-inputs
13336 (list python-pdm-backend python-pytest))
13337 (home-page "https://github.com/ubernostrum/webcolors")
13338 (synopsis "HTML/CSS color definitions library")
13339 (description "@code{python-webcolors} is a module for working with
13340HTML/CSS color definitions. Normalizing and converting between the following
13341formats is supported.
13342@itemize
13343@item Specification-defined color names
13344@item Six-digit hexadecimal
13345@item Three-digit hexadecimal
13346@item Integer rgb() triplet
13347@item Percentage rgb() triplet
13348@end itemize
13349Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
13350can be handled by the @code{colorsys} module in the Python standard library.")
13351 (license license:bsd-3)))
13352
13353(define-public python-woob
13354 ;; TODO: woob requires backends which are currently installed on the fly in
13355 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
13356 ;; them in the store instead. Many modules are included in the modules
13357 ;; directory in the source tree, but it is unclear how to install them.
13358 ;; Many modules require extra dependencies though, so maybe they should be
13359 ;; packaged independently of woob itself.
13360 (package
13361 (name "python-woob")
13362 (version "3.7")
13363 (source
13364 (origin
13365 (method git-fetch)
13366 (uri (git-reference
13367 (url "https://gitlab.com/woob/woob.git")
13368 (commit version)))
13369 (file-name (git-file-name name version))
13370 (sha256
13371 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
13372 (build-system pyproject-build-system)
13373 (arguments
13374 (list
13375 #:test-flags
13376 ;; Deselect tests that require DNS lookup.
13377 #~(list
13378 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
13379 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
13380 #:phases
13381 #~(modify-phases %standard-phases
13382 (add-before 'build 'relax-requirements
13383 (lambda _
13384 (substitute* "pyproject.toml"
13385 ;; packaging ~= 23.0
13386 (("\"packaging .*\",")
13387 "")
13388 ;; rich~=13.0
13389 (("\"rich .*\",")
13390 "\"rich\",")))))))
13391 (native-inputs
13392 (list nss-certs-for-test
13393 python-pytest
13394 python-setuptools))
13395 (propagated-inputs
13396 (list python-babel
13397 python-colorama
13398 python-cssselect
13399 python-dateutil
13400 python-feedparser
13401 python-html2text
13402 python-lxml
13403 python-packaging
13404 python-pillow
13405 python-prettytable
13406 python-pycountry
13407 python-pyyaml
13408 python-requests
13409 python-responses
13410 python-rich
13411 python-termcolor
13412 python-unidecode))
13413 (home-page "https://woob.tech/")
13414 (synopsis "Woob, Web Outside Of Browsers")
13415 (description
13416 "Woob is a collection of applications able to interact with
13417websites, without requiring the user to open them in a browser. It also
13418provides well-defined APIs to talk to websites lacking one.")
13419 (license license:lgpl3+)))
13420
13421(define-public python-flask-combo-jsonapi
13422 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
13423 (revision "0"))
13424 (package
13425 (name "python-flask-combo-jsonapi")
13426 (version (git-version "1.1.0" revision commit))
13427 (source
13428 (origin
13429 (method git-fetch)
13430 (uri (git-reference
13431 (url "https://github.com/AdCombo/flask-combo-jsonapi")
13432 (commit commit)))
13433 (file-name (git-file-name name version))
13434 (sha256
13435 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
13436 (build-system pyproject-build-system)
13437 (arguments
13438 (list
13439 #:test-flags
13440 #~(list
13441 "-k"
13442 (string-join
13443 (list
13444 ;; XXX: This tests a feature that doesn't make sense when dropping
13445 ;; marshmallow < 3 support.
13446 "not test_compute_schema_propagate_context"
13447 ;; The following tests fail for unknown reasons (see:
13448 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
13449 "test_get_list_with_simple_filter_relationship_custom_qs_api"
13450 "test_get_list_with_simple_filter_relationship_error")
13451 " and not "))
13452 #:phases
13453 #~(modify-phases %standard-phases
13454 (add-after 'unpack 'loosen-requirements
13455 (lambda _
13456 ;; Don't pin specific versions of dependencies.
13457 (substitute* "requirements.txt"
13458 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
13459 (string-append dep "\n"))
13460 (("^marshmallow_jsonapi[=<>].*")
13461 "marshmallow_jsonapi_minfork\n"))
13462 ;; Drop support for marshmallow < 3.
13463 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
13464 "flask_combo_jsonapi/schema.py")
13465 (("from marshmallow\\.base import SchemaABC")
13466 "from marshmallow import Schema")
13467 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
13468 "if isinstance(related_schema_cls, Schema):"))
13469 (substitute* "tests/test_sqlalchemy_data_layer.py"
13470 (("default=None")
13471 "dump_default=None")
13472 (("missing=")
13473 "load_default=")))))))
13474 (propagated-inputs
13475 (list python-flask
13476 python-marshmallow
13477 python-marshmallow-jsonapi
13478 python-simplejson
13479 python-sqlalchemy
13480 python-apispec
13481 python-simplejson
13482 python-six))
13483 (native-inputs
13484 (list python-pytest python-setuptools))
13485 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
13486 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
13487 (description
13488 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
13489APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
13490specification.
13491
13492It tries to combine the power of Flask-Restless with the flexibility of
13493Flask-RESTful to quickly build APIs that fit the complexity of existing
13494real-life projects with legacy data and diverse storage providers.")
13495 (license license:expat))))
13496
13497(define-public python-mwparserfromhell
13498 (package
13499 (name "python-mwparserfromhell")
13500 (version "0.7.2")
13501 (source
13502 (origin
13503 (method git-fetch)
13504 (uri (git-reference
13505 (url "https://github.com/earwig/mwparserfromhell")
13506 (commit (string-append "v" version))))
13507 (file-name (git-file-name name version))
13508 (sha256
13509 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
13510 (build-system pyproject-build-system)
13511 (native-inputs (list python-pytest python-setuptools))
13512 (home-page "https://github.com/earwig/mwparserfromhell")
13513 (synopsis "Python parser for MediaWiki wikicode")
13514 (description
13515 "The MediaWiki Parser From Hell is a python library package that provides
13516a parser for MediaWiki.
13517
13518It exposes parses as normal string objects with additional methods giving
13519access to the special Wikicode features it contains (hyperlinks, tags,
13520templates…). The parser doesn't interpolate strings at all, it remains at a
13521purely formal level.
13522
13523Full documentation may be found at
13524@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
13525 (license license:expat)))
13526
13527(define-public python-tweepy
13528 (package
13529 (name "python-tweepy")
13530 (version "4.16.0")
13531 (source
13532 (origin
13533 (method git-fetch)
13534 (uri
13535 (git-reference
13536 (url "https://github.com/tweepy/tweepy")
13537 (commit (string-append "v" version))))
13538 (file-name (git-file-name name version))
13539 (sha256
13540 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
13541 (build-system pyproject-build-system)
13542 (arguments
13543 ;; tests: 149 passed, 3 skipped, 1 warning
13544 (list #:test-backend #~'unittest
13545 #:test-flags #~(list "discover" "tests")))
13546 (native-inputs
13547 (list nss-certs-for-test
13548 python-flit-core
13549 python-urllib3-1.26
13550 python-vcrpy))
13551 (propagated-inputs
13552 (list python-aiohttp
13553 python-async-lru
13554 python-oauthlib
13555 python-requests
13556 python-requests-oauthlib))
13557 (home-page "https://www.tweepy.org/")
13558 (synopsis "Twitter library for Python")
13559 (description
13560 "This package provides @code{Tweepy}, an easy-to-use Python library for
13561accessing the Twitter API.")
13562 (license license:expat)))
13563
13564(define-public python-quart
13565 (package
13566 (name "python-quart")
13567 (version "0.20.0")
13568 (source
13569 (origin
13570 (method git-fetch)
13571 (uri (git-reference
13572 (url "https://github.com/pallets/quart")
13573 (commit version)))
13574 (file-name (git-file-name name version))
13575 (sha256
13576 (base32 "1gk6vg2cwpn70aald3m50xibjqjamgpz7an11h82w1fig6zmw2il"))))
13577 (build-system pyproject-build-system)
13578 (arguments
13579 (list
13580 #:test-flags
13581 ;; Not sure why test fails; related to a change in dependencies.
13582 #~(list "-k" "not test_cli_blueprints[cli_group2-args2]")))
13583 (native-inputs
13584 (list python-flit-core
13585 python-pytest
13586 python-pytest-asyncio))
13587 (propagated-inputs
13588 (list hypercorn
13589 python-aiofiles
13590 python-blinker
13591 python-click
13592 python-dotenv
13593 python-flask
13594 python-itsdangerous
13595 python-jinja2
13596 python-markupsafe
13597 python-toml
13598 python-werkzeug))
13599 (home-page "https://gitlab.com/pgjones/quart/")
13600 (synopsis "Python ASGI web microframework with the same API as Flask")
13601 (description
13602 "This package provides a Python ASGI web microframework with the same API
13603as Flask.")
13604 (license license:expat)))
13605
13606(define-public python-quart-trio
13607 (package
13608 (name "python-quart-trio")
13609 (version "0.12.0")
13610 (source
13611 (origin
13612 (method url-fetch)
13613 (uri (pypi-uri "quart_trio" version))
13614 (sha256
13615 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
13616 (build-system pyproject-build-system)
13617 (arguments
13618 (list
13619 #:phases
13620 #~(modify-phases %standard-phases
13621 (add-after 'unpack 'remove-coverage-pytest-options
13622 (lambda _
13623 (substitute* "pyproject.toml"
13624 (("--no-cov-on-fail") "")))))))
13625 (native-inputs
13626 (list python-pdm-backend
13627 python-pytest
13628 python-pytest-sugar
13629 python-pytest-trio))
13630 (propagated-inputs
13631 (list hypercorn
13632 python-quart
13633 python-trio))
13634 (home-page "https://github.com/pgjones/quart-trio")
13635 (synopsis "Extension for Quart to support the Trio event loop")
13636 (description
13637 "This package provides a Quart extension to provide Trio support. This
13638is an alternative to using the asyncio event loop present in the Python
13639standard library and supported by default in Quart.")
13640 (license license:expat)))
13641
13642(define-public python-ajsonrpc
13643 (package
13644 (name "python-ajsonrpc")
13645 (version "1.2.0")
13646 (source
13647 (origin
13648 (method git-fetch)
13649 (uri (git-reference
13650 (url "https://github.com/pavlov99/ajsonrpc")
13651 (commit version)))
13652 (file-name (git-file-name name version))
13653 (sha256
13654 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
13655 (build-system pyproject-build-system)
13656 (arguments
13657 (list
13658 #:phases
13659 #~(modify-phases %standard-phases
13660 (add-after 'unpack 'set-version
13661 (lambda _
13662 (substitute* "ajsonrpc/__init__.py"
13663 (("^__version__ = .*")
13664 (string-append "__version__ = \"" #$version "\"\n"))))))))
13665 (native-inputs
13666 (list python-pytest
13667 python-setuptools))
13668 (propagated-inputs
13669 (list python-quart
13670 python-sanic
13671 python-tornado))
13672 (home-page "https://github.com/pavlov99/ajsonrpc")
13673 (synopsis "Async JSON-RPC 2.0 protocol and server")
13674 (description
13675 "This package provides a Python JSON-RPC 2.0 protocol and server powered
13676by asyncio.")
13677 (license license:expat)))
13678
13679(define-public python-protego
13680 (package
13681 (name "python-protego")
13682 (version "0.4.0")
13683 (source
13684 (origin
13685 (method url-fetch)
13686 (uri (pypi-uri "protego" version))
13687 (sha256
13688 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
13689 (build-system pyproject-build-system)
13690 (native-inputs (list python-pytest python-setuptools python-wheel))
13691 (home-page "https://github.com/scrapy/protego")
13692 (synopsis "Python robots.txt parser with support for modern conventions")
13693 (description "Protego is a pure-Python @file{robots.txt} parser with support
13694for modern conventions.")
13695 (license license:bsd-3)))
13696
13697(define-public python-parsel
13698 (package
13699 (name "python-parsel")
13700 (version "1.10.0")
13701 (source
13702 (origin
13703 (method url-fetch)
13704 (uri (pypi-uri "parsel" version))
13705 (sha256
13706 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
13707 (build-system pyproject-build-system)
13708 (propagated-inputs
13709 (list python-cssselect
13710 python-jmespath
13711 python-lxml
13712 python-typing-extensions
13713 python-w3lib))
13714 (native-inputs
13715 (list python-psutil python-pytest python-setuptools python-wheel))
13716 (home-page "https://github.com/scrapy/parsel")
13717 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
13718 (description "Parsel is a library to extract and remove data from
13719HTML and XML using XPath and CSS selectors, optionally combined with
13720regular expressions.")
13721 (license license:bsd-3)))
13722
13723(define-public python-scrapy
13724 (package
13725 (name "python-scrapy")
13726 (version "2.13.3")
13727 (source
13728 (origin
13729 (method url-fetch)
13730 (uri (pypi-uri "scrapy" version))
13731 (sha256
13732 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
13733 (build-system pyproject-build-system)
13734 (arguments
13735 (list #:test-flags
13736 #~(list "--numprocesses" (number->string (parallel-job-count))
13737 "-k" (string-join
13738 ;; ConnectionRefusedError: [Errno 111] Connection
13739 ;; refused
13740 (list "not test_append"
13741 "test_append_active_mode"
13742 "test_overwrite"
13743 "test_overwrite_active_mode"
13744 "test_persist"
13745 ;; AssertionError
13746 "test_start_deprecated_super")
13747 " and not ")
13748 ;; Skip documentation testing.
13749 "--ignore=docs")
13750 #:phases
13751 #~(modify-phases %standard-phases
13752 (add-before 'check 'prepare-test-environment
13753 (lambda _
13754 (setenv "HOME" "/tmp"))))))
13755 (propagated-inputs
13756 (list python-cryptography
13757 python-cssselect
13758 python-defusedxml
13759 python-itemadapter
13760 python-itemloaders
13761 python-lxml
13762 python-packaging
13763 python-parsel
13764 python-protego
13765 python-pydispatcher
13766 python-pyopenssl
13767 python-pypydispatcher
13768 python-queuelib
13769 python-service-identity
13770 python-tldextract
13771 python-twisted
13772 python-w3lib
13773 python-zope-interface))
13774 (native-inputs
13775 (list nss-certs-for-test
13776 python-hatchling
13777 python-pexpect
13778 python-pytest
13779 python-pytest-xdist
13780 python-setuptools
13781 python-sybil
13782 python-testfixtures))
13783 (home-page "https://scrapy.org")
13784 (synopsis "High-level Web crawling and Web scraping framework")
13785 (description "Scrapy is a fast high-level web crawling and web
13786scraping framework, used to crawl websites and extract structured data
13787from their pages. It can be used for a wide range of purposes, from data
13788mining to monitoring and automated testing.")
13789 (license license:bsd-3)))
13790
13791(define sdmx-test-data
13792 (let* ((commit "cd7899341b46e179e9f19b638478d70197e12c74")
13793 (revision "1")
13794 (name "sdmx-test-data")
13795 (version (git-version "0" revision commit)))
13796 (origin
13797 (method git-fetch)
13798 (uri (git-reference
13799 (url "https://github.com/khaeru/sdmx-test-data")
13800 (commit commit)))
13801 (file-name (git-file-name name version))
13802 (sha256
13803 (base32 "1n9y83raxxpgljbi0wjj27lhmyn19fnc2325a6cchwsa3b65ywv7")))))
13804
13805(define-public python-sdmx1
13806 (package
13807 (name "python-sdmx1")
13808 (version "2.26.0")
13809 (source
13810 (origin
13811 (method git-fetch)
13812 (uri (git-reference
13813 (url "https://github.com/khaeru/sdmx")
13814 (commit (string-append "v" version))))
13815 (file-name (git-file-name name version))
13816 (sha256
13817 (base32 "096c60pxzcw71bc9fj3hpjprrdiia365rqalapxx56g6g1vkgka9"))))
13818 (build-system pyproject-build-system)
13819 (arguments
13820 (list
13821 #:test-flags
13822 #~(list
13823 ;; 804 passed, 122 skipped, 28 deselected, 23 xfailed, 1 xpassed, 3 warnings
13824 ;; XXX: 'Version' object has no attribute 'pre'
13825 "--ignore=sdmx/tests/model/test_version.py"
13826 ;; Most of these tests require network connection.
13827 "--ignore=sdmx/tests/test_client.py"
13828 "--ignore=sdmx/tests/test_sources.py"
13829 "--ignore=sdmx/tests/test_docs.py"
13830 "--ignore=sdmx/tests/test_session.py"
13831 "--ignore=sdmx/tests/writer/test_xml.py"
13832 "--ignore=sdmx/tests/reader/test_xml_v21.py"
13833 "--deselect=sdmx/tests/convert/test_pandas.py::test_dataset_constraint"
13834 ;; Wrong python-flaky version
13835 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas_in_user_cache"
13836 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas"
13837 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v2_1_samples"
13838 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v3_0_samples"
13839 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_doc"
13840 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_message_type"
13841 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_max_errors"
13842 ;; sqlite3.OperationalError
13843 "--deselect=sdmx/tests/util/test_requests.py::TestOfflineAdapter::test_raises")
13844 #:phases
13845 #~(modify-phases %standard-phases
13846 (add-after 'unpack 'fix-version
13847 (lambda _
13848 ;; versioningit needs git tags; patch pyproject.toml to use
13849 ;; static version and create _version.py directly.
13850 (substitute* "pyproject.toml"
13851 (("version.source = \"versioningit\"")
13852 "
13853[tool.hatch.version]
13854path = \"sdmx/_version.py\"")
13855 ((", \"versioningit\"")
13856 ""))
13857 (call-with-output-file "sdmx/_version.py"
13858 (lambda (port)
13859 (format port "__version__ = \"~a\"~%" #$version)))))
13860 (add-before 'check 'pre-check
13861 (lambda _
13862 (setenv "SDMX_TEST_DATA" #$sdmx-test-data)
13863 (setenv "HOME" (dirname (getcwd))))))))
13864 (propagated-inputs
13865 (list python-dateutil
13866 python-lxml
13867 python-pandas
13868 python-platformdirs
13869 python-requests))
13870 (native-inputs
13871 (list python-filelock
13872 python-flaky
13873 python-hatchling
13874 python-jinja2
13875 python-pyarrow
13876 python-pytest
13877 python-pytest-cov
13878 python-pytest-xdist
13879 python-requests-mock
13880 python-requests-cache
13881 python-responses))
13882 (home-page "https://sdmx1.readthedocs.io")
13883 (synopsis "Statistical Data and Metadata eXchange (SDMX) for Python")
13884 (description "This package provides a Python implementation of the
13885SDMX 2.1 and 3.0 standards for Statistical Data and Metadata eXchange.
13886These standards are developed and used by statistical agencies and
13887international organisations. This package can be used to:
13888@itemize
13889@item Explore and retrieve data available from SDMX-REST web services
13890operated by providers including the World Bank, International Monetary
13891Fund, Eurostat, OECD, and United Nations;
13892@item Read and write data and metadata in file formats including
13893SDMX-ML (XML), SDMX-JSON, and SDMX-CSV;
13894@item Convert data and metadata into @code{python-pandas} objects, for
13895use with the analysis, plotting, and other tools in the Python data
13896science ecosystem;
13897@item Apply the SDMX information model (IM) to structure and publish
13898your own data.
13899@end itemize")
13900 (license license:asl2.0)))
13901
13902(define-public python-jstyleson
13903 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
13904 (revision "0"))
13905 (package
13906 (name "python-jstyleson")
13907 (version (git-version "0.0.2" revision commit))
13908 (source
13909 (origin
13910 (method git-fetch)
13911 (uri (git-reference
13912 (url "https://github.com/linjackson78/jstyleson")
13913 (commit commit)))
13914 (file-name (git-file-name name version))
13915 (sha256
13916 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
13917 (build-system pyproject-build-system)
13918 (native-inputs (list python-pytest python-setuptools))
13919 (home-page "https://github.com/linjackson78/jstyleson")
13920 (synopsis "JSON parser supporting js-style comments")
13921 (description
13922 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
13923standard Python @code{json} library, it understands js-style comments.
13924Trailing comma is also supported.")
13925 (license license:expat))))
13926
13927(define-public python-html-text
13928 (package
13929 (name "python-html-text")
13930 (version "0.7.0")
13931 (source
13932 (origin
13933 (method url-fetch)
13934 (uri (pypi-uri "html_text" version))
13935 (sha256
13936 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
13937 (build-system pyproject-build-system)
13938 (native-inputs
13939 (list python-pytest
13940 python-setuptools
13941 python-wheel))
13942 (propagated-inputs
13943 (list python-lxml
13944 python-lxml-html-clean))
13945 (home-page "https://github.com/TeamHG-Memex/html-text")
13946 (synopsis "Extract text from HTML")
13947 (description "HTML to Text is a Python library for extract text from HTML.
13948Contrary to other solution such as LXML or Beautiful Soup, the text extracted
13949with @code{html_text} does not contain elements such as JavaScript or inline
13950styles not normally visible to users. It also normalizes white space
13951characters in a smarter, more visually pleasing style.")
13952 (license license:expat)))
13953
13954(define-public python-mf2py
13955 (package
13956 (name "python-mf2py")
13957 (version "2.0.1")
13958 (source
13959 (origin
13960 (method git-fetch)
13961 (uri (git-reference
13962 (url "https://github.com/microformats/mf2py")
13963 (commit (string-append "v" version))))
13964 (file-name (git-file-name name version))
13965 (sha256
13966 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
13967 (build-system pyproject-build-system)
13968 (native-inputs (list python-mock python-poetry-core python-pytest))
13969 (propagated-inputs
13970 (list python-beautifulsoup4 python-html5lib python-requests))
13971 (home-page "https://github.com/microformats/mf2py")
13972 (synopsis "Python Microformats2 parser")
13973 (description
13974 "This Python library provides a Microformats2 parser implementing the
13975full Microformats2 (mf2) specification, including backward compatibility with
13976Microformats1 (mf1).")
13977 (license license:expat)))
13978
13979(define-public python-extruct
13980 (package
13981 (name "python-extruct")
13982 (version "0.18.0")
13983 (source (origin
13984 (method git-fetch) ;for tests
13985 (uri (git-reference
13986 (url "https://github.com/scrapinghub/extruct")
13987 (commit (string-append "v" version))))
13988 (file-name (git-file-name name version))
13989 (sha256
13990 (base32
13991 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
13992 (build-system pyproject-build-system)
13993 (arguments
13994 (list
13995 #:test-flags
13996 ;; 67 passed, 3 deselected
13997 ;; XXX: 3 tests fail with errors in assertion.
13998 #~(list "-k" (string-append
13999 "not test_microformat"
14000 " and not test_microformat"
14001 " and not test_umicroformat"))))
14002 (native-inputs
14003 (list python-pytest
14004 python-setuptools
14005 python-wheel))
14006 (propagated-inputs
14007 (list python-html-text
14008 python-jstyleson
14009 python-lxml
14010 python-mf2py
14011 python-pyrdfa3
14012 python-rdflib
14013 python-w3lib))
14014 (home-page "https://github.com/scrapinghub/extruct")
14015 (synopsis "Extract embedded metadata from HTML markup")
14016 (description "@code{extruct} is a Python library for extracting embedded
14017metadata from HTML markup. Currently, extruct supports:
14018@itemize
14019@item W3C's HTML Microdata
14020@item embedded JSON-LD
14021@item Microformat via mf2py
14022@item Facebook's Open Graph
14023@item (experimental) RDFa via rdflib
14024@item Dublin Core Metadata (DC-HTML-2003)
14025@end itemize")
14026 (license license:bsd-3)))
14027
14028(define-public python-wadllib
14029 (package
14030 (name "python-wadllib")
14031 (version "2.0.0")
14032 (source
14033 (origin
14034 (method url-fetch)
14035 (uri (pypi-uri "wadllib" version))
14036 (sha256
14037 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
14038 (build-system pyproject-build-system)
14039 (arguments
14040 (list
14041 ;; XXX: Doctests are currently failing.
14042 #:tests? #f
14043 #:phases
14044 #~(modify-phases %standard-phases
14045 (replace 'check
14046 (lambda* (#:key tests? #:allow-other-keys)
14047 (if tests?
14048 (invoke "zope-testrunner" "--test-path=src")
14049 (format #t "test suite not run~%")))))))
14050 (native-inputs
14051 (list python-multipart python-setuptools python-zope-testrunner))
14052 (propagated-inputs (list python-lazr-uri))
14053 (home-page "https://launchpad.net/wadllib")
14054 (synopsis "Web Application Description Language (WADL) navigation library")
14055 (description "The @code{wadllib} Python library allows navigating HTTP
14056resources using Web Application Description Language (WADL) files as guides.")
14057 (license license:lgpl3)))
14058
14059(define-public python-zeep
14060 (package
14061 (name "python-zeep")
14062 (version "4.3.1")
14063 (source
14064 (origin
14065 (method url-fetch)
14066 (uri (pypi-uri "zeep" version))
14067 (sha256
14068 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
14069 (build-system pyproject-build-system)
14070 (arguments
14071 (list
14072 #:phases
14073 '(modify-phases %standard-phases
14074 (add-after 'unpack 'compatibility
14075 (lambda _
14076 ;; Relax requests-file requirement.
14077 (substitute* "pyproject.toml"
14078 (("\"requests-file.*\",")
14079 "\"requests-file\","))
14080 ;; httpx removed the "proxies" keyword. It's now either "mounts"
14081 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
14082 (substitute* "src/zeep/transports.py"
14083 (("proxies=") "proxy="))))
14084 ;; One test requires write access
14085 (add-before 'check 'set-HOME
14086 (lambda _ (setenv "HOME" (getcwd)))))))
14087 (propagated-inputs
14088 (list python-attrs
14089 python-isodate
14090 python-lxml
14091 python-platformdirs
14092 python-pytz
14093 python-requests
14094 python-requests-file
14095 python-requests-toolbelt))
14096 (native-inputs
14097 (list nss-certs-for-test
14098 python-freezegun
14099 python-pretend
14100 python-pytest
14101 python-pytest-asyncio
14102 python-pytest-httpx
14103 python-requests-mock
14104 python-setuptools
14105 python-wheel))
14106 (home-page "https://docs.python-zeep.org/en/stable/")
14107 (synopsis "Python SOAP client based on lxml / requests")
14108 (description "Zeep is a Python SOAP client. Highlights:
14109
14110@itemize
14111@item Build on top of @code{lxml} and @code{requests}.
14112@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
14113@item Support for WS-Addressing headers.
14114@item Support for WSSE (UserNameToken / x.509 signing).
14115@item Support for @code{asyncio} via @code{httpx}.
14116@item Experimental support for XOP messages.
14117@end itemize")
14118 (license license:expat)))
14119
14120(define-public python-http-client
14121 (package
14122 (name "python-http-client")
14123 (version "3.3.7")
14124 (source
14125 (origin
14126 (method git-fetch)
14127 (uri (git-reference
14128 (url "https://github.com/sendgrid/python-http-client")
14129 (commit version)))
14130 (file-name (git-file-name name version))
14131 (sha256
14132 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
14133 (build-system pyproject-build-system)
14134 (arguments
14135 (list
14136 #:test-backend #~'unittest
14137 #:phases
14138 #~(modify-phases %standard-phases
14139 (add-after 'unpack 'fix-tests
14140 (lambda _
14141 ;; The test expects the copyright to be updated each year.
14142 (substitute* "tests/test_daterange.py"
14143 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
14144 (native-inputs
14145 (list python-setuptools))
14146 (home-page "https://github.com/sendgrid/python-http-client")
14147 (synopsis "HTTP REST client for Python")
14148 (description
14149 "This package provides access to any RESTful or RESTful-like API.")
14150 (license license:expat)))
14151
14152(define-public python-sendgrid
14153 (package
14154 (name "python-sendgrid")
14155 (version "6.9.7")
14156 (source
14157 (origin
14158 (method git-fetch)
14159 (uri (git-reference
14160 (url "https://github.com/sendgrid/sendgrid-python")
14161 (commit version)))
14162 (file-name (git-file-name name version))
14163 (sha256
14164 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
14165 (build-system pyproject-build-system)
14166 (arguments
14167 (list
14168 #:test-flags
14169 #~(list "--ignore=test/integ"
14170 ;; Network access is required.
14171 "--ignore=live_test.py")))
14172 (native-inputs
14173 (list python-pytest
14174 python-setuptools))
14175 (propagated-inputs
14176 (list python-cryptography
14177 python-http-client
14178 python-flask
14179 python-pyyaml
14180 python-six ;hard dependency
14181 python-starkbank-ecdsa
14182 python-werkzeug))
14183 (home-page "https://github.com/sendgrid/sendgrid-python/")
14184 (synopsis "SendGrid API library for Python")
14185 (description
14186 "The @code{sendgrid} Python library allows access to the
14187SendGrid Web API v3. Version 3+ of the library provides full support for all
14188SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
14189 (license license:expat)))
14190
14191(define-public python-sse-starlette
14192 (package
14193 (name "python-sse-starlette")
14194 (version "3.4.4")
14195 (source
14196 (origin
14197 (method git-fetch)
14198 (uri (git-reference
14199 (url "https://github.com/sysid/sse-starlette")
14200 (commit (string-append "v" version))))
14201 (file-name (git-file-name name version))
14202 (sha256
14203 (base32 "0jzy3mjszl7fr524cggyf8k97x6jpykvmxldmm2ckmrqjpyj8jmz"))))
14204 (build-system pyproject-build-system)
14205 (arguments
14206 (list
14207 #:test-flags
14208 #~(list
14209 ;; XXX: Server fails to start.
14210 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
14211 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
14212 ;; XXX: Missing test dependency - testcontainers, Docker is required.
14213 "--ignore=tests/integration/test_multiple_consumers.py")))
14214 (native-inputs
14215 (list python-asgi-lifespan
14216 python-httpx
14217 python-portend
14218 python-pytest
14219 python-pytest-asyncio
14220 python-psutil
14221 python-setuptools
14222 python-tenacity
14223 python-uvicorn))
14224 (propagated-inputs
14225 (list python-anyio
14226 python-starlette))
14227 (home-page "https://github.com/sysid/sse-starlette")
14228 (synopsis "SSE plugin for Starlette")
14229 (description
14230 "This package provides SSE plugin for Starlette.")
14231 (license license:bsd-3)))
14232
14233(define-public python-sseclient-py
14234 (package
14235 (name "python-sseclient-py")
14236 (version "1.9.0")
14237 (source
14238 (origin
14239 (method git-fetch)
14240 (uri (git-reference
14241 (url "https://github.com/mpetazzoni/sseclient")
14242 (commit (string-append "sseclient-py-" version))))
14243 (file-name (git-file-name name version))
14244 (sha256
14245 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
14246 (build-system pyproject-build-system)
14247 (native-inputs (list python-hatchling python-pytest))
14248 (arguments
14249 (list
14250 #:test-backend #~'unittest
14251 #:test-flags #~'("discover" "--verbose" "tests")))
14252 (home-page "https://github.com/mpetazzoni/sseclient")
14253 (synopsis "Pure-Python Server Side Events (SSE) client")
14254 (description
14255 "This package provides a Python client for SSE event sources that
14256seamlessly integrates with @code{urllib3} and @code{requests}.")
14257 (license license:asl2.0)))
14258
14259(define-public python-starlette
14260 (package
14261 (name "python-starlette")
14262 (version "0.49.1")
14263 (source (origin
14264 (method git-fetch)
14265 (uri (git-reference
14266 (url "https://github.com/encode/starlette")
14267 (commit version)))
14268 (file-name (git-file-name name version))
14269 (sha256
14270 (base32
14271 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
14272 (build-system pyproject-build-system)
14273 (propagated-inputs (list python-anyio
14274 python-typing-extensions
14275 ;; [all] extra dependencies:
14276 python-itsdangerous
14277 python-jinja2
14278 python-multipart
14279 python-pyyaml
14280 python-requests))
14281 (native-inputs (list python-hatchling
14282 python-httpx
14283 python-pytest
14284 python-typing-extensions))
14285 (home-page "https://github.com/encode/starlette")
14286 (synopsis "Little ASGI library")
14287 (description
14288 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
14289Interface) framework/toolkit for building async web services in Python.")
14290 (license license:bsd-3)))
14291
14292(define-public python-starsessions
14293 (package
14294 (name "python-starsessions")
14295 (version "1.3.0")
14296 (source (origin
14297 (method git-fetch)
14298 (uri (git-reference
14299 (url "https://github.com/alex-oleshkevich/starsessions")
14300 (commit (string-append "v" version))))
14301 (file-name (git-file-name name version))
14302 (sha256
14303 (base32
14304 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
14305 (build-system pyproject-build-system)
14306 (arguments
14307 (list
14308 #:test-flags
14309 ;; These tests require a running redis server
14310 '(list "--ignore=tests/backends/test_redis.py"
14311 ;; XXX: this failure indicates a real compatibility problem, but
14312 ;; it seems restricted to the tests only.
14313 ;; AttributeError: 'Cookies' object has no attribute
14314 ;; 'clear_session_cookies'
14315 "-k"
14316 (string-append "not test_session_clears_on_tab_close"
14317 ;; This fails because an error is not raised.
14318 " and not test_session_wants_secret_key"))
14319 #:phases
14320 '(modify-phases %standard-phases
14321 (add-after 'unpack 'compatibilitiy
14322 (lambda _
14323 ;; aioredis has been renamed
14324 (substitute* "starsessions/backends/redis.py"
14325 (("aioredis") "redis")))))))
14326 (propagated-inputs
14327 (list python-redis
14328 python-itsdangerous
14329 python-starlette))
14330 (native-inputs
14331 (list python-httpx
14332 python-poetry-core
14333 python-pytest
14334 python-pytest-asyncio
14335 python-requests))
14336 (home-page "https://github.com/alex-oleshkevich/starsessions")
14337 (synopsis "Pluggable session support for Starlette and FastAPI")
14338 (description
14339 "This package adds pluggable session backends and ships default
14340@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
14341and FastAPI.")
14342 (license license:expat)))
14343
14344(define-public python-whereismyip
14345 (package
14346 (name "python-whereismyip")
14347 (version "0.1.0")
14348 (source
14349 (origin
14350 (method url-fetch)
14351 (uri (pypi-uri "whereismyip" version))
14352 (sha256
14353 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
14354 (build-system pyproject-build-system)
14355 (arguments (list #:tests? #false)) ; There are no tests.
14356 (native-inputs (list python-setuptools))
14357 (home-page "https://pypi.org/project/whereismyip/")
14358 (synopsis "Queries multiple geolocation services until one succeeds")
14359 (description
14360 "This package provides a simple Python library that queries multiple geolocation
14361services until one succeeds.")
14362 (license license:gpl3)))
14363
14364(define-public python-whitenoise
14365 (package
14366 (name "python-whitenoise")
14367 (version "6.9.0")
14368 (source (origin
14369 (method git-fetch) ; PyPI missing test fails
14370 (uri (git-reference
14371 (url "https://github.com/evansd/whitenoise")
14372 (commit version)))
14373 (file-name (git-file-name name version))
14374 (sha256
14375 (base32
14376 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
14377 (build-system pyproject-build-system)
14378 (arguments
14379 (list
14380 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
14381 (native-inputs (list python-brotli
14382 python-django
14383 python-requests
14384 python-pytest
14385 python-setuptools
14386 python-wheel))
14387 (home-page "https://github.com/evansd/whitenoise")
14388 (synopsis "Static file serving for WSGI applications")
14389 (description
14390 "WhiteNoise allows your web app to serve its own static files, making it
14391a self-contained unit that can be deployed anywhere without relying on nginx,
14392Amazon S3 or any other external service.")
14393 (license license:expat)))
14394
14395(define-public python-suds
14396 (package
14397 (name "python-suds")
14398 (version "1.2.0")
14399 (source
14400 (origin
14401 (method url-fetch)
14402 (uri (pypi-uri "suds" version))
14403 (sha256
14404 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
14405 (build-system pyproject-build-system)
14406 (arguments
14407 (list #:phases
14408 #~(modify-phases %standard-phases
14409 ;; XXX: chirp expects suds instead of suds_community
14410 (add-after 'install 'add-custom-dist-info
14411 (lambda _
14412 (for-each
14413 (lambda (dir)
14414 (with-directory-excursion (dirname dir)
14415 (symlink
14416 (basename dir)
14417 (string-append "suds-" #$version ".dist-info"))))
14418 (find-files #$output
14419 (lambda (file stat)
14420 (string-suffix? ".dist-info" file))
14421 #:directories? #t)))))))
14422 (native-inputs
14423 (list python-pytest
14424 python-setuptools
14425 python-wheel))
14426 (home-page "https://github.com/suds-community/suds")
14427 (synopsis "Lightweight SOAP python client for consuming Web Services")
14428 (description
14429 "Suds is a lightweight SOAP-based web service client for Python.")
14430 (license license:lgpl3+)))
14431
14432(define-public python-fastapi
14433 (package
14434 (name "python-fastapi")
14435 (version "0.137.1")
14436 (source
14437 (origin
14438 (method url-fetch)
14439 (uri (pypi-uri "fastapi" version))
14440 (sha256
14441 (base32 "072lzn48rwf9rjix4nqb5ym6hnaj2fb3jxclilym7n9h89q608w2"))))
14442 (build-system pyproject-build-system)
14443 (arguments
14444 (list
14445 ;; tests: 1126 passed, 12 skipped, 2 deselected
14446 #:test-backend #~'custom
14447 #:test-flags
14448 #~(list
14449 ;; Cannot import 'scripts' with just 'pytest'.
14450 "-m" "pytest"
14451 ;; Needs strawberry and sqlmodel.
14452 "--ignore=tests/test_tutorial/"
14453 ;; Fails due to failure to capture stdout.
14454 "--ignore=tests/test_fastapi_cli.py")))
14455 (native-inputs
14456 (list python-anyio
14457 python-dirty-equals
14458 python-flask
14459 python-inline-snapshot
14460 python-pdm-backend
14461 ;; python-pwdlib
14462 python-pyjwt
14463 python-pytest
14464 python-pytest-timeout
14465 python-pytest-xdist
14466 python-sqlalchemy-2
14467 ;; python-sqlmodel
14468 python-types-orjson
14469 python-types-ujson))
14470 (propagated-inputs
14471 (list python-starlette
14472 python-pydantic
14473 python-typing-extensions
14474 python-annotated-doc
14475 ;; [optional]
14476 python-email-validator
14477 python-fastapi-cli
14478 ;; python-fastar
14479 python-httpx
14480 python-itsdangerous
14481 python-jinja2
14482 python-multipart
14483 python-orjson
14484 python-pydantic
14485 python-pydantic-extra-types
14486 python-pydantic-settings
14487 python-pyyaml
14488 python-ujson
14489 python-uvicorn))
14490 (home-page "https://github.com/fastapi/fastapi")
14491 (synopsis "Web framework based on type hints")
14492 (description "FastAPI provides a web API framework based on pydantic and
14493starlette.")
14494 (license license:expat)))
14495
14496(define-public python-fastapi-csrf-protect
14497 (package
14498 (name "python-fastapi-csrf-protect")
14499 (version "0.3.3")
14500 (source (origin
14501 (method git-fetch)
14502 (uri (git-reference
14503 (url "https://github.com/aekasitt/fastapi-csrf-protect")
14504 (commit (string-append "v" version))))
14505 (file-name (git-file-name name version))
14506 (sha256
14507 (base32
14508 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
14509 (build-system pyproject-build-system)
14510 (propagated-inputs
14511 (list python-fastapi python-itsdangerous
14512 python-pydantic))
14513 (native-inputs
14514 (list python-poetry-core
14515 python-pytest))
14516 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
14517 (synopsis "Cross-Site Request Forgery (XSRF) protection")
14518 (description
14519 "This package provides a stateless implementation of @dfn{Cross-Site
14520Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
14521pattern.")
14522 (license license:expat)))
14523
14524(define-public python-fastapi-pagination-minimal
14525 (package
14526 (name "python-fastapi-pagination-minimal")
14527 (version "0.15.15")
14528 (source (origin
14529 (method git-fetch)
14530 (uri (git-reference
14531 (url "https://github.com/uriyyo/fastapi-pagination")
14532 (commit version)))
14533 (file-name (git-file-name name version))
14534 (sha256
14535 (base32
14536 "0jfmk5m2yrki9rw9izci2fxamam45mk36gl77rwbd5hnngkqbahv"))))
14537 (build-system pyproject-build-system)
14538 ;; We run the tests in python-fastapi-pagination only.
14539 (arguments (list #:tests? #false))
14540 ;; These are the only required dependencies,
14541 ;; please add all optional dependencies to the
14542 ;; full python-fastapi-pagination below.
14543 (propagated-inputs (list python-fastapi python-pydantic))
14544 (native-inputs (list python-hatchling))
14545 (home-page "https://github.com/uriyyo/fastapi-pagination")
14546 (synopsis "FastAPI pagination library")
14547 (description "@code{fastapi-pagination} is a Python library designed to
14548simplify pagination in FastAPI applications. It provides a set of utility
14549functions and data models to help you paginate your database queries and
14550return paginated responses to your clients.")
14551 (license license:expat)))
14552
14553(define-public python-fastapi-pagination
14554 (package
14555 (inherit python-fastapi-pagination-minimal)
14556 (name "python-fastapi-pagination")
14557 (arguments
14558 (list
14559 #:test-flags
14560 #~(list "--asyncio-mode=auto"
14561 "--ignore=tests/ext"
14562 ;; Netwok access is required.
14563 "-k" (string-join
14564 (list "not test_optional_params[postgres-default]"
14565 "test_optional_params[postgres-limit-offset]"
14566 "test_optional_params[sqlite-default]"
14567 "test_optional_params[sqlite-limit-offset]")
14568 " and not "))
14569 #:phases
14570 '(modify-phases %standard-phases
14571 (add-after 'unpack 'patch-tests
14572 (lambda _
14573 ;; We don't have a package for python-cassandra or motor, but we
14574 ;; also don't need them as we only run the unit tests anyway.
14575 (substitute* "tests/conftest.py"
14576 (("from cassandra.*") "")
14577 (("from motor.*") "")))))))
14578 (propagated-inputs
14579 (modify-inputs (package-propagated-inputs
14580 python-fastapi-pagination-minimal)
14581 (prepend python-asyncpg
14582 python-databases
14583 python-django
14584 python-fastapi
14585 python-pydantic
14586 python-sqlalchemy
14587 (package
14588 (inherit python-tortoise-orm)
14589 (arguments
14590 (substitute-keyword-arguments (package-arguments
14591 python-tortoise-orm)
14592 ((#:phases phases '%standard-phases)
14593 `(modify-phases ,phases
14594 (delete 'sanity-check)))))
14595 (propagated-inputs
14596 (modify-inputs propagated-inputs
14597 (replace "python-aiosqlite" python-aiosqlite)))))))
14598 (native-inputs
14599 (list python-aiosqlite
14600 python-asgi-lifespan
14601 python-asyncpg
14602 python-dirty-equals
14603 python-faker
14604 python-hatchling
14605 python-httpx
14606 python-pytest
14607 python-pytest-asyncio
14608 python-sqlalchemy
14609 python-typing-extensions))
14610 (description
14611 (string-append (package-description python-fastapi-pagination-minimal)
14612 "
14613
14614This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
14615all available optional dependencies supported by mainline
14616@code{fastapi-pagination}."))))
14617
14618(define-public python-fastapi-cli
14619 (package
14620 (name "python-fastapi-cli")
14621 (version "0.0.7")
14622 (source
14623 (origin
14624 (method url-fetch)
14625 (uri (pypi-uri "fastapi_cli" version))
14626 (sha256
14627 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
14628 (build-system pyproject-build-system)
14629 ;; Tests require fastapi, which depends on this package.
14630 (arguments (list #:tests? #false))
14631 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
14632 (native-inputs
14633 (list python-inline-snapshot python-pdm-backend python-pytest))
14634 (home-page "https://pypi.org/project/fastapi-cli/")
14635 (synopsis
14636 "Run and manage FastAPI apps from the command line with FastAPI CLI")
14637 (description
14638 "FastAPI CLI is a command line program fastapi that you can use to serve
14639your FastAPI app, manage your FastAPI project, and more.")
14640 (license license:expat)))
14641
14642(define-public python-pyactiveresource
14643 (package
14644 (name "python-pyactiveresource")
14645 (version "2.2.2")
14646 (source
14647 (origin
14648 (method git-fetch)
14649 (uri (git-reference
14650 (url "https://github.com/Shopify/pyactiveresource")
14651 (commit (string-append "v" version))))
14652 (file-name (git-file-name name version))
14653 (sha256
14654 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
14655 (build-system pyproject-build-system)
14656 ;; XXX: The package is fine, but the tests started failing on [email protected].
14657 ;; The package is not actively maintained, consider removing it once leaf.
14658 (arguments (list #:tests? #f))
14659 (native-inputs
14660 (list python-dateutil python-pytest python-pyyaml python-setuptools))
14661 (propagated-inputs (list python-six))
14662 (home-page "https://github.com/Shopify/pyactiveresource/")
14663 (synopsis "ActiveResource for Python")
14664 (description
14665 "This package provides a Python port of the ActiveResource project.
14666
14667Active Resource attempts to provide a coherent wrapper object-relational
14668mapping for REST web services. It follows the same philosophy as Active
14669Record, in that one of its prime aims is to reduce the amount of code needed
14670to map to these resources. This is made possible by relying on a number of
14671code- and protocol-based conventions that make it easy for Active Resource to
14672infer complex relations and structures.")
14673 (license license:expat)))
14674
14675(define-public python-shopifyapi
14676 (package
14677 (name "python-shopifyapi")
14678 (version "12.7.0")
14679 (source
14680 (origin
14681 (method git-fetch)
14682 (uri (git-reference
14683 (url "https://github.com/Shopify/shopify_python_api")
14684 (commit (string-append "v" version))))
14685 (file-name (git-file-name name version))
14686 (sha256
14687 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
14688 (build-system pyproject-build-system)
14689 (arguments
14690 (list
14691 #:test-flags
14692 #~'("-k"
14693 ;; Disable a failing test.
14694 "not test_raises_if_aud_doesnt_match_api_key")))
14695 (native-inputs (list python-mock python-pytest python-setuptools))
14696 (propagated-inputs (list python-pyactiveresource python-pyjwt
14697 python-pyyaml python-six))
14698 (home-page "https://github.com/Shopify/shopify_python_api")
14699 (synopsis "Shopify API for Python")
14700 (description
14701 "This package provides the Shopify API for Python.
14702
14703The ShopifyAPI library allows Python developers to programmatically access the
14704admin section of stores using an ActiveResource-like interface similar the
14705ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
14706list, create, update, or delete resources (e.g. Order, Product, Collection).")
14707 (license license:expat)))
14708
14709(define-public python-pybadges
14710 (package
14711 (name "python-pybadges")
14712 (version "3.0.1")
14713 (source (origin
14714 (method git-fetch)
14715 (uri (git-reference
14716 (url "https://github.com/google/pybadges")
14717 (commit version)))
14718 (file-name (git-file-name name version))
14719 (sha256
14720 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
14721 (build-system pyproject-build-system)
14722 (arguments
14723 (list
14724 #:test-flags
14725 #~'("-k"
14726 ;; Disable network dependent tests.
14727 "not test_changes and not test_not_image_url and not test_http_url")))
14728 (propagated-inputs (list python-jinja2 python-requests python-setuptools))
14729 (native-inputs (list python-flask
14730 python-fonttools
14731 python-pillow
14732 python-pytest
14733 python-wheel
14734 python-xmldiff))
14735 (home-page "https://github.com/google/pybadges")
14736 (synopsis "Generate Github-style badges on the command-line")
14737 (description
14738 "This package provides @code{python-pybadges}: a library and command-line
14739tool for generating Github-style badges as SVG images.")
14740 (license license:asl2.0)))
14741
14742(define-public python-grid5000
14743 (package
14744 (name "python-grid5000")
14745 (version "1.2.4")
14746 (source (origin
14747 (method git-fetch)
14748 (uri (git-reference
14749 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
14750 (commit (string-append "v" version))))
14751 (file-name (git-file-name name version))
14752 (sha256
14753 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
14754 (build-system pyproject-build-system)
14755 (arguments
14756 (list #:tests? #f)) ; No tests.
14757 (native-inputs (list python-setuptools))
14758 (propagated-inputs (list python-requests python-ipython python-pyyaml))
14759 (home-page "https://pypi.org/project/python-grid5000/")
14760 (synopsis "Grid5000 python client")
14761 (description
14762 "python-grid5000 is a python package wrapping the Grid5000 REST API.
14763You can use it as a library in your python project or you can explore the
14764Grid5000 resources interactively using the embedded shell.")
14765 (license license:gpl3+)))
14766
14767(define-public python-enoslib
14768 (package
14769 (name "python-enoslib")
14770 (version "8.0.1")
14771 (source
14772 (origin
14773 (method git-fetch)
14774 (uri (git-reference
14775 (url "https://gitlab.inria.fr/discovery/enoslib")
14776 (commit (string-append "v" version))))
14777 (file-name (git-file-name name version))
14778 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
14779 (arguments
14780 (list
14781 #:test-flags
14782 #~(list "enoslib/tests/unit"
14783 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
14784 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
14785 #:phases
14786 #~(modify-phases %standard-phases
14787 (add-before 'check 'pre-check
14788 (lambda* (#:key tests? #:allow-other-keys)
14789 (when tests?
14790 ;; Otherwise Ansible fails to create its config directory.
14791 (setenv "HOME" "/tmp"))))
14792 ;; Disable the sanity check, which fails with the following error:
14793 ;;
14794 ;; ContextualVersionConflict(rich 12.4.1
14795 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
14796 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
14797 ;;
14798 ;; The optional jupyter dependency of rich isn't critical for
14799 ;; EnOSlib to work
14800 (delete 'sanity-check))))
14801 (build-system pyproject-build-system)
14802 (native-inputs
14803 (list python-ddt
14804 python-freezegun
14805 python-pytest
14806 python-setuptools
14807 python-wheel))
14808 (propagated-inputs
14809 (list ansible
14810 python-cryptography
14811 python-grid5000
14812 python-jsonschema
14813 python-netaddr
14814 python-packaging
14815 python-requests
14816 python-rich
14817 python-sshtunnel
14818 python-pytz))
14819 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
14820 (synopsis "Deploy distributed testbeds on a variety of platforms")
14821 (description
14822 "EnOSlib is a library to build experimental frameworks on various
14823scientific testbeds. It lets you deploy networks of machines on actual
14824hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
14825 (license license:gpl3+)))
14826
14827(define-public python-pynetbox
14828 (package
14829 (name "python-pynetbox")
14830 (version "7.4.1")
14831 (source (origin
14832 (method url-fetch)
14833 (uri (pypi-uri "pynetbox" version))
14834 (sha256
14835 (base32
14836 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
14837 (build-system pyproject-build-system)
14838 (arguments
14839 (list
14840 #:test-flags
14841 ;; Integration tests depend on docker.
14842 '(list "--ignore=tests/integration")))
14843 (propagated-inputs (list python-packaging python-requests))
14844 (native-inputs
14845 (list python-pytest
14846 python-setuptools
14847 python-setuptools-scm
14848 python-wheel))
14849 (home-page "https://github.com/netbox-community/pynetbox")
14850 (synopsis "NetBox API client library")
14851 (description "Python module to query and edit data stored in a
14852@url{https://netbox.dev,NetBox} instance.")
14853 (license license:asl2.0)))
14854
14855(define-public python-waybackpack
14856 (package
14857 (name "python-waybackpack")
14858 (version "0.6.4")
14859 (source
14860 (origin
14861 (method url-fetch)
14862 (uri (pypi-uri "waybackpack" version))
14863 (sha256
14864 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14865 (build-system pyproject-build-system)
14866 (arguments
14867 (list #:tests? #f)) ; would require network (and SSL certificates)
14868 (propagated-inputs (list python-requests))
14869 (native-inputs (list python-pytest python-setuptools python-wheel))
14870 (home-page "https://github.com/jsvine/waybackpack")
14871 (synopsis
14872 "Download the entire Wayback Machine archive for a given URL")
14873 (description
14874 "This package provides a library and a command-line tool that lets
14875you download the entire Wayback Machine archive for a given URL.")
14876 (license license:expat)))
14877
14878(define-public python-xyzservices
14879 (package
14880 (name "python-xyzservices")
14881 (version "2025.4.0")
14882 (source
14883 (origin
14884 (method url-fetch)
14885 (uri (pypi-uri "xyzservices" version))
14886 (sha256
14887 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14888 (build-system pyproject-build-system)
14889 (arguments
14890 (list
14891 #:test-flags #~(list "-m" "not request")))
14892 (native-inputs
14893 (list python-pytest
14894 python-mercantile
14895 python-requests
14896 python-setuptools
14897 python-setuptools-scm))
14898 (home-page "https://github.com/geopandas/xyzservices")
14899 (synopsis "Source of XYZ tiles providers")
14900 (description "@code{xyzservices} is a lightweight library providing a
14901repository of available XYZ services offering raster basemap tiles. The
14902repository is provided via Python API and as a compressed JSON file.")
14903 (license license:bsd-3)))
14904
14905(define-public s3cmd
14906 (package
14907 (name "s3cmd")
14908 (version "2.4.0")
14909 (source
14910 (origin
14911 (method git-fetch)
14912 (uri (git-reference
14913 (url "https://github.com/s3tools/s3cmd")
14914 (commit (string-append "v" version))))
14915 (file-name (git-file-name name version))
14916 (sha256
14917 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14918 (build-system pyproject-build-system)
14919 (arguments
14920 (list
14921 #:tests? #f ; XXX: Tests require network access.
14922 #:phases
14923 #~(modify-phases %standard-phases
14924 (add-after 'unpack 'hide-wrapping
14925 (lambda _
14926 (substitute* "S3/MultiPart.py"
14927 (("sys\\.argv\\[0\\]")
14928 "\"s3cmd\""))
14929 (substitute* "s3cmd"
14930 (("optparser\\.get_prog_name\\(\\)")
14931 "\"s3cmd\"")))))))
14932 (native-inputs (list python-setuptools))
14933 (inputs (list python-dateutil python-magic))
14934 (home-page "https://s3tools.org/s3cmd")
14935 (synopsis "Command line tool for S3-compatible storage services")
14936 (description
14937 "S3cmd is a command line tool for uploading, retrieving and managing data
14938in storage services that are compatible with the Amazon Simple Storage
14939Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14940GnuPG encryption, and more. It also supports management of Amazon's
14941CloudFront content delivery network.")
14942 (license license:gpl2+)))