projects/guix·blob beam-team · refs

14725 lines · 531.2 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015-2025 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Christopher Baines <[email protected]>
5;;; Copyright © 2017 Muriithi Frederick Muriuki <[email protected]>
6;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
7;;; Copyright © 2013, 2014, 2015, 2016, 2020, 2023 Andreas Enge <[email protected]>
8;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
9;;; Copyright © 2015-2025 Ricardo Wurmus <[email protected]>
10;;; Copyright © 2017, 2021 Roel Janssen <[email protected]>
11;;; Copyright © 2016, 2017, 2020 Julien Lepiller <[email protected]>
12;;; Copyright © 2016, 2017 Nikita <[email protected]>
13;;; Copyright © 2014, 2017, 2021 Eric Bavier <[email protected]>
14;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
15;;; Copyright © 2015 Cyril Roelandt <[email protected]>
16;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
17;;; Copyright © 2016, 2019, 2022, 2025 Hartmut Goebel <[email protected]>
18;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <[email protected]>
19;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
20;;; Copyright © 2015, 2016 Christine Lemmer-Webber <[email protected]>
21;;; Copyright © 2017 Adriano Peluso <[email protected]>
22;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
23;;; Copyright © 2016 David Craven <[email protected]>
24;;; Copyright © 2017 Oleg Pykhalov <[email protected]>
25;;; Copyright © 2015, 2016 David Thompson <[email protected]>
26;;; Copyright © 2017 Mark Meyer <[email protected]>
27;;; Copyright © 2018 Clément Lassieur <[email protected]>
28;;; Copyright © 2018 Tomáš Čech <[email protected]>
29;;; Copyright © 2018, 2019, 2021, 2024 Nicolas Goaziou <[email protected]>
30;;; Copyright © 2018 Mathieu Othacehe <[email protected]>
31;;; Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
32;;; Copyright © 2018 swedebugia <[email protected]>
33;;; Copyright © 2019 Vagrant Cascadian <[email protected]>
34;;; Copyright © 2019, 2023 Brendan Tildesley <[email protected]>
35;;; Copyright © 2019 Pierre Langlois <[email protected]>
36;;; Copyright © 2019, 2020 Tanguy Le Carrour <[email protected]>
37;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
38;;; Copyright © 2020 Josh Marshall <[email protected]>
39;;; Copyright © 2020 Evan Straw <[email protected]>
40;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
41;;; Copyright © 2020 Holger Peters <[email protected]>
42;;; Copyright © 2020 Noisytoot <[email protected]>
43;;; Copyright © 2020 Edouard Klein <[email protected]>
44;;; Copyright © 2020, 2021, 2022, 2023, 2025 Vinicius Monego <[email protected]>
45;;; Copyright © 2020 Konrad Hinsen <[email protected]>
46;;; Copyright © 2020, 2022, 2024 Giacomo Leidi <[email protected]>
47;;; Copyright © 2020 Raghav Gururajan <[email protected]>
48;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
49;;; Copyright © 2021 Greg Hogan <[email protected]>
50;;; Copyright © 2021 Maxime Devos <[email protected]>
51;;; Copyright © 2021 Pradana Aumars <[email protected]>
52;;; Copyright © 2021, 2022, 2024, 2026 Arun Isaac <[email protected]>
53;;; Copyright © 2021-2022, 2024-2025 jgart <[email protected]>
54;;; Copyright © 2021 Alice Brenon <[email protected]>
55;;; Copyright © 2021 Mekeor Melire <[email protected]>
56;;; Copyright © 2022 John Kehayias <[email protected]>
57;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email protected]>
58;;; Copyright © 2022, 2023, 2025 Felix Gruber <[email protected]>
59;;; Copyright © 2022 Peter Polidoro <[email protected]>
60;;; Copyright © 2022 Antero Mejr <[email protected]>
61;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
62;;; Copyright © 2022, 2025 Nicolas Graves <[email protected]>
63;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
64;;; Copyright © 2022 msimonin <[email protected]>
65;;; Copyright © 2022 Michael Rohleder <[email protected]>
66;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
67;;; Copyright © 2023 dan <[email protected]>
68;;; Copyright © 2023 John Kehayias <[email protected]>
69;;; Copyright © 2023 Juliana Sims <[email protected]>
70;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
71;;; Copyright © 2024 Fabio Natali <[email protected]>
72;;; Copyright © 2024 Steve George <[email protected]>
73;;; Copyright © 2024 Troy Figiel <[email protected]>
74;;; Copyright © 2024, 2025 Sharlatan Hellseher <[email protected]>
75;;; Copyright © 2024 normally_js <[email protected]>
76;;; Copyright © 2024 Markku Korkeala <[email protected]>
77;;; Copyright © 2024 Nguyễn Gia Phong <[email protected]>
78;;; Copyright © 2024 Zheng Junjie <[email protected]>
79;;; Copyright © 2024 Spencer King <[email protected]>
80;;; Copyright © 2024 Attila Lendvai <[email protected]>
81;;; Copyright © 2025 Daniel Ziltener <[email protected]>
82;;; Copyright © 2025 gemmaro <[email protected]>
83;;; Copyright © 2025 Sergio Pastor Pérez <[email protected]>
84;;; Copyright © 2025 Jake Forster <[email protected]>
85;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
86;;; Copyright © 2025 Hugo Buddelmeijer <[email protected]>
87;;; Copyright © 2025-2026 Artur Wroblewski <[email protected]>
88;;; Copyright © 2025, 2026 Allan Adair <[email protected]>
89;;; Copyright © 2025 Aaron Covrig <[email protected]>
90;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
91;;; Copyright © 2026 mst <[email protected]>
92;;;
93;;; This file is part of GNU Guix.
94;;;
95;;; GNU Guix is free software; you can redistribute it and/or modify it
96;;; under the terms of the GNU General Public License as published by
97;;; the Free Software Foundation; either version 3 of the License, or (at
98;;; your option) any later version.
99;;;
100;;; GNU Guix is distributed in the hope that it will be useful, but
101;;; WITHOUT ANY WARRANTY; without even the implied warranty of
102;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
103;;; GNU General Public License for more details.
104;;;
105;;; You should have received a copy of the GNU General Public License
106;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
107
108(define-module (gnu packages python-web)
109 #:use-module (gnu packages admin)
110 #:use-module (gnu packages base)
111 #:use-module (gnu packages bash)
112 #:use-module (gnu packages check)
113 #:use-module (gnu packages cmake)
114 #:use-module (gnu packages compression)
115 #:use-module (gnu packages curl)
116 #:use-module (gnu packages databases)
117 #:use-module (gnu packages django)
118 #:use-module (gnu packages dns)
119 #:use-module (gnu packages freedesktop)
120 #:use-module (gnu packages glib)
121 #:use-module (gnu packages gnupg)
122 #:use-module (gnu packages graphviz)
123 #:use-module (gnu packages groff)
124 #:use-module (gnu packages iso-codes)
125 #:use-module (gnu packages libevent)
126 #:use-module (gnu packages libffi)
127 #:use-module (gnu packages libidn)
128 #:use-module (gnu packages linux)
129 #:use-module (gnu packages lsof)
130 #:use-module (gnu packages node)
131 #:use-module (gnu packages nss)
132 #:use-module (gnu packages openstack)
133 #:use-module (gnu packages pcre)
134 #:use-module (gnu packages pkg-config)
135 #:use-module (gnu packages protobuf)
136 #:use-module (gnu packages python)
137 #:use-module (gnu packages python-build)
138 #:use-module (gnu packages python-check)
139 #:use-module (gnu packages python-compression)
140 #:use-module (gnu packages python-crypto)
141 #:use-module (gnu packages python-science)
142 #:use-module (gnu packages python-xyz)
143 #:use-module (gnu packages qt)
144 #:use-module (gnu packages rdf)
145 #:use-module (gnu packages rpc)
146 #:use-module (gnu packages rust)
147 #:use-module (gnu packages rust-apps)
148 #:use-module (gnu packages serialization)
149 #:use-module (gnu packages sphinx)
150 #:use-module (gnu packages texinfo)
151 #:use-module (gnu packages time)
152 #:use-module (gnu packages tls)
153 #:use-module (gnu packages version-control)
154 #:use-module (gnu packages web)
155 #:use-module (gnu packages xml)
156 #:use-module (gnu packages)
157 #:use-module (guix build-system cargo)
158 #:use-module (guix build-system copy)
159 #:use-module (guix build-system pyproject)
160 #:use-module (guix deprecation)
161 #:use-module (guix download)
162 #:use-module (guix gexp)
163 #:use-module (guix git-download)
164 #:use-module ((guix licenses) #:prefix license:)
165 #:use-module (guix packages)
166 #:use-module (guix utils)
167 #:use-module (srfi srfi-1))
168
169(define-public python-aioboto3
170 (package
171 (name "python-aioboto3")
172 (version "15.5.0")
173 (source
174 (origin
175 (method git-fetch)
176 (uri (git-reference
177 (url "https://github.com/terricain/aioboto3")
178 (commit (string-append "v" version))))
179 (file-name (git-file-name name version))
180 (sha256
181 (base32 "05644x17f9sl8mv9bp8l0rjcmw5x2ssyd5z1v3xmgcspk5qs6qn8"))))
182 (build-system pyproject-build-system)
183 (arguments
184 (list
185 #:tests? #f ;XXX: all tests faild
186 #:phases
187 #~(modify-phases %standard-phases
188 (add-after 'unpack 'relax-requirements
189 (lambda _
190 (substitute* "pyproject.toml"
191 (("aiobotocore\\[boto3\\]==2.25.1")
192 "aiobotocore >= 2.25.1")))))))
193 (native-inputs
194 (list python-setuptools
195 python-setuptools-scm))
196 (propagated-inputs
197 (list python-aiobotocore
198 python-aiofiles
199 ;; [optional]
200 python-boto3
201 python-cryptography))
202 (home-page "https://github.com/terricain/aioboto3")
203 (synopsis "Async boto3 wrapper")
204 (description
205 "This package is mostly just a wrapper combining the great work of boto3
206and aiobotocore.")
207 (license license:asl2.0)))
208
209(define-public python-aiocoap
210 (package
211 (name "python-aiocoap")
212 (version "0.4.14")
213 (source
214 (origin
215 (method git-fetch) ; tests miss data and module files in PyPI release
216 (uri (git-reference
217 (url "https://github.com/chrysn/aiocoap")
218 (commit version)))
219 (file-name (git-file-name name version))
220 (sha256
221 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
222 (build-system pyproject-build-system)
223 (arguments
224 (list
225 #:test-flags
226 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
227 ;; 8683, 0, 0): address already in use
228 #~(list "--ignore=tests/test_server.py"
229 "-k" (string-join
230 ;; TypeError: can only concatenate str (not "NoneType") to
231 ;; str
232 (list "not test_options"
233 "test_uri_parser"
234 "test_help" ; returned non-zero exit status 1.
235 "test_routing" ; address already in use
236 "test_tls")
237 " and not "))))
238 (native-inputs
239 (list openssl ;for tests/test_tls.py
240 python-pytest
241 python-setuptools
242 python-wheel))
243 (propagated-inputs
244 (list ;; python-cbor-diag
245 python-cbor2
246 python-cryptography
247 ;; python-dtlssocket
248 python-filelock
249 ;; python-ge25519
250 python-pygments
251 python-termcolor
252 python-websockets))
253 (home-page "https://github.com/chrysn/aiocoap")
254 (synopsis "Python CoAP library")
255 (description
256 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
257Constrained Application Protocol}, http://coap.space/}. It facilitates
258writing applications that talk to network enabled embedded
259@acronym{IoT,Internet of Things} devices.")
260 (license license:expat)))
261
262(define-public python-alpaca-py
263 (package
264 (name "python-alpaca-py")
265 (version "0.43.2")
266 (source
267 (origin
268 (method git-fetch)
269 (uri (git-reference
270 (url "https://github.com/alpacahq/alpaca-py")
271 (commit (string-append "v" version))))
272 (file-name (git-file-name name version))
273 (sha256
274 (base32 "0majn27r2s2z5nbqvkpmw04kswhj9xkmvmm0rkvb3fga9lwwivlb"))))
275 (build-system pyproject-build-system)
276 (native-inputs
277 (list python-poetry-core
278 python-poetry-dynamic-versioning
279 python-pytest
280 python-pytest-asyncio
281 python-requests-mock))
282 (propagated-inputs
283 (list python-msgpack
284 python-pandas
285 python-pydantic
286 python-requests
287 python-sseclient-py
288 python-websockets))
289 (home-page "https://alpaca.markets/sdks/python/")
290 (synopsis "Alpaca API official Python SDK")
291 (description
292 "Alpaca-py provides an interface to REST, WebSocket and SSE endpoints
293that allow interaction with the @url{https://alpaca.markets/, Alpaca} API.")
294 (license license:asl2.0)))
295
296(define-public python-anaconda-client
297 (package
298 (name "python-anaconda-client")
299 (version "1.13.1")
300 (source
301 (origin
302 (method git-fetch)
303 (uri (git-reference
304 (url "https://github.com/Anaconda-Platform/anaconda-client")
305 (commit version)))
306 (file-name (git-file-name name version))
307 (sha256
308 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
309 (build-system pyproject-build-system)
310 (arguments
311 (list
312 #:test-flags
313 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
314 "--deselect=tests/utils/test_conda.py::test_conda_vars")
315 #:phases
316 #~(modify-phases %standard-phases
317 (add-after 'unpack 'fix-pytest-config
318 (lambda _
319 (substitute* "setup.cfg"
320 (("addopts=.*") "addopts=\n")))))))
321 (native-inputs
322 (list python-freezegun
323 python-pytest
324 python-setuptools))
325 (propagated-inputs
326 (list python-anaconda-cli-base
327 python-conda-package-handling
328 python-conda-package-streaming
329 python-dateutil
330 python-defusedxml
331 python-nbformat
332 python-pillow
333 python-platformdirs
334 python-pytz
335 python-pyyaml
336 python-requests
337 python-requests-toolbelt
338 python-setuptools
339 python-tqdm
340 python-urllib3))
341 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
342 (synopsis "Anaconda Cloud command line client library")
343 (description
344 "Anaconda Cloud command line client library provides an interface to
345Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
346environments.")
347 (license license:bsd-3)))
348
349(define-public python-apprise
350 (package
351 (name "python-apprise")
352 (version "1.9.4")
353 (source
354 (origin
355 (method url-fetch)
356 (uri (pypi-uri "apprise" version))
357 (sha256
358 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
359 (build-system pyproject-build-system)
360 (arguments
361 (list
362 ;; These tests used to be ran with --numprocesses, but that seems to have
363 ;; made them non-deterministic.
364 #:test-flags
365 #~(list "--ignore=tests/test_plugin_macosx.py"
366 "-k" "not test_plugin_glib_send_raises_generic")))
367 (native-inputs
368 (list python-babel
369 python-pytest
370 python-pytest-mock
371 python-setuptools))
372 (propagated-inputs
373 (list python-certifi
374 python-click
375 python-markdown
376 python-pygobject
377 python-pyyaml
378 python-requests
379 python-requests-oauthlib))
380 (home-page "https://github.com/caronc/apprise")
381 (synopsis "Push notification library")
382 (description
383 "Apprise is a Python library that allows sending push notifications to a
384broad range of notification services, such as Telegram, Discord, Slack, Amazon
385SNS, Gotify, etc.")
386 (license license:bsd-2)))
387
388(define-public python-arxiv
389 (package
390 (name "python-arxiv")
391 (version "3.0.0")
392 (source
393 (origin
394 (method git-fetch)
395 (uri (git-reference
396 (url "https://github.com/lukasschwab/arxiv.py")
397 (commit version)))
398 (file-name (git-file-name name version))
399 (sha256
400 (base32 "18kn8q1lbql1w8jm5clla6za2zpijhs5hi2kpz41x5skps96lrd3"))))
401 (build-system pyproject-build-system)
402 (arguments
403 (list #:test-flags
404 #~(list "-k" ;to skip intenet connection tests
405 (string-append "not (TestAPIBugs "
406 "or TestClient "
407 "or TestResult "
408 "or TestDownload)"))))
409 (native-inputs
410 (list python-pytest
411 python-hatch-vcs
412 python-hatchling))
413 (propagated-inputs
414 (list python-feedparser
415 python-requests))
416 (home-page "https://github.com/lukasschwab/arxiv.py")
417 (synopsis "Python wrapper for the arXiv API")
418 (description "Python wrapper for the @code{arXiv} API.")
419 (license license:expat)))
420
421(define-public python-asyncer
422 (package
423 (name "python-asyncer")
424 (version "0.0.17")
425 (source
426 (origin
427 (method git-fetch)
428 (uri (git-reference
429 (url "https://github.com/fastapi/asyncer")
430 (commit version)))
431 (file-name (git-file-name name version))
432 (sha256
433 (base32 "1f4ids6sxwmz89yj98z0qc4qvfkklh0psbxv5px39k807g9aq7p2"))))
434 (build-system pyproject-build-system)
435 (native-inputs
436 (list python-pdm-backend
437 python-pytest))
438 (propagated-inputs
439 (list python-anyio
440 python-sniffio
441 python-typing-extensions))
442 (home-page "https://asyncer.tiangolo.com/")
443 (synopsis "Asyncer, async and await, focused on developer experience")
444 (description
445 "Asyncer is a small library built on top of
446@url{https://anyio.readthedocs.io/en/stable/, AnyIO}.
447
448The main goal of Asyncer is to improve developer experience by providing
449better support for autocompletion and inline errors in the editor, and more
450certainty that the code is bug-free by providing better support for type
451checking tools like mypy.")
452 (license license:expat)))
453
454(define-public python-asyncudp
455 (package
456 (name "python-asyncudp")
457 (version "0.11.0")
458 (source
459 (origin
460 (method git-fetch)
461 (uri (git-reference
462 (url "https://github.com/eerimoq/asyncudp")
463 (commit version)))
464 (file-name (git-file-name name version))
465 (sha256
466 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
467 (build-system pyproject-build-system)
468 (native-inputs (list python-pytest python-setuptools))
469 (home-page (git-reference-url (origin-uri source)))
470 (synopsis "High level UDP sockets for asyncio")
471 (description
472 "This package provides a Python library offering high level UDP sockets
473for asyncio. Import it alongside asyncio and use its API to send and receive
474UDP packets.")
475 (license license:expat)))
476
477(define-public python-behave-web-api
478 (package
479 (name "python-behave-web-api")
480 (version "2.3.0")
481 (source
482 (origin
483 (method git-fetch)
484 (uri (git-reference
485 (url "https://github.com/jefersondaniel/behave-web-api")
486 (commit (string-append "v" version))))
487 (file-name (git-file-name name version))
488 (sha256
489 (base32 "1r8yx8gb5m599cpdqfvk6z9ax3qj26fpvczdr84z8jya0dxfch4p"))))
490 (build-system pyproject-build-system)
491 (native-inputs
492 (list python-pytest
493 python-setuptools))
494 (propagated-inputs
495 (list behave
496 python-requests))
497 (home-page "https://github.com/jefersondaniel/behave-web-api")
498 (synopsis "Provides testing for JSON APIs with Behave for Python")
499 (description "This package provides testing utility modules for testing
500JSON APIs with Behave.")
501 (license license:expat)))
502
503(define-public python-blacksheep
504 (package
505 (name "python-blacksheep")
506 (version "2.6.3")
507 (source
508 (origin
509 (method git-fetch)
510 (uri (git-reference
511 (url "https://github.com/Neoteroi/BlackSheep")
512 (commit (string-append "v" version))))
513 (file-name (git-file-name name version))
514 (sha256
515 (base32 "1k6yqsqnh6nnhi8z5v2yqpxs7qsk35zwd7gcr7cdh825f2vrl7js"))))
516 (build-system pyproject-build-system)
517 (arguments
518 (list
519 ;; tests: 1821 passed
520 ;;
521 ;; Run all unit tests, but do not run integration tests from `itests`
522 ;; directory.
523 #:test-flags
524 #~(list "tests")
525 #:phases
526 #~(modify-phases %standard-phases
527 (add-before 'build 'cythonize
528 (lambda _
529 (with-directory-excursion "blacksheep"
530 (for-each (lambda (file)
531 (invoke "cython" "-3" file "-I" "."))
532 (find-files "." ".*\\.pyx$"))))))))
533 (native-inputs
534 (list nss-certs-for-test
535 python-cython
536 python-defusedxml
537 python-flask
538 python-jinja2
539 python-pydantic
540 python-pyjwt
541 python-pytest
542 python-pytest-asyncio
543 python-setuptools
544 python-starlette))
545 (propagated-inputs
546 (list python-certifi
547 python-essentials
548 python-essentials-openapi
549 python-guardpost
550 python-httptools
551 python-rodi
552 python-itsdangerous))
553 (home-page "https://github.com/Neoteroi/BlackSheep")
554 (synopsis "Asynchronous framework to build event based web applications")
555 (description
556 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
557
558The framework offers
559@itemize
560@item A rich code API, based on dependency injection and inspired by Flask and
561ASP.NET Core.
562@item A typing-friendly codebase, which enables a comfortable development
563experience thanks to hints when coding with IDEs.
564@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
565and JSON.
566@item A cross-platform framework, using the most modern versions of Python.
567@item Good performance.
568@end itemize")
569 (license license:expat)))
570
571(define-public python-bleach
572 (package
573 (name "python-bleach")
574 (version "6.3.0")
575 (source
576 (origin
577 (method git-fetch)
578 (uri (git-reference
579 (url "https://github.com/mozilla/bleach")
580 (commit (string-append "v" version))))
581 (file-name (git-file-name name version))
582 (sha256
583 (base32 "02abk9ixn010sqpbdsd7nxms0gv4prwv6d3nplb8giq85lpn1kkb"))
584 (snippet
585 #~(begin
586 (use-modules (guix build utils))
587 (substitute* (find-files "." "\\.py$")
588 (("bleach\\._vendor\\.html5lib") "html5lib"))
589 (delete-file-recursively "bleach/_vendor/html5lib")))))
590 (build-system pyproject-build-system)
591 (arguments
592 (list
593 ;; tests: 448 passed, 1 deselected, 3 xfailed
594 #:test-flags
595 #~(list (string-append "--deselect=tests/test_clean.py::"
596 "test_self_closing_tags_self_close[wbr]"))
597 #:phases
598 #~(modify-phases %standard-phases
599 (add-after 'unpack 'relax-requirements
600 (lambda _
601 ;; "tinycss2>=1.1.0,<1.5"
602 ;; The 'sanity-check of python-nbclassic fails without this.
603 (substitute* "setup.py"
604 (("\"tinycss2.*") "")))))))
605 (native-inputs
606 (list python-pytest
607 python-setuptools))
608 (propagated-inputs
609 (list python-html5lib
610 python-tinycss2
611 python-webencodings))
612 (home-page "https://github.com/mozilla/bleach")
613 (synopsis "Whitelist-based HTML-sanitizing tool")
614 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
615 (license license:asl2.0)))
616
617(define-public python-cloudpathlib
618 (package
619 (name "python-cloudpathlib")
620 (version "0.23.0")
621 (source
622 (origin
623 (method git-fetch)
624 (uri (git-reference
625 (url "https://github.com/drivendataorg/cloudpathlib")
626 (commit (string-append "v" version))))
627 (file-name (git-file-name name version))
628 (sha256
629 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
630 (build-system pyproject-build-system)
631 (arguments
632 (list
633 ;; tests: 977 passed, 15 skipped, 8642 warnings
634 #:test-flags
635 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
636 ;; TODO: Package azure-identity (required for this file)
637 "--ignore=tests/test_azure_specific.py"
638 ;; TypeError: Retry.__init__() got an unexpected keyword
639 ;; argument 'timeout'
640 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")))
641 (native-inputs
642 (list ;; python-azure-identity
643 python-dotenv
644 python-flit-core
645 python-psutil
646 python-pydantic
647 python-pytest
648 python-pytest-cases
649 python-pytest-reportlog
650 python-pytest-xdist
651 python-shortuuid
652 python-tenacity))
653 (propagated-inputs
654 (list python-azure-storage-blob
655 python-azure-storage-file-datalake
656 python-boto3
657 python-google-cloud-storage
658 python-typing-extensions))
659 (home-page "https://github.com/drivendataorg/cloudpathlib")
660 (synopsis "Pathlib-style classes for cloud storage services")
661 (description
662 "This package provides a Python library with classes that mimic
663@code{pathlib.Path}'s interface for URIs from different cloud storage
664services.")
665 (license license:expat)))
666
667(define-public python-conda-package-handling
668 (package
669 (name "python-conda-package-handling")
670 (version "2.4.0")
671 (source
672 (origin
673 (method git-fetch)
674 (uri (git-reference
675 (url "https://github.com/conda/conda-package-handling/")
676 (commit version)))
677 (file-name (git-file-name name version))
678 (sha256
679 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
680 (build-system pyproject-build-system)
681 (native-inputs
682 (list python-bottle
683 python-mock
684 python-pytest-8
685 python-pytest-mock
686 python-setuptools))
687 (propagated-inputs
688 (list python-conda-package-streaming))
689 (home-page "https://conda.io")
690 (synopsis "Create and extract conda packages of various formats")
691 (description
692 "This library is an abstraction of Conda package handling and a tool for
693extracting, creating, and converting between formats.")
694 (license license:bsd-3)))
695
696(define-public python-conda-package-streaming
697 (package
698 (name "python-conda-package-streaming")
699 (version "0.12.0")
700 (source
701 (origin
702 (method url-fetch)
703 (uri (pypi-uri "conda_package_streaming" version))
704 (sha256
705 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
706 (build-system pyproject-build-system)
707 (arguments
708 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
709 (list #:tests? #f))
710 (native-inputs
711 (list python-flit-core))
712 (propagated-inputs
713 (list python-requests
714 python-zstandard))
715 (home-page "https://conda.github.io/conda-package-streaming/")
716 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
717 (description
718 "This package provides an efficient library to read from new and old format
719@code{.conda} and @code{.tar.bz2} conda packages.")
720 (license license:bsd-3)))
721
722(define-public python-dependency-groups
723 (package
724 (name "python-dependency-groups")
725 (version "1.3.1")
726 (source
727 (origin
728 (method url-fetch)
729 (uri (pypi-uri "dependency_groups" version))
730 (sha256
731 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
732 (build-system pyproject-build-system)
733 (propagated-inputs (list python-packaging python-tomli))
734 (native-inputs (list python-flit-core python-pytest))
735 (home-page "https://dependency-groups.readthedocs.io/")
736 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
737 (description
738 "This package provides a library which is able to parse dependency groups (PEP
739735), following includes, and provide that data as output.")
740 (license license:expat)))
741
742(define-public python-devpi-common
743 (package
744 (name "python-devpi-common")
745 (version "4.0.4")
746 (source
747 (origin
748 (method url-fetch)
749 (uri (pypi-uri "devpi_common" version))
750 (sha256
751 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
752 (build-system pyproject-build-system)
753 (propagated-inputs (list python-lazy python-packaging-legacy
754 python-requests))
755 (native-inputs
756 (list python-pytest
757 python-setuptools
758 python-wheel))
759 (home-page "https://github.com/devpi/devpi")
760 (synopsis
761 "Utilities jointly used by devpi-server, devpi-client and others")
762 (description
763 "This package provides utilities jointly used by devpi-server,
764devpi-client and others.")
765 (license license:expat)))
766
767(define-public python-devpi-client
768 (package
769 (name "python-devpi-client")
770 (version "7.2.0")
771 (source
772 (origin
773 (method url-fetch)
774 (uri (pypi-uri "devpi-client" version))
775 (sha256
776 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
777 (build-system pyproject-build-system)
778 (arguments
779 (list
780 #:test-flags
781 ;; This wants to use pip install
782 '(list "--ignore=testing/test_upload.py"
783 ;; These complain about finding distutils. It's not my fault,
784 ;; mate, setuptools is right there, but you won't pick it!
785 "--ignore=testing/test_list_remove.py"
786 "--ignore=testing/test_main.py"
787 "--ignore=testing/test_install.py"
788 "--ignore=testing/test_functional.py"
789 "--ignore=testing/test_test.py")
790 #:phases
791 '(modify-phases %standard-phases
792 (add-after 'unpack 'patch-tests
793 (lambda _
794 ;; Do not replace the directory name of the store item.
795 (substitute* "testing/conftest.py"
796 (("\"devpi-server\", \"devpi-init\"")
797 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
798 (add-before 'check 'set-HOME
799 ;; Some tests need this
800 (lambda _ (setenv "HOME" "/tmp"))))))
801 (propagated-inputs (list python-pypa-build
802 python-check-manifest
803 python-colorama
804 python-devpi-common
805 python-iniconfig
806 python-pkginfo
807 python-platformdirs
808 python-pluggy
809 python-pypitoken
810 python-tomli))
811 (native-inputs
812 (list python-devpi-server
813 python-pytest
814 python-setuptools
815 python-virtualenv))
816 (home-page "https://github.com/devpi/devpi")
817 (synopsis "Devpi upload/install/... commands for Python developers")
818 (description
819 "The devpi command line tool is typically used in conjunction with
820devpi-server. It allows uploading, testing and installing packages from devpi
821indexes.")
822 (license license:expat)))
823
824(define-public python-devpi-process
825 (package
826 (name "python-devpi-process")
827 (version "1.0.2")
828 (source
829 (origin
830 (method url-fetch)
831 (uri (pypi-uri "devpi_process" version))
832 (sha256
833 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
834 (build-system pyproject-build-system)
835 (arguments
836 (list
837 #:phases
838 '(modify-phases %standard-phases
839 (add-after 'unpack 'relax-requirements
840 (lambda _
841 ;; Our package is too old, sorry.
842 (substitute* "pyproject.toml"
843 (("typing-extensions>=4.12.2")
844 "typing-extensions>=4.10.0"))))
845 (add-after 'unpack 'patch-tool-locations
846 (lambda* (#:key inputs #:allow-other-keys)
847 (substitute* "src/devpi_process/__init__.py"
848 (("_exe\\(\"devpi-init\"\\)")
849 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
850 (("_exe\\(\"devpi-server\"\\)")
851 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
852 (("_exe\\(\"devpi\"\\)")
853 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
854 (propagated-inputs (list python-devpi-client python-devpi-server
855 python-typing-extensions))
856 (native-inputs
857 (list nss-certs-for-test
858 python-hatchling
859 python-hatch-vcs
860 python-httpx
861 python-pytest))
862 (home-page "https://github.com/devpi/devpi")
863 (synopsis "API to create and use a devpi server process")
864 (description
865 "This package provides a programmatic API to create and use a devpi
866server process.")
867 (license license:expat)))
868
869(define-public python-devpi-server
870 (package
871 (name "python-devpi-server")
872 (version "6.17.0")
873 (source
874 (origin
875 (method url-fetch)
876 (uri (pypi-uri "devpi_server" version))
877 (sha256
878 (base32 "13lybrw8j6zjxwvx6sk7bw6854hd2m18s1xcvl0q100j4n06p6ml"))))
879 (build-system pyproject-build-system)
880 (arguments
881 (list
882 #:test-flags
883 ;; These all fail with: "module 'py' has no attribute 'io'"
884 #~(list "--ignore=test_devpi_server/test_importexport.py"
885 "--ignore=test_devpi_server/test_main.py"
886 "--ignore=test_devpi_server/test_genconfig.py")
887 #:phases
888 #~(modify-phases %standard-phases
889 (add-after 'unpack 'relax-requirements
890 (lambda _
891 (substitute* "pyproject.toml"
892 ;; It straggles to check argon2 in passlib on any versions
893 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
894 ;; such extra feature 'argon2'",).
895 (("passlib\\[argon2\\]") "passlib")))))))
896 (propagated-inputs (list python-argon2-cffi
897 python-attrs
898 python-defusedxml
899 python-devpi-common
900 python-httpx
901 python-itsdangerous
902 python-lazy
903 python-legacy-cgi
904 python-passlib
905 python-platformdirs
906 python-pluggy
907 python-py
908 python-pyramid
909 python-repoze-lru
910 python-ruamel.yaml-0.16 ;FIXME: rename
911 python-strictyaml
912 python-waitress))
913 (native-inputs
914 (list python-execnet
915 python-pytest
916 python-pytest-asyncio
917 python-pytest-timeout
918 python-setuptools
919 python-webtest))
920 (home-page "https://devpi.net")
921 (synopsis "Pypi.org caching server")
922 (description "This package implements a reliable private and pypi.org
923caching server.")
924 (license license:expat)))
925
926(define-public python-dicomweb-client
927 (package
928 (name "python-dicomweb-client")
929 (version "0.60.0")
930 (source
931 (origin
932 (method git-fetch)
933 (uri (git-reference
934 (url "https://github.com/ImagingDataCommons/dicomweb-client")
935 (commit (string-append "v" version))))
936 (file-name (git-file-name name version))
937 (sha256
938 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
939 (build-system pyproject-build-system)
940 (arguments
941 (list
942 #:phases
943 #~(modify-phases %standard-phases
944 (add-after 'unpack 'remove-dynamic-versioning
945 (lambda _
946 (substitute* "pyproject.toml"
947 ;; Dynamic versioning via 'uv-dynamic-versioning' is
948 ;; not suitable for Guix.
949 (("dynamic = \\[\"version\"\\]")
950 (string-append "version = \""
951 #$version "\""))))))))
952 (native-inputs
953 (list python-hatchling
954 python-pytest
955 python-pytest-localserver))
956 (propagated-inputs
957 (list python-numpy
958 python-pillow
959 python-pydicom
960 python-requests
961 python-retrying))
962 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
963 (synopsis "Python client for DICOMweb RESTful services")
964 (description
965 "@code{dicomweb_client} provides client interfaces for DICOMweb RESTful
966services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
967DICOM objects over the web, respectively.")
968 (license license:expat)))
969
970(define-public python-dnslib
971 (package
972 (name "python-dnslib")
973 (version "0.9.26")
974 (source
975 (origin
976 (method git-fetch)
977 (uri (git-reference
978 (url "https://github.com/paulc/dnslib")
979 (commit version)))
980 (file-name (git-file-name name version))
981 (sha256
982 (base32 "1x1l727qx6x0kw7yhzhxhbm40wgrh367dr3y0vaix0wrhi30qsyk"))))
983 (build-system pyproject-build-system)
984 (arguments
985 (list
986 #:phases
987 #~(modify-phases %standard-phases
988 (replace 'check
989 (lambda* (#:key tests? #:allow-other-keys)
990 (when tests?
991 (invoke "./run_tests.sh")))))))
992 (native-inputs
993 (list python-setuptools))
994 (home-page "https://github.com/paulc/dnslib")
995 (synopsis "Library to encode/decode DNS wire-format packets")
996 (description
997 "This package provides a simple Python library to encode/decode DNS
998wire-format packets.")
999 (license license:bsd-3)))
1000
1001(define-public python-docusign-esign
1002 (package
1003 (name "python-docusign-esign")
1004 (version "5.0.0")
1005 (source
1006 (origin
1007 (method url-fetch)
1008 (uri (pypi-uri "docusign-esign" version))
1009 (sha256
1010 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
1011 (build-system pyproject-build-system)
1012 ;; Testing requires undocumented setup changes with network access to
1013 ;; <demo.docusign.net>, and so testing is disabled here.
1014 (arguments `(#:tests? #f))
1015 (native-inputs
1016 (list python-setuptools
1017 python-wheel))
1018 (propagated-inputs
1019 (list python-certifi
1020 python-dateutil
1021 python-urllib3
1022 python-pyjwt
1023 python-cryptography))
1024 (home-page "https://developers.docusign.com/")
1025 (synopsis "DocuSign Python Client")
1026 (description
1027 "The Official DocuSign Python Client Library used to interact with the
1028eSign REST API. Send, sign, and approve documents using this client.")
1029 (license license:expat)))
1030
1031(define-public python-domain-connect
1032 (package
1033 (name "python-domain-connect")
1034 (version "0.0.11")
1035 (source
1036 (origin
1037 (method git-fetch) ;no tests in PyPI archive
1038 (uri (git-reference
1039 (url "https://github.com/Domain-Connect/domainconnect_python")
1040 (commit (string-append "v" version))))
1041 (file-name (git-file-name name version))
1042 (sha256
1043 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
1044 (build-system pyproject-build-system)
1045 (arguments
1046 (list
1047 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
1048 ;; present in container.
1049 #:tests? #f
1050 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
1051 (native-inputs
1052 (list python-setuptools))
1053 (propagated-inputs
1054 (list python-cryptography
1055 python-dnspython
1056 python-future
1057 python-publicsuffixlist))
1058 (home-page "https://github.com/Domain-Connect/domainconnect_python")
1059 (synopsis "Client library for Domain Connect protocol")
1060 (description
1061 "This package provides a Service Provider functionality in both Sync and
1062Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
1063 (license license:expat)))
1064
1065(define-public python-domain-connect-dyndns
1066 (package
1067 (name "python-domain-connect-dyndns")
1068 (version "0.0.9")
1069 (source
1070 (origin
1071 (method url-fetch)
1072 (uri (pypi-uri "domain-connect-dyndns" version))
1073 (sha256
1074 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
1075 (build-system pyproject-build-system)
1076 (arguments
1077 (list
1078 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
1079 ;; present in container.
1080 #:tests? #f
1081 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
1082 (native-inputs
1083 (list python-setuptools
1084 python-wheel))
1085 (propagated-inputs
1086 (list python-dnspython
1087 python-domain-connect
1088 python-requests
1089 python-validators))
1090 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
1091 (synopsis "Domain Connect Dynamic DNS in Python")
1092 ;; Project lacks meaningful description in README, see
1093 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
1094 (description
1095 "Python client library for Dynamic DNS using
1096@url{https://www.domainconnect.org/, Domain Connect} protocol.")
1097 (license license:expat)))
1098
1099(define-public python-dominate
1100 (package
1101 (name "python-dominate")
1102 (version "2.9.1")
1103 (source
1104 (origin
1105 (method git-fetch)
1106 (uri (git-reference
1107 (url "https://github.com/Knio/dominate")
1108 (commit version)))
1109 (file-name (git-file-name name version))
1110 (sha256
1111 (base32 "0kv5ly8w2026pwvgamfjxav1g58wmgim30nr9w9qfwcipfjxwn5c"))))
1112 (build-system pyproject-build-system)
1113 (native-inputs
1114 (list python-pytest
1115 python-setuptools))
1116 (home-page "https://github.com/Knio/dominate")
1117 (synopsis "Python library for creating and manipulating HTML documents")
1118 (description
1119 "Dominate is a Python library for creating and manipulating HTML
1120documents using an elegant DOM API.")
1121 (license license:lgpl3+)))
1122
1123(define-public python-dropbox
1124 (package
1125 (name "python-dropbox")
1126 (version "12.0.2")
1127 (source
1128 (origin
1129 (method git-fetch) ; no tests in PyPI release
1130 (uri (git-reference
1131 (url "https://github.com/dropbox/dropbox-sdk-python")
1132 (commit (string-append "v" version))))
1133 (file-name (git-file-name name version))
1134 (sha256
1135 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
1136 (build-system pyproject-build-system)
1137 (arguments
1138 (list
1139 #:test-flags
1140 #~(list "-k" (string-join
1141 ;; Network access is required.
1142 (list "not test_bad_auth"
1143 "test_app_auth"
1144 "test_bad_pins"
1145 "test_bad_pins_session"
1146 "test_downscope"
1147 "test_multi_auth"
1148 "test_path_root"
1149 "test_path_root_err"
1150 "test_refresh"
1151 "test_rpc"
1152 "test_team"
1153 "test_upload_download"
1154 "test_versioned_route")
1155 " and not "))
1156 #:phases
1157 #~(modify-phases %standard-phases
1158 (add-after 'unpack 'relax-requirements
1159 (lambda _
1160 (substitute* "setup.py"
1161 ;; 'stone>=2,<3.3.3',
1162 ((">=2,<3.3.3") ">=2,<3.4.0"))))
1163 (add-before 'check 'pre-check
1164 (lambda _
1165 ;; Otherwise tests setup erroring.
1166 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
1167 (setenv "LEGACY_USER_CLIENT_ID" "guix")
1168 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
1169 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
1170 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
1171 (setenv "SCOPED_USER_CLIENT_ID" "guix")
1172 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
1173 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
1174 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
1175 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
1176 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
1177 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
1178 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
1179 (native-inputs
1180 (list nss-certs-for-test
1181 python-mock
1182 python-pytest
1183 python-pytest-mock
1184 python-setuptools
1185 python-wheel))
1186 (propagated-inputs
1187 (list python-requests python-six python-stone))
1188 (home-page "https://www.dropbox.com/developers")
1189 (synopsis "Official Dropbox API Client")
1190 (description "This package provides a Python SDK for integrating with the
1191Dropbox API v2.")
1192 (license license:expat)))
1193
1194(define-public python-dukpy
1195 (package
1196 (name "python-dukpy")
1197 (version "0.5.1")
1198 (source
1199 (origin
1200 (method git-fetch)
1201 (uri (git-reference
1202 (url "https://github.com/amol-/dukpy")
1203 (commit version)))
1204 (file-name (git-file-name name version))
1205 (sha256
1206 (base32 "1qsqfgy12frrdikjf353bsvhln11jixc3qs9rc1zra55k0569036"))))
1207 (build-system pyproject-build-system)
1208 (arguments
1209 (list
1210 #:test-flags
1211 #~(list #$@(map (lambda (test)
1212 (string-append "--deselect=tests/test_installer.py"
1213 "::TestPackageInstaller::"
1214 test))
1215 ;; Network access is required.
1216 (list "test_install_command"
1217 "test_install_command_latest_ver"
1218 "test_install_command_substrate_error"
1219 "test_install_command_without_dest"
1220 "test_install_react"
1221 "test_install_scoped_package"
1222 "test_install_unexisting_package"
1223 "test_install_unexisting_version")))))
1224 (native-inputs
1225 (list python-mock
1226 python-pytest
1227 python-setuptools
1228 python-webassets))
1229 (home-page "https://github.com/amol-/dukpy")
1230 (synopsis "Simple JavaScript interpreter for Python")
1231 (description
1232 "DukPy is a simple JavaScript interpreter for Python built on top of
1233duktape engine without any external dependency. It comes with a bunch of
1234common transpilers built-in for convenience:
1235@itemize
1236@item CoffeeScript
1237@item BabelJS
1238@item TypeScript
1239@item JSX
1240@item LESS
1241@end itemize")
1242 (license license:expat)))
1243
1244(define-public python-essentials-openapi
1245 (package
1246 (name "python-essentials-openapi")
1247 (version "1.2.1")
1248 (source
1249 (origin
1250 (method git-fetch)
1251 (uri (git-reference
1252 (url "https://github.com/Neoteroi/essentials-openapi")
1253 (commit (string-append "v" version))))
1254 (file-name (git-file-name name version))
1255 (sha256
1256 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
1257 (build-system pyproject-build-system)
1258 (native-inputs
1259 (list python-flask
1260 python-hatchling
1261 python-pydantic
1262 python-pytest
1263 python-rich))
1264 (propagated-inputs
1265 (list python-essentials
1266 python-httpx
1267 python-jinja2
1268 python-markupsafe
1269 python-pyyaml))
1270 (home-page "https://github.com/Neoteroi/essentials-openapi/")
1271 (synopsis "Generator for OpenAPI Documentation")
1272 (description
1273 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
1274formats. Generator for other kinds of documents from OpenAPI Documentation
1275files.")
1276 (license license:expat)))
1277
1278(define-public python-eventlet
1279 (package
1280 (name "python-eventlet")
1281 (version "0.40.4")
1282 (source
1283 (origin
1284 (method url-fetch)
1285 (uri (pypi-uri "eventlet" version))
1286 (sha256
1287 (base32
1288 "0vzjrb7n3x7gdrxiw4dacdxvz0m8saaw9w7n1n9v865yn49gggk9"))))
1289 (build-system pyproject-build-system)
1290 (arguments
1291 (list
1292 #:test-flags
1293 '(list "-k"
1294 (string-append
1295 "not TestGetaddrinfo"
1296 " and not TestProxyResolver"
1297 " and not test_noraise_dns_tcp"
1298 " and not test_raise_dns_tcp"
1299 " and not test_hosts_no_network"
1300 " and not test_import_rdtypes_then_eventlet"
1301 " and not test_patcher_existing_locks"
1302 " and not test_dns_methods_are_green"))
1303 #:phases
1304 #~(modify-phases %standard-phases
1305 (add-after 'unpack 'avoid-OSError
1306 (lambda _
1307 ;; If eventlet tries to load greendns, an OSError is thrown when
1308 ;; getprotobyname is called. Thankfully there is an environment
1309 ;; variable to disable the greendns import, so use it. Note that
1310 ;; this error is propagated to child packages too, so enforce the
1311 ;; changed default.
1312 (substitute* "eventlet/green/socket.py"
1313 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
1314 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")")))))))
1315 (native-inputs
1316 (list python-hatchling
1317 python-hatch-vcs
1318 python-pytest))
1319 (propagated-inputs
1320 (list python-dnspython python-greenlet))
1321 (home-page "https://eventlet.net")
1322 (synopsis "Concurrent networking library for Python")
1323 (description
1324 "Eventlet is a concurrent networking library for Python that
1325allows you to change how you run your code, not how you write it.
1326It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1327Coroutines ensure that the developer uses a blocking style of programming
1328that is similar to threading, but provide the benefits of non-blocking I/O.
1329The event dispatch is implicit, which means you can easily use @code{Eventlet}
1330from the Python interpreter, or as a small part of a larger application.
1331
1332Note: In Guix, this package assumes the environment variable
1333@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
1334to anything else.")
1335 (license license:expat)))
1336
1337(define-public python-feedgen
1338 (package
1339 (name "python-feedgen")
1340 (version "1.0.0")
1341 (source
1342 (origin
1343 (method git-fetch)
1344 (uri (git-reference
1345 (url "https://github.com/lkiesow/python-feedgen")
1346 (commit (string-append "v" version))))
1347 (file-name (git-file-name name version))
1348 (sha256
1349 (base32
1350 "1ppwxp9yck29pk2p2dlrrad6rz16l9h4fhcajp9yb7ns94fm5v3l"))))
1351 (build-system pyproject-build-system)
1352 (propagated-inputs
1353 (list python-dateutil
1354 python-lxml))
1355 (native-inputs
1356 (list python-pytest
1357 python-setuptools))
1358 (home-page "https://feedgen.kiesow.be")
1359 (synopsis "Atom and RSS feed generator")
1360 (description
1361 "This module can be used to generate web feeds in both Atom and RSS
1362format. It also extensible and comes with an extension to produce podcasts.")
1363 ;; The README says that this package is released under both licenses, and
1364 ;; permits the user to choose whichever is more convenient to them.
1365 (license (list license:bsd-2
1366 license:lgpl3+))))
1367
1368(define-public python-flask-caching
1369 (package
1370 (name "python-flask-caching")
1371 (version "2.3.1")
1372 (source
1373 (origin
1374 (method url-fetch)
1375 (uri (pypi-uri "flask_caching" version))
1376 (sha256
1377 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
1378 (build-system pyproject-build-system)
1379 (arguments
1380 (list
1381 #:test-flags
1382 ;; Tests requiring running Redis or dated python-cache.
1383 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
1384 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
1385 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
1386 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
1387 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
1388 "-k" "not test_client_override_reflected_on_cachelib_methods")))
1389 (native-inputs
1390 (list python-pytest
1391 python-pytest-asyncio
1392 python-pytest-xprocess
1393 python-setuptools))
1394 (propagated-inputs
1395 (list python-cachelib
1396 python-flask))
1397 (home-page "https://github.com/pallets-eco/flask-caching")
1398 (synopsis "Caching extension for Flask")
1399 (description
1400 "This package provides a caching support to Flask applications, it's a
1401fort ok https://github.com/thadeusb/flask-cache.")
1402 (license license:bsd-3)))
1403
1404(define-public python-flask-paginate
1405 (package
1406 (name "python-flask-paginate")
1407 (version "2024.4.12")
1408 (source
1409 (origin
1410 (method git-fetch)
1411 (uri (git-reference
1412 (url "https://github.com/lixxu/flask-paginate")
1413 (commit (string-append "v" version))))
1414 (file-name (git-file-name name version))
1415 (sha256
1416 (base32 "1q4ajwk0pzc6934g07gdryjcwi6rd9iqcwv5g5s718dfx2bj1831"))))
1417 (arguments
1418 (list #:test-backend #~'custom
1419 #:test-flags #~(list "tests/tests.py")))
1420 (build-system pyproject-build-system)
1421 (native-inputs
1422 (list python-pytest
1423 python-setuptools))
1424 (propagated-inputs
1425 (list python-flask))
1426 (home-page "https://github.com/lixxu/flask-paginate")
1427 (synopsis "Simple paginate support for Flask")
1428 (description
1429 "Flask-paginate is a simple pagination extension for Flask which is
1430inspired by Ruby's will_paginate library. It supports several CSS frameworks.")
1431 (license license:bsd-3)))
1432
1433(define-public python-flask-limiter
1434 (package
1435 (name "python-flask-limiter")
1436 (version "4.1.1")
1437 (source
1438 (origin
1439 (method git-fetch)
1440 (uri (git-reference
1441 (url "https://github.com/alisaifee/flask-limiter")
1442 (commit version)))
1443 (file-name (git-file-name name version))
1444 (sha256
1445 (base32 "18n12iayzw6qqys26824j5lfbphfcammpmyrvys1k0rn4xcbifln"))))
1446 (build-system pyproject-build-system)
1447 (arguments
1448 (list
1449 ;; tests: 155 passed, 620 deselected
1450 #:test-flags
1451 #~(list "-k" (simple-format #f "not (~a)"
1452 (string-join
1453 (append
1454 ;; The test suite spawns storages in Docker.
1455 '("memcache" "reset_unsupported")
1456 '("mongo")
1457 '("redis" "clear_limits"
1458 "constructor_arguments_over_config"
1459 "custom_key_prefix" "fallback_to_memory"))
1460 " or ")))
1461 #:phases
1462 #~(modify-phases %standard-phases
1463 (add-before 'check 'adjust-tests
1464 (lambda _
1465 (substitute* "pytest.ini"
1466 ((".*--cov=.*") ""))
1467 (substitute* (find-files "tests" "\\.py$")
1468 (("import pymemcache.*") "")
1469 (("import pymongo.*") "")
1470 (("import redis.*") "")))))))
1471 (native-inputs (list python-flask-restful
1472 python-hatch-vcs
1473 python-hatchling
1474 python-hiro
1475 python-pytest
1476 python-pytest-check
1477 python-pytest-mock))
1478 (propagated-inputs (list python-flask
1479 python-limits
1480 python-ordered-set
1481 python-rich))
1482 (home-page "https://flask-limiter.readthedocs.org/")
1483 (synopsis "Rate limiting for Flask applications")
1484 (description
1485 "Flask-Limiter adds rate limiting to Flask applications.
1486Rate limits can be configured at different levels such as:
1487
1488@itemize
1489@item Application wide global limits per user
1490@item Default limits per route
1491@item By blueprints
1492@item By class-based views
1493@item By individual routes
1494@end itemize")
1495 (license license:expat)))
1496
1497(define-public python-gdown
1498 (package
1499 (name "python-gdown")
1500 (version "5.2.0")
1501 (source
1502 (origin
1503 (method url-fetch)
1504 (uri (pypi-uri "gdown" version))
1505 (sha256
1506 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
1507 (build-system pyproject-build-system)
1508 (arguments (list #:tests? #f)) ;network access is required
1509 (native-inputs
1510 (list python-hatch-fancy-pypi-readme
1511 python-hatch-vcs
1512 python-hatchling))
1513 (propagated-inputs
1514 (list python-beautifulsoup4
1515 python-filelock
1516 python-requests
1517 python-tqdm))
1518 (home-page "https://github.com/wkentaro/gdown")
1519 (synopsis "Google Drive Public File/Folder Downloader")
1520 (description
1521 "This package implements a functionality to download large files
1522recursively from Google Drive with option to filter them by file
1523formats (PDF/XML/CSV).")
1524 (license license:expat)))
1525
1526(define-public python-globus-sdk
1527 (package
1528 (name "python-globus-sdk")
1529 (version "4.4.0")
1530 (source
1531 (origin
1532 (method git-fetch)
1533 (uri (git-reference
1534 (url "https://github.com/globus/globus-sdk-python")
1535 (commit version)))
1536 (file-name (git-file-name name version))
1537 (sha256
1538 (base32 "1d0zw9dkpdhsf9zdg3nk6b55gqwzc3v2rj76nj7999hjmq8350vh"))))
1539 (build-system pyproject-build-system)
1540 (arguments
1541 (list
1542 #:phases
1543 #~(modify-phases %standard-phases
1544 (add-before 'check 'pre-check
1545 (lambda _ (setenv "HOME" "/tmp"))))))
1546 (native-inputs
1547 (list python-flaky
1548 python-pytest
1549 python-pytest-randomly
1550 python-responses
1551 python-setuptools))
1552 (propagated-inputs
1553 (list python-cryptography
1554 python-importlib-resources
1555 python-pyjwt
1556 python-requests))
1557 (home-page "https://github.com/globus/globus-sdk-python")
1558 (synopsis "Globus SDK for Python")
1559 (description
1560 "This package provides a SDK for convenient Pythonic interface to
1561@url{https://www.globus.org/, Globus} APIs.")
1562 (license license:asl2.0)))
1563
1564(define-public python-guardpost
1565 (package
1566 (name "python-guardpost")
1567 (version "1.0.4")
1568 (source
1569 (origin
1570 (method git-fetch)
1571 (uri (git-reference
1572 (url "https://github.com/Neoteroi/guardpost")
1573 (commit (string-append "v" version))))
1574 (file-name (git-file-name name version))
1575 (sha256
1576 (base32 "1xsakqn36g2h1s5rnbaf1lasx1jn4skqhmb8kdl1k4pgxp5sczyy"))))
1577 (build-system pyproject-build-system)
1578 (arguments
1579 (list
1580 ;; Possible timing issue, see:
1581 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
1582 #:test-flags '(list "--ignore=tests/test_jwts.py")))
1583 (native-inputs
1584 (list python-flask
1585 python-hatchling
1586 python-pytest
1587 python-pytest-asyncio))
1588 (propagated-inputs
1589 (list python-rodi
1590 ;; [optional]
1591 python-cryptography
1592 python-essentials
1593 python-pyjwt))
1594 (home-page "https://github.com/Neoteroi/GuardPost/")
1595 (synopsis
1596 "Authentication and authorization framework for Python applications")
1597 (description
1598 "GuardPost is a framework to handle authentication and
1599authorization in asynchronous Python applications.
1600
1601Its features include
1602
1603@itemize
1604@item Strategy to implement authentication.
1605@item Strategy to implement authorization.
1606@item Support for dependency injection
1607@item Built-in support for JSON Web Tokens (JWTs) authentication.
1608@end itemize")
1609 (license license:expat)))
1610
1611(define-public python-habanero
1612 (package
1613 (name "python-habanero")
1614 (version "2.3.0")
1615 (source
1616 (origin
1617 (method git-fetch)
1618 (uri (git-reference
1619 (url "https://github.com/sckott/habanero")
1620 (commit (string-append "v" version))))
1621 (file-name (git-file-name name version))
1622 (sha256
1623 (base32 "1a842izcc8l4wb8004v92zsq1h4yc7qc2wi9am6x0f7idlx993sw"))))
1624 (build-system pyproject-build-system)
1625 (arguments
1626 ;; Run only a small portion of unit tests without network access
1627 ;; requirement.
1628 (list #:test-flags #~(list "test/test-filters.py")))
1629 (native-inputs
1630 (list python-hatchling
1631 python-pytest))
1632 (propagated-inputs
1633 (list python-httpx
1634 python-packaging
1635 python-tqdm
1636 python-urllib3))
1637 (home-page "https://github.com/sckott/habanero")
1638 (synopsis "Low Level Client for Crossref Search API")
1639 (description
1640 "Low Level Client for
1641@url{https://api.crossref.org/swagger-ui/index.html, Crossref Search API}.")
1642 (license license:expat)))
1643
1644(define-public python-hookdns
1645 (package
1646 (name "python-hookdns")
1647 (version "2.0.0")
1648 (source
1649 (origin
1650 (method url-fetch)
1651 (uri (pypi-uri "hookdns" version))
1652 (sha256
1653 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
1654 (build-system pyproject-build-system)
1655 (arguments
1656 (list
1657 #:test-flags
1658 #~(list "-k" (string-join
1659 ;; Tests requiring networking.
1660 (list
1661 "not test_patch_contextmanager_with_another_hostname"
1662 "test_patch_contextmanager_with_another_hostname_ipv6"
1663 "test_patch_contextmanager_with_ipv4"
1664 "test_patch_contextmanager_with_name"
1665 "test_patch_contextmanager_with_public_fqdn_and_"
1666 "test_patch_contextmanager_with_unknown_hostname"
1667 "test_patch_decorator_with_another_hostname"
1668 "test_patch_decorator_with_another_hostname_ipv6"
1669 "test_patch_decorator_with_ipv4"
1670 "test_patch_decorator_with_name"
1671 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
1672 "test_patch_decorator_with_unknown_hostname"
1673 "test_real_getaddrinfo_with_name_ipv6"
1674 "test_real_getaddrinfo_with_public_fqdn_ipv4"
1675 "test_real_getaddrinfo_with_public_fqdn_ipv6"
1676 "test_real_gethostbyname_ex_with_public_fqdn"
1677 "test_real_gethostbyname_with_public_fqdn"
1678 "test_real_requests_ip"
1679 "test_real_requests_name"
1680 "test_real_requests_with_public_fqdn"
1681 "test_reentrant")
1682 " and not "))))
1683 (native-inputs
1684 (list python-pytest
1685 python-requests
1686 python-setuptools
1687 python-wheel))
1688 (home-page "https://github.com/cle-b/hookdns")
1689 (synopsis "DNS resolution customization library")
1690 (description
1691 "HookDNS implements functionality that allows for modifying name
1692resolution in a Python script without any changes to the hosts file or the use
1693of a fake DNS resolver.")
1694 (license license:asl2.0)))
1695
1696(define-public python-httpcore2
1697 (package
1698 (name "python-httpcore2")
1699 (version "2.4.0")
1700 (source
1701 (origin
1702 (method git-fetch)
1703 (uri (git-reference
1704 (url "https://github.com/pydantic/httpx2")
1705 (commit (string-append "v" version))))
1706 (file-name (git-file-name name version))
1707 (sha256
1708 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
1709 (build-system pyproject-build-system)
1710 (arguments
1711 (list
1712 #:phases
1713 #~(modify-phases %standard-phases
1714 (add-after 'unpack 'preparation
1715 (lambda _
1716 (chdir "src/httpcore2")
1717 (copy-recursively "../../tests/httpcore2" "tests")
1718 (substitute* (find-files "tests" "\\.py$")
1719 (("tests\\.httpcore2") "tests")
1720 (("tests/httpcore2") "tests"))))
1721 (add-before 'build 'set-version
1722 (lambda _
1723 (substitute* "pyproject.toml"
1724 ((".*uv-dynamic-versioning>.*") "")
1725 (("source.*uv-dynamic-versioning.*") "source = 'vcs'"))
1726 (substitute* "httpcore2/__init__.py"
1727 ((".*= version\\(.*")
1728 (format #f "__version__ = ~s~%" #$version))))))))
1729 (native-inputs
1730 (list python-hatch-fancy-pypi-readme
1731 python-hatch-vcs
1732 python-hatchling
1733 python-pytest
1734 python-pytest-httpbin
1735 python-pytest-trio))
1736 (propagated-inputs
1737 (list python-h11
1738 python-truststore
1739 ;; [optional]
1740 python-anyio
1741 python-h2
1742 python-socksio
1743 python-trio))
1744 (home-page "https://github.com/pydantic/httpx2")
1745 (synopsis "Minimal low-level HTTP client")
1746 (description
1747 "The HTTP Core package provides a minimal low-level HTTP client, which
1748does one thing only. Sending HTTP requests.
1749
1750Some things HTTP Core does do:
1751@itemize
1752@item Sending HTTP requests.
1753@item Thread-safe / task-safe connection pooling.
1754@item HTTP(S) proxy & SOCKS proxy support.
1755@item Supports HTTP/1.1 and HTTP/2.
1756@item Provides both sync and async interfaces.
1757@item Async backend support for @code{asyncio} and @code{trio}.
1758@end itemize")
1759 (license license:bsd-3)))
1760
1761(define-public python-httpretty
1762 (package
1763 (name "python-httpretty")
1764 (version "1.1.4")
1765 (source
1766 (origin
1767 (method url-fetch)
1768 (uri (pypi-uri "httpretty" version))
1769 (sha256
1770 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
1771 (build-system pyproject-build-system)
1772 (arguments
1773 (list
1774 #:test-flags
1775 ;; Only run Unit tests.
1776 #~(list "--ignore=tests/bugfixes"
1777 "--ignore=tests/functional"
1778 "--ignore=tests/pyopenssl"
1779 "-k" (string-join
1780 ;; Tests pattern failing with one of these errors:
1781 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
1782 ;; has no attribute 'should'
1783 ;; AttributeError: 'function' object has no attribute
1784 ;; 'when'
1785 ;; AttributeError: 'AssertionBuilder' object has no
1786 ;; attribute 'should_not'
1787 (list "not fake_socket_passes_through"
1788 "fakesock_socket"
1789 "request_parse_body_when"
1790 "test_Entry_class_normalizes_headers"
1791 "test_has_request"
1792 "test_httpretty_should_raise_proper"
1793 "test_parse_request_line_connect"
1794 "test_request_parse_querystring"
1795 "test_request_string_representation"
1796 "test_request_stubs_internals")
1797 " and not "))))
1798 (native-inputs
1799 (list nss-certs-for-test
1800 python-freezegun
1801 python-mock
1802 python-pytest
1803 python-setuptools
1804 python-sure
1805 python-wheel))
1806 (home-page "https://httpretty.readthedocs.io")
1807 (synopsis "HTTP client mock for Python")
1808 (description
1809 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
1810@code{fakeweb}.")
1811 (license license:expat)))
1812
1813(define-public python-httpx2
1814 (package
1815 (name "python-httpx2")
1816 (version "2.4.0")
1817 (source
1818 (origin
1819 (method git-fetch)
1820 (uri (git-reference
1821 (url "https://github.com/pydantic/httpx2")
1822 (commit (string-append "v" version))))
1823 (file-name (git-file-name name version))
1824 (sha256
1825 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
1826 (arguments
1827 (list
1828 ;; tests: 1227 passed, 200 deselected
1829 #:test-flags
1830 ;; Networking tests.
1831 #~(list "-k" (string-join
1832 (list "not test_async_proxy_close[asyncio]"
1833 "test_async_proxy_close[trio]"
1834 "test_auth"
1835 "test_binary"
1836 "test_client_decode_text_using_autodetect"
1837 "test_client_decode_text_using_explicit_encoding"
1838 "test_follow_redirects"
1839 "test_get"
1840 "test_idna_url[http_with_custom_port]"
1841 "test_idna_url[http_with_port]"
1842 "test_idna_url[https_with_custom_port]"
1843 "test_idna_url[https_with_port]"
1844 "test_idna_url[https_without_port]"
1845 "test_idna_url[idna_label_after_ascii_label]"
1846 "test_idna_url[unicode_tr46_compat]"
1847 "test_json"
1848 "test_post"
1849 "test_redirects"
1850 "test_response_decode_text_using_autodetect"
1851 "test_sync_proxy_close"
1852 "test_url_malformed_idna_label_after_ascii_label"
1853 "test_url_mixed_valid_and_malformed_idna_labels"
1854 "test_verbose")
1855 " and not "))
1856 #:phases
1857 #~(modify-phases %standard-phases
1858 (add-after 'unpack 'preparation
1859 (lambda _
1860 (chdir "src/httpx2")
1861 (copy-recursively "../../tests/httpx2" "tests")
1862 (substitute* (find-files "tests" "\\.py$")
1863 (("tests\\.httpx2") "tests")
1864 (("tests/httpx2") "tests"))))
1865 (add-before 'build 'set-version
1866 (lambda _
1867 (substitute* "pyproject.toml"
1868 (("\"uv-dynamic-versioning>=0\\.8\\.0\"") "")
1869 (("source.*uv-dynamic-versioning.*") "source = 'vcs'")
1870 (("\\.uv-dynamic-versioning") ".vcs")))))))
1871 (build-system pyproject-build-system)
1872 (native-inputs
1873 (list python-chardet
1874 python-hatch-fancy-pypi-readme
1875 python-hatch-vcs
1876 python-hatchling
1877 python-pytest
1878 python-trustme
1879 python-uvicorn))
1880 (propagated-inputs
1881 (list python-anyio
1882 python-httpcore2
1883 python-idna
1884 python-truststore
1885 python-typing-extensions ;Python version < 3.13
1886 ;; [optional]
1887 python-brotli
1888 python-click
1889 python-h2
1890 python-pygments
1891 python-rich
1892 python-socksio
1893 python-zstandard))
1894 (home-page "https://github.com/pydantic/httpx2")
1895 (synopsis "The next generation HTTP client")
1896 (description
1897 "HTTPX2 is a fully featured HTTP client library for Python. It includes
1898an integrated command line client, has support for both HTTP/1.1 and HTTP/2,
1899and provides both sync and async APIs.")
1900 (license license:bsd-3)))
1901
1902(define-public python-jiter
1903 (package
1904 (name "python-jiter")
1905 (version "0.15.0")
1906 (source
1907 (origin
1908 (method git-fetch)
1909 (uri (git-reference
1910 (url "https://github.com/pydantic/jiter/")
1911 (commit (string-append "v" version))))
1912 (file-name (git-file-name name version))
1913 (sha256
1914 (base32 "1z2ljacsc64yykkxvjnq6rq4z56xwr8jhcw02ckv6b85kc66x63p"))))
1915 (build-system pyproject-build-system)
1916 (arguments
1917 (list
1918 #:imported-modules (append %cargo-build-system-modules
1919 %pyproject-build-system-modules)
1920 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
1921 (guix build pyproject-build-system)
1922 (guix build utils))
1923 #:phases
1924 #~(modify-phases %standard-phases
1925 (add-after 'unpack 'prepare-cargo-build-system
1926 (lambda args
1927 (for-each (lambda (phase)
1928 (format #t "Running cargo phase: ~a~%" phase)
1929 (apply (assoc-ref cargo:%standard-phases phase)
1930 #:cargo-target #$(cargo-triplet)
1931 args))
1932 '(prepare-rust-crates
1933 unpack-rust-crates
1934 configure
1935 check-for-pregenerated-files
1936 patch-cargo-checksums))))
1937 (add-after 'prepare-cargo-build-system 'chdir
1938 (lambda _
1939 (chdir "crates/jiter-python"))))))
1940 (native-inputs
1941 (append (list maturin
1942 python-dirty-equals
1943 python-pytest
1944 rust
1945 `(,rust "cargo"))
1946 (or (and=> (%current-target-system)
1947 (compose list make-rust-sysroot))
1948 '())))
1949 (inputs (cargo-inputs 'jiter))
1950 (home-page "https://github.com/pydantic/jiter/")
1951 (synopsis "Iterable JSON parser")
1952 (description
1953 "This package provides a fast Python iterable JSON parser, backed by Rust
1954libraries.")
1955 (license license:bsd-3)))
1956
1957(define-public python-justhtml
1958 (package
1959 (name "python-justhtml")
1960 (version "1.13.0")
1961 (source
1962 (origin
1963 (method git-fetch)
1964 (uri (git-reference
1965 (url "https://github.com/emilstenstrom/justhtml")
1966 (commit (string-append "v" version))))
1967 (file-name (git-file-name name version))
1968 (sha256
1969 (base32 "1hy5w3lr08sj3pivs46nnlfsvrd9ynmicxcrjk4sxbpg7411lyj5"))))
1970 (build-system pyproject-build-system)
1971 (native-inputs
1972 (list python-hatchling))
1973 (home-page "https://github.com/emilstenstrom/justhtml")
1974 (synopsis "Pure Python HTML5 parser")
1975 (description
1976 "JustHTML is a pure Python HTML5 parser. It has a simple API and does
1977not require C extensions or system dependencies.")
1978 (license license:expat)))
1979
1980(define-public python-huggingface-hub
1981 (package
1982 (name "python-huggingface-hub")
1983 (version "0.31.4")
1984 (source
1985 (origin
1986 (method git-fetch)
1987 (uri (git-reference
1988 (url "https://github.com/huggingface/huggingface_hub")
1989 (commit (string-append "v" version))))
1990 (file-name (git-file-name name version))
1991 (sha256
1992 (base32 "1rjkrmvvyzxlbnbndrg4v9qq39grn46c26zrdjgpf114gci5pwap"))))
1993 (build-system pyproject-build-system)
1994 (arguments
1995 (list
1996 #:test-flags
1997 ;; We don't have sentence_transformers...
1998 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
1999 ;; ...nor do we have InquirerPy...
2000 "--ignore=tests/test_command_delete_cache.py"
2001 ;; ...or timm...
2002 "--ignore=contrib/timm/test_timm.py"
2003 ;; ...or spacy_huggingface_hub
2004 "--ignore=contrib/spacy/test_spacy.py"
2005 ;; These all require internet access
2006 "--ignore=tests/test_cache_no_symlinks.py"
2007 "--ignore=tests/test_cache_layout.py"
2008 "--ignore=tests/test_commit_scheduler.py"
2009 "--ignore=tests/test_file_download.py"
2010 "--ignore=tests/test_hf_api.py"
2011 "--ignore=tests/test_hf_file_system.py"
2012 "--ignore=tests/test_inference_api.py"
2013 "--ignore=tests/test_inference_async_client.py"
2014 "--ignore=tests/test_inference_client.py"
2015 "--ignore=tests/test_inference_text_generation.py"
2016 "--ignore=tests/test_login_utils.py"
2017 "--ignore=tests/test_offline_utils.py"
2018 "--ignore=tests/test_repocard.py"
2019 "--ignore=tests/test_repository.py"
2020 "--ignore=tests/test_snapshot_download.py"
2021 "--ignore=tests/test_utils_cache.py"
2022 "--ignore=tests/test_utils_git_credentials.py"
2023 "--ignore=tests/test_utils_http.py"
2024 "--ignore=tests/test_utils_pagination.py"
2025 "--ignore=tests/test_webhooks_server.py"
2026 "-k" (string-append
2027 "not test_push_to_hub"
2028 " and not test_from_pretrained_model_id_only"
2029 " and not test_from_pretrained_model_id_and_revision"
2030 ;; These all require internet access
2031 " and not test_auth"
2032 " and not test_oauth"
2033 " and not test_utils_sha"
2034 " and not test_inference_providers"
2035 " and not test_xet"))
2036 #:phases
2037 '(modify-phases %standard-phases
2038 (add-before 'check 'pre-check
2039 ;; Some tests need to write to HOME.
2040 (lambda _ (setenv "HOME" "/tmp"))))))
2041 (propagated-inputs
2042 (list python-filelock
2043 python-fsspec
2044 python-packaging
2045 python-pyyaml
2046 python-requests
2047 python-tqdm
2048 python-typing-extensions))
2049 (native-inputs
2050 (list python-aiohttp
2051 python-fastapi
2052 python-jedi
2053 python-jinja2
2054 python-numpy
2055 python-pillow
2056 python-pydantic
2057 python-pytest
2058 python-pytest-asyncio
2059 python-pytest-env
2060 python-pytest-mock
2061 python-pytest-rerunfailures
2062 python-pytest-vcr
2063 python-pytest-xdist
2064 python-setuptools
2065 python-types-requests
2066 python-types-toml
2067 python-types-urllib3
2068 python-typing-extensions
2069 python-urllib3
2070 python-wheel))
2071 (home-page "https://huggingface.co/docs/huggingface_hub/")
2072 (synopsis "Client library for accessing the huggingface.co hub")
2073 (description
2074 "This package provides a client library to download and publish models,
2075datasets and other repos on the @url{huggingface.co} hub.")
2076 (license license:asl2.0)))
2077
2078(define-public python-kubernetes
2079 (package
2080 (name "python-kubernetes")
2081 (version "35.0.0")
2082 (source
2083 (origin
2084 (method url-fetch)
2085 (uri (pypi-uri "kubernetes" version))
2086 (sha256
2087 (base32 "1vh9bzq175fzv9av3v37lcfh37yzss2d9vxrb0a84fa2ji2d601x"))))
2088 (build-system pyproject-build-system)
2089 (arguments
2090 (list
2091 #:test-flags
2092 #~(list
2093 ;; The following tests expect a local running Kubernetes cluster.
2094 "--ignore=kubernetes/e2e_test"
2095 "--ignore=kubernetes/dynamic")))
2096 (native-inputs
2097 (list python-pytest
2098 python-setuptools))
2099 (propagated-inputs
2100 (list python-certifi
2101 python-dateutil
2102 python-durationpy
2103 python-google-auth
2104 python-pyyaml
2105 python-requests
2106 python-requests-oauthlib
2107 python-six ;XXX: hard dependency
2108 python-urllib3
2109 python-websocket-client))
2110 (home-page "https://github.com/kubernetes-client/python")
2111 (synopsis "Python client for Kubernetes")
2112 (description
2113 "This package provides an official Python client library for
2114@url{http://kubernetes.io, Kubernetes}.")
2115 (license license:asl2.0)))
2116
2117(define-public python-lazr-restfulclient
2118 (package
2119 (name "python-lazr-restfulclient")
2120 (version "0.14.6")
2121 (source
2122 (origin
2123 (method url-fetch)
2124 (uri (pypi-uri "lazr.restfulclient" version))
2125 (sha256
2126 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
2127 (build-system pyproject-build-system)
2128 (arguments
2129 (list
2130 #:phases
2131 #~(modify-phases %standard-phases
2132 ;; Disable part of the test suite to avoid the lazr.authentication
2133 ;; requirement, which requires 'oauth', a Python 2 only library.
2134 (add-after 'unpack 'remove-some-checks
2135 (lambda _
2136 (with-directory-excursion "src/lazr/restfulclient/tests"
2137 (for-each delete-file '("test_oauth.py" "test_docs.py")))
2138 (substitute* "setup.py"
2139 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
2140 ""))))
2141 (replace 'check
2142 (lambda* (#:key tests? #:allow-other-keys)
2143 (if tests?
2144 (invoke "zope-testrunner" "--test-path=src")
2145 (format #t "test suite not run~%")))))))
2146 (native-inputs
2147 (list python-setuptools
2148 python-testtools
2149 python-wheel
2150 python-wsgi-intercept
2151 python-zope-testrunner))
2152 (propagated-inputs
2153 (list python-distro
2154 python-httplib2
2155 python-oauthlib
2156 python-pyparsing
2157 python-setuptools
2158 python-six
2159 python-wadllib))
2160 (home-page "https://launchpad.net/lazr.restfulclient")
2161 (synopsis "Web client Python library extending wadlib")
2162 (description "This package provides a programmable client library that
2163adds functionality on top of @code{wadlib}.")
2164 (license license:lgpl3+)))
2165
2166(define-public python-launchpadlib
2167 (package
2168 (name "python-launchpadlib")
2169 (version "2.1.0")
2170 (source
2171 (origin
2172 (method url-fetch)
2173 (uri (pypi-uri "launchpadlib" version))
2174 (sha256
2175 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
2176 (build-system pyproject-build-system)
2177 (arguments
2178 (list #:phases #~(modify-phases %standard-phases
2179 (add-before 'check 'set-home
2180 (lambda _
2181 ;; Tests require a writable home.
2182 (setenv "HOME" "/tmp"))))))
2183 (propagated-inputs
2184 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
2185 (native-inputs (list python-pytest python-testresources python-wadllib
2186 python-setuptools python-wheel))
2187 (home-page "https://documentation.ubuntu.com/launchpad")
2188 (synopsis "Python client library for Launchpad's web service")
2189 (description "@code{launchpadlib} is a Python library that allows
2190scripting Launchpad via its the web service API.")
2191 (license license:lgpl3+)))
2192
2193(define-public python-lazr-uri
2194 (package
2195 (name "python-lazr-uri")
2196 (version "1.0.7")
2197 (source
2198 (origin
2199 (method url-fetch)
2200 (uri (pypi-uri "lazr_uri" version))
2201 (sha256
2202 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
2203 (build-system pyproject-build-system)
2204 (arguments
2205 (list
2206 #:phases
2207 #~(modify-phases %standard-phases
2208 (replace 'check
2209 (lambda* (#:key tests? #:allow-other-keys)
2210 (if tests?
2211 (invoke "zope-testrunner" "--test-path=src")
2212 (format #t "test suite not run~%")))))))
2213 (native-inputs (list python-setuptools python-zope-testrunner))
2214 (home-page "https://launchpad.net/lazr.uri")
2215 (synopsis "Python URI manipulation library")
2216 (description "This Python package provides a self-contained, easily
2217reusable library for parsing, manipulating, and generating URIs.")
2218 (license license:lgpl3)))
2219
2220(define-public python-ldaptor
2221 (package
2222 (name "python-ldaptor")
2223 (version "21.2.0")
2224 (source
2225 (origin
2226 (method url-fetch)
2227 (uri (pypi-uri "ldaptor" version))
2228 (sha256
2229 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
2230 (build-system pyproject-build-system)
2231 (arguments
2232 (list
2233 #:test-flags
2234 #~(list "-m" "twisted.trial"
2235 (string-append "-j" (number->string (parallel-job-count)))
2236 "ldaptor")
2237 #:phases
2238 #~(modify-phases %standard-phases
2239 (add-after 'unpack 'python-3.12-patch
2240 (lambda _
2241 (substitute* "ldaptor/config.py"
2242 (("SafeConfigParser")
2243 "ConfigParser"))))
2244 (add-before 'check 'disable-failing-tests
2245 (lambda _
2246 ;; Testing with Twisted 22.4 results in infinite loop creating
2247 ;; temporary config files, see
2248 ;; <https://github.com/twisted/ldaptor/issues/238>.
2249 (delete-file "ldaptor/test/test_config.py")))
2250 (replace 'check
2251 (lambda* (#:key tests? test-flags #:allow-other-keys)
2252 (when tests?
2253 (apply invoke "python" test-flags)))))))
2254 (native-inputs
2255 (list python-setuptools
2256 python-wheel))
2257 (propagated-inputs
2258 (list python-passlib
2259 python-pyopenssl
2260 python-service-identity ; to pass sanity check, for Twisted[tls]
2261 python-pyparsing
2262 python-twisted
2263 python-zope-interface))
2264 (home-page "https://github.com/twisted/ldaptor")
2265 (synopsis "Pure-Python Twisted library for LDAP")
2266 (description
2267 "This package provides a Python Twisted library for LDAP, which key
2268feaatures are:
2269@itemize
2270@item LDAP client logic
2271@item separately-accessible LDAP and BER protocol message generation/parsing
2272@item ASCII-format LDAP filter generation and parsing
2273@item LDIF format data generation
2274@item Samba password changing logic
2275@end itemize")
2276 (license license:expat)))
2277
2278(define-public python-legacy-cgi
2279 (package
2280 (name "python-legacy-cgi")
2281 (version "2.6.1")
2282 (source
2283 (origin
2284 (method url-fetch)
2285 (uri (pypi-uri "legacy_cgi" version))
2286 (sha256
2287 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
2288 (build-system pyproject-build-system)
2289 (native-inputs (list python-poetry-core python-pytest))
2290 (home-page "https://github.com/jackrosenthal/legacy-cgi")
2291 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
2292 (description
2293 "This is a fork of the standard library modules @code{cgi} and
2294@code{cgitb}. They are slated to be removed from the Python standard library
2295in Python 3.13 by PEP-594.")
2296 (license license:psfl)))
2297
2298(define-public python-librouteros
2299 (package
2300 (name "python-librouteros")
2301 (version "4.0.0")
2302 (source
2303 (origin
2304 (method git-fetch)
2305 (uri (git-reference
2306 (url "https://github.com/luqasz/librouteros")
2307 (commit version)))
2308 (file-name (git-file-name name version))
2309 (sha256
2310 (base32 "0in952b2idb5j8v6sxfm21gqbr5i5776w5ir0hdsxjrl2f29305v"))))
2311 (build-system pyproject-build-system)
2312 (arguments
2313 (list
2314 #:build-backend "hatchling.build"
2315 #:test-flags
2316 #~(list "tests/unit")))
2317 (native-inputs
2318 (list python-hatchling
2319 python-pytest
2320 python-pytest-asyncio
2321 python-stamina))
2322 (home-page "https://github.com/luqasz/librouteros")
2323 (synopsis "Python implementation of MikroTik RouterOS API")
2324 (description
2325 "This package implements MikroTik's @code{RouterOS} API.")
2326 (license license:gpl2+)))
2327
2328(define-public python-opentelemetry-api
2329 (package
2330 (name "python-opentelemetry-api")
2331 (version "1.37.0")
2332 (source
2333 (origin
2334 (method url-fetch)
2335 (uri (pypi-uri "opentelemetry_api" version))
2336 (sha256
2337 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
2338 (build-system pyproject-build-system)
2339 (propagated-inputs (list python-importlib-metadata
2340 python-typing-extensions))
2341 (native-inputs (list python-hatchling
2342 python-opentelemetry-test-utils-bootstrap))
2343 (home-page "https://opentelemetry.io/docs/languages/python/")
2344 (synopsis "OpenTelemetry Python API")
2345 (description "@code{OpenTelemetry} Python API.")
2346 (license license:asl2.0)))
2347
2348(define-public python-opentelemetry-api-bootstrap
2349 (hidden-package
2350 (package/inherit python-opentelemetry-api
2351 (name "python-opentelemetry-api-bootstrap")
2352 (arguments
2353 (list
2354 #:tests? #f))
2355 (native-inputs (list python-hatchling)))))
2356
2357(define-public python-opentelemetry-sdk
2358 (package
2359 (name "python-opentelemetry-sdk")
2360 (version "1.37.0")
2361 (source
2362 (origin
2363 (method url-fetch)
2364 (uri (pypi-uri "opentelemetry_sdk" version))
2365 (sha256
2366 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
2367 (build-system pyproject-build-system)
2368 (propagated-inputs (list python-opentelemetry-api
2369 python-opentelemetry-semantic-conventions
2370 python-typing-extensions))
2371 (native-inputs (list python-hatchling
2372 python-opentelemetry-test-utils-bootstrap
2373 python-pytest))
2374 (home-page "https://opentelemetry.io/docs/languages/python/")
2375 (synopsis "OpenTelemetry Python SDK")
2376 (description "@code{OpenTelemetry} Python SDK.")
2377 (license license:asl2.0)))
2378
2379(define-public python-opentelemetry-sdk-bootstrap
2380 (hidden-package
2381 (package/inherit python-opentelemetry-sdk
2382 (name "python-opentelemetry-sdk-bootstrap")
2383 (arguments (list #:tests? #f))
2384 (propagated-inputs (list python-opentelemetry-api-bootstrap
2385 python-opentelemetry-semantic-conventions-bootstrap))
2386 (native-inputs (list python-hatchling)))))
2387
2388(define-public python-opentelemetry-semantic-conventions
2389 (package
2390 (name "python-opentelemetry-semantic-conventions")
2391 (version "0.58b0")
2392 (source
2393 (origin
2394 (method url-fetch)
2395 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
2396 (sha256
2397 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
2398 (build-system pyproject-build-system)
2399 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
2400 (native-inputs (list python-hatchling))
2401 (home-page "https://opentelemetry.io/docs/languages/python/")
2402 (synopsis "OpenTelemetry Semantic Conventions")
2403 (description "@code{OpenTelemetry} Semantic Conventions.")
2404 (license license:asl2.0)))
2405
2406(define-public python-opentelemetry-semantic-conventions-bootstrap
2407 (hidden-package
2408 (package/inherit python-opentelemetry-semantic-conventions
2409 (name "python-opentelemetry-semantic-conventions-bootstrap")
2410 (arguments
2411 (list
2412 #:tests? #f))
2413 (propagated-inputs (list python-opentelemetry-api-bootstrap
2414 python-typing-extensions)))))
2415
2416(define-public python-opentelemetry-test-utils
2417 (package
2418 (name "python-opentelemetry-test-utils")
2419 (version "0.58b0")
2420 (source
2421 (origin
2422 (method url-fetch)
2423 (uri (pypi-uri "opentelemetry_test_utils" version))
2424 (sha256
2425 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
2426 (build-system pyproject-build-system)
2427 (arguments (list #:tests? #f)) ; No tests in the wheel.
2428 (propagated-inputs
2429 (list python-asgiref
2430 python-opentelemetry-api
2431 python-opentelemetry-sdk))
2432 (native-inputs (list python-hatchling))
2433 (home-page "https://opentelemetry.io/docs/languages/python/")
2434 (synopsis "Test utilities for OpenTelemetry unit tests")
2435 (description "Test utilities for @code{OpenTelemetry} unit tests.")
2436 (license license:asl2.0)))
2437
2438(define-public python-opentelemetry-test-utils-bootstrap
2439 (hidden-package
2440 (package/inherit python-opentelemetry-test-utils
2441 (name "python-opentelemetry-test-utils-bootstrap")
2442 (propagated-inputs
2443 (list python-asgiref
2444 python-opentelemetry-api-bootstrap
2445 python-opentelemetry-sdk-bootstrap)))))
2446
2447(define-public python-pathy
2448 (package
2449 (name "python-pathy")
2450 (version "0.11.0")
2451 (source
2452 (origin
2453 (method url-fetch)
2454 (uri (pypi-uri "pathy" version))
2455 (sha256
2456 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
2457 (build-system pyproject-build-system)
2458 (native-inputs
2459 (list python-mock
2460 python-pytest
2461 python-setuptools))
2462 (propagated-inputs
2463 (list python-pathlib-abc-for-python-pathy
2464 python-smart-open-6
2465 python-typer))
2466 (home-page "https://github.com/justindujardin/pathy")
2467 (synopsis "Path interface for local and cloud bucket storage")
2468 (description "Pathy is a python package (with type annotations) for
2469working with Cloud Bucket storage providers using a @code{pathlib} interface.
2470It provides @code{pathlib.Path} subclasses for local and cloud bucket
2471storage.")
2472 (license license:asl2.0)))
2473
2474(define-public python-portend
2475 (package
2476 (name "python-portend")
2477 (version "3.2.1")
2478 (source
2479 (origin
2480 (method url-fetch)
2481 (uri (pypi-uri "portend" version))
2482 (sha256
2483 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
2484 (build-system pyproject-build-system)
2485 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
2486 ;; download dependencies.
2487 (arguments
2488 '(#:test-flags '("-k" "not project")))
2489 (native-inputs
2490 (list python-pytest
2491 python-setuptools
2492 python-setuptools-scm))
2493 (propagated-inputs
2494 (list python-tempora))
2495 (home-page "https://github.com/jaraco/portend")
2496 (synopsis "Monitor TCP ports for bound or unbound states")
2497 (description
2498 "@code{python-portend} can be used to monitor TCP ports for bound or
2499unbound states. For example, waiting for a port to be occupied or freed
2500within a set timeout. @code{python-portend} can also be used directly from
2501the command line.")
2502 (license license:expat)))
2503
2504(define-public python-prawcore
2505 (package
2506 (name "python-prawcore")
2507 (version "2.4.0")
2508 (source
2509 (origin
2510 (method git-fetch)
2511 (uri (git-reference
2512 (url "https://github.com/praw-dev/prawcore")
2513 (commit (string-append "v" version))))
2514 (file-name (git-file-name name version))
2515 (sha256
2516 (base32 "1y7gh7kk002b2h1ppkr1llb2gjfnby28zvx11j4ji0wm3r3rjh5l"))))
2517 (build-system pyproject-build-system)
2518 (arguments
2519 ;; XXX: These tests fail with an incomplete request response.
2520 (list #:test-flags
2521 #~'("-k" #$(string-append
2522 "not test_revoke__access_token_with_refresh_set"
2523 " and not test_revoke__access_token_without_refresh_set"
2524 " and not test_revoke__refresh_token_with_access_set"
2525 " and not test_refresh__with_scopes"
2526 " and not test_request__patch"))))
2527 (native-inputs
2528 (list python-betamax
2529 python-betamax-matchers
2530 python-betamax-serializers
2531 python-flit-core
2532 python-mock
2533 python-pytest
2534 python-testfixtures))
2535 (propagated-inputs
2536 (list python-requests))
2537 (synopsis "Core component of PRAW")
2538 (description "PRAWcore is a low-level communication layer used by PRAW.")
2539 (home-page "https://praw.readthedocs.io/en/latest/")
2540 (license license:bsd-2)))
2541
2542(define-public python-praw
2543 (package
2544 (name "python-praw")
2545 (version "7.8.1")
2546 (source
2547 (origin
2548 (method git-fetch)
2549 (uri (git-reference
2550 (url "https://github.com/praw-dev/praw")
2551 (commit (string-append "v" version))))
2552 (file-name (git-file-name name version))
2553 (sha256
2554 (base32 "05qq43l4334cq8r8k731qnb45nq12vvfdxwbr6q84a1hafp7n4cg"))))
2555 (build-system pyproject-build-system)
2556 (arguments
2557 (list #:test-flags
2558 #~(list "--ignore=tests/units/models"
2559 "--ignore=tests/integration/models"
2560 "--ignore=tests/unit/test_config.py"
2561 "--ignore=tests/integration/test_reddit.py")))
2562 (native-inputs
2563 (list python-betamax
2564 python-betamax-matchers
2565 python-flit-core
2566 python-pytest))
2567 (propagated-inputs
2568 (list python-prawcore python-update-checker python-websocket-client))
2569 (synopsis "Python Reddit API Wrapper")
2570 (description "PRAW is a Python package that allows for simple access to
2571Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
2572API rules.")
2573 (home-page "https://praw.readthedocs.io/en/latest/")
2574 (license license:bsd-2)))
2575
2576(define-public python-frozenlist
2577 (package
2578 (name "python-frozenlist")
2579 (version "1.8.0")
2580 (source
2581 (origin
2582 (method git-fetch)
2583 (uri (git-reference
2584 (url "https://github.com/aio-libs/frozenlist")
2585 (commit (string-append "v" version))))
2586 (file-name (git-file-name name version))
2587 (sha256
2588 (base32 "0r1kxf5b562zrn04nl912i6a8y1fyc891l1284v0zj9llb97limy"))))
2589 ;; XXX: Without "wheel", the 'install phase can't find the wheel.
2590 (outputs (list "out" "wheel"))
2591 (build-system pyproject-build-system)
2592 ;; The configuration contains explicit early calls to pytest_cov.
2593 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
2594 (native-inputs
2595 (list python-cython
2596 python-expandvars
2597 python-pytest
2598 python-setuptools
2599 python-tomli))
2600 (home-page "https://github.com/aio-libs/frozenlist")
2601 (synopsis "List-like data structure for Python")
2602 (description "@code{frozenlist.FrozenList} is a list-like structure which
2603implements @code{collections.abc.MutableSequence}. It can be made immutable
2604by calling @code{FrozenList.freeze}.")
2605 (license license:asl2.0)))
2606
2607(define-public python-aiobotocore
2608 (package
2609 (name "python-aiobotocore")
2610 (version "3.0.0")
2611 (source
2612 (origin
2613 (method url-fetch)
2614 (uri (pypi-uri "aiobotocore" version))
2615 (sha256
2616 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
2617 (build-system pyproject-build-system)
2618 (arguments
2619 ;; TODO: Tests need some setupt, see Makefile.
2620 (list #:tests? #f))
2621 (native-inputs
2622 (list python-setuptools))
2623 (propagated-inputs
2624 (list python-aiohttp
2625 python-aioitertools
2626 python-botocore
2627 python-dateutil
2628 python-jmespath
2629 python-multidict
2630 python-typing-extensions
2631 python-wrapt))
2632 (home-page "https://github.com/aio-libs/aiobotocore")
2633 (synopsis "Async client for AWS services using botocore and aiohttp")
2634 (description "This package provides an async client for Amazon services
2635using botocore and aiohttp/asyncio. This library is a mostly full featured
2636asynchronous version of botocore.")
2637 (license license:asl2.0)))
2638
2639(define-public python-aiohappyeyeballs
2640 (package
2641 (name "python-aiohappyeyeballs")
2642 (properties '((commit . "cc53cf8a1d31f7b460a0114214aac66956f0e2ed")
2643 (revision . "0")))
2644 (version (git-version "2.6.1"
2645 (assoc-ref properties 'revision)
2646 (assoc-ref properties 'commit)))
2647 (source
2648 (origin
2649 (method git-fetch)
2650 (uri (git-reference
2651 (url "https://github.com/aio-libs/aiohappyeyeballs")
2652 (commit (assoc-ref properties 'commit))))
2653 (file-name (git-file-name name version))
2654 (sha256
2655 (base32 "0nc723f4sxryg5h9z8paysmy9dnqw2jy4srxp9axrxkv9qrawa7n"))))
2656 (build-system pyproject-build-system)
2657 (native-inputs
2658 (list python-poetry-core
2659 python-pytest
2660 python-pytest-asyncio))
2661 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
2662 (synopsis "Happy Eyeballs for asyncio")
2663 (description "This library exists to allow connecting with Happy
2664Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
2665DNS name.")
2666 (license license:psfl)))
2667
2668(define-public python-aioitertools
2669 (package
2670 (name "python-aioitertools")
2671 (version "0.12.0")
2672 (source
2673 (origin
2674 (method url-fetch)
2675 (uri (pypi-uri "aioitertools" version))
2676 (sha256
2677 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
2678 (build-system pyproject-build-system)
2679 (arguments
2680 (list #:test-backend #~'custom
2681 #:test-flags #~(list "-m" "aioitertools.tests")))
2682 (native-inputs
2683 (list python-flit-core))
2684 (home-page "https://pypi.org/project/aioitertools/")
2685 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
2686 (description
2687 "This package provides an implementation of itertools, builtins, and more
2688for AsyncIO and mixed-type iterables.")
2689 (license license:expat)))
2690
2691(define-public python-aiosignal
2692 (package
2693 (name "python-aiosignal")
2694 (version "1.4.0")
2695 (source
2696 (origin
2697 (method url-fetch)
2698 (uri (pypi-uri "aiosignal" version))
2699 (sha256
2700 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
2701 (build-system pyproject-build-system)
2702 (arguments
2703 (list
2704 #:phases
2705 #~(modify-phases %standard-phases
2706 (add-after 'unpack 'avoid-pytest-cov-preload
2707 (lambda _
2708 (substitute* "pytest.ini"
2709 (("-p pytest_cov") "")))))))
2710 (native-inputs
2711 (list python-pytest
2712 python-pytest-asyncio
2713 python-setuptools))
2714 (propagated-inputs
2715 (list python-frozenlist))
2716 (home-page "https://github.com/aio-libs/aiosignal")
2717 (synopsis "Callback manager for Python @code{asyncio} projects")
2718 (description "This Python module provides @code{Signal}, an abstraction to
2719register asynchronous callbacks. The @code{Signal} abstraction can be used
2720for adding, removing and dropping callbacks.")
2721 (license license:asl2.0)))
2722
2723(define-public python-aiohttp
2724 (package
2725 (name "python-aiohttp")
2726 ;; TODO: Newer versions require zlib-ng:
2727 ;; <https://github.com/zlib-ng/zlib-ng>,
2728 ;; <https://github.com/pycompression/python-zlib-ng>.
2729 (version "3.11.18")
2730 (source
2731 (origin
2732 (method url-fetch)
2733 (uri (pypi-uri "aiohttp" version))
2734 (sha256
2735 (base32 "12jmkxkc5nnk6ma6m7rrs0w4vzswfc47ffxn5m0pwav1708nx1df"))
2736 (snippet
2737 #~(begin
2738 (use-modules ((guix build utils)))
2739 ;; TODO: Unbundle the llhttp sources.
2740 ;; (delete-file-recursively "vendor")
2741 (delete-file "aiohttp/_http_parser.c")
2742 (delete-file "aiohttp/_http_writer.c")))))
2743 (build-system pyproject-build-system)
2744 (arguments
2745 (list
2746 ;; tests: 3045 passed, 32 skipped, 29 xfailed, 2 subtests passed
2747 #:test-flags
2748 '(list
2749 "-o" "addopts=''" ; Avoid -p pytest_cov.
2750 "-m" "not dev_mode"
2751 "--numprocesses" (number->string (parallel-job-count))
2752 "--ignore=aiohttp/test_utils.py"
2753 ;; This tests requires the 'proxy.py' module, not yet packaged.
2754 "--ignore=tests/test_proxy_functional.py"
2755 ;; These tests need brotli.
2756 "--ignore=tests/test_web_sendfile_functional.py"
2757 "--ignore=tests/test_web_functional.py"
2758 ;; These tests need pytest_codspeed
2759 "--ignore-glob=tests/test_benchmarks*"
2760 ;; These tests need python_on_whales
2761 "--ignore=tests/autobahn/test_autobahn.py"
2762 "-k"
2763 ;; These tests fail for unknown reasons (see:
2764 ;; https://github.com/aio-libs/aiohttp/issues/7130)
2765 (string-append
2766 "not test_no_warnings "
2767 "and not test_default_loop "
2768 "and not test_ctor_global_loop "
2769 "and not test_set_loop_default_loop "
2770
2771 ;; Disable brotli tests, because we’re not providing that optional
2772 ;; library.
2773 "and not test_feed_eof_no_err_brotli "
2774
2775 ;; Disable the following tests as they require
2776 ;; networking.
2777 "and not TestDeflateBuffer "
2778 "and not test_client_session_timeout_zero "
2779 "and not test_empty_body "
2780 "and not test_mark_formdata_as_processed[pyloop] "
2781 "and not test_receive_runtime_err[pyloop] "
2782
2783 ;; assert 'gzip, deflate' == 'gzip, deflate, br'
2784 "and not test_headers[pyloop] "
2785 ;; ~/.. does not resolve
2786 "and not test_add_static_path_resolution"))
2787 #:phases
2788 '(modify-phases %standard-phases
2789 (add-after 'unpack 'fix-tests
2790 (lambda _
2791 ;; Make sure the timestamp of this file is > 1990, because a few
2792 ;; tests like test_static_file_if_modified_since_past_date depend
2793 ;; on it.
2794 (let ((late-90s (* 60 60 24 365 30)))
2795 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
2796 (add-before 'build 'cythonize
2797 (lambda _
2798 ;; Adapted from the Makefile.
2799 (with-directory-excursion "aiohttp"
2800 (for-each
2801 (lambda (file)
2802 (invoke "cython" "-3"
2803 file "-I" "."))
2804 (find-files "." "_.*\\.pyx$"))))))))
2805 (propagated-inputs
2806 (list python-aiohappyeyeballs
2807 python-aiosignal
2808 python-attrs
2809 python-frozenlist
2810 python-multidict
2811 python-propcache
2812 python-yarl))
2813 (native-inputs
2814 (list gunicorn-bootstrap
2815 python-cython
2816 python-freezegun
2817 python-isal
2818 python-pytest
2819 python-pytest-mock
2820 python-pytest-xdist
2821 python-re-assert
2822 python-setuptools))
2823 (home-page "https://github.com/aio-libs/aiohttp/")
2824 (synopsis "Async HTTP client/server framework (asyncio)")
2825 (description "@code{aiohttp} is an asynchronous HTTP client/server
2826framework.
2827
2828Its main features are:
2829@itemize
2830@item Supports both client and server side of HTTP protocol.
2831@item Supports both client and server Web-Sockets out-of-the-box without the
2832Callback Hell.
2833@item Web-server has middlewares and pluggable routing.
2834@end itemize")
2835 (license license:asl2.0)))
2836
2837(define-public python-aiohttp-oauthlib
2838 (package
2839 (name "python-aiohttp-oauthlib")
2840 (version "0.1.0")
2841 (source
2842 (origin
2843 (method url-fetch)
2844 (uri (pypi-uri "aiohttp-oauthlib" version))
2845 (sha256
2846 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
2847 (build-system pyproject-build-system)
2848 (arguments (list #:tests? #f)) ; none included
2849 (propagated-inputs (list python-aiohttp python-oauthlib))
2850 (native-inputs (list python-setuptools python-setuptools-scm))
2851 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
2852 (synopsis "OAuthlib authentication support for aiohttp")
2853 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
2854provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
2855 (license license:isc)))
2856
2857(define-public python-aiohttp-client-cache
2858 (package
2859 (name "python-aiohttp-client-cache")
2860 (version "0.14.3")
2861 (source
2862 (origin
2863 (method git-fetch)
2864 (uri (git-reference
2865 (url "https://github.com/requests-cache/aiohttp-client-cache")
2866 (commit (string-append "v" version))))
2867 (file-name (git-file-name name version))
2868 (sha256
2869 (base32
2870 "13xbmjjvcbzh3yh5z92mc0gwicwfjfq2av5jbqv09sbfzhggs92y"))))
2871 (build-system pyproject-build-system)
2872 (arguments
2873 (list
2874 #:test-flags #~(list "--ignore=test/integration/")))
2875 (native-inputs
2876 (list python-brotli
2877 python-faker
2878 python-hatchling
2879 python-pytest
2880 python-pytest-aiohttp
2881 python-pytest-asyncio
2882 python-types-aiofiles))
2883 (propagated-inputs
2884 (list python-aiohttp
2885 python-attrs
2886 python-itsdangerous
2887 python-url-normalize
2888 ;; [optional]
2889 python-aioboto3
2890 python-aiobotocore
2891 python-aiofiles
2892 python-aiosqlite
2893 python-pymongo
2894 python-redis))
2895 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
2896 (synopsis "Persistent cache for aiohttp requests")
2897 (description
2898 "This package is an asynchronous persistent caching library specifically
2899designed for @samp{aiohttp} requests in Python. With support for various
2900storage backends, it offers flexibility in how and where the cache is stored.
2901Please note that MongoDB and DynamoDB backends are not currently supported due
2902to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
2903 (license license:expat)))
2904
2905(define-public python-aiohttp-cors
2906 (package
2907 (name "python-aiohttp-cors")
2908 (version "0.8.1")
2909 (source
2910 (origin
2911 (method url-fetch)
2912 (uri (pypi-uri "aiohttp_cors" version))
2913 (sha256
2914 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
2915 (build-system pyproject-build-system)
2916 (arguments
2917 (list
2918 #:tests? #f)) ; network access is required to run tests
2919 (native-inputs
2920 (list python-setuptools
2921 python-wheel))
2922 (propagated-inputs
2923 (list python-aiohttp))
2924 (home-page "https://github.com/aio-libs/aiohttp-cors")
2925 (synopsis "CORS support for aiohttp")
2926 (description
2927 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
2928support for aiohttp asyncio-powered asynchronous HTTP server.")
2929 (license license:asl2.0)))
2930
2931(define-public python-aiohttp-retry
2932 (package
2933 (name "python-aiohttp-retry")
2934 (version "2.9.1")
2935 (source
2936 (origin
2937 (method git-fetch)
2938 (uri (git-reference
2939 (url "https://github.com/inyutin/aiohttp_retry")
2940 (commit (string-append "v" version))))
2941 (file-name (git-file-name name version))
2942 (sha256
2943 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
2944 (build-system pyproject-build-system)
2945 (native-inputs
2946 (list python-pytest
2947 python-pytest-aiohttp
2948 python-setuptools))
2949 (propagated-inputs
2950 (list python-aiohttp))
2951 (home-page "https://github.com/inyutin/aiohttp_retry")
2952 (synopsis "Simple retry client for aiohttp")
2953 (description
2954 "This package implements @code{RetryClient} for @code{aiohttp} to retry
2955connection to provided endpoint with timeouts logic or use:
2956
2957@itemize
2958@item @code{ExponentialRetry} with exponential backoff
2959@item @code{RandomRetry} for random backoff
2960@item @code{ListRetry} with backoff you predefine by list
2961@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
2962@item @code{JitterRetry} exponential retry with a bit of randomness
2963@end itemize")
2964 (license license:expat)))
2965
2966(define-public python-aiohttp-socks
2967 (package
2968 (name "python-aiohttp-socks")
2969 (version "0.10.1")
2970 (source
2971 (origin
2972 (method url-fetch)
2973 (uri (pypi-uri "aiohttp_socks" version))
2974 (sha256
2975 (base32
2976 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
2977 (build-system pyproject-build-system)
2978 (arguments (list #:tests? #false)) ;none included
2979 (propagated-inputs
2980 (list python-aiohttp python-socks))
2981 (native-inputs (list python-setuptools python-wheel))
2982 (home-page "https://github.com/romis2012/aiohttp-socks")
2983 (synopsis "SOCKS proxy connector for aiohttp")
2984 (description "This package provides a SOCKS proxy connector for
2985aiohttp. It supports SOCKS4(a) and SOCKS5.")
2986 (license license:asl2.0)))
2987
2988(define-public python-aiodns
2989 (package
2990 (name "python-aiodns")
2991 (version "3.5.0")
2992 (source
2993 (origin
2994 (method git-fetch)
2995 (uri (git-reference
2996 (url "https://github.com/saghul/aiodns")
2997 (commit (string-append "v" version))))
2998 (file-name (git-file-name name version))
2999 (sha256
3000 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
3001 (build-system pyproject-build-system)
3002 (arguments
3003 (list
3004 #:tests? #f)) ;tests require internet access
3005 (native-inputs
3006 (list python-pytest python-pytest-asyncio python-setuptools))
3007 (propagated-inputs (list python-pycares))
3008 (home-page "https://github.com/saghul/aiodns")
3009 (synopsis "Simple DNS resolver for asyncio")
3010 (description
3011 "@code{aiodns} provides a simple way for doing asynchronous DNS
3012resolutions with a synchronous looking interface by using
3013@url{https://github.com/saghul/pycares,pycares}.")
3014 (license license:expat)))
3015
3016(define-public python-aioquic
3017 (package
3018 (name "python-aioquic")
3019 (version "1.2.0")
3020 (source
3021 (origin
3022 (method url-fetch)
3023 (uri (pypi-uri "aioquic" version))
3024 (sha256
3025 (base32 "16bigrn5b46c7nmpzxhnlhh4y03hwc7dbd0mi5f8r53i7yxn64pr"))))
3026 (build-system pyproject-build-system)
3027 (arguments
3028 (list
3029 #:test-flags
3030 #~(list "-k" (string-join
3031 ;; AssertionError: AlertBadCertificate not raised
3032 (list "not test_verify_subject_no_subjaltname"
3033 ;; AttributeError: module
3034 ;; 'service_identity.cryptography' has no attribute
3035 ;; 'extract_patterns'
3036 "test_verify_subject_with_subjaltname"
3037 ;; AttributeError: module
3038 ;; 'service_identity.cryptography' has no attribute
3039 ;; 'extract_patterns'
3040 "test_verify_subject_with_subjaltname_ipaddress")
3041 " and not "))))
3042 (native-inputs
3043 (list nss-certs-for-test
3044 python-pytest
3045 python-setuptools
3046 python-wheel))
3047 (inputs
3048 (list openssl))
3049 (propagated-inputs
3050 (list python-certifi
3051 python-pylsqpack
3052 python-pyopenssl
3053 python-service-identity))
3054 (home-page "https://github.com/aiortc/aioquic")
3055 (synopsis "QUIC and HTTP3 implementation in Python")
3056 (description
3057 "@code{aioquic} is a library for the QUIC network protocol in Python.
3058It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
3059 (license license:bsd-3)))
3060
3061(define-public python-aiorpcx
3062 (package
3063 (name "python-aiorpcx")
3064 (version "0.25.0")
3065 (source
3066 (origin
3067 (method git-fetch)
3068 ;; PyPI misses the util.py file used for tests.
3069 (uri (git-reference
3070 (url "https://github.com/kyuupichan/aiorpcX")
3071 (commit version)))
3072 (file-name (git-file-name name version))
3073 (sha256
3074 (base32
3075 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
3076 (build-system pyproject-build-system)
3077 (arguments
3078 (list
3079 #:test-flags
3080 ;; This test opens a remote connection.
3081 #~(list "-k" "not test_create_connection_resolve_good")))
3082 (native-inputs (list python-pytest
3083 python-pytest-asyncio-0.26
3084 python-setuptools))
3085 (propagated-inputs
3086 (list python-attrs python-websockets))
3087 (home-page "https://github.com/kyuupichan/aiorpcX")
3088 (synopsis "Generic asyncio RPC implementation")
3089 (description
3090 "The aiorpcX library is a generic asyncio implementation of RPC suitable
3091for an application that is a client, server or both.
3092
3093The package includes a module with full coverage of JSON RPC versions 1.0 and
30942.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
3095comes with a SOCKS proxy client.")
3096 (license (list license:expat license:bsd-2))))
3097
3098(define-public python-aiostream
3099 (package
3100 (name "python-aiostream")
3101 (version "0.7.0")
3102 (source
3103 (origin
3104 (method git-fetch) ;no tests in PyPI archive
3105 (uri (git-reference
3106 (url "https://github.com/vxgmichel/aiostream")
3107 (commit (string-append "v" version))))
3108 (file-name (git-file-name name version))
3109 (sha256
3110 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
3111 (build-system pyproject-build-system)
3112 (native-inputs
3113 (list python-pytest python-pytest-asyncio python-setuptools))
3114 (propagated-inputs
3115 (list python-typing-extensions))
3116 (home-page "https://github.com/vxgmichel/aiostream")
3117 (synopsis "Generator-based operators for asynchronous iteration")
3118 (description "@code{aiostream} provides a collection of stream operators that can
3119be combined to create asynchronous pipelines of operations. It can be seen as an
3120asynchronous version of @code{itertools}, although some aspects are slightly
3121different. All the provided operators return a unified interface called a stream. A
3122stream is an enhanced asynchronous iterable.")
3123 (license license:gpl3)))
3124
3125(define-public python-asgiref
3126 (package
3127 (name "python-asgiref")
3128 (version "3.8.1")
3129 (source (origin
3130 (method url-fetch)
3131 (uri (pypi-uri "asgiref" version))
3132 (sha256
3133 (base32 "146mhkn3zp2bqf7j6r3chdlvfzgs5x1lrnqahsllgjdyl20bshy3"))))
3134 (build-system pyproject-build-system)
3135 (native-inputs
3136 (list python-pytest
3137 python-pytest-asyncio
3138 python-setuptools
3139 python-wheel))
3140 (home-page "https://github.com/django/asgiref/")
3141 (synopsis "ASGI specs, helper code, and adapters")
3142 (description
3143 "ASGI is a standard for Python asynchronous web apps and servers to
3144communicate with each other, and positioned as an asynchronous successor to
3145WSGI. This package includes libraries for implementing ASGI servers.")
3146 (license license:bsd-3)))
3147
3148(define-public python-asgi-csrf
3149 (package
3150 (name "python-asgi-csrf")
3151 (version "0.11")
3152 (source (origin
3153 (method git-fetch) ;for tests
3154 (uri (git-reference
3155 (url "https://github.com/simonw/asgi-csrf")
3156 (commit version)))
3157 (file-name (git-file-name name version))
3158 (sha256
3159 (base32
3160 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))))
3161 (build-system pyproject-build-system)
3162 (propagated-inputs (list python-itsdangerous python-multipart))
3163 (native-inputs (list python-asgi-lifespan
3164 python-httpx
3165 python-pytest
3166 python-pytest-asyncio
3167 python-starlette
3168 python-setuptools
3169 python-wheel))
3170 (home-page "https://github.com/simonw/asgi-csrf")
3171 (synopsis "ASGI middleware for protecting against CSRF attacks")
3172 (description "This Asynchronous Server Gateway Interface (ASGI)
3173middleware protects against Cross-site request forgery (CSRF) attacks.
3174It implements the Double Submit Cookie pattern, where a cookie is set
3175that is then compared to a @code{csrftoken} hidden form field or a
3176@code{x-csrftoken} HTTP header.")
3177 (license license:asl2.0)))
3178
3179(define-public python-asgi-lifespan
3180 (package
3181 (name "python-asgi-lifespan")
3182 (version "2.1.0")
3183 (source (origin
3184 (method git-fetch) ;for tests
3185 (uri (git-reference
3186 (url "https://github.com/florimondmanca/asgi-lifespan")
3187 (commit version)))
3188 (file-name (git-file-name name version))
3189 (sha256
3190 (base32
3191 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
3192 (build-system pyproject-build-system)
3193 (arguments
3194 (list
3195 #:test-flags
3196 '(list "-k"
3197 (string-append
3198 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
3199 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
3200 " or test_lifespan_manager[trio-None-BodyFailed-None]"
3201 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
3202 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
3203 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
3204 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
3205 " or test_lifespan_timeout[trio-slow_shutdown]"
3206 " or test_lifespan_not_supported[trio-http_only]"
3207 " or test_lifespan_not_supported[trio-http_no_assert]"
3208 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
3209 ")"))
3210 #:phases
3211 '(modify-phases %standard-phases
3212 (add-after 'unpack 'compatibility
3213 (lambda _
3214 ;; httpx version 0.28.0 removed the "app" shortcut.
3215 (substitute* "tests/test_manager.py"
3216 (("app=manager.app")
3217 "transport=httpx.ASGITransport(manager.app)")))))))
3218 (native-inputs (list python-httpx
3219 python-pytest
3220 python-pytest-asyncio
3221 python-pytest-trio
3222 python-starlette
3223 python-setuptools
3224 python-wheel))
3225 (propagated-inputs (list python-sniffio))
3226 (home-page "https://github.com/florimondmanca/asgi-lifespan")
3227 (synopsis "Programmatic startup/shutdown of ASGI apps")
3228 (description "Programmatically send startup/shutdown lifespan events
3229into Asynchronous Server Gateway Interface (ASGI) applications. When
3230used in combination with an ASGI-capable HTTP client such as HTTPX, this
3231allows mocking or testing ASGI applications without having to spin up an
3232ASGI server.")
3233 (license license:expat)))
3234
3235(define-public python-a2wsgi
3236 (package
3237 (name "python-a2wsgi")
3238 (version "1.10.7")
3239 (source (origin
3240 (method url-fetch)
3241 (uri (pypi-uri "a2wsgi" version))
3242 (sha256
3243 (base32
3244 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
3245 (build-system pyproject-build-system)
3246 (arguments
3247 (list
3248 #:test-flags
3249 #~(list "-k" (string-join
3250 (list "not test_starlette_stream_response"
3251 "test_starlette_base_http_middleware"
3252 "test_baize_stream_response"
3253 ;; Fails because of harmless whitespace differences.
3254 "test_wsgi_post")
3255 " and not "))
3256 #:build-backend "pdm.backend"))
3257 (native-inputs
3258 (list python-pdm-backend
3259 python-pytest
3260 ;; python-baize ; not packed yet
3261 python-httpx-bootstrap
3262 ;; Cycle: python-a2wsgi->python-uvicorn->
3263 ;; python-httpx->python-starlette->python-a2wsgi
3264 ;; python-starlette
3265 python-pytest-asyncio))
3266 (home-page "https://github.com/abersheeran/a2wsgi")
3267 (synopsis "Convert WSGI to ASGI or vice versa")
3268 (description
3269 "This program converts a WSGI program to an ASGI program or the other
3270way around. It depends only on the Python standard library.")
3271 (license license:asl2.0)))
3272
3273(define-public python-httpauth
3274 (package
3275 (name "python-httpauth")
3276 (version "0.4.1")
3277 (source (origin
3278 (method url-fetch)
3279 (uri (pypi-uri "httpauth" version))
3280 (sha256
3281 (base32
3282 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
3283 (build-system pyproject-build-system)
3284 (native-inputs (list python-pytest python-setuptools python-wheel))
3285 (home-page "https://github.com/jonashaag/httpauth")
3286 (synopsis "WSGI HTTP Digest Authentication middleware")
3287 (description "@code{python-httpauth} is WSGI middleware that secures some/all
3288routes using HTTP Digest Authentication.")
3289 (license license:bsd-2)))
3290
3291(define-public python-css-html-js-minify
3292 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
3293 (revision "0"))
3294 (package
3295 (name "python-css-html-js-minify")
3296 (version (git-version "2.5.5" revision commit))
3297 (source
3298 (origin
3299 (method git-fetch)
3300 (uri (git-reference
3301 (url "https://github.com/juancarlospaco/css-html-js-minify")
3302 (commit commit)))
3303 (file-name (git-file-name name version))
3304 (sha256
3305 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
3306 (build-system pyproject-build-system)
3307 (arguments
3308 (list
3309 #:phases
3310 #~(modify-phases %standard-phases
3311 (add-after 'unpack 'relax-requirements
3312 (lambda _
3313 (substitute* "setup.cfg"
3314 (("^tests_require.*") "")))))))
3315 (native-inputs (list python-pytest python-setuptools))
3316 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
3317 (synopsis "CSS/HTML/JS minifier")
3318 (description
3319 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
3320 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
3321 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
3322 ;; looks like the user can choose a license.
3323 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
3324
3325(define-public python-aws-sam-translator
3326 (package
3327 (name "python-aws-sam-translator")
3328 (version "1.107.0")
3329 (source
3330 (origin
3331 (method git-fetch) ; no tests in PyPI release
3332 (uri (git-reference
3333 (url "https://github.com/aws/serverless-application-model")
3334 (commit (string-append "v" version))))
3335 (file-name (git-file-name name version))
3336 (sha256
3337 (base32 "0bx9ha9k6zx6gl1hsgm6cpq4xrfn604v2g1d5dh2d5zq0463gwfq"))))
3338 (build-system pyproject-build-system)
3339 (arguments
3340 (list
3341 #:test-flags
3342 #~(list "--numprocesses" (number->string (parallel-job-count))
3343 "--ignore=tests/bin/test_public_interface.py"
3344 "tests")
3345 #:phases
3346 #~(modify-phases %standard-phases
3347 (add-before 'check 'pre-check
3348 (lambda _
3349 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
3350 (native-inputs
3351 (list python-pytest
3352 python-pytest-rerunfailures
3353 python-pytest-xdist
3354 python-parameterized
3355 python-pyyaml
3356 python-setuptools))
3357 (propagated-inputs
3358 (list python-boto3
3359 python-jsonschema
3360 python-pydantic
3361 python-typing-extensions))
3362 (home-page "https://github.com/aws/serverless-application-model")
3363 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
3364 (description
3365 "AWS SAM Translator is a library that transform @dfn{Serverless Application
3366Model} (SAM) templates into AWS CloudFormation templates.")
3367 (license license:asl2.0)))
3368
3369(define-public python-aws-xray-sdk
3370 (package
3371 (name "python-aws-xray-sdk")
3372 (version "2.14.0")
3373 (home-page "https://github.com/aws/aws-xray-sdk-python")
3374 (source (origin
3375 (method git-fetch)
3376 (uri (git-reference (url home-page) (commit version)))
3377 (file-name (git-file-name name version))
3378 (sha256
3379 (base32
3380 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
3381 (build-system pyproject-build-system)
3382 (arguments
3383 (list
3384 #:test-flags
3385 '(list ;; Tries to connect to external network resources
3386 "--ignore=tests/ext/aiohttp/test_client.py"
3387 "--ignore=tests/ext/httplib/test_httplib.py"
3388 "--ignore=tests/ext/httpx"
3389 "--ignore=tests/ext/requests/test_requests.py"
3390 ;; TODO: How to configure Django for these tests?
3391 "--ignore=tests/ext/django"
3392 ;; These tests require packages not yet in Guix.
3393 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
3394 "--ignore=tests/ext/aiohttp/test_middleware.py"
3395 "--ignore=tests/ext/pg8000/test_pg8000.py"
3396 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
3397 "--ignore=tests/ext/pymysql/test_pymysql.py"
3398 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
3399 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
3400 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
3401 "--ignore=tests/test_async_recorder.py"
3402 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
3403 "--ignore-glob=tests/ext/sqlalchemy*"
3404 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
3405 ;; FIXME: Why is this failing?
3406 "--ignore=tests/test_patcher.py"
3407 "--ignore=tests/test_lambda_context.py")
3408 #:phases
3409 '(modify-phases %standard-phases
3410 (add-before 'check 'pre-check
3411 (lambda _
3412 ;; Allow "import tests.utils" to work as expected.
3413 (setenv "PYTHONPATH" (getcwd)))))))
3414 (native-inputs
3415 (list ;; These are required for the test suite.
3416 python-aiohttp
3417 python-bottle
3418 python-flask
3419 python-flask-sqlalchemy
3420 python-httpx
3421 python-mock
3422 python-pymysql
3423 python-pytest
3424 python-pytest-asyncio-0.26
3425 python-pytest-benchmark
3426 python-setuptools
3427 python-sqlalchemy
3428 python-webtest))
3429 (propagated-inputs
3430 (list python-botocore
3431 python-jsonpickle
3432 python-requests
3433 python-wrapt))
3434 (synopsis "Profile applications on AWS X-Ray")
3435 (description
3436 "The AWS X-Ray SDK for Python enables Python developers to record and
3437emit information from within their applications to the AWS X-Ray service.")
3438 (license license:asl2.0)))
3439
3440(define-public python-publicsuffixlist
3441 (package
3442 (name "python-publicsuffixlist")
3443 (version "1.0.2.20250202")
3444 (source
3445 (origin
3446 (method url-fetch)
3447 (uri (pypi-uri "publicsuffixlist" version))
3448 (sha256
3449 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
3450 (build-system pyproject-build-system)
3451 (arguments (list #:test-backend #~'unittest))
3452 (native-inputs (list python-setuptools))
3453 (home-page "https://github.com/ko-zu/psl")
3454 (synopsis "Public suffix list for Python")
3455 (description
3456 "This package provides an implementation of
3457@url{https://publicsuffix.org/, Public Suffix List } as Python library.
3458
3459Features:
3460@itemize
3461@item supports IDN (unicode and punycoded)
3462@item shipped with built-in PSL and an updater script
3463@item written in Pure Python with no library dependencies
3464@end itemize")
3465 (license license:mpl2.0)))
3466
3467(define-public python-pycognito
3468 (package
3469 (name "python-pycognito")
3470 (version "2024.5.1")
3471 (source
3472 (origin
3473 (method url-fetch)
3474 (uri (pypi-uri "pycognito" version))
3475 (sha256
3476 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
3477 (build-system pyproject-build-system)
3478 (arguments
3479 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
3480 (list #:tests? #f))
3481 (native-inputs
3482 (list python-setuptools))
3483 (propagated-inputs
3484 (list python-boto3
3485 python-envs
3486 python-pyjwt
3487 python-requests))
3488 (home-page "https://github.com/pvizeli/pycognito")
3489 (synopsis "Python library for using AWS Cognito")
3490 (description
3491 "This package provides a Python class to integrate Boto3's Cognito
3492client so it is easy to login users, with @acronym{Secure Remote Password,
3493SRP} support.")
3494 (license license:asl2.0)))
3495
3496(define-public python-python3-saml
3497 (package
3498 (name "python-python3-saml")
3499 (version "1.16.0")
3500 (source
3501 (origin
3502 (method git-fetch)
3503 (uri (git-reference
3504 (url "https://github.com/SAML-Toolkits/python3-saml")
3505 (commit (string-append "v" version))))
3506 (file-name (git-file-name name version))
3507 (sha256
3508 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
3509 (build-system pyproject-build-system)
3510 (arguments
3511 (list
3512 ;; 214 tests pass, 50 fail; many fail because of required Internet
3513 ;; access or because of assumptions about the location of test files.
3514 #:tests? #false))
3515 (native-inputs
3516 (list python-freezegun
3517 python-poetry-core))
3518 (inputs
3519 (list xmlsec-openssl))
3520 (propagated-inputs
3521 (list python-isodate
3522 python-lxml
3523 python-xmlsec))
3524 (home-page "https://github.com/SAML-Toolkits/python3-saml")
3525 (synopsis "Saml Python toolkit")
3526 (description
3527 "The SAML Python Toolkit lets you add SAML support to your Python
3528software.")
3529 (license license:expat)))
3530
3531(define-public python-ovh
3532 (package
3533 (name "python-ovh")
3534 (version "1.1.0")
3535 (source (origin
3536 (method url-fetch)
3537 (uri (pypi-uri "ovh" version))
3538 (sha256
3539 (base32
3540 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
3541 (build-system pyproject-build-system)
3542 (arguments (list #:tests? #f)) ; XXX: tests require networking
3543 (propagated-inputs (list python-requests))
3544 (native-inputs (list python-setuptools))
3545 (home-page "https://api.ovh.com")
3546 (synopsis "Interact with OVHcloud APIs")
3547 (description "This package provides the official module to perform HTTP requests
3548to the OVHcloud APIs.")
3549 (license license:bsd-3)))
3550
3551(define-public python-cbor2
3552 (package
3553 (name "python-cbor2")
3554 (version "5.4.2.post1")
3555 (source
3556 (origin
3557 (method url-fetch)
3558 (uri (pypi-uri "cbor2" version))
3559 (sha256
3560 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
3561 (build-system pyproject-build-system)
3562 (native-inputs
3563 (list python-pytest python-setuptools python-setuptools-scm))
3564 (home-page "https://github.com/agronholm/cbor2")
3565 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
3566 (description "This Python library provides encoding and decoding for the
3567Concise Binary Object
3568Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
35698949}) serialization format. The specification is fully compatible with the
3570original RFC 7049. Among its features are:
3571@itemize
3572@item Simple API like the @code{json} or @code{pickle} modules.
3573@item Support many CBOR tags with stdlib objects.
3574@item Generic tag decoding.
3575@item Shared value references including cyclic references.
3576@item String references compact encoding with repeated strings replaced with
3577indices.
3578@item Optional C module backend tested on big- and little-endian architectures.
3579@item Extensible tagged value handling using tag_hook and object_hook on
3580decode and default on encode.
3581@end itemize")
3582 (license license:expat)))
3583
3584(define-public python-cfn-lint
3585 (package
3586 (name "python-cfn-lint")
3587 (version "1.38.1")
3588 (source
3589 (origin
3590 (method git-fetch)
3591 (uri (git-reference
3592 (url "https://github.com/aws-cloudformation/cfn-lint")
3593 (commit (string-append "v" version))))
3594 (file-name (git-file-name name version))
3595 (sha256
3596 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
3597 (build-system pyproject-build-system)
3598 (arguments
3599 (list
3600 ;; tests: 2136 passed, 11 deselected, 1 warning
3601 #:test-flags
3602 #~(list "--ignore=test/integration/"
3603 "-k" (string-join
3604 ;; Tests failing on doctest or comparing diff.
3605 (list "not test_build_graph"
3606 "test_good_template"
3607 "test_success_run"
3608 "test_update_docs"
3609 ;; ImportError: Missing optional dependencies sarif
3610 "test_sarif_formatter")
3611 " and not "))
3612 #:phases
3613 #~(modify-phases %standard-phases
3614 (add-after 'unpack 'remove-deprecated
3615 (lambda _
3616 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
3617 (("deprecated\": \"2025")
3618 "deprecated\": \"2125")))))))
3619 (native-inputs
3620 (list python-defusedxml
3621 python-pydot
3622 python-pytest
3623 python-setuptools))
3624 (propagated-inputs
3625 (list python-aws-sam-translator
3626 python-jsonpatch
3627 python-networkx
3628 python-pyyaml
3629 python-regex
3630 python-sympy
3631 python-typing-extensions
3632 ;; [optional]
3633 python-junit-xml))
3634 (home-page "https://github.com/aws-cloudformation/cfn-lint")
3635 (synopsis "Validate CloudFormation templates")
3636 (description
3637 "This package lets you validate CloudFormation YAML/JSON templates against
3638the CloudFormation spec and additional checks. Includes checking valid values
3639for resource properties and best practices.")
3640 (license license:expat)))
3641
3642(define-public python-pyzabbix
3643 (package
3644 (name "python-pyzabbix")
3645 (version "1.3.1")
3646 (source
3647 (origin
3648 (method git-fetch)
3649 (uri (git-reference
3650 (url "https://github.com/lukecyca/pyzabbix")
3651 (commit version)))
3652 (file-name (git-file-name name version))
3653 (sha256
3654 (base32 "1dbs3bz1mjlvlg46ikhg5j7agwni61ljlpiziknklv95yp29n86v"))))
3655 (build-system pyproject-build-system)
3656 (arguments
3657 (list #:test-flags #~(list "tests")))
3658 (native-inputs
3659 (list python-pytest
3660 python-requests-mock
3661 python-setuptools))
3662 (propagated-inputs
3663 (list python-packaging
3664 python-requests))
3665 (home-page "https://github.com/lukecyca/pyzabbix")
3666 (synopsis "Python interface to the Zabbix API")
3667 (description
3668 "@code{pyzabbix} is a Python module for working with the Zabbix API.")
3669 (license license:lgpl2.1+)))
3670
3671(define-public python-requests-cache
3672 (package
3673 (name "python-requests-cache")
3674 (version "1.2.1")
3675 (source
3676 (origin
3677 (method url-fetch)
3678 (uri (pypi-uri "requests_cache" version))
3679 (sha256
3680 (base32 "1l8i4l2pd26gbrlcdb5z056wvsqfr3vvbyqq2f8x1f65zn3ckav8"))))
3681 (build-system pyproject-build-system)
3682 (arguments
3683 (list
3684 #:test-flags
3685 #~(list "--numprocesses" (number->string (parallel-job-count))
3686 ;; These tests require access to external services, e.g. MongoDB
3687 ;; and Redis.
3688 "--ignore=tests/integration"
3689 ;; AttributeError: <class 'requests.adapters.HTTPAdapter'> does
3690 ;; not have the attribute 'get_connection_with_tls_context'
3691 "-k" "not test_mock_session")
3692 #:phases
3693 #~(modify-phases %standard-phases
3694 (add-before 'check 'pre-check
3695 (lambda _
3696 ;; PermissionError: [Errno 13] Permission denied:
3697 ;; '/homeless-shelter'
3698 (setenv "HOME" "/tmp"))))))
3699 (native-inputs
3700 (list python-poetry-core
3701 python-pytest
3702 python-pytest-rerunfailures
3703 python-pytest-xdist
3704 python-requests-mock
3705 python-responses
3706 python-rich
3707 python-tenacity
3708 python-time-machine
3709 python-timeout-decorator))
3710 (propagated-inputs
3711 (list python-attrs
3712 python-boto3
3713 python-bson
3714 python-cattrs
3715 python-itsdangerous
3716 python-orjson
3717 python-platformdirs
3718 python-pymongo
3719 python-pyyaml
3720 python-redis
3721 python-requests
3722 python-ujson
3723 python-url-normalize
3724 python-urllib3))
3725 (home-page "https://github.com/requests-cache/requests-cache")
3726 (synopsis "Persistent HTTP cache for Python requests")
3727 (description
3728 "This package provides a drop-in replacement for @code{requests.Session}
3729with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
3730responses as planin JSON/YAML file or save responses as plain JSON/YAML
3731files.")
3732 (license license:bsd-2)))
3733
3734(define-public python-requests-futures
3735 (package
3736 (name "python-requests-futures")
3737 (version "1.0.2")
3738 (source
3739 (origin
3740 (method url-fetch)
3741 (uri (pypi-uri "requests_futures" version))
3742 (sha256
3743 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
3744 (build-system pyproject-build-system)
3745 (native-inputs
3746 (list python-greenlet
3747 python-pytest
3748 python-pytest-httpbin
3749 python-setuptools
3750 python-werkzeug))
3751 (propagated-inputs (list python-requests))
3752 (home-page "https://github.com/ross/requests-futures")
3753 (synopsis "Asynchronous Python HTTP for Humans")
3754 (description
3755 "This package provides and add-on the Python Requests HTTP library to run
3756code asynchronously.")
3757 (license license:asl2.0)))
3758
3759(define-public python-requests-unixsocket
3760 (package
3761 (name "python-requests-unixsocket")
3762 (version "0.4.1")
3763 (source
3764 (origin
3765 (method git-fetch)
3766 (uri (git-reference
3767 (url "https://github.com/msabramo/requests-unixsocket")
3768 (commit (string-append "v" version))))
3769 (file-name (git-file-name name version))
3770 (sha256
3771 (base32 "1f0pi31xqzm3cdag4s4gpdj36x169jwc8ibqvcwqz6h9c0pklf3n"))))
3772 (build-system pyproject-build-system)
3773 (native-inputs
3774 (list python-pytest
3775 python-setuptools
3776 python-setuptools-scm
3777 python-waitress))
3778 (propagated-inputs
3779 (list python-requests))
3780 (home-page "https://github.com/msabramo/requests-unixsocket")
3781 (synopsis "Use requests to talk HTTP via a UNIX domain socket")
3782 (description
3783 "This package provides an extension to @code{requests} which let it talk
3784HTTP via a UNIX domain socket.")
3785 (license license:asl2.0)))
3786
3787(define-public python-s3path
3788 (package
3789 (name "python-s3path")
3790 (version "0.6.4")
3791 (source
3792 (origin
3793 (method url-fetch)
3794 (uri (pypi-uri "s3path" version))
3795 (sha256
3796 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
3797 (build-system pyproject-build-system)
3798 (arguments
3799 (list
3800 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
3801 #:tests? #f))
3802 (native-inputs
3803 (list python-setuptools
3804 python-wheel))
3805 (propagated-inputs
3806 (list python-boto3
3807 python-smart-open))
3808 (home-page "https://github.com/liormizr/s3path")
3809 (synopsis "Pathlib extension for AWS S3 Service")
3810 (description
3811 "S3Path provide a Python convenient File-System/Path like interface for
3812AWS S3 Service using boto3 S3 resource as a driver.")
3813 (license license:asl2.0)))
3814
3815(define-public python-falcon
3816 (package
3817 (name "python-falcon")
3818 (version "4.0.2")
3819 (source
3820 (origin
3821 ;; Use git, as there are some test files missing from the PyPI release,
3822 ;; such as 'examples' directory.
3823 (method git-fetch)
3824 (uri (git-reference
3825 (url "https://github.com/falconry/falcon")
3826 (commit version)))
3827 (file-name (git-file-name name version))
3828 (sha256
3829 (base32
3830 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
3831 (build-system pyproject-build-system)
3832 (arguments
3833 (list
3834 #:test-flags
3835 '(list "-k" "not slow"
3836 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
3837 #:phases
3838 '(modify-phases %standard-phases
3839 (add-before 'check 'pre-check
3840 (lambda _
3841 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
3842 (setenv "FALCON_TESTING_SESSION" "Y")
3843 (setenv "PYTHONASYNCIODEBUG" "1")
3844 (setenv "HOME" "/tmp"))))))
3845 (propagated-inputs
3846 (list python-mimeparse))
3847 (native-inputs
3848 (list python-aiofiles
3849 python-cbor2
3850 python-cython ;for faster binaries
3851 python-fakeredis
3852 python-httpx
3853 python-mujson
3854 python-msgpack
3855 python-orjson
3856 python-pecan
3857 python-pillow
3858 python-pytest
3859 python-pytest-asyncio
3860 python-pyyaml
3861 python-rapidjson
3862 python-requests
3863 python-setuptools
3864 python-testtools
3865 python-ujson
3866 python-websockets
3867 python-wheel))
3868 (home-page "https://falconframework.org")
3869 (synopsis "Web framework for building APIs and application backends")
3870 (description "Falcon is a web API framework for building microservices,
3871application backends and higher-level frameworks. Among its features are:
3872@itemize
3873@item Optimized and extensible code base
3874@item Routing via URI templates and REST-inspired resource
3875classes
3876@item Access to headers and bodies through request and response
3877classes
3878@item Request processing via middleware components and hooks
3879@item Idiomatic HTTP error responses
3880@item Straightforward exception handling
3881@item Unit testing support through WSGI helpers and mocks
3882@item Compatible with both CPython and PyPy
3883@item Cython support for better performance when used with CPython
3884@end itemize")
3885 (license license:asl2.0)))
3886
3887(define-public python-falcon-cors
3888 (package
3889 (name "python-falcon-cors")
3890 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
3891 (revision . "0")))
3892 (version (git-version "1.1.7"
3893 (assoc-ref properties 'revision)
3894 (assoc-ref properties 'commit)))
3895 (source
3896 (origin
3897 (method git-fetch)
3898 (uri (git-reference
3899 (url "https://github.com/lwcolton/falcon-cors")
3900 (commit (assoc-ref properties 'commit))))
3901 (file-name (git-file-name name version))
3902 (sha256
3903 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
3904 (build-system pyproject-build-system)
3905 (arguments
3906 (list
3907 ;; XXX: The last commit's tests are incompatible with the more recent
3908 ;; version of python-falcon.
3909 #:tests? #f))
3910 (native-inputs
3911 (list python-falcon python-mock python-pynose python-setuptools))
3912 (home-page "https://github.com/lwcolton/falcon-cors")
3913 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
3914 (description
3915 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
3916support for Falcon. It allows applying a specially crafted CORS object to the
3917incoming requests, enabling the ability to serve resources over a different
3918origin than that of the web application.")
3919 (license license:asl2.0)))
3920
3921(define-public python-furl
3922 (package
3923 (name "python-furl")
3924 (version "2.1.4")
3925 (source
3926 (origin
3927 (method url-fetch)
3928 (uri (pypi-uri "furl" version))
3929 (sha256
3930 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
3931 (build-system pyproject-build-system)
3932 (arguments
3933 (list #:test-flags
3934 #~(list "-k" (string-append "not test_hosts"
3935 " and not test_netloc"
3936 " and not test_odd_urls"))))
3937 (propagated-inputs
3938 (list python-orderedmultidict python-six))
3939 (native-inputs
3940 (list python-pytest python-setuptools python-wheel))
3941 (home-page "https://github.com/gruns/furl")
3942 (synopsis "URL manipulation in Python")
3943 (description "Furl provides an easy-to-use alternative to the
3944@code{urllib} and @code{urlparse} modules for manipulating URLs.")
3945 (license license:unlicense)))
3946
3947(define-public python-httplib2
3948 (package
3949 (name "python-httplib2")
3950 (version "0.31.2")
3951 (source
3952 (origin
3953 (method git-fetch)
3954 (uri (git-reference
3955 (url "https://github.com/httplib2/httplib2")
3956 (commit (string-append "v" version))))
3957 (file-name (git-file-name name version))
3958 (sha256
3959 (base32
3960 "0wdnf4rhw9ar8b15lzvif11ibnnpqkfif3alkhkfywy3ikk8nrxb"))))
3961 (build-system pyproject-build-system)
3962 (arguments
3963 (list
3964 #:phases
3965 #~(modify-phases %standard-phases
3966 (add-after 'unpack 'adjust-test-requirements
3967 (lambda _
3968 (substitute* "requirements-test.txt"
3969 (("==") ">=")))))))
3970 (propagated-inputs
3971 (list python-pyparsing
3972 python-pysocks))
3973 (native-inputs
3974 (list python-cryptography
3975 python-mock
3976 python-pytest
3977 python-pytest-randomly
3978 python-pytest-timeout
3979 python-setuptools))
3980 (home-page "https://github.com/httplib2/httplib2")
3981 (synopsis "Comprehensive HTTP client library")
3982 (description
3983 "A comprehensive HTTP client library supporting many features left out of
3984other HTTP libraries.")
3985 (license license:expat)))
3986
3987(define-public python-cheroot
3988 (package
3989 (name "python-cheroot")
3990 (version "11.1.2")
3991 (source
3992 (origin
3993 (method git-fetch)
3994 (uri (git-reference
3995 (url "https://github.com/cherrypy/cheroot")
3996 (commit (string-append "v" version))))
3997 (file-name (git-file-name name version))
3998 (sha256
3999 (base32 "02rhci01m5fcn8mqpvq3c35rs4n28gxlfvfw2if2f85rgwrji8y8"))))
4000 (build-system pyproject-build-system)
4001 (arguments
4002 (list
4003 #:phases
4004 #~(modify-phases %standard-phases
4005 (add-after 'unpack 'fix-pytest-config
4006 (lambda _
4007 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
4008 (delete-file "pytest.ini"))))))
4009 (native-inputs
4010 (list python-portend
4011 python-pyopenssl
4012 python-pypytools
4013 python-pytest
4014 python-pytest-mock
4015 python-requests
4016 python-requests-toolbelt
4017 python-requests-unixsocket2
4018 python-setuptools
4019 python-setuptools-scm
4020 python-trustme))
4021 (propagated-inputs
4022 (list python-jaraco-functools
4023 python-more-itertools))
4024 (home-page "https://cheroot.cherrypy.dev")
4025 (synopsis "Highly-optimized, pure-python HTTP server")
4026 (description
4027 "Cheroot is a high-performance, pure-Python HTTP server.")
4028 (license license:bsd-3)))
4029
4030(define-public python-cherrypy
4031 (package
4032 (name "python-cherrypy")
4033 (properties '((commit . "1f75bc9eed8e0e385f64f368bd69f58d96fb8c2b")
4034 (revision . "0")))
4035 (version (git-version "18.10.0"
4036 (assoc-ref properties 'revision)
4037 (assoc-ref properties 'commit)))
4038 (source
4039 (origin
4040 (method git-fetch)
4041 (uri (git-reference
4042 (url "https://github.com/cherrypy/cherrypy")
4043 (commit (assoc-ref properties 'commit))))
4044 (file-name (git-file-name name version))
4045 (sha256
4046 (base32 "1l01a4sbfm42s5xp6ngphgqf0yb65ksqbsb27kznvybblyaxfa9p"))))
4047 (build-system pyproject-build-system)
4048 (arguments
4049 (list
4050 #:test-flags
4051 #~(map
4052 (lambda (test)
4053 (string-append "--deselect=cherrypy/test/" test))
4054 (list
4055 ;; Requires bumping python-flaky.
4056 "test_bus.py::test_wait_publishes_periodically"
4057 "test_bus.py::test_block"
4058 "test_bus.py::test_start_with_callback"
4059 "test_refleaks.py::ReferenceTests::test_threadlocal_garbage"
4060 "test_session.py::SessionTest::test_0_Session"
4061 "test_session.py::SessionTest::test_2_File_Concurrency"
4062 ;; assert b'RamSession' == b'FileSession' or FileNotFoundError
4063 "test_session.py::SessionTest::test_3_Redirect"
4064 "test_session.py::SessionTest::test_4_File_deletion"))
4065 #:phases
4066 #~(modify-phases %standard-phases
4067 (add-after 'unpack 'fix-pytest-config
4068 (lambda _
4069 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
4070 (delete-file "pytest.ini")))
4071 (add-after 'unpack 'patch-pyproject
4072 (lambda _
4073 (substitute* "pyproject.toml"
4074 (("\"cherrypy.scaffold\",")
4075 (string-join
4076 (list "\"cherrypy.scaffold\""
4077 "\"cherrypy._private_api\""
4078 "\"cherrypy._private_api.compat\",")
4079 ",\n "))))))))
4080 (propagated-inputs
4081 (list python-cheroot
4082 python-filelock
4083 python-jaraco-collections
4084 python-more-itertools
4085 python-portend
4086 python-zc-lockfile))
4087 (native-inputs
4088 (list python-flaky
4089 python-objgraph
4090 python-path
4091 python-pytest
4092 python-pytest-forked
4093 python-pytest-services
4094 python-pytest-sugar
4095 python-requests-toolbelt
4096 python-setuptools
4097 python-setuptools-scm))
4098 (home-page "https://www.cherrypy.dev")
4099 (synopsis "Object-Oriented HTTP framework")
4100 (description
4101 "CherryPy is a pythonic, object-oriented web framework. It helps in
4102building web applications in the same way any other object-oriented Python
4103program would be built.")
4104 (license license:bsd-3)))
4105
4106(define-public python-parfive
4107 (package
4108 (name "python-parfive")
4109 (version "2.3.1")
4110 (source
4111 (origin
4112 (method git-fetch)
4113 (uri (git-reference
4114 (url "https://github.com/Cadair/parfive")
4115 (commit (string-append "v" version))))
4116 (file-name (git-file-name name version))
4117 (sha256
4118 (base32 "09kkh7kp9qy8m26zk6p7zc84yrc81pjgsi594kaa1v1n83mprl4b"))))
4119 (build-system pyproject-build-system)
4120 (arguments
4121 (list
4122 #:test-flags
4123 ;; Disable tests requiring network access.
4124 #~(list "-k" (string-join
4125 (list "not test_ftp"
4126 "test_ftp_http"
4127 "test_ftp_pasv_command"
4128 "test_problematic_http_urls")
4129 " and not "))))
4130 (native-inputs
4131 (list python-aiofiles
4132 python-pytest
4133 python-pytest-asyncio
4134 python-pytest-localserver
4135 python-pytest-socket
4136 python-setuptools
4137 python-setuptools-scm))
4138 (propagated-inputs
4139 (list python-aiohttp
4140 python-tqdm
4141 ;; [optional]
4142 python-aioftp))
4143 (home-page "https://parfive.readthedocs.io/")
4144 (synopsis "HTTP and FTP parallel file downloader")
4145 (description
4146 "This package provides CLI tool and Python library @code{parallel} file
4147downloader using asyncio. parfive can handle downloading multiple files in
4148parallel as well as downloading each file in a number of chunks.
4149
4150asciicast demo of parfive parfive works by creating a downloader object,
4151appending files to it and then running the download. parfive has a synchronous
4152API, but uses asyncio to parallelise downloading the files.")
4153 (license license:expat)))
4154
4155(define-public python-html2text
4156 (package
4157 (name "python-html2text")
4158 (version "2020.1.16")
4159 (source
4160 (origin
4161 (method url-fetch)
4162 (uri (pypi-uri "html2text" version))
4163 (sha256
4164 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
4165 (build-system pyproject-build-system)
4166 (native-inputs (list python-pytest python-setuptools python-wheel))
4167 (home-page "https://github.com/Alir3z4/html2text")
4168 (synopsis "Convert HTML into plain text")
4169 (description
4170 "html2text takes HTML and converts it into plain ASCII text
4171which is also valid markdown. html2text was originally written by Aaron
4172Swartz.")
4173 (license license:gpl3+)))
4174
4175(define-public python-jose
4176 (package
4177 (name "python-jose")
4178 (version "3.5.0")
4179 (home-page "https://github.com/mpdavis/python-jose")
4180 (source (origin
4181 (method git-fetch)
4182 (uri (git-reference (url home-page) (commit version)))
4183 (file-name (git-file-name name version))
4184 (sha256
4185 (base32
4186 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
4187 (build-system pyproject-build-system)
4188 (native-inputs
4189 (list python-pyasn1 python-pytest python-setuptools))
4190 (propagated-inputs
4191 (list python-cryptography python-ecdsa python-rsa))
4192 (synopsis "JOSE implementation in Python")
4193 (description
4194 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
4195- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
4196JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
4197content using a variety of algorithms.")
4198 (license license:expat)))
4199
4200(define-public python-joserfc
4201 (package
4202 (name "python-joserfc")
4203 (version "1.0.1")
4204 (source
4205 (origin
4206 (method url-fetch)
4207 (uri (pypi-uri "joserfc" version))
4208 (sha256
4209 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
4210 (build-system pyproject-build-system)
4211 (arguments
4212 (list
4213 #:test-flags
4214 ;; No module named 'Crypto'
4215 '(list "--ignore=tests/jwe/test_chacha20.py"
4216 ;; Deprecation warnings are not raised.
4217 "-k" (string-append "not test_guess_bytes_key"
4218 " and not test_guess_callable_key"
4219 " and not test_guess_str_key"))))
4220 (propagated-inputs (list python-cryptography))
4221 (native-inputs (list python-pytest python-setuptools python-wheel))
4222 (home-page "https://github.com/authlib/joserfc")
4223 (synopsis "Python library for JOSE RFCs")
4224 (description
4225 "This package provides a Python library for JOSE RFCs, including JWS,
4226JWE, JWK, JWA, and JWT.")
4227 (license license:bsd-3)))
4228
4229(define-public python-jwcrypto
4230 (package
4231 (name "python-jwcrypto")
4232 (version "1.5.6")
4233 (source
4234 (origin
4235 (method url-fetch)
4236 (uri (pypi-uri "jwcrypto" version))
4237 (sha256
4238 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
4239 (build-system pyproject-build-system)
4240 (native-inputs
4241 (list python-pytest
4242 python-setuptools))
4243 (propagated-inputs
4244 (list python-cryptography
4245 python-typing-extensions))
4246 (home-page "https://github.com/latchset/jwcrypto")
4247 (synopsis "Implementation of JOSE Web standards")
4248 (description
4249 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
4250Encryption} (JOSE) Web Standards.")
4251 (license license:lgpl3+)))
4252
4253(define-public python-pypitoken
4254 (package
4255 (name "python-pypitoken")
4256 (version "7.0.1")
4257 (source
4258 (origin
4259 (method url-fetch)
4260 (uri (pypi-uri "pypitoken" version))
4261 (sha256
4262 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
4263 (build-system pyproject-build-system)
4264 ;; There are no tests.
4265 (arguments (list #:tests? #false))
4266 (propagated-inputs (list python-jsonschema python-pymacaroons
4267 python-typing-extensions))
4268 (native-inputs (list python-poetry-core))
4269 (home-page "https://pypitoken.readthedocs.io/en/latest/")
4270 (synopsis "Manipulate PyPI API tokens")
4271 (description "This package lets you manipulate PyPI API tokens.")
4272 (license license:expat)))
4273
4274(define-public python-pyscss
4275 ;; XXX: no fresh release supporting Python 3.11, use the latest commit, see
4276 ;; <https://github.com/Kronuz/pyScss/issues/428>,
4277 ;; <https://github.com/Kronuz/pyScss/issues/431>.
4278 (let ((commit "73559d047706ccd4593cf6aa092de71f35164723")
4279 (revision "0"))
4280 (package
4281 (name "python-pyscss")
4282 (version (git-version "1.4.0" revision commit))
4283 (source
4284 (origin
4285 (method git-fetch) ; no tests in PyPI release
4286 (uri (git-reference
4287 (url "https://github.com/Kronuz/pyScss")
4288 (commit commit)))
4289 (file-name (git-file-name name version))
4290 (sha256
4291 (base32 "00msypxf5dm57gyfp3jxvjinigi4km84v33w83635pms9li2k3y7"))))
4292 (build-system pyproject-build-system)
4293 (native-inputs
4294 (list python-pytest-8
4295 python-setuptools))
4296 (inputs
4297 (list pcre))
4298 (propagated-inputs
4299 (list python-six)) ;hard dependency in scss/compiler.py
4300 (home-page "https://github.com/Kronuz/pyScss")
4301 (synopsis "Scss compiler for Python")
4302 (description
4303 "@code{pyScss} is a compiler for Sass, a superset language of
4304CSS3 that adds programming capabilities and some other syntactic sugar.")
4305 (license license:expat))))
4306
4307(define-public python-jsonpickle
4308 (package
4309 (name "python-jsonpickle")
4310 (version "4.0.0")
4311 (source (origin
4312 (method url-fetch)
4313 (uri (pypi-uri "jsonpickle" version))
4314 (sha256
4315 (base32
4316 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
4317 (build-system pyproject-build-system)
4318 (arguments
4319 (list
4320 #:test-flags '(list "tests")
4321 #:phases
4322 '(modify-phases %standard-phases
4323 (add-before 'check 'pre-check
4324 (lambda* (#:key inputs #:allow-other-keys)
4325 (setenv "TZ" "UTC")
4326 (setenv "TZDIR"
4327 (search-input-directory inputs "share/zoneinfo")))))))
4328 (native-inputs
4329 (list python-bson
4330 python-ecdsa
4331 python-feedparser
4332 python-pymongo
4333 python-pytest
4334 python-pytest-benchmark
4335 python-pytest-enabler
4336 python-setuptools
4337 python-setuptools-scm
4338 python-simplejson
4339 python-sqlalchemy
4340 python-ujson
4341 python-wheel
4342 tzdata-for-tests))
4343 (home-page "https://jsonpickle.github.io/")
4344 (synopsis "Serialize object graphs into JSON")
4345 (description
4346 "This package provides a Python library for serializing any arbitrary
4347object graph to and from JSON.")
4348 (license license:bsd-3)))
4349
4350(define-public python-mcp
4351 (package
4352 (name "python-mcp")
4353 (version "1.25.0")
4354 (source
4355 (origin
4356 (method url-fetch)
4357 (uri (pypi-uri "mcp" version))
4358 (sha256
4359 (base32 "00k87bl4jvnh7hrmicwb2m715fwccvvlanwf8cnlwdphxdhh6can"))))
4360 (build-system pyproject-build-system)
4361 (arguments
4362 (list
4363 ;; XXX: 186 failed, 648 passed, 94 skipped, 54 errors
4364 ;; A lot of tests fail for unclear reasons.
4365 #:tests? #f))
4366 (propagated-inputs (list python-httpx python-pydantic))
4367 (native-inputs
4368 (list python-hatchling
4369 python-httpx-sse
4370 python-jsonschema
4371 python-pydantic-settings
4372 python-pytest
4373 python-pytest-examples
4374 python-pytest-xdist
4375 python-sse-starlette
4376 python-starlette
4377 python-typer
4378 python-typing-inspection
4379 python-uvicorn))
4380 (home-page "https://modelcontextprotocol.io")
4381 (synopsis "Model Context Protocol SDK")
4382 (description
4383 "This package provides a Python Software Development Kit for the Model
4384Context Protocol (MCP).")
4385 (license license:expat)))
4386
4387(define-public python-mechanicalsoup
4388 (package
4389 (name "python-mechanicalsoup")
4390 (version "1.4.0")
4391 (source
4392 (origin
4393 (method url-fetch)
4394 (uri (pypi-uri "mechanicalsoup" version))
4395 (sha256
4396 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
4397 (build-system pyproject-build-system)
4398 (arguments
4399 (list
4400 #:test-flags
4401 ;; Unclear why test fails.
4402 #~(list "-k" "not test_select_form_associated_elements")
4403 ;; The following dependencies are not directly required, the developer
4404 ;; only pinned versions because of vulnerabilities. They also break
4405 ;; sanity-check because it checks for a python-certifi version which is
4406 ;; more recent than the one available in Guix.
4407 #:phases #~(modify-phases %standard-phases
4408 (add-after 'unpack 'relax-dependencies
4409 (lambda _
4410 (substitute* "requirements.txt"
4411 (("certifi.*") "")
4412 (("urllib3.*") "")))))))
4413 (propagated-inputs
4414 (list python-beautifulsoup4 python-lxml python-requests))
4415 (native-inputs
4416 (list python-pytest
4417 python-pytest-flake8
4418 python-pytest-httpbin
4419 python-pytest-mock
4420 python-requests-mock
4421 python-setuptools
4422 python-wheel))
4423 (home-page "https://mechanicalsoup.readthedocs.io/")
4424 (synopsis "Python library for automating website interaction")
4425 (description
4426 "MechanicalSoup is a Python library for automating interaction with
4427websites. It automatically stores and sends cookies, follows redirects, and can
4428follow links and submit forms. It doesn’t do JavaScript.")
4429 (license license:expat)))
4430
4431(define-public python-hypercorn
4432 (package
4433 (name "python-hypercorn")
4434 (version "0.18.0")
4435 (source
4436 (origin
4437 (method git-fetch)
4438 (uri (git-reference
4439 (url "https://github.com/pgjones/hypercorn")
4440 (commit version)))
4441 (file-name (git-file-name name version))
4442 (sha256
4443 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
4444 (build-system pyproject-build-system)
4445 (propagated-inputs
4446 (list python-aioquic
4447 python-h11
4448 python-h2
4449 python-priority
4450 python-pydata-sphinx-theme
4451 python-sphinxcontrib-mermaid
4452 python-tomli
4453 python-trio
4454 python-typing-extensions
4455 python-uvloop
4456 python-wsproto))
4457 (native-inputs
4458 (list nss-certs-for-test
4459 python-httpx
4460 python-pdm-backend
4461 python-pytest
4462 python-pytest-asyncio
4463 python-pytest-cov
4464 python-pytest-trio))
4465 (home-page "https://github.com/pgjones/hypercorn")
4466 (synopsis "ASGI Server based on Hyper libraries")
4467 (description
4468 "This package provides an ASGI (Asynchronous Server Gateway Interface)
4469Server based on Hyper libraries and inspired by @code{python-gunicorn}.")
4470 (license license:expat)))
4471
4472(define-public python-hyperframe
4473 (package
4474 (name "python-hyperframe")
4475 (version "6.1.0")
4476 (source
4477 (origin
4478 (method url-fetch)
4479 (uri (pypi-uri "hyperframe" version))
4480 (sha256
4481 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
4482 (build-system pyproject-build-system)
4483 (native-inputs
4484 (list python-pytest python-setuptools))
4485 (home-page "https://github.com/python-hyper/hyperframe")
4486 (synopsis "HTTP/2 framing layer for Python")
4487 (description
4488 "This library contains the HTTP/2 framing code used in the hyper project.
4489It provides a pure-Python codebase that is capable of decoding a binary stream
4490into HTTP/2 frames.")
4491 (license license:expat)))
4492
4493(define-public python-hpack
4494 (package
4495 (name "python-hpack")
4496 (version "4.1.0")
4497 (source
4498 (origin
4499 ;; PyPI tarball is missing some files necessary for the tests.
4500 (method git-fetch)
4501 (uri (git-reference
4502 (url "https://github.com/python-hyper/hpack")
4503 (commit (string-append "v" version))))
4504 (file-name (git-file-name name version))
4505 (sha256
4506 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
4507 (build-system pyproject-build-system)
4508 (native-inputs
4509 (list python-pytest python-setuptools))
4510 (home-page "https://hyper.rtfd.org")
4511 (synopsis "Pure-Python HPACK header compression")
4512 (description
4513 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
4514for use in Python programs that implement HTTP/2.")
4515 (license license:expat)))
4516
4517(define-public python-h11
4518 (package
4519 (name "python-h11")
4520 (version "0.16.0")
4521 (source
4522 (origin
4523 (method url-fetch)
4524 (uri (pypi-uri "h11" version))
4525 (sha256
4526 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
4527 (build-system pyproject-build-system)
4528 (native-inputs
4529 (list python-pytest python-setuptools))
4530 (home-page "https://github.com/python-hyper/h11")
4531 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
4532 (description
4533 "This is a little HTTP/1.1 library written from scratch in Python, heavily
4534inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
4535code whatsoever. This means you can hook h11 up to your favorite network API,
4536and that could be anything you want.")
4537 (license license:expat)))
4538
4539(define-public python-h2
4540 (package
4541 (name "python-h2")
4542 (version "4.1.0")
4543 (source
4544 (origin
4545 (method url-fetch)
4546 (uri (pypi-uri "h2" version))
4547 (sha256
4548 (base32 "1fraip114fm1ha5w37pdc0sk8dn9pb0ck267zrwwpap7zc4clfm8"))))
4549 (build-system pyproject-build-system)
4550 (arguments
4551 (list
4552 ;; AssertionError: assert '<RemoteSettingsChanged
4553 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
4554 ;; new_value=32768)}>' == '<RemoteSettingsChanged
4555 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
4556 ;; original_value=65536, new_value=32768)}>'
4557 #:test-flags
4558 #~(list "-k"
4559 (string-join
4560 (list "not test_remotesettingschanged_repr"
4561 ;; This test exceededs the Hypothesis deadline.
4562 #$@(if (target-riscv64?)
4563 #~("test_changing_max_frame_size")
4564 #~())
4565 "test_streamreset_repr"
4566 "test_settingsacknowledged_repr"
4567 "test_connectionterminated_repr[None-None]"
4568 "test_connectionterminated_repr[some"
4569 "test_remotesettingschanged_repr"
4570 "test_streamreset_repr"
4571 "test_settingsacknowledged_repr"
4572 "test_connectionterminated_repr[None-None]"
4573 "test_connectionterminated_repr[some")
4574 " and not "))))
4575 (native-inputs
4576 (list python-pytest
4577 python-setuptools
4578 python-wheel))
4579 (propagated-inputs
4580 (list python-hpack
4581 python-hyperframe))
4582 (home-page "https://github.com/python-hyper/h2")
4583 (synopsis "HTTP/2 State-Machine based protocol implementation")
4584 (description
4585 "This module contains a pure-Python implementation of a HTTP/2 protocol
4586stack. It does not provide a parsing layer, a network layer, or any rules
4587about concurrency. Instead, it's a purely in-memory solution, defined in
4588terms of data actions and HTTP/2 frames. This is one building block of a full
4589Python HTTP implementation.")
4590 (license license:expat)))
4591
4592(define-public python-slixmpp
4593 (package
4594 (name "python-slixmpp")
4595 (version "1.8.6") ; XXX: The latest version which does not require Rust
4596 (source
4597 (origin
4598 (method git-fetch)
4599 (uri (git-reference
4600 (url "https://codeberg.org/poezio/slixmpp")
4601 (commit (string-append "slix-" version))))
4602 (file-name (git-file-name name version))
4603 (sha256
4604 (base32 "0gpy6arwyk4lsx1hbcwbllxs6qbwn58adkp1rm1cfvfrjdv5kxx7"))))
4605 (build-system pyproject-build-system)
4606 (arguments
4607 (list
4608 #:phases
4609 #~(modify-phases %standard-phases
4610 (add-after 'unpack 'patch-setup.py
4611 (lambda _
4612 (substitute* "setup.py"
4613 (("'CC', 'cc'")
4614 "'CC', 'gcc'")))))))
4615 (native-inputs
4616 (list gnupg
4617 pkg-config
4618 python-cython
4619 python-setuptools
4620 python-wheel))
4621 (inputs
4622 (list libidn
4623 python)) ; We are building a Python extension.
4624 (propagated-inputs
4625 (list python-aiodns
4626 python-aiohttp
4627 python-cryptography
4628 python-defusedxml
4629 python-emoji
4630 python-pyasn1
4631 python-pyasn1-modules))
4632 (home-page "https://lab.louiz.org/poezio/slixmpp")
4633 (synopsis "XMPP library without threads")
4634 (description
4635 "Slixmpp is a XMPP library for Python 3.7+. It is a fork of SleekXMPP.
4636Its goal is to only rewrite the core of the library (the low level socket
4637handling, the timers, the events dispatching) in order to remove all
4638threads.")
4639 (license license:expat)))
4640
4641(define-public python-sockjs-tornado
4642 (package
4643 (name "python-sockjs-tornado")
4644 (version "1.0.6")
4645 (source
4646 (origin
4647 (method git-fetch)
4648 (uri (git-reference
4649 (url "https://github.com/mrjoes/sockjs-tornado/")
4650 (commit (string-append "v" version))))
4651 (file-name (git-file-name name version))
4652 (sha256
4653 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
4654 (build-system pyproject-build-system)
4655 (arguments
4656 (list
4657 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
4658 (native-inputs (list python-setuptools))
4659 (propagated-inputs (list python-tornado))
4660 (home-page "https://github.com/mrjoes/sockjs-tornado/")
4661 (synopsis
4662 "SockJS Python server implementation on top of the Tornado framework")
4663 (description
4664 "SockJS-tornado provides the server-side counterpart to a SockJS client
4665library, through the Tornado framework.
4666
4667SockJS provides a low-latency, full-duplex, cross-domain communication channel
4668between a web browser and web server.")
4669 (license license:expat)))
4670
4671(define-public python-flask-assets
4672 ;; The latest release still depends on the abandoned flask-script, whereas
4673 ;; at this later commit (already 2 years old at the time of this writing)
4674 ;; the dependency has been lifted.
4675 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
4676 (revision "1"))
4677 (package
4678 (name "python-flask-assets")
4679 (version (git-version "2.1.0" revision commit))
4680 (source
4681 (origin
4682 (method git-fetch)
4683 (uri (git-reference
4684 (url "https://github.com/miracle2k/flask-assets/")
4685 (commit commit)))
4686 (file-name (git-file-name name version))
4687 (sha256
4688 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
4689 (build-system pyproject-build-system)
4690 (propagated-inputs
4691 (list python-flask python-webassets))
4692 (native-inputs
4693 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
4694 (home-page "https://github.com/miracle2k/flask-assets")
4695 (synopsis "Asset management for Flask")
4696 (description "This package integrates @code{webassets} with Flask, adding
4697support for merging, minifying and compiling CSS and Javascript files.")
4698 (license license:bsd-2))))
4699
4700(define-public python-flask-babel
4701 (package
4702 (name "python-flask-babel")
4703 (version "4.0.0")
4704 (source
4705 (origin
4706 (method git-fetch) ;no tests in pypi release
4707 (uri (git-reference
4708 (url "https://github.com/python-babel/flask-babel")
4709 (commit (string-append "v" version))))
4710 (sha256
4711 (base32
4712 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
4713 (build-system pyproject-build-system)
4714 (native-inputs
4715 (list python-poetry-core
4716 python-pytest
4717 python-pytest-mock))
4718 (propagated-inputs
4719 (list python-babel
4720 python-flask
4721 python-jinja2
4722 python-pytz))
4723 (home-page "https://github.com/python-babel/flask-babel")
4724 (synopsis "Add i18n/l10n support to Flask applications")
4725 (description "This package implements internationalization and localization
4726support for Flask. This is based on the Python babel module as well as pytz -
4727both of which are installed automatically if you install this library.")
4728 (license license:bsd-3)))
4729
4730(define-public python-flask-cors
4731 (package
4732 (name "python-flask-cors")
4733 (version "6.0.2")
4734 (source
4735 (origin
4736 (method git-fetch) ;no tests in PyPI archive
4737 (uri (git-reference
4738 (url "https://github.com/CoryDolphin/flask-cors")
4739 (commit version)))
4740 (file-name (git-file-name name version))
4741 (sha256
4742 (base32 "02y740h951dscgkm7ghsss1bc0m8ymsfdpsimm1j0nkl0zjl6sgm"))))
4743 (build-system pyproject-build-system)
4744 (arguments
4745 (list
4746 #:phases
4747 #~(modify-phases %standard-phases
4748 (add-after 'unpack 'fix-version
4749 (lambda _
4750 ;; Otherwise sanity-check of dependents will fail.
4751 (substitute* "pyproject.toml"
4752 (("version = \"0\\.0\\.1\"" all)
4753 (string-append "version = \"" #$version "\""))))))))
4754 (native-inputs
4755 (list python-pytest
4756 python-setuptools))
4757 (propagated-inputs
4758 (list python-flask
4759 python-werkzeug))
4760 (home-page "https://flask-cors.readthedocs.io/en/latest/")
4761 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
4762 (description
4763 "This package provides a Flask extension for handling @acronym{CORS,Cross
4764Origin Resource Sharing}, making cross-origin AJAX possible.")
4765 (license license:expat)))
4766
4767(define-public python-flask-markdown
4768 (package
4769 (name "python-flask-markdown")
4770 (version "0.3")
4771 (source
4772 (origin
4773 (method git-fetch)
4774 (uri (git-reference
4775 (url "https://github.com/dcolish/flask-markdown")
4776 (commit version)))
4777 (file-name (git-file-name name version))
4778 (sha256
4779 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
4780 (build-system pyproject-build-system)
4781 (arguments
4782 (list
4783 #:tests? #f ;Tests seem to be incompatible with latest python
4784 #:phases
4785 #~(modify-phases %standard-phases
4786 (add-after 'unpack 'set-version
4787 (lambda _
4788 (substitute* "setup.py"
4789 (("dev")
4790 #$version)))))))
4791 (propagated-inputs (list python-markdown python-flask))
4792 (native-inputs (list python-pynose python-setuptools))
4793 (home-page "https://github.com/dcolish/flask-markdown")
4794 (synopsis "Small extension to help with using Markdown in Flask")
4795 (description
4796 "Flask-Markdown supports several extensions for Markdown and integrates
4797into Jinja2 by default.")
4798 (license license:bsd-3)))
4799
4800(define-public python-flask-session
4801 (package
4802 (name "python-flask-session")
4803 (version "0.8.0")
4804 (source
4805 (origin
4806 (method url-fetch)
4807 (uri (pypi-uri "flask_session" version))
4808 (sha256
4809 (base32
4810 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
4811 (build-system pyproject-build-system)
4812 (arguments
4813 '(#:tests? #f)) ; Tests require the various storage backends to be present
4814 (native-inputs (list python-flit-core))
4815 (propagated-inputs
4816 (list python-cachelib python-flask python-msgspec))
4817 (home-page "https://github.com/pallets-eco/flask-session")
4818 (synopsis "Adds server-side session support to your Flask application")
4819 (description
4820 "Flask-Session is an extension for Flask that adds support for
4821Server-side sessions, with a variety of different backends for session
4822storage.")
4823 (license license:bsd-3)))
4824
4825(define-public python-html5lib
4826 (package
4827 (name "python-html5lib")
4828 (version "1.1")
4829 (source
4830 (origin
4831 (method url-fetch)
4832 (uri (pypi-uri "html5lib" version))
4833 (sha256
4834 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
4835 (build-system pyproject-build-system)
4836 (arguments
4837 '(#:tests? #f)) ;tests depend on dated pytest-expect
4838 (native-inputs
4839 (list python-setuptools))
4840 (propagated-inputs
4841 (list python-six
4842 python-webencodings
4843 ;; Required by Calibre 5.
4844 python-chardet))
4845 (home-page "https://github.com/html5lib/html5lib-python")
4846 (synopsis "Python HTML parser based on the WHATWG HTML specification")
4847 (description
4848 "Html5lib is an HTML parser based on the WHATWG HTML specification
4849and written in Python.")
4850 (license license:expat)))
4851
4852(define-public python-html5-parser
4853 (package
4854 (name "python-html5-parser")
4855 (version "0.4.12")
4856 (source
4857 (origin
4858 (method git-fetch)
4859 (uri (git-reference
4860 (url "https://github.com/kovidgoyal/html5-parser")
4861 (commit (string-append "v" version))))
4862 (file-name (git-file-name name version))
4863 (sha256
4864 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
4865 (build-system pyproject-build-system)
4866 (arguments
4867 (list
4868 #:phases
4869 #~(modify-phases %standard-phases
4870 (add-before 'build 'set-configure-flags
4871 (lambda _
4872 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
4873 (native-inputs (list pkg-config python-setuptools))
4874 (inputs (list libxml2))
4875 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
4876 (home-page "https://html5-parser.readthedocs.io")
4877 (synopsis "Fast C-based HTML5 parsing for Python")
4878 (description
4879 "This package provides a fast implementation of the HTML5 parsing spec
4880for Python. Parsing is done in C using a variant of the gumbo parser. The
4881gumbo parse tree is then transformed into an lxml tree, also in C, yielding
4882parse times that can be a thirtieth of the html5lib parse times.")
4883 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
4884 ;; indicate ASL2.0, including the LICENSE file for the whole project.
4885 (license (list license:asl2.0 license:gpl3))))
4886
4887(define-public python-html5tagger
4888 (package
4889 (name "python-html5tagger")
4890 (version "1.3.0")
4891 (source (origin
4892 (method url-fetch)
4893 (uri (pypi-uri "html5tagger" version))
4894 (sha256
4895 (base32
4896 "1acd1a4f66gi4plqnsml7cf33qp83mxsnmnqpdwkpj7597xkvyl4"))))
4897 (build-system pyproject-build-system)
4898 (arguments
4899 (list #:tests? #f)) ;no tests in PyPI or Git
4900 (native-inputs
4901 (list python-setuptools python-setuptools-scm python-wheel))
4902 (home-page "https://github.com/sanic-org/html5tagger")
4903 (synopsis "Create HTML documents from Python")
4904 (description
4905 "@code{html5tagger} provides a simplified HTML5 syntax that can
4906be written directly in Python without templates.")
4907 (license license:unlicense)))
4908
4909(define-public python-minio
4910 (package
4911 (name "python-minio")
4912 (version "7.1.9")
4913 (source
4914 (origin
4915 (method git-fetch)
4916 (uri (git-reference
4917 (url "https://github.com/minio/minio-py")
4918 (commit version)))
4919 (file-name (git-file-name name version))
4920 (sha256
4921 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
4922 (build-system pyproject-build-system)
4923 (arguments
4924 (list
4925 #:test-flags
4926 ;; XXX: requires network access.
4927 #~(list "--ignore=tests/unit/credentials_test.py")))
4928 (native-inputs (list python-pytest python-setuptools))
4929 (propagated-inputs
4930 (list python-certifi python-dateutil python-pytz python-urllib3))
4931 (home-page "https://github.com/minio/minio-py")
4932 (synopsis "Programmatically access Amazon S3 from Python")
4933 (description
4934 "This package provides a Python library for interacting with any
4935Amazon S3 compatible object storage server.")
4936 (license license:asl2.0)))
4937
4938(define-public python-pycrdt
4939 (package
4940 (name "python-pycrdt")
4941 (version "0.13.0")
4942 (source
4943 (origin
4944 (method git-fetch)
4945 (uri (git-reference
4946 (url "https://github.com/y-crdt/pycrdt")
4947 (commit version)))
4948 (file-name (git-file-name name version))
4949 (sha256
4950 (base32 "18mnjbxdlra1w3jl42bf1jb25z9j3inh6s61qighqrvnylgxvxc1"))))
4951 (build-system pyproject-build-system)
4952 (arguments
4953 (list
4954 #:imported-modules `(,@%cargo-build-system-modules
4955 ,@%pyproject-build-system-modules)
4956 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4957 (guix build pyproject-build-system)
4958 (guix build utils))
4959 #:test-flags #~(list "--ignore=tests/test_types.py")
4960 #:phases
4961 #~(modify-phases %standard-phases
4962 (add-after 'unpack 'relax-requirements
4963 (lambda _
4964 (substitute* "pyproject.toml"
4965 (("requires = \\[\"maturin>=.*\"\\]")
4966 "requires = [\"maturin\"]"))))
4967 (add-after 'unpack 'prepare-cargo-build-system
4968 (lambda args
4969 (for-each
4970 (lambda (phase)
4971 (format #t "Running cargo phase: ~a~%" phase)
4972 (apply (assoc-ref cargo:%standard-phases phase)
4973 #:cargo-target #$(cargo-triplet)
4974 args))
4975 '(unpack-rust-crates
4976 configure
4977 check-for-pregenerated-files
4978 patch-cargo-checksums)))))))
4979 (propagated-inputs
4980 (list python-anyio
4981 python-typing-extensions))
4982 (inputs (cargo-inputs 'pycrdt))
4983 (native-inputs
4984 (append
4985 (list maturin
4986 python-pydantic
4987 python-pytest
4988 rust
4989 `(,rust "cargo"))
4990 (or (and=> (%current-target-system)
4991 (compose list make-rust-sysroot))
4992 '())))
4993 (home-page "https://github.com/y-crdt/pycrdt")
4994 (synopsis "Python CRDTs library ported from Yjs framework")
4995 (description
4996 "Conflict-free Replicated Data Types (CRDTs) allow creating shared
4997documents that can automatically merge changes made concurrently on different
4998copies of the data. When the data lives on different machines, they make it
4999possible to build distributed systems that work with local data, leaving the
5000synchronization and conflict resolution with remote data to the CRDT
5001algorithm, which ensures that all data replicas eventually converge to the
5002same state.
5003
5004This is a Python CRDT library that provides bindings for Yrs, the Rust port of
5005the Yjs framework.")
5006 (license license:expat)))
5007
5008(define-public python-pycrdt-store
5009 (package
5010 (name "python-pycrdt-store")
5011 (version "0.1.3")
5012 (source
5013 (origin
5014 (method git-fetch)
5015 (uri (git-reference
5016 (url "https://github.com/y-crdt/pycrdt-store")
5017 (commit version)))
5018 (file-name (git-file-name name version))
5019 (sha256
5020 (base32 "18yvv5lgxb4v0qlbi8bbkcm1666nxbkmhbx445sxpzab7027fl1a"))))
5021 (build-system pyproject-build-system)
5022 (propagated-inputs
5023 (list python-anyio
5024 python-pycrdt
5025 python-sqlite-anyio))
5026 (native-inputs
5027 (list python-hatchling
5028 python-pytest
5029 python-pytest-rerunfailures
5030 python-trio))
5031 (home-page "https://github.com/y-crdt/pycrdt-store")
5032 (synopsis "Persistent storage for pycrdt")
5033 (description
5034 "This package provides a persistent storage feature for
5035@code{python-pycrdt}.")
5036 (license license:expat)))
5037
5038(define-public python-pycrdt-websocket
5039 (package
5040 (name "python-pycrdt-websocket")
5041 (version "0.16.0")
5042 (source
5043 (origin
5044 (method git-fetch)
5045 (uri (git-reference
5046 (url "https://github.com/y-crdt/pycrdt-websocket")
5047 (commit version)))
5048 (file-name (git-file-name name version))
5049 (sha256
5050 (base32 "1bcxivdra0v5fwlz3hcz98vxi61884bfvcwifsdp3mji28iprv22"))))
5051 (build-system pyproject-build-system)
5052 (arguments
5053 (list
5054 ;; These tests require the unpackaged Yjs.
5055 #:test-flags #~(list "--deselect=tests/test_pycrdt_yjs.py")))
5056 (propagated-inputs
5057 (list python-anyio
5058 python-pycrdt
5059 python-pycrdt-store))
5060 (native-inputs
5061 (list nss-certs-for-test
5062 python-hatchling
5063 python-hypercorn
5064 python-httpx-ws
5065 python-pytest))
5066 (home-page "https://github.com/y-crdt/pycrdt-websocket")
5067 (synopsis "WebSocket connector for pycrdt")
5068 (description "This package provides an asynchronous @code{WebSocket}
5069connector for @code{python-pycrdt}.")
5070 (license license:expat)))
5071
5072(define-public python-pycurl
5073 (package
5074 (name "python-pycurl")
5075 (version "7.45.4")
5076 (source
5077 (origin
5078 (method git-fetch)
5079 (uri (git-reference
5080 (url "https://github.com/pycurl/pycurl")
5081 (commit (string-append
5082 "REL_" (string-replace-substring version "." "_")))))
5083 (file-name (git-file-name name version))
5084 (sha256
5085 (base32 "00cd1l0lsml0708hpv5k4qyhqfv0qphb0p317j9aci2wdspn1mpl"))))
5086 (build-system pyproject-build-system)
5087 (arguments
5088 '(#:test-flags
5089 ;; The test suite is not thread safe:
5090 ;; - some tests want to use the same port: address already in use
5091 ;; - some tests use signal.Signal, i.e. main-thread only
5092 (list "-k" (string-append
5093 ;; Disable hanginging tests
5094 "not test_multi_socket_select"
5095 ;; E assert None is not None
5096 ;; E+ where None =
5097 ;; <tests.multi_callback_test.MultiCallbackTest
5098 ;; testMethod=test_multi_socket_action>.timer_result
5099 " and not test_multi_socket_action"
5100 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
5101 ;; open shared object file: No such file or directory
5102 " and not test_libcurl_ssl_gnutls"
5103 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
5104 ;; open shared object file: No such file or directory
5105 " and not test_libcurl_ssl_nss"
5106 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
5107 ;; open shared object file: No such file or directory
5108 " and not test_libcurl_ssl_openssl"
5109 ;; Probably due to an expired CA
5110 " and not test_request_without_certinfo"
5111 ;; "A libcurl function was given a bad argument"
5112 " and not test_proxy_tlsauth"))
5113 #:phases (modify-phases %standard-phases
5114 (add-before 'build 'configure-tls-backend
5115 (lambda _
5116 ;; XXX: PycURL fails to automatically determine which
5117 ;; TLS backend to use when cURL is built with
5118 ;; --disable-static. See setup.py and
5119 ;; <https://github.com/pycurl/pycurl/pull/147>.
5120 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
5121 (native-inputs
5122 (list python-bottle
5123 python-flaky
5124 python-flask
5125 python-pytest
5126 python-setuptools
5127 python-wheel))
5128 (inputs
5129 (list curl gnutls))
5130 (home-page "http://pycurl.io/")
5131 (synopsis "Lightweight Python wrapper around libcurl")
5132 (description "Pycurl is a lightweight wrapper around libcurl. It provides
5133high-speed transfers via libcurl and frequently outperforms alternatives.")
5134
5135 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
5136 ;; under the terms of LGPLv2.1+ or Expat.
5137 (license (list license:lgpl2.1+ license:expat))))
5138
5139(define-public python-stamina
5140 (package
5141 (name "python-stamina")
5142 (version "25.2.0")
5143 (source
5144 (origin
5145 (method git-fetch)
5146 (uri (git-reference
5147 (url "https://github.com/hynek/stamina")
5148 (commit version)))
5149 (file-name (git-file-name name version))
5150 (sha256
5151 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
5152 (build-system pyproject-build-system)
5153 (native-inputs
5154 (list python-pytest
5155 python-anyio
5156 python-dirty-equals
5157 python-hatch-fancy-pypi-readme
5158 python-hatch-vcs
5159 python-hatchling
5160 python-structlog))
5161 (propagated-inputs
5162 (list python-tenacity
5163 python-typing-extensions))
5164 (home-page "https://github.com/hynek/stamina")
5165 (synopsis "Retries library for Python")
5166 (description
5167 "@code{stamina} is an opinionated wrapper around the
5168@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
5169 (license license:expat)))
5170
5171(define-public python-stripe
5172 (package
5173 (name "python-stripe")
5174 (version "13.2.0")
5175 (source
5176 (origin
5177 (method git-fetch)
5178 (uri (git-reference
5179 (url "https://github.com/stripe/stripe-python")
5180 (commit (string-append "v" version))))
5181 (file-name (git-file-name name version))
5182 (sha256
5183 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
5184 (build-system pyproject-build-system)
5185 (arguments
5186 '(#:tests? #f)) ;; tests require network
5187 (native-inputs
5188 (list python-flit-core))
5189 (propagated-inputs
5190 (list python-httpx
5191 python-requests))
5192 (home-page "https://github.com/stripe/stripe-python")
5193 (synopsis "Python bindings for the Stripe financial services' API")
5194 (description "This package provides access to the Stripe financial
5195services' API. It includes a pre-defined set of classes for API resources
5196that initialize themselves dynamically from API responses which makes it
5197compatible with a wide range of versions of the Stripe API.")
5198 (license license:expat)))
5199
5200(define-public python-stripe-12
5201 (hidden-package
5202 (package/inherit python-stripe
5203 (name "python-stripe")
5204 (version "12.5.1")
5205 (source
5206 (origin
5207 (inherit (package-source python-stripe))
5208 (uri (git-reference
5209 (url "https://github.com/stripe/stripe-python")
5210 (commit (string-append "v" version))))
5211 (file-name (git-file-name name version))
5212 (sha256 (base32
5213 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
5214 (native-inputs
5215 (list python-setuptools)))))
5216
5217(define-public python-tldextract
5218 (package
5219 (name "python-tldextract")
5220 (version "5.3.0")
5221 (source
5222 (origin
5223 (method url-fetch)
5224 (uri (pypi-uri "tldextract" version))
5225 (sha256
5226 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
5227 (build-system pyproject-build-system)
5228 (arguments
5229 (list
5230 #:phases
5231 #~(modify-phases %standard-phases
5232 (add-after 'unpack 'relax-requirements
5233 (lambda _
5234 (substitute* "pyproject.toml"
5235 (("\"requests-file.*\",")
5236 "\"requests-file\",")))))))
5237 (native-inputs
5238 (list nss-certs-for-test
5239 python-pytest
5240 python-pytest-mock
5241 python-responses
5242 python-setuptools
5243 python-setuptools-scm
5244 python-syrupy))
5245 (propagated-inputs
5246 (list python-filelock
5247 python-idna
5248 python-requests
5249 python-requests-file))
5250 (home-page "https://github.com/john-kurkowski/tldextract")
5251 (synopsis
5252 "Separate the TLD from the registered domain and subdomains of a URL")
5253 (description
5254 "TLDExtract accurately separates the TLD from the registered domain and
5255subdomains of a URL, using the Public Suffix List. By default, this includes
5256the public ICANN TLDs and their exceptions. It can optionally support the
5257Public Suffix List's private domains as well.")
5258 (license license:bsd-3)))
5259
5260(define-public python-tracerite
5261 (package
5262 (name "python-tracerite")
5263 (version "1.1.3")
5264 (source
5265 (origin
5266 (method url-fetch)
5267 (uri (pypi-uri "tracerite" version))
5268 (sha256
5269 (base32 "07mkg0sl0h335kj6yjvxki2c19gxhb7rkks1zgzh7aj0y83c17qi"))))
5270 (build-system pyproject-build-system)
5271 (arguments
5272 (list #:tests? #f)) ;no tests in PyPI or Git
5273 (native-inputs
5274 (list python-setuptools
5275 python-setuptools-scm))
5276 (propagated-inputs
5277 (list python-html5tagger))
5278 (home-page "https://github.com/sanic-org/tracerite")
5279 (synopsis "Human-readable HTML tracebacks")
5280 (description
5281 "@code{tracerite} converts Python tracebacks into useful error messages
5282in human-readable HTML format.")
5283 (license license:unlicense)))
5284
5285(define-public python-trio-websocket
5286 (package
5287 (name "python-trio-websocket")
5288 (version "0.12.2")
5289 (source
5290 (origin
5291 (method git-fetch)
5292 (uri (git-reference
5293 (url "https://github.com/HyperionGray/trio-websocket")
5294 (commit version)))
5295 (file-name (git-file-name name version))
5296 (sha256
5297 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
5298 (build-system pyproject-build-system)
5299 (native-inputs
5300 (list python-pytest
5301 python-pytest-trio
5302 python-setuptools
5303 python-trustme))
5304 (propagated-inputs
5305 (list python-outcome
5306 python-trio
5307 python-wsproto))
5308 (home-page "https://github.com/HyperionGray/trio-websocket")
5309 (synopsis "WebSocket library for Trio")
5310 (description "This library implements both server and client aspects of
5311the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
5312striving for safety, correctness, and ergonomics. It is based on the
5313@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
5314@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
5315the majority of the WebSocket protocol, including framing, codecs, and events.
5316This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
5317the Trio framework}.")
5318 (license license:expat)))
5319
5320(define-public python-txacme
5321 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
5322 ;; compatibility with twisted, use the latest commit from trunk branch.
5323 ;;
5324 ;;See: <https://github.com/twisted/txacme/issues/165>.
5325 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
5326 (revision "0"))
5327 (package
5328 (name "python-txacme")
5329 (version (git-version "0.9.3" revision commit))
5330 (source
5331 (origin
5332 (method git-fetch) ;no fresh release in PyPI
5333 (uri (git-reference
5334 (url "https://github.com/twisted/txacme")
5335 (commit commit)))
5336 (file-name (git-file-name name version))
5337 (sha256
5338 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
5339 (build-system pyproject-build-system)
5340 (arguments
5341 (list #:test-backend #~'custom
5342 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
5343 (native-inputs
5344 (list python-setuptools))
5345 (propagated-inputs
5346 (list python-acme
5347 python-attrs
5348 python-eliot
5349 python-josepy
5350 python-pem
5351 python-treq
5352 python-twisted
5353 python-txsni))
5354 (home-page "https://github.com/twisted/txacme")
5355 (synopsis "Twisted implexmentation of the ACME protocol")
5356 (description
5357 "ACME is Automatic Certificate Management Environment, a protocol that
5358allows clients and certificate authorities to automate verification and
5359certificate issuance. The ACME protocol is used by the free Let's Encrypt
5360Certificate Authority.
5361
5362txacme is an implementation of the protocol for Twisted, the event-driven
5363networking engine for Python.")
5364 (license license:expat))))
5365
5366(define-public python-txaio
5367 (package
5368 (name "python-txaio")
5369 (version "25.9.2")
5370 (source
5371 (origin
5372 (method url-fetch)
5373 (uri (pypi-uri "txaio" version))
5374 (sha256
5375 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
5376 (build-system pyproject-build-system)
5377 (native-inputs
5378 (list python-pytest
5379 python-setuptools))
5380 (home-page "https://github.com/crossbario/txaio")
5381 (synopsis "Compatibility layer between Python asyncio and Twisted")
5382 (description
5383 "Txaio provides a compatibility layer between the Python @code{asyncio}
5384 bsmodule and @code{Twisted}.")
5385 (license license:expat)))
5386
5387;; XXX: Potentially abandonware since 2017, consider to remove when nothing
5388;; depends on it or fails to build.
5389(define-public python-txamqp
5390 (package
5391 (name "python-txamqp")
5392 (version "0.8.2")
5393 (source
5394 (origin
5395 (method url-fetch)
5396 (uri (pypi-uri "txAMQP" version))
5397 (sha256
5398 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
5399 (build-system pyproject-build-system)
5400 (arguments
5401 (list #:tests? #f)) ;all tests failed
5402 (native-inputs
5403 (list python-setuptools))
5404 (propagated-inputs
5405 (list python-six python-twisted))
5406 (home-page "https://github.com/txamqp/txamqp")
5407 (synopsis "Communicate with AMQP peers and brokers using Twisted")
5408 (description
5409 "This package provides a Python library for communicating with AMQP peers
5410and brokers using the asynchronous networking framework Twisted. It contains
5411all the necessary code to connect, send and receive messages to/from an
5412AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
5413also includes support for using Thrift RPC over AMQP in Twisted
5414applications.")
5415 (license license:asl2.0)))
5416
5417(define-public python-txsni
5418 (package
5419 (name "python-txsni")
5420 (version "0.2.0")
5421 (source
5422 (origin
5423 (method git-fetch)
5424 (uri (git-reference
5425 (url "https://github.com/glyph/txsni")
5426 (commit (string-append "v" version))))
5427 (file-name (git-file-name name version))
5428 (sha256
5429 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
5430 (build-system pyproject-build-system)
5431 (arguments
5432 (list #:test-backend #~'custom
5433 #:test-flags #~(list "-m" "twisted.trial"
5434 "--temp-directory=/tmp/_trial_temp"
5435 "txsni")))
5436 (native-inputs
5437 (list python-setuptools))
5438 (propagated-inputs
5439 (list python-pyopenssl
5440 python-service-identity
5441 python-twisted))
5442 (home-page "https://github.com/glyph/txsni")
5443 (synopsis "Run TLS servers with Twisted")
5444 (description
5445 "This package provides an easy-to-use SNI endpoint for use with the
5446Twisted web framework.")
5447 (license license:expat)))
5448
5449(define-public python-txtorcon
5450 (package
5451 (name "python-txtorcon")
5452 (version "24.8.0")
5453 (source
5454 (origin
5455 (method url-fetch)
5456 (uri (pypi-uri "txtorcon" version))
5457 (sha256
5458 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
5459 (build-system pyproject-build-system)
5460 (native-inputs
5461 (list python-pytest
5462 python-setuptools
5463 python-wheel))
5464 (inputs
5465 (list lsof))
5466 (propagated-inputs
5467 (list python-automat
5468 python-idna
5469 python-incremental
5470 python-pyopenssl
5471 python-service-identity
5472 python-twisted
5473 python-zope-interface))
5474 (home-page "https://github.com/meejah/txtorcon")
5475 (synopsis "Twisted-based Tor controller client")
5476 (description
5477 "This package provides a Twisted-based Tor controller client,with
5478state-tracking and configuration abstractions.")
5479 (license license:expat)))
5480
5481(define-public python-url-normalize
5482 (package
5483 (name "python-url-normalize")
5484 (version "2.2.1")
5485 (source
5486 (origin
5487 (method git-fetch) ; no tests in PyPI release
5488 (uri (git-reference
5489 (url "https://github.com/niksite/url-normalize")
5490 (commit (string-append "v" version))))
5491 (file-name (git-file-name name version))
5492 (sha256
5493 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
5494 (build-system pyproject-build-system)
5495 (arguments
5496 (list
5497 #:test-flags #~(list "--ignore=tests/test_cli.py")))
5498 (native-inputs
5499 (list python-pytest python-pytest-socket python-setuptools))
5500 (propagated-inputs
5501 (list python-idna))
5502 (home-page "https://github.com/niksite/url-normalize")
5503 (synopsis "URL normalization for Python")
5504 (description
5505 "This package provides a URI Normalization function with following
5506features:
5507@itemize
5508@item take care of IDN domains
5509@item always provide the URI scheme in lowercase characters
5510@item always provide the host, if any, in lowercase characters
5511@item only perform percent-encoding where it is essential
5512@item always use uppercase A-through-F characters when percent-encoding
5513@item prevent dot-segments appearing in non-relative URI paths
5514@item for schemes that define a default authority, use an empty authority if
5515the default is desired
5516@item for schemes that define an empty path to be equivalent to a path of
5517@code{/}, use @code{/}
5518@item for schemes that define a port, use an empty port if the default is
5519desired
5520@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
5521@end itemize")
5522 (license license:expat)))
5523
5524(define-public python-waitress
5525 (package
5526 (name "python-waitress")
5527 (version "3.0.2")
5528 (source
5529 (origin
5530 (method url-fetch)
5531 (uri (pypi-uri "waitress" version))
5532 (sha256
5533 (base32
5534 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
5535 (build-system pyproject-build-system)
5536 (arguments
5537 (list
5538 ;; https://github.com/Pylons/waitress/issues/443
5539 #:test-flags #~(list "-k" "not test_service_port")))
5540 (native-inputs (list python-pytest python-setuptools))
5541 (home-page "https://github.com/Pylons/waitress")
5542 (synopsis "Waitress WSGI server")
5543 (description
5544 "Waitress is meant to be a production-quality pure-Python WSGI server
5545with very acceptable performance.")
5546 (license license:zpl2.1)))
5547
5548(define-public python-weasel
5549 (package
5550 (name "python-weasel")
5551 (version "1.0.0")
5552 (source
5553 (origin
5554 (method git-fetch)
5555 (uri (git-reference
5556 (url "https://github.com/explosion/weasel/")
5557 (commit (string-append "release-v" version))))
5558 (file-name (git-file-name name version))
5559 (sha256
5560 (base32 "1sxcxri9hl9rs1kvdrv81g6mlg7lifhq9xacskracz63v4nyh8na"))))
5561 (build-system pyproject-build-system)
5562 (arguments
5563 (list
5564 #:test-flags
5565 ;; This test raises an error, but not the one expected by pytest.
5566 #~(list (string-append "--deselect=weasel/tests/test_validation.py::"
5567 "test_project_config_interpolation[10_0]")
5568 ;; Network access is required.
5569 #$@(map (lambda (test) (string-append "--deselect="
5570 "weasel/tests/cli/"
5571 test))
5572 (list "test_cli.py::test_project_git_dir_asset"
5573 "test_cli.py::test_project_git_file_asset"
5574 "test_cli_app.py::test_project_assets")))))
5575 (native-inputs
5576 (list python-pytest
5577 python-setuptools))
5578 (propagated-inputs
5579 (list python-cloudpathlib
5580 python-confection
5581 python-httpx
5582 python-packaging
5583 python-pydantic
5584 python-smart-open
5585 python-srsly
5586 python-typer
5587 python-wasabi))
5588 (home-page "https://github.com/explosion/weasel/")
5589 (synopsis "Small and easy workflow system")
5590 (description
5591 "This package provides a minimalistic workflow system to manage and
5592share end-to-end workflows for different use cases and domains.")
5593 (license license:expat)))
5594
5595(define-public python-webencodings
5596 (package
5597 (name "python-webencodings")
5598 (version "0.5.1")
5599 (source
5600 (origin
5601 (method url-fetch)
5602 (uri (pypi-uri "webencodings" version))
5603 (sha256
5604 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
5605 (build-system pyproject-build-system)
5606 (arguments
5607 (list #:test-flags #~(list "webencodings/tests.py")))
5608 (native-inputs
5609 (list python-pytest python-setuptools))
5610 (home-page "https://github.com/SimonSapin/python-webencodings")
5611 (synopsis "Character encoding aliases for legacy web content")
5612 (description
5613 "In order to be compatible with legacy web content when interpreting
5614something like @code{Content-Type: text/html; charset=latin1}, tools need to
5615use a particular set of aliases for encoding labels as well as some overriding
5616rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
5617actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
5618BOM takes precedence over any other encoding declaration. The WHATWG
5619@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
5620details so that implementations do not have to reverse-engineer each other.
5621
5622This module implements the Encoding standard and has encoding labels and BOM
5623detection, but the actual implementation for encoders and decoders is
5624Python’s.")
5625 (license license:bsd-3)))
5626
5627(define-public python-omnipath
5628 (package
5629 (name "python-omnipath")
5630 (version "1.0.10")
5631 (source
5632 (origin
5633 (method git-fetch)
5634 (uri (git-reference
5635 (url "https://github.com/saezlab/omnipath/")
5636 (commit (string-append "v" version))))
5637 (file-name (git-file-name name version))
5638 (sha256
5639 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
5640 (build-system pyproject-build-system)
5641 (arguments
5642 (list
5643 #:test-flags '(list "-k"
5644 (string-append
5645 ;; These require internet access
5646 "not test_download_homologene"
5647 " and not test_complex_genes"))
5648 #:phases
5649 #~(modify-phases %standard-phases
5650 (add-after 'unpack 'set-home
5651 (lambda _
5652 (setenv "HOME" "/tmp"))))))
5653 (propagated-inputs (list python-attrs
5654 python-docrep
5655 python-inflect
5656 python-networkx
5657 python-packaging
5658 python-pandas
5659 python-requests
5660 python-tqdm
5661 python-typing-extensions
5662 python-urllib3
5663 python-wrapt))
5664 (native-inputs (list nss-certs-for-test
5665 python-bump2version
5666 python-hatchling
5667 python-pytest
5668 python-pytest-mock
5669 python-pytest-socket
5670 python-requests-mock))
5671 (home-page "https://omnipathdb.org/")
5672 (synopsis "Python client for the OmniPath web service")
5673 (description "This package provides a Python client for the OmniPath web
5674service.")
5675 (license license:expat)))
5676
5677(define-public python-openai
5678 (package
5679 (name "python-openai")
5680 (version "2.42.0")
5681 (source
5682 (origin
5683 (method git-fetch)
5684 (uri (git-reference
5685 (url "https://github.com/openai/openai-python")
5686 (commit (string-append "v" version))))
5687 (file-name (git-file-name name version))
5688 (sha256
5689 (base32 "1p0vzy34cx2gfkhsqg2kxzam51cjlpa99q0skzj4426sx2hsw3g6"))))
5690 (build-system pyproject-build-system)
5691 (arguments
5692 (list
5693 #:test-flags
5694 ;; These require internet access and an openai API key.
5695 #~(list "--ignore=openai/tests/asyncio/test_endpoints.py"
5696 "--ignore=openai/tests/test_endpoints.py"
5697 "--ignore-glob=tests/api_resources/*")))
5698 (propagated-inputs
5699 (list python-aiohttp
5700 python-distro
5701 python-httpx
5702 python-jiter
5703 python-pydantic
5704 python-requests
5705 python-tqdm
5706 python-typing-extensions))
5707 (native-inputs
5708 (list nss-certs-for-test
5709 python-dirty-equals
5710 python-hatchling
5711 python-hatch-fancy-pypi-readme
5712 python-inline-snapshot
5713 python-pytest
5714 python-pytest-asyncio
5715 python-pytest-mock
5716 python-pytest-xdist
5717 python-respx
5718 python-rich
5719 python-setuptools))
5720 (home-page "https://github.com/openai/openai-python")
5721 (synopsis "Python client library for the OpenAI API")
5722 (description "This package provides a Python client library for the
5723OpenAI API.")
5724 (license license:expat)))
5725
5726(define-public python-openapi-schema-validator
5727 (package
5728 (name "python-openapi-schema-validator")
5729 (version "0.6.2")
5730 (source
5731 (origin
5732 (method git-fetch) ;no tests in pypi release
5733 (uri (git-reference
5734 (url "https://github.com/p1c2u/openapi-schema-validator")
5735 (commit version)))
5736 (file-name (git-file-name name version))
5737 (sha256
5738 (base32
5739 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
5740 (build-system pyproject-build-system)
5741 (arguments
5742 (list
5743 #:test-flags
5744 ;; This one returns 5 instead of 4 elements
5745 '(list "-k" "not test_array_prefixitems_invalid")
5746 #:phases
5747 #~(modify-phases %standard-phases
5748 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
5749 (add-after 'unpack 'relax-requirements
5750 (lambda _
5751 (substitute* "pyproject.toml"
5752 (("jsonschema-specifications.*")
5753 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
5754 (native-inputs (list python-poetry-core python-pytest))
5755 (propagated-inputs
5756 (list python-isodate
5757 python-jsonschema
5758 python-rfc3339-validator
5759 python-strict-rfc3339))
5760 (home-page "https://github.com/p1c2u/openapi-schema-validator")
5761 (synopsis "OpenAPI schema validation library for Python")
5762 (description "Openapi-schema-validator is a Python library that validates
5763a schema against:
5764@itemize
5765@item OpenAPI Schema Specification v3.0 which is an extended subset of the
5766JSON Schema Specification Wright Draft 00.
5767@item OpenAPI Schema Specification v3.1 which is an extended superset of the
5768JSON Schema Specification Draft 2020-12.
5769@end itemize")
5770 (license license:bsd-3)))
5771
5772(define-public python-openapi-spec-validator
5773 (package
5774 (name "python-openapi-spec-validator")
5775 (version "0.7.1")
5776 (source
5777 (origin
5778 (method git-fetch) ;no tests in pypi release
5779 (uri (git-reference
5780 (url "https://github.com/p1c2u/openapi-spec-validator")
5781 (commit version)))
5782 (file-name (git-file-name name version))
5783 (sha256
5784 (base32
5785 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
5786 (build-system pyproject-build-system)
5787 (arguments
5788 (list
5789 ;; These tests attempt to fetch resources from the Internet
5790 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
5791 "-k" "not example")))
5792 (native-inputs
5793 (list python-poetry-core
5794 python-pytest))
5795 (propagated-inputs
5796 (list python-jsonschema
5797 python-jsonschema-path
5798 python-lazy-object-proxy
5799 python-openapi-schema-validator
5800 python-pyyaml
5801 python-requests
5802 python-setuptools))
5803 (home-page "https://github.com/p1c2u/openapi-spec-validator")
5804 (synopsis "OpenAPI spec validator")
5805 (description "OpenAPI Spec Validator is a Python library that validates an
5806OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
58073.0 and OpenAPI 3.1 specifications. The validator aims to check for full
5808compliance with the specification.")
5809 (license license:asl2.0)))
5810
5811(define-public python-openapi-core
5812 (package
5813 (name "python-openapi-core")
5814 (version "0.19.4")
5815 (source
5816 (origin
5817 (method git-fetch)
5818 (uri (git-reference
5819 (url "https://github.com/p1c2u/openapi-core")
5820 (commit version)))
5821 (file-name (git-file-name name version))
5822 (sha256
5823 (base32
5824 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
5825 (build-system pyproject-build-system)
5826 (arguments
5827 (list
5828 #:test-flags
5829 '(list "tests/unit"
5830 "-k" "not test_chars_valid")))
5831 (native-inputs (list python-django
5832 python-falcon
5833 python-flask
5834 python-mock
5835 python-poetry-core
5836 python-pytest
5837 python-pytest-asyncio
5838 python-responses))
5839 (propagated-inputs
5840 (list python-attrs
5841 python-aiohttp
5842 python-isodate
5843 python-jsonschema
5844 python-lazy-object-proxy
5845 python-more-itertools
5846 python-openapi-schema-validator
5847 python-openapi-spec-validator
5848 python-parse
5849 python-six
5850 python-werkzeug))
5851 (home-page "https://github.com/p1c2u/openapi-core")
5852 (synopsis "OpenAPI core library")
5853 (description "Openapi-core is a Python library that adds client-side and
5854server-side support for the OpenAPI Specification v3. It has features such
5855as:
5856@itemize
5857@item Validation of requests and responses
5858@item Schema casting and unmarshalling
5859@item Media type and parameters deserialization
5860@item Security providers (API keys, Cookie, Basic and Bearer HTTP
5861authentications)
5862@item Custom deserializers and formats
5863@item Integration with libraries and frameworks.
5864@end itemize")
5865 (license license:bsd-3)))
5866
5867(define-public python-openid
5868 (package
5869 (name "python-openid")
5870 (version "3.2.0")
5871 (source
5872 (origin
5873 (method url-fetch)
5874 (uri (pypi-uri "python3-openid" version))
5875 (sha256
5876 (base32
5877 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
5878 (build-system pyproject-build-system)
5879 (arguments
5880 `(#:phases
5881 (modify-phases %standard-phases
5882 (replace 'check
5883 (lambda* (#:key tests? #:allow-other-keys)
5884 (when tests?
5885 (invoke "python" "-m" "unittest" "openid.test.test_suite")))))))
5886 (propagated-inputs
5887 (list python-defusedxml))
5888 (native-inputs
5889 (list python-psycopg2 python-django python-setuptools python-wheel))
5890 (home-page "https://github.com/necaris/python3-openid")
5891 (synopsis "OpenID support for servers and consumers")
5892 (description "This library provides OpenID authentication for Python, both
5893for clients and servers.")
5894 (license license:asl2.0)))
5895
5896(define-public python-cssutils
5897 (package
5898 (name "python-cssutils")
5899 (version "2.11.1")
5900 (source
5901 (origin
5902 (method url-fetch)
5903 (uri (pypi-uri "cssutils" version))
5904 (sha256
5905 (base32
5906 "1qpq7xvzqp4cfcb8837rnd30x4hws3rkp33qpvmnxbxn2djsfqq5"))))
5907 (build-system pyproject-build-system)
5908 (arguments
5909 (list
5910 #:phases
5911 #~(modify-phases %standard-phases
5912 (replace 'check
5913 (lambda _
5914 (invoke "pytest" "-vv" "-k"
5915 (string-append "not encutils "
5916 "and not website.logging")))))))
5917 (native-inputs
5918 (list python-cssselect
5919 python-jaraco-test
5920 python-lxml
5921 python-pytest
5922 python-setuptools
5923 python-wheel))
5924 (propagated-inputs
5925 (list python-more-itertools))
5926 (home-page "https://github.com/jaraco/cssutils")
5927 (synopsis
5928 "CSS Cascading Style Sheets library for Python")
5929 (description
5930 "Cssutils is a Python package for parsing and building CSS
5931Cascading Style Sheets. Currently it provides a DOM only and no rendering
5932options.")
5933 (license license:lgpl3+)))
5934
5935(define-public python-css-parser
5936 (package
5937 (inherit python-cssutils)
5938 (name "python-css-parser")
5939 (version "1.0.10")
5940 (source
5941 (origin
5942 (method url-fetch)
5943 (uri (pypi-uri "css-parser" version))
5944 (sha256
5945 (base32 "0qs375slcwqd7slizh6hzkwxx7cdj36v8kwn0qrfji1kscm9f7mz"))))
5946 (home-page "https://github.com/ebook-utils/css-parser")
5947 (synopsis "Fork of cssutils modified for parsing ebooks")
5948 (description
5949 "Css-parser is a Python package for parsing and building CSS
5950Cascading Style Sheets. Currently it provides a DOM only and no rendering
5951options.
5952
5953It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
5954cssutils not receiving updates as of 1.0.2.")
5955 (license license:lgpl3+)))
5956
5957(define-public python-cssselect
5958 (package
5959 (name "python-cssselect")
5960 (version "1.2.0")
5961 (source (origin
5962 ;; The PyPI release does not contain tests.
5963 (method git-fetch)
5964 (uri (git-reference
5965 (url "https://github.com/scrapy/cssselect")
5966 (commit (string-append "v" version))))
5967 (file-name (git-file-name name version))
5968 (sha256
5969 (base32
5970 "1x4nrvb1p1byi1whmspik7lbh303akdlh762dayfxam3hycsh5kk"))))
5971 (build-system pyproject-build-system)
5972 (native-inputs
5973 (list python-lxml python-pytest python-setuptools python-wheel))
5974 (home-page "https://github.com/scrapy/cssselect")
5975 (synopsis "CSS3 selector parser and translator to XPath 1.0")
5976 (description
5977 "Cssselect ia a Python module that parses CSS3 Selectors and translates
5978them to XPath 1.0 expressions. Such expressions can be used in lxml or
5979another XPath engine to find the matching elements in an XML or HTML document.")
5980 (license license:bsd-3)))
5981
5982(define-public python-databricks-cli
5983 (package
5984 (name "python-databricks-cli")
5985 (version "0.18.0")
5986 (home-page "https://github.com/databricks/databricks-cli")
5987 (source (origin
5988 (method git-fetch)
5989 (uri (git-reference (url home-page) (commit version)))
5990 (file-name (git-file-name name version))
5991 (sha256
5992 (base32
5993 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
5994 (build-system pyproject-build-system)
5995 (arguments
5996 (list #:phases #~(modify-phases %standard-phases
5997 (replace 'check
5998 (lambda _
5999 (invoke "pytest" "tests" "-vv"))))))
6000 (native-inputs
6001 ;; For tests.
6002 (list python-decorator
6003 python-mock
6004 python-pytest
6005 python-requests-mock
6006 python-setuptools
6007 python-wheel))
6008 (propagated-inputs
6009 (list python-click
6010 python-oauthlib
6011 python-pyjwt
6012 python-requests
6013 python-six
6014 python-tabulate))
6015 (synopsis "Command line interface for Databricks")
6016 (description
6017 "The Databricks Command Line Interface is a tool which provides an easy
6018to use interface to the Databricks platform. The CLI is built on top of the
6019Databricks REST APIs.")
6020 (license license:asl2.0)))
6021
6022(define-public python-openid-cla
6023 ;; XXX: Last updated in 2015.
6024 (package
6025 (name "python-openid-cla")
6026 (version "1.2")
6027 (source
6028 (origin
6029 (method url-fetch)
6030 (uri (pypi-uri "python-openid-cla" version))
6031 (sha256
6032 (base32
6033 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
6034 (build-system pyproject-build-system)
6035 (arguments '(#:tests? #f)) ; No tests.
6036 (native-inputs (list python-setuptools python-wheel))
6037 (propagated-inputs (list python-openid python-six))
6038 (home-page "https://github.com/puiterwijk/python-openid-cla/")
6039 (synopsis "Implementation of the OpenID CLA extension for python-openid")
6040 (description "@code{openid-cla} is an implementation of the OpenID
6041contributor license agreement extension for python-openid.")
6042 (license license:bsd-3)))
6043
6044(define-public python-openid-teams
6045 ;; XXX: Last updated in 2018.
6046 (package
6047 (name "python-openid-teams")
6048 (version "1.1")
6049 (source
6050 (origin
6051 (method url-fetch)
6052 (uri (pypi-uri "python-openid-teams" version))
6053 (sha256
6054 (base32
6055 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
6056 (build-system pyproject-build-system)
6057 (arguments '(#:tests? #f)) ; No tests.
6058 (native-inputs (list python-setuptools python-wheel))
6059 (propagated-inputs (list python-openid python-six))
6060 (home-page "https://github.com/puiterwijk/python-openid-teams/")
6061 (synopsis "Implementation of the OpenID teams extension for python-openid")
6062 (description
6063 "@code{openid-teams} is an implementation of the OpenID
6064teams extension for python-openid.")
6065 (license license:bsd-3)))
6066
6067(define-public python-priority
6068 (package
6069 (name "python-priority")
6070 (version "2.0.0")
6071 (source
6072 (origin
6073 (method url-fetch)
6074 (uri (pypi-uri "priority" version))
6075 (sha256
6076 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
6077 (build-system pyproject-build-system)
6078 (native-inputs
6079 (list python-pytest python-setuptools python-wheel))
6080 (home-page "https://python-hyper.org/projects/priority/en/latest/")
6081 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
6082 (description
6083 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
6084set out in RFC 7540 Section 5.3 (Stream Priority).")
6085 (license license:expat)))
6086
6087(define-public python-weblate-language-data
6088 (package
6089 (name "python-weblate-language-data")
6090 (version "2025.8")
6091 (source
6092 (origin
6093 (method url-fetch)
6094 (uri (pypi-uri "weblate_language_data" version))
6095 (sha256
6096 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
6097 (build-system pyproject-build-system)
6098 (arguments (list #:tests? #f)) ;not tests, just data files
6099 (native-inputs
6100 (list python-setuptools))
6101 (propagated-inputs
6102 (list python-translate-toolkit))
6103 (home-page "https://github.com/WeblateOrg/language-data")
6104 (synopsis "Language definitions for Weblate")
6105 (description
6106 "This package provides language definitions used by
6107@url{https://weblate.org/, Weblate}i.")
6108 (license license:expat)))
6109
6110(define-public python-wikidata
6111 (package
6112 (name "python-wikidata")
6113 (version "0.8.1")
6114 (source
6115 (origin
6116 (method git-fetch)
6117 (uri (git-reference
6118 (url "https://github.com/dahlia/wikidata")
6119 (commit version)))
6120 (file-name (git-file-name name version))
6121 (sha256
6122 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
6123 (build-system pyproject-build-system)
6124 (native-inputs
6125 (list python-pytest python-setuptools))
6126 (home-page "https://github.com/dahlia/wikidata")
6127 (synopsis "Wikidata client library")
6128 (description
6129 "This package provides a Python interface to @url{https://www.wikidata.org/,
6130Wikidata}.")
6131 (license license:gpl3+)))
6132
6133(define-public python-wsproto
6134 (package
6135 (name "python-wsproto")
6136 (version "1.2.0")
6137 (source
6138 (origin
6139 (method url-fetch)
6140 (uri (pypi-uri "wsproto" version))
6141 (sha256
6142 (base32 "0rahm1j9danv1l6i6as80acwv16ycihxkhrvwjiqh9drxhk5ymmd"))))
6143 (build-system pyproject-build-system)
6144 (native-inputs
6145 (list python-pytest python-setuptools python-wheel))
6146 (propagated-inputs
6147 (list python-h11))
6148 (home-page "https://github.com/python-hyper/wsproto/")
6149 (synopsis "WebSockets state-machine based protocol implementation")
6150 (description
6151 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
6152stack. It's written from the ground up to be embeddable in whatever program you
6153choose to use, ensuring that you can communicate via WebSockets, as defined in
6154RFC6455, regardless of your programming paradigm.")
6155 (license license:expat)))
6156
6157(define-public hypercorn
6158 (package
6159 (name "hypercorn")
6160 (version "0.18.0")
6161 (source
6162 (origin
6163 (method git-fetch) ;PyPI does not have tests
6164 (uri (git-reference
6165 (url "https://github.com/pgjones/hypercorn")
6166 (commit version)))
6167 (file-name (git-file-name name version))
6168 (sha256
6169 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
6170 (build-system pyproject-build-system)
6171 ;; Propagate because Hypercorn also exposes functionality over a module.
6172 (propagated-inputs (list python-h11
6173 python-h2
6174 python-priority
6175 python-tomli
6176 python-wsproto))
6177 (native-inputs (list nss-certs-for-test
6178 python-httpx
6179 python-pdm-backend
6180 python-poetry-core
6181 python-pytest
6182 python-pytest-asyncio
6183 python-pytest-trio
6184 python-trio))
6185 (home-page "https://gitlab.com/pgjones/hypercorn/")
6186 (synopsis "ASGI Server based on Hyper libraries")
6187 (description
6188 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
6189wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
6190WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
6191can utilise asyncio, uvloop, or trio worker types.")
6192 (license license:expat)))
6193
6194(define-public python-querystring-parser
6195 (package
6196 (name "python-querystring-parser")
6197 (version "1.2.4")
6198 (source
6199 (origin
6200 (method git-fetch)
6201 (uri (git-reference
6202 (url "https://github.com/bernii/querystring-parser")
6203 (commit version)))
6204 (file-name (git-file-name name version))
6205 (sha256
6206 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
6207 (build-system pyproject-build-system)
6208 (arguments
6209 (list
6210 #:test-backend #~'custom
6211 #:test-flags #~(list "querystring_parser/tests.py")
6212 #:phases
6213 #~(modify-phases %standard-phases
6214 (add-after 'unpack 'fix-python-incompatibilities
6215 (lambda _
6216 (substitute* "querystring_parser/tests.py"
6217 ;; XXX FIXME: This test is broken with Python 3.7:
6218 ;; https://github.com/bernii/querystring-parser/issues/35
6219 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
6220 "True")
6221 ;; Removed in Python 3.12.
6222 (("assertEquals")
6223 "assertEqual")))))))
6224 (native-inputs (list python-setuptools))
6225 (propagated-inputs (list python-six))
6226 (home-page "https://github.com/bernii/querystring-parser")
6227 (synopsis "QueryString parser that correctly handles nested dictionaries")
6228 (description
6229 "This package provides a query string parser for Python and Django
6230projects that correctly creates nested dictionaries from sent form/querystring
6231data.")
6232 (license license:expat)))
6233
6234(define-public python-tornado
6235 (package
6236 (name "python-tornado")
6237 (version "6.4.2")
6238 (source
6239 (origin
6240 (method url-fetch)
6241 (uri (pypi-uri "tornado" version))
6242 (sha256
6243 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
6244 (build-system pyproject-build-system)
6245 (arguments
6246 (list
6247 #:test-flags
6248 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
6249 #~(list "--ignore=tornado/test/iostream_test.py")))
6250 (native-inputs
6251 (list python-certifi
6252 python-pytest
6253 python-setuptools))
6254 (home-page "https://www.tornadoweb.org/")
6255 (synopsis "Python web framework and asynchronous networking library")
6256 (description
6257 "Tornado is a Python web framework and asynchronous networking library,
6258originally developed at FriendFeed. By using non-blocking network I/O,
6259Tornado can scale to tens of thousands of open connections, making it ideal
6260for long polling, WebSockets, and other applications that require a long-lived
6261connection to each user.")
6262 (license license:asl2.0)))
6263
6264;; XXX: Deprecated on <2026-01-23>.
6265(define-deprecated-package python-tornado-6 python-tornado)
6266
6267(define-public python-tornado-http-auth
6268 (package
6269 (name "python-tornado-http-auth")
6270 (version "1.1.1")
6271 (source
6272 (origin
6273 (method git-fetch)
6274 (uri (git-reference
6275 (url "https://github.com/gvalkov/tornado-http-auth")
6276 (commit (string-append "v" version))))
6277 (file-name (git-file-name name version))
6278 (sha256
6279 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
6280 (build-system pyproject-build-system)
6281 ;; XXX: This version is incompatible with current tornado.testing.
6282 (arguments (list #:tests? #f))
6283 (native-inputs (list python-setuptools))
6284 (propagated-inputs (list python-tornado))
6285 (home-page "https://github.com/gvalkov/tornado-http-auth")
6286 (synopsis "Digest and basic authentication module for Tornado")
6287 (description
6288 "Provides support for adding authentication to services using the Tornado
6289web framework, either via the basic or digest authentication schemes.")
6290 (license license:asl2.0)))
6291
6292(define-public python-wsgi-intercept
6293 (package
6294 (name "python-wsgi-intercept")
6295 (version "1.13.1")
6296 (source (origin
6297 (method url-fetch)
6298 (uri (pypi-uri "wsgi_intercept" version))
6299 (sha256
6300 (base32
6301 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
6302 (build-system pyproject-build-system)
6303 (arguments
6304 (list
6305 ;; XXX: tests required internet access
6306 #:tests? #f))
6307 (propagated-inputs
6308 (list python-six))
6309 (native-inputs
6310 (list python-httplib2
6311 python-pytest
6312 python-requests
6313 python-setuptools
6314 python-urllib3
6315 python-wheel))
6316 (synopsis "Puts a WSGI application in place of a real URI for testing")
6317 (description "Wsgi_intercept installs a WSGI application in place of a real
6318URI for testing. Testing a WSGI application normally involves starting a
6319server at a local host and port, then pointing your test code to that address.
6320Instead, this library lets you intercept calls to any specific host/port
6321combination and redirect them into a WSGI application importable by your test
6322program. Thus, you can avoid spawning multiple processes or threads to test
6323your Web app.")
6324 (home-page "https://github.com/cdent/wsgi-intercept")
6325 (license license:expat)))
6326
6327(define-public python-webob
6328 (package
6329 (name "python-webob")
6330 (version "1.8.9")
6331 (source
6332 (origin
6333 (method url-fetch)
6334 (uri (pypi-uri "webob" version))
6335 (sha256
6336 (base32
6337 "12b5sl10yzzzz3g11kij3rdzk9y6583ywggc6h9nsxmnxpi7hq5d"))))
6338 (build-system pyproject-build-system)
6339 ;; tests: 2380 passed, 9 skipped, 1 xfailed, 12 warnings
6340 (native-inputs
6341 (list python-pytest
6342 python-setuptools))
6343 (home-page "https://webob.org/")
6344 (synopsis "WSGI request and response object")
6345 (description
6346 "WebOb provides wrappers around the WSGI request environment, and an
6347object to help create WSGI responses.")
6348 (license license:expat)))
6349
6350(define-public python-yewtube-search
6351 (package
6352 (name "python-yewtube-search")
6353 ;; Original repository for python-youtube-search package is archived, see:
6354 ;; <https://github.com/alexmercerind/youtube-search-python/issues/189>.
6355 ;; The most promising fork was
6356 ;; <https://github.com/ahmedayyad-dev/youtube-search-python-fork> which is
6357 ;; archived since <2026-04-04>. This is another fork with a different PyPI
6358 ;; name for python-yewtube.
6359 (version "1.6.7")
6360 (source
6361 (origin
6362 (method url-fetch)
6363 (uri (pypi-uri "yewtube_search_python" version))
6364 (sha256
6365 (base32 "0vjh4wrlqx4lv9qi6572jx2d0rsp6gkvaqf0f2ar4npdz0ldgl47"))))
6366 (build-system pyproject-build-system)
6367 (arguments (list #:tests? #f)) ;no tests in repository
6368 (native-inputs
6369 (list python-setuptools))
6370 (propagated-inputs
6371 (list python-httpx))
6372 (home-page "https://github.com/iamtalhaasghar/youtube-search-python")
6373 (synopsis "Search for YouTube videos, channels & playlists")
6374 (description
6375 "This package provides tools to search for @code{YouTube} videos,
6376channels and playlists; as well as getting video metadata from links. This
6377package does not rely on the @code{YouTube} Data API v3.")
6378 (license license:expat)))
6379
6380(define-public python-zc-lockfile
6381 (package
6382 (name "python-zc-lockfile")
6383 (version "4.0")
6384 (source
6385 (origin
6386 (method git-fetch)
6387 (uri (git-reference
6388 (url "https://github.com/zopefoundation/zc.lockfile")
6389 (commit version)))
6390 (file-name (git-file-name name version))
6391 (sha256
6392 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
6393 (build-system pyproject-build-system)
6394 (arguments
6395 (list
6396 #:phases
6397 #~(modify-phases %standard-phases
6398 (replace 'check
6399 (lambda* (#:key tests? #:allow-other-keys)
6400 (if tests?
6401 (invoke "zope-testrunner" "--test-path=src")
6402 (format #t "test suite not run~%")))))))
6403 (native-inputs (list python-zope-testing python-zope-testrunner
6404 python-setuptools))
6405 (home-page "https://github.com/zopefoundation/zc.lockfile")
6406 (synopsis "Interprocess locks using lock files")
6407 (description
6408 "This package provides an implementation of interprocess locks using lock
6409files. These locks can also be used to mediate access to other files.")
6410 (license license:zpl2.1)))
6411
6412(define-public python-zconfig
6413 (package
6414 (name "python-zconfig")
6415 (version "4.3")
6416 (source
6417 (origin
6418 (method git-fetch)
6419 (uri (git-reference
6420 (url "https://github.com/zopefoundation/ZConfig/")
6421 (commit version)))
6422 (file-name (git-file-name name version))
6423 (sha256
6424 (base32 "06c4vffk51fw03q87r31s81b0xbxg2qqvjfmcl2z4hg21fr088c2"))))
6425 (build-system pyproject-build-system)
6426 (arguments
6427 (list
6428 #:phases
6429 #~(modify-phases %standard-phases
6430 (replace 'check
6431 (lambda* (#:key tests? #:allow-other-keys)
6432 (if tests?
6433 (begin
6434 ;; This test assumes we still have setup.py in the
6435 ;; directory from which we import zconfig, which
6436 ;; does not work after installing the package.
6437 (delete-file-recursively
6438 "src/ZConfig/tests/test_readme.py")
6439 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
6440 (format #t "test suite not run~%")))))))
6441 (native-inputs (list python-docutils python-manuel python-zope-exceptions
6442 python-zope-testrunner python-setuptools))
6443 (home-page "https://github.com/zopefoundation/ZConfig/")
6444 (synopsis "Structured configuration library intended for general use")
6445 (description
6446 "@code{zconfig} is a configuration library intended for general use. It
6447supports a hierarchical schema-driven configuration model that allows a schema
6448to specify data conversion routines written in Python. Its model is very
6449different from the model supported by the @code{configparser} module found in
6450Python's standard library, and is more suitable to configuration-intensive
6451applications.")
6452 (license license:zpl2.1)))
6453
6454(define-public python-zodb
6455 (package
6456 (name "python-zodb")
6457 (version "6.0.1")
6458 (source
6459 (origin
6460 (method url-fetch)
6461 (uri (pypi-uri "zodb" version))
6462 (sha256
6463 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
6464 (build-system pyproject-build-system)
6465 (arguments
6466 (list
6467 #:phases
6468 #~(modify-phases %standard-phases
6469 (replace 'check
6470 (lambda* (#:key tests? #:allow-other-keys)
6471 (if tests?
6472 (begin
6473 ;; This test does not work after installing the
6474 ;; package, since it expects the ZODB source code
6475 ;; to reside in the src/ directory.
6476 (delete-file-recursively
6477 "src/ZODB/tests/testdocumentation.py")
6478 (invoke "zope-testrunner" "-vv" "--test-path=src"
6479 "--all"))
6480 (format #t "test suite not run~%")))))))
6481 (native-inputs
6482 (list python-manuel
6483 python-wheel
6484 python-zope-testing
6485 python-zope-testrunner))
6486 (propagated-inputs
6487 (list python-btrees
6488 python-persistent
6489 python-transaction
6490 python-zc-lockfile
6491 python-zconfig
6492 python-zodbpickle
6493 python-zope-interface))
6494 (home-page "http://zodb-docs.readthedocs.io")
6495 (synopsis "Object-oriented database for Python")
6496 (description
6497 "@code{ZODB} provides an object-oriented and @acronym{ACID,
6498Atomicity Consistency Isolation Durability} compliant database for Python with
6499a high degree of transparency. @code{ZODB} is an object-oriented database,
6500not an object-relational mapping. This comes with several advantaged:
6501
6502@itemize
6503@item no separate language for database operations
6504@item very little impact on your code to make objects persistent
6505@item no database mapper that partially hides the database.
6506@item almost no seam between code and database.
6507@end itemize")
6508 (license license:zpl2.1)))
6509
6510(define-public python-zodbpickle
6511 (package
6512 (name "python-zodbpickle")
6513 (version "3.2")
6514 (source
6515 (origin
6516 (method url-fetch)
6517 (uri (pypi-uri "zodbpickle" version))
6518 (sha256
6519 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
6520 (build-system pyproject-build-system)
6521 (arguments
6522 '(#:phases (modify-phases %standard-phases
6523 (replace 'check
6524 (lambda* (#:key tests? #:allow-other-keys)
6525 (if tests?
6526 (invoke "zope-testrunner" "-vv" "--test-path=src"
6527 "--all")
6528 (format #t "test suite not run~%")))))))
6529 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
6530 (home-page "https://github.com/zopefoundation/zodbpickle")
6531 (synopsis "Uniform pickling interface for @code{zodb}")
6532 (description
6533 "This package is a fork of the @code{pickle} module (and the
6534supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
6535support for the @code{noload} operations used by @code{zodb}.")
6536 (license (list license:psfl license:zpl2.1))))
6537
6538(define-public python-zope-dottedname
6539 (package
6540 (name "python-zope-dottedname")
6541 (version "7.0")
6542 (source
6543 (origin
6544 (method git-fetch)
6545 (uri (git-reference
6546 (url "https://github.com/zopefoundation/zope.dottedname")
6547 (commit version)))
6548 (file-name (git-file-name name version))
6549 (sha256
6550 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
6551 (build-system pyproject-build-system)
6552 (arguments
6553 (list #:test-backend #~'custom
6554 #:test-flags #~(list "src/zope/dottedname/tests.py")))
6555 (native-inputs (list python-setuptools))
6556 (home-page "https://zopedottedname.readthedocs.io")
6557 (synopsis "Resolver for Python dotted names")
6558 (description
6559 "This package provides a @code{resolve()} function that resolves strings
6560containing dotted names into the appropriate Python object.")
6561 (license license:zpl2.1)))
6562
6563(define-public python-zope-event
6564 (package
6565 (name "python-zope-event")
6566 (version "6.0")
6567 (source
6568 (origin
6569 (method git-fetch)
6570 (uri (git-reference
6571 (url "https://github.com/zopefoundation/zope.event")
6572 (commit version)))
6573 (file-name (git-file-name name version))
6574 (sha256
6575 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
6576 (build-system pyproject-build-system)
6577 (arguments
6578 (list
6579 #:test-flags
6580 #~(list "src/zope/event/tests.py")))
6581 (native-inputs (list python-pytest python-setuptools))
6582 (home-page "https://zopeevent.readthedocs.io/en/latest/")
6583 (synopsis "Event publishing system for Python")
6584 (description
6585 "Zope.event provides an event publishing API, intended for use by
6586applications which are unaware of any subscribers to their events. It is a
6587simple event-dispatching system on which more sophisticated event dispatching
6588systems can be built.")
6589 (license license:zpl2.1)))
6590
6591(define-public python-zope-interface
6592 (package
6593 (name "python-zope-interface")
6594 (version "7.2")
6595 (source
6596 (origin
6597 (method git-fetch)
6598 (uri (git-reference
6599 (url "https://github.com/zopefoundation/zope.interface")
6600 (commit version)))
6601 (file-name (git-file-name name version))
6602 (sha256
6603 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
6604 (build-system pyproject-build-system)
6605 (arguments
6606 ;; XXX: test suite can't find python-zope-testing
6607 (list #:tests? #f))
6608 (native-inputs (list python-setuptools))
6609 (home-page "https://zopeinterface.readthedocs.io")
6610 (synopsis "\"Design by contract\" methodology in Python")
6611 (description
6612 "Zope.interface provides an implementation of \"object interfaces\" for
6613Python. Interfaces are a mechanism for labeling objects as conforming to a
6614given API or contract.")
6615 (license license:zpl2.1)))
6616
6617(define-public python-zope-exceptions
6618 (package
6619 (name "python-zope-exceptions")
6620 (version "6.0")
6621 (source
6622 (origin
6623 (method git-fetch)
6624 (uri (git-reference
6625 (url "https://github.com/zopefoundation/zope.exceptions")
6626 (commit version)))
6627 (file-name (git-file-name name version))
6628 (sha256
6629 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
6630 (build-system pyproject-build-system)
6631 (arguments
6632 (list
6633 #:phases
6634 #~(modify-phases %standard-phases
6635 (replace 'check
6636 (lambda* (#:key tests? #:allow-other-keys)
6637 (if tests?
6638 (invoke "zope-testrunner" "--test-path=src")
6639 (format #t "test suite not run~%")))))))
6640 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
6641 (propagated-inputs (list python-zope-interface))
6642 (home-page "https://github.com/zopefoundation/zope.exceptions")
6643 (synopsis "Zope exceptions")
6644 (description
6645 "Zope.exceptions provides general-purpose exception types that have uses
6646outside of the Zope framework.")
6647 (license license:zpl2.1)))
6648
6649(define (python-zope-bootstrap-package orig)
6650 (package
6651 (inherit orig)
6652 (name (string-append (package-name orig) "-bootstrap"))
6653 (arguments
6654 (if (null? (package-arguments orig))
6655 (list
6656 #:tests? #f
6657 #:phases #~(modify-phases %standard-phases
6658 (delete 'sanity-check)))
6659 (substitute-keyword-arguments arguments
6660 ((#:tests? _ #f) #f)
6661 ((#:phases phases '%standard-phases)
6662 #~(modify-phases #$phases
6663 (delete 'sanity-check))))))
6664 (propagated-inputs `())
6665 (native-inputs (list python-setuptools))
6666 (properties `((hidden? . #t)))))
6667
6668(define-public python-zope-exceptions-bootstrap
6669 (python-zope-bootstrap-package python-zope-exceptions))
6670
6671(define-public python-zope-testing
6672 (package
6673 (name "python-zope-testing")
6674 (version "6.0")
6675 (source
6676 (origin
6677 (method git-fetch)
6678 (uri (git-reference
6679 (url "https://github.com/zopefoundation/zope.testing")
6680 (commit version)))
6681 (file-name (git-file-name name version))
6682 (sha256
6683 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
6684 (build-system pyproject-build-system)
6685 (arguments
6686 (list
6687 #:phases
6688 #~(modify-phases %standard-phases
6689 (replace 'check
6690 (lambda* (#:key tests? #:allow-other-keys)
6691 (if tests?
6692 (invoke "zope-testrunner" "--test-path=src")
6693 (format #t "test suite not run~%")))))))
6694 (native-inputs (list python-setuptools
6695 python-zope-interface
6696 python-zope-testrunner-bootstrap))
6697 (home-page "https://zopetesting.readthedocs.io/")
6698 (synopsis "Zope testing helpers")
6699 (description
6700 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
6701servers, regular expressions, and more.")
6702 (license license:zpl2.1)))
6703
6704(define-public python-zope-testrunner
6705 (package
6706 (name "python-zope-testrunner")
6707 (version "7.4")
6708 (source
6709 (origin
6710 (method git-fetch)
6711 (uri (git-reference
6712 (url "https://github.com/zopefoundation/zope.testrunner")
6713 (commit version)))
6714 (file-name (git-file-name name version))
6715 (sha256
6716 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
6717 (build-system pyproject-build-system)
6718 (arguments
6719 (list
6720 #:phases
6721 #~(modify-phases %standard-phases
6722 (add-after 'unpack 'remove-problematic-test
6723 (lambda _
6724 ;; This test contains invalid syntax, which breaks bytecode
6725 ;; compilation. For simplicity just remove it.
6726 (delete-file
6727 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
6728 (replace 'check
6729 (lambda* (#:key tests? #:allow-other-keys)
6730 (if tests?
6731 (invoke "zope-testrunner" "--test-path=src")
6732 (format #t "test suite not run~%")))))))
6733 (native-inputs (list python-setuptools python-zope-testing))
6734 (propagated-inputs (list python-zope-exceptions python-zope-interface))
6735 (home-page "https://zopetestrunner.readthedocs.io")
6736 (synopsis "Zope testrunner script")
6737 (description "This package provides a script for running Python tests.")
6738 (license license:zpl2.1)))
6739
6740(define-public python-zope-testrunner-bootstrap
6741 (package
6742 (inherit (python-zope-bootstrap-package python-zope-testrunner))
6743 (propagated-inputs
6744 (list python-six python-zope-exceptions-bootstrap))
6745 (properties `((hidden? . #t)))))
6746
6747(define-public python-zope-i18nmessageid
6748 (package
6749 (name "python-zope-i18nmessageid")
6750 (version "7.0")
6751 (source
6752 (origin
6753 (method git-fetch)
6754 (uri (git-reference
6755 (url "https://github.com/zopefoundation/zope.i18nmessageid")
6756 (commit version)))
6757 (file-name (git-file-name name version))
6758 (sha256
6759 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
6760 (build-system pyproject-build-system)
6761 (arguments
6762 (list
6763 #:phases
6764 #~(modify-phases %standard-phases
6765 (replace 'check
6766 (lambda* (#:key tests? #:allow-other-keys)
6767 (if tests?
6768 (invoke "zope-testrunner" "--test-path=src")
6769 (format #t "test suite not run~%")))))))
6770 (native-inputs (list python-setuptools python-zope-testrunner))
6771 (home-page "https://zopei18nmessageid.readthedocs.io")
6772 (synopsis "Message identifiers for internationalization")
6773 (description "Zope.i18nmessageid provides facilities for declaring
6774internationalized messages within program source text.")
6775 (license license:zpl2.1)))
6776
6777(define-public python-zope-schema
6778 (package
6779 (name "python-zope-schema")
6780 (version "7.0.1")
6781 (source
6782 (origin
6783 (method git-fetch)
6784 (uri (git-reference
6785 (url "https://github.com/zopefoundation/zope.schema")
6786 (commit version)))
6787 (file-name (git-file-name name version))
6788 (sha256
6789 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
6790 (build-system pyproject-build-system)
6791 (arguments
6792 (list
6793 #:phases
6794 #~(modify-phases %standard-phases
6795 (replace 'check
6796 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6797 (add-installed-pythonpath inputs outputs)
6798 (if tests?
6799 (invoke "zope-testrunner" "--test-path=src")
6800 (format #t "test suite not run.~%")))))))
6801 (propagated-inputs (list python-zope-event python-zope-interface))
6802 (native-inputs (list python-zope-i18nmessageid python-zope-testing
6803 python-zope-testrunner python-setuptools))
6804 (home-page "https://zopeschema.readthedocs.io")
6805 (synopsis "Zope data schemas")
6806 (description "Zope.scheme provides extensions to zope.interface for
6807defining data schemas.")
6808 (license license:zpl2.1)))
6809
6810(define-public python-zope-sqlalchemy
6811 (package
6812 (name "python-zope-sqlalchemy")
6813 (version "1.6")
6814 (source
6815 (origin
6816 (method git-fetch)
6817 (uri (git-reference
6818 (url "https://github.com/zopefoundation/zope.sqlalchemy")
6819 (commit version)))
6820 (file-name (git-file-name name version))
6821 (sha256
6822 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
6823 (build-system pyproject-build-system)
6824 (arguments
6825 (list
6826 #:phases
6827 #~(modify-phases %standard-phases
6828 (replace 'check
6829 (lambda* (#:key tests? #:allow-other-keys)
6830 (if tests?
6831 (invoke "zope-testrunner" "--test-path=src")
6832 (format #t "test suite not run~%")))))))
6833 (propagated-inputs (list python-sqlalchemy python-transaction
6834 python-zope-interface))
6835 (native-inputs (list python-zope-testing python-zope-testrunner
6836 python-setuptools))
6837 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
6838 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
6839 (description
6840 "The aim of this package is to unify the plethora of existing packages
6841integrating SQLAlchemy with Zope's transaction management. As such,it only
6842provides a data manager and makes no attempt to define a @i{zopeish} way to
6843configure engines.")
6844 (license license:zpl2.1)))
6845
6846(define-public python-zope-configuration
6847 (package
6848 (name "python-zope-configuration")
6849 (version "7.0")
6850 (source
6851 (origin
6852 (method git-fetch)
6853 (uri (git-reference
6854 (url "https://github.com/zopefoundation/zope.configuration")
6855 (commit version)))
6856 (file-name (git-file-name name version))
6857 (sha256
6858 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
6859 (build-system pyproject-build-system)
6860 (arguments
6861 (list
6862 #:phases
6863 #~(modify-phases %standard-phases
6864 (replace 'check
6865 (lambda* (#:key tests? #:allow-other-keys)
6866 (if tests?
6867 (invoke "zope-testrunner" "--test-path=src")
6868 (format #t "test suite not run~%")))))))
6869 (native-inputs (list python-manuel python-setuptools python-zope-testing
6870 python-zope-testrunner))
6871 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
6872 python-zope-schema))
6873 (home-page "https://zopeconfiguration.readthedocs.io")
6874 (synopsis "Zope Configuration Markup Language")
6875 (description "Zope.configuration implements ZCML, the Zope Configuration
6876Markup Language.")
6877 (license license:zpl2.1)))
6878
6879(define-public python-zope-configuration-bootstrap
6880 (python-zope-bootstrap-package python-zope-configuration))
6881
6882(define-public python-zope-copy
6883 (package
6884 (name "python-zope-copy")
6885 (version "6.0")
6886 (source
6887 (origin
6888 (method git-fetch)
6889 (uri (git-reference
6890 (url "https://github.com/zopefoundation/zope.copy")
6891 (commit version)))
6892 (file-name (git-file-name name version))
6893 (sha256
6894 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
6895 (build-system pyproject-build-system)
6896 (arguments
6897 (list
6898 #:phases
6899 #~(modify-phases %standard-phases
6900 (replace 'check
6901 (lambda* (#:key tests? #:allow-other-keys)
6902 (if tests?
6903 (invoke "zope-testrunner" "--test-path=src")
6904 (format #t "test suite not run~%")))))))
6905 (propagated-inputs (list python-zope-interface))
6906 (native-inputs
6907 (list python-zodbpickle
6908 python-zope-component-bootstrap
6909 python-zope-location-bootstrap
6910 python-zope-proxy
6911 python-zope-schema
6912 python-zope-testing
6913 python-zope-testrunner
6914 python-setuptools))
6915 (home-page "https://zopecopy.readthedocs.io")
6916 (synopsis "Pluggable object copying mechanism")
6917 (description
6918 "This package provides a pluggable mechanism for copying persistent objects.")
6919 (license license:zpl2.1)))
6920
6921(define-public python-zope-proxy
6922 (package
6923 (name "python-zope-proxy")
6924 (version "7.0")
6925 (source
6926 (origin
6927 (method git-fetch)
6928 (uri (git-reference
6929 (url "https://github.com/zopefoundation/zope.proxy")
6930 (commit version)))
6931 (file-name (git-file-name name version))
6932 (sha256
6933 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
6934 (build-system pyproject-build-system)
6935 (arguments
6936 (list
6937 #:phases
6938 #~(modify-phases %standard-phases
6939 (replace 'check
6940 (lambda* (#:key tests? #:allow-other-keys)
6941 (if tests?
6942 (invoke "zope-testrunner" "--test-path=src")
6943 (format #t "test suite not run~%")))))))
6944 (native-inputs
6945 (list python-zope-location-bootstrap
6946 python-zope-security-bootstrap
6947 python-zope-testrunner
6948 python-setuptools))
6949 (propagated-inputs (list python-zope-interface))
6950 (home-page "https://zopeproxy.readthedocs.io")
6951 (synopsis "Generic, transparent proxies")
6952 (description
6953 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
6954special objects which serve as mostly-transparent wrappers around another
6955object, intervening in the apparent behavior of the wrapped object only when
6956necessary to apply the policy (e.g., access checking, location brokering,
6957etc.) for which the proxy is responsible.")
6958 (license license:zpl2.1)))
6959
6960(define-public python-zope-proxy-bootstrap
6961 (python-zope-bootstrap-package python-zope-proxy))
6962
6963(define-public python-zope-hookable
6964 (package
6965 (name "python-zope-hookable")
6966 (version "7.0")
6967 (source
6968 (origin
6969 (method git-fetch)
6970 (uri (git-reference
6971 (url "https://github.com/zopefoundation/zope.hookable")
6972 (commit version)))
6973 (file-name (git-file-name name version))
6974 (sha256
6975 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
6976 (build-system pyproject-build-system)
6977 (arguments
6978 (list
6979 #:phases
6980 #~(modify-phases %standard-phases
6981 (replace 'check
6982 (lambda* (#:key tests? #:allow-other-keys)
6983 (if tests?
6984 (invoke "zope-testrunner" "--test-path=src")
6985 (format #t "test suite not run~%")))))))
6986 (native-inputs (list python-zope-testing python-zope-testrunner
6987 python-setuptools))
6988 (home-page "https://zopehookable.readthedocs.io")
6989 (synopsis "Zope hookable")
6990 (description
6991 "This package supports the efficient creation of hookable objects, which
6992are callable objects that are meant to be optionally replaced. The idea is
6993that you create a function that does some default thing and make i hookable.
6994Later, someone can modify what it does by calling its sethook method and
6995changing its implementation. All users of the function, including those that
6996imported it, will see the change.")
6997 (license license:zpl2.1)))
6998
6999(define-public python-zope-location
7000 (package
7001 (name "python-zope-location")
7002 (version "6.0")
7003 (source
7004 (origin
7005 (method git-fetch)
7006 (uri (git-reference
7007 (url "https://github.com/zopefoundation/zope.location")
7008 (commit version)))
7009 (file-name (git-file-name name version))
7010 (sha256
7011 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
7012 (build-system pyproject-build-system)
7013 (arguments
7014 (list
7015 #:phases
7016 #~(modify-phases %standard-phases
7017 (replace 'check
7018 (lambda* (#:key tests? #:allow-other-keys)
7019 (if tests?
7020 (invoke "zope-testrunner" "--test-path=src")
7021 (format #t "test suite not run~%")))))))
7022 (native-inputs (list python-zope-testrunner python-setuptools))
7023 (propagated-inputs (list python-zope-interface python-zope-proxy
7024 python-zope-schema))
7025 (home-page "https://zopelocation.readthedocs.io")
7026 (synopsis "Zope location library")
7027 (description
7028 "Zope.location implements the concept of \"locations\" in Zope3, which
7029are are special objects that have a structural location.")
7030 (license license:zpl2.1)))
7031
7032(define-public python-zope-location-bootstrap
7033 (python-zope-bootstrap-package python-zope-location))
7034
7035(define-public python-zope-security
7036 (package
7037 (name "python-zope-security")
7038 (version "7.3")
7039 (source
7040 (origin
7041 (method git-fetch)
7042 (uri (git-reference
7043 (url "https://github.com/zopefoundation/zope.security")
7044 (commit version)))
7045 (file-name (git-file-name name version))
7046 (sha256
7047 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
7048 (build-system pyproject-build-system)
7049 (arguments
7050 (list
7051 #:phases
7052 #~(modify-phases %standard-phases
7053 (replace 'check
7054 (lambda* (#:key tests? #:allow-other-keys)
7055 (if tests?
7056 (invoke "zope-testrunner" "--test-path=src")
7057 (format #t "test suite not run~%")))))))
7058 (propagated-inputs
7059 (list python-zope-component
7060 python-zope-i18nmessageid
7061 python-zope-interface
7062 python-zope-location
7063 python-zope-proxy
7064 python-zope-schema))
7065 (native-inputs
7066 (list python-btrees
7067 python-zope-component-bootstrap
7068 python-zope-configuration-bootstrap
7069 python-zope-location-bootstrap
7070 python-zope-testing
7071 python-zope-testrunner
7072 python-setuptools))
7073 (home-page "https://zopesecurity.readthedocs.io")
7074 (synopsis "Zope security framework")
7075 (description "Zope.security provides a generic mechanism to implement
7076security policies on Python objects.")
7077 (license license:zpl2.1)))
7078
7079(define-public python-zope-security-bootstrap
7080 (package
7081 (inherit (python-zope-bootstrap-package python-zope-security))
7082 (propagated-inputs
7083 (list python-zope-i18nmessageid
7084 python-zope-interface
7085 python-zope-proxy-bootstrap
7086 python-zope-schema))))
7087
7088(define-public python-zope-component
7089 (package
7090 (name "python-zope-component")
7091 (version "7.0")
7092 (source
7093 (origin
7094 (method git-fetch)
7095 (uri (git-reference
7096 (url "https://github.com/zopefoundation/zope.component")
7097 (commit version)))
7098 (file-name (git-file-name name version))
7099 (sha256
7100 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
7101 (build-system pyproject-build-system)
7102 (arguments
7103 (list
7104 #:phases
7105 #~(modify-phases %standard-phases
7106 (replace 'check
7107 (lambda* (#:key tests? #:allow-other-keys)
7108 (if tests?
7109 (invoke "zope-testrunner" "--test-path=src")
7110 (format #t "test suite not run~%")))))))
7111 (native-inputs
7112 (list python-persistent
7113 python-zope-configuration-bootstrap
7114 python-zope-i18nmessageid
7115 python-zope-location-bootstrap
7116 python-zope-proxy-bootstrap
7117 python-zope-security-bootstrap
7118 python-zope-testing
7119 python-zope-testrunner
7120 python-setuptools))
7121 (propagated-inputs
7122 (list python-zope-deferredimport python-zope-deprecation
7123 python-zope-event python-zope-hookable python-zope-interface))
7124 (home-page "https://zopecomponent.readthedocs.io")
7125 (synopsis "Zope Component Architecture")
7126 (description
7127 "Zope.component represents the core of the Zope Component Architecture.
7128Together with the zope.interface package, it provides facilities for defining,
7129registering and looking up components.")
7130 (license license:zpl2.1)))
7131
7132(define-public python-zope-component-bootstrap
7133 (python-zope-bootstrap-package python-zope-component))
7134
7135(define-public python-zope-deferredimport
7136 (package
7137 (name "python-zope-deferredimport")
7138 (version "6.0")
7139 (source
7140 (origin
7141 (method git-fetch)
7142 (uri (git-reference
7143 (url "https://github.com/zopefoundation/zope.deferredimport")
7144 (commit version)))
7145 (file-name (git-file-name name version))
7146 (sha256
7147 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
7148 (build-system pyproject-build-system)
7149 (arguments
7150 (list
7151 #:phases
7152 #~(modify-phases %standard-phases
7153 (replace 'check
7154 (lambda* (#:key tests? #:allow-other-keys)
7155 (if tests?
7156 (invoke "zope-testrunner" "--test-path=src")
7157 (format #t "test suite not run~%")))))))
7158 (propagated-inputs (list python-zope-proxy))
7159 (native-inputs (list python-zope-testrunner python-setuptools))
7160 (home-page "https://zopedeferredimport.readthedocs.io")
7161 (synopsis "Defer imports until used by code")
7162 (description
7163 "Often, especially for package modules, you want to import names for
7164convenience, but not actually perform the imports until necessary. The
7165@code{zope.deferredimport} package provided facilities for defining names in
7166modules that will be imported from somewhere else when used. You can also cause
7167deprecation warnings to be issued when a variable is used.")
7168 (license license:zpl2.1)))
7169
7170(define-public python-ndg-httpsclient
7171 (package
7172 (name "python-ndg-httpsclient")
7173 (version "0.5.1")
7174 (source
7175 (origin
7176 (method git-fetch)
7177 (uri (git-reference
7178 (url "https://github.com/cedadev/ndg_httpsclient/")
7179 (commit version)))
7180 (file-name (git-file-name name version))
7181 (sha256
7182 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
7183 (build-system pyproject-build-system)
7184 (arguments
7185 (list
7186 #:tests? #f)) ;Tests appear to require networking.
7187 (native-inputs (list python-setuptools))
7188 (propagated-inputs (list python-pyasn1 python-pyopenssl))
7189 (synopsis "HTTPS support for Python's httplib and urllib2")
7190 (description
7191 "This is a HTTPS client implementation for httplib and urllib2 based on
7192PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
7193the default provided with Python and, importantly, enables full verification
7194of the SSL peer.")
7195 (home-page "https://github.com/cedadev/ndg_httpsclient/")
7196 (license license:bsd-3)))
7197
7198(define-public python-netaddr
7199 (package
7200 (name "python-netaddr")
7201 (version "1.3.0")
7202 (source
7203 (origin
7204 (method url-fetch)
7205 (uri (pypi-uri "netaddr" version))
7206 (sha256
7207 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
7208 (build-system pyproject-build-system)
7209 (native-inputs (list python-poetry-core
7210 python-pytest
7211 python-setuptools
7212 python-wheel))
7213 (home-page "https://netaddr.readthedocs.io")
7214 (synopsis "Pythonic manipulation of network addresses")
7215 (description
7216 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
7217and MAC network addresses.")
7218 (license license:bsd-3)))
7219
7220(define-public python-nh3
7221 (package
7222 (name "python-nh3")
7223 (version "0.2.20")
7224 (source
7225 (origin
7226 (method url-fetch)
7227 (uri (pypi-uri "nh3" version))
7228 (sha256
7229 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
7230 (build-system pyproject-build-system)
7231 (arguments
7232 (list
7233 #:imported-modules `(,@%cargo-build-system-modules
7234 ,@%pyproject-build-system-modules)
7235 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
7236 (guix build pyproject-build-system)
7237 (guix build utils))
7238 #:phases
7239 #~(modify-phases %standard-phases
7240 (add-after 'unpack 'prepare-cargo-build-system
7241 (lambda args
7242 (for-each
7243 (lambda (phase)
7244 (format #t "Running cargo phase: ~a~%" phase)
7245 (apply (assoc-ref cargo:%standard-phases phase)
7246 #:cargo-target #$(cargo-triplet)
7247 args))
7248 '(unpack-rust-crates
7249 configure
7250 check-for-pregenerated-files
7251 patch-cargo-checksums)))))))
7252 (native-inputs
7253 (append
7254 (list maturin python-pytest rust `(,rust "cargo"))
7255 (or (and=> (%current-target-system)
7256 (compose list make-rust-sysroot))
7257 '())))
7258 (inputs (cargo-inputs 'python-nh3))
7259 (home-page "https://nh3.readthedocs.io")
7260 (synopsis "Python bindings to Ammonia HTML sanitization library")
7261 (description "This package provides Python bindings to Ammonia HTML
7262sanitizer Rust crate.")
7263 (license license:expat)))
7264
7265(define-public python-noiseprotocol
7266 (package
7267 (name "python-noiseprotocol")
7268 (version "0.3.1")
7269 (source
7270 (origin
7271 (method git-fetch)
7272 (uri (git-reference
7273 (url "https://github.com/plizonczyk/noiseprotocol")
7274 (commit (string-append "v" version))))
7275 (file-name (git-file-name name version))
7276 (sha256
7277 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
7278 (build-system pyproject-build-system)
7279 (propagated-inputs (list python-cryptography))
7280 (native-inputs (list python-setuptools python-pytest))
7281 (home-page "https://github.com/plizonczyk/noiseprotocol")
7282 (synopsis "Implementation of Noise Protocol Framework")
7283 (description
7284 "This package provides an implementation of Noise Protocol Framework.")
7285 (license license:expat)))
7286
7287(define-public python-webrtcvad-wheels
7288 (package
7289 (name "python-webrtcvad-wheels")
7290 (version "2.0.14")
7291 (source
7292 (origin
7293 (method git-fetch)
7294 (uri (git-reference
7295 (url "https://github.com/daanzu/py-webrtcvad-wheels")
7296 (commit (string-append "v" version))))
7297 (file-name (git-file-name name version))
7298 (sha256
7299 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
7300 (build-system pyproject-build-system)
7301 (native-inputs (list python-psutil python-pytest python-setuptools))
7302 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
7303 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
7304 (description
7305 "This package provides a Python interface to the Google
7306@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
7307 (license license:expat)))
7308
7309(define-public python-websocket-client
7310 (package
7311 (name "python-websocket-client")
7312 (version "1.8.0")
7313 (source
7314 (origin
7315 (method url-fetch)
7316 (uri (pypi-uri "websocket_client" version))
7317 (sha256
7318 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
7319 (build-system pyproject-build-system)
7320 (arguments
7321 (list
7322 #:test-flags
7323 ;; This test requires networking.
7324 '(list "-k" "not testConnect")))
7325 (native-inputs
7326 (list python-pysocks
7327 python-pytest
7328 python-setuptools
7329 python-websockets
7330 python-wheel))
7331 (home-page "https://github.com/websocket-client/websocket-client")
7332 (synopsis "WebSocket client for Python")
7333 (description "The Websocket-client module provides the low level APIs for
7334WebSocket usage in Python programs.")
7335 (license license:lgpl2.1+)))
7336
7337(define-public python-websocket-client-0.59
7338 (package
7339 (inherit python-websocket-client)
7340 (version "0.59.0")
7341 (source
7342 (origin
7343 (method url-fetch)
7344 (uri (pypi-uri "websocket-client" version))
7345 (sha256
7346 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
7347 (native-inputs
7348 (modify-inputs native-inputs
7349 (append python-six)))))
7350
7351(define-public python-purl
7352 (package
7353 (name "python-purl")
7354 (version "1.6")
7355 (source
7356 (origin
7357 (method git-fetch)
7358 (uri (git-reference
7359 (url "https://github.com/codeinthehole/purl")
7360 (commit version)))
7361 (file-name (git-file-name name version))
7362 (sha256
7363 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
7364 (build-system pyproject-build-system)
7365 (arguments
7366 (list
7367 #:test-flags #~(list "--pyargs" "./tests")))
7368 (native-inputs (list python-pytest python-setuptools))
7369 (propagated-inputs (list python-six))
7370 (home-page "https://github.com/codeinthehole/purl")
7371 (synopsis "Python package for URL manipulation")
7372 (description "Purl is a Python package for handling URLs.")
7373 (license license:expat)))
7374
7375(define-public python-apiron
7376 (package
7377 (name "python-apiron")
7378 (version "5.1.0")
7379 (source
7380 (origin
7381 (method url-fetch)
7382 (uri (pypi-uri "apiron" version))
7383 (sha256
7384 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
7385 (build-system pyproject-build-system)
7386 (arguments
7387 (list #:test-flags '(list "-k" "not test_call")))
7388 (propagated-inputs
7389 (list python-requests))
7390 (native-inputs
7391 (list python-pytest
7392 python-setuptools
7393 python-wheel))
7394 (home-page "https://github.com/ithaka/apiron")
7395 (synopsis "Python wrapper for interacting with RESTful APIs")
7396 (description
7397 "@code{apiron} provides a declarative, structured configuration of
7398services and endpoints with a unified interface for interacting with RESTful
7399APIs.")
7400 (license license:expat)))
7401
7402(define-public python-beren
7403 (package
7404 (name "python-beren")
7405 (version "0.7.0")
7406 (source
7407 (origin
7408 (method git-fetch)
7409 (uri (git-reference
7410 (url "https://github.com/teffalump/beren")
7411 (commit (string-append "v" version))))
7412 (file-name (git-file-name name version))
7413 (sha256
7414 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
7415 (build-system pyproject-build-system)
7416 (arguments
7417 ;; The test tries to open a connection to a remote server.
7418 `(#:tests? #f))
7419 (native-inputs (list python-setuptools))
7420 (propagated-inputs (list python-apiron))
7421 (home-page "https://github.com/teffalump/beren")
7422 (synopsis "REST client for Orthanc DICOM servers")
7423 (description
7424 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
7425 (license license:gpl3+)))
7426
7427(define-public python-requests
7428 (package
7429 (name "python-requests")
7430 (version "2.32.5")
7431 (source (origin
7432 (method url-fetch)
7433 (uri (pypi-uri "requests" version))
7434 (sha256
7435 (base32
7436 "1kypqz701x9s7j4shm1pdnzy4pzx9lmvhwgan0yqa071asn0pfnv"))))
7437 (build-system pyproject-build-system)
7438 (arguments
7439 (list #:test-flags
7440 ;; These require internet access
7441 '(list "--ignore=tests/test_requests.py"
7442 "-k" (string-append "not test_use_proxy_from_environment"
7443 " and not requests.sessions.Session"
7444 " and not requests.models.PreparedRequest"
7445 " and not requests.api.request")
7446 "tests/")))
7447 (propagated-inputs
7448 (list python-certifi
7449 python-charset-normalizer
7450 python-idna
7451 python-urllib3))
7452 (native-inputs
7453 (list python-pytest
7454 python-pytest-mock
7455 python-setuptools))
7456 (home-page "https://requests.readthedocs.io/")
7457 (synopsis "Python HTTP library")
7458 (description
7459 "Requests is a Python HTTP client library. It aims to be easier to use
7460than Python’s urllib2 library.")
7461 (license license:asl2.0)))
7462
7463(define-public python-requests-kerberos
7464 (package
7465 (name "python-requests-kerberos")
7466 (version "0.14.0")
7467 ;; No tests in the PyPI tarball.
7468 (source
7469 (origin
7470 (method git-fetch)
7471 (uri (git-reference
7472 (url "https://github.com/requests/requests-kerberos")
7473 (commit (string-append "v" version))))
7474 (file-name (git-file-name name version))
7475 (sha256
7476 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
7477 (build-system pyproject-build-system)
7478 (propagated-inputs (list python-cryptography
7479 python-pyspnego
7480 python-requests))
7481 (native-inputs (list python-pytest python-pytest-mock python-setuptools
7482 python-wheel))
7483 (home-page "https://github.com/requests/requests-kerberos")
7484 (synopsis "Kerberos authentication handler for python-requests")
7485 (description "This package provides a Kerberos authentication handler for
7486python-requests.")
7487 (license license:isc)))
7488
7489(define-public python-requests-unixsocket2
7490 (package
7491 (name "python-requests-unixsocket2")
7492 (version "1.0.1")
7493 (source
7494 (origin
7495 (method git-fetch)
7496 (uri (git-reference
7497 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
7498 (commit (string-append "v" version))))
7499 (sha256
7500 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
7501 (build-system pyproject-build-system)
7502 (native-inputs
7503 (list nss-certs-for-test
7504 python-hatchling
7505 python-pytest
7506 python-waitress))
7507 (propagated-inputs
7508 (list python-requests
7509 python-urllib3))
7510 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
7511 (synopsis "Talk HTTP via a UNIX domain socket")
7512 (description
7513 "This Python package lets you use the @code{requests} library to talk
7514HTTP via a UNIX domain socket.")
7515 (license license:asl2.0)))
7516
7517(define-public python-requests-ntlm
7518 (package
7519 (name "python-requests-ntlm")
7520 (version "1.3.0")
7521 (source
7522 (origin
7523 (method git-fetch)
7524 (uri (git-reference
7525 (url "https://github.com/requests/requests-ntlm")
7526 (commit (string-append "v" version))))
7527 (file-name (git-file-name name version))
7528 (sha256
7529 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
7530 (build-system pyproject-build-system)
7531 (arguments
7532 (list
7533 #:test-flags
7534 ;; XXX: Connection refused.
7535 #~(list "-k" (string-join
7536 (list "not test_ntlm_http_with_cbt"
7537 "test_ntlm_http_without_cbt"
7538 "test_ntlm_https_with_cbt"
7539 "test_ntlm_https_without_cbt")
7540 " and not "))
7541 #:phases
7542 #~(modify-phases %standard-phases
7543 (add-before 'check 'spawn-test-server
7544 (lambda _
7545 ;; Taken from .github/workflows/ci.yml.
7546 (spawn "python"
7547 (list "python" "-m" "tests.test_server")))))))
7548 (propagated-inputs
7549 (list python-cryptography python-pyspnego python-requests))
7550 (native-inputs (list python-flask python-pytest python-setuptools))
7551 (home-page "https://github.com/requests/requests-ntlm")
7552 (synopsis "NTLM authentication support for Requests")
7553 (description
7554 "This package allows for HTTP NTLM authentication using the requests
7555library.")
7556 (license license:isc)))
7557
7558(define-public python-requests-mock
7559 (package
7560 (name "python-requests-mock")
7561 (version "1.12.1")
7562 (source
7563 (origin
7564 (method url-fetch)
7565 (uri (pypi-uri "requests-mock" version))
7566 (sha256
7567 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
7568 (build-system pyproject-build-system)
7569 (native-inputs
7570 (list python-purl
7571 python-pytest
7572 python-requests-futures
7573 python-setuptools
7574 python-setuptools-scm
7575 python-testtools))
7576 (propagated-inputs
7577 (list python-requests))
7578 (home-page "https://requests-mock.readthedocs.org/")
7579 (synopsis "Mock out responses from the requests package")
7580 (description
7581 "This module provides a building block to stub out the HTTP requests
7582portions of your testing code.")
7583 (license license:asl2.0)))
7584
7585(define-public python-requests-toolbelt
7586 (package
7587 (name "python-requests-toolbelt")
7588 (version "1.0.0")
7589 (source
7590 (origin
7591 (method url-fetch)
7592 (uri (pypi-uri "requests-toolbelt" version))
7593 (sha256
7594 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
7595 (build-system pyproject-build-system)
7596 (arguments
7597 (list
7598 #:test-flags
7599 ;; Requiring networking or fail due not valid certs: AttributeError:
7600 ;; 'MockHTTPResponse' object has no attribute 'close'
7601 #~(list "-k" (string-append "not test_dump_all"
7602 " and not test_dump_response"
7603 " and not test_prepared_request_override_base"
7604 " and not test_prepared_request_with_base"
7605 " and not test_request_override_base"
7606 " and not test_request_with_base"))))
7607 (native-inputs
7608 (list python-betamax
7609 python-mock
7610 python-pyopenssl
7611 python-pytest
7612 python-setuptools
7613 python-trustme
7614 python-wheel))
7615 (propagated-inputs
7616 (list python-requests))
7617 (synopsis "Extensions to python-requests")
7618 (description "This is a toolbelt of useful classes and functions to be used
7619with python-requests.")
7620 (home-page "https://github.com/requests/toolbelt/")
7621 (license license:asl2.0)))
7622
7623(define-public python-requests-ftp
7624 (package
7625 (name "python-requests-ftp")
7626 (version "0.3.1")
7627 (source
7628 (origin
7629 (method git-fetch)
7630 (uri (git-reference
7631 (url "https://github.com/Lukasa/requests-ftp")
7632 (commit (string-append "v" version))))
7633 (file-name (git-file-name name version))
7634 (sha256
7635 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
7636 (build-system pyproject-build-system)
7637 (arguments
7638 ;; XXX: No connection adapters found.
7639 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
7640 (native-inputs
7641 (list python-pyftpdlib python-pytest python-setuptools python-six))
7642 (propagated-inputs (list python-requests))
7643 (home-page "https://github.com/Lukasa/requests-ftp")
7644 (synopsis "FTP Transport Adapter for Requests")
7645 (description "Requests-FTP is an implementation of a simple FTP transport
7646adapter for use with the Requests library.")
7647 (license license:asl2.0)))
7648
7649(define-public python-aioftp
7650 (package
7651 (name "python-aioftp")
7652 (version "0.27.2")
7653 (source
7654 (origin
7655 (method git-fetch)
7656 (uri (git-reference
7657 (url "https://github.com/aio-libs/aioftp")
7658 (commit version)))
7659 (file-name (git-file-name name version))
7660 (sha256
7661 (base32 "1lshyac5zk1w4x7ygkim3726f8gbkvpvlyiqkn9cs6qjxhxn5bxc"))))
7662 (build-system pyproject-build-system)
7663 (arguments
7664 (list
7665 #:phases
7666 #~(modify-phases %standard-phases
7667 (add-after 'unpack 'use-default-asyncio
7668 ;; async_timeout is deprecated, upstream recommends to use
7669 ;; asyncio, available since Python 3.11.
7670 (lambda _
7671 (substitute* "tests/conftest.py"
7672 (("async_timeout") "asyncio")))))))
7673 (native-inputs
7674 (list python-pytest
7675 python-pytest-mock
7676 python-pytest-asyncio
7677 python-setuptools
7678 python-siosocks
7679 python-trustme))
7680 (home-page "https://aioftp.readthedocs.io/")
7681 (synopsis "FTP client/server for asyncio in Python")
7682 (description
7683 "FTP client and server for asyncio (Python 3) Library implementing FTP
7684protocol, both client and server for Python asyncio module.
7685
7686 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
7687 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
7688 REST, LIST (as fallback).
7689
7690 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
7691 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
7692 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
7693 (license license:asl2.0)))
7694
7695(define-public python-mohawk
7696 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
7697 (revision "0"))
7698 (package
7699 (name "python-mohawk")
7700 (version (git-version "1.1.0" revision commit))
7701 (source
7702 (origin
7703 (method git-fetch)
7704 (uri (git-reference
7705 (url "https://github.com/kumar303/mohawk")
7706 (commit commit)))
7707 (file-name (git-file-name name version))
7708 (sha256
7709 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
7710 (patches
7711 (search-patches "python-mohawk-pytest.patch"))))
7712 (build-system pyproject-build-system)
7713 (arguments
7714 (list #:test-flags #~(list "mohawk/tests.py")))
7715 (native-inputs (list python-pytest python-setuptools))
7716 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
7717 ;python-six is removed?
7718 (home-page "https://github.com/kumar303/mohawk")
7719 (synopsis "Library for Hawk HTTP authorization")
7720 (description
7721 "Mohawk is an alternate Python implementation of the Hawk HTTP
7722authorization scheme.")
7723 (license license:bsd-3))))
7724
7725(define-public python-msal
7726 (package
7727 (name "python-msal")
7728 (version "1.34.0")
7729 (home-page
7730 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
7731 (source
7732 (origin
7733 (method git-fetch)
7734 (uri (git-reference
7735 (url home-page)
7736 (commit version)))
7737 (file-name (git-file-name name version))
7738 (sha256
7739 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
7740 (patches (search-patches "python-msal-requests.patch"))))
7741 (build-system pyproject-build-system)
7742 (arguments
7743 (list
7744 #:test-flags
7745 #~(list
7746 "--ignore=tests/test_benchmark.py"
7747 ;; XXX: Ignoring cryptography version scheme tests.
7748 "-k"
7749 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
7750 ;; XXX: These tests try to access the network.
7751 "--ignore=tests/test_application.py"
7752 "--ignore=tests/test_ccs.py"
7753 ;; XXX: These tests assume they are run on Windows.
7754 "--ignore=tests/test_mi.py")
7755 #:phases
7756 #~(modify-phases %standard-phases
7757 (add-after 'unpack 'set-cryptography-version
7758 (lambda _
7759 (substitute* "tests/test_cryptography.py"
7760 (("^latest_cryptography_version = @version@")
7761 (format #f "latest_cryptography_version = ~s"
7762 #$(package-version
7763 (this-package-input "python-cryptography")))))))
7764 (add-before 'check 'configure-tests
7765 (lambda* (#:key tests? #:allow-other-keys)
7766 (when tests?
7767 (setenv "TRAVIS_TAG" "1")))))))
7768 (native-inputs
7769 (list nss-certs-for-test python-mock python-pytest python-setuptools))
7770 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
7771 (synopsis "Microsoft Authentication Library (MSAL) for Python")
7772 (description
7773 "The Microsoft Authentication Library for Python enables applications to
7774integrate with the Microsoft identity platform. It allows you to sign in
7775users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
7776Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
7777Microsoft Graph or your own APIs registered with the Microsoft identity
7778platform. It is built using industry standard OAuth2 and OpenID Connect
7779protocols.")
7780 (license license:expat)))
7781
7782(define-public oauth2ms
7783 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
7784 (revision "0"))
7785 (package
7786 (name "oauth2ms")
7787 (version (git-version "0.0.0" revision commit))
7788 (source (origin
7789 (method git-fetch)
7790 (uri (git-reference
7791 (url "https://github.com/harishkrupo/oauth2ms")
7792 (commit commit)))
7793 (file-name (git-file-name name version))
7794 (sha256
7795 (base32
7796 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
7797 (build-system copy-build-system)
7798 (arguments
7799 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
7800 ("." #$(string-append "share/doc/" name "-"
7801 version "/")
7802 #:include-regexp ("\\.org$")))
7803 #:phases #~(modify-phases %standard-phases
7804 (add-after 'install 'wrap-pythonpath
7805 (lambda* (#:key inputs outputs #:allow-other-keys)
7806 (let ((path (getenv "GUIX_PYTHONPATH")))
7807 (wrap-program (string-append #$output
7808 "/bin/oauth2ms")
7809 `("GUIX_PYTHONPATH" ":" prefix
7810 (,path)))))))))
7811 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
7812 (home-page "https://github.com/harishkrupo/oauth2ms")
7813 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
7814 (description
7815 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
7816endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
7817used as authentication in IMAP mail servers.")
7818 (license license:asl2.0))))
7819
7820(define-public python-oauthlib
7821 (package
7822 (name "python-oauthlib")
7823 (version "3.3.1")
7824 (source
7825 (origin
7826 (method git-fetch)
7827 (uri (git-reference
7828 (url "https://github.com/oauthlib/oauthlib")
7829 (commit (string-append "v" version))))
7830 (file-name (git-file-name name version))
7831 (sha256
7832 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
7833 (build-system pyproject-build-system)
7834 (native-inputs (list python-pytest python-mock python-setuptools))
7835 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
7836 (home-page "https://github.com/oauthlib/oauthlib")
7837 (synopsis "OAuth implementation for Python")
7838 (description
7839 "Oauthlib is a generic, spec-compliant, thorough implementation of the
7840OAuth request-signing logic.")
7841 (license license:bsd-3)))
7842
7843(define-public python-urllib3
7844 (package
7845 (name "python-urllib3")
7846 (version "2.5.0")
7847 (source
7848 (origin
7849 (method url-fetch)
7850 (uri (pypi-uri "urllib3" version))
7851 (sha256
7852 (base32
7853 "0q17z6zlpyjv9ax5c3d30qwp9fwhz2sc4gbb7yyd86g4qwrpgi1z"))))
7854 (build-system pyproject-build-system)
7855 (arguments `(#:tests? #f))
7856 (native-inputs
7857 (list python-hatch-vcs
7858 python-hatchling
7859 python-setuptools-scm))
7860 (propagated-inputs
7861 (append
7862 ;; These 5 inputs are used to build urrlib3[secure]
7863 (list python-certifi)
7864 (if (member (%current-system)
7865 (package-transitive-supported-systems python-cryptography))
7866 (list python-cryptography)
7867 '())
7868 (list python-idna)
7869 (if (member (%current-system)
7870 (package-transitive-supported-systems python-pyopenssl))
7871 (list python-pyopenssl)
7872 '())
7873 (list python-pysocks)))
7874 (home-page "https://urllib3.readthedocs.io/")
7875 (synopsis "HTTP library with thread-safe connection pooling")
7876 (description
7877 "Urllib3 supports features left out of urllib and urllib2 libraries. It
7878can reuse the same socket connection for multiple requests, it can POST files,
7879supports url redirection and retries, and also gzip and deflate decoding.")
7880 (license license:expat)))
7881
7882(define-public python-urllib3-1.26
7883 (package
7884 (inherit python-urllib3)
7885 (version "1.26.17")
7886 (source
7887 (origin
7888 (method url-fetch)
7889 (uri (pypi-uri "urllib3" version))
7890 (sha256
7891 (base32
7892 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
7893 (native-inputs
7894 (list python-setuptools
7895 python-wheel))))
7896
7897(define-public python-awscrt
7898 (package
7899 (name "python-awscrt")
7900 (version "0.26.1")
7901 (source
7902 (origin
7903 (method url-fetch)
7904 (uri (pypi-uri "awscrt" version))
7905 (sha256
7906 (base32 "0plkc0i0gc6z8fqnyy8kbg43sv3jnv8shcavcz0wb134riykmmm8"))))
7907 (build-system pyproject-build-system)
7908 (arguments
7909 (list
7910 #:test-backend #~'unittest
7911 #:test-flags #~(list "discover" "--verbose")
7912 #:phases
7913 #~(modify-phases %standard-phases
7914 (add-after 'unpack 'disable-broken-tests
7915 (lambda _
7916 ;; Disable broken tests. These tests fail because the
7917 ;; certificate bundle at the default location does not exist.
7918 (substitute* "test/test_auth.py"
7919 (("def test_default_provider")
7920 "def _test_default_provider"))
7921 (substitute* "test/test_http_client.py"
7922 (("def test_h2_client")
7923 "def _test_h2_client"))
7924 (substitute* "test/test_s3.py"
7925 (("def test_sanity")
7926 "def _test_sanity")
7927 (("def test_sanity_secure")
7928 "def _test_sanity_secure")
7929 (("def test_wait_shutdown")
7930 "def _test_wait_shutdown"))))
7931 (add-after 'unpack 'override-cert-bundle-location
7932 (lambda* (#:key inputs #:allow-other-keys)
7933 (let ((bundle (search-input-file inputs
7934 "/etc/ssl/certs/ca-certificates.crt")))
7935 (setenv "SSL_CERT_FILE" bundle)
7936 (substitute* "awscrt/io.py"
7937 (("( +)opt = TlsContextOptions\\(\\)" m indent)
7938 (string-append m "\n"
7939 indent "import os\n"
7940 indent "\
7941opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n")))
7942 (substitute* "test/appexit_http.py"
7943 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
7944 (string-append m indent
7945 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
7946 bundle "')\n")))
7947 (substitute* "test/test_io.py"
7948 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
7949 (string-append m indent
7950 "opt.override_default_trust_store_from_path(None, '"
7951 bundle "')\n"))))))
7952 (add-after 'unpack 'use-system-libraries
7953 (lambda _
7954 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
7955 (inputs (list openssl))
7956 (native-inputs (list cmake-minimal
7957 nss-certs-for-test
7958 python-boto3
7959 python-setuptools
7960 python-websockets))
7961 (home-page "https://github.com/awslabs/aws-crt-python")
7962 (synopsis "Common runtime for AWS Python projects")
7963 (description
7964 "This package provides a common runtime for AWS Python projects.")
7965 (license license:asl2.0)))
7966
7967(define-public awscli
7968 (package
7969 ;; Note: updating awscli typically requires updating botocore as well.
7970 (name "awscli")
7971 (version "1.43.11")
7972 (source
7973 (origin
7974 (method git-fetch)
7975 (uri (git-reference
7976 (url "https://github.com/aws/aws-cli")
7977 (commit version)))
7978 (file-name (git-file-name name version))
7979 (sha256
7980 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
7981 (build-system pyproject-build-system)
7982 (arguments
7983 (list
7984 ;; tests: 2715 passed, 32 warnings
7985 #:test-flags
7986 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7987 ;; Complete test suite is huge and compute hungry, run just unit
7988 ;; tests.
7989 "--ignore=tests/dependencies"
7990 "--ignore=tests/functional"
7991 "--ignore=tests/integration"
7992 ;; TypeError: 'Mock' object is not subscriptable.
7993 "-k" "not test_no_groff_or_mandoc_exists")
7994 #:phases
7995 #~(modify-phases %standard-phases
7996 (add-after 'unpack 'fix-reference-to-groff
7997 (lambda _
7998 ;; XXX: Consider to use wrap-program instead, it tries to parse
7999 ;; the PATH.
8000 (substitute* "awscli/help.py"
8001 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
8002 (("raise ExecutableNotFoundError\\('groff'\\)") "")
8003 (("cmdline = \\['groff'")
8004 (format #f "cmdline = ['~a/bin/groff'"
8005 #$(this-package-input "groff-minimal"))))))
8006 (add-before 'check 'set-environment
8007 (lambda _
8008 ;; PermissionError: [Errno 13] Permission denied:
8009 ;; '/homeless-shelter'
8010 (setenv "HOME" "/tmp"))))))
8011 (native-inputs
8012 (list python-pytest
8013 python-pytest-xdist
8014 python-setuptools
8015 python-wheel))
8016 (inputs
8017 (list groff-minimal
8018 python-botocore
8019 python-colorama
8020 python-docutils-0.19
8021 python-pyyaml
8022 python-rsa-for-awscli-1
8023 python-s3transfer))
8024 (home-page "https://aws.amazon.com/cli/")
8025 (synopsis "Command line client for AWS")
8026 (description
8027 "AWS CLI provides a unified command line interface to the Amazon Web
8028Services (AWS) API.")
8029 (license license:asl2.0)))
8030
8031(define-public awscli-2
8032 (package
8033 (inherit awscli)
8034 ;; Note: updating awscli-2 typically requires updating python-awscrt.
8035 (name "awscli")
8036 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
8037 ;; any fresh one compatible with current state of dependencies in Guix.
8038 (version "2.28.0")
8039 (source
8040 (origin
8041 (method git-fetch)
8042 (uri (git-reference
8043 (url "https://github.com/aws/aws-cli")
8044 (commit version)))
8045 (file-name (git-file-name name version))
8046 (sha256
8047 (base32
8048 "1a1jzvdm434x46yh7ir11lw0nzc64ns4qvxhp5wfra3rh5ykf36j"))))
8049 (build-system pyproject-build-system)
8050 (arguments
8051 (list
8052 ;; When updating and checking locally be very patient as build phase may
8053 ;; hang for 6-8 minutes but eventually passes through.
8054 ;;
8055 ;; tests: 4189 passed, 1 skipped, 2 warnings
8056 #:test-flags
8057 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8058 ;; Full test suite contains more than 70k tests; ignore network
8059 ;; dependent, slow and compute intense tests, keep just unit
8060 ;; tests.
8061 "--ignore=tests/backends"
8062 "--ignore=tests/dependencies"
8063 "--ignore=tests/functional"
8064 "--ignore=tests/integration"
8065 "--ignore=tests/unit/botocore"
8066 ;; Flaky, something to do with PATH disappearing from os.environ?
8067 ;; Passes when run on its own, so maybe something else is
8068 ;; modifying this during the test run.
8069 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
8070 ;; TypeError: 'Mock' object is not subscriptable
8071 "-k" "not test_no_groff_or_mandoc_exists")
8072 #:phases
8073 #~(modify-phases %standard-phases
8074 (add-after 'unpack 'ignore-deprecations
8075 (lambda _
8076 (substitute* "pyproject.toml"
8077 (("\"error::") "\"ignore::"))))
8078 (add-after 'unpack 'fix-reference-to-groff
8079 (lambda* (#:key inputs #:allow-other-keys)
8080 (substitute* "awscli/help.py"
8081 (("if self._exists_on_path\\('groff'\\):") "if True:")
8082 (("cmdline = \\['groff'")
8083 (string-append "cmdline = ['"
8084 (search-input-file inputs "bin/groff")
8085 "'")))))
8086 (add-before 'check 'pre-check
8087 (lambda _ (setenv "HOME" "/tmp"))))))
8088 (inputs
8089 (list groff
8090 ;; less
8091 nss-certs-for-test
8092 python-awscrt
8093 python-colorama
8094 python-dateutil
8095 python-distro
8096 python-docutils
8097 python-jmespath
8098 python-prompt-toolkit
8099 python-ruamel.yaml
8100 python-ruamel.yaml.clib
8101 python-urllib3))
8102 (native-inputs
8103 (list python-flit-core
8104 python-pytest
8105 python-pytest-xdist))))
8106
8107(define-public python-wsgiproxy2
8108 (package
8109 (name "python-wsgiproxy2")
8110 (version "0.5.1")
8111 (source
8112 (origin
8113 (method git-fetch)
8114 (uri (git-reference
8115 (url "https://github.com/gawel/WSGIProxy2/")
8116 (commit version)))
8117 (file-name (git-file-name name version))
8118 (sha256
8119 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
8120 (build-system pyproject-build-system)
8121 (arguments (list #:test-backend #~'unittest))
8122 (native-inputs (list python-webtest python-setuptools))
8123 (propagated-inputs (list python-requests python-six python-urllib3
8124 python-webob))
8125 (home-page "https://github.com/gawel/WSGIProxy2/")
8126 (synopsis "WSGI Proxy with various http client backends")
8127 (description
8128 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
8129function calls into HTTP requests. It also includes code to sign requests and
8130pass private data, and to spawn subprocesses to handle requests.")
8131 (license license:expat)))
8132
8133(define-public python-pastedeploy
8134 (package
8135 (name "python-pastedeploy")
8136 (version "3.1.0")
8137 (source
8138 (origin
8139 (method url-fetch)
8140 (uri (pypi-uri "PasteDeploy" version))
8141 (sha256
8142 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
8143 (build-system pyproject-build-system)
8144 (native-inputs (list python-pytest python-setuptools))
8145 (home-page "https://pylonsproject.org/")
8146 (synopsis "Load, configure, and compose WSGI applications and servers")
8147 (description
8148 "This tool provides code to load WSGI applications and servers from URIs;
8149these URIs can refer to Python Eggs for INI-style configuration files. Paste
8150Script provides commands to serve applications based on this configuration
8151file.")
8152 (license license:expat)))
8153
8154(define-public python-webtest
8155 (package
8156 (name "python-webtest")
8157 (version "3.0.6")
8158 (source
8159 (origin
8160 (method url-fetch)
8161 (uri (pypi-uri "webtest" version))
8162 (sha256
8163 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
8164 (build-system pyproject-build-system)
8165 (arguments
8166 ;; Tests require python-pyquery, which creates a circular dependency.
8167 `(#:tests? #f))
8168 (native-inputs
8169 (list python-setuptools))
8170 (propagated-inputs
8171 (list python-beautifulsoup4
8172 python-waitress
8173 python-webob))
8174 (home-page "https://docs.pylonsproject.org/projects/webtest/")
8175 (synopsis "Helper to test WSGI applications")
8176 (description
8177 "Webtest allows you to test your Python web applications without
8178starting an HTTP server. It supports anything that supports the minimum of
8179WSGI.")
8180 (license license:expat)))
8181
8182(define-public python-flask
8183 (package
8184 (name "python-flask")
8185 (version "3.1.0")
8186 (source
8187 (origin
8188 (method url-fetch)
8189 (uri (pypi-uri "flask" version))
8190 (sha256
8191 (base32 "1b1nb250jxrjplbs21wnwq69250vs3iz2pdhs7cwi5y8hi8kr1sz"))))
8192 (build-system pyproject-build-system)
8193 (native-inputs
8194 (list python-flit-core
8195 python-pytest))
8196 (propagated-inputs
8197 (list python-asgiref ;async extra
8198 python-click
8199 python-blinker
8200 python-itsdangerous
8201 python-jinja2
8202 python-werkzeug))
8203 (home-page "https://palletsprojects.com/p/flask/")
8204 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
8205 (description "Flask is a micro web framework based on the Werkzeug toolkit
8206and Jinja2 template engine. It is called a micro framework because it does not
8207presume or force a developer to use a particular tool or library.")
8208 (license license:bsd-3)))
8209
8210(define-public python-flask-compress
8211 (package
8212 (name "python-flask-compress")
8213 (version "1.18")
8214 (source (origin
8215 (method url-fetch)
8216 (uri (pypi-uri "flask_compress" version))
8217 (sha256
8218 (base32
8219 "0fj1r0ixsjls7z3a2zzamxppjz4qcf8q4jcmn74gsk9kisyy3fpx"))))
8220 (build-system pyproject-build-system)
8221 (native-inputs
8222 (list python-flask-caching
8223 python-pytest
8224 python-setuptools
8225 python-setuptools-scm))
8226 (propagated-inputs
8227 (list python-brotli
8228 python-flask
8229 python-pyzstd))
8230 (home-page "https://github.com/colour-science/flask-compress")
8231 (synopsis "Compress responses in a Flask app")
8232 (description
8233 "This package lets you compress Flask application responses and static
8234files with gzip, deflate or brotli. Flask-Compress both adds the various
8235headers required for a compressed response and compresses the response data.")
8236 (license license:expat)))
8237
8238(define-public python-flask-seasurf
8239 (package
8240 (name "python-flask-seasurf")
8241 (version "2.0.0")
8242 (source (origin
8243 (method url-fetch)
8244 (uri (pypi-uri "Flask-SeaSurf" version))
8245 (sha256
8246 (base32
8247 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
8248 (build-system pyproject-build-system)
8249 (arguments
8250 (list #:tests? #false)) ;there are none
8251 (propagated-inputs (list python-flask))
8252 (native-inputs (list python-setuptools python-wheel))
8253 (home-page "https://github.com/maxcountryman/flask-seasurf/")
8254 (synopsis "CSRF extension for Flask")
8255 (description "SeaSurf is a Flask extension for preventing cross-site
8256request forgery (CSRF). CSRF attacks are problematic because the mechanism
8257they use is relatively easy to exploit. This extension attempts to aid you in
8258securing your application from such attacks. This extension is based on the
8259Django middleware.")
8260 (license license:bsd-3)))
8261
8262(define-public python-flask-wtf
8263 (package
8264 (name "python-flask-wtf")
8265 (version "1.2.2")
8266 (source
8267 (origin
8268 (method url-fetch)
8269 (uri (pypi-uri "Flask-WTF" version))
8270 (sha256
8271 (base32
8272 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
8273 (build-system pyproject-build-system)
8274 (propagated-inputs
8275 (list python-flask python-flask python-itsdangerous python-wtforms))
8276 (native-inputs
8277 (list python-hatchling python-pytest))
8278 (home-page "https://github.com/lepture/flask-wtf")
8279 (synopsis "Simple integration of Flask and WTForms")
8280 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
8281upload, and reCAPTCHA.")
8282 (license license:bsd-3)))
8283
8284(define-public python-flask-multistatic
8285 (package
8286 (name "python-flask-multistatic")
8287 (version "1.0")
8288 (source
8289 (origin
8290 (method url-fetch)
8291 (uri (pypi-uri "flask-multistatic" version))
8292 (sha256
8293 (base32
8294 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
8295 (build-system pyproject-build-system)
8296 (arguments (list #:tests? #f)) ; No tests upstream.
8297 (native-inputs (list python-setuptools))
8298 (propagated-inputs (list python-flask))
8299 (home-page "https://pagure.io/flask-multistatic")
8300 (synopsis "Flask plugin to allow overriding static files")
8301 (description "@code{flask-multistatic} is a flask plugin that adds support
8302for overriding static files.")
8303 (license license:gpl3+)))
8304
8305(define-public python-responses
8306 (package
8307 (name "python-responses")
8308 (version "0.25.3")
8309 (source (origin
8310 (method url-fetch)
8311 (uri (pypi-uri "responses" version))
8312 (sha256
8313 (base32
8314 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
8315 (build-system pyproject-build-system)
8316 (native-inputs
8317 (list python-pytest
8318 python-pytest-asyncio
8319 python-pytest-httpserver
8320 python-setuptools
8321 python-tomli
8322 python-tomli-w
8323 python-wheel))
8324 (propagated-inputs
8325 (list python-requests
8326 python-pyyaml
8327 python-urllib3))
8328 (home-page "https://github.com/getsentry/responses")
8329 (synopsis "Utility for mocking out the `requests` Python library")
8330 (description "A utility library for mocking out the `requests` Python
8331library.")
8332 (license license:asl2.0)))
8333
8334(define-public python-grequests
8335 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
8336 (revision "0"))
8337 (package
8338 (name "python-grequests")
8339 (version (git-version "0.7.0" revision commit))
8340 (source
8341 (origin
8342 (method git-fetch)
8343 (uri (git-reference
8344 (url "https://github.com/kennethreitz/grequests")
8345 (commit commit)))
8346 (file-name (git-file-name name version))
8347 (sha256
8348 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
8349 (build-system pyproject-build-system)
8350 (arguments
8351 (list
8352 ;; XXX: Most failing tests seem to be caused by network access,
8353 ;; but there is no easy/flag way to disable tests selectively.
8354 #:tests? #f
8355 #:test-backend #~'unittest
8356 #:test-flags #~(list "tests.py")))
8357 (propagated-inputs (list python-gevent python-requests))
8358 (native-inputs (list python-setuptools))
8359 (home-page "https://github.com/kennethreitz/grequests")
8360 (synopsis "Python library for asynchronous HTTP requests")
8361 (description
8362 "GRequests is a Python library that allows you to use @code{Requests}
8363with @code{Gevent} to make asynchronous HTTP Requests easily.")
8364 (license license:bsd-2))))
8365
8366(define-public python-gwebsockets
8367 (package
8368 (name "python-gwebsockets")
8369 (version "0.7")
8370 (source
8371 (origin
8372 (method git-fetch)
8373 (uri (git-reference
8374 (url "https://github.com/sugarlabs/gwebsockets")
8375 (commit (string-append "v" version))))
8376 (file-name (git-file-name name version))
8377 (sha256
8378 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
8379 (build-system pyproject-build-system)
8380 (arguments (list #:tests? #f)) ; No tests upstream.
8381 (native-inputs (list python-setuptools))
8382 (propagated-inputs (list python-pygobject))
8383 (home-page "https://github.com/sugarlabs/gwebsockets")
8384 (synopsis "GLib based websockets server")
8385 (description
8386 "This package provides a websocket server written in Python. It uses GIO
8387for network communication and hence it easily integrates with the GLib
8388mainloop.")
8389 (license license:asl2.0)))
8390
8391(define-public python-dpkt
8392 (package
8393 (name "python-dpkt")
8394 (version "1.9.8")
8395 (source
8396 (origin
8397 (method git-fetch)
8398 (uri (git-reference
8399 (url "https://github.com/kbandla/dpkt")
8400 (commit (string-append "v" version))))
8401 (file-name (git-file-name name version))
8402 (sha256
8403 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
8404 (build-system pyproject-build-system)
8405 (arguments
8406 (list
8407 #:test-flags
8408 #~(list "--pyargs" "dpkt")))
8409 (native-inputs (list python-pytest python-setuptools))
8410 (home-page "https://github.com/kbandla/dpkt")
8411 (synopsis "Packet generator and parser for TCP/IP protocols")
8412 (description
8413 "The dpkt module is a fast, simple packet generator and parser for the
8414basic TCP/IP protocols.")
8415 (license license:bsd-3)))
8416
8417(define-public python-geventhttpclient
8418 (package
8419 (name "python-geventhttpclient")
8420 (version "2.3.9")
8421 (source (origin
8422 (method git-fetch)
8423 (uri (git-reference
8424 (url "https://github.com/geventhttpclient/geventhttpclient")
8425 (commit version)
8426 (recursive? #true)))
8427 (file-name (git-file-name name version))
8428 (sha256
8429 (base32
8430 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
8431 (build-system pyproject-build-system)
8432 (arguments
8433 (list
8434 #:test-flags
8435 ;; Disable network tests.
8436 '(list "-k"
8437 (string-append "not test_client_simple"
8438 " and not test_client_ssl"
8439 " and not test_client_with_default_headers"
8440 " and not test_client_without_leading_slash"
8441 " and not test_download"
8442 " and not test_fail_invalid_ca_certificate"
8443 " and not test_httpbin_multipart"
8444 " and not test_multi_queries_greenlet_safe"
8445 " and not test_no_form_encode_header"
8446 " and not test_no_form_encoded_header"
8447 " and not test_request_with_headers"
8448 " and not test_response_context_manager"
8449 " and not test_urllib_request"))))
8450 (native-inputs (list nss-certs-for-test
8451 python-dpkt python-pytest python-requests
8452 python-setuptools python-wheel))
8453 (propagated-inputs (list python-brotli python-certifi python-gevent
8454 python-urllib3))
8455 (home-page "https://github.com/geventhttpclient/geventhttpclient")
8456 (synopsis "HTTP client library for gevent")
8457 (description "@code{python-geventhttpclient} is a high performance,
8458concurrent HTTP client library for python using @code{gevent}.")
8459 (license license:expat)))
8460
8461(define-public python-gevent-websocket
8462 (package
8463 (name "python-gevent-websocket")
8464 (version "0.10.1")
8465 (source
8466 (origin
8467 (method url-fetch)
8468 (uri (pypi-uri "gevent-websocket" version))
8469 (sha256
8470 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
8471 (build-system pyproject-build-system)
8472 (arguments
8473 (list #:tests? #f)) ; no tests in PyPI or git
8474 (native-inputs
8475 (list python-setuptools
8476 python-wheel))
8477 (propagated-inputs
8478 (list python-gevent))
8479 (home-page "https://gitlab.com/noppo/gevent-websocket")
8480 (synopsis "Websocket handler for the gevent pywsgi server")
8481 (description
8482 "Websocket handler for the gevent pywsgi server, a Python network
8483library.
8484
8485Features include:
8486@itemize
8487@item integration on both socket level or using an abstract interface
8488@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
8489Protocol, WAMP}
8490@item easily extendible using a simple WebSocket protocol plugin API
8491@end itemize")
8492 (license license:asl2.0)))
8493
8494(define-public python-requests-oauthlib
8495 (package
8496 (name "python-requests-oauthlib")
8497 (version "2.0.0")
8498 (source
8499 (origin
8500 (method git-fetch)
8501 (uri (git-reference (url
8502 "https://github.com/requests/requests-oauthlib")
8503 (commit (string-append "v" version))))
8504 (file-name (git-file-name name version))
8505 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
8506 (build-system pyproject-build-system)
8507 (arguments
8508 (list
8509 #:test-flags
8510 #~(list
8511 "--ignore=tests/test_core.py" ; requires network access.
8512 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
8513 "-k" "not test_fetch_access_token"))) ; flaky tests.
8514 (native-inputs
8515 (list python-requests-mock python-pytest python-setuptools))
8516 (propagated-inputs
8517 (list python-oauthlib python-requests))
8518 (home-page "https://github.com/requests/requests-oauthlib")
8519 (synopsis "OAuthlib authentication support for Requests")
8520 (description
8521 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
8522provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
8523 (license license:isc)))
8524
8525(define-public python-cachecontrol
8526 (package
8527 (name "python-cachecontrol")
8528 (version "0.14.1")
8529 (source
8530 (origin
8531 (method git-fetch)
8532 (uri (git-reference
8533 (url "https://github.com/ionrock/cachecontrol")
8534 (commit (string-append "v" version))))
8535 (file-name (git-file-name name version))
8536 (sha256
8537 (base32
8538 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
8539 (build-system pyproject-build-system)
8540 (propagated-inputs
8541 (list python-filelock python-msgpack python-requests))
8542 (native-inputs
8543 (list python-cherrypy python-flit-core python-pytest))
8544 (home-page "https://github.com/ionrock/cachecontrol")
8545 (synopsis "The httplib2 caching algorithms for use with requests")
8546 (description "CacheControl is a port of the caching algorithms in
8547@code{httplib2} for use with @code{requests} session objects.")
8548 (license license:asl2.0)))
8549
8550(define-public python-betamax
8551 (package
8552 (name "python-betamax")
8553 (version "0.9.0")
8554 (source
8555 (origin
8556 (method url-fetch)
8557 (uri (pypi-uri "betamax" version))
8558 (sha256
8559 (base32
8560 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
8561 (build-system pyproject-build-system)
8562 (arguments
8563 (list
8564 #:test-flags
8565 #~(list "-k" (string-join
8566 ;; Tests require network access to http://httpbin.org/get.
8567 (list "not test_creates_new_cassettes"
8568 "test_placeholders_work"
8569 "test_post_start_hook"
8570 "test_pre_stop_hook"
8571 "test_preplayback_hook"
8572 "test_prerecord_hook"
8573 "test_prerecord_ignoring_hook"
8574 "test_records_new_events_with_existing_cassette"
8575 "test_records_new_interaction"
8576 "test_records_new_interactions"
8577 "test_replaces_old_interactions"
8578 "test_replays_response_from_cassette"
8579 "test_requests_with_json_body"
8580 "test_saves_content_as_gzip"
8581 "test_unicode_is_saved_properly")
8582 " and not "))))
8583 (native-inputs
8584 (list nss-certs-for-test
8585 python-pytest
8586 python-setuptools))
8587 (propagated-inputs
8588 (list python-requests))
8589 (home-page "https://github.com/sigmavirus24/betamax")
8590 (synopsis "Record HTTP interactions with python-requests")
8591 (description
8592 "Betamax will record your test suite's HTTP interactions and replay them
8593during future tests. It is designed to work with python-requests.")
8594 (license license:expat)))
8595
8596(define-public python-betamax-matchers
8597 (package
8598 (name "python-betamax-matchers")
8599 (version "0.4.0")
8600 (source
8601 (origin
8602 (method git-fetch)
8603 (uri (git-reference
8604 (url "https://github.com/sigmavirus24/betamax_matchers")
8605 (commit version)))
8606 (file-name (git-file-name name version))
8607 (sha256
8608 (base32 "0lyg3r91hwfvavyi5k6sddcla37igigycfv1mx40c32byqwl6pq5"))))
8609 (build-system pyproject-build-system)
8610 (native-inputs (list python-pytest python-setuptools))
8611 (propagated-inputs (list python-betamax python-requests-toolbelt))
8612 (home-page "https://github.com/sigmavirus24/betamax_matchers")
8613 (synopsis "VCR imitation for python-requests")
8614 (description "@code{betamax-matchers} provides a set of Matchers for
8615Betamax.")
8616 (license license:asl2.0)))
8617
8618(define-public python-betamax-serializers
8619 (package
8620 (name "python-betamax-serializers")
8621 (version "0.2.1")
8622 (source
8623 (origin
8624 (method git-fetch)
8625 (uri (git-reference
8626 (url "https://gitlab.com/betamax/serializers")
8627 (commit version)))
8628 (file-name (git-file-name name version))
8629 (sha256
8630 (base32 "1p2l5w3vwvjacs2ndahgcjq55qb53i37p8mz1zh85pjxyszdyw2l"))))
8631 (build-system pyproject-build-system)
8632 (arguments (list #:tests? #f)) ; No tests.
8633 (native-inputs (list python-setuptools))
8634 (propagated-inputs (list python-betamax python-pyyaml))
8635 (synopsis "Set of third-party serializers for Betamax")
8636 (description
8637 "Betamax-Serializers are an experimental set of Serializers for Betamax
8638that may possibly end up in the main package.")
8639 (home-page "https://gitlab.com/betamax/serializers")
8640 (license license:asl2.0)))
8641
8642(define-public python-s3fs
8643 (package
8644 (name "python-s3fs")
8645 (version "2026.1.0")
8646 (source
8647 (origin
8648 (method url-fetch)
8649 (uri (pypi-uri "s3fs" version))
8650 (sha256
8651 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
8652 (build-system pyproject-build-system)
8653 ;; TODO: Many tests fail with "No such file or directory" raised by the
8654 ;; HTTP client.
8655 (arguments (list #:tests? #false))
8656 (native-inputs
8657 (list python-setuptools))
8658 (propagated-inputs
8659 (list python-aiobotocore
8660 python-aiohttp
8661 python-fsspec))
8662 (home-page "https://github.com/fsspec/s3fs/")
8663 (synopsis "Convenient filesystem interface over S3")
8664 (description "This package provides a convenient filesystem interface over
8665S3.")
8666 (license license:bsd-3)))
8667
8668(define-public python-s3transfer
8669 (package
8670 (name "python-s3transfer")
8671 (version "0.16.0")
8672 (source
8673 (origin
8674 (method url-fetch)
8675 (uri (pypi-uri "s3transfer" version))
8676 (sha256
8677 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
8678 (build-system pyproject-build-system)
8679 (arguments
8680 (list
8681 ;; tests: 630 passed, 51 skipped
8682 #:test-flags
8683 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8684 ;; Tests require networking.
8685 "--ignore" "tests/integration")))
8686 (native-inputs
8687 (list python-pytest
8688 python-pytest-xdist
8689 python-setuptools))
8690 (propagated-inputs
8691 (list python-botocore))
8692 (home-page "https://github.com/boto/s3transfer")
8693 (synopsis "Amazon S3 Transfer Manager")
8694 (description
8695 "S3transfer is a Python library for managing Amazon S3 transfers.")
8696 (license license:asl2.0)))
8697
8698(define-public python-flask-restful
8699 (package
8700 (name "python-flask-restful")
8701 (version "0.3.10")
8702 (source
8703 (origin
8704 (method url-fetch)
8705 (uri (pypi-uri "Flask-RESTful" version))
8706 (sha256
8707 (base32
8708 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
8709 (build-system pyproject-build-system)
8710 (arguments
8711 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
8712 (list #:tests? #f))
8713 (propagated-inputs
8714 (list python-aniso8601 python-flask python-pytz))
8715 (native-inputs
8716 (list python-blinker
8717 python-mock
8718 python-pytest
8719 python-setuptools
8720 python-wheel))
8721 (home-page "https://github.com/flask-restful/flask-restful/")
8722 (synopsis "Flask module for creating REST APIs")
8723 (description
8724 "This package contains a Flask module for creating REST APIs.")
8725 (license license:bsd-3)))
8726
8727(define-public python-flask-sqlalchemy
8728 (package
8729 (name "python-flask-sqlalchemy")
8730 ;; Released version fails tests in Python 3.12.
8731 (properties '((commit . "168cb4b7b50fe5176307a10d873781bfafc6eeda")
8732 (revision . "0")))
8733 (version (git-version "3.1.1"
8734 (assoc-ref properties 'revision)
8735 (assoc-ref properties 'commit)))
8736 (source
8737 (origin
8738 (method git-fetch)
8739 (uri (git-reference
8740 (url "https://github.com/pallets-eco/flask-sqlalchemy")
8741 (commit (assoc-ref properties 'commit))))
8742 (file-name (git-file-name name version))
8743 (sha256
8744 (base32
8745 "0xw8v1540m21x9crpgb0i3rxyhh1d24ldg354vndw9cif74ls5p6"))))
8746 (build-system pyproject-build-system)
8747 (arguments
8748 (list
8749 #:test-flags
8750 #~(list "-k" (string-append "not test_explicit_table[db2]"
8751 " and not test_explicit_table[db4]")
8752 "-W" "ignore::DeprecationWarning")))
8753 (native-inputs
8754 (list python-flit-core
8755 python-pytest))
8756 (propagated-inputs
8757 (list python-flask
8758 python-sqlalchemy-2))
8759 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
8760 (synopsis "Module adding SQLAlchemy support to your Flask application")
8761 (description
8762 "This package adds SQLAlchemy support to your Flask application.")
8763 (license license:bsd-3)))
8764
8765(define-public python-flask-restful-swagger
8766 (package
8767 (name "python-flask-restful-swagger")
8768 (version "0.20.1")
8769 ;; XXX: Unbundle minified javascript.
8770 (source
8771 (origin
8772 (method git-fetch)
8773 (uri (git-reference
8774 (url "https://github.com/rantav/flask-restful-swagger")
8775 (commit version)))
8776 (file-name (git-file-name name version))
8777 (sha256
8778 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
8779 (build-system pyproject-build-system)
8780 (arguments (list #:tests? #f)) ; No tests.
8781 (native-inputs (list python-setuptools))
8782 (propagated-inputs (list python-flask-restful python-six))
8783 (home-page "https://github.com/rantav/flask-restful-swagger")
8784 (synopsis "Extract Swagger specs from Flask-Restful projects")
8785 (description "This package lets you extract Swagger API documentation
8786specs from your Flask-Restful projects.")
8787 (license license:expat)))
8788
8789(define-public python-htmlmin
8790 (package
8791 (name "python-htmlmin")
8792 (version "0.1.12")
8793 (source
8794 (origin
8795 (method url-fetch)
8796 (uri (pypi-uri "htmlmin" version))
8797 (sha256
8798 (base32
8799 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
8800 (build-system pyproject-build-system)
8801 (arguments
8802 (list #:tests? #f)) ; no tests
8803 (native-inputs (list python-setuptools))
8804 (home-page "https://htmlmin.readthedocs.org/en/latest/")
8805 (synopsis "HTML minifier")
8806 (description "@code{htmlmin} is an HTML minifier that just works.
8807It comes with safe defaults and easily configurable options.")
8808 (license license:bsd-3)))
8809
8810;; XXX: Forked renamed and updated version.
8811(define-public python-htmlmin2
8812 (package/inherit python-htmlmin
8813 (name "python-htmlmin2")
8814 (version "0.1.13")
8815 (source
8816 (origin
8817 (method git-fetch)
8818 (uri (git-reference
8819 (url "https://github.com/wilhelmer/htmlmin")
8820 (commit (string-append "v" version))))
8821 (file-name (git-file-name name version))
8822 (sha256
8823 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
8824 (build-system pyproject-build-system)
8825 (arguments (list #:test-backend #~'unittest))
8826 (native-inputs (list python-setuptools))
8827 (home-page "https://github.com/wilhelmer/htmlmin")
8828 (description
8829 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
8830defaults and easily configurable options. This variant is an updated fork of
8831the original @code{python-htmlmin}.")
8832 (license license:bsd-3)))
8833
8834(define-public python-flask-htmlmin
8835 (package
8836 (name "python-flask-htmlmin")
8837 (version "3.0.0")
8838 (source
8839 (origin
8840 (method git-fetch)
8841 (uri (git-reference
8842 (url "https://github.com/hamidfzm/Flask-HTMLmin")
8843 (commit (string-append "v" version))))
8844 (file-name (git-file-name name version))
8845 (sha256
8846 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
8847 (build-system pyproject-build-system)
8848 (native-inputs (list python-pytest python-setuptools))
8849 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
8850 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
8851 (synopsis "HTML response minifier for Flask")
8852 (description
8853 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
8854 (license license:bsd-3)))
8855
8856(define-public python-jsmin
8857 (package
8858 (name "python-jsmin")
8859 (version "3.0.1")
8860 (source
8861 (origin
8862 (method url-fetch)
8863 (uri (pypi-uri "jsmin" version))
8864 (sha256
8865 (base32
8866 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
8867 (build-system pyproject-build-system)
8868 (arguments (list #:test-backend #~'unittest))
8869 (native-inputs
8870 (list python-setuptools))
8871 (home-page "https://github.com/tikitu/jsmin/")
8872 (synopsis "Python JavaScript minifier")
8873 (description
8874 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
8875on the command line.")
8876 (license license:expat)))
8877
8878(define-public python-flask-login
8879 (let ((commit "c8bba84b9ba6768e878317fc46c54bd13fa1ac07")
8880 (revision "0"))
8881 (package
8882 (name "python-flask-login")
8883 (version (git-version "0.6.3" revision commit))
8884 (source
8885 (origin
8886 (method git-fetch)
8887 (uri (git-reference
8888 (url "https://github.com/maxcountryman/flask-login")
8889 (commit commit)))
8890 (file-name (git-file-name name version))
8891 (sha256
8892 (base32 "0q0ga1zwm06kvpnsf50ckmsc77959i1spx7z2y3jkbwaa4klsyli"))))
8893 (build-system pyproject-build-system)
8894 (propagated-inputs
8895 (list python-flask))
8896 (native-inputs
8897 ;; For tests.
8898 (list python-blinker
8899 python-flit-core
8900 python-mock
8901 python-pytest
8902 python-semantic-version
8903 python-werkzeug))
8904 (home-page "https://github.com/maxcountryman/flask-login")
8905 (synopsis "User session management for Flask")
8906 (description
8907 "@code{Flask-Login} provides user session management for Flask. It
8908handles the common tasks of logging in, logging out, and remembering your
8909users' sessions over extended periods of time.")
8910 (license license:expat))))
8911
8912(define-public python-oauth2client
8913 (package
8914 (name "python-oauth2client")
8915 (version "4.1.3")
8916 (source
8917 (origin
8918 (method git-fetch)
8919 (uri (git-reference
8920 (url "https://github.com/google/oauth2client/")
8921 (commit (string-append "v" version))))
8922 (file-name (git-file-name name version))
8923 (sha256
8924 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
8925 (build-system pyproject-build-system)
8926 (arguments
8927 (list #:tests? #f))
8928 (native-inputs
8929 (list python-setuptools))
8930 (propagated-inputs
8931 (list python-httplib2
8932 python-pyasn1
8933 python-pyasn1-modules
8934 python-pyparsing
8935 python-rsa
8936 python-six))
8937 (home-page "https://github.com/google/oauth2client/")
8938 (synopsis "OAuth 2.0 client library")
8939 (description "@code{python-oauth2client} provides an OAuth 2.0 client
8940library for Python")
8941 (license license:asl2.0)))
8942
8943(define-public python-authlib
8944 (package
8945 (name "python-authlib")
8946 (version "1.5.1")
8947 (source
8948 (origin
8949 (method url-fetch)
8950 (uri (pypi-uri "authlib" version))
8951 (sha256
8952 (base32 "0blpvz2v2r8yvsgm1yr3n61mhwxvh1b0kyf2rp0i4wv6n3n8bg2w"))))
8953 (build-system pyproject-build-system)
8954 ;; No tests target.
8955 (arguments (list #:tests? #false))
8956 (propagated-inputs
8957 (list python-cryptography
8958 python-django
8959 python-flask
8960 python-httpx
8961 python-requests
8962 python-sqlalchemy-2
8963 python-starlette
8964 python-werkzeug))
8965 (native-inputs (list python-pytest python-setuptools python-wheel))
8966 (home-page "https://pypi.org/project/Authlib/1")
8967 (synopsis "Build OAuth and OpenID Connect servers and clients")
8968 (description
8969 "This is a Python library for building OAuth and OpenID Connect servers
8970and clients.")
8971 (license license:bsd-3)))
8972
8973(define-public python-flask-oidc
8974 (package
8975 (name "python-flask-oidc")
8976 (version "2.3.1")
8977 (source
8978 (origin
8979 (method url-fetch)
8980 (uri (pypi-uri "flask_oidc" version))
8981 (sha256
8982 (base32
8983 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
8984 (build-system pyproject-build-system)
8985 (propagated-inputs
8986 (list python-authlib
8987 python-blinker
8988 python-flask
8989 python-requests
8990 python-responses))
8991 (native-inputs
8992 (list python-pytest python-poetry-core))
8993 (home-page "https://github.com/puiterwijk/flask-oidc")
8994 (synopsis "OpenID Connect extension for Flask")
8995 (description "@code{python-flask-oidc} provides an OpenID Connect extension
8996for Flask.")
8997 (license license:bsd-2)))
8998
8999(define-public python-webassets
9000 (package
9001 (name "python-webassets")
9002 (version "3.0.0")
9003 (source
9004 (origin
9005 (method git-fetch)
9006 (uri (git-reference
9007 (url "https://github.com/miracle2k/webassets")
9008 (commit version)))
9009 (file-name (git-file-name name version))
9010 (sha256
9011 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
9012 (build-system pyproject-build-system)
9013 (propagated-inputs (list python-pyyaml python-zope-dottedname))
9014 (native-inputs (list python-hatchling python-pytest))
9015 (home-page "https://github.com/miracle2k/webassets")
9016 (synopsis "Media asset management")
9017 (description
9018 "This package provides utilities to merge, minify and compress Javascript
9019and CSS files,supporting a variety of different filters, including YUI, jsmin,
9020jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
9021 (license license:bsd-2)))
9022
9023(define-public python-cssmin
9024 (package
9025 (name "python-cssmin")
9026 (version "0.2.0")
9027 (source
9028 (origin
9029 (method git-fetch)
9030 (uri (git-reference
9031 (url "https://github.com/zacharyvoase/cssmin")
9032 (commit (string-append "v" version))))
9033 (file-name (git-file-name name version))
9034 (sha256
9035 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
9036 (build-system pyproject-build-system)
9037 (arguments (list #:tests? #f)) ; No tests.
9038 (native-inputs (list python-setuptools))
9039 (home-page "https://github.com/zacharyvoase/cssmin")
9040 (synopsis "Python port of the YUI CSS Compressor")
9041 (description "Python port of the YUI CSS Compressor.")
9042 (license (list license:expat license:bsd-3))))
9043
9044(define-public python-elastic-transport
9045 (package
9046 (name "python-elastic-transport")
9047 (version "9.1.0")
9048 (source
9049 (origin
9050 (method url-fetch)
9051 (uri (pypi-uri "elastic_transport" version))
9052 (sha256
9053 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
9054 (build-system pyproject-build-system)
9055 (arguments
9056 (list
9057 #:test-flags
9058 ;; Deselect failing tests (mostly due to network not reachable)
9059 #~(list "-k"
9060 (string-append
9061 "not .badssl.com"
9062 " and not test_assert_fingerprint_in_cert_chain_failure"))))
9063 (propagated-inputs (list python-certifi python-urllib3))
9064 (native-inputs (list nss-certs-for-test
9065 python-aiohttp
9066 ;; python-furo
9067 python-httpx
9068 python-opentelemetry-api
9069 python-opentelemetry-sdk
9070 python-orjson
9071 python-pytest
9072 python-pytest-asyncio-0.26
9073 ;; python-pytest-cov
9074 python-pytest-httpbin
9075 python-pytest-httpserver
9076 python-pytest-mock
9077 python-requests
9078 python-respx ;test
9079 python-setuptools
9080 ;; python-sphinx
9081 ;; python-sphinx-autodoc-typehints
9082 python-trustme
9083 python-wheel))
9084 (home-page "https://github.com/elastic/elastic-transport-python")
9085 (synopsis "Common library for Python Elastic client libraries")
9086 (description
9087 "This library was lifted from @code{elasticsearch-py} and then transformed to
9088be used across all Elastic services rather than only Elasticsearch. It
9089provides transport classes and utilities shared among Python Elastic client
9090libraries.")
9091 ;; Apache-2.0 in setup.py and LICENSE file.
9092 (license license:asl2.0)))
9093
9094(define-public python-elasticsearch
9095 (package
9096 (name "python-elasticsearch")
9097 (version "9.1.1")
9098 (source
9099 (origin
9100 (method git-fetch) ; no tests in PyPI release
9101 (uri (git-reference
9102 (url "https://github.com/elastic/elasticsearch-py")
9103 (commit (string-append "v" version))))
9104 (file-name (git-file-name name version))
9105 (sha256
9106 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
9107 (build-system pyproject-build-system)
9108 (native-inputs
9109 (list nss-certs-for-test
9110 python-aiohttp
9111 python-dateutil
9112 python-mock
9113 python-orjson
9114 python-pytest
9115 python-pytest-asyncio
9116 python-pytz
9117 python-pyyaml
9118 python-requests
9119 python-hatchling))
9120 (propagated-inputs
9121 (list python-certifi
9122 python-elastic-transport))
9123 (home-page "https://github.com/elastic/elasticsearch-py")
9124 (synopsis "Low-level client for Elasticsearch")
9125 (description "Official low-level client for Elasticsearch. Its goal is to
9126provide common ground for all Elasticsearch-related code in Python; because of
9127this it tries to be opinion-free and very extendable.")
9128 ;; Apache-2.0 in setup.py and LICENSE file.
9129 (license license:asl2.0)))
9130
9131(define-public python-engineio
9132 (package
9133 (name "python-engineio")
9134 (version "4.12.2")
9135 (source
9136 (origin
9137 (method url-fetch)
9138 (uri (pypi-uri "python_engineio" version))
9139 (sha256
9140 (base32
9141 "1ynyf3n29biwkm6nwzzwzhr4m19lsir1x5azxq2nl7xyw7zi5rz7"))))
9142 (build-system pyproject-build-system)
9143 (arguments
9144 (list
9145 #:test-flags
9146 #~(list "-k"
9147 "not test_static_file_routing and not test_static_files")))
9148 (native-inputs
9149 (list python-pytest
9150 python-pytest-asyncio
9151 python-setuptools
9152 python-tornado))
9153 (propagated-inputs
9154 (list python-aiohttp
9155 python-requests
9156 python-simple-websocket
9157 python-websocket-client))
9158 (home-page "https://github.com/miguelgrinberg/python-engineio/")
9159 (synopsis "Engine.IO server")
9160 (description "This package provides a Python implementation of the
9161@code{Engine.IO} realtime client and server.")
9162 (license license:expat)))
9163
9164(define-public python-ephemeral-port-reserve
9165 (package
9166 (name "python-ephemeral-port-reserve")
9167 (version "1.1.4")
9168 (source
9169 (origin
9170 (method git-fetch) ;no tests in PyPI archive
9171 (uri (git-reference
9172 (url "https://github.com/Yelp/ephemeral-port-reserve")
9173 (commit (string-append "v" version))))
9174 (file-name (git-file-name name version))
9175 (sha256
9176 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
9177 (build-system pyproject-build-system)
9178 (native-inputs
9179 (list python-pytest
9180 python-setuptools
9181 python-wheel))
9182 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
9183 (synopsis "Find an unused port, reliably")
9184 (description
9185 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
9186it.")
9187 (license license:expat)))
9188
9189(define-public python-flask-migrate
9190 (package
9191 (name "python-flask-migrate")
9192 (version "4.1.0")
9193 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
9194 (source (origin
9195 (method git-fetch)
9196 (uri (git-reference (url home-page)
9197 (commit (string-append "v" version))))
9198 (file-name (git-file-name name version))
9199 (sha256
9200 (base32
9201 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
9202 (build-system pyproject-build-system)
9203 (propagated-inputs
9204 (list python-flask python-alembic python-flask-sqlalchemy))
9205 (native-inputs
9206 (list python-pytest python-setuptools python-wheel))
9207 (synopsis "SQLAlchemy database migrations for Flask programs using
9208Alembic")
9209 (description "This package contains SQLAlchemy database migration tools
9210for Flask programs that are using @code{python-alembic}.")
9211 (license license:expat)))
9212
9213(define-public python-genshi
9214 (package
9215 (name "python-genshi")
9216 (version "0.7.10")
9217 (source
9218 (origin
9219 (method git-fetch)
9220 (uri (git-reference
9221 (url "https://github.com/edgewall/genshi")
9222 (commit version)))
9223 (file-name (git-file-name name version))
9224 (sha256
9225 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
9226 (build-system pyproject-build-system)
9227 (arguments (list #:test-backend #~'unittest))
9228 (native-inputs (list python-setuptools))
9229 (propagated-inputs (list python-six))
9230 (home-page "https://genshi.edgewall.org/")
9231 (synopsis "Toolkit for generation of output for the web")
9232 (description "Genshi is a Python library that provides an integrated set
9233of components for parsing, generating, and processing HTML, XML or other
9234textual content for output generation on the web.")
9235 (license license:bsd-3)))
9236
9237(define-public python-flask-principal
9238 (package
9239 (name "python-flask-principal")
9240 (version "0.4.0")
9241 (source
9242 (origin
9243 (method git-fetch)
9244 (uri (git-reference
9245 (url "https://github.com/pallets-eco/flask-principal")
9246 (commit version)))
9247 (file-name (git-file-name name version))
9248 (sha256
9249 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
9250 (build-system pyproject-build-system)
9251 (propagated-inputs (list python-blinker))
9252 (native-inputs (list python-flask python-pynose python-setuptools))
9253 (home-page "https://github.com/pallets-eco/flask-principal")
9254 (synopsis "Identity management for Flask")
9255 (description
9256 "@code{flask_principal} is a identity management library for Flask. It
9257supports managing both authentication and authorization data in a thread-local
9258variable.")
9259 (license license:expat)))
9260
9261(define-public python-flask-httpauth
9262 (package
9263 (name "python-flask-httpauth")
9264 (version "4.8.0")
9265 (source
9266 (origin
9267 (method url-fetch)
9268 (uri (pypi-uri "Flask-HTTPAuth" version))
9269 (sha256
9270 (base32
9271 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
9272 (build-system pyproject-build-system)
9273 (propagated-inputs (list python-flask))
9274 (native-inputs
9275 (list nss-certs-for-test
9276 python-pytest
9277 python-setuptools
9278 python-wheel))
9279 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
9280 (synopsis "Basic and Digest HTTP authentication for Flask routes")
9281 (description "@code{flask_httpauth} provides Basic and Digest HTTP
9282authentication for Flask routes.")
9283 (license license:expat)))
9284
9285(define-public python-uritemplate
9286 (package
9287 (name "python-uritemplate")
9288 (version "4.2.0")
9289 (source
9290 (origin
9291 (method url-fetch)
9292 (uri (pypi-uri "uritemplate" version))
9293 (sha256
9294 (base32
9295 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
9296 (build-system pyproject-build-system)
9297 (native-inputs (list python-pytest python-setuptools))
9298 (home-page "https://uritemplate.readthedocs.io/")
9299 (synopsis "Library to deal with URI Templates")
9300 (description "@code{uritemplate} provides Python library to deal with URI
9301Templates.")
9302 ;; The software is made available under the terms of *either* of the
9303 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
9304 ;; are made under *both* licenses (excerpt from the LICENSE file).
9305 (license (list license:bsd-2 license:asl2.0))))
9306
9307(define-public python-uritemplate-3
9308 (package
9309 (inherit python-uritemplate)
9310 (name "python-uritemplate")
9311 (version "3.0.1")
9312 (source (origin
9313 (method url-fetch)
9314 (uri (pypi-uri "uritemplate" version))
9315 (sha256
9316 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
9317
9318(define-public python-publicsuffix2
9319 (package
9320 (name "python-publicsuffix2")
9321 (version "2.2019-12-21")
9322 (source
9323 (origin
9324 (method git-fetch)
9325 (uri (git-reference
9326 (url "https://github.com/pombredanne/python-publicsuffix2")
9327 (commit (string-append "release-" version))))
9328 (file-name (git-file-name name version))
9329 (sha256
9330 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
9331 (build-system pyproject-build-system)
9332 (arguments
9333 (list
9334 #:tests? #f ;the test suite requires network access
9335 #:phases
9336 #~(modify-phases %standard-phases
9337 (add-after 'unpack 'ignore-maintainer-inputs
9338 (lambda _
9339 ;; Comment out a demand for python-requests, which is used only by
9340 ;; the unused ‘update_psl’ helper command.
9341 (substitute* "setup.py"
9342 (("'requests " match)
9343 (format #f "# ~a" match))))))))
9344 (native-inputs (list python-setuptools))
9345 (home-page "https://github.com/pombredanne/python-publicsuffix2")
9346 (synopsis
9347 "Get a public suffix for a domain name using the Public Suffix List")
9348 (description
9349 "Get a public suffix for a domain name using the Public Suffix List.
9350Forked from and using the same API as the publicsuffix package.")
9351 (license (list license:expat license:mpl2.0))))
9352
9353(define-public python-werkzeug
9354 (package
9355 (name "python-werkzeug")
9356 (version "3.1.3")
9357 (source
9358 (origin
9359 (method url-fetch)
9360 (uri (pypi-uri "werkzeug" version))
9361 (sha256
9362 (base32
9363 "0ij7si3aa3ykac7k7fz481h4majqqwn2iqwhjxkji4y18plkqwk0"))))
9364 (build-system pyproject-build-system)
9365 (arguments
9366 (list
9367 #:test-flags
9368 ;; Test requiring networking setup.
9369 #~(list "--ignore=tests/test_serving.py"
9370 "--deselect=tests/test_debug.py::test_basic"
9371 "--deselect=tests/test_exceptions.py::test_response_body"
9372 "--deselect=tests/middleware/test_http_proxy.py::test_http_proxy")))
9373 (native-inputs
9374 (list python-flit-core
9375 python-pytest
9376 python-watchdog
9377 python-ephemeral-port-reserve
9378 python-pytest-timeout
9379 python-pytest-xprocess))
9380 (propagated-inputs
9381 (list python-markupsafe
9382 python-requests))
9383 (home-page "https://palletsprojects.com/p/werkzeug/")
9384 (synopsis "Utilities for WSGI applications")
9385 (description "One of the most advanced WSGI utility modules. It includes a
9386powerful debugger, full-featured request and response objects, HTTP utilities to
9387handle entity tags, cache control headers, HTTP dates, cookie handling, file
9388uploads, a powerful URL routing system and a bunch of community-contributed
9389addon modules.")
9390 (license license:x11)))
9391
9392(define-public python-werkzeug-1.0
9393 (package
9394 (inherit python-werkzeug)
9395 (version "1.0.1")
9396 (source (origin
9397 (method url-fetch)
9398 (uri (pypi-uri "Werkzeug" version))
9399 (sha256
9400 (base32
9401 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
9402 (patches (search-patches "python-werkzeug-tests.patch"))))
9403 (arguments
9404 (list
9405 #:phases
9406 '(modify-phases %standard-phases
9407 (add-after 'unpack 'ignore-warnings
9408 (lambda _
9409 (substitute* "setup.cfg"
9410 ((" error.*") "")))))))
9411 (propagated-inputs
9412 (list python-requests))
9413 (native-inputs
9414 (list python-pytest python-pytest-timeout python-setuptools
9415 python-wheel))))
9416
9417(define-public python-bottle
9418 (package
9419 (name "python-bottle")
9420 (version "0.13.4")
9421 (source
9422 (origin
9423 (method url-fetch)
9424 (uri (pypi-uri "bottle" version))
9425 (sha256
9426 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
9427 (build-system pyproject-build-system)
9428 (native-inputs (list python-pytest python-setuptools))
9429 (home-page "https://bottlepy.org/")
9430 (synopsis "WSGI framework for small web-applications")
9431 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
9432 (license license:expat)))
9433
9434(define-public python-wtforms
9435 (package
9436 (name "python-wtforms")
9437 (version "3.2.2")
9438 (source
9439 (origin
9440 (method url-fetch)
9441 (uri (pypi-uri "wtforms" version))
9442 (sha256
9443 (base32 "14qbayp2gfmahaqn5migwyz2h1cq3gcdr4q2vd75vwvhhqzwf03v"))))
9444 (build-system pyproject-build-system)
9445 (native-inputs
9446 (list python-babel
9447 python-email-validator
9448 python-hatchling
9449 python-pytest
9450 python-setuptools))
9451 (propagated-inputs (list python-markupsafe))
9452 (home-page "https://wtforms.readthedocs.io/")
9453 (synopsis
9454 "Form validation and rendering library for Python web development")
9455 (description
9456 "WTForms is a flexible forms validation and rendering library
9457for Python web development. It is very similar to the web form API
9458available in Django, but is a standalone package.")
9459 (license license:bsd-3)))
9460
9461(define-public python-wtforms-sqlalchemy
9462 (package
9463 (name "python-wtforms-sqlalchemy")
9464 (version "0.4.1")
9465 (source
9466 (origin
9467 (method url-fetch)
9468 (uri (pypi-uri "WTForms-SQLAlchemy" version))
9469 (sha256
9470 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
9471 (build-system pyproject-build-system)
9472 (native-inputs (list python-pytest python-setuptools python-wheel))
9473 (propagated-inputs (list python-sqlalchemy python-wtforms))
9474 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
9475 (synopsis "SQLAlchemy tools for WTForms")
9476 (description
9477 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
9478package from WTForms. The package has been renamed to
9479@code{wtforms_sqlalchemy} but otherwise should function the same as
9480@code{wtforms.ext.sqlalchemy} did.")
9481 (license license:bsd-3)))
9482
9483(define-public python-urlgrabber
9484 (package
9485 (name "python-urlgrabber")
9486 (version "4.1.0")
9487 (source
9488 (origin
9489 (method url-fetch)
9490 (uri (pypi-uri "urlgrabber" version))
9491 (sha256
9492 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
9493 (build-system pyproject-build-system)
9494 (arguments
9495 (list
9496 #:tests? #f ; Most tests require network access.
9497 #:phases
9498 #~(modify-phases %standard-phases
9499 (replace 'check
9500 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
9501 (when tests?
9502 (invoke "python" "test/runtests.py")))))))
9503 (native-inputs (list python-setuptools))
9504 (propagated-inputs
9505 (list python-pycurl python-setuptools python-six))
9506 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
9507 (synopsis "High-level cross protocol url-grabber")
9508 (description
9509 "@code{urlgrabber} is a library that unifies access to files available on
9510the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
9511supports features like HTTP keep-alive, reget, throttling and more.")
9512 (license license:lgpl2.1+)))
9513
9514(define-public python-pycares
9515 (package
9516 (name "python-pycares")
9517 (version "4.11.0")
9518 (source
9519 (origin
9520 (method git-fetch)
9521 (uri (git-reference
9522 (url "https://github.com/saghul/pycares")
9523 (commit (string-append "v" version))))
9524 (file-name (git-file-name name version))
9525 (sha256
9526 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
9527 (snippet #~(begin
9528 (rmdir "deps/c-ares")))))
9529 (build-system pyproject-build-system)
9530 (arguments
9531 (list
9532 ;; XXX: Half of the tests require internet access
9533 ;; There is currently no markers to avoid running them.
9534 #:tests? #f
9535 #:phases
9536 #~(modify-phases %standard-phases
9537 (add-after 'unpack 'configure-system-lib
9538 (lambda _
9539 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
9540 (native-inputs (list python-pytest python-setuptools))
9541 (inputs (list c-ares))
9542 (propagated-inputs (list python-cffi))
9543 (home-page "https://github.com/saghul/pycares")
9544 (synopsis "Python interface for @code{c-ares}")
9545 (description
9546 "@code{pycares} is a Python module which provides an interface to
9547@code{c-ares}, a C library that performs DNS requests and name resolutions
9548asynchronously.")
9549 (license license:expat)))
9550
9551(define-public python-yarl
9552 (package
9553 (name "python-yarl")
9554 (version "1.18.3")
9555 (source
9556 (origin
9557 (method url-fetch)
9558 (uri (pypi-uri "yarl" version))
9559 (sha256
9560 (base32
9561 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
9562 (build-system pyproject-build-system)
9563 (arguments
9564 (list
9565 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
9566 #:phases
9567 '(modify-phases %standard-phases
9568 (add-after 'unpack 'avoid-pytest-cov-preload
9569 (lambda _
9570 (substitute* "pytest.ini"
9571 (("-p pytest_cov") ""))))
9572 (add-after 'unpack 'patch-build-system
9573 (lambda _
9574 ;; XXX: I don't know how to tell it to build the extensions in
9575 ;; place.
9576 (substitute* "packaging/pep517_backend/_backend.py"
9577 (("build_inplace=False") "build_inplace=True")))))))
9578 (native-inputs
9579 (list python-cython
9580 python-expandvars
9581 python-pytest
9582 python-pytest-xdist
9583 python-setuptools
9584 python-tomli))
9585 (propagated-inputs
9586 (list python-packaging python-idna python-multidict python-propcache))
9587 (home-page "https://github.com/aio-libs/yarl/")
9588 (synopsis "Yet another URL library")
9589 (description "@code{yarl} module provides handy @code{URL} class
9590for URL parsing and changing.")
9591 (license license:asl2.0)))
9592
9593(define-public python-canvasapi
9594 (package
9595 (name "python-canvasapi")
9596 (version "3.4.0")
9597 (source (origin
9598 (method git-fetch)
9599 (uri (git-reference
9600 (url "https://github.com/ucfopen/canvasapi")
9601 (commit (string-append "v" version))))
9602 (file-name (git-file-name name version))
9603 (sha256
9604 (base32
9605 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
9606 (build-system pyproject-build-system)
9607 (propagated-inputs (list python-arrow python-pytz python-requests))
9608 (native-inputs (list python-pytest
9609 python-requests-mock
9610 python-setuptools
9611 python-urllib3))
9612 (home-page "https://github.com/ucfopen/canvasapi")
9613 (synopsis "API wrapper for the Canvas LMS")
9614 (description
9615 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
9616The library enables developers to programmatically manage Canvas courses,
9617users, gradebooks, and more.")
9618 (license license:expat)))
9619
9620(define-public python-google
9621 (package
9622 (name "python-google")
9623 (version "3.0.0")
9624 (source
9625 (origin
9626 (method url-fetch)
9627 (uri (pypi-uri "google" version))
9628 (sha256
9629 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
9630 (build-system pyproject-build-system)
9631 (arguments (list #:tests? #f)) ;There are no tests.
9632 (native-inputs (list python-setuptools))
9633 (propagated-inputs (list python-beautifulsoup4))
9634 (home-page "https://breakingcode.wordpress.com/")
9635 (synopsis "Python bindings to the Google search engine")
9636 (description
9637 "This package provides Python bindings for using the Google search
9638engine. Its module is called @code{googlesearch}.")
9639 (license license:bsd-3)))
9640
9641(define-public python-google-api-client
9642 (package
9643 (name "python-google-api-client")
9644 (version "2.187.0")
9645 (source
9646 (origin
9647 (method git-fetch)
9648 (uri (git-reference
9649 (url "https://github.com/google/google-api-python-client")
9650 (commit (string-append "v" version))))
9651 (file-name (git-file-name name version))
9652 (sha256
9653 (base32 "09vq5d32avri0gl8c7nn5dv2xds1jzjms7vqk3gn66nm2m37x8mv"))))
9654 (build-system pyproject-build-system)
9655 (arguments
9656 (list
9657 #:test-flags
9658 #~(list
9659 "-k"
9660 (string-join
9661 (list
9662 ;; XXX: Deprecated behavior.
9663 "not test_client_options_universe_configured_with_mtls"
9664 "test_universe_env_var_configured_with_mtls"
9665 ;; XXX: Requires CA certificates.
9666 "test_credentials_and_credentials_file_mutually_exclusive")
9667 " and not ")
9668 "tests")))
9669 (native-inputs
9670 (list python-parameterized
9671 python-pytest
9672 python-setuptools))
9673 (propagated-inputs
9674 (list python-google-api-core
9675 python-google-auth
9676 python-google-auth-httplib2
9677 python-httplib2
9678 python-pyparsing
9679 python-uritemplate-3))
9680 (home-page "https://github.com/google/google-api-python-client")
9681 (synopsis "Core Python library for accessing Google APIs")
9682 (description "Python client library for Google's discovery based APIs")
9683 (license license:asl2.0)))
9684
9685(define-public python-google-auth-httplib2
9686 (package
9687 (name "python-google-auth-httplib2")
9688 (version "0.2.0")
9689 (source (origin
9690 (method url-fetch)
9691 (uri (pypi-uri "google-auth-httplib2" version))
9692 (sha256
9693 (base32 "018fckshilc6z2qpj1pclh8haanbq3lr85w6p4g4z5wgyjnppaiq"))))
9694 (build-system pyproject-build-system)
9695 (propagated-inputs
9696 (list python-google-auth python-httplib2))
9697 (native-inputs
9698 (list python-pytest
9699 python-pyparsing
9700 python-pytest-localserver
9701 python-flask
9702 python-setuptools))
9703 (home-page
9704 "https://github.com/GoogleCloudPlatform/google-auth-library-python-httplib2")
9705 (synopsis "Google Authentication Library: httplib2 transport")
9706 (description "This package provides a Google Authentication Library plugin
9707for httplib2 transport.")
9708 (license license:asl2.0)))
9709
9710(define-public python-google-auth-oauthlib
9711 (package
9712 (name "python-google-auth-oauthlib")
9713 (version "1.2.4")
9714 (home-page
9715 "https://github.com/GoogleCloudPlatform/\
9716google-auth-library-python-oauthlib")
9717 (source
9718 (origin
9719 (method git-fetch)
9720 (uri (git-reference
9721 (url home-page)
9722 (commit (string-append "v" version))))
9723 (file-name (git-file-name name version))
9724 (sha256
9725 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
9726 (build-system pyproject-build-system)
9727 (propagated-inputs (list python-google-auth python-requests-oauthlib))
9728 (native-inputs
9729 (list python-click python-mock python-pytest python-setuptools))
9730 (synopsis "Google Authentication Library: oauthlib")
9731 (description "This package provides a Google Authentication Library plugin
9732with oauthlib.")
9733 (license license:asl2.0)))
9734
9735(define-public whoogle-search
9736 (package
9737 (name "whoogle-search")
9738 (version "0.8.4")
9739 (source (origin
9740 (method url-fetch)
9741 (uri (pypi-uri "whoogle-search" version))
9742 (sha256
9743 (base32
9744 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
9745 (build-system pyproject-build-system)
9746 (arguments
9747 (list
9748 ;; The tests need network access
9749 #:tests? #f))
9750 (propagated-inputs
9751 (list python-beautifulsoup4
9752 python-brotli
9753 python-cryptography
9754 python-cssutils
9755 python-defusedxml
9756 python-flask
9757 python-dotenv
9758 python-requests
9759 python-stem
9760 python-validators
9761 python-waitress))
9762 (native-inputs (list python-setuptools python-wheel))
9763 (home-page "https://github.com/benbusby/whoogle-search")
9764 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
9765 (description
9766 "Get Google results, but without any ads, javascript, AMP links,
9767cookies, or IP address tracking. Quick and simple to implement as a primary
9768search engine replacement on both desktop and mobile.")
9769 (license license:expat)))
9770
9771(define-public python-hawkauthlib
9772 (package
9773 (name "python-hawkauthlib")
9774 (version "2.0.0")
9775 (source
9776 (origin
9777 (method git-fetch)
9778 (uri (git-reference
9779 (url "https://github.com/mozilla-services/hawkauthlib")
9780 (commit (string-append "v" version))))
9781 (file-name (git-file-name name version))
9782 (sha256
9783 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
9784 (build-system pyproject-build-system)
9785 (arguments
9786 (list
9787 #:test-backend #~'unittest
9788 #:phases
9789 #~(modify-phases %standard-phases
9790 (add-after 'unpack 'fix-python-incompatibilities
9791 (lambda _
9792 (substitute* (find-files "hawkauthlib/tests" "\\.py$")
9793 (("assertEquals") "assertEqual")))))))
9794 (native-inputs (list python-setuptools))
9795 (propagated-inputs (list python-requests python-webob))
9796 (home-page "https://github.com/mozilla-services/hawkauthlib")
9797 (synopsis "Hawk Access Authentication protocol")
9798 (description
9799 "This is a low-level Python library for implementing Hawk Access
9800Authentication, a simple HTTP request-signing scheme.")
9801 (license license:mpl2.0)))
9802
9803(define-public python-pybrowserid
9804 (package
9805 (name "python-pybrowserid")
9806 (version "0.14.0")
9807 (source
9808 (origin
9809 (method git-fetch)
9810 (uri (git-reference
9811 (url "https://github.com/mozilla/PyBrowserID")
9812 (commit version)))
9813 (file-name (git-file-name name version))
9814 (sha256
9815 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
9816 (build-system pyproject-build-system)
9817 (arguments
9818 (list
9819 #:test-backend #~'unittest
9820 #:phases
9821 #~(modify-phases %standard-phases
9822 (add-after 'unpack 'python-3.12-compatibility
9823 (lambda _
9824 (substitute* (find-files "browserid/tests" "\\.py")
9825 (("assertEquals") "assertEqual")))))))
9826 (propagated-inputs (list python-requests))
9827 (native-inputs (list python-mock python-setuptools))
9828 (home-page "https://github.com/mozilla/PyBrowserID")
9829 (synopsis "Python library for the BrowserID protocol")
9830 (description
9831 "This is a Python client library for the BrowserID protocol that
9832underlies Mozilla Persona.")
9833 (license license:mpl2.0)))
9834
9835(define-public python-pyfxa
9836 (package
9837 (name "python-pyfxa")
9838 (version "0.8.1")
9839 (source
9840 (origin
9841 (method git-fetch)
9842 (uri (git-reference
9843 (url "https://github.com/mozilla/PyFxA")
9844 (commit (string-append "v" version))))
9845 (file-name (git-file-name name version))
9846 (sha256
9847 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
9848 (build-system pyproject-build-system)
9849 (arguments
9850 (list
9851 ;; These tests require network access
9852 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
9853 (propagated-inputs
9854 (list python-cryptography
9855 python-pyjwt
9856 python-parameterized
9857 python-hawkauthlib
9858 python-requests))
9859 (native-inputs
9860 (list python-grequests
9861 python-hatchling
9862 python-mock
9863 python-pytest
9864 python-responses))
9865 (home-page "https://github.com/mozilla/PyFxA")
9866 (synopsis "Firefox Accounts client library for Python")
9867 (description
9868 "This is a Python library for interacting with the Firefox Accounts
9869ecosystem.")
9870 (license license:mpl2.0)))
9871
9872(define-public python-hyperlink
9873 (package
9874 (name "python-hyperlink")
9875 (version "21.0.0")
9876 (source
9877 (origin
9878 (method url-fetch)
9879 (uri (pypi-uri "hyperlink" version))
9880 (sha256
9881 (base32
9882 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
9883 (build-system pyproject-build-system)
9884 (arguments
9885 (list #:phases
9886 #~(modify-phases %standard-phases
9887 (add-before 'check 'pretend-to-be-CI
9888 (lambda _
9889 ;; Pretend to be a CI system to skip flaky tests.
9890 (setenv "CI" "true"))))))
9891 (native-inputs
9892 (list python-pytest python-setuptools python-wheel))
9893 (propagated-inputs
9894 (list python-idna))
9895 (home-page "https://github.com/python-hyper/hyperlink")
9896 (synopsis "Python module to create immutable URLs according to spec")
9897 (description "This package provides a Python module to create immutable, and
9898correct URLs for Python according to RFCs 3986 and 3987.")
9899 (license license:expat)))
9900
9901(define-public python-treq
9902 (package
9903 (name "python-treq")
9904 (version "24.9.1")
9905 (source
9906 (origin
9907 (method url-fetch)
9908 (uri (pypi-uri "treq" version))
9909 (sha256
9910 (base32
9911 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
9912 (build-system pyproject-build-system)
9913 (native-inputs
9914 (list python-httpbin
9915 python-pytest
9916 python-service-identity
9917 python-setuptools
9918 python-wheel))
9919 (propagated-inputs
9920 (list python-attrs
9921 python-hyperlink
9922 python-incremental
9923 python-requests
9924 python-twisted
9925 python-typing-extensions))
9926 (home-page "https://github.com/twisted/treq")
9927 (synopsis "Requests-like API built on top of twisted.web's Agent")
9928 (description "This package provides an HTTP library inspired by
9929@code{requests} but written on top of Twisted's @code{Agents}. It offers a
9930high level API for making HTTP requests when using Twisted.")
9931 (license license:expat)))
9932
9933(define-public python-autobahn
9934 (package
9935 (name "python-autobahn")
9936 (version "25.11.1")
9937 (source
9938 (origin
9939 (method url-fetch)
9940 (uri (pypi-uri "autobahn" version))
9941 (sha256
9942 (base32
9943 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
9944 (build-system pyproject-build-system)
9945 (arguments
9946 (list
9947 ;; The tests fail to run:
9948 ;; https://github.com/crossbario/autobahn-python/issues/1117
9949 #:tests? #f
9950 #:phases #~(modify-phases %standard-phases
9951 (add-after 'unpack 'relax-zope-interface
9952 (lambda _
9953 ;; python-zope-interface is a world rebuild package
9954 ;; and our one-digit lower minor version seems to be
9955 ;; fine.
9956 (substitute* "setup.py"
9957 (("zope.interface>=5.2.0")
9958 "zope.interface>=5.1.0"))))
9959 (add-after 'unpack 'strip-xbr
9960 (lambda _
9961 ;; Strip new XBR feature which isn't available in Guix.
9962 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
9963 (native-inputs (list python-setuptools python-wheel))
9964 (propagated-inputs (list python-cbor2
9965 python-cryptography
9966 python-hyperlink
9967 python-msgpack
9968 python-py-ubjson
9969 python-twisted
9970 python-txaio
9971 python-ujson))
9972 (home-page "https://github.com/crossbario/autobahn-python/")
9973 (synopsis "Web Application Messaging Protocol implementation")
9974 (description "This package provides an implementation of the @dfn{Web Application
9975Messaging Protocol} (WAMP). WAMP connects components in distributed
9976applications using Publish and Subscribe (PubSub) and routed Remote Procedure
9977Calls (rRPC). It is ideal for distributed, multi-client and server applications
9978such as IoT applications or multi-user database-driven business applications.")
9979 (license license:expat)))
9980
9981(define-public python-ws4py
9982 (package
9983 (name "python-ws4py")
9984 (version "0.6.0")
9985 (source
9986 (origin
9987 (method git-fetch)
9988 (uri (git-reference
9989 (url "https://github.com/Lawouach/WebSocket-for-Python")
9990 (commit version)))
9991 (file-name (git-file-name name version))
9992 (sha256
9993 (base32
9994 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
9995 (build-system pyproject-build-system)
9996 (arguments
9997 (list
9998 #:phases
9999 #~(modify-phases %standard-phases
10000 (add-after 'unpack 'remove-cherrypy-support
10001 (lambda _
10002 (delete-file "ws4py/server/cherrypyserver.py")
10003 (delete-file "test/test_cherrypy.py"))))))
10004 (native-inputs (list python-setuptools python-pytest))
10005 (propagated-inputs
10006 (list python-gevent python-tornado))
10007 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
10008 (synopsis "WebSocket client and server library")
10009 (description
10010 "This package provides a WebSocket client and server library for Python.")
10011 (license license:bsd-3)))
10012
10013(define-public python-slowapi
10014 (package
10015 (name "python-slowapi")
10016 (version "0.1.9")
10017 (source
10018 (origin
10019 (method git-fetch)
10020 (uri (git-reference
10021 (url "https://github.com/laurents/slowapi")
10022 (commit (string-append "v" version))))
10023 (file-name (git-file-name name version))
10024 (sha256
10025 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
10026 (build-system pyproject-build-system)
10027 (arguments
10028 (list
10029 #:test-flags
10030 ;; These tests fail because the timestamp contains more decimal points
10031 ;; than expected, so a simple equality comparison fails.
10032 '(list "-k" (string-append "not test_headers_no_breach"
10033 " and not test_headers_breach"))))
10034 (propagated-inputs (list python-limits python-redis))
10035 (native-inputs
10036 (list python-fastapi
10037 python-hiro
10038 python-mock
10039 python-poetry-core
10040 python-pytest))
10041 (home-page "https://github.com/laurents/slowapi")
10042 (synopsis "Rate limiting extension for Starlette and Fastapi")
10043 (description
10044 "This package provides a rate limiting extension for Starlette and
10045Fastapi.")
10046 (license license:expat)))
10047
10048(define-public python-slugify
10049 (package
10050 (name "python-slugify")
10051 (version "8.0.4")
10052 (source
10053 (origin
10054 (method git-fetch)
10055 (uri (git-reference
10056 (url "https://github.com/un33k/python-slugify")
10057 (commit (string-append "v" version))))
10058 (file-name (git-file-name name version))
10059 (sha256
10060 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
10061 (build-system pyproject-build-system)
10062 (arguments (list #:test-backend #~'unittest))
10063 (native-inputs (list python-setuptools))
10064 (propagated-inputs (list python-unidecode python-text-unidecode))
10065 (home-page "https://github.com/un33k/python-slugify")
10066 (synopsis "Python Slugify application that handles Unicode")
10067 (description "This package provides a @command{slufigy} command and
10068library to create slugs from unicode strings while keeping it DRY.")
10069 (license license:expat)))
10070
10071(define-public python-branca
10072 (package
10073 (name "python-branca")
10074 (version "0.7.2")
10075 (source
10076 (origin
10077 (method git-fetch) ; no tests in PyPI
10078 (uri (git-reference
10079 (url "https://github.com/python-visualization/branca")
10080 (commit (string-append "v" version))))
10081 (file-name (git-file-name name version))
10082 (sha256
10083 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
10084 (build-system pyproject-build-system)
10085 (arguments
10086 ;; This file requires Selenium.
10087 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
10088 ;; This test passes but is very slow.
10089 "-k" "not test_color_brewer_extendability")))
10090 (propagated-inputs (list python-jinja2))
10091 (native-inputs
10092 (list python-numpy
10093 python-pytest
10094 python-setuptools
10095 python-setuptools-scm
10096 python-wheel))
10097 (home-page "https://github.com/python-visualization/branca")
10098 (synopsis "Generate complex HTML+JS pages with Python")
10099 (description "This library is a spinoff from @code{folium} that would host
10100the non-map-specific features. It can be used to generate HTML + JS.")
10101 (license license:expat)))
10102
10103(define-public python-tinycss2
10104 (package
10105 (name "python-tinycss2")
10106 (version "1.5.1")
10107 (source
10108 (origin
10109 (method git-fetch)
10110 (uri (git-reference
10111 (url "https://github.com/Kozea/tinycss2")
10112 (commit (string-append "v" version))
10113 (recursive? #true)))
10114 (file-name (git-file-name name version))
10115 (sha256
10116 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
10117 (build-system pyproject-build-system)
10118 (native-inputs
10119 (list python-flit
10120 python-pytest))
10121 (propagated-inputs
10122 (list python-webencodings))
10123 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
10124 (synopsis "Low-level CSS parser for Python")
10125 (description "@code{tinycss2} can parse strings, return Python objects
10126representing tokens and blocks, and generate CSS strings corresponding to
10127these objects.
10128
10129Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
10130grammar of CSS but doesn’t know specific rules, properties or values supported
10131in various CSS modules.")
10132 (license license:bsd-3)))
10133
10134(define-public python-tinyhtml5
10135 (package
10136 (name "python-tinyhtml5")
10137 (version "2.1.0")
10138 (source
10139 (origin
10140 (method git-fetch)
10141 (uri (git-reference
10142 (url "https://github.com/CourtBouillon/tinyhtml5")
10143 (commit version)))
10144 (file-name (git-file-name name version))
10145 (sha256
10146 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
10147 (build-system pyproject-build-system)
10148 (propagated-inputs
10149 (list python-webencodings))
10150 (native-inputs
10151 (list python-flit-core
10152 python-pytest))
10153 (home-page "https://github.com/CourtBouillon/tinyhtml5")
10154 (synopsis "Small HTML parser based on the WHATWG HTML specification")
10155 (description "This Python module is a HTML5 parser that transforms a
10156possibly malformed HTML document into an ElementTree tree. This module is a
10157simplified fork of html5lib.")
10158 (license license:expat)))
10159
10160(define-public python-cssselect2
10161 (package
10162 (name "python-cssselect2")
10163 (version "0.9.0")
10164 (source
10165 (origin
10166 (method git-fetch)
10167 (uri (git-reference
10168 (url "https://github.com/Kozea/cssselect2")
10169 (commit version)))
10170 (file-name (git-file-name name version))
10171 (sha256
10172 (base32 "1drvb83siq9s6dygyhab6kzk2v2ib6cv51ls42p4jrxs9q8cdiw0"))))
10173 (build-system pyproject-build-system)
10174 (propagated-inputs
10175 (list python-tinycss2))
10176 (native-inputs
10177 (list python-flit-core
10178 python-pytest))
10179 (home-page "https://doc.courtbouillon.org/cssselect2/stable/")
10180 (synopsis "CSS selectors for Python ElementTree")
10181 (description "@code{cssselect2} is a straightforward implementation of
10182CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
10183ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
10184
10185Unlike the Python package @code{cssselect}, it does not translate selectors to
10186XPath and therefore does not have all the correctness corner cases that are
10187hard or impossible to fix in cssselect.")
10188 (license license:bsd-3)))
10189
10190(define-public python-uvloop
10191 (package
10192 (name "python-uvloop")
10193 (version "0.21.0")
10194 (source
10195 (origin
10196 (method url-fetch)
10197 (uri (pypi-uri "uvloop" version))
10198 (sha256
10199 (base32 "1qq46ym3ymzfn4j6fnykfmr1f4qnb7x7p15dlw37hi38v87jpw9v"))
10200 (modules '((guix build utils)))
10201 (snippet
10202 '(begin (delete-file-recursively "vendor")
10203 (delete-file "uvloop/loop.c")))))
10204 (build-system pyproject-build-system)
10205 (arguments
10206 (list
10207 #:test-flags
10208 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
10209 ;; to get a meaningful idea about where.
10210 #~(list "--timeout=300"
10211 "--timeout-method=thread"
10212 "-k" (string-join
10213 (list
10214 ;; Timeout, because SIGINT cannot be sent to child.
10215 "not test_signals_sigint_pycode_continue"
10216 "test_signals_sigint_pycode_stop"
10217 "test_signals_sigint_uvcode"
10218 "test_signals_sigint_uvcode_two_loop_runs"
10219 ;; This test is racy and prone to get stuck on
10220 ;; various platforms, possibly a aiohttp issue:
10221 ;; https://github.com/MagicStack/uvloop/issues/412
10222 "test_remote_shutdown_receives_trailing_data"
10223 ;; It looks like pytest is preventing
10224 ;; custom stdout/stderr redirection,
10225 ;; even with -s.
10226 "test_process_streams_redirect"
10227 ;; FileNotFoundError: [Errno 2] No such file or
10228 ;; directory
10229 "test_process_env_2"
10230 ;; socket.gaierror: [Errno -2] Name or service not known
10231 "test_getaddrinfo_21"
10232 #$@(if (target-riscv64?)
10233 `("test_renegotiation")
10234 `()))
10235 " and not "))
10236 #:phases
10237 #~(modify-phases %standard-phases
10238 (add-after 'unpack 'preparations
10239 (lambda _
10240 ;; Use packaged libuv.
10241 (substitute* "setup.py" (("self.use_system_libuv = False")
10242 "self.use_system_libuv = True"))
10243 ;; Replace hardcoded shell command.
10244 (substitute* "uvloop/loop.pyx"
10245 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))))
10246 #$@(if (target-riscv64?)
10247 `((add-after 'unpack 'adjust-test-timeouts
10248 (lambda _
10249 (substitute* '("tests/test_tcp.py"
10250 "tests/test_unix.py")
10251 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
10252 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
10253 '())
10254 (add-before 'check 'pre-check
10255 (lambda* (#:key tests? #:allow-other-keys)
10256 (when tests?
10257 ;; Remove Python module, which conflicts with the installed
10258 ;; version, but lacks the built C module.
10259 (delete-file-recursively "uvloop")))))))
10260 (native-inputs
10261 (list python-aiohttp
10262 python-cython
10263 python-psutil
10264 python-pyopenssl
10265 python-pytest
10266 python-pytest-timeout
10267 python-setuptools
10268 python-wheel))
10269 (inputs
10270 (list libuv))
10271 (home-page "https://github.com/MagicStack/uvloop")
10272 (synopsis "Fast implementation of asyncio event loop on top of libuv")
10273 (description
10274 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
10275event loop. It is implemented in Cython and uses libuv under the hood.")
10276 (license license:expat)))
10277
10278(define-public gunicorn
10279 (package
10280 (name "gunicorn")
10281 (version "25.3.0")
10282 (source
10283 (origin
10284 (method url-fetch)
10285 (uri (pypi-uri "gunicorn" version))
10286 (sha256
10287 (base32
10288 "12g85w735s4dszjfidi4vh786rfxsa5rd60il0fcvxknkwpinkpp"))))
10289 (outputs '("out" "doc"))
10290 (build-system pyproject-build-system)
10291 (arguments
10292 `(#:test-flags
10293 ;; Disable the geventlet tests because eventlet uses dnspython, which
10294 ;; does not work in the build container due to lack of /etc/resolv.conf
10295 '("--ignore=tests/workers/test_geventlet.py")
10296 #:phases (modify-phases %standard-phases
10297 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
10298 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
10299 ;; size. Override it to only add the essential entries.
10300 (replace 'wrap
10301 (lambda* (#:key native-inputs inputs outputs
10302 #:allow-other-keys)
10303 (let* ((out (assoc-ref outputs "out"))
10304 (python (assoc-ref (or native-inputs inputs)
10305 "python"))
10306 (sitedir (string-append "/lib/python"
10307 (python-version python)
10308 "/site-packages")))
10309 (wrap-program (string-append out "/bin/gunicorn")
10310 `("PYTHONPATH" ":" prefix
10311 ,(map (lambda (output)
10312 (string-append output sitedir))
10313 (list python out))))))))))
10314 (inputs (list bash-minimal))
10315 (native-inputs
10316 (list binutils ;for ctypes.util.find_library()
10317 python-eventlet
10318 python-gevent
10319 python-h2
10320 python-httpx
10321 python-pytest
10322 python-pytest-asyncio
10323 python-setuptools
10324 python-uvloop))
10325 (propagated-inputs
10326 (list python-packaging
10327 python-setuptools
10328 python-wheel))
10329 (home-page "https://gunicorn.org/")
10330 (synopsis "Python WSGI HTTP Server for UNIX")
10331 (description
10332 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
10333Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
10334Unicorn project. The Gunicorn server is broadly compatible with
10335various web frameworks, simply implemented, light on server resources,
10336and fairly speedy.")
10337 (license license:expat)))
10338
10339;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
10340;; its tests
10341(define-public gunicorn-bootstrap
10342 (package
10343 (inherit gunicorn)
10344 (name "gunicorn")
10345 (arguments `(#:tests? #f))
10346 (properties '((hidden? . #t)))
10347 (native-inputs `())))
10348
10349(define-public python-httptools
10350 (package
10351 (name "python-httptools")
10352 (version "0.7.1")
10353 (source
10354 (origin
10355 ;; PyPI tarball comes with a vendored http-parser and no tests.
10356 (method git-fetch)
10357 (uri (git-reference
10358 (url "https://github.com/MagicStack/httptools")
10359 (commit (string-append "v" version))))
10360 (file-name (git-file-name name version))
10361 (sha256
10362 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
10363 (modules '((guix build utils)))
10364 (snippet
10365 #~(begin (delete-file-recursively "vendor")))))
10366 (build-system pyproject-build-system)
10367 (arguments
10368 (list
10369 #:test-flags
10370 ;; XXX: AssertionError: HttpParserError not raised.
10371 #~(list "-k" "not test_parser_response_leninent_headers_1")
10372 #:phases
10373 #~(modify-phases %standard-phases
10374 (add-after 'unpack 'configure-build-ext
10375 (lambda _
10376 (with-output-to-file "setup.cfg"
10377 (lambda ()
10378 (display "\
10379[build_ext]
10380use_system_llhttp = true
10381use_system_http_parser = true
10382cython_always = true"))))))))
10383 (native-inputs
10384 (list python-cython
10385 python-pytest
10386 python-setuptools))
10387 (inputs
10388 (list http-parser
10389 llhttp))
10390 (home-page "https://github.com/MagicStack/httptools")
10391 (synopsis "Collection of framework independent HTTP protocol utils")
10392 (description
10393 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
10394 (license license:expat)))
10395
10396(define-public python-uvicorn
10397 (package
10398 (name "python-uvicorn")
10399 (version "0.40.0")
10400 (source
10401 (origin
10402 (method git-fetch)
10403 (uri (git-reference
10404 (url "https://github.com/encode/uvicorn")
10405 (commit version)))
10406 (file-name (git-file-name name version))
10407 (sha256
10408 (base32 "0laplrb2sf9jxv4prhrsqf8kpynipqml2idqq4fr7ikij8qsz6b2"))))
10409 (build-system pyproject-build-system)
10410 (arguments
10411 (list
10412 #:test-flags
10413 #~(list "-o" "asyncio_mode=auto"
10414 ;; After tests have been passed successfully some sockets leave
10415 ;; unclosed, causing Pytest to raise warning on teardown.
10416 "-W" "ignore::ResourceWarning"
10417 "-W" "ignore::pytest.PytestUnraisableExceptionWarning"
10418 ;; For some reason tests stacked in infinity re-invocation loop:
10419 ;; AssertionError where is_alive =
10420 ;; <uvicorn.supervisors.multiprocess.Process object at
10421 ;; 0x7ffff39b6110>.is_alive.
10422 ;; Maybe this <https://github.com/encode/uvicorn/issues/2466>.
10423 "--ignore=tests/supervisors/test_multiprocess.py"
10424
10425 #$@(cond
10426 ((or (target-aarch64?)
10427 (target-riscv64?))
10428 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
10429 (#t '())))))
10430 (native-inputs
10431 (list nss-certs-for-test
10432 python-a2wsgi
10433 python-hatchling
10434 python-httpx-bootstrap
10435 python-pytest
10436 python-pytest-asyncio
10437 python-pytest-mock
10438 python-pytest-xdist
10439 python-requests
10440 python-trustme
10441 python-wsproto))
10442 (propagated-inputs
10443 (list python-a2wsgi
10444 python-click
10445 python-dotenv
10446 python-h11
10447 python-httptools
10448 python-pyyaml
10449 python-uvloop
10450 python-watchfiles
10451 python-websockets))
10452 (home-page "https://github.com/encode/uvicorn")
10453 (synopsis "Fast ASGI server implementation")
10454 (description
10455 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
10456and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
10457for HTTP/2 is planned.")
10458 (license license:bsd-3)))
10459
10460(define-public python-translation-finder
10461 (package
10462 (name "python-translation-finder")
10463 (version "2.22")
10464 (source
10465 (origin
10466 (method url-fetch)
10467 (uri (pypi-uri "translation_finder" version))
10468 (sha256
10469 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
10470 (build-system pyproject-build-system)
10471 (arguments
10472 (list
10473 #:test-flags
10474 ;; AssertionError: 31 != 30 : Mismatched count of results
10475 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
10476 (native-inputs
10477 (list python-pytest
10478 python-setuptools))
10479 (propagated-inputs
10480 (list python-charset-normalizer
10481 python-ruamel.yaml
10482 python-weblate-language-data))
10483 (home-page "https://weblate.org/")
10484 (synopsis "Translation file finder for Weblate")
10485 (description "This package provides a function to find translation file in
10486the source code of a project. It supports many translation file formats and
10487is part of the Weblate translation platform.")
10488 (license license:gpl3+)))
10489
10490(define-public python-gitlab
10491 (package
10492 (name "python-gitlab")
10493 (version "7.0.0")
10494 (source
10495 (origin
10496 (method git-fetch)
10497 (uri (git-reference
10498 (url "https://github.com/python-gitlab/python-gitlab")
10499 (commit (string-append "v" version))))
10500 (file-name (git-file-name name version))
10501 (sha256
10502 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
10503 (build-system pyproject-build-system)
10504 (arguments
10505 (list
10506 #:test-flags
10507 #~(list "--ignore=tests/unit/test_graphql.py"
10508 ;; XXX: Missing helper script.
10509 "-k" "not test_data_from_helper" "tests/unit")))
10510 (native-inputs
10511 (list python-anyio
10512 python-pytest
10513 python-responses
10514 python-setuptools))
10515 (propagated-inputs (list python-requests python-requests-toolbelt))
10516 (home-page "https://github.com/python-gitlab/python-gitlab")
10517 (synopsis "Interact with GitLab API")
10518 (description "This package provides an extended library for interacting
10519with GitLab instances through their API.")
10520 (license license:lgpl3+)))
10521
10522(define-public python-path-and-address
10523 (package
10524 (name "python-path-and-address")
10525 (version "2.0.1")
10526 (source
10527 (origin
10528 (method git-fetch)
10529 (uri (git-reference
10530 (url "https://github.com/joeyespo/path-and-address")
10531 (commit (string-append "v" version))))
10532 (file-name (git-file-name name version))
10533 (sha256
10534 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
10535 (build-system pyproject-build-system)
10536 (native-inputs
10537 (list python-pytest python-setuptools))
10538 (home-page "https://github.com/joeyespo/path-and-address")
10539 (synopsis "Functions for command-line server tools used by humans")
10540 (description "Path-and-address resolves ambiguities of command-line
10541interfaces, inferring which argument is the path, and which is the address.")
10542 (license license:expat)))
10543
10544;; XXX: This project missed maintainer upstream, see
10545;; <https://github.com/joeyespo/grip/issues/387>.
10546;; Consider to remove if it keeps failing to build.
10547(define-public grip
10548 (package
10549 (name "grip")
10550 (version "4.6.1")
10551 (source
10552 (origin
10553 (method git-fetch)
10554 (uri (git-reference
10555 (url "https://github.com/joeyespo/grip")
10556 (commit (string-append "v" version))))
10557 (file-name (git-file-name name version))
10558 (sha256
10559 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
10560 (build-system pyproject-build-system)
10561 (arguments
10562 (list
10563 #:test-flags
10564 ;; All tests fail requiring network access, ignore the whole file.
10565 #~(list "--ignore=tests/test_github.py")
10566 #:phases
10567 #~(modify-phases %standard-phases
10568 ;; This fixes the removal of `charset` attribute of requests from
10569 ;; Werkzeug 2.3.0.
10570 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
10571 (add-after 'unpack 'fix-response-encoding
10572 (lambda _
10573 (substitute* "grip/app.py"
10574 (("response.charset")
10575 "getattr(response, 'charset', 'utf-8')")))))))
10576 (native-inputs
10577 (list nss-certs-for-test
10578 python-pytest
10579 python-responses
10580 python-setuptools
10581 python-wheel))
10582 (propagated-inputs
10583 (list python-docopt
10584 python-flask
10585 python-markdown
10586 python-path-and-address
10587 python-pygments
10588 python-requests))
10589 (home-page "https://github.com/joeyespo/grip")
10590 (synopsis "Preview Markdown files using the GitHub API")
10591 (description
10592 "Grip is a command-line server application written in Python that uses
10593the GitHub Markdown API to render a local Markdown file. The styles and
10594rendering come directly from GitHub, so you'll know exactly how it will
10595appear. Changes you make to the file will be instantly reflected in the
10596browser without requiring a page refresh.")
10597 (license license:expat)))
10598
10599(define-public python-port-for
10600 (package
10601 (name "python-port-for")
10602 (version "0.7.4")
10603 (source
10604 (origin
10605 (method url-fetch)
10606 (uri (pypi-uri "port_for" version))
10607 (sha256
10608 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
10609 (build-system pyproject-build-system)
10610 (propagated-inputs
10611 (list python-urllib3))
10612 (native-inputs
10613 (list python-pytest python-setuptools python-wheel))
10614 (home-page "https://github.com/kmike/port-for/")
10615 (synopsis "TCP localhost port finder and association manager")
10616 (description
10617 "This package provides a utility that helps with local TCP ports
10618management. It can find an unused TCP localhost port and remember the
10619association.")
10620 (license license:expat)))
10621
10622(define-public python-livereload
10623 (package
10624 (name "python-livereload")
10625 (version "2.7.1")
10626 (source
10627 (origin
10628 (method git-fetch)
10629 (uri (git-reference
10630 (url "https://github.com/lepture/python-livereload")
10631 (commit (string-append "v" version))))
10632 (file-name (git-file-name name version))
10633 (sha256
10634 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
10635 (build-system pyproject-build-system)
10636 (arguments (list #:test-backend #~'unittest))
10637 (native-inputs (list python-django python-setuptools))
10638 (propagated-inputs (list python-tornado))
10639 (home-page "https://github.com/lepture/python-livereload")
10640 (synopsis "Python LiveReload")
10641 (description
10642 "Python LiveReload provides a command line utility, @command{livereload},
10643for starting a web server in a directory. It can trigger arbitrary commands
10644and serve updated contents upon changes to the directory.")
10645 (license license:bsd-3)))
10646
10647(define-public python-vf-1
10648 (package
10649 (name "python-vf-1")
10650 (version "1.0.0")
10651 (source
10652 (origin
10653 (method git-fetch)
10654 (uri (git-reference
10655 (url "https://git.sr.ht/~solderpunk/VF-1")
10656 (commit (string-append "v" version))))
10657 (file-name (git-file-name name version))
10658 (sha256
10659 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
10660 (build-system pyproject-build-system)
10661 (arguments (list #:tests? #f)) ; No tests.
10662 (native-inputs (list python-setuptools))
10663 (home-page "https://git.sr.ht/~solderpunk/VF-1")
10664 (synopsis "Command line gopher client")
10665 (description "@code{VF-1} is a command line gopher client with
10666@acronym{TLS, Transport Layer Security} support.")
10667 (license license:bsd-2)))
10668
10669(define-public python-httpcore
10670 (package
10671 (name "python-httpcore")
10672 (version "1.0.9")
10673 (source
10674 (origin
10675 ;; PyPI tarball does not contain tests.
10676 (method git-fetch)
10677 (uri (git-reference
10678 (url "https://github.com/encode/httpcore")
10679 (commit version)))
10680 (file-name (git-file-name name version))
10681 (sha256
10682 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
10683 (build-system pyproject-build-system)
10684 (native-inputs
10685 (list nss-certs-for-test
10686 python-hatch-fancy-pypi-readme
10687 python-hatchling
10688 python-pytest
10689 python-pytest-asyncio
10690 python-pytest-httpbin
10691 python-pytest-trio
10692 python-uvicorn
10693 python-trustme))
10694 (propagated-inputs
10695 (list python-anyio
10696 python-certifi
10697 python-h11
10698 python-h2
10699 python-sniffio
10700 python-socksio
10701 python-trio
10702 python-trio-typing))
10703 (home-page "https://github.com/encode/httpcore")
10704 (synopsis "Minimal, low-level HTTP client")
10705 (description
10706 "HTTP Core provides a minimal and low-level HTTP client, which does one
10707thing only: send HTTP requests.
10708
10709Some things HTTP Core does do:
10710
10711@itemize
10712@item Sending HTTP requests.
10713@item Provides both sync and async interfaces.
10714@item Supports HTTP/1.1 and HTTP/2.
10715@item Async backend support for asyncio and trio.
10716@item Automatic connection pooling.
10717@item HTTP(S) proxy support.
10718@end itemize")
10719 (license license:bsd-3)))
10720
10721;;; Variant used to break a cycle between python-httpx and python-uvicorn.
10722(define-public python-httpcore-bootstrap
10723 (hidden-package
10724 (package/inherit python-httpcore
10725 (name "python-httpcore-bootstrap")
10726 (arguments (list #:tests? #f))
10727 (native-inputs (list python-hatchling
10728 python-hatch-fancy-pypi-readme)))))
10729
10730(define-public python-httpx
10731 (package
10732 (name "python-httpx")
10733 (version "0.28.1")
10734 (source
10735 (origin
10736 ;; PyPI tarball does not contain tests.
10737 (method git-fetch)
10738 (uri (git-reference
10739 (url "https://github.com/encode/httpx")
10740 (commit version)))
10741 (file-name (git-file-name name version))
10742 (sha256
10743 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
10744 (build-system pyproject-build-system)
10745 (arguments
10746 (list
10747 ;; 1401 passed, 1 skipped, 5 deselected
10748 #:test-flags
10749 #~(list "-o" "asyncio_mode=auto"
10750 ;; CLI tests are broken.
10751 "--ignore=tests/test_main.py"
10752 "-k" (string-join
10753 ;; These tests try to open an outgoing connection.
10754 (list "not test_async_proxy_close"
10755 "test_sync_proxy_clos"
10756 "test_write_timeout")
10757 " and not "))))
10758 (native-inputs
10759 (list nss-certs-for-test
10760 python-chardet
10761 python-cryptography
10762 python-hatch-fancy-pypi-readme
10763 python-hatchling
10764 python-pytest
10765 python-pytest-asyncio
10766 python-pytest-trio
10767 python-setuptools
10768 python-trio
10769 python-trustme
10770 python-uvicorn))
10771 (propagated-inputs
10772 (list python-anyio
10773 python-certifi
10774 python-httpcore
10775 python-idna
10776 ;; [brotli]
10777 python-brotli
10778 ;; [http2]
10779 python-h2
10780 ;; [socks]
10781 python-socksio
10782 ;; [zstd]
10783 python-zstandard
10784 ;; For trio, see:
10785 ;; <https://github.com/python-trio/trio/issues/2802>.
10786 python-sniffio))
10787 (home-page "https://www.python-httpx.org/")
10788 (synopsis "HTTP client for Python")
10789 (description
10790 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
10791and async APIs, and support for both HTTP/1.1 and HTTP/2.
10792
10793HTTPX builds on the well-established usability of requests, and gives you:
10794
10795@itemize
10796@item A broadly requests-compatible API.
10797@item Standard synchronous interface, but with async support if you need it.
10798@item HTTP/1.1 and HTTP/2 support.
10799@item Ability to make requests directly to WSGI applications or ASGI applications.
10800@item Strict timeouts everywhere.
10801@item Fully type annotated.
10802@item 99% test coverage.
10803@end itemize
10804
10805Plus all the standard features of requests:
10806
10807@itemize
10808@item International Domains and URLs
10809@item Keep-Alive & Connection Pooling
10810@item Sessions with Cookie Persistence
10811@item Browser-style SSL Verification
10812@item Basic/Digest Authentication
10813@item Elegant Key/Value Cookies
10814@item Automatic Decompression
10815@item Automatic Content Decoding
10816@item Unicode Response Bodies
10817@item Multipart File Uploads
10818@item HTTP(S) Proxy Support
10819@item Connection Timeouts
10820@item Streaming Downloads
10821@item .netrc Support
10822@item Chunked Requests
10823@end itemize")
10824 (license license:bsd-3)))
10825
10826;;; Variant used to break a cycle with python-uvicorn.
10827(define-public python-httpx-bootstrap
10828 (hidden-package
10829 (package/inherit python-httpx
10830 (name "python-httpx-bootstrap")
10831 (arguments (list #:tests? #f))
10832 (native-inputs
10833 (list python-hatchling
10834 python-hatch-fancy-pypi-readme))
10835 (propagated-inputs
10836 (modify-inputs propagated-inputs
10837 (replace "python-httpcore" python-httpcore-bootstrap))))))
10838
10839(define-public python-httpx-sse
10840 (package
10841 (name "python-httpx-sse")
10842 (version "0.4.3")
10843 (source
10844 (origin
10845 (method git-fetch)
10846 (uri (git-reference
10847 (url "https://github.com/florimondmanca/httpx-sse")
10848 (commit version)))
10849 (file-name (git-file-name name version))
10850 (sha256
10851 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
10852 (build-system pyproject-build-system)
10853 (native-inputs
10854 (list python-pytest
10855 python-pytest-asyncio
10856 python-setuptools
10857 python-setuptools-scm
10858 python-sse-starlette))
10859 (propagated-inputs (list python-httpx))
10860 (home-page "https://github.com/florimondmanca/httpx-sse")
10861 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
10862 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
10863 (license license:expat)))
10864
10865(define-public python-httpx-ws
10866 (package
10867 (name "python-httpx-ws")
10868 (version "0.9.0")
10869 (source
10870 (origin
10871 (method git-fetch)
10872 (uri (git-reference
10873 (url "https://github.com/frankie567/httpx-ws")
10874 (commit (string-append "v" version))))
10875 (file-name (git-file-name name version))
10876 (sha256
10877 (base32 "1hin6fndvfnx3mjgy30x0ghgjalikxavyj24klcknnly9sqzg83v"))))
10878 (build-system pyproject-build-system)
10879 (propagated-inputs
10880 (list python-anyio
10881 python-httpcore
10882 python-httpx
10883 python-wsproto))
10884 (native-inputs
10885 (list nss-certs-for-test
10886 python-hatch-regex-commit
10887 python-hatchling
10888 python-pytest
10889 python-pytest-cov
10890 python-starlette
10891 python-uvicorn))
10892 (home-page "https://github.com/frankie567/httpx-ws")
10893 (synopsis "WebSockets support for HTTPX")
10894 (description "This package provides @code{WebSockets} support for HTTPX.")
10895 (license license:expat)))
10896
10897(define-public python-wsgiprox
10898 (package
10899 (name "python-wsgiprox")
10900 (version "1.5.2")
10901 (source
10902 (origin
10903 (method url-fetch)
10904 (uri (pypi-uri "wsgiprox" version))
10905 (sha256
10906 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
10907 (build-system pyproject-build-system)
10908 (arguments
10909 ;; The test suite hangs (see:
10910 ;; https://github.com/webrecorder/wsgiprox/issues/6).
10911 (list
10912 #:tests? #f
10913 #:phases
10914 #~(modify-phases %standard-phases
10915 (add-after 'unpack 'fix-pytest-argument
10916 (lambda _
10917 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
10918 (substitute* "setup.py"
10919 (("--doctest-module")
10920 "--doctest-modules")))))))
10921 (propagated-inputs
10922 (list python-certauth python-gevent python-websocket-client))
10923 (native-inputs
10924 (list python-mock python-waitress python-setuptools))
10925 (home-page "https://github.com/webrecorder/wsgiprox")
10926 (synopsis "HTTP/S proxy with WebSockets over WSGI")
10927 (description
10928 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
10929middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
10930The library accepts HTTP and HTTPS proxy connections, and routes them to a
10931designated prefix.")
10932 (license license:asl2.0)))
10933
10934(define-public python-warcio
10935 ;; The PyPI release is missing some test support files (see:
10936 ;; https://github.com/webrecorder/warcio/issues/132).
10937 (package
10938 (name "python-warcio")
10939 (version "1.8.1")
10940 (source
10941 (origin
10942 (method git-fetch)
10943 (uri (git-reference
10944 (url "https://github.com/webrecorder/warcio")
10945 (commit (string-append "v" version))))
10946 (file-name (git-file-name name version))
10947 (sha256
10948 (base32
10949 "19wwg7zmx33c942dbahdkng1byiwr4c9cd1ayrsh13f818n17zps"))))
10950 (build-system pyproject-build-system)
10951 (arguments
10952 (list
10953 #:test-flags ; These tests fail due to networking requirements.
10954 '(list "-k" (format #f "not ~a"
10955 (string-join
10956 '("test_post_chunked"
10957 "test_remote"
10958 "test_capture_http_proxy"
10959 "test_capture_https_proxy"
10960 "test_capture_https_proxy_same_session")
10961 " and not "))
10962 ; The following test requires the hookdns package.
10963 "--ignore=test/test_capture_http_proxy.py")))
10964 (native-inputs
10965 (list python-httpbin
10966 python-pytest
10967 python-requests
10968 python-setuptools
10969 python-wsgiprox))
10970 (home-page "https://github.com/webrecorder/warcio")
10971 (synopsis "Streaming web archival archive (WARC) library")
10972 (description "warcio is a Python library to read and write the WARC format
10973commonly used in Web archives. It is designed for fast, low-level access to
10974web archival content, oriented around a stream of WARC records rather than
10975files.")
10976 (license license:asl2.0)))
10977
10978(define-public python-websockets
10979 (package
10980 (name "python-websockets")
10981 (version "13.1")
10982 (source
10983 (origin
10984 (method git-fetch)
10985 (uri (git-reference
10986 (url "https://github.com/aaugustin/websockets")
10987 (commit version)))
10988 (file-name (git-file-name name version))
10989 (sha256
10990 (base32
10991 "1dx3rf6fmg4ir9cfcn1fil446qz879cwrjq2rcz5zvl71xkw6hb3"))))
10992 (build-system pyproject-build-system)
10993 (arguments
10994 (list #:test-backend #~'unittest
10995 #:phases
10996 #~(modify-phases %standard-phases
10997 (add-before 'check 'extend-test-timeout
10998 (lambda _
10999 ;; Some architectures need an even longer timeout. Make it
11000 ;; long enough that it should never fail due to timeout.
11001 #$@(if (target-riscv64?)
11002 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
11003 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
11004 (native-inputs
11005 (list python-setuptools
11006 python-wheel))
11007 (home-page "https://github.com/aaugustin/websockets")
11008 (synopsis
11009 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
11010 (description
11011 "@code{websockets} is a library for building WebSocket servers and clients
11012in Python with a focus on correctness and simplicity.
11013
11014Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
11015it provides an elegant coroutine-based API.")
11016 (license license:bsd-3)))
11017
11018(define-public selenium-manager
11019 (package
11020 (name "selenium-manager")
11021 (version "4.34.2")
11022 (source
11023 (origin
11024 (method git-fetch)
11025 (uri (git-reference
11026 (url "https://github.com/SeleniumHQ/selenium")
11027 (commit (string-append "selenium-" version "-python"))))
11028 (file-name (git-file-name name version))
11029 (sha256
11030 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
11031 (build-system cargo-build-system)
11032 (arguments
11033 (list
11034 ;; XXX: Almost all tests require either browsers or network access.
11035 #:tests? #f
11036 #:install-source? #f ; Most likely intended as a leaf.
11037 #:phases
11038 #~(modify-phases %standard-phases
11039 (add-after 'unpack 'chdir
11040 (lambda _
11041 (chdir "rust"))))))
11042 (native-inputs (list pkg-config))
11043 (inputs (cons* (list zstd "lib") xz
11044 (cargo-inputs 'selenium-manager)))
11045 (home-page "https://www.selenium.dev")
11046 (synopsis "CLI tool to manager the browser test infrastructure")
11047 (description
11048 "Selenium simplifies web browser automation. It specifically provides
11049infrastructure for the W3C WebDriver specification — a platform and
11050language-neutral coding interface compatible with all major web browsers.
11051
11052Selenium Manager is a CLI tool that automatically manages the browser/driver
11053infrastructure required by Selenium.")
11054 (license license:asl2.0)))
11055
11056(define-public python-selenium
11057 (package/inherit selenium-manager
11058 (name "python-selenium")
11059 (build-system pyproject-build-system)
11060 (arguments
11061 (list
11062 ;; XXX: Disable failing tests.
11063 #:test-flags
11064 #~(list "--ignore-glob=test/selenium/webdriver/*"
11065 ;; Probably requires those.
11066 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
11067 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
11068 ;; XXX: SSL certificates access.
11069 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
11070 "-k" "not test_missing_cdp_devtools_version_falls_back")
11071 #:phases
11072 #~(modify-phases %standard-phases
11073 (add-after 'unpack 'chdir
11074 (lambda _
11075 (chdir "py")))
11076 (add-after 'chdir 'inject-selenium-manager-binary
11077 (lambda* (#:key inputs #:allow-other-keys)
11078 (substitute* "selenium/webdriver/common/selenium_manager.py"
11079 (("compiled_path = Path.*")
11080 (format #f "return Path(~s)~%"
11081 (search-input-file inputs "bin/selenium-manager"))))
11082 (substitute* "pyproject.toml"
11083 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
11084 "")
11085 (("target = \"selenium\\.webdriver\\.common.*\"")
11086 ""))))
11087 (add-after 'chdir 'relax-requirements
11088 (lambda _
11089 (substitute* "pyproject.toml"
11090 (("\"(typing_extensions|trio)~=.*\"," _ target)
11091 (format #f "~s," target))))))))
11092 (propagated-inputs (list python-certifi
11093 python-trio
11094 python-trio-websocket
11095 python-typing-extensions
11096 python-urllib3
11097 python-websocket-client))
11098 (inputs (list selenium-manager))
11099 (native-inputs (list python-filetype
11100 python-pytest
11101 python-pytest-mock
11102 python-pytest-trio
11103 python-setuptools
11104 python-setuptools-rust))
11105 (synopsis "Python bindings for Selenium")
11106 (description
11107 "Selenium enables web browser automation. It specifically provides
11108infrastructure for the W3C WebDriver specification — a platform and
11109language-neutral coding interface compatible with all major web browsers.")))
11110
11111(define-public python-rapidjson
11112 (package
11113 (name "python-rapidjson")
11114 (version "1.23")
11115 (source
11116 (origin
11117 (method git-fetch)
11118 (uri (git-reference
11119 (url "https://github.com/python-rapidjson/python-rapidjson")
11120 (commit (string-append "v" version))))
11121 (file-name (git-file-name name version))
11122 (sha256
11123 (base32 "0ajf919gg3qmi68jb0m6v80al2n65cn2ac36qz46s0h6zh92cl86"))
11124 (modules '((guix build utils)))
11125 (snippet
11126 '(delete-file-recursively "rapidjson"))))
11127 (build-system pyproject-build-system)
11128 (arguments
11129 (list
11130 #:test-flags '(list "tests")
11131 #:phases
11132 #~(modify-phases %standard-phases
11133 ;; We cannot seem to use #:configure-flags with the
11134 ;; pyproject-build-system to override rj_include_dir.
11135 (add-after 'unpack 'override-rapidjson-sources
11136 (lambda _
11137 (substitute* "setup.py"
11138 (("^rj_include_dir =.*")
11139 (string-append "rj_include_dir = '"
11140 #$(this-package-native-input "rapidjson")
11141 "/include/rapidjson" "'"))
11142 (("if not os.path.isdir.*") "if False:")))))))
11143 (native-inputs
11144 (list rapidjson python-pytest python-pytz python-setuptools))
11145 (home-page "https://github.com/python-rapidjson/python-rapidjson")
11146 (synopsis "Python wrapper around rapidjson")
11147 (description "This package provides a python wrapper around rapidjson.")
11148 (license license:expat)))
11149
11150(define-public python-venusian
11151 (package
11152 (name "python-venusian")
11153 (version "3.1.1")
11154 (source
11155 (origin
11156 (method url-fetch)
11157 (uri (pypi-uri "venusian" version))
11158 (sha256
11159 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
11160 (build-system pyproject-build-system)
11161 (native-inputs
11162 (list python-pytest
11163 python-setuptools))
11164 (home-page "https://docs.pylonsproject.org/projects/venusian")
11165 (synopsis "Library for deferring decorator actions")
11166 (description
11167 "Venusian is a library which allows framework authors to defer decorator
11168actions. Instead of taking actions when a function (or class) decorator is
11169executed at import time, you can defer the action usually taken by the
11170decorator until a separate scan phase.")
11171 (license license:repoze)))
11172
11173(define-public python-zope-deprecation
11174 (package
11175 (name "python-zope-deprecation")
11176 (version "6.0")
11177 (source (origin
11178 (method url-fetch)
11179 (uri (pypi-uri "zope_deprecation" version))
11180 (sha256
11181 (base32
11182 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
11183 (build-system pyproject-build-system)
11184 (arguments
11185 (list #:tests? #f)) ;no tests in PyPI
11186 (native-inputs
11187 (list python-setuptools))
11188 (home-page "https://zopedeprecation.readthedocs.io/")
11189 (synopsis "Function for marking deprecations")
11190 (description "The @code{zope.deprecation} module provides a function for
11191marking modules, classes, functions, methods and properties as deprecated,
11192displaying warnings when usaged in application code.")
11193 (license license:zpl2.1)))
11194
11195(define-public python-translationstring
11196 (package
11197 (name "python-translationstring")
11198 (version "1.4")
11199 (source (origin
11200 (method url-fetch)
11201 (uri (pypi-uri "translationstring" version))
11202 (sha256
11203 (base32
11204 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
11205 (build-system pyproject-build-system)
11206 (native-inputs
11207 (list python-pytest
11208 python-setuptools))
11209 (home-page "https://docs.pylonsproject.org/projects/translationstring")
11210 (synopsis "Internationalization tooling for the Pylons project")
11211 (description "This package provides a library used by various Pylons
11212project packages for internationalization (i18n) duties related to
11213translation.")
11214 (license license:repoze)))
11215
11216(define-public python-plaster
11217 (package
11218 (name "python-plaster")
11219 (version "1.1.2")
11220 (source (origin
11221 (method url-fetch)
11222 (uri (pypi-uri "plaster" version))
11223 (sha256
11224 (base32
11225 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
11226 (build-system pyproject-build-system)
11227 (native-inputs
11228 (list python-pytest
11229 python-setuptools))
11230 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
11231 (synopsis "Configuration loader for multiple config file formats")
11232 (description
11233 "Plaster is a loader interface around multiple config file formats. It
11234exists to define a common API for applications to use when they wish to load
11235configuration. The library itself does not aim to handle anything except a
11236basic API that applications may use to find and load configuration settings.
11237Any specific constraints should be implemented in a pluggable loader which can
11238be registered via an entrypoint.")
11239 (license license:repoze)))
11240
11241(define-public python-plaster-pastedeploy
11242 (package
11243 (name "python-plaster-pastedeploy")
11244 (version "1.0.1")
11245 (source (origin
11246 (method url-fetch)
11247 (uri (pypi-uri "plaster_pastedeploy" version))
11248 (sha256
11249 (base32
11250 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
11251 (build-system pyproject-build-system)
11252 (native-inputs
11253 (list python-pytest
11254 python-setuptools))
11255 (propagated-inputs
11256 (list python-plaster python-pastedeploy))
11257 (home-page "https://github.com/Pylons/plaster_pastedeploy")
11258 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
11259 (description
11260 "This plugin for @code{python-plaster} adds support for PasteDeploy
11261syntax, it provides a plaster @code{Loader} object that can parse ini files
11262according to the standard set by PasteDeploy")
11263 (license license:expat)))
11264
11265(define-public python-hupper
11266 (package
11267 (name "python-hupper")
11268 (version "1.12.1")
11269 (source
11270 (origin
11271 (method url-fetch)
11272 (uri (pypi-uri "hupper" version))
11273 (sha256
11274 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
11275 (build-system pyproject-build-system)
11276 (arguments
11277 (list
11278 ;; RuntimeError: timeout waiting for change to
11279 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
11280 #:test-flags #~(list "--ignore=tests/test_it.py")))
11281 (native-inputs
11282 (list python-pytest python-setuptools python-wheel))
11283 (propagated-inputs
11284 (list python-watchdog))
11285 (home-page "https://readthedocs.org/projects/hupper")
11286 (synopsis "Integrated process monitor tracking changes to imported Python files")
11287 (description
11288 "Hupper is an integrated process monitor that will track changes to any
11289imported Python files in sys.modules as well as custom paths. When files are
11290changed the process is restarted.")
11291 (license license:expat)))
11292
11293(define-public python-pyowm
11294 (package
11295 (name "python-pyowm")
11296 (version "3.3.0")
11297 (source
11298 (origin
11299 (method git-fetch)
11300 (uri (git-reference
11301 (url "https://github.com/csparpa/pyowm")
11302 (commit version)))
11303 (file-name (git-file-name name version))
11304 (sha256
11305 (base32
11306 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
11307 (build-system pyproject-build-system)
11308 (arguments (list #:test-flags #~(list "tests/unit")))
11309 (native-inputs (list python-pytest python-setuptools python-wheel))
11310 (propagated-inputs
11311 (list python-geojson-for-pyowm
11312 python-pysocks
11313 python-requests))
11314 (home-page "https://github.com/csparpa/pyowm")
11315 (synopsis "Python wrapper around OpenWeatherMap web APIs")
11316 (description
11317 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
11318 (license license:expat)))
11319
11320(define-public python-pyramid
11321 (package
11322 (name "python-pyramid")
11323 (version "2.0.2")
11324 (source (origin
11325 (method url-fetch)
11326 (uri (pypi-uri "pyramid" version))
11327 (sha256
11328 (base32
11329 "1phqdz068hl3zda263qkjp5am8fmvmpcxp3nrhsna8g472kkh89p"))))
11330 (build-system pyproject-build-system)
11331 (propagated-inputs
11332 (list python-hupper
11333 python-plaster
11334 python-plaster-pastedeploy
11335 python-setuptools
11336 python-translationstring
11337 python-venusian
11338 python-webob
11339 python-zope-component
11340 python-zope-deprecation
11341 python-zope-interface))
11342 (native-inputs (list python-pytest python-webtest python-wheel))
11343 (home-page "https://trypyramid.com/")
11344 (synopsis "Python web-framework suitable for small and large sites")
11345 (description
11346 "Pyramid makes it easy to write web applications. From minimal
11347request/response web apps to larger, grown applications.")
11348 (license license:repoze)))
11349
11350(define-public python-pyramid-chameleon
11351 ;; PyPI lacks a fresh release, use the latest commit associated with
11352 ;; unrleased version, see:
11353 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
11354 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
11355 (revision "0"))
11356 (package
11357 (name "python-pyramid-chameleon")
11358 (version (git-version "0.4.dev0" revision commit))
11359 (source
11360 (origin
11361 (method git-fetch)
11362 (uri (git-reference
11363 (url "https://github.com/Pylons/pyramid_chameleon")
11364 (commit commit)))
11365 (file-name (git-file-name name version))
11366 (sha256
11367 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
11368 (build-system pyproject-build-system)
11369 (native-inputs
11370 (list python-pytest
11371 python-setuptools))
11372 (propagated-inputs
11373 (list python-chameleon
11374 python-pyramid))
11375 (home-page "https://github.com/Pylons/pyramid_chameleon")
11376 (synopsis "Chameleon template compiler for pyramid")
11377 (description
11378 "These package provides bindings for the Chameleon templating system
11379 for the Pyramid web framework.")
11380 (license license:repoze))))
11381
11382(define-public python-pyramid-debugtoolbar
11383 (package
11384 (name "python-pyramid-debugtoolbar")
11385 (version "4.12.1")
11386 (source
11387 (origin
11388 (method url-fetch)
11389 (uri (pypi-uri "pyramid_debugtoolbar" version))
11390 (sha256
11391 (base32 "0gdlc7vcga4vzma53h5csnhh4gwfmv3w8v9y5fhwqpy8979qis3i"))))
11392 (build-system pyproject-build-system)
11393 (arguments
11394 (list
11395 #:test-flags
11396 ;; Large diff assertion not equal faileurs.
11397 #~(list #$@(map (lambda (test)
11398 (string-append "--deselect=tests"
11399 "/test_panels/test_sqla.py::" test))
11400 (list "TestSimpleSelect::test_panel"
11401 "TestTransactionCommit::test_panel"
11402 "TestTransactionRollback::test_panel")))))
11403 (native-inputs
11404 (list python-pytest
11405 python-setuptools
11406 python-webtest))
11407 (propagated-inputs
11408 (list python-pyramid
11409 python-pyramid-chameleon
11410 python-pyramid-jinja2
11411 python-pyramid-mako
11412 ;; python-selenium ; see: guix/guix#3478
11413 python-sqlalchemy
11414 python-waitress))
11415 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
11416 (synopsis "Pyramid debug toolbar")
11417 (description
11418 "This package provides an interactive HTML debugger for Pyramid application
11419development.")
11420 (license license:bsd-3)))
11421
11422(define-public python-pyramid-jinja2
11423 (package
11424 (name "python-pyramid-jinja2")
11425 (version "2.10.1")
11426 (source
11427 (origin
11428 (method url-fetch)
11429 (uri (pypi-uri "pyramid_jinja2" version))
11430 (sha256
11431 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
11432 (build-system pyproject-build-system)
11433 (arguments
11434 (list
11435 #:test-flags
11436 ;; Two tests failed with assertion not equal.
11437 #~(list "-k" "not test_it_relative_to_package and not test_options")))
11438 (native-inputs
11439 (list python-pytest
11440 python-setuptools
11441 python-webtest))
11442 (propagated-inputs
11443 (list python-jinja2
11444 python-markupsafe
11445 python-pyramid
11446 python-zope-deprecation))
11447 (home-page "https://github.com/Pylons/pyramid_jinja2")
11448 (synopsis "Jinja2 template bindings for the Pyramid web framework")
11449 (description "This package provides Jinja2 template bindings for the
11450Pyramid web framework.")
11451 (license license:repoze)))
11452
11453(define-public python-pyramid-mako
11454 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
11455 ;; master, us the latest commit for now.
11456 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
11457 (revision "0"))
11458 (package
11459 (name "python-pyramid-mako")
11460 (version (git-version "1.1.0" revision commit))
11461 (source
11462 (origin
11463 (method git-fetch)
11464 (uri (git-reference
11465 (url "https://github.com/Pylons/pyramid_mako")
11466 (commit commit)))
11467 (file-name (git-file-name name version))
11468 (sha256
11469 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
11470 (build-system pyproject-build-system)
11471 (native-inputs
11472 (list python-pytest
11473 python-setuptools))
11474 (propagated-inputs
11475 (list python-mako
11476 python-pyramid))
11477 (home-page "https://github.com/Pylons/pyramid_mako")
11478 (synopsis "Mako template bindings for the Pyramid web framework")
11479 (description
11480 "This package provides Mako template bindings for the Pyramid web
11481framework.")
11482 (license license:repoze))))
11483
11484(define-public python-pyramid-retry
11485 (package
11486 (name "python-pyramid-retry")
11487 (version "2.1.1")
11488 (source
11489 (origin
11490 (method url-fetch)
11491 (uri (pypi-uri "pyramid_retry" version))
11492 (sha256
11493 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
11494 (build-system pyproject-build-system)
11495 (native-inputs
11496 (list python-pytest
11497 python-setuptools
11498 python-webtest))
11499 (propagated-inputs
11500 (list python-pyramid
11501 python-zope-interface))
11502 (home-page "https://github.com/Pylons/pyramid_retry")
11503 (synopsis "Pyramid execution policy supporting retrying failed requests")
11504 (description
11505 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
11506and can retry them a configurable number of times under certain \"retryable\"
11507error conditions before indicating a failure to the client.")
11508 (license license:expat)))
11509
11510(define-public python-pyramid-tm
11511 (package
11512 (name "python-pyramid-tm")
11513 (version "2.6")
11514 (source
11515 (origin
11516 (method url-fetch)
11517 (uri (pypi-uri "pyramid_tm" version))
11518 (sha256
11519 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
11520 (build-system pyproject-build-system)
11521 (native-inputs
11522 (list python-pytest
11523 python-setuptools
11524 python-webtest))
11525 (propagated-inputs
11526 (list python-pyramid
11527 python-transaction))
11528 (home-page "https://github.com/Pylons/pyramid_tm")
11529 (synopsis "Centralized transaction management for Pyramid")
11530 (description
11531 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
11532active @url{https://pypi.org/project/transaction/, transaction} as provided by
11533the Python transaction package.")
11534 (license license:repoze)))
11535
11536(define-public python-random-user-agent
11537 (package
11538 (name "python-random-user-agent")
11539 (version "1.0.1")
11540 (source
11541 (origin
11542 (method url-fetch)
11543 (uri (pypi-uri "random_user_agent" version))
11544 (sha256
11545 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
11546 (build-system pyproject-build-system)
11547 (arguments (list #:tests? #f)) ; No tests.
11548 (native-inputs (list python-setuptools))
11549 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
11550 (synopsis "List of user agents")
11551 (description
11552 "This package provides a list of user agents, from a collection of more
11553than 326,000 known user-agents. Users can pick a random one, or select one
11554based on filters.")
11555 (license license:expat)))
11556
11557(define-public python-rangehttpserver
11558 (package
11559 (name "python-rangehttpserver")
11560 (version "1.4.0")
11561 (source
11562 (origin
11563 (method git-fetch)
11564 (uri (git-reference
11565 (url "https://github.com/danvk/RangeHTTPServer")
11566 (commit version)))
11567 (file-name (git-file-name name version))
11568 (sha256
11569 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
11570 (build-system pyproject-build-system)
11571 (native-inputs
11572 (list python-pytest
11573 python-requests
11574 python-setuptools))
11575 (home-page "https://github.com/danvk/RangeHTTPServer")
11576 (synopsis "SimpleHTTPServer with support for range requests")
11577 (description
11578 "This tool provides a simple HTTP server with support for Range
11579requests.")
11580 (license license:asl2.0)))
11581
11582(define-public python-flask-restx
11583 (package
11584 (name "python-flask-restx")
11585 (version "1.3.0")
11586 (source
11587 (origin
11588 (method git-fetch) ;no tests in PyPI archive
11589 (uri (git-reference
11590 (url "https://github.com/python-restx/flask-restx")
11591 (commit version)))
11592 (file-name (git-file-name name version))
11593 (sha256
11594 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
11595 (build-system pyproject-build-system)
11596 (arguments
11597 (list
11598 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
11599 #:test-flags
11600 #~(list "--benchmark-skip"
11601 ;; ValueError: http://www.google.com is not a valid URL. Domain
11602 ;; does not exists.
11603 "--deselect=tests/test_inputs.py::URLTest::test_check"
11604 "-k" (string-join
11605 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
11606 (list "not test_rfc822_value"
11607 "test_iso8601_value"
11608 ;; assert 404 == 2000
11609 "test_specs_endpoint_host_and_subdomain"
11610 ;; ValueError: [email protected] is not a valid email
11611 "test_valid_value_check")
11612 " and not "))))
11613 (native-inputs
11614 (list python-blinker
11615 python-faker
11616 python-pytest
11617 python-pytest-benchmark
11618 python-pytest-flask
11619 python-pytest-mock
11620 python-setuptools))
11621 (propagated-inputs
11622 (list python-aniso8601
11623 python-flask
11624 python-importlib-resources
11625 python-jsonschema
11626 python-pytz
11627 python-werkzeug))
11628 (home-page "https://github.com/python-restx/flask-restx")
11629 (synopsis
11630 "Framework for fast, easy and documented API development with Flask")
11631 (description
11632 "Flask-RESTX is an extension for Flask that adds support for quickly building
11633REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
11634 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
11635decorators and tools to describe your API and expose its documentation properly using
11636Swagger.")
11637 (license license:bsd-3)))
11638
11639(define-deprecated-package python-flask-restplus
11640 python-flask-restx)
11641
11642(define-public python-flask-socketio
11643 (package
11644 (name "python-flask-socketio")
11645 (version "5.5.1")
11646 (source
11647 (origin
11648 (method url-fetch)
11649 (uri (pypi-uri "flask_socketio" version))
11650 (sha256
11651 (base32
11652 "1i0yqn39b4v4r2whppx47sg7iicvqzssd1clx7cclk07l52cjinr"))))
11653 (build-system pyproject-build-system)
11654 (propagated-inputs
11655 (list python-flask python-socketio))
11656 (native-inputs
11657 (list python-pytest python-redis python-setuptools python-wheel))
11658 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
11659 (synopsis "Socket.IO integration for Flask applications")
11660 (description "Socket.IO integration for Flask applications")
11661 (license license:expat)))
11662
11663(define-public python-manuel
11664 (package
11665 (name "python-manuel")
11666 (version "1.13.0")
11667 (source
11668 (origin
11669 (method url-fetch)
11670 (uri (pypi-uri "manuel" version))
11671 (sha256
11672 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
11673 (build-system pyproject-build-system)
11674 (arguments
11675 (list
11676 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
11677 #:tests? #f))
11678 (propagated-inputs
11679 (list python-setuptools)) ;install requires
11680 (home-page "https://pypi.org/project/manuel/")
11681 (synopsis "Build tested documentation")
11682 (description
11683 "Manuel lets you mix and match traditional doctests with custom test syntax.")
11684 (license license:asl2.0)))
11685
11686(define-public python-marshmallow-jsonapi
11687 (package
11688 (name "python-marshmallow-jsonapi")
11689 (version "0.26.0")
11690 (source
11691 (origin
11692 (method git-fetch)
11693 (uri (git-reference
11694 ;; XXX: Deprecated upstream: This repository has been archived
11695 ;; by the owner on Jun 6, 2024. It is now read-only.
11696 ;; Using a maintained fork. The pypi name of this fork
11697 ;; is marshmallow-jsonapi-minfork.
11698 (url "https://github.com/tadams42/marshmallow-jsonapi")
11699 (commit version)))
11700 (file-name (git-file-name name version))
11701 (sha256
11702 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
11703 (build-system pyproject-build-system)
11704 (native-inputs
11705 (list python-faker
11706 python-flask
11707 python-pytest
11708 python-setuptools))
11709 (propagated-inputs (list python-marshmallow))
11710 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
11711 (synopsis "JSON:API 1.0 formatting with Marshmallow")
11712 (description
11713 "The marshmallow-jsonapi package provides a simple way to produce
11714@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
11715framework. It includes optional utilities to integrate with Flask. This is a
11716forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
11717 (license license:expat)))
11718
11719(define-public python-pecan
11720 (package
11721 (name "python-pecan")
11722 (version "1.8.0")
11723 (source
11724 (origin
11725 (method git-fetch)
11726 (uri (git-reference
11727 (url "https://github.com/pecan/pecan")
11728 (commit version)))
11729 (file-name (git-file-name name version))
11730 (sha256
11731 (base32 "0w693jpnjy358992f3jrrlf31knkqn0jvz2jx0iz7ziikprc61p8"))))
11732 (build-system pyproject-build-system)
11733 (arguments
11734 (list
11735 #:test-flags '(list "--pyargs" "pecan")))
11736 (native-inputs
11737 (list gunicorn
11738 python-genshi
11739 python-jinja2
11740 python-pytest
11741 python-sqlalchemy-2
11742 python-webtest))
11743 (propagated-inputs
11744 (list python-mako
11745 python-webob))
11746 (home-page "http://github.com/pecan/pecan")
11747 (synopsis "WSGI object-dispatching web framework")
11748 (description "This package provides a WSGI object-dispatching web
11749framework, designed to be lean and fast, with few dependencies.")
11750 (license license:bsd-3)))
11751
11752(define-public python-persistent
11753 (package
11754 (name "python-persistent")
11755 (version "6.1.1")
11756 (source
11757 (origin
11758 (method git-fetch)
11759 (uri (git-reference
11760 (url "https://github.com/zopefoundation/persistent/")
11761 (commit version)))
11762 (file-name (git-file-name name version))
11763 (sha256
11764 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
11765 (build-system pyproject-build-system)
11766 (arguments
11767 (list
11768 #:phases
11769 #~(modify-phases %standard-phases
11770 (replace 'check
11771 (lambda* (#:key tests? #:allow-other-keys)
11772 (if tests?
11773 (invoke "zope-testrunner" "--test-path=src"
11774 ;; XXX: Ignore doc tests.
11775 "!persistent.tests.test_docs")
11776 (format #t "test suite not run~%")))))))
11777 (propagated-inputs
11778 (list python-cffi
11779 python-zope-deferredimport
11780 python-zope-interface
11781 python-zope-testrunner))
11782 (native-inputs
11783 (list python-manuel python-zope-testrunner python-setuptools))
11784 (home-page "https://github.com/zopefoundation/persistent/")
11785 (synopsis "Translucent persistent objects")
11786 (description
11787 "This package contains a generic persistence implementation for Python.
11788It forms the core protocol for making objects interact \"transparently\" with
11789a database such as the ZODB.")
11790 (license license:zpl2.1)))
11791
11792(define-public python-btrees
11793 (package
11794 (name "python-btrees")
11795 (version "6.1")
11796 (source
11797 (origin
11798 (method git-fetch)
11799 (uri (git-reference
11800 (url "https://github.com/zopefoundation/BTrees")
11801 (commit version)))
11802 (file-name (git-file-name name version))
11803 (sha256
11804 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
11805 (build-system pyproject-build-system)
11806 (arguments
11807 (list
11808 #:phases
11809 #~(modify-phases %standard-phases
11810 (replace 'check
11811 (lambda* (#:key tests? #:allow-other-keys)
11812 (if tests?
11813 (invoke "zope-testrunner" "--test-path=src")
11814 (format #t "test suite not run~%")))))))
11815 (propagated-inputs (list python-persistent python-zope-interface))
11816 (native-inputs (list python-persistent python-transaction
11817 python-zope-testrunner python-setuptools))
11818 (home-page "https://github.com/zopefoundation/BTrees")
11819 (synopsis "Scalable persistent object containers")
11820 (description
11821 "This package contains a set of persistent object containers built around a
11822modified BTree data structure. The trees are optimized for use inside ZODB's
11823\"optimistic concurrency\" paradigm, and include explicit resolution of
11824conflicts detected by that mechanism.")
11825 (license license:zpl2.1)))
11826
11827(define-public python-transaction
11828 (package
11829 (name "python-transaction")
11830 (version "5.0")
11831 (source
11832 (origin
11833 (method url-fetch)
11834 (uri (pypi-uri "transaction" version))
11835 (sha256
11836 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
11837 (build-system pyproject-build-system)
11838 (native-inputs
11839 (list python-pytest
11840 python-setuptools))
11841 (propagated-inputs
11842 (list python-zope-interface))
11843 (home-page "https://github.com/zopefoundation/transaction")
11844 (synopsis "Transaction management for Python")
11845 (description "This package contains a generic transaction implementation
11846for Python. It is mainly used by the ZODB.")
11847 (license license:zpl2.1)))
11848
11849(define-public python-truststore
11850 (package
11851 (name "python-truststore")
11852 (version "0.10.4")
11853 (source
11854 (origin
11855 (method url-fetch)
11856 (uri (pypi-uri "truststore" version))
11857 (sha256
11858 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
11859 (build-system pyproject-build-system)
11860 (arguments
11861 (list #:tests? #f)) ;all tests require Internet access
11862 (native-inputs
11863 (list python-flit-core))
11864 (home-page "https://github.com/sethmlarson/truststore")
11865 (synopsis "Verify certificates using native system trust stores")
11866 (description
11867 "Truststore is a library which exposes native system certificate stores (ie
11868\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
11869Python applications no longer need to rely on certifi as a root certificate
11870store.")
11871 (license license:expat)))
11872
11873(define-public python-robot-detection
11874 (package
11875 (name "python-robot-detection")
11876 (version "0.4.0")
11877 (source
11878 (origin
11879 (method git-fetch)
11880 (uri (git-reference
11881 (url "https://github.com/rory/robot-detection")
11882 (commit (string-append "v" version))))
11883 (file-name (git-file-name name version))
11884 (sha256
11885 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
11886 (build-system pyproject-build-system)
11887 (arguments (list #:test-backend #~'unittest))
11888 (native-inputs (list python-setuptools))
11889 (propagated-inputs (list python-six))
11890 (home-page "https://github.com/rory/robot-detection")
11891 (synopsis "Detect web crawlers")
11892 (description
11893 "@code{robot_detection} is a python module to detect if a given HTTP User
11894Agent is a web crawler. It uses the list of registered robots from
11895@url{http://www.robotstxt.org}.")
11896 (license license:gpl3+)))
11897
11898(define-public python-robotframework-requests
11899 (package
11900 (name "python-robotframework-requests")
11901 (version "0.9.7")
11902 (source
11903 (origin
11904 (method git-fetch) ; no tests in PyPI release
11905 (uri (git-reference
11906 (url "https://github.com/MarketSquare/robotframework-requests")
11907 (commit (string-append "v" version))))
11908 (file-name (git-file-name name version))
11909 (sha256
11910 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
11911 (build-system pyproject-build-system)
11912 (native-inputs
11913 (list python-pytest
11914 python-setuptools
11915 python-wheel))
11916 (propagated-inputs
11917 (list python-requests
11918 python-robotframework))
11919 (home-page "https://github.com/MarketSquare/robotframework-requests")
11920 (synopsis "Robot Framework keyword library wrapper around requests")
11921 (description
11922 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
11923Framework} library aimed to provide HTTP API testing functionalities by
11924wrapping the @code{requests} Python library.")
11925 (license license:expat)))
11926
11927(define-public python-pysolr
11928 (package
11929 (name "python-pysolr")
11930 (version "3.10.0")
11931 (source
11932 (origin
11933 (method url-fetch)
11934 (uri (pypi-uri "pysolr" version))
11935 (sha256
11936 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
11937 (build-system pyproject-build-system)
11938 (arguments
11939 '(#:tests? #f)) ; Tests require network access.
11940 (native-inputs
11941 (list python-setuptools
11942 python-setuptools-scm
11943 python-wheel))
11944 (propagated-inputs
11945 (list python-requests))
11946 (home-page "https://github.com/django-haystack/pysolr/")
11947 (synopsis "Lightweight python wrapper for Apache Solr")
11948 (description
11949 "This module provides an interface that queries the Apache Solr server
11950using a pure Python implementation.")
11951 (license license:bsd-3)))
11952
11953(define-public python-pyjsparser
11954 ;; XXX: This project is potentially abandonware, consider to remove in next
11955 ;; refresh cycle, see:
11956 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
11957 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
11958 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
11959 (package
11960 (name "python-pyjsparser")
11961 (version "2.7.1")
11962 (source
11963 (origin
11964 (method url-fetch)
11965 (uri (pypi-uri "pyjsparser" version))
11966 (sha256
11967 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
11968 (build-system pyproject-build-system)
11969 (arguments
11970 '(#:tests? #f)) ;no tests in PyPI
11971 (native-inputs (list python-setuptools))
11972 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
11973 (synopsis "Fast JavaScript parser")
11974 (description
11975 "This package provides a fast JavaScript parser (based on esprima.js)")
11976 (license license:expat)))
11977
11978(define-public python-js2py
11979 (package
11980 (name "python-js2py")
11981 (properties '((commit . "2e017b86e2f18a6c8a842293b1687f2ce7baa12e")
11982 (revision . "0")))
11983 (version (git-version "0.74"
11984 (assoc-ref properties 'revision)
11985 (assoc-ref properties 'commit)))
11986 (source
11987 (origin
11988 (method git-fetch)
11989 (uri (git-reference
11990 (url "https://github.com/PiotrDabkowski/Js2Py")
11991 (commit (assoc-ref properties 'commit))))
11992 (file-name (git-file-name name version))
11993 (sha256
11994 (base32 "0rsac03shkm0yxq91hzxdvhb96wy168bxdw8azi25bvlm8s3l27p"))
11995 (patches
11996 (list
11997 (origin
11998 (method url-fetch)
11999 (uri (string-append "https://github.com/PiotrDabkowski/Js2Py/commit"
12000 "/fd7df4a91fb08060914c7b1d9e94583d18f3371b"
12001 ".patch"))
12002 (file-name (string-append name "-" version "-pull-327.patch"))
12003 (sha256
12004 (base32 "14v89v8qqrsq0d63xbilkvx19l1rk59mlrbxvd4sj138lk7160ki")))))))
12005 (build-system pyproject-build-system)
12006 (arguments
12007 (list #:tests? #f)) ; tests require Node
12008 (native-inputs
12009 (list python-setuptools))
12010 (propagated-inputs
12011 (list python-pyjsparser
12012 python-six
12013 python-tzlocal))
12014 (home-page "https://github.com/PiotrDabkowski/Js2Py")
12015 (synopsis "JavaScript to Python translator")
12016 (description
12017 "This package provides a JavaScript to Python translator and a JavaScript
12018interpreter written in pure Python.")
12019 (license license:expat)))
12020
12021(define-public python-http-ece
12022 (package
12023 (name "python-http-ece")
12024 (version "1.2.1")
12025 (source
12026 (origin
12027 (method git-fetch)
12028 (uri (git-reference
12029 (url "https://github.com/web-push-libs/encrypted-content-encoding")
12030 (commit (string-append "v" version))))
12031 (file-name (git-file-name name version))
12032 (sha256
12033 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
12034 (build-system pyproject-build-system)
12035 (arguments
12036 `(#:phases
12037 (modify-phases %standard-phases
12038 (add-after 'unpack 'change-directory
12039 (lambda _ (chdir "python") #t)))))
12040 (native-inputs
12041 (list python-pytest python-setuptools))
12042 (propagated-inputs
12043 (list python-cryptography))
12044 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
12045 (synopsis "Encrypted Content Encoding for HTTP")
12046 (description
12047 "This package provides a simple implementation of Encrypted Content
12048Encoding for HTTP.")
12049 (license license:expat)))
12050
12051(define-public python-cloud-init
12052 (package
12053 (name "python-cloud-init")
12054 (version "24.2")
12055 (source
12056 (origin
12057 (method git-fetch)
12058 (uri (git-reference
12059 (url "https://github.com/canonical/cloud-init")
12060 (commit version)))
12061 (file-name (git-file-name name version))
12062 (sha256
12063 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
12064 (build-system pyproject-build-system)
12065 (arguments
12066 (list
12067 #:test-flags
12068 '(list
12069 ;; This requires usermod
12070 "--ignore=tests/unittests/distros/test_create_users.py"
12071 ;; This writes to /var
12072 "--ignore=tests/unittests/net/test_dhcp.py"
12073 "-k"
12074 (string-append
12075 ;; This test messes with PATH, so it cannot find mkdir
12076 "not test_path_env_gets_set_from_main"
12077 " and not test_apt_configure_sources_list_"
12078 ;; These all fail because /bin/sh doesn't exist. We cannot patch
12079 ;; this because the generated scripts must use /bin/sh as they are
12080 ;; supposed to be run on minimal systems.
12081 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
12082 " and not test_handler_runs_bootcmd_script_with_error"
12083 " and not test_subp_combined_stderr_stdout"
12084 " and not test_handle_part"))
12085 #:phases
12086 #~(modify-phases %standard-phases
12087 (add-after 'unpack 'patch-references
12088 (lambda _
12089 (substitute* "tests/unittests/cmd/test_clean.py"
12090 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
12091 (add-after 'install 'move-files
12092 (lambda* (#:key inputs outputs #:allow-other-keys)
12093 (for-each (lambda (dir)
12094 (let ((source (string-append (site-packages inputs outputs) "/" dir))
12095 (target (string-append #$output "/" (basename dir))))
12096 (copy-recursively source target)
12097 (delete-file-recursively source)))
12098 (list "etc" "lib" "usr/lib" "usr/share")))))))
12099 (propagated-inputs
12100 (list python-configobj
12101 python-jinja2
12102 python-jsonpatch
12103 python-jsonschema
12104 python-netifaces
12105 python-oauthlib
12106 python-pyserial
12107 python-pyyaml
12108 python-responses))
12109 (native-inputs
12110 (list procps ;for ps when running tests
12111 python-pytest
12112 python-pytest-mock
12113 python-passlib
12114 python-setuptools
12115 python-wheel))
12116 (home-page "https://github.com/canonical/cloud-init")
12117 (synopsis "Cloud instance initialization tools")
12118 (description
12119 "Cloud-init is the multi-distribution method for cross-platform cloud
12120instance initialization. It is supported across all major public cloud
12121providers, provisioning systems for private cloud infrastructure, and
12122bare-metal installations.")
12123 ;; Either license can be chosen
12124 (license (list license:asl2.0 license:gpl3))))
12125
12126(define-public python-cloudscraper
12127 (package
12128 (name "python-cloudscraper")
12129 (version "3.0.0")
12130 (source
12131 (origin
12132 (method git-fetch)
12133 (uri (git-reference
12134 (url "https://github.com/VeNoMouS/cloudscraper")
12135 (commit version)))
12136 (file-name (git-file-name name version))
12137 (sha256
12138 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
12139 (modules '((guix build utils)))
12140 (snippet
12141 '(with-directory-excursion "cloudscraper"
12142 (for-each delete-file
12143 '("captcha/9kw.py" "captcha/anticaptcha.py"))
12144 (substitute* "__init__.py"
12145 ;; Perhaps it's a joke, but don't promote proprietary software.
12146 (("([Th]is feature is not available) in the .*'" _ prefix)
12147 (string-append prefix ".'")))))))
12148 (build-system pyproject-build-system)
12149 (arguments
12150 (list
12151 #:test-flags
12152 #~(list "-k" "not test_403_handling")
12153 #:phases
12154 #~(modify-phases %standard-phases
12155 (add-after 'unpack 'relax-requirements
12156 (lambda _
12157 ;; XXX: Relax brotli dependency.
12158 (substitute* "pyproject.toml"
12159 (("\"brotli>=.*\"")
12160 "\"brotli\""))
12161 ;; XXX: Dependencies, that have not yet been packaged
12162 ;; and cause an import error when included.
12163 (delete-file "cloudscraper/interpreters/v8.py")))
12164 (add-after 'unpack 'fix-references
12165 (lambda _
12166 (substitute* "cloudscraper/interpreters/nodejs.py"
12167 (("'node'")
12168 (string-append "'" (which "node") "'"))))))))
12169 (inputs (list node-lts))
12170 (propagated-inputs
12171 (list python-pycryptodome
12172 python-brotli
12173 python-js2py
12174 python-polling2
12175 python-requests
12176 python-requests-toolbelt
12177 python-responses
12178 python-pyparsing
12179 python-websocket-client))
12180 (native-inputs (list python-pytest python-setuptools))
12181 (home-page "https://github.com/venomous/cloudscraper")
12182 (synopsis "Cloudflare anti-bot bypass")
12183 (description
12184 "This module acts as a webbrowser solving Cloudflare's Javascript
12185challenges.")
12186 (license license:expat)))
12187
12188(define-public python-imap-tools
12189 (package
12190 (name "python-imap-tools")
12191 (version "1.9.0")
12192 (source
12193 (origin
12194 (method git-fetch) ; no tests in PyPI release
12195 (uri (git-reference
12196 (url "https://github.com/ikvk/imap_tools")
12197 (commit (string-append "v" version))))
12198 (file-name (git-file-name name version))
12199 (sha256
12200 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
12201 (arguments
12202 (list
12203 #:test-flags
12204 ;; Tests require a network connection
12205 #~(list "-k" (string-append "not test_action"
12206 " and not test_attributes"
12207 " and not test_connection"
12208 " and not test_folders"
12209 " and not test_idle"
12210 " and not test_live"))))
12211 (build-system pyproject-build-system)
12212 (native-inputs
12213 (list python-pytest python-setuptools python-wheel))
12214 (home-page "https://github.com/ikvk/imap_tools")
12215 (synopsis "Work with email and mailbox by IMAP")
12216 (description
12217 "This Python library provides tools to deal with email and mailboxes
12218over IMAP:
12219
12220@itemize
12221@item Parsed email message attributes
12222@item Query builder for searching emails
12223@item Work with emails in folders (copy, delete, flag, move, seen)
12224@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
12225@end itemize")
12226 (license license:asl2.0)))
12227
12228(define-public python-giturlparse
12229 (package
12230 (name "python-giturlparse")
12231 (version "0.12.0")
12232 (source
12233 (origin
12234 (method git-fetch)
12235 (uri (git-reference
12236 (url "https://github.com/nephila/giturlparse")
12237 (commit version)))
12238 (file-name (git-file-name name version))
12239 (sha256
12240 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
12241 (build-system pyproject-build-system)
12242 (native-inputs (list python-pytest python-setuptools))
12243 (home-page "https://github.com/nephila/giturlparse")
12244 (synopsis "Git URL parsing module")
12245 (description
12246 "This package provides a git URL parsing module which supports parsing
12247and rewriting of remote git URLs from various hosting providers.")
12248 (license license:asl2.0)))
12249
12250(define-public python-hstspreload
12251 (package
12252 (name "python-hstspreload")
12253 (version "2025.1.1")
12254 (source
12255 (origin
12256 (method git-fetch)
12257 (uri (git-reference
12258 (url "https://github.com/sethmlarson/hstspreload")
12259 (commit version)))
12260 (file-name (git-file-name name version))
12261 (sha256
12262 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
12263 (build-system pyproject-build-system)
12264 (arguments (list #:tests? #f)) ; tests require external resources.
12265 (native-inputs (list python-setuptools))
12266 (home-page "https://github.com/sethmlarson/hstspreload")
12267 (synopsis "Chromium HSTS Preload list as a Python package")
12268 (description
12269 "@code{python-hstspreload} contains Chromium HSTS Preload list
12270as a Python package.")
12271 (license license:bsd-3)))
12272
12273(define-public python-sanic-routing
12274 (package
12275 (name "python-sanic-routing")
12276 (version "23.12.0")
12277 (source
12278 (origin
12279 (method url-fetch)
12280 (uri (pypi-uri "sanic-routing" version))
12281 (sha256
12282 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
12283 (build-system pyproject-build-system)
12284 (arguments
12285 ;; PyPi sources does not contain tests, recursive dependency on
12286 ;; python-sanic.
12287 (list #:tests? #f))
12288 (native-inputs (list python-setuptools python-wheel))
12289 (home-page "https://github.com/sanic-org/sanic-routing/")
12290 (synopsis "Routing component for Sanic")
12291 (description "Internal package for @code{python-sanic}, which provides
12292the @code{BasicRouter}.")
12293 (license license:expat)))
12294
12295(define-public python-sanic-testing
12296 (package
12297 (name "python-sanic-testing")
12298 (version "23.12.0")
12299 (source
12300 (origin
12301 (method url-fetch)
12302 (uri (pypi-uri "sanic-testing" version))
12303 (sha256
12304 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
12305 (build-system pyproject-build-system)
12306 (arguments
12307 ;; PyPi sources does not contain tests, recursive dependency on
12308 ;; python-sanic.
12309 (list #:tests? #f))
12310 (propagated-inputs (list python-httpx python-sanic-bootstrap))
12311 (native-inputs (list python-setuptools python-wheel))
12312 (home-page "https://github.com/sanic-org/sanic-testing/")
12313 (synopsis "Test clients for Sanic")
12314 (description "Internal package for @code{python-sanic}, which is
12315meant to be the core testing utility and clients for testing Sanic
12316applications.")
12317 (license license:expat)))
12318
12319(define-public python-sanic
12320 (package
12321 (name "python-sanic")
12322 (version "25.3.0")
12323 (source
12324 (origin
12325 (method url-fetch)
12326 (uri (pypi-uri "sanic" version))
12327 (sha256
12328 (base32 "1fv9wgsj54scbr7qhmwdgc4zqnqpwacpakcfxhsg10gc04h54pbp"))
12329 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
12330 (modules '((guix build utils)))
12331 (snippet #~(substitute* "setup.py"
12332 (("setuptools>=[0-9.]*")
12333 "setuptools")))))
12334 (build-system pyproject-build-system)
12335 (arguments
12336 (list
12337 #:test-flags
12338 #~(list "--asyncio-mode=auto"
12339 "--ignore=tests/benchmark/"
12340 "--ignore=tests/typing/test_typing.py"
12341 ;; Most tests hang or fail
12342 "--ignore=tests/test_cli.py"
12343 "--ignore=tests/worker/test_worker_serve.py"
12344 "-k"
12345 (string-append
12346 ;; PyPi sources lack examples module.
12347 "not test_gunicorn_"
12348 ;; Does not expect brotli and reordered headers.
12349 " and not test_raw_headers"
12350 ;; These look like buggy testcases.
12351 " and not test_zero_downtime"
12352 " and not test_non_default_uvloop_config_raises_warning"
12353 " and not test_listeners_triggered"
12354 " and not test_keep_alive_connection_context"
12355 " and not test_keep_alive_client_timeout"
12356 " and not test_conflicting_body_methods_overload"
12357 " and not test_unix_connection"
12358 ;; Unclear why they fail since core-updates merge.
12359 " and not test_missing_sni"
12360 " and not test_no_matching_cert"
12361 " and not test_wildcards"
12362 ;; These tests fail because subprotocols appear to be
12363 ;; parameterized as None
12364 " and not test_websocket_route_with_subprotocols"
12365 ;; AF_UNIX path too long
12366 " and not test_setup_and_teardown_unix"
12367 " and not test_configure_socket"
12368 ;; Freezes
12369 " and not test_server_run_with_repl"
12370 " and not test_server_run"
12371 " and not test_no_workers"))))
12372 (propagated-inputs
12373 (list python-aiofiles
12374 python-aioquic
12375 python-html5tagger
12376 python-httptools
12377 python-multidict
12378 python-sanic-routing
12379 python-tracerite
12380 python-typing-extensions
12381 python-ujson
12382 python-uvloop
12383 python-websockets))
12384 (native-inputs
12385 (list python-beautifulsoup4
12386 python-chardet
12387 python-cryptography
12388 python-docutils
12389 python-mypy
12390 python-pygments
12391 python-pytest
12392 python-pytest-asyncio
12393 python-pytest-benchmark
12394 python-pytest-sanic
12395 python-sanic-testing
12396 python-setuptools
12397 python-slotscheck
12398 python-towncrier
12399 python-types-ujson
12400 python-uvicorn
12401 python-wheel))
12402 (home-page "https://github.com/sanic-org/sanic/")
12403 (synopsis "Async Python web server/framework")
12404 (description
12405 "Sanic is a Python web server and web framework that's written to go
12406fast. It allows the usage of the @code{async/await} syntax added in Python
124073.5, which makes your code non-blocking and speedy.")
12408 (license license:expat)))
12409
12410(define-public python-sanic-bootstrap
12411 (package
12412 (inherit python-sanic)
12413 (name "python-sanic-bootstrap")
12414 (arguments (list #:tests? #f))
12415 (native-inputs (list python-setuptools python-wheel))))
12416
12417(define-public python-socketio
12418 (package
12419 (name "python-socketio")
12420 (version "5.12.1")
12421 (source
12422 (origin
12423 (method url-fetch)
12424 (uri (pypi-uri "python_socketio" version))
12425 (sha256
12426 (base32
12427 "175sd3fdld3s477i6b3v49yhf1alsbm1vaxzq44nqrqb8wgzz682"))))
12428 (build-system pyproject-build-system)
12429 (arguments
12430 (list #:test-flags
12431 '(list "--timeout=60"
12432 ;; These tests freeze.
12433 "--ignore-glob=tests/async/*")))
12434 (propagated-inputs
12435 (list python-bidict python-engineio python-msgpack))
12436 (native-inputs
12437 (list python-pytest
12438 python-pytest-asyncio
12439 python-pytest-timeout
12440 python-setuptools
12441 python-uvicorn
12442 python-wheel))
12443 (home-page "https://github.com/miguelgrinberg/python-socketio/")
12444 (synopsis "Python Socket.IO server")
12445 (description
12446 "This package provides a Python implementation of the @code{Socket.IO}
12447realtime client and server.")
12448 (license license:expat)))
12449
12450(define-public python-socks
12451 (package
12452 (name "python-socks")
12453 (version "2.8.1")
12454 (source
12455 (origin
12456 (method git-fetch)
12457 (uri (git-reference
12458 (url "https://github.com/romis2012/python-socks")
12459 (commit (string-append "v" version))))
12460 (file-name (git-file-name name version))
12461 (sha256
12462 (base32 "1x95i9w3izivdgz6hadh5kiil12i4ljk4ashgh3g0rjv2rw33vhj"))))
12463 (build-system pyproject-build-system)
12464 (propagated-inputs (list python-trio))
12465 (native-inputs
12466 (list python-anyio
12467 python-flask
12468 python-pytest
12469 python-pytest-asyncio
12470 python-pytest-trio
12471 python-setuptools
12472 python-tiny-proxy
12473 python-trustme
12474 python-yarl))
12475 (home-page "https://github.com/romis2012/python-socks")
12476 (synopsis
12477 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
12478 (description
12479 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
12480 functionality.")
12481 (license license:asl2.0)))
12482
12483(define-public python-socksio
12484 (package
12485 (name "python-socksio")
12486 (version "1.0.0")
12487 (source
12488 (origin
12489 (method url-fetch)
12490 (uri (pypi-uri "socksio" version))
12491 (sha256
12492 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
12493 (build-system pyproject-build-system)
12494 (native-inputs
12495 (list python-flit-core python-pytest))
12496 (home-page "https://github.com/sethmlarson/socksio")
12497 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
12498 (description "The @code{socksio} Python module is a client-side sans-I/O
12499SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
12500@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
12501means the library itself does not handle the actual sending of the bytes
12502through the network, it only deals with the implementation details of the
12503SOCKS protocols. It can be paired with any I/O library.")
12504 (license license:expat)))
12505
12506(define-public python-simple-websocket
12507 (package
12508 (name "python-simple-websocket")
12509 (version "1.1.0")
12510 (source
12511 (origin
12512 (method url-fetch)
12513 (uri (pypi-uri "simple_websocket" version))
12514 (sha256
12515 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
12516 (build-system pyproject-build-system)
12517 (arguments
12518 ;; Requires Internet access to resolve example.com
12519 (list #:test-flags '(list "--ignore=tests/test_client.py")))
12520 (propagated-inputs (list python-wsproto))
12521 (native-inputs (list python-pytest
12522 python-setuptools))
12523 (home-page "https://github.com/miguelgrinberg/simple-websocket")
12524 (synopsis "Simple WebSocket server and client for Python")
12525 (description "This package provides a simple @code{WebSocket} server and
12526client for Python.")
12527 (license license:expat)))
12528
12529(define-public python-siosocks
12530 (package
12531 (name "python-siosocks")
12532 (version "0.3.0")
12533 (source
12534 (origin
12535 (method git-fetch)
12536 (uri (git-reference
12537 (url "https://github.com/pohmelie/siosocks")
12538 (commit (string-append "v" version))))
12539 (file-name (git-file-name name version))
12540 (sha256
12541 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
12542 (build-system pyproject-build-system)
12543 (native-inputs
12544 (list python-pytest
12545 python-pytest-asyncio
12546 python-pytest-trio
12547 python-setuptools))
12548 (propagated-inputs (list python-trio))
12549 (home-page "https://github.com/pohmelie/siosocks")
12550 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
12551 (description
12552 "This package provides a Python module and framework for sans-io socks proxy
12553client/server with couple io backends.
12554
12555Features:
12556@itemize
12557@item Only TCP connect (no BIND, no UDP)
12558@item Both client and server
12559@item SOCKS versions: 4, 4a, 5
12560@item SOCKSv5 auth: no auth, username/password
12561@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
12562@item One-shot socks server (@code{python -m siosocks})
12563@end itemize")
12564 (license license:expat)))
12565
12566(define-public python-tiny-proxy
12567 (package
12568 (name "python-tiny-proxy")
12569 (version "0.2.1")
12570 (source
12571 (origin
12572 (method url-fetch)
12573 (uri (pypi-uri "tiny_proxy" version))
12574 (sha256
12575 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
12576 (build-system pyproject-build-system)
12577 ;; There are only a handful of tests and they require the as yet
12578 ;; unpackaged httpx_socks.
12579 (arguments (list #:tests? #false))
12580 (propagated-inputs (list python-anyio))
12581 (native-inputs
12582 (list python-httpx
12583 python-pytest
12584 python-setuptools
12585 python-wheel))
12586 (home-page "https://github.com/romis2012/tiny-proxy")
12587 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
12588 (description "This package provides a simple proxy server (SOCKS4(a),
12589SOCKS5(h), HTTP tunnel).")
12590 (license license:asl2.0)))
12591
12592(define-public python-azure-nspkg
12593 (package
12594 (name "python-azure-nspkg")
12595 (version "3.0.2")
12596 (source
12597 (origin
12598 (method url-fetch)
12599 (uri (pypi-uri "azure-nspkg" version ".zip"))
12600 (sha256
12601 (base32
12602 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
12603 (build-system pyproject-build-system)
12604 (arguments (list #:tests? #f)) ;no tests in package
12605 (native-inputs (list unzip python-setuptools))
12606 (home-page "https://github.com/Azure/azure-sdk-for-python")
12607 (synopsis "Azure namespace internals")
12608 (description
12609 "This package is an internal Azure namespace package.")
12610 (license license:expat)))
12611
12612(define-public python-azure-storage-nspkg
12613 (package
12614 (name "python-azure-storage-nspkg")
12615 (version "3.1.0")
12616 (source
12617 (origin
12618 (method url-fetch)
12619 (uri (pypi-uri "azure-storage-nspkg" version))
12620 (sha256
12621 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
12622 (build-system pyproject-build-system)
12623 (arguments
12624 (list #:tests? #f)) ;no tests in PyPI archive
12625 (native-inputs (list python-setuptools))
12626 (propagated-inputs (list python-azure-nspkg))
12627 (home-page "https://github.com/Azure/azure-storage-python")
12628 (synopsis "Microsoft Azure Storage Namespace package")
12629 (description
12630 "This project provides a client library in Python that makes it easy to
12631communicate with Microsoft Azure Storage services.")
12632 (license license:expat)))
12633
12634(define-public python-azure-common
12635 (package
12636 (name "python-azure-common")
12637 (version "1.1.28")
12638 (source
12639 (origin
12640 (method url-fetch)
12641 (uri (pypi-uri "azure-common" version ".zip"))
12642 (sha256
12643 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
12644 (build-system pyproject-build-system)
12645 (arguments
12646 (list #:tests? #f)) ;no tests in PyPI archive
12647 (propagated-inputs (list python-azure-nspkg))
12648 (native-inputs (list python-setuptools unzip))
12649 (home-page "https://github.com/Azure/azure-sdk-for-python")
12650 (synopsis "Microsoft Azure Client library for Python")
12651 (description "This package provides the Microsoft Azure Client library for
12652Python.")
12653 (license license:expat)))
12654
12655(define-public python-azure-core
12656 (package
12657 (name "python-azure-core")
12658 (version "1.32.0")
12659 (source
12660 (origin
12661 (method url-fetch)
12662 (uri (pypi-uri "azure_core" version))
12663 (sha256
12664 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
12665 (build-system pyproject-build-system)
12666 (arguments
12667 (list
12668 #:test-flags
12669 `(list ;; This fails because devtools_testutils doesn't exist.
12670 "--ignore=tests/test_connection_string_parsing.py"
12671 ;; These all need network access.
12672 "--ignore=samples"
12673 "--ignore=tests/async_tests/test_streaming_async.py"
12674 "--ignore=tests/test_streaming.py"
12675 "-m" "not asyncio and not live_test_only"
12676 "-k" ,(string-append
12677 "not test_decompress_plain_no_header"
12678 " and not test_compress_plain_no_header"
12679 " and not test_decompress_compressed_no_header"
12680 " and not test_requests_socket_timeout"))
12681 #:phases
12682 #~(modify-phases %standard-phases
12683 (add-before 'check 'add-test-pythonpath
12684 (lambda* (#:key tests? #:allow-other-keys)
12685 (when tests?
12686 (setenv "PYTHONPATH"
12687 (string-append
12688 (getcwd) "/tests/testserver_tests/coretestserver:"
12689 (getenv "GUIX_PYTHONPATH")))))))))
12690 (propagated-inputs
12691 (list python-aiohttp
12692 python-requests
12693 python-six
12694 python-typing-extensions))
12695 (native-inputs
12696 (list python-flask
12697 python-pytest-8
12698 python-pytest-aiohttp
12699 python-pytest-asyncio
12700 python-pytest-trio
12701 python-setuptools
12702 python-wheel))
12703 (home-page "https://github.com/Azure/azure-sdk-for-python")
12704 (synopsis "Microsoft Azure Core library for Python")
12705 (description "This package provides the Microsoft Azure Core library for
12706Python.")
12707 (license license:expat)))
12708
12709(define-public python-azure-storage-blob
12710 (package
12711 (name "python-azure-storage-blob")
12712 (version "12.27.0")
12713 (source
12714 (origin
12715 (method url-fetch)
12716 (uri (pypi-uri "azure_storage_blob" version))
12717 (sha256
12718 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
12719 (build-system pyproject-build-system)
12720 (arguments
12721 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12722 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12723 ;; it hard to package in Guix.
12724 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12725 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12726 (list #:tests? #f))
12727 (native-inputs
12728 (list python-setuptools))
12729 (propagated-inputs
12730 (list python-azure-core
12731 python-cryptography
12732 python-isodate
12733 python-typing-extensions))
12734 (home-page "https://github.com/Azure/azure-sdk-for-python/")
12735 (synopsis "Microsoft Azure Blob Storage client library for Python")
12736 (description "This package provides the Microsoft Azure Blob Storage
12737Client Library for Python.")
12738 (license license:expat)))
12739
12740(define-public python-azure-storage-file-datalake
12741 (package
12742 (name "python-azure-storage-file-datalake")
12743 (version "12.22.0")
12744 (source
12745 (origin
12746 (method url-fetch)
12747 (uri (pypi-uri "azure_storage_file_datalake" version))
12748 (sha256
12749 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
12750 (build-system pyproject-build-system)
12751 (arguments
12752 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12753 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12754 ;; it hard to package in Guix.
12755 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12756 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12757 (list #:tests? #f))
12758 (native-inputs
12759 (list python-setuptools))
12760 (propagated-inputs
12761 (list python-azure-core
12762 python-azure-storage-blob
12763 python-isodate
12764 python-typing-extensions))
12765 (home-page "https://github.com/Azure/azure-sdk-for-python")
12766 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
12767 (description
12768 "This package provides the Microsoft Azure File @code{DataLake} Storage
12769Client Library for Python.")
12770 (license license:expat)))
12771
12772(define-public python-google-auth
12773 (package
12774 (name "python-google-auth")
12775 (version "2.48.0")
12776 (source
12777 (origin
12778 (method url-fetch)
12779 (uri (pypi-uri "google_auth" version))
12780 (sha256
12781 (base32 "1kj1r3vp2jk2wv1mc0a5lpdnsivsqciah68ajhyql86k1imp0zjg"))))
12782 (build-system pyproject-build-system)
12783 (arguments
12784 (list
12785 #:test-flags
12786 ;; This one test uses crypto.sign with an outdated calling convention.
12787 '(list "--ignore=tests/transport/test__mtls_helper.py")))
12788 (propagated-inputs
12789 (list python-aiohttp
12790 python-cryptography
12791 python-pyasn1-modules
12792 python-requests
12793 python-rsa
12794 python-urllib3))
12795 (native-inputs
12796 (list nss-certs-for-test
12797 python-aiohttp
12798 python-aioresponses
12799 python-flask
12800 python-freezegun
12801 python-grpcio
12802 python-oauth2client
12803 python-packaging
12804 python-pyjwt
12805 python-pyopenssl
12806 python-pytest
12807 python-pytest-asyncio
12808 python-pytest-localserver
12809 python-pyu2f
12810 python-requests
12811 python-responses
12812 python-rsa
12813 python-setuptools
12814 python-urllib3))
12815 (home-page "https://github.com/googleapis/google-auth-library-python")
12816 (synopsis "Google Authentication Library")
12817 (description "This library simplifies using Google's various
12818server-to-server authentication mechanisms to access Google APIs.")
12819 (license license:asl2.0)))
12820
12821(define-public python-google-resumable-media
12822 (package
12823 (name "python-google-resumable-media")
12824 (version "2.8.0")
12825 (source
12826 (origin
12827 (method git-fetch)
12828 (uri (git-reference
12829 (url
12830 "https://github.com/googleapis/google-resumable-media-python")
12831 (commit (string-append "v" version))))
12832 (file-name (git-file-name name version))
12833 (sha256
12834 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
12835 (build-system pyproject-build-system)
12836 (arguments
12837 (list
12838 #:test-flags
12839 #~(list
12840 ;; XXX: Missing test_utils.retry.
12841 "--ignore-glob=tests*/system/"
12842 ;; XXX: md5_hash is not mock.sentinel.md5_hash
12843 "-k" (string-join
12844 (list "not test_brotli"
12845 "test_constructor"
12846 "test_decompress")
12847 " and not "))))
12848 (propagated-inputs (list python-google-crc32c))
12849 (native-inputs
12850 (list python-google-auth
12851 python-mock
12852 python-pytest
12853 python-pytest-asyncio
12854 python-setuptools
12855 python-test-utils))
12856 (home-page "https://github.com/googleapis/google-resumable-media-python")
12857 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
12858 (description "This package provides utilities for Google Media Downloads
12859and Resumable Uploads.")
12860 (license license:asl2.0)))
12861
12862(define-public python-googleapis-common-protos
12863 (package
12864 (name "python-googleapis-common-protos")
12865 (version "1.66.0")
12866 (source
12867 (origin
12868 (method git-fetch)
12869 (uri (git-reference
12870 (url "https://github.com/googleapis/python-api-common-protos")
12871 (commit (string-append "v" version))))
12872 (file-name (git-file-name name version))
12873 (sha256
12874 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
12875 (build-system pyproject-build-system)
12876 (propagated-inputs (list python-protobuf))
12877 (native-inputs (list python-pytest python-setuptools))
12878 (home-page "https://github.com/googleapis/python-api-common-protos")
12879 (synopsis "Common protobufs used in Google APIs")
12880 (description
12881 "This package contains Python classes generated from the common protos in
12882the @code{googleapis/api-common-protos} repository.")
12883 (license license:asl2.0)))
12884
12885(define-public python-google-api-core
12886 (package
12887 (name "python-google-api-core")
12888 (version "2.29.0")
12889 (source
12890 (origin
12891 (method git-fetch)
12892 (uri (git-reference
12893 (url "https://github.com/googleapis/python-api-core")
12894 (commit (string-append "v" version))))
12895 (file-name (git-file-name name version))
12896 (sha256
12897 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
12898 (build-system pyproject-build-system)
12899 (arguments
12900 (list
12901 #:test-flags
12902 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
12903 ;; deprecated and scheduled for removal in a future version. Use
12904 ;; timezone-aware objects to represent datetimes in UTC:
12905 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
12906 #~(list "-W" "ignore::DeprecationWarning")))
12907 (propagated-inputs
12908 (list python-google-auth
12909 python-googleapis-common-protos
12910 python-protobuf
12911 python-proto-plus
12912 python-requests))
12913 (native-inputs
12914 (list python-mock
12915 python-pytest
12916 python-pytest-asyncio
12917 python-pytest-mock
12918 python-setuptools))
12919 (home-page "https://github.com/googleapis/python-api-core")
12920 (synopsis "Google API client core library")
12921 (description
12922 "This library defines common helpers used by all Google API clients.")
12923 (license license:asl2.0)))
12924
12925(define-public python-google-cloud-core
12926 (package
12927 (name "python-google-cloud-core")
12928 (version "2.5.0")
12929 (source
12930 (origin
12931 (method git-fetch)
12932 (uri (git-reference
12933 (url "https://github.com/googleapis/python-cloud-core")
12934 (commit (string-append "v" version))))
12935 (file-name (git-file-name name version))
12936 (sha256
12937 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
12938 (build-system pyproject-build-system)
12939 (arguments
12940 (list
12941 #:test-flags
12942 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
12943 ;; deprecated and scheduled for removal in a future version. Use
12944 ;; timezone-aware objects to represent datetimes in UTC:
12945 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
12946 #~(list "-W" "ignore::DeprecationWarning")))
12947 (propagated-inputs (list python-google-api-core python-google-auth))
12948 (native-inputs
12949 (list python-grpcio
12950 python-grpcio-status
12951 python-pytest
12952 python-setuptools))
12953 (home-page "https://github.com/googleapis/python-cloud-core")
12954 (synopsis "Google Cloud API client core library")
12955 (description
12956 "This library defines common helpers (e.g. base @code{Client} classes)
12957used by all of the @code{google-cloud-*} packages.")
12958 (license license:asl2.0)))
12959
12960(define-public python-google-cloud-storage
12961 (package
12962 (name "python-google-cloud-storage")
12963 (version "2.19.0")
12964 (source
12965 (origin
12966 (method git-fetch)
12967 (uri (git-reference
12968 (url "https://github.com/googleapis/python-storage")
12969 (commit (string-append "v" version))))
12970 (file-name (git-file-name name version))
12971 (sha256
12972 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
12973 (build-system pyproject-build-system)
12974 (arguments
12975 (list
12976 #:test-flags
12977 #~(list
12978 ;; XXX: Missing test_utils.retry.
12979 "--ignore=tests/system/"
12980 ;; Needs docker.
12981 "--ignore=tests/conformance/"
12982 ;; XXX: Deprecations.
12983 "-k" (string-join
12984 (list "not test_set_api_request_attr"
12985 "test_create_bucket_w_custom_endpoint"
12986 "test_ctor_w_api_endpoint_override"
12987 "test_ctor_w_custom_endpoint_use_auth"
12988 "test_list_buckets_w_custom_endpoint")
12989 " and not ")
12990 "tests")))
12991 (native-inputs
12992 (list python-googleapis-common-protos
12993 python-mock
12994 python-pytest
12995 python-test-utils
12996 python-setuptools))
12997 (propagated-inputs
12998 (list python-google-api-core
12999 python-google-auth
13000 python-google-cloud-core
13001 python-google-resumable-media
13002 python-protobuf
13003 python-requests))
13004 (home-page "https://github.com/googleapis/python-storage")
13005 (synopsis "Google Cloud Storage API client library")
13006 (description
13007 "Google Cloud Storage allows you to store data on Google infrastructure,
13008and it can be used to distribute large data objects to users via direct
13009download. This package provides a Google Cloud Storage API client library for
13010Python.")
13011 (license license:asl2.0)))
13012
13013(define-public python-smart-open
13014 (package
13015 (name "python-smart-open")
13016 (version "7.3.0")
13017 (source
13018 (origin
13019 (method git-fetch) ;no tests in PyPI archive
13020 (uri (git-reference
13021 (url "https://github.com/piskvorky/smart_open")
13022 (commit (string-append "v" version))))
13023 (file-name (git-file-name name version))
13024 (sha256
13025 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
13026 (build-system pyproject-build-system)
13027 (arguments
13028 (list
13029 #:test-flags
13030 #~(list "--ignore=ci_helpers/"
13031 "--ignore=integration-tests/"
13032 ;; FIXME: Enable when guix/guix#1436 is resolved.
13033 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
13034 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
13035 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
13036 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
13037 "--ignore=tests/test_gcs.py")))
13038 (propagated-inputs
13039 (list python-azure-common
13040 python-azure-core
13041 python-azure-storage-blob
13042 python-boto3
13043 ;; python-google-cloud-storage ;see guix/guix#1436
13044 python-paramiko
13045 python-requests
13046 python-wrapt
13047 python-zstandard))
13048 (native-inputs
13049 (list python-numpy
13050 python-moto
13051 python-pytest
13052 python-pytest-rerunfailures
13053 python-responses
13054 python-setuptools
13055 python-setuptools-scm
13056 python-wheel))
13057 (home-page "https://github.com/piskvorky/smart_open")
13058 (synopsis "Utilities for streaming large files")
13059 (description
13060 "This package provides utilities for streaming large files (S3, HDFS,
13061GCS, Azure Blob Storage, gzip, bz2, etc.)")
13062 (license license:expat)))
13063
13064(define-public python-smart-open-6
13065 (package
13066 (inherit python-smart-open)
13067 (name "python-smart-open")
13068 (version "6.4.0")
13069 (source
13070 (origin
13071 (method git-fetch)
13072 (uri (git-reference
13073 (url "https://github.com/piskvorky/smart_open")
13074 (commit (string-append "v" version))))
13075 (file-name (git-file-name name version))
13076 (sha256
13077 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
13078 (arguments
13079 (list
13080 ;; XXX: Tests need some older native inputs, disable for now.
13081 #:tests? #f))))
13082
13083(define-public python-w3lib
13084 (package
13085 (name "python-w3lib")
13086 (version "2.3.1")
13087 (source
13088 (origin
13089 (method url-fetch)
13090 (uri (pypi-uri "w3lib" version))
13091 (sha256
13092 (base32
13093 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
13094 (build-system pyproject-build-system)
13095 (native-inputs
13096 (list python-pytest python-setuptools python-wheel))
13097 (home-page "https://github.com/scrapy/w3lib")
13098 (synopsis "Python library of web-related functions")
13099 (description
13100 "This is a Python library of web-related functions, such as: remove
13101comments, or tags from HTML snippets, extract base url from HTML snippets,
13102translate entities on HTML strings, among other things.")
13103 (license license:bsd-3)))
13104
13105(define-public python-webcolors
13106 (package
13107 (name "python-webcolors")
13108 (version "24.11.1")
13109 (source
13110 (origin
13111 (method url-fetch)
13112 (uri (pypi-uri "webcolors" version))
13113 (sha256
13114 (base32 "1xl0vn4xa03vjwx6fj19q9kgb94g65gvdf3p0ivsy0i2ydldgczc"))))
13115 (build-system pyproject-build-system)
13116 (arguments
13117 (list
13118 #:phases
13119 '(modify-phases %standard-phases
13120 (add-after 'unpack 'patch-pyproject
13121 (lambda _
13122 ;; XXX Our version of python-pdm-backend does not recognize
13123 ;; "dependency-groups", but is fine with the bogus
13124 ;; "tool.whatever".
13125 (substitute* "pyproject.toml"
13126 (("\\[dependency-groups\\]") "[tool.whatever]")))))))
13127 (native-inputs
13128 (list python-pdm-backend python-pytest))
13129 (home-page "https://github.com/ubernostrum/webcolors")
13130 (synopsis "HTML/CSS color definitions library")
13131 (description "@code{python-webcolors} is a module for working with
13132HTML/CSS color definitions. Normalizing and converting between the following
13133formats is supported.
13134@itemize
13135@item Specification-defined color names
13136@item Six-digit hexadecimal
13137@item Three-digit hexadecimal
13138@item Integer rgb() triplet
13139@item Percentage rgb() triplet
13140@end itemize
13141Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
13142can be handled by the @code{colorsys} module in the Python standard library.")
13143 (license license:bsd-3)))
13144
13145(define-public python-woob
13146 ;; TODO: woob requires backends which are currently installed on the fly in
13147 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
13148 ;; them in the store instead. Many modules are included in the modules
13149 ;; directory in the source tree, but it is unclear how to install them.
13150 ;; Many modules require extra dependencies though, so maybe they should be
13151 ;; packaged independently of woob itself.
13152 (package
13153 (name "python-woob")
13154 (version "3.7")
13155 (source
13156 (origin
13157 (method git-fetch)
13158 (uri (git-reference
13159 (url "https://gitlab.com/woob/woob.git")
13160 (commit version)))
13161 (file-name (git-file-name name version))
13162 (sha256
13163 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
13164 (build-system pyproject-build-system)
13165 (arguments
13166 (list
13167 #:test-flags
13168 ;; Deselect tests that require DNS lookup.
13169 #~(list
13170 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
13171 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
13172 #:phases
13173 #~(modify-phases %standard-phases
13174 (add-before 'build 'relax-requirements
13175 (lambda _
13176 (substitute* "pyproject.toml"
13177 ;; packaging ~= 23.0
13178 (("\"packaging .*\",")
13179 "")
13180 ;; rich~=13.0
13181 (("\"rich .*\",")
13182 "\"rich\",")))))))
13183 (native-inputs
13184 (list nss-certs-for-test
13185 python-pytest
13186 python-setuptools))
13187 (propagated-inputs
13188 (list python-babel
13189 python-colorama
13190 python-cssselect
13191 python-dateutil
13192 python-feedparser
13193 python-html2text
13194 python-lxml
13195 python-packaging
13196 python-pillow
13197 python-prettytable
13198 python-pycountry
13199 python-pyyaml
13200 python-requests
13201 python-responses
13202 python-rich
13203 python-termcolor
13204 python-unidecode))
13205 (home-page "https://woob.tech/")
13206 (synopsis "Woob, Web Outside Of Browsers")
13207 (description
13208 "Woob is a collection of applications able to interact with
13209websites, without requiring the user to open them in a browser. It also
13210provides well-defined APIs to talk to websites lacking one.")
13211 (license license:lgpl3+)))
13212
13213(define-public python-flask-combo-jsonapi
13214 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
13215 (revision "0"))
13216 (package
13217 (name "python-flask-combo-jsonapi")
13218 (version (git-version "1.1.0" revision commit))
13219 (source
13220 (origin
13221 (method git-fetch)
13222 (uri (git-reference
13223 (url "https://github.com/AdCombo/flask-combo-jsonapi")
13224 (commit commit)))
13225 (file-name (git-file-name name version))
13226 (sha256
13227 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
13228 (build-system pyproject-build-system)
13229 (arguments
13230 (list
13231 #:test-flags
13232 #~(list
13233 "-k"
13234 (string-join
13235 (list
13236 ;; XXX: This tests a feature that doesn't make sense when dropping
13237 ;; marshmallow < 3 support.
13238 "not test_compute_schema_propagate_context"
13239 ;; The following tests fail for unknown reasons (see:
13240 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
13241 "test_get_list_with_simple_filter_relationship_custom_qs_api"
13242 "test_get_list_with_simple_filter_relationship_error")
13243 " and not "))
13244 #:phases
13245 #~(modify-phases %standard-phases
13246 (add-after 'unpack 'loosen-requirements
13247 (lambda _
13248 ;; Don't pin specific versions of dependencies.
13249 (substitute* "requirements.txt"
13250 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
13251 (string-append dep "\n"))
13252 (("^marshmallow_jsonapi[=<>].*")
13253 "marshmallow_jsonapi_minfork\n"))
13254 ;; Drop support for marshmallow < 3.
13255 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
13256 "flask_combo_jsonapi/schema.py")
13257 (("from marshmallow\\.base import SchemaABC")
13258 "from marshmallow import Schema")
13259 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
13260 "if isinstance(related_schema_cls, Schema):"))
13261 (substitute* "tests/test_sqlalchemy_data_layer.py"
13262 (("default=None")
13263 "dump_default=None")
13264 (("missing=")
13265 "load_default=")))))))
13266 (propagated-inputs
13267 (list python-flask
13268 python-marshmallow
13269 python-marshmallow-jsonapi
13270 python-simplejson
13271 python-sqlalchemy
13272 python-apispec
13273 python-simplejson
13274 python-six))
13275 (native-inputs
13276 (list python-pytest python-setuptools))
13277 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
13278 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
13279 (description
13280 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
13281APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
13282specification.
13283
13284It tries to combine the power of Flask-Restless with the flexibility of
13285Flask-RESTful to quickly build APIs that fit the complexity of existing
13286real-life projects with legacy data and diverse storage providers.")
13287 (license license:expat))))
13288
13289(define-public python-mwparserfromhell
13290 (package
13291 (name "python-mwparserfromhell")
13292 (version "0.7.2")
13293 (source
13294 (origin
13295 (method git-fetch)
13296 (uri (git-reference
13297 (url "https://github.com/earwig/mwparserfromhell")
13298 (commit (string-append "v" version))))
13299 (file-name (git-file-name name version))
13300 (sha256
13301 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
13302 (build-system pyproject-build-system)
13303 (native-inputs (list python-pytest python-setuptools))
13304 (home-page "https://github.com/earwig/mwparserfromhell")
13305 (synopsis "Python parser for MediaWiki wikicode")
13306 (description
13307 "The MediaWiki Parser From Hell is a python library package that provides
13308a parser for MediaWiki.
13309
13310It exposes parses as normal string objects with additional methods giving
13311access to the special Wikicode features it contains (hyperlinks, tags,
13312templates…). The parser doesn't interpolate strings at all, it remains at a
13313purely formal level.
13314
13315Full documentation may be found at
13316@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
13317 (license license:expat)))
13318
13319(define-public python-tweepy
13320 (package
13321 (name "python-tweepy")
13322 (version "4.16.0")
13323 (source
13324 (origin
13325 (method git-fetch)
13326 (uri
13327 (git-reference
13328 (url "https://github.com/tweepy/tweepy")
13329 (commit (string-append "v" version))))
13330 (file-name (git-file-name name version))
13331 (sha256
13332 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
13333 (build-system pyproject-build-system)
13334 (arguments
13335 ;; tests: 149 passed, 3 skipped, 1 warning
13336 (list #:test-backend #~'unittest
13337 #:test-flags #~(list "discover" "tests")))
13338 (native-inputs
13339 (list nss-certs-for-test
13340 python-flit-core
13341 python-urllib3-1.26
13342 python-vcrpy))
13343 (propagated-inputs
13344 (list python-aiohttp
13345 python-async-lru
13346 python-oauthlib
13347 python-requests
13348 python-requests-oauthlib))
13349 (home-page "https://www.tweepy.org/")
13350 (synopsis "Twitter library for Python")
13351 (description
13352 "This package provides @code{Tweepy}, an easy-to-use Python library for
13353accessing the Twitter API.")
13354 (license license:expat)))
13355
13356(define-public python-quart
13357 (package
13358 (name "python-quart")
13359 (version "0.19.9")
13360 (source
13361 (origin
13362 (method git-fetch) ; no tests in PyPI release
13363 (uri (git-reference
13364 (url "https://github.com/pallets/quart")
13365 (commit version)))
13366 (file-name (git-file-name name version))
13367 (sha256
13368 (base32 "1h5ifv8g9dc9m07vj4v7dfalam83v38545d845vvgys1gan1pscd"))))
13369 (build-system pyproject-build-system)
13370 (native-inputs
13371 (list python-poetry-core
13372 python-pytest
13373 python-pytest-asyncio))
13374 (propagated-inputs
13375 (list hypercorn
13376 python-aiofiles
13377 python-blinker
13378 python-click
13379 python-dotenv
13380 python-flask
13381 python-itsdangerous
13382 python-jinja2
13383 python-markupsafe
13384 python-toml
13385 python-werkzeug))
13386 (home-page "https://gitlab.com/pgjones/quart/")
13387 (synopsis "Python ASGI web microframework with the same API as Flask")
13388 (description
13389 "This package provides a Python ASGI web microframework with the same API
13390as Flask.")
13391 (license license:expat)))
13392
13393(define-public python-quart-trio
13394 (package
13395 (name "python-quart-trio")
13396 (version "0.12.0")
13397 (source
13398 (origin
13399 (method url-fetch)
13400 (uri (pypi-uri "quart_trio" version))
13401 (sha256
13402 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
13403 (build-system pyproject-build-system)
13404 (arguments
13405 (list
13406 #:phases
13407 #~(modify-phases %standard-phases
13408 (add-after 'unpack 'remove-coverage-pytest-options
13409 (lambda _
13410 (substitute* "pyproject.toml"
13411 (("--no-cov-on-fail") "")))))))
13412 (native-inputs
13413 (list python-pdm-backend
13414 python-pytest
13415 python-pytest-sugar
13416 python-pytest-trio))
13417 (propagated-inputs
13418 (list hypercorn
13419 python-quart
13420 python-trio))
13421 (home-page "https://github.com/pgjones/quart-trio")
13422 (synopsis "Extension for Quart to support the Trio event loop")
13423 (description
13424 "This package provides a Quart extension to provide Trio support. This
13425is an alternative to using the asyncio event loop present in the Python
13426standard library and supported by default in Quart.")
13427 (license license:expat)))
13428
13429(define-public python-ajsonrpc
13430 (package
13431 (name "python-ajsonrpc")
13432 (version "1.2.0")
13433 (source
13434 (origin
13435 (method git-fetch)
13436 (uri (git-reference
13437 (url "https://github.com/pavlov99/ajsonrpc")
13438 (commit version)))
13439 (file-name (git-file-name name version))
13440 (sha256
13441 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
13442 (build-system pyproject-build-system)
13443 (arguments
13444 (list
13445 #:phases
13446 #~(modify-phases %standard-phases
13447 (add-after 'unpack 'set-version
13448 (lambda _
13449 (substitute* "ajsonrpc/__init__.py"
13450 (("^__version__ = .*")
13451 (string-append "__version__ = \"" #$version "\"\n"))))))))
13452 (native-inputs
13453 (list python-pytest
13454 python-setuptools))
13455 (propagated-inputs
13456 (list python-quart
13457 python-sanic
13458 python-tornado))
13459 (home-page "https://github.com/pavlov99/ajsonrpc")
13460 (synopsis "Async JSON-RPC 2.0 protocol and server")
13461 (description
13462 "This package provides a Python JSON-RPC 2.0 protocol and server powered
13463by asyncio.")
13464 (license license:expat)))
13465
13466(define-public python-protego
13467 (package
13468 (name "python-protego")
13469 (version "0.4.0")
13470 (source
13471 (origin
13472 (method url-fetch)
13473 (uri (pypi-uri "protego" version))
13474 (sha256
13475 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
13476 (build-system pyproject-build-system)
13477 (native-inputs (list python-pytest python-setuptools python-wheel))
13478 (home-page "https://github.com/scrapy/protego")
13479 (synopsis "Python robots.txt parser with support for modern conventions")
13480 (description "Protego is a pure-Python @file{robots.txt} parser with support
13481for modern conventions.")
13482 (license license:bsd-3)))
13483
13484(define-public python-parsel
13485 (package
13486 (name "python-parsel")
13487 (version "1.10.0")
13488 (source
13489 (origin
13490 (method url-fetch)
13491 (uri (pypi-uri "parsel" version))
13492 (sha256
13493 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
13494 (build-system pyproject-build-system)
13495 (propagated-inputs
13496 (list python-cssselect
13497 python-jmespath
13498 python-lxml
13499 python-typing-extensions
13500 python-w3lib))
13501 (native-inputs
13502 (list python-psutil python-pytest python-setuptools python-wheel))
13503 (home-page "https://github.com/scrapy/parsel")
13504 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
13505 (description "Parsel is a library to extract and remove data from
13506HTML and XML using XPath and CSS selectors, optionally combined with
13507regular expressions.")
13508 (license license:bsd-3)))
13509
13510(define-public python-scrapy
13511 (package
13512 (name "python-scrapy")
13513 (version "2.13.3")
13514 (source
13515 (origin
13516 (method url-fetch)
13517 (uri (pypi-uri "scrapy" version))
13518 (sha256
13519 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
13520 (build-system pyproject-build-system)
13521 (arguments
13522 (list #:test-flags
13523 #~(list "--numprocesses" (number->string (parallel-job-count))
13524 "-k" (string-join
13525 ;; ConnectionRefusedError: [Errno 111] Connection
13526 ;; refused
13527 (list "not test_append"
13528 "test_append_active_mode"
13529 "test_overwrite"
13530 "test_overwrite_active_mode"
13531 "test_persist"
13532 ;; AssertionError
13533 "test_start_deprecated_super")
13534 " and not ")
13535 ;; Skip documentation testing.
13536 "--ignore=docs")
13537 #:phases
13538 #~(modify-phases %standard-phases
13539 (add-before 'check 'prepare-test-environment
13540 (lambda _
13541 (setenv "HOME" "/tmp"))))))
13542 (propagated-inputs
13543 (list python-cryptography
13544 python-cssselect
13545 python-defusedxml
13546 python-itemadapter
13547 python-itemloaders
13548 python-lxml
13549 python-packaging
13550 python-parsel
13551 python-protego
13552 python-pydispatcher
13553 python-pyopenssl
13554 python-pypydispatcher
13555 python-queuelib
13556 python-service-identity
13557 python-tldextract
13558 python-twisted
13559 python-w3lib
13560 python-zope-interface))
13561 (native-inputs
13562 (list nss-certs-for-test
13563 python-hatchling
13564 python-pexpect
13565 python-pytest
13566 python-pytest-xdist
13567 python-setuptools
13568 python-sybil
13569 python-testfixtures))
13570 (home-page "https://scrapy.org")
13571 (synopsis "High-level Web crawling and Web scraping framework")
13572 (description "Scrapy is a fast high-level web crawling and web
13573scraping framework, used to crawl websites and extract structured data
13574from their pages. It can be used for a wide range of purposes, from data
13575mining to monitoring and automated testing.")
13576 (license license:bsd-3)))
13577
13578(define sdmx-test-data
13579 (let* ((commit "cd7899341b46e179e9f19b638478d70197e12c74")
13580 (revision "1")
13581 (name "sdmx-test-data")
13582 (version (git-version "0" revision commit)))
13583 (origin
13584 (method git-fetch)
13585 (uri (git-reference
13586 (url "https://github.com/khaeru/sdmx-test-data")
13587 (commit commit)))
13588 (file-name (git-file-name name version))
13589 (sha256
13590 (base32 "1n9y83raxxpgljbi0wjj27lhmyn19fnc2325a6cchwsa3b65ywv7")))))
13591
13592(define-public python-sdmx1
13593 (package
13594 (name "python-sdmx1")
13595 (version "2.26.0")
13596 (source
13597 (origin
13598 (method git-fetch)
13599 (uri (git-reference
13600 (url "https://github.com/khaeru/sdmx")
13601 (commit (string-append "v" version))))
13602 (file-name (git-file-name name version))
13603 (sha256
13604 (base32 "096c60pxzcw71bc9fj3hpjprrdiia365rqalapxx56g6g1vkgka9"))))
13605 (build-system pyproject-build-system)
13606 (arguments
13607 (list
13608 #:test-flags
13609 #~(list
13610 ;; 804 passed, 122 skipped, 28 deselected, 23 xfailed, 1 xpassed, 3 warnings
13611 ;; XXX: 'Version' object has no attribute 'pre'
13612 "--ignore=sdmx/tests/model/test_version.py"
13613 ;; Most of these tests require network connection.
13614 "--ignore=sdmx/tests/test_client.py"
13615 "--ignore=sdmx/tests/test_sources.py"
13616 "--ignore=sdmx/tests/test_docs.py"
13617 "--ignore=sdmx/tests/test_session.py"
13618 "--ignore=sdmx/tests/writer/test_xml.py"
13619 "--ignore=sdmx/tests/reader/test_xml_v21.py"
13620 "--deselect=sdmx/tests/convert/test_pandas.py::test_dataset_constraint"
13621 ;; Wrong python-flaky version
13622 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas_in_user_cache"
13623 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas"
13624 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v2_1_samples"
13625 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v3_0_samples"
13626 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_doc"
13627 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_message_type"
13628 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_max_errors"
13629 ;; sqlite3.OperationalError
13630 "--deselect=sdmx/tests/util/test_requests.py::TestOfflineAdapter::test_raises")
13631 #:phases
13632 #~(modify-phases %standard-phases
13633 (add-after 'unpack 'fix-version
13634 (lambda _
13635 ;; versioningit needs git tags; patch pyproject.toml to use
13636 ;; static version and create _version.py directly.
13637 (substitute* "pyproject.toml"
13638 (("version.source = \"versioningit\"")
13639 "
13640[tool.hatch.version]
13641path = \"sdmx/_version.py\"")
13642 ((", \"versioningit\"")
13643 ""))
13644 (call-with-output-file "sdmx/_version.py"
13645 (lambda (port)
13646 (format port "__version__ = \"~a\"~%" #$version)))))
13647 (add-before 'check 'pre-check
13648 (lambda _
13649 (setenv "SDMX_TEST_DATA" #$sdmx-test-data)
13650 (setenv "HOME" (dirname (getcwd))))))))
13651 (propagated-inputs
13652 (list python-dateutil
13653 python-lxml
13654 python-pandas
13655 python-platformdirs
13656 python-requests))
13657 (native-inputs
13658 (list python-filelock
13659 python-flaky
13660 python-hatchling
13661 python-jinja2
13662 python-pyarrow
13663 python-pytest
13664 python-pytest-cov
13665 python-pytest-xdist
13666 python-requests-mock
13667 python-requests-cache
13668 python-responses))
13669 (home-page "https://sdmx1.readthedocs.io")
13670 (synopsis "Statistical Data and Metadata eXchange (SDMX) for Python")
13671 (description "This package provides a Python implementation of the
13672SDMX 2.1 and 3.0 standards for Statistical Data and Metadata eXchange.
13673These standards are developed and used by statistical agencies and
13674international organisations. This package can be used to:
13675@itemize
13676@item Explore and retrieve data available from SDMX-REST web services
13677operated by providers including the World Bank, International Monetary
13678Fund, Eurostat, OECD, and United Nations;
13679@item Read and write data and metadata in file formats including
13680SDMX-ML (XML), SDMX-JSON, and SDMX-CSV;
13681@item Convert data and metadata into @code{python-pandas} objects, for
13682use with the analysis, plotting, and other tools in the Python data
13683science ecosystem;
13684@item Apply the SDMX information model (IM) to structure and publish
13685your own data.
13686@end itemize")
13687 (license license:asl2.0)))
13688
13689(define-public python-jstyleson
13690 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
13691 (revision "0"))
13692 (package
13693 (name "python-jstyleson")
13694 (version (git-version "0.0.2" revision commit))
13695 (source
13696 (origin
13697 (method git-fetch)
13698 (uri (git-reference
13699 (url "https://github.com/linjackson78/jstyleson")
13700 (commit commit)))
13701 (file-name (git-file-name name version))
13702 (sha256
13703 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
13704 (build-system pyproject-build-system)
13705 (native-inputs (list python-pytest python-setuptools))
13706 (home-page "https://github.com/linjackson78/jstyleson")
13707 (synopsis "JSON parser supporting js-style comments")
13708 (description
13709 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
13710standard Python @code{json} library, it understands js-style comments.
13711Trailing comma is also supported.")
13712 (license license:expat))))
13713
13714(define-public python-html-text
13715 (package
13716 (name "python-html-text")
13717 (version "0.7.0")
13718 (source
13719 (origin
13720 (method url-fetch)
13721 (uri (pypi-uri "html_text" version))
13722 (sha256
13723 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
13724 (build-system pyproject-build-system)
13725 (native-inputs
13726 (list python-pytest
13727 python-setuptools
13728 python-wheel))
13729 (propagated-inputs
13730 (list python-lxml
13731 python-lxml-html-clean))
13732 (home-page "https://github.com/TeamHG-Memex/html-text")
13733 (synopsis "Extract text from HTML")
13734 (description "HTML to Text is a Python library for extract text from HTML.
13735Contrary to other solution such as LXML or Beautiful Soup, the text extracted
13736with @code{html_text} does not contain elements such as JavaScript or inline
13737styles not normally visible to users. It also normalizes white space
13738characters in a smarter, more visually pleasing style.")
13739 (license license:expat)))
13740
13741(define-public python-mf2py
13742 (package
13743 (name "python-mf2py")
13744 (version "2.0.1")
13745 (source
13746 (origin
13747 (method git-fetch)
13748 (uri (git-reference
13749 (url "https://github.com/microformats/mf2py")
13750 (commit (string-append "v" version))))
13751 (file-name (git-file-name name version))
13752 (sha256
13753 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
13754 (build-system pyproject-build-system)
13755 (native-inputs (list python-mock python-poetry-core python-pytest))
13756 (propagated-inputs
13757 (list python-beautifulsoup4 python-html5lib python-requests))
13758 (home-page "https://github.com/microformats/mf2py")
13759 (synopsis "Python Microformats2 parser")
13760 (description
13761 "This Python library provides a Microformats2 parser implementing the
13762full Microformats2 (mf2) specification, including backward compatibility with
13763Microformats1 (mf1).")
13764 (license license:expat)))
13765
13766(define-public python-extruct
13767 (package
13768 (name "python-extruct")
13769 (version "0.18.0")
13770 (source (origin
13771 (method git-fetch) ;for tests
13772 (uri (git-reference
13773 (url "https://github.com/scrapinghub/extruct")
13774 (commit (string-append "v" version))))
13775 (file-name (git-file-name name version))
13776 (sha256
13777 (base32
13778 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
13779 (build-system pyproject-build-system)
13780 (arguments
13781 (list
13782 #:test-flags
13783 ;; 67 passed, 3 deselected
13784 ;; XXX: 3 tests fail with errors in assertion.
13785 #~(list "-k" (string-append
13786 "not test_microformat"
13787 " and not test_microformat"
13788 " and not test_umicroformat"))))
13789 (native-inputs
13790 (list python-pytest
13791 python-setuptools
13792 python-wheel))
13793 (propagated-inputs
13794 (list python-html-text
13795 python-jstyleson
13796 python-lxml
13797 python-mf2py
13798 python-pyrdfa3
13799 python-rdflib
13800 python-w3lib))
13801 (home-page "https://github.com/scrapinghub/extruct")
13802 (synopsis "Extract embedded metadata from HTML markup")
13803 (description "@code{extruct} is a Python library for extracting embedded
13804metadata from HTML markup. Currently, extruct supports:
13805@itemize
13806@item W3C's HTML Microdata
13807@item embedded JSON-LD
13808@item Microformat via mf2py
13809@item Facebook's Open Graph
13810@item (experimental) RDFa via rdflib
13811@item Dublin Core Metadata (DC-HTML-2003)
13812@end itemize")
13813 (license license:bsd-3)))
13814
13815(define-public python-wadllib
13816 (package
13817 (name "python-wadllib")
13818 (version "2.0.0")
13819 (source
13820 (origin
13821 (method url-fetch)
13822 (uri (pypi-uri "wadllib" version))
13823 (sha256
13824 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
13825 (build-system pyproject-build-system)
13826 (arguments
13827 (list
13828 ;; XXX: Doctests are currently failing.
13829 #:tests? #f
13830 #:phases
13831 #~(modify-phases %standard-phases
13832 (replace 'check
13833 (lambda* (#:key tests? #:allow-other-keys)
13834 (if tests?
13835 (invoke "zope-testrunner" "--test-path=src")
13836 (format #t "test suite not run~%")))))))
13837 (native-inputs
13838 (list python-multipart python-setuptools python-zope-testrunner))
13839 (propagated-inputs (list python-lazr-uri))
13840 (home-page "https://launchpad.net/wadllib")
13841 (synopsis "Web Application Description Language (WADL) navigation library")
13842 (description "The @code{wadllib} Python library allows navigating HTTP
13843resources using Web Application Description Language (WADL) files as guides.")
13844 (license license:lgpl3)))
13845
13846(define-public python-zeep
13847 (package
13848 (name "python-zeep")
13849 (version "4.3.1")
13850 (source
13851 (origin
13852 (method url-fetch)
13853 (uri (pypi-uri "zeep" version))
13854 (sha256
13855 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
13856 (build-system pyproject-build-system)
13857 (arguments
13858 (list
13859 #:phases
13860 '(modify-phases %standard-phases
13861 (add-after 'unpack 'compatibility
13862 (lambda _
13863 ;; Relax requests-file requirement.
13864 (substitute* "pyproject.toml"
13865 (("\"requests-file.*\",")
13866 "\"requests-file\","))
13867 ;; httpx removed the "proxies" keyword. It's now either "mounts"
13868 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
13869 (substitute* "src/zeep/transports.py"
13870 (("proxies=") "proxy="))))
13871 ;; One test requires write access
13872 (add-before 'check 'set-HOME
13873 (lambda _ (setenv "HOME" (getcwd)))))))
13874 (propagated-inputs
13875 (list python-attrs
13876 python-isodate
13877 python-lxml
13878 python-platformdirs
13879 python-pytz
13880 python-requests
13881 python-requests-file
13882 python-requests-toolbelt))
13883 (native-inputs
13884 (list nss-certs-for-test
13885 python-freezegun
13886 python-pretend
13887 python-pytest
13888 python-pytest-asyncio
13889 python-pytest-httpx
13890 python-requests-mock
13891 python-setuptools
13892 python-wheel))
13893 (home-page "https://docs.python-zeep.org/en/stable/")
13894 (synopsis "Python SOAP client based on lxml / requests")
13895 (description "Zeep is a Python SOAP client. Highlights:
13896
13897@itemize
13898@item Build on top of @code{lxml} and @code{requests}.
13899@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
13900@item Support for WS-Addressing headers.
13901@item Support for WSSE (UserNameToken / x.509 signing).
13902@item Support for @code{asyncio} via @code{httpx}.
13903@item Experimental support for XOP messages.
13904@end itemize")
13905 (license license:expat)))
13906
13907(define-public python-http-client
13908 (package
13909 (name "python-http-client")
13910 (version "3.3.7")
13911 (source
13912 (origin
13913 (method git-fetch)
13914 (uri (git-reference
13915 (url "https://github.com/sendgrid/python-http-client")
13916 (commit version)))
13917 (file-name (git-file-name name version))
13918 (sha256
13919 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
13920 (build-system pyproject-build-system)
13921 (arguments
13922 (list
13923 #:test-backend #~'unittest
13924 #:phases
13925 #~(modify-phases %standard-phases
13926 (add-after 'unpack 'fix-tests
13927 (lambda _
13928 ;; The test expects the copyright to be updated each year.
13929 (substitute* "tests/test_daterange.py"
13930 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
13931 (native-inputs
13932 (list python-setuptools))
13933 (home-page "https://github.com/sendgrid/python-http-client")
13934 (synopsis "HTTP REST client for Python")
13935 (description
13936 "This package provides access to any RESTful or RESTful-like API.")
13937 (license license:expat)))
13938
13939(define-public python-sendgrid
13940 (package
13941 (name "python-sendgrid")
13942 (version "6.9.7")
13943 (source
13944 (origin
13945 (method git-fetch)
13946 (uri (git-reference
13947 (url "https://github.com/sendgrid/sendgrid-python")
13948 (commit version)))
13949 (file-name (git-file-name name version))
13950 (sha256
13951 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
13952 (build-system pyproject-build-system)
13953 (arguments
13954 (list
13955 #:test-flags
13956 #~(list "--ignore=test/integ"
13957 ;; Network access is required.
13958 "--ignore=live_test.py")))
13959 (native-inputs
13960 (list python-pytest
13961 python-setuptools))
13962 (propagated-inputs
13963 (list python-cryptography
13964 python-http-client
13965 python-flask
13966 python-pyyaml
13967 python-six ;hard dependency
13968 python-starkbank-ecdsa
13969 python-werkzeug))
13970 (home-page "https://github.com/sendgrid/sendgrid-python/")
13971 (synopsis "SendGrid API library for Python")
13972 (description
13973 "The @code{sendgrid} Python library allows access to the
13974SendGrid Web API v3. Version 3+ of the library provides full support for all
13975SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
13976 (license license:expat)))
13977
13978(define-public python-sse-starlette
13979 (package
13980 (name "python-sse-starlette")
13981 (version "3.4.4")
13982 (source
13983 (origin
13984 (method git-fetch)
13985 (uri (git-reference
13986 (url "https://github.com/sysid/sse-starlette")
13987 (commit (string-append "v" version))))
13988 (file-name (git-file-name name version))
13989 (sha256
13990 (base32 "0jzy3mjszl7fr524cggyf8k97x6jpykvmxldmm2ckmrqjpyj8jmz"))))
13991 (build-system pyproject-build-system)
13992 (arguments
13993 (list
13994 #:test-flags
13995 #~(list
13996 ;; XXX: Server fails to start.
13997 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
13998 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
13999 ;; XXX: Missing test dependency - testcontainers, Docker is required.
14000 "--ignore=tests/integration/test_multiple_consumers.py")))
14001 (native-inputs
14002 (list python-asgi-lifespan
14003 python-httpx
14004 python-portend
14005 python-pytest
14006 python-pytest-asyncio
14007 python-psutil
14008 python-setuptools
14009 python-tenacity
14010 python-uvicorn))
14011 (propagated-inputs
14012 (list python-anyio
14013 python-starlette))
14014 (home-page "https://github.com/sysid/sse-starlette")
14015 (synopsis "SSE plugin for Starlette")
14016 (description
14017 "This package provides SSE plugin for Starlette.")
14018 (license license:bsd-3)))
14019
14020(define-public python-sseclient-py
14021 (package
14022 (name "python-sseclient-py")
14023 (version "1.9.0")
14024 (source
14025 (origin
14026 (method git-fetch)
14027 (uri (git-reference
14028 (url "https://github.com/mpetazzoni/sseclient")
14029 (commit (string-append "sseclient-py-" version))))
14030 (file-name (git-file-name name version))
14031 (sha256
14032 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
14033 (build-system pyproject-build-system)
14034 (native-inputs (list python-hatchling python-pytest))
14035 (arguments
14036 (list
14037 #:test-backend #~'unittest
14038 #:test-flags #~'("discover" "--verbose" "tests")))
14039 (home-page "https://github.com/mpetazzoni/sseclient")
14040 (synopsis "Pure-Python Server Side Events (SSE) client")
14041 (description
14042 "This package provides a Python client for SSE event sources that
14043seamlessly integrates with @code{urllib3} and @code{requests}.")
14044 (license license:asl2.0)))
14045
14046(define-public python-starlette
14047 (package
14048 (name "python-starlette")
14049 (version "0.49.1")
14050 (source (origin
14051 (method git-fetch)
14052 (uri (git-reference
14053 (url "https://github.com/encode/starlette")
14054 (commit version)))
14055 (file-name (git-file-name name version))
14056 (sha256
14057 (base32
14058 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
14059 (build-system pyproject-build-system)
14060 (propagated-inputs (list python-anyio
14061 python-typing-extensions
14062 ;; [all] extra dependencies:
14063 python-itsdangerous
14064 python-jinja2
14065 python-multipart
14066 python-pyyaml
14067 python-requests))
14068 (native-inputs (list python-hatchling
14069 python-httpx
14070 python-pytest
14071 python-typing-extensions))
14072 (home-page "https://github.com/encode/starlette")
14073 (synopsis "Little ASGI library")
14074 (description
14075 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
14076Interface) framework/toolkit for building async web services in Python.")
14077 (license license:bsd-3)))
14078
14079(define-public python-starsessions
14080 (package
14081 (name "python-starsessions")
14082 (version "1.3.0")
14083 (source (origin
14084 (method git-fetch)
14085 (uri (git-reference
14086 (url "https://github.com/alex-oleshkevich/starsessions")
14087 (commit (string-append "v" version))))
14088 (file-name (git-file-name name version))
14089 (sha256
14090 (base32
14091 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
14092 (build-system pyproject-build-system)
14093 (arguments
14094 (list
14095 #:test-flags
14096 ;; These tests require a running redis server
14097 '(list "--ignore=tests/backends/test_redis.py"
14098 ;; XXX: this failure indicates a real compatibility problem, but
14099 ;; it seems restricted to the tests only.
14100 ;; AttributeError: 'Cookies' object has no attribute
14101 ;; 'clear_session_cookies'
14102 "-k"
14103 (string-append "not test_session_clears_on_tab_close"
14104 ;; This fails because an error is not raised.
14105 " and not test_session_wants_secret_key"))
14106 #:phases
14107 '(modify-phases %standard-phases
14108 (add-after 'unpack 'compatibilitiy
14109 (lambda _
14110 ;; aioredis has been renamed
14111 (substitute* "starsessions/backends/redis.py"
14112 (("aioredis") "redis")))))))
14113 (propagated-inputs
14114 (list python-redis
14115 python-itsdangerous
14116 python-starlette))
14117 (native-inputs
14118 (list python-httpx
14119 python-poetry-core
14120 python-pytest
14121 python-pytest-asyncio
14122 python-requests))
14123 (home-page "https://github.com/alex-oleshkevich/starsessions")
14124 (synopsis "Pluggable session support for Starlette and FastAPI")
14125 (description
14126 "This package adds pluggable session backends and ships default
14127@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
14128and FastAPI.")
14129 (license license:expat)))
14130
14131(define-public python-whereismyip
14132 (package
14133 (name "python-whereismyip")
14134 (version "0.1.0")
14135 (source
14136 (origin
14137 (method url-fetch)
14138 (uri (pypi-uri "whereismyip" version))
14139 (sha256
14140 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
14141 (build-system pyproject-build-system)
14142 (arguments (list #:tests? #false)) ; There are no tests.
14143 (native-inputs (list python-setuptools))
14144 (home-page "https://pypi.org/project/whereismyip/")
14145 (synopsis "Queries multiple geolocation services until one succeeds")
14146 (description
14147 "This package provides a simple Python library that queries multiple geolocation
14148services until one succeeds.")
14149 (license license:gpl3)))
14150
14151(define-public python-whitenoise
14152 (package
14153 (name "python-whitenoise")
14154 (version "6.9.0")
14155 (source (origin
14156 (method git-fetch) ; PyPI missing test fails
14157 (uri (git-reference
14158 (url "https://github.com/evansd/whitenoise")
14159 (commit version)))
14160 (file-name (git-file-name name version))
14161 (sha256
14162 (base32
14163 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
14164 (build-system pyproject-build-system)
14165 (arguments
14166 (list
14167 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
14168 (native-inputs (list python-brotli
14169 python-django
14170 python-requests
14171 python-pytest
14172 python-setuptools
14173 python-wheel))
14174 (home-page "https://github.com/evansd/whitenoise")
14175 (synopsis "Static file serving for WSGI applications")
14176 (description
14177 "WhiteNoise allows your web app to serve its own static files, making it
14178a self-contained unit that can be deployed anywhere without relying on nginx,
14179Amazon S3 or any other external service.")
14180 (license license:expat)))
14181
14182(define-public python-suds
14183 (package
14184 (name "python-suds")
14185 (version "1.2.0")
14186 (source
14187 (origin
14188 (method url-fetch)
14189 (uri (pypi-uri "suds" version))
14190 (sha256
14191 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
14192 (build-system pyproject-build-system)
14193 (arguments
14194 (list #:phases
14195 #~(modify-phases %standard-phases
14196 ;; XXX: chirp expects suds instead of suds_community
14197 (add-after 'install 'add-custom-dist-info
14198 (lambda _
14199 (for-each
14200 (lambda (dir)
14201 (with-directory-excursion (dirname dir)
14202 (symlink
14203 (basename dir)
14204 (string-append "suds-" #$version ".dist-info"))))
14205 (find-files #$output
14206 (lambda (file stat)
14207 (string-suffix? ".dist-info" file))
14208 #:directories? #t)))))))
14209 (native-inputs
14210 (list python-pytest
14211 python-setuptools
14212 python-wheel))
14213 (home-page "https://github.com/suds-community/suds")
14214 (synopsis "Lightweight SOAP python client for consuming Web Services")
14215 (description
14216 "Suds is a lightweight SOAP-based web service client for Python.")
14217 (license license:lgpl3+)))
14218
14219(define-public python-fastapi
14220 (package
14221 (name "python-fastapi")
14222 (version "0.131.0")
14223 (source
14224 (origin
14225 (method url-fetch)
14226 (uri (pypi-uri "fastapi" version))
14227 (sha256
14228 (base32 "1zs80pz8p04akxxmyfihqgii1wjhhad6qx1cjfd8kqmya9g1acb5"))))
14229 (build-system pyproject-build-system)
14230 (arguments
14231 (list
14232 ;; tests: 1126 passed, 12 skipped, 2 deselected
14233 #:test-backend #~'custom
14234 #:test-flags
14235 #~(list
14236 ;; Cannot import 'scripts' with just 'pytest'.
14237 "-m" "pytest"
14238 ;; Needs strawberry and sqlmodel.
14239 "--ignore=tests/test_tutorial/"
14240 ;; Fails due to failure to capture stdout.
14241 "--ignore=tests/test_fastapi_cli.py")))
14242 (native-inputs
14243 (list python-anyio
14244 python-dirty-equals
14245 python-flask
14246 python-inline-snapshot
14247 python-pdm-backend
14248 ;; python-pwdlib
14249 python-pyjwt
14250 python-pytest
14251 python-sqlalchemy-2
14252 ;; python-sqlmodel
14253 python-types-orjson
14254 python-types-ujson))
14255 (propagated-inputs
14256 (list python-starlette
14257 python-pydantic
14258 python-typing-extensions
14259 python-annotated-doc
14260 ;; [optional]
14261 python-email-validator
14262 python-fastapi-cli
14263 python-httpx
14264 python-itsdangerous
14265 python-jinja2
14266 python-multipart
14267 python-orjson
14268 python-pydantic-extra-types
14269 python-pydantic-settings
14270 python-pyyaml
14271 python-ujson
14272 python-uvicorn))
14273 (home-page "https://github.com/fastapi/fastapi")
14274 (synopsis "Web framework based on type hints")
14275 (description "FastAPI provides a web API framework based on pydantic and
14276starlette.")
14277 (license license:expat)))
14278
14279(define-public python-fastapi-csrf-protect
14280 (package
14281 (name "python-fastapi-csrf-protect")
14282 (version "0.3.3")
14283 (source (origin
14284 (method git-fetch)
14285 (uri (git-reference
14286 (url "https://github.com/aekasitt/fastapi-csrf-protect")
14287 (commit (string-append "v" version))))
14288 (file-name (git-file-name name version))
14289 (sha256
14290 (base32
14291 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
14292 (build-system pyproject-build-system)
14293 (propagated-inputs
14294 (list python-fastapi python-itsdangerous
14295 python-pydantic))
14296 (native-inputs
14297 (list python-poetry-core
14298 python-pytest))
14299 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
14300 (synopsis "Cross-Site Request Forgery (XSRF) protection")
14301 (description
14302 "This package provides a stateless implementation of @dfn{Cross-Site
14303Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
14304pattern.")
14305 (license license:expat)))
14306
14307(define-public python-fastapi-pagination-minimal
14308 (package
14309 (name "python-fastapi-pagination-minimal")
14310 (version "0.15.6")
14311 (source (origin
14312 (method git-fetch)
14313 (uri (git-reference
14314 (url "https://github.com/uriyyo/fastapi-pagination")
14315 (commit version)))
14316 (file-name (git-file-name name version))
14317 (sha256
14318 (base32
14319 "1ndazaqi1na0lj6fi42d7mi9lmpxdak0wq0pd97fb3b23ml8rlg6"))))
14320 (build-system pyproject-build-system)
14321 ;; We run the tests in python-fastapi-pagination only.
14322 (arguments (list #:tests? #false))
14323 ;; These are the only required dependencies,
14324 ;; please add all optional dependencies to the
14325 ;; full python-fastapi-pagination below.
14326 (propagated-inputs (list python-fastapi python-pydantic))
14327 (native-inputs (list python-hatchling))
14328 (home-page "https://github.com/uriyyo/fastapi-pagination")
14329 (synopsis "FastAPI pagination library")
14330 (description "@code{fastapi-pagination} is a Python library designed to
14331simplify pagination in FastAPI applications. It provides a set of utility
14332functions and data models to help you paginate your database queries and
14333return paginated responses to your clients.")
14334 (license license:expat)))
14335
14336(define-public python-fastapi-pagination
14337 (package
14338 (inherit python-fastapi-pagination-minimal)
14339 (name "python-fastapi-pagination")
14340 (arguments
14341 (list
14342 #:test-flags
14343 #~(list "--asyncio-mode=auto"
14344 "--ignore=tests/ext"
14345 ;; Netwok access is required.
14346 "-k" (string-join
14347 (list "not test_optional_params[postgres-default]"
14348 "test_optional_params[postgres-limit-offset]"
14349 "test_optional_params[sqlite-default]"
14350 "test_optional_params[sqlite-limit-offset]")
14351 " and not "))
14352 #:phases
14353 '(modify-phases %standard-phases
14354 (add-after 'unpack 'patch-tests
14355 (lambda _
14356 ;; We don't have a package for python-cassandra or motor, but we
14357 ;; also don't need them as we only run the unit tests anyway.
14358 (substitute* "tests/conftest.py"
14359 (("from cassandra.*") "")
14360 (("from motor.*") "")))))))
14361 (propagated-inputs
14362 (modify-inputs (package-propagated-inputs
14363 python-fastapi-pagination-minimal)
14364 (prepend python-asyncpg
14365 python-databases
14366 python-django
14367 python-fastapi
14368 python-pydantic
14369 python-sqlalchemy
14370 (package
14371 (inherit python-tortoise-orm)
14372 (arguments
14373 (substitute-keyword-arguments (package-arguments
14374 python-tortoise-orm)
14375 ((#:phases phases '%standard-phases)
14376 `(modify-phases ,phases
14377 (delete 'sanity-check)))))
14378 (propagated-inputs
14379 (modify-inputs propagated-inputs
14380 (replace "python-aiosqlite" python-aiosqlite)))))))
14381 (native-inputs
14382 (list python-aiosqlite
14383 python-asgi-lifespan
14384 python-asyncpg
14385 python-dirty-equals
14386 python-faker
14387 python-hatchling
14388 python-httpx
14389 python-pytest
14390 python-pytest-asyncio
14391 python-sqlalchemy
14392 python-typing-extensions))
14393 (description
14394 (string-append (package-description python-fastapi-pagination-minimal)
14395 "
14396
14397This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
14398all available optional dependencies supported by mainline
14399@code{fastapi-pagination}."))))
14400
14401(define-public python-fastapi-cli
14402 (package
14403 (name "python-fastapi-cli")
14404 (version "0.0.7")
14405 (source
14406 (origin
14407 (method url-fetch)
14408 (uri (pypi-uri "fastapi_cli" version))
14409 (sha256
14410 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
14411 (build-system pyproject-build-system)
14412 ;; Tests require fastapi, which depends on this package.
14413 (arguments (list #:tests? #false))
14414 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
14415 (native-inputs
14416 (list python-inline-snapshot python-pdm-backend python-pytest))
14417 (home-page "https://pypi.org/project/fastapi-cli/")
14418 (synopsis
14419 "Run and manage FastAPI apps from the command line with FastAPI CLI")
14420 (description
14421 "FastAPI CLI is a command line program fastapi that you can use to serve
14422your FastAPI app, manage your FastAPI project, and more.")
14423 (license license:expat)))
14424
14425(define-public python-pyactiveresource
14426 (package
14427 (name "python-pyactiveresource")
14428 (version "2.2.2")
14429 (source
14430 (origin
14431 (method git-fetch)
14432 (uri (git-reference
14433 (url "https://github.com/Shopify/pyactiveresource")
14434 (commit (string-append "v" version))))
14435 (file-name (git-file-name name version))
14436 (sha256
14437 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
14438 (build-system pyproject-build-system)
14439 ;; XXX: The package is fine, but the tests started failing on [email protected].
14440 ;; The package is not actively maintained, consider removing it once leaf.
14441 (arguments (list #:tests? #f))
14442 (native-inputs
14443 (list python-dateutil python-pytest python-pyyaml python-setuptools))
14444 (propagated-inputs (list python-six))
14445 (home-page "https://github.com/Shopify/pyactiveresource/")
14446 (synopsis "ActiveResource for Python")
14447 (description
14448 "This package provides a Python port of the ActiveResource project.
14449
14450Active Resource attempts to provide a coherent wrapper object-relational
14451mapping for REST web services. It follows the same philosophy as Active
14452Record, in that one of its prime aims is to reduce the amount of code needed
14453to map to these resources. This is made possible by relying on a number of
14454code- and protocol-based conventions that make it easy for Active Resource to
14455infer complex relations and structures.")
14456 (license license:expat)))
14457
14458(define-public python-shopifyapi
14459 (package
14460 (name "python-shopifyapi")
14461 (version "12.7.0")
14462 (source
14463 (origin
14464 (method git-fetch)
14465 (uri (git-reference
14466 (url "https://github.com/Shopify/shopify_python_api")
14467 (commit (string-append "v" version))))
14468 (file-name (git-file-name name version))
14469 (sha256
14470 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
14471 (build-system pyproject-build-system)
14472 (arguments
14473 (list
14474 #:test-flags
14475 #~'("-k"
14476 ;; Disable a failing test.
14477 "not test_raises_if_aud_doesnt_match_api_key")))
14478 (native-inputs (list python-mock python-pytest python-setuptools))
14479 (propagated-inputs (list python-pyactiveresource python-pyjwt
14480 python-pyyaml python-six))
14481 (home-page "https://github.com/Shopify/shopify_python_api")
14482 (synopsis "Shopify API for Python")
14483 (description
14484 "This package provides the Shopify API for Python.
14485
14486The ShopifyAPI library allows Python developers to programmatically access the
14487admin section of stores using an ActiveResource-like interface similar the
14488ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
14489list, create, update, or delete resources (e.g. Order, Product, Collection).")
14490 (license license:expat)))
14491
14492(define-public python-pybadges
14493 (package
14494 (name "python-pybadges")
14495 (version "3.0.1")
14496 (source (origin
14497 (method git-fetch)
14498 (uri (git-reference
14499 (url "https://github.com/google/pybadges")
14500 (commit version)))
14501 (file-name (git-file-name name version))
14502 (sha256
14503 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
14504 (build-system pyproject-build-system)
14505 (arguments
14506 (list
14507 #:test-flags
14508 #~'("-k"
14509 ;; Disable network dependent tests.
14510 "not test_changes and not test_not_image_url and not test_http_url")))
14511 (propagated-inputs (list python-jinja2 python-requests python-setuptools))
14512 (native-inputs (list python-flask
14513 python-fonttools
14514 python-pillow
14515 python-pytest
14516 python-wheel
14517 python-xmldiff))
14518 (home-page "https://github.com/google/pybadges")
14519 (synopsis "Generate Github-style badges on the command-line")
14520 (description
14521 "This package provides @code{python-pybadges}: a library and command-line
14522tool for generating Github-style badges as SVG images.")
14523 (license license:asl2.0)))
14524
14525(define-public python-grid5000
14526 (package
14527 (name "python-grid5000")
14528 (version "1.2.4")
14529 (source (origin
14530 (method git-fetch)
14531 (uri (git-reference
14532 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
14533 (commit (string-append "v" version))))
14534 (file-name (git-file-name name version))
14535 (sha256
14536 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
14537 (build-system pyproject-build-system)
14538 (arguments
14539 (list #:tests? #f)) ; No tests.
14540 (native-inputs (list python-setuptools))
14541 (propagated-inputs (list python-requests python-ipython python-pyyaml))
14542 (home-page "https://pypi.org/project/python-grid5000/")
14543 (synopsis "Grid5000 python client")
14544 (description
14545 "python-grid5000 is a python package wrapping the Grid5000 REST API.
14546You can use it as a library in your python project or you can explore the
14547Grid5000 resources interactively using the embedded shell.")
14548 (license license:gpl3+)))
14549
14550(define-public python-enoslib
14551 (package
14552 (name "python-enoslib")
14553 (version "8.0.1")
14554 (source
14555 (origin
14556 (method git-fetch)
14557 (uri (git-reference
14558 (url "https://gitlab.inria.fr/discovery/enoslib")
14559 (commit (string-append "v" version))))
14560 (file-name (git-file-name name version))
14561 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
14562 (arguments
14563 (list
14564 #:test-flags
14565 #~(list "enoslib/tests/unit"
14566 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
14567 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
14568 #:phases
14569 #~(modify-phases %standard-phases
14570 (add-before 'check 'pre-check
14571 (lambda* (#:key tests? #:allow-other-keys)
14572 (when tests?
14573 ;; Otherwise Ansible fails to create its config directory.
14574 (setenv "HOME" "/tmp"))))
14575 ;; Disable the sanity check, which fails with the following error:
14576 ;;
14577 ;; ContextualVersionConflict(rich 12.4.1
14578 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
14579 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
14580 ;;
14581 ;; The optional jupyter dependency of rich isn't critical for
14582 ;; EnOSlib to work
14583 (delete 'sanity-check))))
14584 (build-system pyproject-build-system)
14585 (native-inputs
14586 (list python-ddt
14587 python-freezegun
14588 python-pytest
14589 python-setuptools
14590 python-wheel))
14591 (propagated-inputs
14592 (list ansible
14593 python-cryptography
14594 python-grid5000
14595 python-jsonschema
14596 python-netaddr
14597 python-packaging
14598 python-requests
14599 python-rich
14600 python-sshtunnel
14601 python-pytz))
14602 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
14603 (synopsis "Deploy distributed testbeds on a variety of platforms")
14604 (description
14605 "EnOSlib is a library to build experimental frameworks on various
14606scientific testbeds. It lets you deploy networks of machines on actual
14607hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
14608 (license license:gpl3+)))
14609
14610(define-public python-pynetbox
14611 (package
14612 (name "python-pynetbox")
14613 (version "7.4.1")
14614 (source (origin
14615 (method url-fetch)
14616 (uri (pypi-uri "pynetbox" version))
14617 (sha256
14618 (base32
14619 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
14620 (build-system pyproject-build-system)
14621 (arguments
14622 (list
14623 #:test-flags
14624 ;; Integration tests depend on docker.
14625 '(list "--ignore=tests/integration")))
14626 (propagated-inputs (list python-packaging python-requests))
14627 (native-inputs
14628 (list python-pytest
14629 python-setuptools
14630 python-setuptools-scm
14631 python-wheel))
14632 (home-page "https://github.com/netbox-community/pynetbox")
14633 (synopsis "NetBox API client library")
14634 (description "Python module to query and edit data stored in a
14635@url{https://netbox.dev,NetBox} instance.")
14636 (license license:asl2.0)))
14637
14638(define-public python-waybackpack
14639 (package
14640 (name "python-waybackpack")
14641 (version "0.6.4")
14642 (source
14643 (origin
14644 (method url-fetch)
14645 (uri (pypi-uri "waybackpack" version))
14646 (sha256
14647 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14648 (build-system pyproject-build-system)
14649 (arguments
14650 (list #:tests? #f)) ; would require network (and SSL certificates)
14651 (propagated-inputs (list python-requests))
14652 (native-inputs (list python-pytest python-setuptools python-wheel))
14653 (home-page "https://github.com/jsvine/waybackpack")
14654 (synopsis
14655 "Download the entire Wayback Machine archive for a given URL")
14656 (description
14657 "This package provides a library and a command-line tool that lets
14658you download the entire Wayback Machine archive for a given URL.")
14659 (license license:expat)))
14660
14661(define-public python-xyzservices
14662 (package
14663 (name "python-xyzservices")
14664 (version "2025.4.0")
14665 (source
14666 (origin
14667 (method url-fetch)
14668 (uri (pypi-uri "xyzservices" version))
14669 (sha256
14670 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14671 (build-system pyproject-build-system)
14672 (arguments
14673 (list
14674 #:test-flags #~(list "-m" "not request")))
14675 (native-inputs
14676 (list python-pytest
14677 python-mercantile
14678 python-requests
14679 python-setuptools
14680 python-setuptools-scm))
14681 (home-page "https://github.com/geopandas/xyzservices")
14682 (synopsis "Source of XYZ tiles providers")
14683 (description "@code{xyzservices} is a lightweight library providing a
14684repository of available XYZ services offering raster basemap tiles. The
14685repository is provided via Python API and as a compressed JSON file.")
14686 (license license:bsd-3)))
14687
14688(define-public s3cmd
14689 (package
14690 (name "s3cmd")
14691 (version "2.4.0")
14692 (source
14693 (origin
14694 (method git-fetch)
14695 (uri (git-reference
14696 (url "https://github.com/s3tools/s3cmd")
14697 (commit (string-append "v" version))))
14698 (file-name (git-file-name name version))
14699 (sha256
14700 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14701 (build-system pyproject-build-system)
14702 (arguments
14703 (list
14704 #:tests? #f ; XXX: Tests require network access.
14705 #:phases
14706 #~(modify-phases %standard-phases
14707 (add-after 'unpack 'hide-wrapping
14708 (lambda _
14709 (substitute* "S3/MultiPart.py"
14710 (("sys\\.argv\\[0\\]")
14711 "\"s3cmd\""))
14712 (substitute* "s3cmd"
14713 (("optparser\\.get_prog_name\\(\\)")
14714 "\"s3cmd\"")))))))
14715 (native-inputs (list python-setuptools))
14716 (inputs (list python-dateutil python-magic))
14717 (home-page "https://s3tools.org/s3cmd")
14718 (synopsis "Command line tool for S3-compatible storage services")
14719 (description
14720 "S3cmd is a command line tool for uploading, retrieving and managing data
14721in storage services that are compatible with the Amazon Simple Storage
14722Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14723GnuPG encryption, and more. It also supports management of Amazon's
14724CloudFront content delivery network.")
14725 (license license:gpl2+)))