projects/guix·blob audio-team · refs

14698 lines · 530.5 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015-2025 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Christopher Baines <[email protected]>
5;;; Copyright © 2017 Muriithi Frederick Muriuki <[email protected]>
6;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
7;;; Copyright © 2013, 2014, 2015, 2016, 2020, 2023 Andreas Enge <[email protected]>
8;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
9;;; Copyright © 2015-2025 Ricardo Wurmus <[email protected]>
10;;; Copyright © 2017, 2021 Roel Janssen <[email protected]>
11;;; Copyright © 2016, 2017, 2020 Julien Lepiller <[email protected]>
12;;; Copyright © 2016, 2017 Nikita <[email protected]>
13;;; Copyright © 2014, 2017, 2021 Eric Bavier <[email protected]>
14;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
15;;; Copyright © 2015 Cyril Roelandt <[email protected]>
16;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
17;;; Copyright © 2016, 2019, 2022, 2025 Hartmut Goebel <[email protected]>
18;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <[email protected]>
19;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
20;;; Copyright © 2015, 2016 Christine Lemmer-Webber <[email protected]>
21;;; Copyright © 2017 Adriano Peluso <[email protected]>
22;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
23;;; Copyright © 2016 David Craven <[email protected]>
24;;; Copyright © 2017 Oleg Pykhalov <[email protected]>
25;;; Copyright © 2015, 2016 David Thompson <[email protected]>
26;;; Copyright © 2017 Mark Meyer <[email protected]>
27;;; Copyright © 2018 Clément Lassieur <[email protected]>
28;;; Copyright © 2018 Tomáš Čech <[email protected]>
29;;; Copyright © 2018, 2019, 2021, 2024 Nicolas Goaziou <[email protected]>
30;;; Copyright © 2018 Mathieu Othacehe <[email protected]>
31;;; Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
32;;; Copyright © 2018 swedebugia <[email protected]>
33;;; Copyright © 2019 Vagrant Cascadian <[email protected]>
34;;; Copyright © 2019, 2023 Brendan Tildesley <[email protected]>
35;;; Copyright © 2019 Pierre Langlois <[email protected]>
36;;; Copyright © 2019, 2020 Tanguy Le Carrour <[email protected]>
37;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
38;;; Copyright © 2020 Josh Marshall <[email protected]>
39;;; Copyright © 2020 Evan Straw <[email protected]>
40;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
41;;; Copyright © 2020 Holger Peters <[email protected]>
42;;; Copyright © 2020 Noisytoot <[email protected]>
43;;; Copyright © 2020 Edouard Klein <[email protected]>
44;;; Copyright © 2020, 2021, 2022, 2023, 2025 Vinicius Monego <[email protected]>
45;;; Copyright © 2020 Konrad Hinsen <[email protected]>
46;;; Copyright © 2020, 2022, 2024 Giacomo Leidi <[email protected]>
47;;; Copyright © 2020 Raghav Gururajan <[email protected]>
48;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
49;;; Copyright © 2021 Greg Hogan <[email protected]>
50;;; Copyright © 2021 Maxime Devos <[email protected]>
51;;; Copyright © 2021 Pradana Aumars <[email protected]>
52;;; Copyright © 2021, 2022, 2024, 2026 Arun Isaac <[email protected]>
53;;; Copyright © 2021-2022, 2024-2025 jgart <[email protected]>
54;;; Copyright © 2021 Alice Brenon <[email protected]>
55;;; Copyright © 2021 Mekeor Melire <[email protected]>
56;;; Copyright © 2022 John Kehayias <[email protected]>
57;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email protected]>
58;;; Copyright © 2022, 2023, 2025 Felix Gruber <[email protected]>
59;;; Copyright © 2022 Peter Polidoro <[email protected]>
60;;; Copyright © 2022 Antero Mejr <[email protected]>
61;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
62;;; Copyright © 2022, 2025 Nicolas Graves <[email protected]>
63;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
64;;; Copyright © 2022 msimonin <[email protected]>
65;;; Copyright © 2022 Michael Rohleder <[email protected]>
66;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
67;;; Copyright © 2023 dan <[email protected]>
68;;; Copyright © 2023 John Kehayias <[email protected]>
69;;; Copyright © 2023 Juliana Sims <[email protected]>
70;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
71;;; Copyright © 2024 Fabio Natali <[email protected]>
72;;; Copyright © 2024 Steve George <[email protected]>
73;;; Copyright © 2024 Troy Figiel <[email protected]>
74;;; Copyright © 2024, 2025 Sharlatan Hellseher <[email protected]>
75;;; Copyright © 2024 normally_js <[email protected]>
76;;; Copyright © 2024 Markku Korkeala <[email protected]>
77;;; Copyright © 2024 Nguyễn Gia Phong <[email protected]>
78;;; Copyright © 2024 Zheng Junjie <[email protected]>
79;;; Copyright © 2024 Spencer King <[email protected]>
80;;; Copyright © 2024 Attila Lendvai <[email protected]>
81;;; Copyright © 2025 Daniel Ziltener <[email protected]>
82;;; Copyright © 2025 gemmaro <[email protected]>
83;;; Copyright © 2025 Sergio Pastor Pérez <[email protected]>
84;;; Copyright © 2025 Jake Forster <[email protected]>
85;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
86;;; Copyright © 2025 Hugo Buddelmeijer <[email protected]>
87;;; Copyright © 2025-2026 Artur Wroblewski <[email protected]>
88;;; Copyright © 2025, 2026 Allan Adair <[email protected]>
89;;; Copyright © 2025 Aaron Covrig <[email protected]>
90;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
91;;; Copyright © 2026 mst <[email protected]>
92;;;
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-pytest
437 python-pdm-backend))
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
453Asyncer also tries to improve convenience and simplicity when working with
454async code mixed with regular blocking code, allowing to use them together in
455a simpler way... again, under my very subjective point of view.")
456 (license license:expat)))
457
458(define-public python-asyncudp
459 (package
460 (name "python-asyncudp")
461 (version "0.11.0")
462 (source
463 (origin
464 (method git-fetch)
465 (uri (git-reference
466 (url "https://github.com/eerimoq/asyncudp")
467 (commit version)))
468 (file-name (git-file-name name version))
469 (sha256
470 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
471 (build-system pyproject-build-system)
472 (native-inputs (list python-pytest python-setuptools))
473 (home-page (git-reference-url (origin-uri source)))
474 (synopsis "High level UDP sockets for asyncio")
475 (description
476 "This package provides a Python library offering high level UDP sockets
477for asyncio. Import it alongside asyncio and use its API to send and receive
478UDP packets.")
479 (license license:expat)))
480
481(define-public python-behave-web-api
482 (package
483 (name "python-behave-web-api")
484 (version "2.3.0")
485 (source
486 (origin
487 (method git-fetch)
488 (uri (git-reference
489 (url "https://github.com/jefersondaniel/behave-web-api")
490 (commit (string-append "v" version))))
491 (file-name (git-file-name name version))
492 (sha256
493 (base32 "1r8yx8gb5m599cpdqfvk6z9ax3qj26fpvczdr84z8jya0dxfch4p"))))
494 (build-system pyproject-build-system)
495 (native-inputs
496 (list python-pytest
497 python-setuptools))
498 (propagated-inputs
499 (list behave
500 python-requests))
501 (home-page "https://github.com/jefersondaniel/behave-web-api")
502 (synopsis "Provides testing for JSON APIs with Behave for Python")
503 (description "This package provides testing utility modules for testing
504JSON APIs with Behave.")
505 (license license:expat)))
506
507(define-public python-blacksheep
508 (package
509 (name "python-blacksheep")
510 (version "2.6.3")
511 (source
512 (origin
513 (method git-fetch)
514 (uri (git-reference
515 (url "https://github.com/Neoteroi/BlackSheep")
516 (commit (string-append "v" version))))
517 (file-name (git-file-name name version))
518 (sha256
519 (base32 "1k6yqsqnh6nnhi8z5v2yqpxs7qsk35zwd7gcr7cdh825f2vrl7js"))))
520 (build-system pyproject-build-system)
521 (arguments
522 (list
523 ;; tests: 1821 passed
524 ;;
525 ;; Run all unit tests, but do not run integration tests from `itests`
526 ;; directory.
527 #:test-flags
528 #~(list "tests")
529 #:phases
530 #~(modify-phases %standard-phases
531 (add-before 'build 'cythonize
532 (lambda _
533 (with-directory-excursion "blacksheep"
534 (for-each (lambda (file)
535 (invoke "cython" "-3" file "-I" "."))
536 (find-files "." ".*\\.pyx$"))))))))
537 (native-inputs
538 (list nss-certs-for-test
539 python-cython
540 python-defusedxml
541 python-flask
542 python-jinja2
543 python-pydantic
544 python-pyjwt
545 python-pytest
546 python-pytest-asyncio
547 python-setuptools
548 python-starlette))
549 (propagated-inputs
550 (list python-certifi
551 python-essentials
552 python-essentials-openapi
553 python-guardpost
554 python-httptools
555 python-rodi
556 python-itsdangerous))
557 (home-page "https://github.com/Neoteroi/BlackSheep")
558 (synopsis "Asynchronous framework to build event based web applications")
559 (description
560 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
561
562The framework offers
563@itemize
564@item A rich code API, based on dependency injection and inspired by Flask and
565ASP.NET Core.
566@item A typing-friendly codebase, which enables a comfortable development
567experience thanks to hints when coding with IDEs.
568@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
569and JSON.
570@item A cross-platform framework, using the most modern versions of Python.
571@item Good performance.
572@end itemize")
573 (license license:expat)))
574
575(define-public python-bleach
576 (package
577 (name "python-bleach")
578 (version "6.3.0")
579 (source
580 (origin
581 (method git-fetch)
582 (uri (git-reference
583 (url "https://github.com/mozilla/bleach")
584 (commit (string-append "v" version))))
585 (file-name (git-file-name name version))
586 (sha256
587 (base32 "02abk9ixn010sqpbdsd7nxms0gv4prwv6d3nplb8giq85lpn1kkb"))
588 (snippet
589 #~(begin
590 (use-modules (guix build utils))
591 (substitute* (find-files "." "\\.py$")
592 (("bleach\\._vendor\\.html5lib") "html5lib"))
593 (delete-file-recursively "bleach/_vendor/html5lib")))))
594 (build-system pyproject-build-system)
595 (arguments
596 (list
597 ;; tests: 448 passed, 1 deselected, 3 xfailed
598 #:test-flags
599 #~(list (string-append "--deselect=tests/test_clean.py::"
600 "test_self_closing_tags_self_close[wbr]"))
601 #:phases
602 #~(modify-phases %standard-phases
603 (add-after 'unpack 'relax-requirements
604 (lambda _
605 ;; "tinycss2>=1.1.0,<1.5"
606 ;; The 'sanity-check of python-nbclassic fails without this.
607 (substitute* "setup.py"
608 (("\"tinycss2.*") "")))))))
609 (native-inputs
610 (list python-pytest
611 python-setuptools))
612 (propagated-inputs
613 (list python-html5lib
614 python-tinycss2
615 python-webencodings))
616 (home-page "https://github.com/mozilla/bleach")
617 (synopsis "Whitelist-based HTML-sanitizing tool")
618 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
619 (license license:asl2.0)))
620
621(define-public python-cloudpathlib
622 (package
623 (name "python-cloudpathlib")
624 (version "0.23.0")
625 (source
626 (origin
627 (method git-fetch)
628 (uri (git-reference
629 (url "https://github.com/drivendataorg/cloudpathlib")
630 (commit (string-append "v" version))))
631 (file-name (git-file-name name version))
632 (sha256
633 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
634 (build-system pyproject-build-system)
635 (arguments
636 (list
637 ;; tests: 977 passed, 15 skipped, 8642 warnings
638 #:test-flags
639 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
640 ;; TODO: Package azure-identity (required for this file)
641 "--ignore=tests/test_azure_specific.py"
642 ;; TypeError: Retry.__init__() got an unexpected keyword
643 ;; argument 'timeout'
644 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")))
645 (native-inputs
646 (list ;; python-azure-identity
647 python-dotenv
648 python-flit-core
649 python-psutil
650 python-pydantic
651 python-pytest
652 python-pytest-cases
653 python-pytest-reportlog
654 python-pytest-xdist
655 python-shortuuid
656 python-tenacity))
657 (propagated-inputs
658 (list python-azure-storage-blob
659 python-azure-storage-file-datalake
660 python-boto3
661 python-google-cloud-storage
662 python-typing-extensions))
663 (home-page "https://github.com/drivendataorg/cloudpathlib")
664 (synopsis "Pathlib-style classes for cloud storage services")
665 (description
666 "This package provides a Python library with classes that mimic
667@code{pathlib.Path}'s interface for URIs from different cloud storage
668services.")
669 (license license:expat)))
670
671(define-public python-conda-package-handling
672 (package
673 (name "python-conda-package-handling")
674 (version "2.4.0")
675 (source
676 (origin
677 (method git-fetch)
678 (uri (git-reference
679 (url "https://github.com/conda/conda-package-handling/")
680 (commit version)))
681 (file-name (git-file-name name version))
682 (sha256
683 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
684 (build-system pyproject-build-system)
685 (native-inputs
686 (list python-bottle
687 python-mock
688 python-pytest-8
689 python-pytest-mock
690 python-setuptools))
691 (propagated-inputs
692 (list python-conda-package-streaming))
693 (home-page "https://conda.io")
694 (synopsis "Create and extract conda packages of various formats")
695 (description
696 "This library is an abstraction of Conda package handling and a tool for
697extracting, creating, and converting between formats.")
698 (license license:bsd-3)))
699
700(define-public python-conda-package-streaming
701 (package
702 (name "python-conda-package-streaming")
703 (version "0.12.0")
704 (source
705 (origin
706 (method url-fetch)
707 (uri (pypi-uri "conda_package_streaming" version))
708 (sha256
709 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
710 (build-system pyproject-build-system)
711 (arguments
712 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
713 (list #:tests? #f))
714 (native-inputs
715 (list python-flit-core))
716 (propagated-inputs
717 (list python-requests
718 python-zstandard))
719 (home-page "https://conda.github.io/conda-package-streaming/")
720 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
721 (description
722 "This package provides an efficient library to read from new and old format
723@code{.conda} and @code{.tar.bz2} conda packages.")
724 (license license:bsd-3)))
725
726(define-public python-dependency-groups
727 (package
728 (name "python-dependency-groups")
729 (version "1.3.1")
730 (source
731 (origin
732 (method url-fetch)
733 (uri (pypi-uri "dependency_groups" version))
734 (sha256
735 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
736 (build-system pyproject-build-system)
737 (propagated-inputs (list python-packaging python-tomli))
738 (native-inputs (list python-flit-core python-pytest))
739 (home-page "https://dependency-groups.readthedocs.io/")
740 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
741 (description
742 "This package provides a library which is able to parse dependency groups (PEP
743735), following includes, and provide that data as output.")
744 (license license:expat)))
745
746(define-public python-devpi-common
747 (package
748 (name "python-devpi-common")
749 (version "4.0.4")
750 (source
751 (origin
752 (method url-fetch)
753 (uri (pypi-uri "devpi_common" version))
754 (sha256
755 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
756 (build-system pyproject-build-system)
757 (propagated-inputs (list python-lazy python-packaging-legacy
758 python-requests))
759 (native-inputs
760 (list python-pytest
761 python-setuptools
762 python-wheel))
763 (home-page "https://github.com/devpi/devpi")
764 (synopsis
765 "Utilities jointly used by devpi-server, devpi-client and others")
766 (description
767 "This package provides utilities jointly used by devpi-server,
768devpi-client and others.")
769 (license license:expat)))
770
771(define-public python-devpi-client
772 (package
773 (name "python-devpi-client")
774 (version "7.2.0")
775 (source
776 (origin
777 (method url-fetch)
778 (uri (pypi-uri "devpi-client" version))
779 (sha256
780 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
781 (build-system pyproject-build-system)
782 (arguments
783 (list
784 #:test-flags
785 ;; This wants to use pip install
786 '(list "--ignore=testing/test_upload.py"
787 ;; These complain about finding distutils. It's not my fault,
788 ;; mate, setuptools is right there, but you won't pick it!
789 "--ignore=testing/test_list_remove.py"
790 "--ignore=testing/test_main.py"
791 "--ignore=testing/test_install.py"
792 "--ignore=testing/test_functional.py"
793 "--ignore=testing/test_test.py")
794 #:phases
795 '(modify-phases %standard-phases
796 (add-after 'unpack 'patch-tests
797 (lambda _
798 ;; Do not replace the directory name of the store item.
799 (substitute* "testing/conftest.py"
800 (("\"devpi-server\", \"devpi-init\"")
801 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
802 (add-before 'check 'set-HOME
803 ;; Some tests need this
804 (lambda _ (setenv "HOME" "/tmp"))))))
805 (propagated-inputs (list python-pypa-build
806 python-check-manifest
807 python-colorama
808 python-devpi-common
809 python-iniconfig
810 python-pkginfo
811 python-platformdirs
812 python-pluggy
813 python-pypitoken
814 python-tomli))
815 (native-inputs
816 (list python-devpi-server
817 python-pytest
818 python-setuptools
819 python-virtualenv))
820 (home-page "https://github.com/devpi/devpi")
821 (synopsis "Devpi upload/install/... commands for Python developers")
822 (description
823 "The devpi command line tool is typically used in conjunction with
824devpi-server. It allows uploading, testing and installing packages from devpi
825indexes.")
826 (license license:expat)))
827
828(define-public python-devpi-process
829 (package
830 (name "python-devpi-process")
831 (version "1.0.2")
832 (source
833 (origin
834 (method url-fetch)
835 (uri (pypi-uri "devpi_process" version))
836 (sha256
837 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
838 (build-system pyproject-build-system)
839 (arguments
840 (list
841 #:phases
842 '(modify-phases %standard-phases
843 (add-after 'unpack 'relax-requirements
844 (lambda _
845 ;; Our package is too old, sorry.
846 (substitute* "pyproject.toml"
847 (("typing-extensions>=4.12.2")
848 "typing-extensions>=4.10.0"))))
849 (add-after 'unpack 'patch-tool-locations
850 (lambda* (#:key inputs #:allow-other-keys)
851 (substitute* "src/devpi_process/__init__.py"
852 (("_exe\\(\"devpi-init\"\\)")
853 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
854 (("_exe\\(\"devpi-server\"\\)")
855 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
856 (("_exe\\(\"devpi\"\\)")
857 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
858 (propagated-inputs (list python-devpi-client python-devpi-server
859 python-typing-extensions))
860 (native-inputs
861 (list nss-certs-for-test
862 python-hatchling
863 python-hatch-vcs
864 python-httpx
865 python-pytest))
866 (home-page "https://github.com/devpi/devpi")
867 (synopsis "API to create and use a devpi server process")
868 (description
869 "This package provides a programmatic API to create and use a devpi
870server process.")
871 (license license:expat)))
872
873(define-public python-devpi-server
874 (package
875 (name "python-devpi-server")
876 (version "6.17.0")
877 (source
878 (origin
879 (method url-fetch)
880 (uri (pypi-uri "devpi_server" version))
881 (sha256
882 (base32 "13lybrw8j6zjxwvx6sk7bw6854hd2m18s1xcvl0q100j4n06p6ml"))))
883 (build-system pyproject-build-system)
884 (arguments
885 (list
886 #:test-flags
887 ;; These all fail with: "module 'py' has no attribute 'io'"
888 #~(list "--ignore=test_devpi_server/test_importexport.py"
889 "--ignore=test_devpi_server/test_main.py"
890 "--ignore=test_devpi_server/test_genconfig.py")
891 #:phases
892 #~(modify-phases %standard-phases
893 (add-after 'unpack 'relax-requirements
894 (lambda _
895 (substitute* "pyproject.toml"
896 ;; It straggles to check argon2 in passlib on any versions
897 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
898 ;; such extra feature 'argon2'",).
899 (("passlib\\[argon2\\]") "passlib")))))))
900 (propagated-inputs (list python-argon2-cffi
901 python-attrs
902 python-defusedxml
903 python-devpi-common
904 python-httpx
905 python-itsdangerous
906 python-lazy
907 python-legacy-cgi
908 python-passlib
909 python-platformdirs
910 python-pluggy
911 python-py
912 python-pyramid
913 python-repoze-lru
914 python-ruamel.yaml-0.16 ;FIXME: rename
915 python-strictyaml
916 python-waitress))
917 (native-inputs
918 (list python-execnet
919 python-pytest
920 python-pytest-asyncio
921 python-pytest-timeout
922 python-setuptools
923 python-webtest))
924 (home-page "https://devpi.net")
925 (synopsis "Pypi.org caching server")
926 (description "This package implements a reliable private and pypi.org
927caching server.")
928 (license license:expat)))
929
930(define-public python-dicomweb-client
931 (package
932 (name "python-dicomweb-client")
933 (version "0.60.0")
934 (source
935 (origin
936 (method git-fetch)
937 (uri (git-reference
938 (url "https://github.com/ImagingDataCommons/dicomweb-client")
939 (commit (string-append "v" version))))
940 (file-name (git-file-name name version))
941 (sha256
942 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
943 (build-system pyproject-build-system)
944 (arguments
945 (list
946 #:phases
947 #~(modify-phases %standard-phases
948 (add-after 'unpack 'remove-dynamic-versioning
949 (lambda _
950 (substitute* "pyproject.toml"
951 ;; Dynamic versioning via 'uv-dynamic-versioning' is
952 ;; not suitable for Guix.
953 (("dynamic = \\[\"version\"\\]")
954 (string-append "version = \""
955 #$version "\""))))))))
956 (native-inputs
957 (list python-hatchling
958 python-pytest
959 python-pytest-localserver))
960 (propagated-inputs
961 (list python-numpy
962 python-pillow
963 python-pydicom
964 python-requests
965 python-retrying))
966 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
967 (synopsis "Python client for DICOMweb RESTful services")
968 (description
969 "@code{dicomweb_client} provides client interfaces for DICOMweb RESTful
970services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
971DICOM objects over the web, respectively.")
972 (license license:expat)))
973
974(define-public python-docusign-esign
975 (package
976 (name "python-docusign-esign")
977 (version "5.0.0")
978 (source
979 (origin
980 (method url-fetch)
981 (uri (pypi-uri "docusign-esign" version))
982 (sha256
983 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
984 (build-system pyproject-build-system)
985 ;; Testing requires undocumented setup changes with network access to
986 ;; <demo.docusign.net>, and so testing is disabled here.
987 (arguments `(#:tests? #f))
988 (native-inputs
989 (list python-setuptools
990 python-wheel))
991 (propagated-inputs
992 (list python-certifi
993 python-dateutil
994 python-urllib3
995 python-pyjwt
996 python-cryptography))
997 (home-page "https://developers.docusign.com/")
998 (synopsis "DocuSign Python Client")
999 (description
1000 "The Official DocuSign Python Client Library used to interact with the
1001eSign REST API. Send, sign, and approve documents using this client.")
1002 (license license:expat)))
1003
1004(define-public python-domain-connect
1005 (package
1006 (name "python-domain-connect")
1007 (version "0.0.11")
1008 (source
1009 (origin
1010 (method git-fetch) ;no tests in PyPI archive
1011 (uri (git-reference
1012 (url "https://github.com/Domain-Connect/domainconnect_python")
1013 (commit (string-append "v" version))))
1014 (file-name (git-file-name name version))
1015 (sha256
1016 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
1017 (build-system pyproject-build-system)
1018 (arguments
1019 (list
1020 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
1021 ;; present in container.
1022 #:tests? #f
1023 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
1024 (native-inputs
1025 (list python-setuptools))
1026 (propagated-inputs
1027 (list python-cryptography
1028 python-dnspython
1029 python-future
1030 python-publicsuffixlist))
1031 (home-page "https://github.com/Domain-Connect/domainconnect_python")
1032 (synopsis "Client library for Domain Connect protocol")
1033 (description
1034 "This package provides a Service Provider functionality in both Sync and
1035Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
1036 (license license:expat)))
1037
1038(define-public python-domain-connect-dyndns
1039 (package
1040 (name "python-domain-connect-dyndns")
1041 (version "0.0.9")
1042 (source
1043 (origin
1044 (method url-fetch)
1045 (uri (pypi-uri "domain-connect-dyndns" version))
1046 (sha256
1047 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
1048 (build-system pyproject-build-system)
1049 (arguments
1050 (list
1051 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
1052 ;; present in container.
1053 #:tests? #f
1054 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
1055 (native-inputs
1056 (list python-setuptools
1057 python-wheel))
1058 (propagated-inputs
1059 (list python-dnspython
1060 python-domain-connect
1061 python-requests
1062 python-validators))
1063 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
1064 (synopsis "Domain Connect Dynamic DNS in Python")
1065 ;; Project lacks meaningful description in README, see
1066 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
1067 (description
1068 "Python client library for Dynamic DNS using
1069@url{https://www.domainconnect.org/, Domain Connect} protocol.")
1070 (license license:expat)))
1071
1072(define-public python-dominate
1073 (package
1074 (name "python-dominate")
1075 (version "2.9.1")
1076 (source
1077 (origin
1078 (method git-fetch)
1079 (uri (git-reference
1080 (url "https://github.com/Knio/dominate")
1081 (commit version)))
1082 (file-name (git-file-name name version))
1083 (sha256
1084 (base32 "0kv5ly8w2026pwvgamfjxav1g58wmgim30nr9w9qfwcipfjxwn5c"))))
1085 (build-system pyproject-build-system)
1086 (native-inputs
1087 (list python-pytest
1088 python-setuptools))
1089 (home-page "https://github.com/Knio/dominate")
1090 (synopsis "Python library for creating and manipulating HTML documents")
1091 (description
1092 "Dominate is a Python library for creating and manipulating HTML
1093documents using an elegant DOM API.")
1094 (license license:lgpl3+)))
1095
1096(define-public python-dropbox
1097 (package
1098 (name "python-dropbox")
1099 (version "12.0.2")
1100 (source
1101 (origin
1102 (method git-fetch) ; no tests in PyPI release
1103 (uri (git-reference
1104 (url "https://github.com/dropbox/dropbox-sdk-python")
1105 (commit (string-append "v" version))))
1106 (file-name (git-file-name name version))
1107 (sha256
1108 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
1109 (build-system pyproject-build-system)
1110 (arguments
1111 (list
1112 #:test-flags
1113 #~(list "-k" (string-join
1114 ;; Network access is required.
1115 (list "not test_bad_auth"
1116 "test_app_auth"
1117 "test_bad_pins"
1118 "test_bad_pins_session"
1119 "test_downscope"
1120 "test_multi_auth"
1121 "test_path_root"
1122 "test_path_root_err"
1123 "test_refresh"
1124 "test_rpc"
1125 "test_team"
1126 "test_upload_download"
1127 "test_versioned_route")
1128 " and not "))
1129 #:phases
1130 #~(modify-phases %standard-phases
1131 (add-after 'unpack 'relax-requirements
1132 (lambda _
1133 (substitute* "setup.py"
1134 ;; 'stone>=2,<3.3.3',
1135 ((">=2,<3.3.3") ">=2,<3.4.0"))))
1136 (add-before 'check 'pre-check
1137 (lambda _
1138 ;; Otherwise tests setup erroring.
1139 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
1140 (setenv "LEGACY_USER_CLIENT_ID" "guix")
1141 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
1142 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
1143 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
1144 (setenv "SCOPED_USER_CLIENT_ID" "guix")
1145 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
1146 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
1147 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
1148 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
1149 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
1150 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
1151 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
1152 (native-inputs
1153 (list nss-certs-for-test
1154 python-mock
1155 python-pytest
1156 python-pytest-mock
1157 python-setuptools
1158 python-wheel))
1159 (propagated-inputs
1160 (list python-requests python-six python-stone))
1161 (home-page "https://www.dropbox.com/developers")
1162 (synopsis "Official Dropbox API Client")
1163 (description "This package provides a Python SDK for integrating with the
1164Dropbox API v2.")
1165 (license license:expat)))
1166
1167(define-public python-dukpy
1168 (package
1169 (name "python-dukpy")
1170 (version "0.5.1")
1171 (source
1172 (origin
1173 (method git-fetch)
1174 (uri (git-reference
1175 (url "https://github.com/amol-/dukpy")
1176 (commit version)))
1177 (file-name (git-file-name name version))
1178 (sha256
1179 (base32 "1qsqfgy12frrdikjf353bsvhln11jixc3qs9rc1zra55k0569036"))))
1180 (build-system pyproject-build-system)
1181 (arguments
1182 (list
1183 #:test-flags
1184 #~(list #$@(map (lambda (test)
1185 (string-append "--deselect=tests/test_installer.py"
1186 "::TestPackageInstaller::"
1187 test))
1188 ;; Network access is required.
1189 (list "test_install_command"
1190 "test_install_command_latest_ver"
1191 "test_install_command_substrate_error"
1192 "test_install_command_without_dest"
1193 "test_install_react"
1194 "test_install_scoped_package"
1195 "test_install_unexisting_package"
1196 "test_install_unexisting_version")))))
1197 (native-inputs
1198 (list python-mock
1199 python-pytest
1200 python-setuptools
1201 python-webassets))
1202 (home-page "https://github.com/amol-/dukpy")
1203 (synopsis "Simple JavaScript interpreter for Python")
1204 (description
1205 "DukPy is a simple JavaScript interpreter for Python built on top of
1206duktape engine without any external dependency. It comes with a bunch of
1207common transpilers built-in for convenience:
1208@itemize
1209@item CoffeeScript
1210@item BabelJS
1211@item TypeScript
1212@item JSX
1213@item LESS
1214@end itemize")
1215 (license license:expat)))
1216
1217(define-public python-essentials-openapi
1218 (package
1219 (name "python-essentials-openapi")
1220 (version "1.2.1")
1221 (source
1222 (origin
1223 (method git-fetch)
1224 (uri (git-reference
1225 (url "https://github.com/Neoteroi/essentials-openapi")
1226 (commit (string-append "v" version))))
1227 (file-name (git-file-name name version))
1228 (sha256
1229 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
1230 (build-system pyproject-build-system)
1231 (native-inputs
1232 (list python-flask
1233 python-hatchling
1234 python-pydantic
1235 python-pytest
1236 python-rich))
1237 (propagated-inputs
1238 (list python-essentials
1239 python-httpx
1240 python-jinja2
1241 python-markupsafe
1242 python-pyyaml))
1243 (home-page "https://github.com/Neoteroi/essentials-openapi/")
1244 (synopsis "Generator for OpenAPI Documentation")
1245 (description
1246 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
1247formats. Generator for other kinds of documents from OpenAPI Documentation
1248files.")
1249 (license license:expat)))
1250
1251(define-public python-eventlet
1252 (package
1253 (name "python-eventlet")
1254 (version "0.40.4")
1255 (source
1256 (origin
1257 (method url-fetch)
1258 (uri (pypi-uri "eventlet" version))
1259 (sha256
1260 (base32
1261 "0vzjrb7n3x7gdrxiw4dacdxvz0m8saaw9w7n1n9v865yn49gggk9"))))
1262 (build-system pyproject-build-system)
1263 (arguments
1264 (list
1265 #:test-flags
1266 '(list "-k"
1267 (string-append
1268 "not TestGetaddrinfo"
1269 " and not TestProxyResolver"
1270 " and not test_noraise_dns_tcp"
1271 " and not test_raise_dns_tcp"
1272 " and not test_hosts_no_network"
1273 " and not test_import_rdtypes_then_eventlet"
1274 " and not test_patcher_existing_locks"
1275 " and not test_dns_methods_are_green"))
1276 #:phases
1277 #~(modify-phases %standard-phases
1278 (add-after 'unpack 'avoid-OSError
1279 (lambda _
1280 ;; If eventlet tries to load greendns, an OSError is thrown when
1281 ;; getprotobyname is called. Thankfully there is an environment
1282 ;; variable to disable the greendns import, so use it. Note that
1283 ;; this error is propagated to child packages too, so enforce the
1284 ;; changed default.
1285 (substitute* "eventlet/green/socket.py"
1286 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
1287 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")")))))))
1288 (native-inputs
1289 (list python-hatchling
1290 python-hatch-vcs
1291 python-pytest))
1292 (propagated-inputs
1293 (list python-dnspython python-greenlet))
1294 (home-page "https://eventlet.net")
1295 (synopsis "Concurrent networking library for Python")
1296 (description
1297 "Eventlet is a concurrent networking library for Python that
1298allows you to change how you run your code, not how you write it.
1299It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1300Coroutines ensure that the developer uses a blocking style of programming
1301that is similar to threading, but provide the benefits of non-blocking I/O.
1302The event dispatch is implicit, which means you can easily use @code{Eventlet}
1303from the Python interpreter, or as a small part of a larger application.
1304
1305Note: In Guix, this package assumes the environment variable
1306@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
1307to anything else.")
1308 (license license:expat)))
1309
1310(define-public python-feedgen
1311 (package
1312 (name "python-feedgen")
1313 (version "1.0.0")
1314 (source
1315 (origin
1316 (method git-fetch)
1317 (uri (git-reference
1318 (url "https://github.com/lkiesow/python-feedgen")
1319 (commit (string-append "v" version))))
1320 (file-name (git-file-name name version))
1321 (sha256
1322 (base32
1323 "1ppwxp9yck29pk2p2dlrrad6rz16l9h4fhcajp9yb7ns94fm5v3l"))))
1324 (build-system pyproject-build-system)
1325 (propagated-inputs
1326 (list python-dateutil
1327 python-lxml))
1328 (native-inputs
1329 (list python-pytest
1330 python-setuptools))
1331 (home-page "https://feedgen.kiesow.be")
1332 (synopsis "Atom and RSS feed generator")
1333 (description
1334 "This module can be used to generate web feeds in both Atom and RSS
1335format. It also extensible and comes with an extension to produce podcasts.")
1336 ;; The README says that this package is released under both licenses, and
1337 ;; permits the user to choose whichever is more convenient to them.
1338 (license (list license:bsd-2
1339 license:lgpl3+))))
1340
1341(define-public python-flask-caching
1342 (package
1343 (name "python-flask-caching")
1344 (version "2.3.1")
1345 (source
1346 (origin
1347 (method url-fetch)
1348 (uri (pypi-uri "flask_caching" version))
1349 (sha256
1350 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
1351 (build-system pyproject-build-system)
1352 (arguments
1353 (list
1354 #:test-flags
1355 ;; Tests requiring running Redis or dated python-cache.
1356 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
1357 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
1358 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
1359 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
1360 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
1361 "-k" "not test_client_override_reflected_on_cachelib_methods")))
1362 (native-inputs
1363 (list python-pytest
1364 python-pytest-asyncio
1365 python-pytest-xprocess
1366 python-setuptools))
1367 (propagated-inputs
1368 (list python-cachelib
1369 python-flask))
1370 (home-page "https://github.com/pallets-eco/flask-caching")
1371 (synopsis "Caching extension for Flask")
1372 (description
1373 "This package provides a caching support to Flask applications, it's a
1374fort ok https://github.com/thadeusb/flask-cache.")
1375 (license license:bsd-3)))
1376
1377(define-public python-flask-paginate
1378 (package
1379 (name "python-flask-paginate")
1380 (version "2024.4.12")
1381 (source
1382 (origin
1383 (method git-fetch)
1384 (uri (git-reference
1385 (url "https://github.com/lixxu/flask-paginate")
1386 (commit (string-append "v" version))))
1387 (file-name (git-file-name name version))
1388 (sha256
1389 (base32 "1q4ajwk0pzc6934g07gdryjcwi6rd9iqcwv5g5s718dfx2bj1831"))))
1390 (arguments
1391 (list #:test-backend #~'custom
1392 #:test-flags #~(list "tests/tests.py")))
1393 (build-system pyproject-build-system)
1394 (native-inputs
1395 (list python-pytest
1396 python-setuptools))
1397 (propagated-inputs
1398 (list python-flask))
1399 (home-page "https://github.com/lixxu/flask-paginate")
1400 (synopsis "Simple paginate support for Flask")
1401 (description
1402 "Flask-paginate is a simple pagination extension for Flask which is
1403inspired by Ruby's will_paginate library. It supports several CSS frameworks.")
1404 (license license:bsd-3)))
1405
1406(define-public python-flask-limiter
1407 (package
1408 (name "python-flask-limiter")
1409 (version "4.1.1")
1410 (source
1411 (origin
1412 (method git-fetch)
1413 (uri (git-reference
1414 (url "https://github.com/alisaifee/flask-limiter")
1415 (commit version)))
1416 (file-name (git-file-name name version))
1417 (sha256
1418 (base32 "18n12iayzw6qqys26824j5lfbphfcammpmyrvys1k0rn4xcbifln"))))
1419 (build-system pyproject-build-system)
1420 (arguments
1421 (list
1422 ;; tests: 155 passed, 620 deselected
1423 #:test-flags
1424 #~(list "-k" (simple-format #f "not (~a)"
1425 (string-join
1426 (append
1427 ;; The test suite spawns storages in Docker.
1428 '("memcache" "reset_unsupported")
1429 '("mongo")
1430 '("redis" "clear_limits"
1431 "constructor_arguments_over_config"
1432 "custom_key_prefix" "fallback_to_memory"))
1433 " or ")))
1434 #:phases
1435 #~(modify-phases %standard-phases
1436 (add-before 'check 'adjust-tests
1437 (lambda _
1438 (substitute* "pytest.ini"
1439 ((".*--cov=.*") ""))
1440 (substitute* (find-files "tests" "\\.py$")
1441 (("import pymemcache.*") "")
1442 (("import pymongo.*") "")
1443 (("import redis.*") "")))))))
1444 (native-inputs (list python-flask-restful
1445 python-hatch-vcs
1446 python-hatchling
1447 python-hiro
1448 python-pytest
1449 python-pytest-check
1450 python-pytest-mock))
1451 (propagated-inputs (list python-flask
1452 python-limits
1453 python-ordered-set
1454 python-rich))
1455 (home-page "https://flask-limiter.readthedocs.org/")
1456 (synopsis "Rate limiting for Flask applications")
1457 (description
1458 "Flask-Limiter adds rate limiting to Flask applications.
1459Rate limits can be configured at different levels such as:
1460
1461@itemize
1462@item Application wide global limits per user
1463@item Default limits per route
1464@item By blueprints
1465@item By class-based views
1466@item By individual routes
1467@end itemize")
1468 (license license:expat)))
1469
1470(define-public python-gdown
1471 (package
1472 (name "python-gdown")
1473 (version "5.2.0")
1474 (source
1475 (origin
1476 (method url-fetch)
1477 (uri (pypi-uri "gdown" version))
1478 (sha256
1479 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
1480 (build-system pyproject-build-system)
1481 (arguments (list #:tests? #f)) ;network access is required
1482 (native-inputs
1483 (list python-hatch-fancy-pypi-readme
1484 python-hatch-vcs
1485 python-hatchling))
1486 (propagated-inputs
1487 (list python-beautifulsoup4
1488 python-filelock
1489 python-requests
1490 python-tqdm))
1491 (home-page "https://github.com/wkentaro/gdown")
1492 (synopsis "Google Drive Public File/Folder Downloader")
1493 (description
1494 "This package implements a functionality to download large files
1495recursively from Google Drive with option to filter them by file
1496formats (PDF/XML/CSV).")
1497 (license license:expat)))
1498
1499(define-public python-globus-sdk
1500 (package
1501 (name "python-globus-sdk")
1502 (version "4.4.0")
1503 (source
1504 (origin
1505 (method git-fetch)
1506 (uri (git-reference
1507 (url "https://github.com/globus/globus-sdk-python")
1508 (commit version)))
1509 (file-name (git-file-name name version))
1510 (sha256
1511 (base32 "1d0zw9dkpdhsf9zdg3nk6b55gqwzc3v2rj76nj7999hjmq8350vh"))))
1512 (build-system pyproject-build-system)
1513 (arguments
1514 (list
1515 #:phases
1516 #~(modify-phases %standard-phases
1517 (add-before 'check 'pre-check
1518 (lambda _ (setenv "HOME" "/tmp"))))))
1519 (native-inputs
1520 (list python-flaky
1521 python-pytest
1522 python-pytest-randomly
1523 python-responses
1524 python-setuptools))
1525 (propagated-inputs
1526 (list python-cryptography
1527 python-importlib-resources
1528 python-pyjwt
1529 python-requests))
1530 (home-page "https://github.com/globus/globus-sdk-python")
1531 (synopsis "Globus SDK for Python")
1532 (description
1533 "This package provides a SDK for convenient Pythonic interface to
1534@url{https://www.globus.org/, Globus} APIs.")
1535 (license license:asl2.0)))
1536
1537(define-public python-guardpost
1538 (package
1539 (name "python-guardpost")
1540 (version "1.0.4")
1541 (source
1542 (origin
1543 (method git-fetch)
1544 (uri (git-reference
1545 (url "https://github.com/Neoteroi/guardpost")
1546 (commit (string-append "v" version))))
1547 (file-name (git-file-name name version))
1548 (sha256
1549 (base32 "1xsakqn36g2h1s5rnbaf1lasx1jn4skqhmb8kdl1k4pgxp5sczyy"))))
1550 (build-system pyproject-build-system)
1551 (arguments
1552 (list
1553 ;; Possible timing issue, see:
1554 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
1555 #:test-flags '(list "--ignore=tests/test_jwts.py")))
1556 (native-inputs
1557 (list python-flask
1558 python-hatchling
1559 python-pytest
1560 python-pytest-asyncio))
1561 (propagated-inputs
1562 (list python-rodi
1563 ;; [optional]
1564 python-cryptography
1565 python-essentials
1566 python-pyjwt))
1567 (home-page "https://github.com/Neoteroi/GuardPost/")
1568 (synopsis
1569 "Authentication and authorization framework for Python applications")
1570 (description
1571 "GuardPost is a framework to handle authentication and
1572authorization in asynchronous Python applications.
1573
1574Its features include
1575
1576@itemize
1577@item Strategy to implement authentication.
1578@item Strategy to implement authorization.
1579@item Support for dependency injection
1580@item Built-in support for JSON Web Tokens (JWTs) authentication.
1581@end itemize")
1582 (license license:expat)))
1583
1584(define-public python-habanero
1585 (package
1586 (name "python-habanero")
1587 (version "2.3.0")
1588 (source
1589 (origin
1590 (method git-fetch)
1591 (uri (git-reference
1592 (url "https://github.com/sckott/habanero")
1593 (commit (string-append "v" version))))
1594 (file-name (git-file-name name version))
1595 (sha256
1596 (base32 "1a842izcc8l4wb8004v92zsq1h4yc7qc2wi9am6x0f7idlx993sw"))))
1597 (build-system pyproject-build-system)
1598 (arguments
1599 ;; Run only a small portion of unit tests without network access
1600 ;; requirement.
1601 (list #:test-flags #~(list "test/test-filters.py")))
1602 (native-inputs
1603 (list python-hatchling
1604 python-pytest))
1605 (propagated-inputs
1606 (list python-httpx
1607 python-packaging
1608 python-tqdm
1609 python-urllib3))
1610 (home-page "https://github.com/sckott/habanero")
1611 (synopsis "Low Level Client for Crossref Search API")
1612 (description
1613 "Low Level Client for
1614@url{https://api.crossref.org/swagger-ui/index.html, Crossref Search API}.")
1615 (license license:expat)))
1616
1617(define-public python-hookdns
1618 (package
1619 (name "python-hookdns")
1620 (version "2.0.0")
1621 (source
1622 (origin
1623 (method url-fetch)
1624 (uri (pypi-uri "hookdns" version))
1625 (sha256
1626 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
1627 (build-system pyproject-build-system)
1628 (arguments
1629 (list
1630 #:test-flags
1631 #~(list "-k" (string-join
1632 ;; Tests requiring networking.
1633 (list
1634 "not test_patch_contextmanager_with_another_hostname"
1635 "test_patch_contextmanager_with_another_hostname_ipv6"
1636 "test_patch_contextmanager_with_ipv4"
1637 "test_patch_contextmanager_with_name"
1638 "test_patch_contextmanager_with_public_fqdn_and_"
1639 "test_patch_contextmanager_with_unknown_hostname"
1640 "test_patch_decorator_with_another_hostname"
1641 "test_patch_decorator_with_another_hostname_ipv6"
1642 "test_patch_decorator_with_ipv4"
1643 "test_patch_decorator_with_name"
1644 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
1645 "test_patch_decorator_with_unknown_hostname"
1646 "test_real_getaddrinfo_with_name_ipv6"
1647 "test_real_getaddrinfo_with_public_fqdn_ipv4"
1648 "test_real_getaddrinfo_with_public_fqdn_ipv6"
1649 "test_real_gethostbyname_ex_with_public_fqdn"
1650 "test_real_gethostbyname_with_public_fqdn"
1651 "test_real_requests_ip"
1652 "test_real_requests_name"
1653 "test_real_requests_with_public_fqdn"
1654 "test_reentrant")
1655 " and not "))))
1656 (native-inputs
1657 (list python-pytest
1658 python-requests
1659 python-setuptools
1660 python-wheel))
1661 (home-page "https://github.com/cle-b/hookdns")
1662 (synopsis "DNS resolution customization library")
1663 (description
1664 "HookDNS implements functionality that allows for modifying name
1665resolution in a Python script without any changes to the hosts file or the use
1666of a fake DNS resolver.")
1667 (license license:asl2.0)))
1668
1669(define-public python-httpcore2
1670 (package
1671 (name "python-httpcore2")
1672 (version "2.4.0")
1673 (source
1674 (origin
1675 (method git-fetch)
1676 (uri (git-reference
1677 (url "https://github.com/pydantic/httpx2")
1678 (commit (string-append "v" version))))
1679 (file-name (git-file-name name version))
1680 (sha256
1681 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
1682 (build-system pyproject-build-system)
1683 (arguments
1684 (list
1685 #:phases
1686 #~(modify-phases %standard-phases
1687 (add-after 'unpack 'preparation
1688 (lambda _
1689 (chdir "src/httpcore2")
1690 (copy-recursively "../../tests/httpcore2" "tests")
1691 (substitute* (find-files "tests" "\\.py$")
1692 (("tests\\.httpcore2") "tests")
1693 (("tests/httpcore2") "tests"))))
1694 (add-before 'build 'set-version
1695 (lambda _
1696 (substitute* "pyproject.toml"
1697 ((".*uv-dynamic-versioning>.*") "")
1698 (("source.*uv-dynamic-versioning.*") "source = 'vcs'"))
1699 (substitute* "httpcore2/__init__.py"
1700 ((".*= version\\(.*")
1701 (format #f "__version__ = ~s~%" #$version))))))))
1702 (native-inputs
1703 (list python-hatch-fancy-pypi-readme
1704 python-hatch-vcs
1705 python-hatchling
1706 python-pytest
1707 python-pytest-httpbin
1708 python-pytest-trio))
1709 (propagated-inputs
1710 (list python-h11
1711 python-truststore
1712 ;; [optional]
1713 python-anyio
1714 python-h2
1715 python-socksio
1716 python-trio))
1717 (home-page "https://github.com/pydantic/httpx2")
1718 (synopsis "Minimal low-level HTTP client")
1719 (description
1720 "The HTTP Core package provides a minimal low-level HTTP client, which
1721does one thing only. Sending HTTP requests.
1722
1723Some things HTTP Core does do:
1724@itemize
1725@item Sending HTTP requests.
1726@item Thread-safe / task-safe connection pooling.
1727@item HTTP(S) proxy & SOCKS proxy support.
1728@item Supports HTTP/1.1 and HTTP/2.
1729@item Provides both sync and async interfaces.
1730@item Async backend support for @code{asyncio} and @code{trio}.
1731@end itemize")
1732 (license license:bsd-3)))
1733
1734(define-public python-httpretty
1735 (package
1736 (name "python-httpretty")
1737 (version "1.1.4")
1738 (source
1739 (origin
1740 (method url-fetch)
1741 (uri (pypi-uri "httpretty" version))
1742 (sha256
1743 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
1744 (build-system pyproject-build-system)
1745 (arguments
1746 (list
1747 #:test-flags
1748 ;; Only run Unit tests.
1749 #~(list "--ignore=tests/bugfixes"
1750 "--ignore=tests/functional"
1751 "--ignore=tests/pyopenssl"
1752 "-k" (string-join
1753 ;; Tests pattern failing with one of these errors:
1754 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
1755 ;; has no attribute 'should'
1756 ;; AttributeError: 'function' object has no attribute
1757 ;; 'when'
1758 ;; AttributeError: 'AssertionBuilder' object has no
1759 ;; attribute 'should_not'
1760 (list "not fake_socket_passes_through"
1761 "fakesock_socket"
1762 "request_parse_body_when"
1763 "test_Entry_class_normalizes_headers"
1764 "test_has_request"
1765 "test_httpretty_should_raise_proper"
1766 "test_parse_request_line_connect"
1767 "test_request_parse_querystring"
1768 "test_request_string_representation"
1769 "test_request_stubs_internals")
1770 " and not "))))
1771 (native-inputs
1772 (list nss-certs-for-test
1773 python-freezegun
1774 python-mock
1775 python-pytest
1776 python-setuptools
1777 python-sure
1778 python-wheel))
1779 (home-page "https://httpretty.readthedocs.io")
1780 (synopsis "HTTP client mock for Python")
1781 (description
1782 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
1783@code{fakeweb}.")
1784 (license license:expat)))
1785
1786(define-public python-httpx2
1787 (package
1788 (name "python-httpx2")
1789 (version "2.4.0")
1790 (source
1791 (origin
1792 (method git-fetch)
1793 (uri (git-reference
1794 (url "https://github.com/pydantic/httpx2")
1795 (commit (string-append "v" version))))
1796 (file-name (git-file-name name version))
1797 (sha256
1798 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
1799 (arguments
1800 (list
1801 ;; tests: 1227 passed, 200 deselected
1802 #:test-flags
1803 ;; Networking tests.
1804 #~(list "-k" (string-join
1805 (list "not test_async_proxy_close[asyncio]"
1806 "test_async_proxy_close[trio]"
1807 "test_auth"
1808 "test_binary"
1809 "test_client_decode_text_using_autodetect"
1810 "test_client_decode_text_using_explicit_encoding"
1811 "test_follow_redirects"
1812 "test_get"
1813 "test_idna_url[http_with_custom_port]"
1814 "test_idna_url[http_with_port]"
1815 "test_idna_url[https_with_custom_port]"
1816 "test_idna_url[https_with_port]"
1817 "test_idna_url[https_without_port]"
1818 "test_idna_url[idna_label_after_ascii_label]"
1819 "test_idna_url[unicode_tr46_compat]"
1820 "test_json"
1821 "test_post"
1822 "test_redirects"
1823 "test_response_decode_text_using_autodetect"
1824 "test_sync_proxy_close"
1825 "test_url_malformed_idna_label_after_ascii_label"
1826 "test_url_mixed_valid_and_malformed_idna_labels"
1827 "test_verbose")
1828 " and not "))
1829 #:phases
1830 #~(modify-phases %standard-phases
1831 (add-after 'unpack 'preparation
1832 (lambda _
1833 (chdir "src/httpx2")
1834 (copy-recursively "../../tests/httpx2" "tests")
1835 (substitute* (find-files "tests" "\\.py$")
1836 (("tests\\.httpx2") "tests")
1837 (("tests/httpx2") "tests"))))
1838 (add-before 'build 'set-version
1839 (lambda _
1840 (substitute* "pyproject.toml"
1841 (("\"uv-dynamic-versioning>=0\\.8\\.0\"") "")
1842 (("source.*uv-dynamic-versioning.*") "source = 'vcs'")
1843 (("\\.uv-dynamic-versioning") ".vcs")))))))
1844 (build-system pyproject-build-system)
1845 (native-inputs
1846 (list python-pytest
1847 python-hatch-fancy-pypi-readme
1848 python-hatch-vcs
1849 python-hatchling
1850 python-trustme
1851 python-uvicorn
1852 python-chardet))
1853 (propagated-inputs
1854 (list python-anyio
1855 python-httpcore2
1856 python-idna
1857 python-truststore
1858 python-typing-extensions ;Python version < 3.13
1859 ;; [optional]
1860 python-brotli
1861 python-click
1862 python-h2
1863 python-pygments
1864 python-rich
1865 python-socksio
1866 python-zstandard))
1867 (home-page "https://github.com/pydantic/httpx2")
1868 (synopsis "The next generation HTTP client")
1869 (description
1870 "HTTPX2 is a fully featured HTTP client library for Python. It includes
1871an integrated command line client, has support for both HTTP/1.1 and HTTP/2,
1872and provides both sync and async APIs.")
1873 (license license:bsd-3)))
1874
1875(define-public python-jiter
1876 (package
1877 (name "python-jiter")
1878 (version "0.15.0")
1879 (source
1880 (origin
1881 (method git-fetch)
1882 (uri (git-reference
1883 (url "https://github.com/pydantic/jiter/")
1884 (commit (string-append "v" version))))
1885 (file-name (git-file-name name version))
1886 (sha256
1887 (base32 "1z2ljacsc64yykkxvjnq6rq4z56xwr8jhcw02ckv6b85kc66x63p"))))
1888 (build-system pyproject-build-system)
1889 (arguments
1890 (list
1891 #:imported-modules (append %cargo-build-system-modules
1892 %pyproject-build-system-modules)
1893 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
1894 (guix build pyproject-build-system)
1895 (guix build utils))
1896 #:phases
1897 #~(modify-phases %standard-phases
1898 (add-after 'unpack 'prepare-cargo-build-system
1899 (lambda args
1900 (for-each (lambda (phase)
1901 (format #t "Running cargo phase: ~a~%" phase)
1902 (apply (assoc-ref cargo:%standard-phases phase)
1903 #:cargo-target #$(cargo-triplet)
1904 args))
1905 '(prepare-rust-crates
1906 unpack-rust-crates
1907 configure
1908 check-for-pregenerated-files
1909 patch-cargo-checksums))))
1910 (add-after 'prepare-cargo-build-system 'chdir
1911 (lambda _
1912 (chdir "crates/jiter-python"))))))
1913 (native-inputs
1914 (append (list maturin
1915 python-dirty-equals
1916 python-pytest
1917 rust
1918 `(,rust "cargo"))
1919 (or (and=> (%current-target-system)
1920 (compose list make-rust-sysroot))
1921 '())))
1922 (inputs (cargo-inputs 'jiter))
1923 (home-page "https://github.com/pydantic/jiter/")
1924 (synopsis "Iterable JSON parser")
1925 (description
1926 "This package provides a fast Python iterable JSON parser, backed by Rust
1927libraries.")
1928 (license license:bsd-3)))
1929
1930(define-public python-justhtml
1931 (package
1932 (name "python-justhtml")
1933 (version "1.13.0")
1934 (source
1935 (origin
1936 (method git-fetch)
1937 (uri (git-reference
1938 (url "https://github.com/emilstenstrom/justhtml")
1939 (commit (string-append "v" version))))
1940 (file-name (git-file-name name version))
1941 (sha256
1942 (base32 "1hy5w3lr08sj3pivs46nnlfsvrd9ynmicxcrjk4sxbpg7411lyj5"))))
1943 (build-system pyproject-build-system)
1944 (native-inputs
1945 (list python-hatchling))
1946 (home-page "https://github.com/emilstenstrom/justhtml")
1947 (synopsis "Pure Python HTML5 parser")
1948 (description
1949 "JustHTML is a pure Python HTML5 parser. It has a simple API and does
1950not require C extensions or system dependencies.")
1951 (license license:expat)))
1952
1953(define-public python-huggingface-hub
1954 (package
1955 (name "python-huggingface-hub")
1956 (version "0.31.4")
1957 (source
1958 (origin
1959 (method git-fetch)
1960 (uri (git-reference
1961 (url "https://github.com/huggingface/huggingface_hub")
1962 (commit (string-append "v" version))))
1963 (file-name (git-file-name name version))
1964 (sha256
1965 (base32 "1rjkrmvvyzxlbnbndrg4v9qq39grn46c26zrdjgpf114gci5pwap"))))
1966 (build-system pyproject-build-system)
1967 (arguments
1968 (list
1969 #:test-flags
1970 ;; We don't have sentence_transformers...
1971 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
1972 ;; ...nor do we have InquirerPy...
1973 "--ignore=tests/test_command_delete_cache.py"
1974 ;; ...or timm...
1975 "--ignore=contrib/timm/test_timm.py"
1976 ;; ...or spacy_huggingface_hub
1977 "--ignore=contrib/spacy/test_spacy.py"
1978 ;; These all require internet access
1979 "--ignore=tests/test_cache_no_symlinks.py"
1980 "--ignore=tests/test_cache_layout.py"
1981 "--ignore=tests/test_commit_scheduler.py"
1982 "--ignore=tests/test_file_download.py"
1983 "--ignore=tests/test_hf_api.py"
1984 "--ignore=tests/test_hf_file_system.py"
1985 "--ignore=tests/test_inference_api.py"
1986 "--ignore=tests/test_inference_async_client.py"
1987 "--ignore=tests/test_inference_client.py"
1988 "--ignore=tests/test_inference_text_generation.py"
1989 "--ignore=tests/test_login_utils.py"
1990 "--ignore=tests/test_offline_utils.py"
1991 "--ignore=tests/test_repocard.py"
1992 "--ignore=tests/test_repository.py"
1993 "--ignore=tests/test_snapshot_download.py"
1994 "--ignore=tests/test_utils_cache.py"
1995 "--ignore=tests/test_utils_git_credentials.py"
1996 "--ignore=tests/test_utils_http.py"
1997 "--ignore=tests/test_utils_pagination.py"
1998 "--ignore=tests/test_webhooks_server.py"
1999 "-k" (string-append
2000 "not test_push_to_hub"
2001 " and not test_from_pretrained_model_id_only"
2002 " and not test_from_pretrained_model_id_and_revision"
2003 ;; These all require internet access
2004 " and not test_auth"
2005 " and not test_oauth"
2006 " and not test_utils_sha"
2007 " and not test_inference_providers"
2008 " and not test_xet"))
2009 #:phases
2010 '(modify-phases %standard-phases
2011 (add-before 'check 'pre-check
2012 ;; Some tests need to write to HOME.
2013 (lambda _ (setenv "HOME" "/tmp"))))))
2014 (propagated-inputs
2015 (list python-filelock
2016 python-fsspec
2017 python-packaging
2018 python-pyyaml
2019 python-requests
2020 python-tqdm
2021 python-typing-extensions))
2022 (native-inputs
2023 (list python-aiohttp
2024 python-fastapi
2025 python-jedi
2026 python-jinja2
2027 python-numpy
2028 python-pillow
2029 python-pydantic
2030 python-pytest
2031 python-pytest-asyncio
2032 python-pytest-env
2033 python-pytest-mock
2034 python-pytest-rerunfailures
2035 python-pytest-vcr
2036 python-pytest-xdist
2037 python-setuptools
2038 python-types-requests
2039 python-types-toml
2040 python-types-urllib3
2041 python-typing-extensions
2042 python-urllib3
2043 python-wheel))
2044 (home-page "https://huggingface.co/docs/huggingface_hub/")
2045 (synopsis "Client library for accessing the huggingface.co hub")
2046 (description
2047 "This package provides a client library to download and publish models,
2048datasets and other repos on the @url{huggingface.co} hub.")
2049 (license license:asl2.0)))
2050
2051(define-public python-kubernetes
2052 (package
2053 (name "python-kubernetes")
2054 (version "35.0.0")
2055 (source
2056 (origin
2057 (method url-fetch)
2058 (uri (pypi-uri "kubernetes" version))
2059 (sha256
2060 (base32 "1vh9bzq175fzv9av3v37lcfh37yzss2d9vxrb0a84fa2ji2d601x"))))
2061 (build-system pyproject-build-system)
2062 (arguments
2063 (list
2064 #:test-flags
2065 #~(list
2066 ;; The following tests expect a local running Kubernetes cluster.
2067 "--ignore=kubernetes/e2e_test"
2068 "--ignore=kubernetes/dynamic")))
2069 (native-inputs
2070 (list python-pytest
2071 python-setuptools))
2072 (propagated-inputs
2073 (list python-certifi
2074 python-dateutil
2075 python-durationpy
2076 python-google-auth
2077 python-pyyaml
2078 python-requests
2079 python-requests-oauthlib
2080 python-six ;XXX: hard dependency
2081 python-urllib3
2082 python-websocket-client))
2083 (home-page "https://github.com/kubernetes-client/python")
2084 (synopsis "Python client for Kubernetes")
2085 (description
2086 "This package provides an official Python client library for
2087@url{http://kubernetes.io, Kubernetes}.")
2088 (license license:asl2.0)))
2089
2090(define-public python-lazr-restfulclient
2091 (package
2092 (name "python-lazr-restfulclient")
2093 (version "0.14.6")
2094 (source
2095 (origin
2096 (method url-fetch)
2097 (uri (pypi-uri "lazr.restfulclient" version))
2098 (sha256
2099 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
2100 (build-system pyproject-build-system)
2101 (arguments
2102 (list
2103 #:phases
2104 #~(modify-phases %standard-phases
2105 ;; Disable part of the test suite to avoid the lazr.authentication
2106 ;; requirement, which requires 'oauth', a Python 2 only library.
2107 (add-after 'unpack 'remove-some-checks
2108 (lambda _
2109 (with-directory-excursion "src/lazr/restfulclient/tests"
2110 (for-each delete-file '("test_oauth.py" "test_docs.py")))
2111 (substitute* "setup.py"
2112 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
2113 ""))))
2114 (replace 'check
2115 (lambda* (#:key tests? #:allow-other-keys)
2116 (if tests?
2117 (invoke "zope-testrunner" "--test-path=src")
2118 (format #t "test suite not run~%")))))))
2119 (native-inputs
2120 (list python-setuptools
2121 python-testtools
2122 python-wheel
2123 python-wsgi-intercept
2124 python-zope-testrunner))
2125 (propagated-inputs
2126 (list python-distro
2127 python-httplib2
2128 python-oauthlib
2129 python-pyparsing
2130 python-setuptools
2131 python-six
2132 python-wadllib))
2133 (home-page "https://launchpad.net/lazr.restfulclient")
2134 (synopsis "Web client Python library extending wadlib")
2135 (description "This package provides a programmable client library that
2136adds functionality on top of @code{wadlib}.")
2137 (license license:lgpl3+)))
2138
2139(define-public python-launchpadlib
2140 (package
2141 (name "python-launchpadlib")
2142 (version "2.1.0")
2143 (source
2144 (origin
2145 (method url-fetch)
2146 (uri (pypi-uri "launchpadlib" version))
2147 (sha256
2148 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
2149 (build-system pyproject-build-system)
2150 (arguments
2151 (list #:phases #~(modify-phases %standard-phases
2152 (add-before 'check 'set-home
2153 (lambda _
2154 ;; Tests require a writable home.
2155 (setenv "HOME" "/tmp"))))))
2156 (propagated-inputs
2157 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
2158 (native-inputs (list python-pytest python-testresources python-wadllib
2159 python-setuptools python-wheel))
2160 (home-page "https://documentation.ubuntu.com/launchpad")
2161 (synopsis "Python client library for Launchpad's web service")
2162 (description "@code{launchpadlib} is a Python library that allows
2163scripting Launchpad via its the web service API.")
2164 (license license:lgpl3+)))
2165
2166(define-public python-lazr-uri
2167 (package
2168 (name "python-lazr-uri")
2169 (version "1.0.7")
2170 (source
2171 (origin
2172 (method url-fetch)
2173 (uri (pypi-uri "lazr_uri" version))
2174 (sha256
2175 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
2176 (build-system pyproject-build-system)
2177 (arguments
2178 (list
2179 #:phases
2180 #~(modify-phases %standard-phases
2181 (replace 'check
2182 (lambda* (#:key tests? #:allow-other-keys)
2183 (if tests?
2184 (invoke "zope-testrunner" "--test-path=src")
2185 (format #t "test suite not run~%")))))))
2186 (native-inputs (list python-setuptools python-zope-testrunner))
2187 (home-page "https://launchpad.net/lazr.uri")
2188 (synopsis "Python URI manipulation library")
2189 (description "This Python package provides a self-contained, easily
2190reusable library for parsing, manipulating, and generating URIs.")
2191 (license license:lgpl3)))
2192
2193(define-public python-ldaptor
2194 (package
2195 (name "python-ldaptor")
2196 (version "21.2.0")
2197 (source
2198 (origin
2199 (method url-fetch)
2200 (uri (pypi-uri "ldaptor" version))
2201 (sha256
2202 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
2203 (build-system pyproject-build-system)
2204 (arguments
2205 (list
2206 #:test-flags
2207 #~(list "-m" "twisted.trial"
2208 (string-append "-j" (number->string (parallel-job-count)))
2209 "ldaptor")
2210 #:phases
2211 #~(modify-phases %standard-phases
2212 (add-after 'unpack 'python-3.12-patch
2213 (lambda _
2214 (substitute* "ldaptor/config.py"
2215 (("SafeConfigParser")
2216 "ConfigParser"))))
2217 (add-before 'check 'disable-failing-tests
2218 (lambda _
2219 ;; Testing with Twisted 22.4 results in infinite loop creating
2220 ;; temporary config files, see
2221 ;; <https://github.com/twisted/ldaptor/issues/238>.
2222 (delete-file "ldaptor/test/test_config.py")))
2223 (replace 'check
2224 (lambda* (#:key tests? test-flags #:allow-other-keys)
2225 (when tests?
2226 (apply invoke "python" test-flags)))))))
2227 (native-inputs
2228 (list python-setuptools
2229 python-wheel))
2230 (propagated-inputs
2231 (list python-passlib
2232 python-pyopenssl
2233 python-service-identity ; to pass sanity check, for Twisted[tls]
2234 python-pyparsing
2235 python-twisted
2236 python-zope-interface))
2237 (home-page "https://github.com/twisted/ldaptor")
2238 (synopsis "Pure-Python Twisted library for LDAP")
2239 (description
2240 "This package provides a Python Twisted library for LDAP, which key
2241feaatures are:
2242@itemize
2243@item LDAP client logic
2244@item separately-accessible LDAP and BER protocol message generation/parsing
2245@item ASCII-format LDAP filter generation and parsing
2246@item LDIF format data generation
2247@item Samba password changing logic
2248@end itemize")
2249 (license license:expat)))
2250
2251(define-public python-legacy-cgi
2252 (package
2253 (name "python-legacy-cgi")
2254 (version "2.6.1")
2255 (source
2256 (origin
2257 (method url-fetch)
2258 (uri (pypi-uri "legacy_cgi" version))
2259 (sha256
2260 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
2261 (build-system pyproject-build-system)
2262 (native-inputs (list python-poetry-core python-pytest))
2263 (home-page "https://github.com/jackrosenthal/legacy-cgi")
2264 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
2265 (description
2266 "This is a fork of the standard library modules @code{cgi} and
2267@code{cgitb}. They are slated to be removed from the Python standard library
2268in Python 3.13 by PEP-594.")
2269 (license license:psfl)))
2270
2271(define-public python-librouteros
2272 (package
2273 (name "python-librouteros")
2274 (version "4.0.0")
2275 (source
2276 (origin
2277 (method git-fetch)
2278 (uri (git-reference
2279 (url "https://github.com/luqasz/librouteros")
2280 (commit version)))
2281 (file-name (git-file-name name version))
2282 (sha256
2283 (base32 "0in952b2idb5j8v6sxfm21gqbr5i5776w5ir0hdsxjrl2f29305v"))))
2284 (build-system pyproject-build-system)
2285 (arguments
2286 (list
2287 #:build-backend "hatchling.build"
2288 #:test-flags
2289 #~(list "tests/unit")))
2290 (native-inputs
2291 (list python-hatchling
2292 python-pytest
2293 python-pytest-asyncio
2294 python-stamina))
2295 (home-page "https://github.com/luqasz/librouteros")
2296 (synopsis "Python implementation of MikroTik RouterOS API")
2297 (description
2298 "This package implements MikroTik's @code{RouterOS} API.")
2299 (license license:gpl2+)))
2300
2301(define-public python-opentelemetry-api
2302 (package
2303 (name "python-opentelemetry-api")
2304 (version "1.37.0")
2305 (source
2306 (origin
2307 (method url-fetch)
2308 (uri (pypi-uri "opentelemetry_api" version))
2309 (sha256
2310 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
2311 (build-system pyproject-build-system)
2312 (propagated-inputs (list python-importlib-metadata
2313 python-typing-extensions))
2314 (native-inputs (list python-hatchling
2315 python-opentelemetry-test-utils-bootstrap))
2316 (home-page "https://opentelemetry.io/docs/languages/python/")
2317 (synopsis "OpenTelemetry Python API")
2318 (description "@code{OpenTelemetry} Python API.")
2319 (license license:asl2.0)))
2320
2321(define-public python-opentelemetry-api-bootstrap
2322 (hidden-package
2323 (package/inherit python-opentelemetry-api
2324 (name "python-opentelemetry-api-bootstrap")
2325 (arguments
2326 (list
2327 #:tests? #f))
2328 (native-inputs (list python-hatchling)))))
2329
2330(define-public python-opentelemetry-sdk
2331 (package
2332 (name "python-opentelemetry-sdk")
2333 (version "1.37.0")
2334 (source
2335 (origin
2336 (method url-fetch)
2337 (uri (pypi-uri "opentelemetry_sdk" version))
2338 (sha256
2339 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
2340 (build-system pyproject-build-system)
2341 (propagated-inputs (list python-opentelemetry-api
2342 python-opentelemetry-semantic-conventions
2343 python-typing-extensions))
2344 (native-inputs (list python-hatchling
2345 python-opentelemetry-test-utils-bootstrap
2346 python-pytest))
2347 (home-page "https://opentelemetry.io/docs/languages/python/")
2348 (synopsis "OpenTelemetry Python SDK")
2349 (description "@code{OpenTelemetry} Python SDK.")
2350 (license license:asl2.0)))
2351
2352(define-public python-opentelemetry-sdk-bootstrap
2353 (hidden-package
2354 (package/inherit python-opentelemetry-sdk
2355 (name "python-opentelemetry-sdk-bootstrap")
2356 (arguments (list #:tests? #f))
2357 (propagated-inputs (list python-opentelemetry-api-bootstrap
2358 python-opentelemetry-semantic-conventions-bootstrap))
2359 (native-inputs (list python-hatchling)))))
2360
2361(define-public python-opentelemetry-semantic-conventions
2362 (package
2363 (name "python-opentelemetry-semantic-conventions")
2364 (version "0.58b0")
2365 (source
2366 (origin
2367 (method url-fetch)
2368 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
2369 (sha256
2370 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
2371 (build-system pyproject-build-system)
2372 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
2373 (native-inputs (list python-hatchling))
2374 (home-page "https://opentelemetry.io/docs/languages/python/")
2375 (synopsis "OpenTelemetry Semantic Conventions")
2376 (description "@code{OpenTelemetry} Semantic Conventions.")
2377 (license license:asl2.0)))
2378
2379(define-public python-opentelemetry-semantic-conventions-bootstrap
2380 (hidden-package
2381 (package/inherit python-opentelemetry-semantic-conventions
2382 (name "python-opentelemetry-semantic-conventions-bootstrap")
2383 (arguments
2384 (list
2385 #:tests? #f))
2386 (propagated-inputs (list python-opentelemetry-api-bootstrap
2387 python-typing-extensions)))))
2388
2389(define-public python-opentelemetry-test-utils
2390 (package
2391 (name "python-opentelemetry-test-utils")
2392 (version "0.58b0")
2393 (source
2394 (origin
2395 (method url-fetch)
2396 (uri (pypi-uri "opentelemetry_test_utils" version))
2397 (sha256
2398 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
2399 (build-system pyproject-build-system)
2400 (arguments (list #:tests? #f)) ; No tests in the wheel.
2401 (propagated-inputs
2402 (list python-asgiref
2403 python-opentelemetry-api
2404 python-opentelemetry-sdk))
2405 (native-inputs (list python-hatchling))
2406 (home-page "https://opentelemetry.io/docs/languages/python/")
2407 (synopsis "Test utilities for OpenTelemetry unit tests")
2408 (description "Test utilities for @code{OpenTelemetry} unit tests.")
2409 (license license:asl2.0)))
2410
2411(define-public python-opentelemetry-test-utils-bootstrap
2412 (hidden-package
2413 (package/inherit python-opentelemetry-test-utils
2414 (name "python-opentelemetry-test-utils-bootstrap")
2415 (propagated-inputs
2416 (list python-asgiref
2417 python-opentelemetry-api-bootstrap
2418 python-opentelemetry-sdk-bootstrap)))))
2419
2420(define-public python-pathy
2421 (package
2422 (name "python-pathy")
2423 (version "0.11.0")
2424 (source
2425 (origin
2426 (method url-fetch)
2427 (uri (pypi-uri "pathy" version))
2428 (sha256
2429 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
2430 (build-system pyproject-build-system)
2431 (native-inputs
2432 (list python-mock
2433 python-pytest
2434 python-setuptools))
2435 (propagated-inputs
2436 (list python-pathlib-abc-for-python-pathy
2437 python-smart-open-6
2438 python-typer))
2439 (home-page "https://github.com/justindujardin/pathy")
2440 (synopsis "Path interface for local and cloud bucket storage")
2441 (description "Pathy is a python package (with type annotations) for
2442working with Cloud Bucket storage providers using a @code{pathlib} interface.
2443It provides @code{pathlib.Path} subclasses for local and cloud bucket
2444storage.")
2445 (license license:asl2.0)))
2446
2447(define-public python-portend
2448 (package
2449 (name "python-portend")
2450 (version "3.2.1")
2451 (source
2452 (origin
2453 (method url-fetch)
2454 (uri (pypi-uri "portend" version))
2455 (sha256
2456 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
2457 (build-system pyproject-build-system)
2458 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
2459 ;; download dependencies.
2460 (arguments
2461 '(#:test-flags '("-k" "not project")))
2462 (native-inputs
2463 (list python-pytest
2464 python-setuptools
2465 python-setuptools-scm))
2466 (propagated-inputs
2467 (list python-tempora))
2468 (home-page "https://github.com/jaraco/portend")
2469 (synopsis "Monitor TCP ports for bound or unbound states")
2470 (description
2471 "@code{python-portend} can be used to monitor TCP ports for bound or
2472unbound states. For example, waiting for a port to be occupied or freed
2473within a set timeout. @code{python-portend} can also be used directly from
2474the command line.")
2475 (license license:expat)))
2476
2477(define-public python-prawcore
2478 (package
2479 (name "python-prawcore")
2480 (version "2.4.0")
2481 (source
2482 (origin
2483 (method git-fetch)
2484 (uri (git-reference
2485 (url "https://github.com/praw-dev/prawcore")
2486 (commit (string-append "v" version))))
2487 (file-name (git-file-name name version))
2488 (sha256
2489 (base32 "1y7gh7kk002b2h1ppkr1llb2gjfnby28zvx11j4ji0wm3r3rjh5l"))))
2490 (build-system pyproject-build-system)
2491 (arguments
2492 ;; XXX: These tests fail with an incomplete request response.
2493 (list #:test-flags
2494 #~'("-k" #$(string-append
2495 "not test_revoke__access_token_with_refresh_set"
2496 " and not test_revoke__access_token_without_refresh_set"
2497 " and not test_revoke__refresh_token_with_access_set"
2498 " and not test_refresh__with_scopes"
2499 " and not test_request__patch"))))
2500 (native-inputs
2501 (list python-betamax
2502 python-betamax-matchers
2503 python-betamax-serializers
2504 python-flit-core
2505 python-mock
2506 python-pytest
2507 python-testfixtures))
2508 (propagated-inputs
2509 (list python-requests))
2510 (synopsis "Core component of PRAW")
2511 (description "PRAWcore is a low-level communication layer used by PRAW.")
2512 (home-page "https://praw.readthedocs.io/en/latest/")
2513 (license license:bsd-2)))
2514
2515(define-public python-praw
2516 (package
2517 (name "python-praw")
2518 (version "7.8.1")
2519 (source
2520 (origin
2521 (method git-fetch)
2522 (uri (git-reference
2523 (url "https://github.com/praw-dev/praw")
2524 (commit (string-append "v" version))))
2525 (file-name (git-file-name name version))
2526 (sha256
2527 (base32 "05qq43l4334cq8r8k731qnb45nq12vvfdxwbr6q84a1hafp7n4cg"))))
2528 (build-system pyproject-build-system)
2529 (arguments
2530 (list #:test-flags
2531 #~(list "--ignore=tests/units/models"
2532 "--ignore=tests/integration/models"
2533 "--ignore=tests/unit/test_config.py"
2534 "--ignore=tests/integration/test_reddit.py")))
2535 (native-inputs
2536 (list python-betamax
2537 python-betamax-matchers
2538 python-flit-core
2539 python-pytest))
2540 (propagated-inputs
2541 (list python-prawcore python-update-checker python-websocket-client))
2542 (synopsis "Python Reddit API Wrapper")
2543 (description "PRAW is a Python package that allows for simple access to
2544Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
2545API rules.")
2546 (home-page "https://praw.readthedocs.io/en/latest/")
2547 (license license:bsd-2)))
2548
2549(define-public python-frozenlist
2550 (package
2551 (name "python-frozenlist")
2552 (version "1.8.0")
2553 (source
2554 (origin
2555 (method git-fetch)
2556 (uri (git-reference
2557 (url "https://github.com/aio-libs/frozenlist")
2558 (commit (string-append "v" version))))
2559 (file-name (git-file-name name version))
2560 (sha256
2561 (base32 "0r1kxf5b562zrn04nl912i6a8y1fyc891l1284v0zj9llb97limy"))))
2562 ;; XXX: Without "wheel", the 'install phase can't find the wheel.
2563 (outputs (list "out" "wheel"))
2564 (build-system pyproject-build-system)
2565 ;; The configuration contains explicit early calls to pytest_cov.
2566 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
2567 (native-inputs
2568 (list python-cython
2569 python-expandvars
2570 python-pytest
2571 python-setuptools
2572 python-tomli))
2573 (home-page "https://github.com/aio-libs/frozenlist")
2574 (synopsis "List-like data structure for Python")
2575 (description "@code{frozenlist.FrozenList} is a list-like structure which
2576implements @code{collections.abc.MutableSequence}. It can be made immutable
2577by calling @code{FrozenList.freeze}.")
2578 (license license:asl2.0)))
2579
2580(define-public python-aiobotocore
2581 (package
2582 (name "python-aiobotocore")
2583 (version "3.0.0")
2584 (source
2585 (origin
2586 (method url-fetch)
2587 (uri (pypi-uri "aiobotocore" version))
2588 (sha256
2589 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
2590 (build-system pyproject-build-system)
2591 (arguments
2592 ;; TODO: Tests need some setupt, see Makefile.
2593 (list #:tests? #f))
2594 (native-inputs
2595 (list python-setuptools))
2596 (propagated-inputs
2597 (list python-aiohttp
2598 python-aioitertools
2599 python-botocore
2600 python-dateutil
2601 python-jmespath
2602 python-multidict
2603 python-typing-extensions
2604 python-wrapt))
2605 (home-page "https://github.com/aio-libs/aiobotocore")
2606 (synopsis "Async client for AWS services using botocore and aiohttp")
2607 (description "This package provides an async client for Amazon services
2608using botocore and aiohttp/asyncio. This library is a mostly full featured
2609asynchronous version of botocore.")
2610 (license license:asl2.0)))
2611
2612(define-public python-aiohappyeyeballs
2613 (package
2614 (name "python-aiohappyeyeballs")
2615 (properties '((commit . "cc53cf8a1d31f7b460a0114214aac66956f0e2ed")
2616 (revision . "0")))
2617 (version (git-version "2.6.1"
2618 (assoc-ref properties 'revision)
2619 (assoc-ref properties 'commit)))
2620 (source
2621 (origin
2622 (method git-fetch)
2623 (uri (git-reference
2624 (url "https://github.com/aio-libs/aiohappyeyeballs")
2625 (commit (assoc-ref properties 'commit))))
2626 (file-name (git-file-name name version))
2627 (sha256
2628 (base32 "0nc723f4sxryg5h9z8paysmy9dnqw2jy4srxp9axrxkv9qrawa7n"))))
2629 (build-system pyproject-build-system)
2630 (native-inputs
2631 (list python-poetry-core
2632 python-pytest
2633 python-pytest-asyncio))
2634 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
2635 (synopsis "Happy Eyeballs for asyncio")
2636 (description "This library exists to allow connecting with Happy
2637Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
2638DNS name.")
2639 (license license:psfl)))
2640
2641(define-public python-aioitertools
2642 (package
2643 (name "python-aioitertools")
2644 (version "0.12.0")
2645 (source
2646 (origin
2647 (method url-fetch)
2648 (uri (pypi-uri "aioitertools" version))
2649 (sha256
2650 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
2651 (build-system pyproject-build-system)
2652 (arguments
2653 (list #:test-backend #~'custom
2654 #:test-flags #~(list "-m" "aioitertools.tests")))
2655 (native-inputs
2656 (list python-flit-core))
2657 (home-page "https://pypi.org/project/aioitertools/")
2658 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
2659 (description
2660 "This package provides an implementation of itertools, builtins, and more
2661for AsyncIO and mixed-type iterables.")
2662 (license license:expat)))
2663
2664(define-public python-aiosignal
2665 (package
2666 (name "python-aiosignal")
2667 (version "1.4.0")
2668 (source
2669 (origin
2670 (method url-fetch)
2671 (uri (pypi-uri "aiosignal" version))
2672 (sha256
2673 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
2674 (build-system pyproject-build-system)
2675 (arguments
2676 (list
2677 #:phases
2678 #~(modify-phases %standard-phases
2679 (add-after 'unpack 'avoid-pytest-cov-preload
2680 (lambda _
2681 (substitute* "pytest.ini"
2682 (("-p pytest_cov") "")))))))
2683 (native-inputs
2684 (list python-pytest
2685 python-pytest-asyncio
2686 python-setuptools))
2687 (propagated-inputs
2688 (list python-frozenlist))
2689 (home-page "https://github.com/aio-libs/aiosignal")
2690 (synopsis "Callback manager for Python @code{asyncio} projects")
2691 (description "This Python module provides @code{Signal}, an abstraction to
2692register asynchronous callbacks. The @code{Signal} abstraction can be used
2693for adding, removing and dropping callbacks.")
2694 (license license:asl2.0)))
2695
2696(define-public python-aiohttp
2697 (package
2698 (name "python-aiohttp")
2699 ;; TODO: Newer versions require zlib-ng:
2700 ;; <https://github.com/zlib-ng/zlib-ng>,
2701 ;; <https://github.com/pycompression/python-zlib-ng>.
2702 (version "3.11.18")
2703 (source
2704 (origin
2705 (method url-fetch)
2706 (uri (pypi-uri "aiohttp" version))
2707 (sha256
2708 (base32 "12jmkxkc5nnk6ma6m7rrs0w4vzswfc47ffxn5m0pwav1708nx1df"))
2709 (snippet
2710 #~(begin
2711 (use-modules ((guix build utils)))
2712 ;; TODO: Unbundle the llhttp sources.
2713 ;; (delete-file-recursively "vendor")
2714 (delete-file "aiohttp/_http_parser.c")
2715 (delete-file "aiohttp/_http_writer.c")))))
2716 (build-system pyproject-build-system)
2717 (arguments
2718 (list
2719 ;; tests: 3045 passed, 32 skipped, 29 xfailed, 2 subtests passed
2720 #:test-flags
2721 '(list
2722 "-o" "addopts=''" ; Avoid -p pytest_cov.
2723 "-m" "not dev_mode"
2724 "--numprocesses" (number->string (parallel-job-count))
2725 "--ignore=aiohttp/test_utils.py"
2726 ;; This tests requires the 'proxy.py' module, not yet packaged.
2727 "--ignore=tests/test_proxy_functional.py"
2728 ;; These tests need brotli.
2729 "--ignore=tests/test_web_sendfile_functional.py"
2730 "--ignore=tests/test_web_functional.py"
2731 ;; These tests need pytest_codspeed
2732 "--ignore-glob=tests/test_benchmarks*"
2733 ;; These tests need python_on_whales
2734 "--ignore=tests/autobahn/test_autobahn.py"
2735 "-k"
2736 ;; These tests fail for unknown reasons (see:
2737 ;; https://github.com/aio-libs/aiohttp/issues/7130)
2738 (string-append
2739 "not test_no_warnings "
2740 "and not test_default_loop "
2741 "and not test_ctor_global_loop "
2742 "and not test_set_loop_default_loop "
2743
2744 ;; Disable brotli tests, because we’re not providing that optional
2745 ;; library.
2746 "and not test_feed_eof_no_err_brotli "
2747
2748 ;; Disable the following tests as they require
2749 ;; networking.
2750 "and not TestDeflateBuffer "
2751 "and not test_client_session_timeout_zero "
2752 "and not test_empty_body "
2753 "and not test_mark_formdata_as_processed[pyloop] "
2754 "and not test_receive_runtime_err[pyloop] "
2755
2756 ;; assert 'gzip, deflate' == 'gzip, deflate, br'
2757 "and not test_headers[pyloop] "
2758 ;; ~/.. does not resolve
2759 "and not test_add_static_path_resolution"))
2760 #:phases
2761 '(modify-phases %standard-phases
2762 (add-after 'unpack 'fix-tests
2763 (lambda _
2764 ;; Make sure the timestamp of this file is > 1990, because a few
2765 ;; tests like test_static_file_if_modified_since_past_date depend
2766 ;; on it.
2767 (let ((late-90s (* 60 60 24 365 30)))
2768 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
2769 (add-before 'build 'cythonize
2770 (lambda _
2771 ;; Adapted from the Makefile.
2772 (with-directory-excursion "aiohttp"
2773 (for-each
2774 (lambda (file)
2775 (invoke "cython" "-3"
2776 file "-I" "."))
2777 (find-files "." "_.*\\.pyx$"))))))))
2778 (propagated-inputs
2779 (list python-aiohappyeyeballs
2780 python-aiosignal
2781 python-attrs
2782 python-frozenlist
2783 python-multidict
2784 python-propcache
2785 python-yarl))
2786 (native-inputs
2787 (list gunicorn-bootstrap
2788 python-cython
2789 python-freezegun
2790 python-isal
2791 python-pytest
2792 python-pytest-mock
2793 python-pytest-xdist
2794 python-re-assert
2795 python-setuptools))
2796 (home-page "https://github.com/aio-libs/aiohttp/")
2797 (synopsis "Async HTTP client/server framework (asyncio)")
2798 (description "@code{aiohttp} is an asynchronous HTTP client/server
2799framework.
2800
2801Its main features are:
2802@itemize
2803@item Supports both client and server side of HTTP protocol.
2804@item Supports both client and server Web-Sockets out-of-the-box without the
2805Callback Hell.
2806@item Web-server has middlewares and pluggable routing.
2807@end itemize")
2808 (license license:asl2.0)))
2809
2810(define-public python-aiohttp-oauthlib
2811 (package
2812 (name "python-aiohttp-oauthlib")
2813 (version "0.1.0")
2814 (source
2815 (origin
2816 (method url-fetch)
2817 (uri (pypi-uri "aiohttp-oauthlib" version))
2818 (sha256
2819 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
2820 (build-system pyproject-build-system)
2821 (arguments (list #:tests? #f)) ; none included
2822 (propagated-inputs (list python-aiohttp python-oauthlib))
2823 (native-inputs (list python-setuptools python-setuptools-scm))
2824 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
2825 (synopsis "OAuthlib authentication support for aiohttp")
2826 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
2827provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
2828 (license license:isc)))
2829
2830(define-public python-aiohttp-client-cache
2831 (package
2832 (name "python-aiohttp-client-cache")
2833 (version "0.14.3")
2834 (source
2835 (origin
2836 (method git-fetch)
2837 (uri (git-reference
2838 (url "https://github.com/requests-cache/aiohttp-client-cache")
2839 (commit (string-append "v" version))))
2840 (file-name (git-file-name name version))
2841 (sha256
2842 (base32
2843 "13xbmjjvcbzh3yh5z92mc0gwicwfjfq2av5jbqv09sbfzhggs92y"))))
2844 (build-system pyproject-build-system)
2845 (arguments
2846 (list
2847 #:test-flags #~(list "--ignore=test/integration/")))
2848 (native-inputs
2849 (list python-brotli
2850 python-faker
2851 python-hatchling
2852 python-pytest
2853 python-pytest-aiohttp
2854 python-pytest-asyncio
2855 python-types-aiofiles))
2856 (propagated-inputs
2857 (list python-aiohttp
2858 python-attrs
2859 python-itsdangerous
2860 python-url-normalize
2861 ;; [optional]
2862 python-aioboto3
2863 python-aiobotocore
2864 python-aiofiles
2865 python-aiosqlite
2866 python-pymongo
2867 python-redis))
2868 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
2869 (synopsis "Persistent cache for aiohttp requests")
2870 (description
2871 "This package is an asynchronous persistent caching library specifically
2872designed for @samp{aiohttp} requests in Python. With support for various
2873storage backends, it offers flexibility in how and where the cache is stored.
2874Please note that MongoDB and DynamoDB backends are not currently supported due
2875to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
2876 (license license:expat)))
2877
2878(define-public python-aiohttp-cors
2879 (package
2880 (name "python-aiohttp-cors")
2881 (version "0.8.1")
2882 (source
2883 (origin
2884 (method url-fetch)
2885 (uri (pypi-uri "aiohttp_cors" version))
2886 (sha256
2887 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
2888 (build-system pyproject-build-system)
2889 (arguments
2890 (list
2891 #:tests? #f)) ; network access is required to run tests
2892 (native-inputs
2893 (list python-setuptools
2894 python-wheel))
2895 (propagated-inputs
2896 (list python-aiohttp))
2897 (home-page "https://github.com/aio-libs/aiohttp-cors")
2898 (synopsis "CORS support for aiohttp")
2899 (description
2900 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
2901support for aiohttp asyncio-powered asynchronous HTTP server.")
2902 (license license:asl2.0)))
2903
2904(define-public python-aiohttp-retry
2905 (package
2906 (name "python-aiohttp-retry")
2907 (version "2.9.1")
2908 (source
2909 (origin
2910 (method git-fetch)
2911 (uri (git-reference
2912 (url "https://github.com/inyutin/aiohttp_retry")
2913 (commit (string-append "v" version))))
2914 (file-name (git-file-name name version))
2915 (sha256
2916 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
2917 (build-system pyproject-build-system)
2918 (native-inputs
2919 (list python-pytest
2920 python-pytest-aiohttp
2921 python-setuptools))
2922 (propagated-inputs
2923 (list python-aiohttp))
2924 (home-page "https://github.com/inyutin/aiohttp_retry")
2925 (synopsis "Simple retry client for aiohttp")
2926 (description
2927 "This package implements @code{RetryClient} for @code{aiohttp} to retry
2928connection to provided endpoint with timeouts logic or use:
2929
2930@itemize
2931@item @code{ExponentialRetry} with exponential backoff
2932@item @code{RandomRetry} for random backoff
2933@item @code{ListRetry} with backoff you predefine by list
2934@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
2935@item @code{JitterRetry} exponential retry with a bit of randomness
2936@end itemize")
2937 (license license:expat)))
2938
2939(define-public python-aiohttp-socks
2940 (package
2941 (name "python-aiohttp-socks")
2942 (version "0.10.1")
2943 (source
2944 (origin
2945 (method url-fetch)
2946 (uri (pypi-uri "aiohttp_socks" version))
2947 (sha256
2948 (base32
2949 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
2950 (build-system pyproject-build-system)
2951 (arguments (list #:tests? #false)) ;none included
2952 (propagated-inputs
2953 (list python-aiohttp python-socks))
2954 (native-inputs (list python-setuptools python-wheel))
2955 (home-page "https://github.com/romis2012/aiohttp-socks")
2956 (synopsis "SOCKS proxy connector for aiohttp")
2957 (description "This package provides a SOCKS proxy connector for
2958aiohttp. It supports SOCKS4(a) and SOCKS5.")
2959 (license license:asl2.0)))
2960
2961(define-public python-aiodns
2962 (package
2963 (name "python-aiodns")
2964 (version "3.5.0")
2965 (source
2966 (origin
2967 (method git-fetch)
2968 (uri (git-reference
2969 (url "https://github.com/saghul/aiodns")
2970 (commit (string-append "v" version))))
2971 (file-name (git-file-name name version))
2972 (sha256
2973 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
2974 (build-system pyproject-build-system)
2975 (arguments
2976 (list
2977 #:tests? #f)) ;tests require internet access
2978 (native-inputs
2979 (list python-pytest python-pytest-asyncio python-setuptools))
2980 (propagated-inputs (list python-pycares))
2981 (home-page "https://github.com/saghul/aiodns")
2982 (synopsis "Simple DNS resolver for asyncio")
2983 (description
2984 "@code{aiodns} provides a simple way for doing asynchronous DNS
2985resolutions with a synchronous looking interface by using
2986@url{https://github.com/saghul/pycares,pycares}.")
2987 (license license:expat)))
2988
2989(define-public python-aioquic
2990 (package
2991 (name "python-aioquic")
2992 (version "1.2.0")
2993 (source
2994 (origin
2995 (method url-fetch)
2996 (uri (pypi-uri "aioquic" version))
2997 (sha256
2998 (base32 "16bigrn5b46c7nmpzxhnlhh4y03hwc7dbd0mi5f8r53i7yxn64pr"))))
2999 (build-system pyproject-build-system)
3000 (arguments
3001 (list
3002 #:test-flags
3003 #~(list "-k" (string-join
3004 ;; AssertionError: AlertBadCertificate not raised
3005 (list "not test_verify_subject_no_subjaltname"
3006 ;; AttributeError: module
3007 ;; 'service_identity.cryptography' has no attribute
3008 ;; 'extract_patterns'
3009 "test_verify_subject_with_subjaltname"
3010 ;; AttributeError: module
3011 ;; 'service_identity.cryptography' has no attribute
3012 ;; 'extract_patterns'
3013 "test_verify_subject_with_subjaltname_ipaddress")
3014 " and not "))))
3015 (native-inputs
3016 (list nss-certs-for-test
3017 python-pytest
3018 python-setuptools
3019 python-wheel))
3020 (inputs
3021 (list openssl))
3022 (propagated-inputs
3023 (list python-certifi
3024 python-pylsqpack
3025 python-pyopenssl
3026 python-service-identity))
3027 (home-page "https://github.com/aiortc/aioquic")
3028 (synopsis "QUIC and HTTP3 implementation in Python")
3029 (description
3030 "@code{aioquic} is a library for the QUIC network protocol in Python.
3031It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
3032 (license license:bsd-3)))
3033
3034(define-public python-aiorpcx
3035 (package
3036 (name "python-aiorpcx")
3037 (version "0.25.0")
3038 (source
3039 (origin
3040 (method git-fetch)
3041 ;; PyPI misses the util.py file used for tests.
3042 (uri (git-reference
3043 (url "https://github.com/kyuupichan/aiorpcX")
3044 (commit version)))
3045 (file-name (git-file-name name version))
3046 (sha256
3047 (base32
3048 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
3049 (build-system pyproject-build-system)
3050 (arguments
3051 (list
3052 #:test-flags
3053 ;; This test opens a remote connection.
3054 #~(list "-k" "not test_create_connection_resolve_good")))
3055 (native-inputs (list python-pytest
3056 python-pytest-asyncio-0.26
3057 python-setuptools))
3058 (propagated-inputs
3059 (list python-attrs python-websockets))
3060 (home-page "https://github.com/kyuupichan/aiorpcX")
3061 (synopsis "Generic asyncio RPC implementation")
3062 (description
3063 "The aiorpcX library is a generic asyncio implementation of RPC suitable
3064for an application that is a client, server or both.
3065
3066The package includes a module with full coverage of JSON RPC versions 1.0 and
30672.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
3068comes with a SOCKS proxy client.")
3069 (license (list license:expat license:bsd-2))))
3070
3071(define-public python-aiostream
3072 (package
3073 (name "python-aiostream")
3074 (version "0.7.0")
3075 (source
3076 (origin
3077 (method git-fetch) ;no tests in PyPI archive
3078 (uri (git-reference
3079 (url "https://github.com/vxgmichel/aiostream")
3080 (commit (string-append "v" version))))
3081 (file-name (git-file-name name version))
3082 (sha256
3083 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
3084 (build-system pyproject-build-system)
3085 (native-inputs
3086 (list python-pytest python-pytest-asyncio python-setuptools))
3087 (propagated-inputs
3088 (list python-typing-extensions))
3089 (home-page "https://github.com/vxgmichel/aiostream")
3090 (synopsis "Generator-based operators for asynchronous iteration")
3091 (description "@code{aiostream} provides a collection of stream operators that can
3092be combined to create asynchronous pipelines of operations. It can be seen as an
3093asynchronous version of @code{itertools}, although some aspects are slightly
3094different. All the provided operators return a unified interface called a stream. A
3095stream is an enhanced asynchronous iterable.")
3096 (license license:gpl3)))
3097
3098(define-public python-asgiref
3099 (package
3100 (name "python-asgiref")
3101 (version "3.8.1")
3102 (source (origin
3103 (method url-fetch)
3104 (uri (pypi-uri "asgiref" version))
3105 (sha256
3106 (base32 "146mhkn3zp2bqf7j6r3chdlvfzgs5x1lrnqahsllgjdyl20bshy3"))))
3107 (build-system pyproject-build-system)
3108 (native-inputs
3109 (list python-pytest
3110 python-pytest-asyncio
3111 python-setuptools
3112 python-wheel))
3113 (home-page "https://github.com/django/asgiref/")
3114 (synopsis "ASGI specs, helper code, and adapters")
3115 (description
3116 "ASGI is a standard for Python asynchronous web apps and servers to
3117communicate with each other, and positioned as an asynchronous successor to
3118WSGI. This package includes libraries for implementing ASGI servers.")
3119 (license license:bsd-3)))
3120
3121(define-public python-asgi-csrf
3122 (package
3123 (name "python-asgi-csrf")
3124 (version "0.11")
3125 (source (origin
3126 (method git-fetch) ;for tests
3127 (uri (git-reference
3128 (url "https://github.com/simonw/asgi-csrf")
3129 (commit version)))
3130 (file-name (git-file-name name version))
3131 (sha256
3132 (base32
3133 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))))
3134 (build-system pyproject-build-system)
3135 (propagated-inputs (list python-itsdangerous python-multipart))
3136 (native-inputs (list python-asgi-lifespan
3137 python-httpx
3138 python-pytest
3139 python-pytest-asyncio
3140 python-starlette
3141 python-setuptools
3142 python-wheel))
3143 (home-page "https://github.com/simonw/asgi-csrf")
3144 (synopsis "ASGI middleware for protecting against CSRF attacks")
3145 (description "This Asynchronous Server Gateway Interface (ASGI)
3146middleware protects against Cross-site request forgery (CSRF) attacks.
3147It implements the Double Submit Cookie pattern, where a cookie is set
3148that is then compared to a @code{csrftoken} hidden form field or a
3149@code{x-csrftoken} HTTP header.")
3150 (license license:asl2.0)))
3151
3152(define-public python-asgi-lifespan
3153 (package
3154 (name "python-asgi-lifespan")
3155 (version "2.1.0")
3156 (source (origin
3157 (method git-fetch) ;for tests
3158 (uri (git-reference
3159 (url "https://github.com/florimondmanca/asgi-lifespan")
3160 (commit version)))
3161 (file-name (git-file-name name version))
3162 (sha256
3163 (base32
3164 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
3165 (build-system pyproject-build-system)
3166 (arguments
3167 (list
3168 #:test-flags
3169 '(list "-k"
3170 (string-append
3171 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
3172 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
3173 " or test_lifespan_manager[trio-None-BodyFailed-None]"
3174 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
3175 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
3176 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
3177 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
3178 " or test_lifespan_timeout[trio-slow_shutdown]"
3179 " or test_lifespan_not_supported[trio-http_only]"
3180 " or test_lifespan_not_supported[trio-http_no_assert]"
3181 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
3182 ")"))
3183 #:phases
3184 '(modify-phases %standard-phases
3185 (add-after 'unpack 'compatibility
3186 (lambda _
3187 ;; httpx version 0.28.0 removed the "app" shortcut.
3188 (substitute* "tests/test_manager.py"
3189 (("app=manager.app")
3190 "transport=httpx.ASGITransport(manager.app)")))))))
3191 (native-inputs (list python-httpx
3192 python-pytest
3193 python-pytest-asyncio
3194 python-pytest-trio
3195 python-starlette
3196 python-setuptools
3197 python-wheel))
3198 (propagated-inputs (list python-sniffio))
3199 (home-page "https://github.com/florimondmanca/asgi-lifespan")
3200 (synopsis "Programmatic startup/shutdown of ASGI apps")
3201 (description "Programmatically send startup/shutdown lifespan events
3202into Asynchronous Server Gateway Interface (ASGI) applications. When
3203used in combination with an ASGI-capable HTTP client such as HTTPX, this
3204allows mocking or testing ASGI applications without having to spin up an
3205ASGI server.")
3206 (license license:expat)))
3207
3208(define-public python-a2wsgi
3209 (package
3210 (name "python-a2wsgi")
3211 (version "1.10.7")
3212 (source (origin
3213 (method url-fetch)
3214 (uri (pypi-uri "a2wsgi" version))
3215 (sha256
3216 (base32
3217 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
3218 (build-system pyproject-build-system)
3219 (arguments
3220 (list
3221 #:test-flags
3222 #~(list "-k" (string-join
3223 (list "not test_starlette_stream_response"
3224 "test_starlette_base_http_middleware"
3225 "test_baize_stream_response"
3226 ;; Fails because of harmless whitespace differences.
3227 "test_wsgi_post")
3228 " and not "))
3229 #:build-backend "pdm.backend"))
3230 (native-inputs
3231 (list python-pdm-backend
3232 python-pytest
3233 ;; python-baize ; not packed yet
3234 python-httpx-bootstrap
3235 ;; Cycle: python-a2wsgi->python-uvicorn->
3236 ;; python-httpx->python-starlette->python-a2wsgi
3237 ;; python-starlette
3238 python-pytest-asyncio))
3239 (home-page "https://github.com/abersheeran/a2wsgi")
3240 (synopsis "Convert WSGI to ASGI or vice versa")
3241 (description
3242 "This program converts a WSGI program to an ASGI program or the other
3243way around. It depends only on the Python standard library.")
3244 (license license:asl2.0)))
3245
3246(define-public python-httpauth
3247 (package
3248 (name "python-httpauth")
3249 (version "0.4.1")
3250 (source (origin
3251 (method url-fetch)
3252 (uri (pypi-uri "httpauth" version))
3253 (sha256
3254 (base32
3255 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
3256 (build-system pyproject-build-system)
3257 (native-inputs (list python-pytest python-setuptools python-wheel))
3258 (home-page "https://github.com/jonashaag/httpauth")
3259 (synopsis "WSGI HTTP Digest Authentication middleware")
3260 (description "@code{python-httpauth} is WSGI middleware that secures some/all
3261routes using HTTP Digest Authentication.")
3262 (license license:bsd-2)))
3263
3264(define-public python-css-html-js-minify
3265 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
3266 (revision "0"))
3267 (package
3268 (name "python-css-html-js-minify")
3269 (version (git-version "2.5.5" revision commit))
3270 (source
3271 (origin
3272 (method git-fetch)
3273 (uri (git-reference
3274 (url "https://github.com/juancarlospaco/css-html-js-minify")
3275 (commit commit)))
3276 (file-name (git-file-name name version))
3277 (sha256
3278 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
3279 (build-system pyproject-build-system)
3280 (arguments
3281 (list
3282 #:phases
3283 #~(modify-phases %standard-phases
3284 (add-after 'unpack 'relax-requirements
3285 (lambda _
3286 (substitute* "setup.cfg"
3287 (("^tests_require.*") "")))))))
3288 (native-inputs (list python-pytest python-setuptools))
3289 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
3290 (synopsis "CSS/HTML/JS minifier")
3291 (description
3292 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
3293 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
3294 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
3295 ;; looks like the user can choose a license.
3296 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
3297
3298(define-public python-aws-sam-translator
3299 (package
3300 (name "python-aws-sam-translator")
3301 (version "1.107.0")
3302 (source
3303 (origin
3304 (method git-fetch) ; no tests in PyPI release
3305 (uri (git-reference
3306 (url "https://github.com/aws/serverless-application-model")
3307 (commit (string-append "v" version))))
3308 (file-name (git-file-name name version))
3309 (sha256
3310 (base32 "0bx9ha9k6zx6gl1hsgm6cpq4xrfn604v2g1d5dh2d5zq0463gwfq"))))
3311 (build-system pyproject-build-system)
3312 (arguments
3313 (list
3314 #:test-flags
3315 #~(list "--numprocesses" (number->string (parallel-job-count))
3316 "--ignore=tests/bin/test_public_interface.py"
3317 "tests")
3318 #:phases
3319 #~(modify-phases %standard-phases
3320 (add-before 'check 'pre-check
3321 (lambda _
3322 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
3323 (native-inputs
3324 (list python-pytest
3325 python-pytest-rerunfailures
3326 python-pytest-xdist
3327 python-parameterized
3328 python-pyyaml
3329 python-setuptools))
3330 (propagated-inputs
3331 (list python-boto3
3332 python-jsonschema
3333 python-pydantic
3334 python-typing-extensions))
3335 (home-page "https://github.com/aws/serverless-application-model")
3336 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
3337 (description
3338 "AWS SAM Translator is a library that transform @dfn{Serverless Application
3339Model} (SAM) templates into AWS CloudFormation templates.")
3340 (license license:asl2.0)))
3341
3342(define-public python-aws-xray-sdk
3343 (package
3344 (name "python-aws-xray-sdk")
3345 (version "2.14.0")
3346 (home-page "https://github.com/aws/aws-xray-sdk-python")
3347 (source (origin
3348 (method git-fetch)
3349 (uri (git-reference (url home-page) (commit version)))
3350 (file-name (git-file-name name version))
3351 (sha256
3352 (base32
3353 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
3354 (build-system pyproject-build-system)
3355 (arguments
3356 (list
3357 #:test-flags
3358 '(list ;; Tries to connect to external network resources
3359 "--ignore=tests/ext/aiohttp/test_client.py"
3360 "--ignore=tests/ext/httplib/test_httplib.py"
3361 "--ignore=tests/ext/httpx"
3362 "--ignore=tests/ext/requests/test_requests.py"
3363 ;; TODO: How to configure Django for these tests?
3364 "--ignore=tests/ext/django"
3365 ;; These tests require packages not yet in Guix.
3366 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
3367 "--ignore=tests/ext/aiohttp/test_middleware.py"
3368 "--ignore=tests/ext/pg8000/test_pg8000.py"
3369 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
3370 "--ignore=tests/ext/pymysql/test_pymysql.py"
3371 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
3372 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
3373 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
3374 "--ignore=tests/test_async_recorder.py"
3375 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
3376 "--ignore-glob=tests/ext/sqlalchemy*"
3377 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
3378 ;; FIXME: Why is this failing?
3379 "--ignore=tests/test_patcher.py"
3380 "--ignore=tests/test_lambda_context.py")
3381 #:phases
3382 '(modify-phases %standard-phases
3383 (add-before 'check 'pre-check
3384 (lambda _
3385 ;; Allow "import tests.utils" to work as expected.
3386 (setenv "PYTHONPATH" (getcwd)))))))
3387 (native-inputs
3388 (list ;; These are required for the test suite.
3389 python-aiohttp
3390 python-bottle
3391 python-flask
3392 python-flask-sqlalchemy
3393 python-httpx
3394 python-mock
3395 python-pymysql
3396 python-pytest
3397 python-pytest-asyncio-0.26
3398 python-pytest-benchmark
3399 python-setuptools
3400 python-sqlalchemy
3401 python-webtest))
3402 (propagated-inputs
3403 (list python-botocore
3404 python-jsonpickle
3405 python-requests
3406 python-wrapt))
3407 (synopsis "Profile applications on AWS X-Ray")
3408 (description
3409 "The AWS X-Ray SDK for Python enables Python developers to record and
3410emit information from within their applications to the AWS X-Ray service.")
3411 (license license:asl2.0)))
3412
3413(define-public python-publicsuffixlist
3414 (package
3415 (name "python-publicsuffixlist")
3416 (version "1.0.2.20250202")
3417 (source
3418 (origin
3419 (method url-fetch)
3420 (uri (pypi-uri "publicsuffixlist" version))
3421 (sha256
3422 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
3423 (build-system pyproject-build-system)
3424 (arguments (list #:test-backend #~'unittest))
3425 (native-inputs (list python-setuptools))
3426 (home-page "https://github.com/ko-zu/psl")
3427 (synopsis "Public suffix list for Python")
3428 (description
3429 "This package provides an implementation of
3430@url{https://publicsuffix.org/, Public Suffix List } as Python library.
3431
3432Features:
3433@itemize
3434@item supports IDN (unicode and punycoded)
3435@item shipped with built-in PSL and an updater script
3436@item written in Pure Python with no library dependencies
3437@end itemize")
3438 (license license:mpl2.0)))
3439
3440(define-public python-pycognito
3441 (package
3442 (name "python-pycognito")
3443 (version "2024.5.1")
3444 (source
3445 (origin
3446 (method url-fetch)
3447 (uri (pypi-uri "pycognito" version))
3448 (sha256
3449 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
3450 (build-system pyproject-build-system)
3451 (arguments
3452 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
3453 (list #:tests? #f))
3454 (native-inputs
3455 (list python-setuptools))
3456 (propagated-inputs
3457 (list python-boto3
3458 python-envs
3459 python-pyjwt
3460 python-requests))
3461 (home-page "https://github.com/pvizeli/pycognito")
3462 (synopsis "Python library for using AWS Cognito")
3463 (description
3464 "This package provides a Python class to integrate Boto3's Cognito
3465client so it is easy to login users, with @acronym{Secure Remote Password,
3466SRP} support.")
3467 (license license:asl2.0)))
3468
3469(define-public python-python3-saml
3470 (package
3471 (name "python-python3-saml")
3472 (version "1.16.0")
3473 (source
3474 (origin
3475 (method git-fetch)
3476 (uri (git-reference
3477 (url "https://github.com/SAML-Toolkits/python3-saml")
3478 (commit (string-append "v" version))))
3479 (file-name (git-file-name name version))
3480 (sha256
3481 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
3482 (build-system pyproject-build-system)
3483 (arguments
3484 (list
3485 ;; 214 tests pass, 50 fail; many fail because of required Internet
3486 ;; access or because of assumptions about the location of test files.
3487 #:tests? #false))
3488 (native-inputs
3489 (list python-freezegun
3490 python-poetry-core))
3491 (inputs
3492 (list xmlsec-openssl))
3493 (propagated-inputs
3494 (list python-isodate
3495 python-lxml
3496 python-xmlsec))
3497 (home-page "https://github.com/SAML-Toolkits/python3-saml")
3498 (synopsis "Saml Python toolkit")
3499 (description
3500 "The SAML Python Toolkit lets you add SAML support to your Python
3501software.")
3502 (license license:expat)))
3503
3504(define-public python-ovh
3505 (package
3506 (name "python-ovh")
3507 (version "1.1.0")
3508 (source (origin
3509 (method url-fetch)
3510 (uri (pypi-uri "ovh" version))
3511 (sha256
3512 (base32
3513 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
3514 (build-system pyproject-build-system)
3515 (arguments (list #:tests? #f)) ; XXX: tests require networking
3516 (propagated-inputs (list python-requests))
3517 (native-inputs (list python-setuptools))
3518 (home-page "https://api.ovh.com")
3519 (synopsis "Interact with OVHcloud APIs")
3520 (description "This package provides the official module to perform HTTP requests
3521to the OVHcloud APIs.")
3522 (license license:bsd-3)))
3523
3524(define-public python-cbor2
3525 (package
3526 (name "python-cbor2")
3527 (version "5.4.2.post1")
3528 (source
3529 (origin
3530 (method url-fetch)
3531 (uri (pypi-uri "cbor2" version))
3532 (sha256
3533 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
3534 (build-system pyproject-build-system)
3535 (native-inputs
3536 (list python-pytest python-setuptools python-setuptools-scm))
3537 (home-page "https://github.com/agronholm/cbor2")
3538 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
3539 (description "This Python library provides encoding and decoding for the
3540Concise Binary Object
3541Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
35428949}) serialization format. The specification is fully compatible with the
3543original RFC 7049. Among its features are:
3544@itemize
3545@item Simple API like the @code{json} or @code{pickle} modules.
3546@item Support many CBOR tags with stdlib objects.
3547@item Generic tag decoding.
3548@item Shared value references including cyclic references.
3549@item String references compact encoding with repeated strings replaced with
3550indices.
3551@item Optional C module backend tested on big- and little-endian architectures.
3552@item Extensible tagged value handling using tag_hook and object_hook on
3553decode and default on encode.
3554@end itemize")
3555 (license license:expat)))
3556
3557(define-public python-cfn-lint
3558 (package
3559 (name "python-cfn-lint")
3560 (version "1.38.1")
3561 (source
3562 (origin
3563 (method git-fetch)
3564 (uri (git-reference
3565 (url "https://github.com/aws-cloudformation/cfn-lint")
3566 (commit (string-append "v" version))))
3567 (file-name (git-file-name name version))
3568 (sha256
3569 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
3570 (build-system pyproject-build-system)
3571 (arguments
3572 (list
3573 ;; tests: 2136 passed, 11 deselected, 1 warning
3574 #:test-flags
3575 #~(list "--ignore=test/integration/"
3576 "-k" (string-join
3577 ;; Tests failing on doctest or comparing diff.
3578 (list "not test_build_graph"
3579 "test_good_template"
3580 "test_success_run"
3581 "test_update_docs"
3582 ;; ImportError: Missing optional dependencies sarif
3583 "test_sarif_formatter")
3584 " and not "))
3585 #:phases
3586 #~(modify-phases %standard-phases
3587 (add-after 'unpack 'remove-deprecated
3588 (lambda _
3589 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
3590 (("deprecated\": \"2025")
3591 "deprecated\": \"2125")))))))
3592 (native-inputs
3593 (list python-defusedxml
3594 python-pydot
3595 python-pytest
3596 python-setuptools))
3597 (propagated-inputs
3598 (list python-aws-sam-translator
3599 python-jsonpatch
3600 python-networkx
3601 python-pyyaml
3602 python-regex
3603 python-sympy
3604 python-typing-extensions
3605 ;; [optional]
3606 python-junit-xml))
3607 (home-page "https://github.com/aws-cloudformation/cfn-lint")
3608 (synopsis "Validate CloudFormation templates")
3609 (description
3610 "This package lets you validate CloudFormation YAML/JSON templates against
3611the CloudFormation spec and additional checks. Includes checking valid values
3612for resource properties and best practices.")
3613 (license license:expat)))
3614
3615(define-public python-pyzabbix
3616 (package
3617 (name "python-pyzabbix")
3618 (version "1.3.1")
3619 (source
3620 (origin
3621 (method git-fetch)
3622 (uri (git-reference
3623 (url "https://github.com/lukecyca/pyzabbix")
3624 (commit version)))
3625 (file-name (git-file-name name version))
3626 (sha256
3627 (base32 "1dbs3bz1mjlvlg46ikhg5j7agwni61ljlpiziknklv95yp29n86v"))))
3628 (build-system pyproject-build-system)
3629 (arguments
3630 (list #:test-flags #~(list "tests")))
3631 (native-inputs
3632 (list python-pytest
3633 python-requests-mock
3634 python-setuptools))
3635 (propagated-inputs
3636 (list python-packaging
3637 python-requests))
3638 (home-page "https://github.com/lukecyca/pyzabbix")
3639 (synopsis "Python interface to the Zabbix API")
3640 (description
3641 "@code{pyzabbix} is a Python module for working with the Zabbix API.")
3642 (license license:lgpl2.1+)))
3643
3644(define-public python-requests-cache
3645 (package
3646 (name "python-requests-cache")
3647 (version "1.2.1")
3648 (source
3649 (origin
3650 (method url-fetch)
3651 (uri (pypi-uri "requests_cache" version))
3652 (sha256
3653 (base32 "1l8i4l2pd26gbrlcdb5z056wvsqfr3vvbyqq2f8x1f65zn3ckav8"))))
3654 (build-system pyproject-build-system)
3655 (arguments
3656 (list
3657 #:test-flags
3658 #~(list "--numprocesses" (number->string (parallel-job-count))
3659 ;; These tests require access to external services, e.g. MongoDB
3660 ;; and Redis.
3661 "--ignore=tests/integration"
3662 ;; AttributeError: <class 'requests.adapters.HTTPAdapter'> does
3663 ;; not have the attribute 'get_connection_with_tls_context'
3664 "-k" "not test_mock_session")
3665 #:phases
3666 #~(modify-phases %standard-phases
3667 (add-before 'check 'pre-check
3668 (lambda _
3669 ;; PermissionError: [Errno 13] Permission denied:
3670 ;; '/homeless-shelter'
3671 (setenv "HOME" "/tmp"))))))
3672 (native-inputs
3673 (list python-poetry-core
3674 python-pytest
3675 python-pytest-rerunfailures
3676 python-pytest-xdist
3677 python-requests-mock
3678 python-responses
3679 python-rich
3680 python-tenacity
3681 python-time-machine
3682 python-timeout-decorator))
3683 (propagated-inputs
3684 (list python-attrs
3685 python-boto3
3686 python-bson
3687 python-cattrs
3688 python-itsdangerous
3689 python-orjson
3690 python-platformdirs
3691 python-pymongo
3692 python-pyyaml
3693 python-redis
3694 python-requests
3695 python-ujson
3696 python-url-normalize
3697 python-urllib3))
3698 (home-page "https://github.com/requests-cache/requests-cache")
3699 (synopsis "Persistent HTTP cache for Python requests")
3700 (description
3701 "This package provides a drop-in replacement for @code{requests.Session}
3702with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
3703responses as planin JSON/YAML file or save responses as plain JSON/YAML
3704files.")
3705 (license license:bsd-2)))
3706
3707(define-public python-requests-futures
3708 (package
3709 (name "python-requests-futures")
3710 (version "1.0.2")
3711 (source
3712 (origin
3713 (method url-fetch)
3714 (uri (pypi-uri "requests_futures" version))
3715 (sha256
3716 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
3717 (build-system pyproject-build-system)
3718 (native-inputs
3719 (list python-greenlet
3720 python-pytest
3721 python-pytest-httpbin
3722 python-setuptools
3723 python-werkzeug))
3724 (propagated-inputs (list python-requests))
3725 (home-page "https://github.com/ross/requests-futures")
3726 (synopsis "Asynchronous Python HTTP for Humans")
3727 (description
3728 "This package provides and add-on the Python Requests HTTP library to run
3729code asynchronously.")
3730 (license license:asl2.0)))
3731
3732(define-public python-requests-unixsocket
3733 (package
3734 (name "python-requests-unixsocket")
3735 (version "0.4.1")
3736 (source
3737 (origin
3738 (method git-fetch)
3739 (uri (git-reference
3740 (url "https://github.com/msabramo/requests-unixsocket")
3741 (commit (string-append "v" version))))
3742 (file-name (git-file-name name version))
3743 (sha256
3744 (base32 "1f0pi31xqzm3cdag4s4gpdj36x169jwc8ibqvcwqz6h9c0pklf3n"))))
3745 (build-system pyproject-build-system)
3746 (native-inputs
3747 (list python-pytest
3748 python-setuptools
3749 python-setuptools-scm
3750 python-waitress))
3751 (propagated-inputs
3752 (list python-requests))
3753 (home-page "https://github.com/msabramo/requests-unixsocket")
3754 (synopsis "Use requests to talk HTTP via a UNIX domain socket")
3755 (description
3756 "This package provides an extension to @code{requests} which let it talk
3757HTTP via a UNIX domain socket.")
3758 (license license:asl2.0)))
3759
3760(define-public python-s3path
3761 (package
3762 (name "python-s3path")
3763 (version "0.6.4")
3764 (source
3765 (origin
3766 (method url-fetch)
3767 (uri (pypi-uri "s3path" version))
3768 (sha256
3769 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
3770 (build-system pyproject-build-system)
3771 (arguments
3772 (list
3773 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
3774 #:tests? #f))
3775 (native-inputs
3776 (list python-setuptools
3777 python-wheel))
3778 (propagated-inputs
3779 (list python-boto3
3780 python-smart-open))
3781 (home-page "https://github.com/liormizr/s3path")
3782 (synopsis "Pathlib extension for AWS S3 Service")
3783 (description
3784 "S3Path provide a Python convenient File-System/Path like interface for
3785AWS S3 Service using boto3 S3 resource as a driver.")
3786 (license license:asl2.0)))
3787
3788(define-public python-falcon
3789 (package
3790 (name "python-falcon")
3791 (version "4.0.2")
3792 (source
3793 (origin
3794 ;; Use git, as there are some test files missing from the PyPI release,
3795 ;; such as 'examples' directory.
3796 (method git-fetch)
3797 (uri (git-reference
3798 (url "https://github.com/falconry/falcon")
3799 (commit version)))
3800 (file-name (git-file-name name version))
3801 (sha256
3802 (base32
3803 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
3804 (build-system pyproject-build-system)
3805 (arguments
3806 (list
3807 #:test-flags
3808 '(list "-k" "not slow"
3809 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
3810 #:phases
3811 '(modify-phases %standard-phases
3812 (add-before 'check 'pre-check
3813 (lambda _
3814 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
3815 (setenv "FALCON_TESTING_SESSION" "Y")
3816 (setenv "PYTHONASYNCIODEBUG" "1")
3817 (setenv "HOME" "/tmp"))))))
3818 (propagated-inputs
3819 (list python-mimeparse))
3820 (native-inputs
3821 (list python-aiofiles
3822 python-cbor2
3823 python-cython ;for faster binaries
3824 python-fakeredis
3825 python-httpx
3826 python-mujson
3827 python-msgpack
3828 python-orjson
3829 python-pecan
3830 python-pillow
3831 python-pytest
3832 python-pytest-asyncio
3833 python-pyyaml
3834 python-rapidjson
3835 python-requests
3836 python-setuptools
3837 python-testtools
3838 python-ujson
3839 python-websockets
3840 python-wheel))
3841 (home-page "https://falconframework.org")
3842 (synopsis "Web framework for building APIs and application backends")
3843 (description "Falcon is a web API framework for building microservices,
3844application backends and higher-level frameworks. Among its features are:
3845@itemize
3846@item Optimized and extensible code base
3847@item Routing via URI templates and REST-inspired resource
3848classes
3849@item Access to headers and bodies through request and response
3850classes
3851@item Request processing via middleware components and hooks
3852@item Idiomatic HTTP error responses
3853@item Straightforward exception handling
3854@item Unit testing support through WSGI helpers and mocks
3855@item Compatible with both CPython and PyPy
3856@item Cython support for better performance when used with CPython
3857@end itemize")
3858 (license license:asl2.0)))
3859
3860(define-public python-falcon-cors
3861 (package
3862 (name "python-falcon-cors")
3863 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
3864 (revision . "0")))
3865 (version (git-version "1.1.7"
3866 (assoc-ref properties 'revision)
3867 (assoc-ref properties 'commit)))
3868 (source
3869 (origin
3870 (method git-fetch)
3871 (uri (git-reference
3872 (url "https://github.com/lwcolton/falcon-cors")
3873 (commit (assoc-ref properties 'commit))))
3874 (file-name (git-file-name name version))
3875 (sha256
3876 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
3877 (build-system pyproject-build-system)
3878 (arguments
3879 (list
3880 ;; XXX: The last commit's tests are incompatible with the more recent
3881 ;; version of python-falcon.
3882 #:tests? #f))
3883 (native-inputs
3884 (list python-falcon python-mock python-pynose python-setuptools))
3885 (home-page "https://github.com/lwcolton/falcon-cors")
3886 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
3887 (description
3888 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
3889support for Falcon. It allows applying a specially crafted CORS object to the
3890incoming requests, enabling the ability to serve resources over a different
3891origin than that of the web application.")
3892 (license license:asl2.0)))
3893
3894(define-public python-furl
3895 (package
3896 (name "python-furl")
3897 (version "2.1.4")
3898 (source
3899 (origin
3900 (method url-fetch)
3901 (uri (pypi-uri "furl" version))
3902 (sha256
3903 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
3904 (build-system pyproject-build-system)
3905 (arguments
3906 (list #:test-flags
3907 #~(list "-k" (string-append "not test_hosts"
3908 " and not test_netloc"
3909 " and not test_odd_urls"))))
3910 (propagated-inputs
3911 (list python-orderedmultidict python-six))
3912 (native-inputs
3913 (list python-pytest python-setuptools python-wheel))
3914 (home-page "https://github.com/gruns/furl")
3915 (synopsis "URL manipulation in Python")
3916 (description "Furl provides an easy-to-use alternative to the
3917@code{urllib} and @code{urlparse} modules for manipulating URLs.")
3918 (license license:unlicense)))
3919
3920(define-public python-httplib2
3921 (package
3922 (name "python-httplib2")
3923 (version "0.31.2")
3924 (source
3925 (origin
3926 (method git-fetch)
3927 (uri (git-reference
3928 (url "https://github.com/httplib2/httplib2")
3929 (commit (string-append "v" version))))
3930 (file-name (git-file-name name version))
3931 (sha256
3932 (base32
3933 "0wdnf4rhw9ar8b15lzvif11ibnnpqkfif3alkhkfywy3ikk8nrxb"))))
3934 (build-system pyproject-build-system)
3935 (arguments
3936 (list
3937 #:phases
3938 #~(modify-phases %standard-phases
3939 (add-after 'unpack 'adjust-test-requirements
3940 (lambda _
3941 (substitute* "requirements-test.txt"
3942 (("==") ">=")))))))
3943 (propagated-inputs
3944 (list python-pyparsing
3945 python-pysocks))
3946 (native-inputs
3947 (list python-cryptography
3948 python-mock
3949 python-pytest
3950 python-pytest-randomly
3951 python-pytest-timeout
3952 python-setuptools))
3953 (home-page "https://github.com/httplib2/httplib2")
3954 (synopsis "Comprehensive HTTP client library")
3955 (description
3956 "A comprehensive HTTP client library supporting many features left out of
3957other HTTP libraries.")
3958 (license license:expat)))
3959
3960(define-public python-cheroot
3961 (package
3962 (name "python-cheroot")
3963 (version "11.1.2")
3964 (source
3965 (origin
3966 (method git-fetch)
3967 (uri (git-reference
3968 (url "https://github.com/cherrypy/cheroot")
3969 (commit (string-append "v" version))))
3970 (file-name (git-file-name name version))
3971 (sha256
3972 (base32 "02rhci01m5fcn8mqpvq3c35rs4n28gxlfvfw2if2f85rgwrji8y8"))))
3973 (build-system pyproject-build-system)
3974 (arguments
3975 (list
3976 #:phases
3977 #~(modify-phases %standard-phases
3978 (add-after 'unpack 'fix-pytest-config
3979 (lambda _
3980 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
3981 (delete-file "pytest.ini"))))))
3982 (native-inputs
3983 (list python-portend
3984 python-pyopenssl
3985 python-pypytools
3986 python-pytest
3987 python-pytest-mock
3988 python-requests
3989 python-requests-toolbelt
3990 python-requests-unixsocket2
3991 python-setuptools
3992 python-setuptools-scm
3993 python-trustme))
3994 (propagated-inputs
3995 (list python-jaraco-functools
3996 python-more-itertools))
3997 (home-page "https://cheroot.cherrypy.dev")
3998 (synopsis "Highly-optimized, pure-python HTTP server")
3999 (description
4000 "Cheroot is a high-performance, pure-Python HTTP server.")
4001 (license license:bsd-3)))
4002
4003(define-public python-cherrypy
4004 (package
4005 (name "python-cherrypy")
4006 (properties '((commit . "1f75bc9eed8e0e385f64f368bd69f58d96fb8c2b")
4007 (revision . "0")))
4008 (version (git-version "18.10.0"
4009 (assoc-ref properties 'revision)
4010 (assoc-ref properties 'commit)))
4011 (source
4012 (origin
4013 (method git-fetch)
4014 (uri (git-reference
4015 (url "https://github.com/cherrypy/cherrypy")
4016 (commit (assoc-ref properties 'commit))))
4017 (file-name (git-file-name name version))
4018 (sha256
4019 (base32 "1l01a4sbfm42s5xp6ngphgqf0yb65ksqbsb27kznvybblyaxfa9p"))))
4020 (build-system pyproject-build-system)
4021 (arguments
4022 (list
4023 #:test-flags
4024 #~(map
4025 (lambda (test)
4026 (string-append "--deselect=cherrypy/test/" test))
4027 (list
4028 ;; Requires bumping python-flaky.
4029 "test_bus.py::test_wait_publishes_periodically"
4030 "test_bus.py::test_block"
4031 "test_bus.py::test_start_with_callback"
4032 "test_refleaks.py::ReferenceTests::test_threadlocal_garbage"
4033 "test_session.py::SessionTest::test_0_Session"
4034 "test_session.py::SessionTest::test_2_File_Concurrency"
4035 ;; assert b'RamSession' == b'FileSession' or FileNotFoundError
4036 "test_session.py::SessionTest::test_3_Redirect"
4037 "test_session.py::SessionTest::test_4_File_deletion"))
4038 #:phases
4039 #~(modify-phases %standard-phases
4040 (add-after 'unpack 'fix-pytest-config
4041 (lambda _
4042 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
4043 (delete-file "pytest.ini")))
4044 (add-after 'unpack 'patch-pyproject
4045 (lambda _
4046 (substitute* "pyproject.toml"
4047 (("\"cherrypy.scaffold\",")
4048 (string-join
4049 (list "\"cherrypy.scaffold\""
4050 "\"cherrypy._private_api\""
4051 "\"cherrypy._private_api.compat\",")
4052 ",\n "))))))))
4053 (propagated-inputs
4054 (list python-cheroot
4055 python-filelock
4056 python-jaraco-collections
4057 python-more-itertools
4058 python-portend
4059 python-zc-lockfile))
4060 (native-inputs
4061 (list python-flaky
4062 python-objgraph
4063 python-path
4064 python-pytest
4065 python-pytest-forked
4066 python-pytest-services
4067 python-pytest-sugar
4068 python-requests-toolbelt
4069 python-setuptools
4070 python-setuptools-scm))
4071 (home-page "https://www.cherrypy.dev")
4072 (synopsis "Object-Oriented HTTP framework")
4073 (description
4074 "CherryPy is a pythonic, object-oriented web framework. It helps in
4075building web applications in the same way any other object-oriented Python
4076program would be built.")
4077 (license license:bsd-3)))
4078
4079(define-public python-parfive
4080 (package
4081 (name "python-parfive")
4082 (version "2.3.1")
4083 (source
4084 (origin
4085 (method git-fetch)
4086 (uri (git-reference
4087 (url "https://github.com/Cadair/parfive")
4088 (commit (string-append "v" version))))
4089 (file-name (git-file-name name version))
4090 (sha256
4091 (base32 "09kkh7kp9qy8m26zk6p7zc84yrc81pjgsi594kaa1v1n83mprl4b"))))
4092 (build-system pyproject-build-system)
4093 (arguments
4094 (list
4095 #:test-flags
4096 ;; Disable tests requiring network access.
4097 #~(list "-k" (string-join
4098 (list "not test_ftp"
4099 "test_ftp_http"
4100 "test_ftp_pasv_command"
4101 "test_problematic_http_urls")
4102 " and not "))))
4103 (native-inputs
4104 (list python-aiofiles
4105 python-pytest
4106 python-pytest-asyncio
4107 python-pytest-localserver
4108 python-pytest-socket
4109 python-setuptools
4110 python-setuptools-scm))
4111 (propagated-inputs
4112 (list python-aiohttp
4113 python-tqdm
4114 ;; [optional]
4115 python-aioftp))
4116 (home-page "https://parfive.readthedocs.io/")
4117 (synopsis "HTTP and FTP parallel file downloader")
4118 (description
4119 "This package provides CLI tool and Python library @code{parallel} file
4120downloader using asyncio. parfive can handle downloading multiple files in
4121parallel as well as downloading each file in a number of chunks.
4122
4123asciicast demo of parfive parfive works by creating a downloader object,
4124appending files to it and then running the download. parfive has a synchronous
4125API, but uses asyncio to parallelise downloading the files.")
4126 (license license:expat)))
4127
4128(define-public python-html2text
4129 (package
4130 (name "python-html2text")
4131 (version "2020.1.16")
4132 (source
4133 (origin
4134 (method url-fetch)
4135 (uri (pypi-uri "html2text" version))
4136 (sha256
4137 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
4138 (build-system pyproject-build-system)
4139 (native-inputs (list python-pytest python-setuptools python-wheel))
4140 (home-page "https://github.com/Alir3z4/html2text")
4141 (synopsis "Convert HTML into plain text")
4142 (description
4143 "html2text takes HTML and converts it into plain ASCII text
4144which is also valid markdown. html2text was originally written by Aaron
4145Swartz.")
4146 (license license:gpl3+)))
4147
4148(define-public python-jose
4149 (package
4150 (name "python-jose")
4151 (version "3.5.0")
4152 (home-page "https://github.com/mpdavis/python-jose")
4153 (source (origin
4154 (method git-fetch)
4155 (uri (git-reference (url home-page) (commit version)))
4156 (file-name (git-file-name name version))
4157 (sha256
4158 (base32
4159 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
4160 (build-system pyproject-build-system)
4161 (native-inputs
4162 (list python-pyasn1 python-pytest python-setuptools))
4163 (propagated-inputs
4164 (list python-cryptography python-ecdsa python-rsa))
4165 (synopsis "JOSE implementation in Python")
4166 (description
4167 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
4168- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
4169JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
4170content using a variety of algorithms.")
4171 (license license:expat)))
4172
4173(define-public python-joserfc
4174 (package
4175 (name "python-joserfc")
4176 (version "1.0.1")
4177 (source
4178 (origin
4179 (method url-fetch)
4180 (uri (pypi-uri "joserfc" version))
4181 (sha256
4182 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
4183 (build-system pyproject-build-system)
4184 (arguments
4185 (list
4186 #:test-flags
4187 ;; No module named 'Crypto'
4188 '(list "--ignore=tests/jwe/test_chacha20.py"
4189 ;; Deprecation warnings are not raised.
4190 "-k" (string-append "not test_guess_bytes_key"
4191 " and not test_guess_callable_key"
4192 " and not test_guess_str_key"))))
4193 (propagated-inputs (list python-cryptography))
4194 (native-inputs (list python-pytest python-setuptools python-wheel))
4195 (home-page "https://github.com/authlib/joserfc")
4196 (synopsis "Python library for JOSE RFCs")
4197 (description
4198 "This package provides a Python library for JOSE RFCs, including JWS,
4199JWE, JWK, JWA, and JWT.")
4200 (license license:bsd-3)))
4201
4202(define-public python-jwcrypto
4203 (package
4204 (name "python-jwcrypto")
4205 (version "1.5.6")
4206 (source
4207 (origin
4208 (method url-fetch)
4209 (uri (pypi-uri "jwcrypto" version))
4210 (sha256
4211 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
4212 (build-system pyproject-build-system)
4213 (native-inputs
4214 (list python-pytest
4215 python-setuptools))
4216 (propagated-inputs
4217 (list python-cryptography
4218 python-typing-extensions))
4219 (home-page "https://github.com/latchset/jwcrypto")
4220 (synopsis "Implementation of JOSE Web standards")
4221 (description
4222 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
4223Encryption} (JOSE) Web Standards.")
4224 (license license:lgpl3+)))
4225
4226(define-public python-pypitoken
4227 (package
4228 (name "python-pypitoken")
4229 (version "7.0.1")
4230 (source
4231 (origin
4232 (method url-fetch)
4233 (uri (pypi-uri "pypitoken" version))
4234 (sha256
4235 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
4236 (build-system pyproject-build-system)
4237 ;; There are no tests.
4238 (arguments (list #:tests? #false))
4239 (propagated-inputs (list python-jsonschema python-pymacaroons
4240 python-typing-extensions))
4241 (native-inputs (list python-poetry-core))
4242 (home-page "https://pypitoken.readthedocs.io/en/latest/")
4243 (synopsis "Manipulate PyPI API tokens")
4244 (description "This package lets you manipulate PyPI API tokens.")
4245 (license license:expat)))
4246
4247(define-public python-pyscss
4248 ;; XXX: no fresh release supporting Python 3.11, use the latest commit, see
4249 ;; <https://github.com/Kronuz/pyScss/issues/428>,
4250 ;; <https://github.com/Kronuz/pyScss/issues/431>.
4251 (let ((commit "73559d047706ccd4593cf6aa092de71f35164723")
4252 (revision "0"))
4253 (package
4254 (name "python-pyscss")
4255 (version (git-version "1.4.0" revision commit))
4256 (source
4257 (origin
4258 (method git-fetch) ; no tests in PyPI release
4259 (uri (git-reference
4260 (url "https://github.com/Kronuz/pyScss")
4261 (commit commit)))
4262 (file-name (git-file-name name version))
4263 (sha256
4264 (base32 "00msypxf5dm57gyfp3jxvjinigi4km84v33w83635pms9li2k3y7"))))
4265 (build-system pyproject-build-system)
4266 (native-inputs
4267 (list python-pytest-8
4268 python-setuptools))
4269 (inputs
4270 (list pcre))
4271 (propagated-inputs
4272 (list python-six)) ;hard dependency in scss/compiler.py
4273 (home-page "https://github.com/Kronuz/pyScss")
4274 (synopsis "Scss compiler for Python")
4275 (description
4276 "@code{pyScss} is a compiler for Sass, a superset language of
4277CSS3 that adds programming capabilities and some other syntactic sugar.")
4278 (license license:expat))))
4279
4280(define-public python-jsonpickle
4281 (package
4282 (name "python-jsonpickle")
4283 (version "4.0.0")
4284 (source (origin
4285 (method url-fetch)
4286 (uri (pypi-uri "jsonpickle" version))
4287 (sha256
4288 (base32
4289 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
4290 (build-system pyproject-build-system)
4291 (arguments
4292 (list
4293 #:test-flags '(list "tests")
4294 #:phases
4295 '(modify-phases %standard-phases
4296 (add-before 'check 'pre-check
4297 (lambda* (#:key inputs #:allow-other-keys)
4298 (setenv "TZ" "UTC")
4299 (setenv "TZDIR"
4300 (search-input-directory inputs "share/zoneinfo")))))))
4301 (native-inputs
4302 (list python-bson
4303 python-ecdsa
4304 python-feedparser
4305 python-pymongo
4306 python-pytest
4307 python-pytest-benchmark
4308 python-pytest-enabler
4309 python-setuptools
4310 python-setuptools-scm
4311 python-simplejson
4312 python-sqlalchemy
4313 python-ujson
4314 python-wheel
4315 tzdata-for-tests))
4316 (home-page "https://jsonpickle.github.io/")
4317 (synopsis "Serialize object graphs into JSON")
4318 (description
4319 "This package provides a Python library for serializing any arbitrary
4320object graph to and from JSON.")
4321 (license license:bsd-3)))
4322
4323(define-public python-mcp
4324 (package
4325 (name "python-mcp")
4326 (version "1.25.0")
4327 (source
4328 (origin
4329 (method url-fetch)
4330 (uri (pypi-uri "mcp" version))
4331 (sha256
4332 (base32 "00k87bl4jvnh7hrmicwb2m715fwccvvlanwf8cnlwdphxdhh6can"))))
4333 (build-system pyproject-build-system)
4334 (arguments
4335 (list
4336 ;; XXX: 186 failed, 648 passed, 94 skipped, 54 errors
4337 ;; A lot of tests fail for unclear reasons.
4338 #:tests? #f))
4339 (propagated-inputs (list python-httpx python-pydantic))
4340 (native-inputs
4341 (list python-hatchling
4342 python-httpx-sse
4343 python-jsonschema
4344 python-pydantic-settings
4345 python-pytest
4346 python-pytest-examples
4347 python-pytest-xdist
4348 python-sse-starlette
4349 python-starlette
4350 python-typer
4351 python-typing-inspection
4352 python-uvicorn))
4353 (home-page "https://modelcontextprotocol.io")
4354 (synopsis "Model Context Protocol SDK")
4355 (description
4356 "This package provides a Python Software Development Kit for the Model
4357Context Protocol (MCP).")
4358 (license license:expat)))
4359
4360(define-public python-mechanicalsoup
4361 (package
4362 (name "python-mechanicalsoup")
4363 (version "1.4.0")
4364 (source
4365 (origin
4366 (method url-fetch)
4367 (uri (pypi-uri "mechanicalsoup" version))
4368 (sha256
4369 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
4370 (build-system pyproject-build-system)
4371 (arguments
4372 (list
4373 #:test-flags
4374 ;; Unclear why test fails.
4375 #~(list "-k" "not test_select_form_associated_elements")
4376 ;; The following dependencies are not directly required, the developer
4377 ;; only pinned versions because of vulnerabilities. They also break
4378 ;; sanity-check because it checks for a python-certifi version which is
4379 ;; more recent than the one available in Guix.
4380 #:phases #~(modify-phases %standard-phases
4381 (add-after 'unpack 'relax-dependencies
4382 (lambda _
4383 (substitute* "requirements.txt"
4384 (("certifi.*") "")
4385 (("urllib3.*") "")))))))
4386 (propagated-inputs
4387 (list python-beautifulsoup4 python-lxml python-requests))
4388 (native-inputs
4389 (list python-pytest
4390 python-pytest-flake8
4391 python-pytest-httpbin
4392 python-pytest-mock
4393 python-requests-mock
4394 python-setuptools
4395 python-wheel))
4396 (home-page "https://mechanicalsoup.readthedocs.io/")
4397 (synopsis "Python library for automating website interaction")
4398 (description
4399 "MechanicalSoup is a Python library for automating interaction with
4400websites. It automatically stores and sends cookies, follows redirects, and can
4401follow links and submit forms. It doesn’t do JavaScript.")
4402 (license license:expat)))
4403
4404(define-public python-hypercorn
4405 (package
4406 (name "python-hypercorn")
4407 (version "0.18.0")
4408 (source
4409 (origin
4410 (method git-fetch)
4411 (uri (git-reference
4412 (url "https://github.com/pgjones/hypercorn")
4413 (commit version)))
4414 (file-name (git-file-name name version))
4415 (sha256
4416 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
4417 (build-system pyproject-build-system)
4418 (propagated-inputs
4419 (list python-aioquic
4420 python-h11
4421 python-h2
4422 python-priority
4423 python-pydata-sphinx-theme
4424 python-sphinxcontrib-mermaid
4425 python-tomli
4426 python-trio
4427 python-typing-extensions
4428 python-uvloop
4429 python-wsproto))
4430 (native-inputs
4431 (list nss-certs-for-test
4432 python-httpx
4433 python-pdm-backend
4434 python-pytest
4435 python-pytest-asyncio
4436 python-pytest-cov
4437 python-pytest-trio))
4438 (home-page "https://github.com/pgjones/hypercorn")
4439 (synopsis "ASGI Server based on Hyper libraries")
4440 (description
4441 "This package provides an ASGI (Asynchronous Server Gateway Interface)
4442Server based on Hyper libraries and inspired by @code{python-gunicorn}.")
4443 (license license:expat)))
4444
4445(define-public python-hyperframe
4446 (package
4447 (name "python-hyperframe")
4448 (version "6.1.0")
4449 (source
4450 (origin
4451 (method url-fetch)
4452 (uri (pypi-uri "hyperframe" version))
4453 (sha256
4454 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
4455 (build-system pyproject-build-system)
4456 (native-inputs
4457 (list python-pytest python-setuptools))
4458 (home-page "https://github.com/python-hyper/hyperframe")
4459 (synopsis "HTTP/2 framing layer for Python")
4460 (description
4461 "This library contains the HTTP/2 framing code used in the hyper project.
4462It provides a pure-Python codebase that is capable of decoding a binary stream
4463into HTTP/2 frames.")
4464 (license license:expat)))
4465
4466(define-public python-hpack
4467 (package
4468 (name "python-hpack")
4469 (version "4.1.0")
4470 (source
4471 (origin
4472 ;; PyPI tarball is missing some files necessary for the tests.
4473 (method git-fetch)
4474 (uri (git-reference
4475 (url "https://github.com/python-hyper/hpack")
4476 (commit (string-append "v" version))))
4477 (file-name (git-file-name name version))
4478 (sha256
4479 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
4480 (build-system pyproject-build-system)
4481 (native-inputs
4482 (list python-pytest python-setuptools))
4483 (home-page "https://hyper.rtfd.org")
4484 (synopsis "Pure-Python HPACK header compression")
4485 (description
4486 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
4487for use in Python programs that implement HTTP/2.")
4488 (license license:expat)))
4489
4490(define-public python-h11
4491 (package
4492 (name "python-h11")
4493 (version "0.16.0")
4494 (source
4495 (origin
4496 (method url-fetch)
4497 (uri (pypi-uri "h11" version))
4498 (sha256
4499 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
4500 (build-system pyproject-build-system)
4501 (native-inputs
4502 (list python-pytest python-setuptools))
4503 (home-page "https://github.com/python-hyper/h11")
4504 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
4505 (description
4506 "This is a little HTTP/1.1 library written from scratch in Python, heavily
4507inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
4508code whatsoever. This means you can hook h11 up to your favorite network API,
4509and that could be anything you want.")
4510 (license license:expat)))
4511
4512(define-public python-h2
4513 (package
4514 (name "python-h2")
4515 (version "4.1.0")
4516 (source
4517 (origin
4518 (method url-fetch)
4519 (uri (pypi-uri "h2" version))
4520 (sha256
4521 (base32 "1fraip114fm1ha5w37pdc0sk8dn9pb0ck267zrwwpap7zc4clfm8"))))
4522 (build-system pyproject-build-system)
4523 (arguments
4524 (list
4525 ;; AssertionError: assert '<RemoteSettingsChanged
4526 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
4527 ;; new_value=32768)}>' == '<RemoteSettingsChanged
4528 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
4529 ;; original_value=65536, new_value=32768)}>'
4530 #:test-flags
4531 #~(list "-k"
4532 (string-join
4533 (list "not test_remotesettingschanged_repr"
4534 ;; This test exceededs the Hypothesis deadline.
4535 #$@(if (target-riscv64?)
4536 #~("test_changing_max_frame_size")
4537 #~())
4538 "test_streamreset_repr"
4539 "test_settingsacknowledged_repr"
4540 "test_connectionterminated_repr[None-None]"
4541 "test_connectionterminated_repr[some"
4542 "test_remotesettingschanged_repr"
4543 "test_streamreset_repr"
4544 "test_settingsacknowledged_repr"
4545 "test_connectionterminated_repr[None-None]"
4546 "test_connectionterminated_repr[some")
4547 " and not "))))
4548 (native-inputs
4549 (list python-pytest
4550 python-setuptools
4551 python-wheel))
4552 (propagated-inputs
4553 (list python-hpack
4554 python-hyperframe))
4555 (home-page "https://github.com/python-hyper/h2")
4556 (synopsis "HTTP/2 State-Machine based protocol implementation")
4557 (description
4558 "This module contains a pure-Python implementation of a HTTP/2 protocol
4559stack. It does not provide a parsing layer, a network layer, or any rules
4560about concurrency. Instead, it's a purely in-memory solution, defined in
4561terms of data actions and HTTP/2 frames. This is one building block of a full
4562Python HTTP implementation.")
4563 (license license:expat)))
4564
4565(define-public python-slixmpp
4566 (package
4567 (name "python-slixmpp")
4568 (version "1.8.6") ; XXX: The latest version which does not require Rust
4569 (source
4570 (origin
4571 (method git-fetch)
4572 (uri (git-reference
4573 (url "https://codeberg.org/poezio/slixmpp")
4574 (commit (string-append "slix-" version))))
4575 (file-name (git-file-name name version))
4576 (sha256
4577 (base32 "0gpy6arwyk4lsx1hbcwbllxs6qbwn58adkp1rm1cfvfrjdv5kxx7"))))
4578 (build-system pyproject-build-system)
4579 (arguments
4580 (list
4581 #:phases
4582 #~(modify-phases %standard-phases
4583 (add-after 'unpack 'patch-setup.py
4584 (lambda _
4585 (substitute* "setup.py"
4586 (("'CC', 'cc'")
4587 "'CC', 'gcc'")))))))
4588 (native-inputs
4589 (list gnupg
4590 pkg-config
4591 python-cython
4592 python-setuptools
4593 python-wheel))
4594 (inputs
4595 (list libidn
4596 python)) ; We are building a Python extension.
4597 (propagated-inputs
4598 (list python-aiodns
4599 python-aiohttp
4600 python-cryptography
4601 python-defusedxml
4602 python-emoji
4603 python-pyasn1
4604 python-pyasn1-modules))
4605 (home-page "https://lab.louiz.org/poezio/slixmpp")
4606 (synopsis "XMPP library without threads")
4607 (description
4608 "Slixmpp is a XMPP library for Python 3.7+. It is a fork of SleekXMPP.
4609Its goal is to only rewrite the core of the library (the low level socket
4610handling, the timers, the events dispatching) in order to remove all
4611threads.")
4612 (license license:expat)))
4613
4614(define-public python-sockjs-tornado
4615 (package
4616 (name "python-sockjs-tornado")
4617 (version "1.0.6")
4618 (source
4619 (origin
4620 (method git-fetch)
4621 (uri (git-reference
4622 (url "https://github.com/mrjoes/sockjs-tornado/")
4623 (commit (string-append "v" version))))
4624 (file-name (git-file-name name version))
4625 (sha256
4626 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
4627 (build-system pyproject-build-system)
4628 (arguments
4629 (list
4630 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
4631 (native-inputs (list python-setuptools))
4632 (propagated-inputs (list python-tornado))
4633 (home-page "https://github.com/mrjoes/sockjs-tornado/")
4634 (synopsis
4635 "SockJS Python server implementation on top of the Tornado framework")
4636 (description
4637 "SockJS-tornado provides the server-side counterpart to a SockJS client
4638library, through the Tornado framework.
4639
4640SockJS provides a low-latency, full-duplex, cross-domain communication channel
4641between a web browser and web server.")
4642 (license license:expat)))
4643
4644(define-public python-flask-assets
4645 ;; The latest release still depends on the abandoned flask-script, whereas
4646 ;; at this later commit (already 2 years old at the time of this writing)
4647 ;; the dependency has been lifted.
4648 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
4649 (revision "1"))
4650 (package
4651 (name "python-flask-assets")
4652 (version (git-version "2.1.0" revision commit))
4653 (source
4654 (origin
4655 (method git-fetch)
4656 (uri (git-reference
4657 (url "https://github.com/miracle2k/flask-assets/")
4658 (commit commit)))
4659 (file-name (git-file-name name version))
4660 (sha256
4661 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
4662 (build-system pyproject-build-system)
4663 (propagated-inputs
4664 (list python-flask python-webassets))
4665 (native-inputs
4666 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
4667 (home-page "https://github.com/miracle2k/flask-assets")
4668 (synopsis "Asset management for Flask")
4669 (description "This package integrates @code{webassets} with Flask, adding
4670support for merging, minifying and compiling CSS and Javascript files.")
4671 (license license:bsd-2))))
4672
4673(define-public python-flask-babel
4674 (package
4675 (name "python-flask-babel")
4676 (version "4.0.0")
4677 (source
4678 (origin
4679 (method git-fetch) ;no tests in pypi release
4680 (uri (git-reference
4681 (url "https://github.com/python-babel/flask-babel")
4682 (commit (string-append "v" version))))
4683 (sha256
4684 (base32
4685 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
4686 (build-system pyproject-build-system)
4687 (native-inputs
4688 (list python-poetry-core
4689 python-pytest
4690 python-pytest-mock))
4691 (propagated-inputs
4692 (list python-babel
4693 python-flask
4694 python-jinja2
4695 python-pytz))
4696 (home-page "https://github.com/python-babel/flask-babel")
4697 (synopsis "Add i18n/l10n support to Flask applications")
4698 (description "This package implements internationalization and localization
4699support for Flask. This is based on the Python babel module as well as pytz -
4700both of which are installed automatically if you install this library.")
4701 (license license:bsd-3)))
4702
4703(define-public python-flask-cors
4704 (package
4705 (name "python-flask-cors")
4706 (version "6.0.2")
4707 (source
4708 (origin
4709 (method git-fetch) ;no tests in PyPI archive
4710 (uri (git-reference
4711 (url "https://github.com/CoryDolphin/flask-cors")
4712 (commit version)))
4713 (file-name (git-file-name name version))
4714 (sha256
4715 (base32 "02y740h951dscgkm7ghsss1bc0m8ymsfdpsimm1j0nkl0zjl6sgm"))))
4716 (build-system pyproject-build-system)
4717 (arguments
4718 (list
4719 #:phases
4720 #~(modify-phases %standard-phases
4721 (add-after 'unpack 'fix-version
4722 (lambda _
4723 ;; Otherwise sanity-check of dependents will fail.
4724 (substitute* "pyproject.toml"
4725 (("version = \"0\\.0\\.1\"" all)
4726 (string-append "version = \"" #$version "\""))))))))
4727 (native-inputs
4728 (list python-pytest
4729 python-setuptools))
4730 (propagated-inputs
4731 (list python-flask
4732 python-werkzeug))
4733 (home-page "https://flask-cors.readthedocs.io/en/latest/")
4734 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
4735 (description
4736 "This package provides a Flask extension for handling @acronym{CORS,Cross
4737Origin Resource Sharing}, making cross-origin AJAX possible.")
4738 (license license:expat)))
4739
4740(define-public python-flask-markdown
4741 (package
4742 (name "python-flask-markdown")
4743 (version "0.3")
4744 (source
4745 (origin
4746 (method git-fetch)
4747 (uri (git-reference
4748 (url "https://github.com/dcolish/flask-markdown")
4749 (commit version)))
4750 (file-name (git-file-name name version))
4751 (sha256
4752 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
4753 (build-system pyproject-build-system)
4754 (arguments
4755 (list
4756 #:tests? #f ;Tests seem to be incompatible with latest python
4757 #:phases
4758 #~(modify-phases %standard-phases
4759 (add-after 'unpack 'set-version
4760 (lambda _
4761 (substitute* "setup.py"
4762 (("dev")
4763 #$version)))))))
4764 (propagated-inputs (list python-markdown python-flask))
4765 (native-inputs (list python-pynose python-setuptools))
4766 (home-page "https://github.com/dcolish/flask-markdown")
4767 (synopsis "Small extension to help with using Markdown in Flask")
4768 (description
4769 "Flask-Markdown supports several extensions for Markdown and integrates
4770into Jinja2 by default.")
4771 (license license:bsd-3)))
4772
4773(define-public python-flask-session
4774 (package
4775 (name "python-flask-session")
4776 (version "0.8.0")
4777 (source
4778 (origin
4779 (method url-fetch)
4780 (uri (pypi-uri "flask_session" version))
4781 (sha256
4782 (base32
4783 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
4784 (build-system pyproject-build-system)
4785 (arguments
4786 '(#:tests? #f)) ; Tests require the various storage backends to be present
4787 (native-inputs (list python-flit-core))
4788 (propagated-inputs
4789 (list python-cachelib python-flask python-msgspec))
4790 (home-page "https://github.com/pallets-eco/flask-session")
4791 (synopsis "Adds server-side session support to your Flask application")
4792 (description
4793 "Flask-Session is an extension for Flask that adds support for
4794Server-side sessions, with a variety of different backends for session
4795storage.")
4796 (license license:bsd-3)))
4797
4798(define-public python-html5lib
4799 (package
4800 (name "python-html5lib")
4801 (version "1.1")
4802 (source
4803 (origin
4804 (method url-fetch)
4805 (uri (pypi-uri "html5lib" version))
4806 (sha256
4807 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
4808 (build-system pyproject-build-system)
4809 (arguments
4810 '(#:tests? #f)) ;tests depend on dated pytest-expect
4811 (native-inputs
4812 (list python-setuptools))
4813 (propagated-inputs
4814 (list python-six
4815 python-webencodings
4816 ;; Required by Calibre 5.
4817 python-chardet))
4818 (home-page "https://github.com/html5lib/html5lib-python")
4819 (synopsis "Python HTML parser based on the WHATWG HTML specification")
4820 (description
4821 "Html5lib is an HTML parser based on the WHATWG HTML specification
4822and written in Python.")
4823 (license license:expat)))
4824
4825(define-public python-html5-parser
4826 (package
4827 (name "python-html5-parser")
4828 (version "0.4.12")
4829 (source
4830 (origin
4831 (method git-fetch)
4832 (uri (git-reference
4833 (url "https://github.com/kovidgoyal/html5-parser")
4834 (commit (string-append "v" version))))
4835 (file-name (git-file-name name version))
4836 (sha256
4837 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
4838 (build-system pyproject-build-system)
4839 (arguments
4840 (list
4841 #:phases
4842 #~(modify-phases %standard-phases
4843 (add-before 'build 'set-configure-flags
4844 (lambda _
4845 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
4846 (native-inputs (list pkg-config python-setuptools))
4847 (inputs (list libxml2))
4848 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
4849 (home-page "https://html5-parser.readthedocs.io")
4850 (synopsis "Fast C-based HTML5 parsing for Python")
4851 (description
4852 "This package provides a fast implementation of the HTML5 parsing spec
4853for Python. Parsing is done in C using a variant of the gumbo parser. The
4854gumbo parse tree is then transformed into an lxml tree, also in C, yielding
4855parse times that can be a thirtieth of the html5lib parse times.")
4856 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
4857 ;; indicate ASL2.0, including the LICENSE file for the whole project.
4858 (license (list license:asl2.0 license:gpl3))))
4859
4860(define-public python-html5tagger
4861 (package
4862 (name "python-html5tagger")
4863 (version "1.3.0")
4864 (source (origin
4865 (method url-fetch)
4866 (uri (pypi-uri "html5tagger" version))
4867 (sha256
4868 (base32
4869 "1acd1a4f66gi4plqnsml7cf33qp83mxsnmnqpdwkpj7597xkvyl4"))))
4870 (build-system pyproject-build-system)
4871 (arguments
4872 (list #:tests? #f)) ;no tests in PyPI or Git
4873 (native-inputs
4874 (list python-setuptools python-setuptools-scm python-wheel))
4875 (home-page "https://github.com/sanic-org/html5tagger")
4876 (synopsis "Create HTML documents from Python")
4877 (description
4878 "@code{html5tagger} provides a simplified HTML5 syntax that can
4879be written directly in Python without templates.")
4880 (license license:unlicense)))
4881
4882(define-public python-minio
4883 (package
4884 (name "python-minio")
4885 (version "7.1.9")
4886 (source
4887 (origin
4888 (method git-fetch)
4889 (uri (git-reference
4890 (url "https://github.com/minio/minio-py")
4891 (commit version)))
4892 (file-name (git-file-name name version))
4893 (sha256
4894 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
4895 (build-system pyproject-build-system)
4896 (arguments
4897 (list
4898 #:test-flags
4899 ;; XXX: requires network access.
4900 #~(list "--ignore=tests/unit/credentials_test.py")))
4901 (native-inputs (list python-pytest python-setuptools))
4902 (propagated-inputs
4903 (list python-certifi python-dateutil python-pytz python-urllib3))
4904 (home-page "https://github.com/minio/minio-py")
4905 (synopsis "Programmatically access Amazon S3 from Python")
4906 (description
4907 "This package provides a Python library for interacting with any
4908Amazon S3 compatible object storage server.")
4909 (license license:asl2.0)))
4910
4911(define-public python-pycrdt
4912 (package
4913 (name "python-pycrdt")
4914 (version "0.13.0")
4915 (source
4916 (origin
4917 (method git-fetch)
4918 (uri (git-reference
4919 (url "https://github.com/y-crdt/pycrdt")
4920 (commit version)))
4921 (file-name (git-file-name name version))
4922 (sha256
4923 (base32 "18mnjbxdlra1w3jl42bf1jb25z9j3inh6s61qighqrvnylgxvxc1"))))
4924 (build-system pyproject-build-system)
4925 (arguments
4926 (list
4927 #:imported-modules `(,@%cargo-build-system-modules
4928 ,@%pyproject-build-system-modules)
4929 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4930 (guix build pyproject-build-system)
4931 (guix build utils))
4932 #:test-flags #~(list "--ignore=tests/test_types.py")
4933 #:phases
4934 #~(modify-phases %standard-phases
4935 (add-after 'unpack 'relax-requirements
4936 (lambda _
4937 (substitute* "pyproject.toml"
4938 (("requires = \\[\"maturin>=.*\"\\]")
4939 "requires = [\"maturin\"]"))))
4940 (add-after 'unpack 'prepare-cargo-build-system
4941 (lambda args
4942 (for-each
4943 (lambda (phase)
4944 (format #t "Running cargo phase: ~a~%" phase)
4945 (apply (assoc-ref cargo:%standard-phases phase)
4946 #:cargo-target #$(cargo-triplet)
4947 args))
4948 '(unpack-rust-crates
4949 configure
4950 check-for-pregenerated-files
4951 patch-cargo-checksums)))))))
4952 (propagated-inputs
4953 (list python-anyio
4954 python-typing-extensions))
4955 (inputs (cargo-inputs 'pycrdt))
4956 (native-inputs
4957 (append
4958 (list maturin
4959 python-pydantic
4960 python-pytest
4961 rust
4962 `(,rust "cargo"))
4963 (or (and=> (%current-target-system)
4964 (compose list make-rust-sysroot))
4965 '())))
4966 (home-page "https://github.com/y-crdt/pycrdt")
4967 (synopsis "Python CRDTs library ported from Yjs framework")
4968 (description
4969 "Conflict-free Replicated Data Types (CRDTs) allow creating shared
4970documents that can automatically merge changes made concurrently on different
4971copies of the data. When the data lives on different machines, they make it
4972possible to build distributed systems that work with local data, leaving the
4973synchronization and conflict resolution with remote data to the CRDT
4974algorithm, which ensures that all data replicas eventually converge to the
4975same state.
4976
4977This is a Python CRDT library that provides bindings for Yrs, the Rust port of
4978the Yjs framework.")
4979 (license license:expat)))
4980
4981(define-public python-pycrdt-store
4982 (package
4983 (name "python-pycrdt-store")
4984 (version "0.1.3")
4985 (source
4986 (origin
4987 (method git-fetch)
4988 (uri (git-reference
4989 (url "https://github.com/y-crdt/pycrdt-store")
4990 (commit version)))
4991 (file-name (git-file-name name version))
4992 (sha256
4993 (base32 "18yvv5lgxb4v0qlbi8bbkcm1666nxbkmhbx445sxpzab7027fl1a"))))
4994 (build-system pyproject-build-system)
4995 (propagated-inputs
4996 (list python-anyio
4997 python-pycrdt
4998 python-sqlite-anyio))
4999 (native-inputs
5000 (list python-hatchling
5001 python-pytest
5002 python-pytest-rerunfailures
5003 python-trio))
5004 (home-page "https://github.com/y-crdt/pycrdt-store")
5005 (synopsis "Persistent storage for pycrdt")
5006 (description
5007 "This package provides a persistent storage feature for
5008@code{python-pycrdt}.")
5009 (license license:expat)))
5010
5011(define-public python-pycrdt-websocket
5012 (package
5013 (name "python-pycrdt-websocket")
5014 (version "0.16.0")
5015 (source
5016 (origin
5017 (method git-fetch)
5018 (uri (git-reference
5019 (url "https://github.com/y-crdt/pycrdt-websocket")
5020 (commit version)))
5021 (file-name (git-file-name name version))
5022 (sha256
5023 (base32 "1bcxivdra0v5fwlz3hcz98vxi61884bfvcwifsdp3mji28iprv22"))))
5024 (build-system pyproject-build-system)
5025 (arguments
5026 (list
5027 ;; These tests require the unpackaged Yjs.
5028 #:test-flags #~(list "--deselect=tests/test_pycrdt_yjs.py")))
5029 (propagated-inputs
5030 (list python-anyio
5031 python-pycrdt
5032 python-pycrdt-store))
5033 (native-inputs
5034 (list nss-certs-for-test
5035 python-hatchling
5036 python-hypercorn
5037 python-httpx-ws
5038 python-pytest))
5039 (home-page "https://github.com/y-crdt/pycrdt-websocket")
5040 (synopsis "WebSocket connector for pycrdt")
5041 (description "This package provides an asynchronous @code{WebSocket}
5042connector for @code{python-pycrdt}.")
5043 (license license:expat)))
5044
5045(define-public python-pycurl
5046 (package
5047 (name "python-pycurl")
5048 (version "7.45.4")
5049 (source
5050 (origin
5051 (method git-fetch)
5052 (uri (git-reference
5053 (url "https://github.com/pycurl/pycurl")
5054 (commit (string-append
5055 "REL_" (string-replace-substring version "." "_")))))
5056 (file-name (git-file-name name version))
5057 (sha256
5058 (base32 "00cd1l0lsml0708hpv5k4qyhqfv0qphb0p317j9aci2wdspn1mpl"))))
5059 (build-system pyproject-build-system)
5060 (arguments
5061 '(#:test-flags
5062 ;; The test suite is not thread safe:
5063 ;; - some tests want to use the same port: address already in use
5064 ;; - some tests use signal.Signal, i.e. main-thread only
5065 (list "-k" (string-append
5066 ;; Disable hanginging tests
5067 "not test_multi_socket_select"
5068 ;; E assert None is not None
5069 ;; E+ where None =
5070 ;; <tests.multi_callback_test.MultiCallbackTest
5071 ;; testMethod=test_multi_socket_action>.timer_result
5072 " and not test_multi_socket_action"
5073 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
5074 ;; open shared object file: No such file or directory
5075 " and not test_libcurl_ssl_gnutls"
5076 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
5077 ;; open shared object file: No such file or directory
5078 " and not test_libcurl_ssl_nss"
5079 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
5080 ;; open shared object file: No such file or directory
5081 " and not test_libcurl_ssl_openssl"
5082 ;; Probably due to an expired CA
5083 " and not test_request_without_certinfo"
5084 ;; "A libcurl function was given a bad argument"
5085 " and not test_proxy_tlsauth"))
5086 #:phases (modify-phases %standard-phases
5087 (add-before 'build 'configure-tls-backend
5088 (lambda _
5089 ;; XXX: PycURL fails to automatically determine which
5090 ;; TLS backend to use when cURL is built with
5091 ;; --disable-static. See setup.py and
5092 ;; <https://github.com/pycurl/pycurl/pull/147>.
5093 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
5094 (native-inputs
5095 (list python-bottle
5096 python-flaky
5097 python-flask
5098 python-pytest
5099 python-setuptools
5100 python-wheel))
5101 (inputs
5102 (list curl gnutls))
5103 (home-page "http://pycurl.io/")
5104 (synopsis "Lightweight Python wrapper around libcurl")
5105 (description "Pycurl is a lightweight wrapper around libcurl. It provides
5106high-speed transfers via libcurl and frequently outperforms alternatives.")
5107
5108 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
5109 ;; under the terms of LGPLv2.1+ or Expat.
5110 (license (list license:lgpl2.1+ license:expat))))
5111
5112(define-public python-stamina
5113 (package
5114 (name "python-stamina")
5115 (version "25.2.0")
5116 (source
5117 (origin
5118 (method git-fetch)
5119 (uri (git-reference
5120 (url "https://github.com/hynek/stamina")
5121 (commit version)))
5122 (file-name (git-file-name name version))
5123 (sha256
5124 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
5125 (build-system pyproject-build-system)
5126 (native-inputs
5127 (list python-pytest
5128 python-anyio
5129 python-dirty-equals
5130 python-hatch-fancy-pypi-readme
5131 python-hatch-vcs
5132 python-hatchling
5133 python-structlog))
5134 (propagated-inputs
5135 (list python-tenacity
5136 python-typing-extensions))
5137 (home-page "https://github.com/hynek/stamina")
5138 (synopsis "Retries library for Python")
5139 (description
5140 "@code{stamina} is an opinionated wrapper around the
5141@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
5142 (license license:expat)))
5143
5144(define-public python-stripe
5145 (package
5146 (name "python-stripe")
5147 (version "13.2.0")
5148 (source
5149 (origin
5150 (method git-fetch)
5151 (uri (git-reference
5152 (url "https://github.com/stripe/stripe-python")
5153 (commit (string-append "v" version))))
5154 (file-name (git-file-name name version))
5155 (sha256
5156 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
5157 (build-system pyproject-build-system)
5158 (arguments
5159 '(#:tests? #f)) ;; tests require network
5160 (native-inputs
5161 (list python-flit-core))
5162 (propagated-inputs
5163 (list python-httpx
5164 python-requests))
5165 (home-page "https://github.com/stripe/stripe-python")
5166 (synopsis "Python bindings for the Stripe financial services' API")
5167 (description "This package provides access to the Stripe financial
5168services' API. It includes a pre-defined set of classes for API resources
5169that initialize themselves dynamically from API responses which makes it
5170compatible with a wide range of versions of the Stripe API.")
5171 (license license:expat)))
5172
5173(define-public python-stripe-12
5174 (hidden-package
5175 (package/inherit python-stripe
5176 (name "python-stripe")
5177 (version "12.5.1")
5178 (source
5179 (origin
5180 (inherit (package-source python-stripe))
5181 (uri (git-reference
5182 (url "https://github.com/stripe/stripe-python")
5183 (commit (string-append "v" version))))
5184 (file-name (git-file-name name version))
5185 (sha256 (base32
5186 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
5187 (native-inputs
5188 (list python-setuptools)))))
5189
5190(define-public python-tldextract
5191 (package
5192 (name "python-tldextract")
5193 (version "5.3.0")
5194 (source
5195 (origin
5196 (method url-fetch)
5197 (uri (pypi-uri "tldextract" version))
5198 (sha256
5199 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
5200 (build-system pyproject-build-system)
5201 (arguments
5202 (list
5203 #:phases
5204 #~(modify-phases %standard-phases
5205 (add-after 'unpack 'relax-requirements
5206 (lambda _
5207 (substitute* "pyproject.toml"
5208 (("\"requests-file.*\",")
5209 "\"requests-file\",")))))))
5210 (native-inputs
5211 (list nss-certs-for-test
5212 python-pytest
5213 python-pytest-mock
5214 python-responses
5215 python-setuptools
5216 python-setuptools-scm
5217 python-syrupy))
5218 (propagated-inputs
5219 (list python-filelock
5220 python-idna
5221 python-requests
5222 python-requests-file))
5223 (home-page "https://github.com/john-kurkowski/tldextract")
5224 (synopsis
5225 "Separate the TLD from the registered domain and subdomains of a URL")
5226 (description
5227 "TLDExtract accurately separates the TLD from the registered domain and
5228subdomains of a URL, using the Public Suffix List. By default, this includes
5229the public ICANN TLDs and their exceptions. It can optionally support the
5230Public Suffix List's private domains as well.")
5231 (license license:bsd-3)))
5232
5233(define-public python-tracerite
5234 (package
5235 (name "python-tracerite")
5236 (version "1.1.3")
5237 (source
5238 (origin
5239 (method url-fetch)
5240 (uri (pypi-uri "tracerite" version))
5241 (sha256
5242 (base32 "07mkg0sl0h335kj6yjvxki2c19gxhb7rkks1zgzh7aj0y83c17qi"))))
5243 (build-system pyproject-build-system)
5244 (arguments
5245 (list #:tests? #f)) ;no tests in PyPI or Git
5246 (native-inputs
5247 (list python-setuptools
5248 python-setuptools-scm))
5249 (propagated-inputs
5250 (list python-html5tagger))
5251 (home-page "https://github.com/sanic-org/tracerite")
5252 (synopsis "Human-readable HTML tracebacks")
5253 (description
5254 "@code{tracerite} converts Python tracebacks into useful error messages
5255in human-readable HTML format.")
5256 (license license:unlicense)))
5257
5258(define-public python-trio-websocket
5259 (package
5260 (name "python-trio-websocket")
5261 (version "0.12.2")
5262 (source
5263 (origin
5264 (method git-fetch)
5265 (uri (git-reference
5266 (url "https://github.com/HyperionGray/trio-websocket")
5267 (commit version)))
5268 (file-name (git-file-name name version))
5269 (sha256
5270 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
5271 (build-system pyproject-build-system)
5272 (native-inputs
5273 (list python-pytest
5274 python-pytest-trio
5275 python-setuptools
5276 python-trustme))
5277 (propagated-inputs
5278 (list python-outcome
5279 python-trio
5280 python-wsproto))
5281 (home-page "https://github.com/HyperionGray/trio-websocket")
5282 (synopsis "WebSocket library for Trio")
5283 (description "This library implements both server and client aspects of
5284the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
5285striving for safety, correctness, and ergonomics. It is based on the
5286@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
5287@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
5288the majority of the WebSocket protocol, including framing, codecs, and events.
5289This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
5290the Trio framework}.")
5291 (license license:expat)))
5292
5293(define-public python-txacme
5294 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
5295 ;; compatibility with twisted, use the latest commit from trunk branch.
5296 ;;
5297 ;;See: <https://github.com/twisted/txacme/issues/165>.
5298 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
5299 (revision "0"))
5300 (package
5301 (name "python-txacme")
5302 (version (git-version "0.9.3" revision commit))
5303 (source
5304 (origin
5305 (method git-fetch) ;no fresh release in PyPI
5306 (uri (git-reference
5307 (url "https://github.com/twisted/txacme")
5308 (commit commit)))
5309 (file-name (git-file-name name version))
5310 (sha256
5311 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
5312 (build-system pyproject-build-system)
5313 (arguments
5314 (list #:test-backend #~'custom
5315 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
5316 (native-inputs
5317 (list python-setuptools))
5318 (propagated-inputs
5319 (list python-acme
5320 python-attrs
5321 python-eliot
5322 python-josepy
5323 python-pem
5324 python-treq
5325 python-twisted
5326 python-txsni))
5327 (home-page "https://github.com/twisted/txacme")
5328 (synopsis "Twisted implexmentation of the ACME protocol")
5329 (description
5330 "ACME is Automatic Certificate Management Environment, a protocol that
5331allows clients and certificate authorities to automate verification and
5332certificate issuance. The ACME protocol is used by the free Let's Encrypt
5333Certificate Authority.
5334
5335txacme is an implementation of the protocol for Twisted, the event-driven
5336networking engine for Python.")
5337 (license license:expat))))
5338
5339(define-public python-txaio
5340 (package
5341 (name "python-txaio")
5342 (version "25.9.2")
5343 (source
5344 (origin
5345 (method url-fetch)
5346 (uri (pypi-uri "txaio" version))
5347 (sha256
5348 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
5349 (build-system pyproject-build-system)
5350 (native-inputs
5351 (list python-pytest
5352 python-setuptools))
5353 (home-page "https://github.com/crossbario/txaio")
5354 (synopsis "Compatibility layer between Python asyncio and Twisted")
5355 (description
5356 "Txaio provides a compatibility layer between the Python @code{asyncio}
5357 bsmodule and @code{Twisted}.")
5358 (license license:expat)))
5359
5360;; XXX: Potentially abandonware since 2017, consider to remove when nothing
5361;; depends on it or fails to build.
5362(define-public python-txamqp
5363 (package
5364 (name "python-txamqp")
5365 (version "0.8.2")
5366 (source
5367 (origin
5368 (method url-fetch)
5369 (uri (pypi-uri "txAMQP" version))
5370 (sha256
5371 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
5372 (build-system pyproject-build-system)
5373 (arguments
5374 (list #:tests? #f)) ;all tests failed
5375 (native-inputs
5376 (list python-setuptools))
5377 (propagated-inputs
5378 (list python-six python-twisted))
5379 (home-page "https://github.com/txamqp/txamqp")
5380 (synopsis "Communicate with AMQP peers and brokers using Twisted")
5381 (description
5382 "This package provides a Python library for communicating with AMQP peers
5383and brokers using the asynchronous networking framework Twisted. It contains
5384all the necessary code to connect, send and receive messages to/from an
5385AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
5386also includes support for using Thrift RPC over AMQP in Twisted
5387applications.")
5388 (license license:asl2.0)))
5389
5390(define-public python-txsni
5391 (package
5392 (name "python-txsni")
5393 (version "0.2.0")
5394 (source
5395 (origin
5396 (method git-fetch)
5397 (uri (git-reference
5398 (url "https://github.com/glyph/txsni")
5399 (commit (string-append "v" version))))
5400 (file-name (git-file-name name version))
5401 (sha256
5402 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
5403 (build-system pyproject-build-system)
5404 (arguments
5405 (list #:test-backend #~'custom
5406 #:test-flags #~(list "-m" "twisted.trial"
5407 "--temp-directory=/tmp/_trial_temp"
5408 "txsni")))
5409 (native-inputs
5410 (list python-setuptools))
5411 (propagated-inputs
5412 (list python-pyopenssl
5413 python-service-identity
5414 python-twisted))
5415 (home-page "https://github.com/glyph/txsni")
5416 (synopsis "Run TLS servers with Twisted")
5417 (description
5418 "This package provides an easy-to-use SNI endpoint for use with the
5419Twisted web framework.")
5420 (license license:expat)))
5421
5422(define-public python-txtorcon
5423 (package
5424 (name "python-txtorcon")
5425 (version "24.8.0")
5426 (source
5427 (origin
5428 (method url-fetch)
5429 (uri (pypi-uri "txtorcon" version))
5430 (sha256
5431 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
5432 (build-system pyproject-build-system)
5433 (native-inputs
5434 (list python-pytest
5435 python-setuptools
5436 python-wheel))
5437 (inputs
5438 (list lsof))
5439 (propagated-inputs
5440 (list python-automat
5441 python-idna
5442 python-incremental
5443 python-pyopenssl
5444 python-service-identity
5445 python-twisted
5446 python-zope-interface))
5447 (home-page "https://github.com/meejah/txtorcon")
5448 (synopsis "Twisted-based Tor controller client")
5449 (description
5450 "This package provides a Twisted-based Tor controller client,with
5451state-tracking and configuration abstractions.")
5452 (license license:expat)))
5453
5454(define-public python-url-normalize
5455 (package
5456 (name "python-url-normalize")
5457 (version "2.2.1")
5458 (source
5459 (origin
5460 (method git-fetch) ; no tests in PyPI release
5461 (uri (git-reference
5462 (url "https://github.com/niksite/url-normalize")
5463 (commit (string-append "v" version))))
5464 (file-name (git-file-name name version))
5465 (sha256
5466 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
5467 (build-system pyproject-build-system)
5468 (arguments
5469 (list
5470 #:test-flags #~(list "--ignore=tests/test_cli.py")))
5471 (native-inputs
5472 (list python-pytest python-pytest-socket python-setuptools))
5473 (propagated-inputs
5474 (list python-idna))
5475 (home-page "https://github.com/niksite/url-normalize")
5476 (synopsis "URL normalization for Python")
5477 (description
5478 "This package provides a URI Normalization function with following
5479features:
5480@itemize
5481@item take care of IDN domains
5482@item always provide the URI scheme in lowercase characters
5483@item always provide the host, if any, in lowercase characters
5484@item only perform percent-encoding where it is essential
5485@item always use uppercase A-through-F characters when percent-encoding
5486@item prevent dot-segments appearing in non-relative URI paths
5487@item for schemes that define a default authority, use an empty authority if
5488the default is desired
5489@item for schemes that define an empty path to be equivalent to a path of
5490@code{/}, use @code{/}
5491@item for schemes that define a port, use an empty port if the default is
5492desired
5493@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
5494@end itemize")
5495 (license license:expat)))
5496
5497(define-public python-waitress
5498 (package
5499 (name "python-waitress")
5500 (version "3.0.2")
5501 (source
5502 (origin
5503 (method url-fetch)
5504 (uri (pypi-uri "waitress" version))
5505 (sha256
5506 (base32
5507 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
5508 (build-system pyproject-build-system)
5509 (arguments
5510 (list
5511 ;; https://github.com/Pylons/waitress/issues/443
5512 #:test-flags #~(list "-k" "not test_service_port")))
5513 (native-inputs (list python-pytest python-setuptools))
5514 (home-page "https://github.com/Pylons/waitress")
5515 (synopsis "Waitress WSGI server")
5516 (description
5517 "Waitress is meant to be a production-quality pure-Python WSGI server
5518with very acceptable performance.")
5519 (license license:zpl2.1)))
5520
5521(define-public python-weasel
5522 (package
5523 (name "python-weasel")
5524 (version "1.0.0")
5525 (source
5526 (origin
5527 (method git-fetch)
5528 (uri (git-reference
5529 (url "https://github.com/explosion/weasel/")
5530 (commit (string-append "release-v" version))))
5531 (file-name (git-file-name name version))
5532 (sha256
5533 (base32 "1sxcxri9hl9rs1kvdrv81g6mlg7lifhq9xacskracz63v4nyh8na"))))
5534 (build-system pyproject-build-system)
5535 (arguments
5536 (list
5537 #:test-flags
5538 ;; This test raises an error, but not the one expected by pytest.
5539 #~(list (string-append "--deselect=weasel/tests/test_validation.py::"
5540 "test_project_config_interpolation[10_0]")
5541 ;; Network access is required.
5542 #$@(map (lambda (test) (string-append "--deselect="
5543 "weasel/tests/cli/"
5544 test))
5545 (list "test_cli.py::test_project_git_dir_asset"
5546 "test_cli.py::test_project_git_file_asset"
5547 "test_cli_app.py::test_project_assets")))))
5548 (native-inputs
5549 (list python-pytest
5550 python-setuptools))
5551 (propagated-inputs
5552 (list python-cloudpathlib
5553 python-confection
5554 python-httpx
5555 python-packaging
5556 python-pydantic
5557 python-smart-open
5558 python-srsly
5559 python-typer
5560 python-wasabi))
5561 (home-page "https://github.com/explosion/weasel/")
5562 (synopsis "Small and easy workflow system")
5563 (description
5564 "This package provides a minimalistic workflow system to manage and
5565share end-to-end workflows for different use cases and domains.")
5566 (license license:expat)))
5567
5568(define-public python-webencodings
5569 (package
5570 (name "python-webencodings")
5571 (version "0.5.1")
5572 (source
5573 (origin
5574 (method url-fetch)
5575 (uri (pypi-uri "webencodings" version))
5576 (sha256
5577 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
5578 (build-system pyproject-build-system)
5579 (arguments
5580 (list #:test-flags #~(list "webencodings/tests.py")))
5581 (native-inputs
5582 (list python-pytest python-setuptools))
5583 (home-page "https://github.com/SimonSapin/python-webencodings")
5584 (synopsis "Character encoding aliases for legacy web content")
5585 (description
5586 "In order to be compatible with legacy web content when interpreting
5587something like @code{Content-Type: text/html; charset=latin1}, tools need to
5588use a particular set of aliases for encoding labels as well as some overriding
5589rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
5590actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
5591BOM takes precedence over any other encoding declaration. The WHATWG
5592@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
5593details so that implementations do not have to reverse-engineer each other.
5594
5595This module implements the Encoding standard and has encoding labels and BOM
5596detection, but the actual implementation for encoders and decoders is
5597Python’s.")
5598 (license license:bsd-3)))
5599
5600(define-public python-omnipath
5601 (package
5602 (name "python-omnipath")
5603 (version "1.0.10")
5604 (source
5605 (origin
5606 (method git-fetch)
5607 (uri (git-reference
5608 (url "https://github.com/saezlab/omnipath/")
5609 (commit (string-append "v" version))))
5610 (file-name (git-file-name name version))
5611 (sha256
5612 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
5613 (build-system pyproject-build-system)
5614 (arguments
5615 (list
5616 #:test-flags '(list "-k"
5617 (string-append
5618 ;; These require internet access
5619 "not test_download_homologene"
5620 " and not test_complex_genes"))
5621 #:phases
5622 #~(modify-phases %standard-phases
5623 (add-after 'unpack 'set-home
5624 (lambda _
5625 (setenv "HOME" "/tmp"))))))
5626 (propagated-inputs (list python-attrs
5627 python-docrep
5628 python-inflect
5629 python-networkx
5630 python-packaging
5631 python-pandas
5632 python-requests
5633 python-tqdm
5634 python-typing-extensions
5635 python-urllib3
5636 python-wrapt))
5637 (native-inputs (list nss-certs-for-test
5638 python-bump2version
5639 python-hatchling
5640 python-pytest
5641 python-pytest-mock
5642 python-pytest-socket
5643 python-requests-mock))
5644 (home-page "https://omnipathdb.org/")
5645 (synopsis "Python client for the OmniPath web service")
5646 (description "This package provides a Python client for the OmniPath web
5647service.")
5648 (license license:expat)))
5649
5650(define-public python-openai
5651 (package
5652 (name "python-openai")
5653 (version "2.42.0")
5654 (source
5655 (origin
5656 (method git-fetch)
5657 (uri (git-reference
5658 (url "https://github.com/openai/openai-python")
5659 (commit (string-append "v" version))))
5660 (file-name (git-file-name name version))
5661 (sha256
5662 (base32 "1p0vzy34cx2gfkhsqg2kxzam51cjlpa99q0skzj4426sx2hsw3g6"))))
5663 (build-system pyproject-build-system)
5664 (arguments
5665 (list
5666 #:test-flags
5667 ;; These require internet access and an openai API key.
5668 #~(list "--ignore=openai/tests/asyncio/test_endpoints.py"
5669 "--ignore=openai/tests/test_endpoints.py"
5670 "--ignore-glob=tests/api_resources/*")))
5671 (propagated-inputs
5672 (list python-aiohttp
5673 python-distro
5674 python-httpx
5675 python-jiter
5676 python-pydantic
5677 python-requests
5678 python-tqdm
5679 python-typing-extensions))
5680 (native-inputs
5681 (list nss-certs-for-test
5682 python-dirty-equals
5683 python-hatchling
5684 python-hatch-fancy-pypi-readme
5685 python-inline-snapshot
5686 python-pytest
5687 python-pytest-asyncio
5688 python-pytest-mock
5689 python-pytest-xdist
5690 python-respx
5691 python-rich
5692 python-setuptools))
5693 (home-page "https://github.com/openai/openai-python")
5694 (synopsis "Python client library for the OpenAI API")
5695 (description "This package provides a Python client library for the
5696OpenAI API.")
5697 (license license:expat)))
5698
5699(define-public python-openapi-schema-validator
5700 (package
5701 (name "python-openapi-schema-validator")
5702 (version "0.6.2")
5703 (source
5704 (origin
5705 (method git-fetch) ;no tests in pypi release
5706 (uri (git-reference
5707 (url "https://github.com/p1c2u/openapi-schema-validator")
5708 (commit version)))
5709 (file-name (git-file-name name version))
5710 (sha256
5711 (base32
5712 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
5713 (build-system pyproject-build-system)
5714 (arguments
5715 (list
5716 #:test-flags
5717 ;; This one returns 5 instead of 4 elements
5718 '(list "-k" "not test_array_prefixitems_invalid")
5719 #:phases
5720 #~(modify-phases %standard-phases
5721 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
5722 (add-after 'unpack 'relax-requirements
5723 (lambda _
5724 (substitute* "pyproject.toml"
5725 (("jsonschema-specifications.*")
5726 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
5727 (native-inputs (list python-poetry-core python-pytest))
5728 (propagated-inputs
5729 (list python-isodate
5730 python-jsonschema
5731 python-rfc3339-validator
5732 python-strict-rfc3339))
5733 (home-page "https://github.com/p1c2u/openapi-schema-validator")
5734 (synopsis "OpenAPI schema validation library for Python")
5735 (description "Openapi-schema-validator is a Python library that validates
5736a schema against:
5737@itemize
5738@item OpenAPI Schema Specification v3.0 which is an extended subset of the
5739JSON Schema Specification Wright Draft 00.
5740@item OpenAPI Schema Specification v3.1 which is an extended superset of the
5741JSON Schema Specification Draft 2020-12.
5742@end itemize")
5743 (license license:bsd-3)))
5744
5745(define-public python-openapi-spec-validator
5746 (package
5747 (name "python-openapi-spec-validator")
5748 (version "0.7.1")
5749 (source
5750 (origin
5751 (method git-fetch) ;no tests in pypi release
5752 (uri (git-reference
5753 (url "https://github.com/p1c2u/openapi-spec-validator")
5754 (commit version)))
5755 (file-name (git-file-name name version))
5756 (sha256
5757 (base32
5758 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
5759 (build-system pyproject-build-system)
5760 (arguments
5761 (list
5762 ;; These tests attempt to fetch resources from the Internet
5763 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
5764 "-k" "not example")))
5765 (native-inputs
5766 (list python-poetry-core
5767 python-pytest))
5768 (propagated-inputs
5769 (list python-jsonschema
5770 python-jsonschema-path
5771 python-lazy-object-proxy
5772 python-openapi-schema-validator
5773 python-pyyaml
5774 python-requests
5775 python-setuptools))
5776 (home-page "https://github.com/p1c2u/openapi-spec-validator")
5777 (synopsis "OpenAPI spec validator")
5778 (description "OpenAPI Spec Validator is a Python library that validates an
5779OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
57803.0 and OpenAPI 3.1 specifications. The validator aims to check for full
5781compliance with the specification.")
5782 (license license:asl2.0)))
5783
5784(define-public python-openapi-core
5785 (package
5786 (name "python-openapi-core")
5787 (version "0.19.4")
5788 (source
5789 (origin
5790 (method git-fetch)
5791 (uri (git-reference
5792 (url "https://github.com/p1c2u/openapi-core")
5793 (commit version)))
5794 (file-name (git-file-name name version))
5795 (sha256
5796 (base32
5797 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
5798 (build-system pyproject-build-system)
5799 (arguments
5800 (list
5801 #:test-flags
5802 '(list "tests/unit"
5803 "-k" "not test_chars_valid")))
5804 (native-inputs (list python-django
5805 python-falcon
5806 python-flask
5807 python-mock
5808 python-poetry-core
5809 python-pytest
5810 python-pytest-asyncio
5811 python-responses))
5812 (propagated-inputs
5813 (list python-attrs
5814 python-aiohttp
5815 python-isodate
5816 python-jsonschema
5817 python-lazy-object-proxy
5818 python-more-itertools
5819 python-openapi-schema-validator
5820 python-openapi-spec-validator
5821 python-parse
5822 python-six
5823 python-werkzeug))
5824 (home-page "https://github.com/p1c2u/openapi-core")
5825 (synopsis "OpenAPI core library")
5826 (description "Openapi-core is a Python library that adds client-side and
5827server-side support for the OpenAPI Specification v3. It has features such
5828as:
5829@itemize
5830@item Validation of requests and responses
5831@item Schema casting and unmarshalling
5832@item Media type and parameters deserialization
5833@item Security providers (API keys, Cookie, Basic and Bearer HTTP
5834authentications)
5835@item Custom deserializers and formats
5836@item Integration with libraries and frameworks.
5837@end itemize")
5838 (license license:bsd-3)))
5839
5840(define-public python-openid
5841 (package
5842 (name "python-openid")
5843 (version "3.2.0")
5844 (source
5845 (origin
5846 (method url-fetch)
5847 (uri (pypi-uri "python3-openid" version))
5848 (sha256
5849 (base32
5850 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
5851 (build-system pyproject-build-system)
5852 (arguments
5853 `(#:phases
5854 (modify-phases %standard-phases
5855 (replace 'check
5856 (lambda* (#:key tests? #:allow-other-keys)
5857 (when tests?
5858 (invoke "python" "-m" "unittest" "openid.test.test_suite")))))))
5859 (propagated-inputs
5860 (list python-defusedxml))
5861 (native-inputs
5862 (list python-psycopg2 python-django python-setuptools python-wheel))
5863 (home-page "https://github.com/necaris/python3-openid")
5864 (synopsis "OpenID support for servers and consumers")
5865 (description "This library provides OpenID authentication for Python, both
5866for clients and servers.")
5867 (license license:asl2.0)))
5868
5869(define-public python-cssutils
5870 (package
5871 (name "python-cssutils")
5872 (version "2.11.1")
5873 (source
5874 (origin
5875 (method url-fetch)
5876 (uri (pypi-uri "cssutils" version))
5877 (sha256
5878 (base32
5879 "1qpq7xvzqp4cfcb8837rnd30x4hws3rkp33qpvmnxbxn2djsfqq5"))))
5880 (build-system pyproject-build-system)
5881 (arguments
5882 (list
5883 #:phases
5884 #~(modify-phases %standard-phases
5885 (replace 'check
5886 (lambda _
5887 (invoke "pytest" "-vv" "-k"
5888 (string-append "not encutils "
5889 "and not website.logging")))))))
5890 (native-inputs
5891 (list python-cssselect
5892 python-jaraco-test
5893 python-lxml
5894 python-pytest
5895 python-setuptools
5896 python-wheel))
5897 (propagated-inputs
5898 (list python-more-itertools))
5899 (home-page "https://github.com/jaraco/cssutils")
5900 (synopsis
5901 "CSS Cascading Style Sheets library for Python")
5902 (description
5903 "Cssutils is a Python package for parsing and building CSS
5904Cascading Style Sheets. Currently it provides a DOM only and no rendering
5905options.")
5906 (license license:lgpl3+)))
5907
5908(define-public python-css-parser
5909 (package
5910 (inherit python-cssutils)
5911 (name "python-css-parser")
5912 (version "1.0.10")
5913 (source
5914 (origin
5915 (method url-fetch)
5916 (uri (pypi-uri "css-parser" version))
5917 (sha256
5918 (base32 "0qs375slcwqd7slizh6hzkwxx7cdj36v8kwn0qrfji1kscm9f7mz"))))
5919 (home-page "https://github.com/ebook-utils/css-parser")
5920 (synopsis "Fork of cssutils modified for parsing ebooks")
5921 (description
5922 "Css-parser is a Python package for parsing and building CSS
5923Cascading Style Sheets. Currently it provides a DOM only and no rendering
5924options.
5925
5926It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
5927cssutils not receiving updates as of 1.0.2.")
5928 (license license:lgpl3+)))
5929
5930(define-public python-cssselect
5931 (package
5932 (name "python-cssselect")
5933 (version "1.2.0")
5934 (source (origin
5935 ;; The PyPI release does not contain tests.
5936 (method git-fetch)
5937 (uri (git-reference
5938 (url "https://github.com/scrapy/cssselect")
5939 (commit (string-append "v" version))))
5940 (file-name (git-file-name name version))
5941 (sha256
5942 (base32
5943 "1x4nrvb1p1byi1whmspik7lbh303akdlh762dayfxam3hycsh5kk"))))
5944 (build-system pyproject-build-system)
5945 (native-inputs
5946 (list python-lxml python-pytest python-setuptools python-wheel))
5947 (home-page "https://github.com/scrapy/cssselect")
5948 (synopsis "CSS3 selector parser and translator to XPath 1.0")
5949 (description
5950 "Cssselect ia a Python module that parses CSS3 Selectors and translates
5951them to XPath 1.0 expressions. Such expressions can be used in lxml or
5952another XPath engine to find the matching elements in an XML or HTML document.")
5953 (license license:bsd-3)))
5954
5955(define-public python-databricks-cli
5956 (package
5957 (name "python-databricks-cli")
5958 (version "0.18.0")
5959 (home-page "https://github.com/databricks/databricks-cli")
5960 (source (origin
5961 (method git-fetch)
5962 (uri (git-reference (url home-page) (commit version)))
5963 (file-name (git-file-name name version))
5964 (sha256
5965 (base32
5966 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
5967 (build-system pyproject-build-system)
5968 (arguments
5969 (list #:phases #~(modify-phases %standard-phases
5970 (replace 'check
5971 (lambda _
5972 (invoke "pytest" "tests" "-vv"))))))
5973 (native-inputs
5974 ;; For tests.
5975 (list python-decorator
5976 python-mock
5977 python-pytest
5978 python-requests-mock
5979 python-setuptools
5980 python-wheel))
5981 (propagated-inputs
5982 (list python-click
5983 python-oauthlib
5984 python-pyjwt
5985 python-requests
5986 python-six
5987 python-tabulate))
5988 (synopsis "Command line interface for Databricks")
5989 (description
5990 "The Databricks Command Line Interface is a tool which provides an easy
5991to use interface to the Databricks platform. The CLI is built on top of the
5992Databricks REST APIs.")
5993 (license license:asl2.0)))
5994
5995(define-public python-openid-cla
5996 ;; XXX: Last updated in 2015.
5997 (package
5998 (name "python-openid-cla")
5999 (version "1.2")
6000 (source
6001 (origin
6002 (method url-fetch)
6003 (uri (pypi-uri "python-openid-cla" version))
6004 (sha256
6005 (base32
6006 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
6007 (build-system pyproject-build-system)
6008 (arguments '(#:tests? #f)) ; No tests.
6009 (native-inputs (list python-setuptools python-wheel))
6010 (propagated-inputs (list python-openid python-six))
6011 (home-page "https://github.com/puiterwijk/python-openid-cla/")
6012 (synopsis "Implementation of the OpenID CLA extension for python-openid")
6013 (description "@code{openid-cla} is an implementation of the OpenID
6014contributor license agreement extension for python-openid.")
6015 (license license:bsd-3)))
6016
6017(define-public python-openid-teams
6018 ;; XXX: Last updated in 2018.
6019 (package
6020 (name "python-openid-teams")
6021 (version "1.1")
6022 (source
6023 (origin
6024 (method url-fetch)
6025 (uri (pypi-uri "python-openid-teams" version))
6026 (sha256
6027 (base32
6028 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
6029 (build-system pyproject-build-system)
6030 (arguments '(#:tests? #f)) ; No tests.
6031 (native-inputs (list python-setuptools python-wheel))
6032 (propagated-inputs (list python-openid python-six))
6033 (home-page "https://github.com/puiterwijk/python-openid-teams/")
6034 (synopsis "Implementation of the OpenID teams extension for python-openid")
6035 (description
6036 "@code{openid-teams} is an implementation of the OpenID
6037teams extension for python-openid.")
6038 (license license:bsd-3)))
6039
6040(define-public python-priority
6041 (package
6042 (name "python-priority")
6043 (version "2.0.0")
6044 (source
6045 (origin
6046 (method url-fetch)
6047 (uri (pypi-uri "priority" version))
6048 (sha256
6049 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
6050 (build-system pyproject-build-system)
6051 (native-inputs
6052 (list python-pytest python-setuptools python-wheel))
6053 (home-page "https://python-hyper.org/projects/priority/en/latest/")
6054 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
6055 (description
6056 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
6057set out in RFC 7540 Section 5.3 (Stream Priority).")
6058 (license license:expat)))
6059
6060(define-public python-weblate-language-data
6061 (package
6062 (name "python-weblate-language-data")
6063 (version "2025.8")
6064 (source
6065 (origin
6066 (method url-fetch)
6067 (uri (pypi-uri "weblate_language_data" version))
6068 (sha256
6069 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
6070 (build-system pyproject-build-system)
6071 (arguments (list #:tests? #f)) ;not tests, just data files
6072 (native-inputs
6073 (list python-setuptools))
6074 (propagated-inputs
6075 (list python-translate-toolkit))
6076 (home-page "https://github.com/WeblateOrg/language-data")
6077 (synopsis "Language definitions for Weblate")
6078 (description
6079 "This package provides language definitions used by
6080@url{https://weblate.org/, Weblate}i.")
6081 (license license:expat)))
6082
6083(define-public python-wikidata
6084 (package
6085 (name "python-wikidata")
6086 (version "0.8.1")
6087 (source
6088 (origin
6089 (method git-fetch)
6090 (uri (git-reference
6091 (url "https://github.com/dahlia/wikidata")
6092 (commit version)))
6093 (file-name (git-file-name name version))
6094 (sha256
6095 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
6096 (build-system pyproject-build-system)
6097 (native-inputs
6098 (list python-pytest python-setuptools))
6099 (home-page "https://github.com/dahlia/wikidata")
6100 (synopsis "Wikidata client library")
6101 (description
6102 "This package provides a Python interface to @url{https://www.wikidata.org/,
6103Wikidata}.")
6104 (license license:gpl3+)))
6105
6106(define-public python-wsproto
6107 (package
6108 (name "python-wsproto")
6109 (version "1.2.0")
6110 (source
6111 (origin
6112 (method url-fetch)
6113 (uri (pypi-uri "wsproto" version))
6114 (sha256
6115 (base32 "0rahm1j9danv1l6i6as80acwv16ycihxkhrvwjiqh9drxhk5ymmd"))))
6116 (build-system pyproject-build-system)
6117 (native-inputs
6118 (list python-pytest python-setuptools python-wheel))
6119 (propagated-inputs
6120 (list python-h11))
6121 (home-page "https://github.com/python-hyper/wsproto/")
6122 (synopsis "WebSockets state-machine based protocol implementation")
6123 (description
6124 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
6125stack. It's written from the ground up to be embeddable in whatever program you
6126choose to use, ensuring that you can communicate via WebSockets, as defined in
6127RFC6455, regardless of your programming paradigm.")
6128 (license license:expat)))
6129
6130(define-public hypercorn
6131 (package
6132 (name "hypercorn")
6133 (version "0.18.0")
6134 (source
6135 (origin
6136 (method git-fetch) ;PyPI does not have tests
6137 (uri (git-reference
6138 (url "https://github.com/pgjones/hypercorn")
6139 (commit version)))
6140 (file-name (git-file-name name version))
6141 (sha256
6142 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
6143 (build-system pyproject-build-system)
6144 ;; Propagate because Hypercorn also exposes functionality over a module.
6145 (propagated-inputs (list python-h11
6146 python-h2
6147 python-priority
6148 python-tomli
6149 python-wsproto))
6150 (native-inputs (list nss-certs-for-test
6151 python-httpx
6152 python-pdm-backend
6153 python-poetry-core
6154 python-pytest
6155 python-pytest-asyncio
6156 python-pytest-trio
6157 python-trio))
6158 (home-page "https://gitlab.com/pgjones/hypercorn/")
6159 (synopsis "ASGI Server based on Hyper libraries")
6160 (description
6161 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
6162wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
6163WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
6164can utilise asyncio, uvloop, or trio worker types.")
6165 (license license:expat)))
6166
6167(define-public python-querystring-parser
6168 (package
6169 (name "python-querystring-parser")
6170 (version "1.2.4")
6171 (source
6172 (origin
6173 (method git-fetch)
6174 (uri (git-reference
6175 (url "https://github.com/bernii/querystring-parser")
6176 (commit version)))
6177 (file-name (git-file-name name version))
6178 (sha256
6179 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
6180 (build-system pyproject-build-system)
6181 (arguments
6182 (list
6183 #:test-backend #~'custom
6184 #:test-flags #~(list "querystring_parser/tests.py")
6185 #:phases
6186 #~(modify-phases %standard-phases
6187 (add-after 'unpack 'fix-python-incompatibilities
6188 (lambda _
6189 (substitute* "querystring_parser/tests.py"
6190 ;; XXX FIXME: This test is broken with Python 3.7:
6191 ;; https://github.com/bernii/querystring-parser/issues/35
6192 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
6193 "True")
6194 ;; Removed in Python 3.12.
6195 (("assertEquals")
6196 "assertEqual")))))))
6197 (native-inputs (list python-setuptools))
6198 (propagated-inputs (list python-six))
6199 (home-page "https://github.com/bernii/querystring-parser")
6200 (synopsis "QueryString parser that correctly handles nested dictionaries")
6201 (description
6202 "This package provides a query string parser for Python and Django
6203projects that correctly creates nested dictionaries from sent form/querystring
6204data.")
6205 (license license:expat)))
6206
6207(define-public python-tornado
6208 (package
6209 (name "python-tornado")
6210 (version "6.4.2")
6211 (source
6212 (origin
6213 (method url-fetch)
6214 (uri (pypi-uri "tornado" version))
6215 (sha256
6216 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
6217 (build-system pyproject-build-system)
6218 (arguments
6219 (list
6220 #:test-flags
6221 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
6222 #~(list "--ignore=tornado/test/iostream_test.py")))
6223 (native-inputs
6224 (list python-certifi
6225 python-pytest
6226 python-setuptools))
6227 (home-page "https://www.tornadoweb.org/")
6228 (synopsis "Python web framework and asynchronous networking library")
6229 (description
6230 "Tornado is a Python web framework and asynchronous networking library,
6231originally developed at FriendFeed. By using non-blocking network I/O,
6232Tornado can scale to tens of thousands of open connections, making it ideal
6233for long polling, WebSockets, and other applications that require a long-lived
6234connection to each user.")
6235 (license license:asl2.0)))
6236
6237;; XXX: Deprecated on <2026-01-23>.
6238(define-deprecated-package python-tornado-6 python-tornado)
6239
6240(define-public python-tornado-http-auth
6241 (package
6242 (name "python-tornado-http-auth")
6243 (version "1.1.1")
6244 (source
6245 (origin
6246 (method git-fetch)
6247 (uri (git-reference
6248 (url "https://github.com/gvalkov/tornado-http-auth")
6249 (commit (string-append "v" version))))
6250 (file-name (git-file-name name version))
6251 (sha256
6252 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
6253 (build-system pyproject-build-system)
6254 ;; XXX: This version is incompatible with current tornado.testing.
6255 (arguments (list #:tests? #f))
6256 (native-inputs (list python-setuptools))
6257 (propagated-inputs (list python-tornado))
6258 (home-page "https://github.com/gvalkov/tornado-http-auth")
6259 (synopsis "Digest and basic authentication module for Tornado")
6260 (description
6261 "Provides support for adding authentication to services using the Tornado
6262web framework, either via the basic or digest authentication schemes.")
6263 (license license:asl2.0)))
6264
6265(define-public python-wsgi-intercept
6266 (package
6267 (name "python-wsgi-intercept")
6268 (version "1.13.1")
6269 (source (origin
6270 (method url-fetch)
6271 (uri (pypi-uri "wsgi_intercept" version))
6272 (sha256
6273 (base32
6274 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
6275 (build-system pyproject-build-system)
6276 (arguments
6277 (list
6278 ;; XXX: tests required internet access
6279 #:tests? #f))
6280 (propagated-inputs
6281 (list python-six))
6282 (native-inputs
6283 (list python-httplib2
6284 python-pytest
6285 python-requests
6286 python-setuptools
6287 python-urllib3
6288 python-wheel))
6289 (synopsis "Puts a WSGI application in place of a real URI for testing")
6290 (description "Wsgi_intercept installs a WSGI application in place of a real
6291URI for testing. Testing a WSGI application normally involves starting a
6292server at a local host and port, then pointing your test code to that address.
6293Instead, this library lets you intercept calls to any specific host/port
6294combination and redirect them into a WSGI application importable by your test
6295program. Thus, you can avoid spawning multiple processes or threads to test
6296your Web app.")
6297 (home-page "https://github.com/cdent/wsgi-intercept")
6298 (license license:expat)))
6299
6300(define-public python-webob
6301 (package
6302 (name "python-webob")
6303 (version "1.8.9")
6304 (source
6305 (origin
6306 (method url-fetch)
6307 (uri (pypi-uri "webob" version))
6308 (sha256
6309 (base32
6310 "12b5sl10yzzzz3g11kij3rdzk9y6583ywggc6h9nsxmnxpi7hq5d"))))
6311 (build-system pyproject-build-system)
6312 ;; tests: 2380 passed, 9 skipped, 1 xfailed, 12 warnings
6313 (native-inputs
6314 (list python-pytest
6315 python-setuptools))
6316 (home-page "https://webob.org/")
6317 (synopsis "WSGI request and response object")
6318 (description
6319 "WebOb provides wrappers around the WSGI request environment, and an
6320object to help create WSGI responses.")
6321 (license license:expat)))
6322
6323(define-public python-yewtube-search
6324 (package
6325 (name "python-yewtube-search")
6326 ;; Original repository for python-youtube-search package is archived, see:
6327 ;; <https://github.com/alexmercerind/youtube-search-python/issues/189>.
6328 ;; The most promising fork was
6329 ;; <https://github.com/ahmedayyad-dev/youtube-search-python-fork> which is
6330 ;; archived since <2026-04-04>. This is another fork with a different PyPI
6331 ;; name for python-yewtube.
6332 (version "1.6.7")
6333 (source
6334 (origin
6335 (method url-fetch)
6336 (uri (pypi-uri "yewtube_search_python" version))
6337 (sha256
6338 (base32 "0vjh4wrlqx4lv9qi6572jx2d0rsp6gkvaqf0f2ar4npdz0ldgl47"))))
6339 (build-system pyproject-build-system)
6340 (arguments (list #:tests? #f)) ;no tests in repository
6341 (native-inputs
6342 (list python-setuptools))
6343 (propagated-inputs
6344 (list python-httpx))
6345 (home-page "https://github.com/iamtalhaasghar/youtube-search-python")
6346 (synopsis "Search for YouTube videos, channels & playlists")
6347 (description
6348 "This package provides tools to search for @code{YouTube} videos,
6349channels and playlists; as well as getting video metadata from links. This
6350package does not rely on the @code{YouTube} Data API v3.")
6351 (license license:expat)))
6352
6353(define-public python-zc-lockfile
6354 (package
6355 (name "python-zc-lockfile")
6356 (version "4.0")
6357 (source
6358 (origin
6359 (method git-fetch)
6360 (uri (git-reference
6361 (url "https://github.com/zopefoundation/zc.lockfile")
6362 (commit version)))
6363 (file-name (git-file-name name version))
6364 (sha256
6365 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
6366 (build-system pyproject-build-system)
6367 (arguments
6368 (list
6369 #:phases
6370 #~(modify-phases %standard-phases
6371 (replace 'check
6372 (lambda* (#:key tests? #:allow-other-keys)
6373 (if tests?
6374 (invoke "zope-testrunner" "--test-path=src")
6375 (format #t "test suite not run~%")))))))
6376 (native-inputs (list python-zope-testing python-zope-testrunner
6377 python-setuptools))
6378 (home-page "https://github.com/zopefoundation/zc.lockfile")
6379 (synopsis "Interprocess locks using lock files")
6380 (description
6381 "This package provides an implementation of interprocess locks using lock
6382files. These locks can also be used to mediate access to other files.")
6383 (license license:zpl2.1)))
6384
6385(define-public python-zconfig
6386 (package
6387 (name "python-zconfig")
6388 (version "4.3")
6389 (source
6390 (origin
6391 (method git-fetch)
6392 (uri (git-reference
6393 (url "https://github.com/zopefoundation/ZConfig/")
6394 (commit version)))
6395 (file-name (git-file-name name version))
6396 (sha256
6397 (base32 "06c4vffk51fw03q87r31s81b0xbxg2qqvjfmcl2z4hg21fr088c2"))))
6398 (build-system pyproject-build-system)
6399 (arguments
6400 (list
6401 #:phases
6402 #~(modify-phases %standard-phases
6403 (replace 'check
6404 (lambda* (#:key tests? #:allow-other-keys)
6405 (if tests?
6406 (begin
6407 ;; This test assumes we still have setup.py in the
6408 ;; directory from which we import zconfig, which
6409 ;; does not work after installing the package.
6410 (delete-file-recursively
6411 "src/ZConfig/tests/test_readme.py")
6412 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
6413 (format #t "test suite not run~%")))))))
6414 (native-inputs (list python-docutils python-manuel python-zope-exceptions
6415 python-zope-testrunner python-setuptools))
6416 (home-page "https://github.com/zopefoundation/ZConfig/")
6417 (synopsis "Structured configuration library intended for general use")
6418 (description
6419 "@code{zconfig} is a configuration library intended for general use. It
6420supports a hierarchical schema-driven configuration model that allows a schema
6421to specify data conversion routines written in Python. Its model is very
6422different from the model supported by the @code{configparser} module found in
6423Python's standard library, and is more suitable to configuration-intensive
6424applications.")
6425 (license license:zpl2.1)))
6426
6427(define-public python-zodb
6428 (package
6429 (name "python-zodb")
6430 (version "6.0.1")
6431 (source
6432 (origin
6433 (method url-fetch)
6434 (uri (pypi-uri "zodb" version))
6435 (sha256
6436 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
6437 (build-system pyproject-build-system)
6438 (arguments
6439 (list
6440 #:phases
6441 #~(modify-phases %standard-phases
6442 (replace 'check
6443 (lambda* (#:key tests? #:allow-other-keys)
6444 (if tests?
6445 (begin
6446 ;; This test does not work after installing the
6447 ;; package, since it expects the ZODB source code
6448 ;; to reside in the src/ directory.
6449 (delete-file-recursively
6450 "src/ZODB/tests/testdocumentation.py")
6451 (invoke "zope-testrunner" "-vv" "--test-path=src"
6452 "--all"))
6453 (format #t "test suite not run~%")))))))
6454 (native-inputs
6455 (list python-manuel
6456 python-wheel
6457 python-zope-testing
6458 python-zope-testrunner))
6459 (propagated-inputs
6460 (list python-btrees
6461 python-persistent
6462 python-transaction
6463 python-zc-lockfile
6464 python-zconfig
6465 python-zodbpickle
6466 python-zope-interface))
6467 (home-page "http://zodb-docs.readthedocs.io")
6468 (synopsis "Object-oriented database for Python")
6469 (description
6470 "@code{ZODB} provides an object-oriented and @acronym{ACID,
6471Atomicity Consistency Isolation Durability} compliant database for Python with
6472a high degree of transparency. @code{ZODB} is an object-oriented database,
6473not an object-relational mapping. This comes with several advantaged:
6474
6475@itemize
6476@item no separate language for database operations
6477@item very little impact on your code to make objects persistent
6478@item no database mapper that partially hides the database.
6479@item almost no seam between code and database.
6480@end itemize")
6481 (license license:zpl2.1)))
6482
6483(define-public python-zodbpickle
6484 (package
6485 (name "python-zodbpickle")
6486 (version "3.2")
6487 (source
6488 (origin
6489 (method url-fetch)
6490 (uri (pypi-uri "zodbpickle" version))
6491 (sha256
6492 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
6493 (build-system pyproject-build-system)
6494 (arguments
6495 '(#:phases (modify-phases %standard-phases
6496 (replace 'check
6497 (lambda* (#:key tests? #:allow-other-keys)
6498 (if tests?
6499 (invoke "zope-testrunner" "-vv" "--test-path=src"
6500 "--all")
6501 (format #t "test suite not run~%")))))))
6502 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
6503 (home-page "https://github.com/zopefoundation/zodbpickle")
6504 (synopsis "Uniform pickling interface for @code{zodb}")
6505 (description
6506 "This package is a fork of the @code{pickle} module (and the
6507supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
6508support for the @code{noload} operations used by @code{zodb}.")
6509 (license (list license:psfl license:zpl2.1))))
6510
6511(define-public python-zope-dottedname
6512 (package
6513 (name "python-zope-dottedname")
6514 (version "7.0")
6515 (source
6516 (origin
6517 (method git-fetch)
6518 (uri (git-reference
6519 (url "https://github.com/zopefoundation/zope.dottedname")
6520 (commit version)))
6521 (file-name (git-file-name name version))
6522 (sha256
6523 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
6524 (build-system pyproject-build-system)
6525 (arguments
6526 (list #:test-backend #~'custom
6527 #:test-flags #~(list "src/zope/dottedname/tests.py")))
6528 (native-inputs (list python-setuptools))
6529 (home-page "https://zopedottedname.readthedocs.io")
6530 (synopsis "Resolver for Python dotted names")
6531 (description
6532 "This package provides a @code{resolve()} function that resolves strings
6533containing dotted names into the appropriate Python object.")
6534 (license license:zpl2.1)))
6535
6536(define-public python-zope-event
6537 (package
6538 (name "python-zope-event")
6539 (version "6.0")
6540 (source
6541 (origin
6542 (method git-fetch)
6543 (uri (git-reference
6544 (url "https://github.com/zopefoundation/zope.event")
6545 (commit version)))
6546 (file-name (git-file-name name version))
6547 (sha256
6548 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
6549 (build-system pyproject-build-system)
6550 (arguments
6551 (list
6552 #:test-flags
6553 #~(list "src/zope/event/tests.py")))
6554 (native-inputs (list python-pytest python-setuptools))
6555 (home-page "https://zopeevent.readthedocs.io/en/latest/")
6556 (synopsis "Event publishing system for Python")
6557 (description
6558 "Zope.event provides an event publishing API, intended for use by
6559applications which are unaware of any subscribers to their events. It is a
6560simple event-dispatching system on which more sophisticated event dispatching
6561systems can be built.")
6562 (license license:zpl2.1)))
6563
6564(define-public python-zope-interface
6565 (package
6566 (name "python-zope-interface")
6567 (version "7.2")
6568 (source
6569 (origin
6570 (method git-fetch)
6571 (uri (git-reference
6572 (url "https://github.com/zopefoundation/zope.interface")
6573 (commit version)))
6574 (file-name (git-file-name name version))
6575 (sha256
6576 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
6577 (build-system pyproject-build-system)
6578 (arguments
6579 ;; XXX: test suite can't find python-zope-testing
6580 (list #:tests? #f))
6581 (native-inputs (list python-setuptools))
6582 (home-page "https://zopeinterface.readthedocs.io")
6583 (synopsis "\"Design by contract\" methodology in Python")
6584 (description
6585 "Zope.interface provides an implementation of \"object interfaces\" for
6586Python. Interfaces are a mechanism for labeling objects as conforming to a
6587given API or contract.")
6588 (license license:zpl2.1)))
6589
6590(define-public python-zope-exceptions
6591 (package
6592 (name "python-zope-exceptions")
6593 (version "6.0")
6594 (source
6595 (origin
6596 (method git-fetch)
6597 (uri (git-reference
6598 (url "https://github.com/zopefoundation/zope.exceptions")
6599 (commit version)))
6600 (file-name (git-file-name name version))
6601 (sha256
6602 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
6603 (build-system pyproject-build-system)
6604 (arguments
6605 (list
6606 #:phases
6607 #~(modify-phases %standard-phases
6608 (replace 'check
6609 (lambda* (#:key tests? #:allow-other-keys)
6610 (if tests?
6611 (invoke "zope-testrunner" "--test-path=src")
6612 (format #t "test suite not run~%")))))))
6613 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
6614 (propagated-inputs (list python-zope-interface))
6615 (home-page "https://github.com/zopefoundation/zope.exceptions")
6616 (synopsis "Zope exceptions")
6617 (description
6618 "Zope.exceptions provides general-purpose exception types that have uses
6619outside of the Zope framework.")
6620 (license license:zpl2.1)))
6621
6622(define (python-zope-bootstrap-package orig)
6623 (package
6624 (inherit orig)
6625 (name (string-append (package-name orig) "-bootstrap"))
6626 (arguments
6627 (if (null? (package-arguments orig))
6628 (list
6629 #:tests? #f
6630 #:phases #~(modify-phases %standard-phases
6631 (delete 'sanity-check)))
6632 (substitute-keyword-arguments arguments
6633 ((#:tests? _ #f) #f)
6634 ((#:phases phases '%standard-phases)
6635 #~(modify-phases #$phases
6636 (delete 'sanity-check))))))
6637 (propagated-inputs `())
6638 (native-inputs (list python-setuptools))
6639 (properties `((hidden? . #t)))))
6640
6641(define-public python-zope-exceptions-bootstrap
6642 (python-zope-bootstrap-package python-zope-exceptions))
6643
6644(define-public python-zope-testing
6645 (package
6646 (name "python-zope-testing")
6647 (version "6.0")
6648 (source
6649 (origin
6650 (method git-fetch)
6651 (uri (git-reference
6652 (url "https://github.com/zopefoundation/zope.testing")
6653 (commit version)))
6654 (file-name (git-file-name name version))
6655 (sha256
6656 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
6657 (build-system pyproject-build-system)
6658 (arguments
6659 (list
6660 #:phases
6661 #~(modify-phases %standard-phases
6662 (replace 'check
6663 (lambda* (#:key tests? #:allow-other-keys)
6664 (if tests?
6665 (invoke "zope-testrunner" "--test-path=src")
6666 (format #t "test suite not run~%")))))))
6667 (native-inputs (list python-setuptools
6668 python-zope-interface
6669 python-zope-testrunner-bootstrap))
6670 (home-page "https://zopetesting.readthedocs.io/")
6671 (synopsis "Zope testing helpers")
6672 (description
6673 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
6674servers, regular expressions, and more.")
6675 (license license:zpl2.1)))
6676
6677(define-public python-zope-testrunner
6678 (package
6679 (name "python-zope-testrunner")
6680 (version "7.4")
6681 (source
6682 (origin
6683 (method git-fetch)
6684 (uri (git-reference
6685 (url "https://github.com/zopefoundation/zope.testrunner")
6686 (commit version)))
6687 (file-name (git-file-name name version))
6688 (sha256
6689 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
6690 (build-system pyproject-build-system)
6691 (arguments
6692 (list
6693 #:phases
6694 #~(modify-phases %standard-phases
6695 (add-after 'unpack 'remove-problematic-test
6696 (lambda _
6697 ;; This test contains invalid syntax, which breaks bytecode
6698 ;; compilation. For simplicity just remove it.
6699 (delete-file
6700 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
6701 (replace 'check
6702 (lambda* (#:key tests? #:allow-other-keys)
6703 (if tests?
6704 (invoke "zope-testrunner" "--test-path=src")
6705 (format #t "test suite not run~%")))))))
6706 (native-inputs (list python-setuptools python-zope-testing))
6707 (propagated-inputs (list python-zope-exceptions python-zope-interface))
6708 (home-page "https://zopetestrunner.readthedocs.io")
6709 (synopsis "Zope testrunner script")
6710 (description "This package provides a script for running Python tests.")
6711 (license license:zpl2.1)))
6712
6713(define-public python-zope-testrunner-bootstrap
6714 (package
6715 (inherit (python-zope-bootstrap-package python-zope-testrunner))
6716 (propagated-inputs
6717 (list python-six python-zope-exceptions-bootstrap))
6718 (properties `((hidden? . #t)))))
6719
6720(define-public python-zope-i18nmessageid
6721 (package
6722 (name "python-zope-i18nmessageid")
6723 (version "7.0")
6724 (source
6725 (origin
6726 (method git-fetch)
6727 (uri (git-reference
6728 (url "https://github.com/zopefoundation/zope.i18nmessageid")
6729 (commit version)))
6730 (file-name (git-file-name name version))
6731 (sha256
6732 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
6733 (build-system pyproject-build-system)
6734 (arguments
6735 (list
6736 #:phases
6737 #~(modify-phases %standard-phases
6738 (replace 'check
6739 (lambda* (#:key tests? #:allow-other-keys)
6740 (if tests?
6741 (invoke "zope-testrunner" "--test-path=src")
6742 (format #t "test suite not run~%")))))))
6743 (native-inputs (list python-setuptools python-zope-testrunner))
6744 (home-page "https://zopei18nmessageid.readthedocs.io")
6745 (synopsis "Message identifiers for internationalization")
6746 (description "Zope.i18nmessageid provides facilities for declaring
6747internationalized messages within program source text.")
6748 (license license:zpl2.1)))
6749
6750(define-public python-zope-schema
6751 (package
6752 (name "python-zope-schema")
6753 (version "7.0.1")
6754 (source
6755 (origin
6756 (method git-fetch)
6757 (uri (git-reference
6758 (url "https://github.com/zopefoundation/zope.schema")
6759 (commit version)))
6760 (file-name (git-file-name name version))
6761 (sha256
6762 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
6763 (build-system pyproject-build-system)
6764 (arguments
6765 (list
6766 #:phases
6767 #~(modify-phases %standard-phases
6768 (replace 'check
6769 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6770 (add-installed-pythonpath inputs outputs)
6771 (if tests?
6772 (invoke "zope-testrunner" "--test-path=src")
6773 (format #t "test suite not run.~%")))))))
6774 (propagated-inputs (list python-zope-event python-zope-interface))
6775 (native-inputs (list python-zope-i18nmessageid python-zope-testing
6776 python-zope-testrunner python-setuptools))
6777 (home-page "https://zopeschema.readthedocs.io")
6778 (synopsis "Zope data schemas")
6779 (description "Zope.scheme provides extensions to zope.interface for
6780defining data schemas.")
6781 (license license:zpl2.1)))
6782
6783(define-public python-zope-sqlalchemy
6784 (package
6785 (name "python-zope-sqlalchemy")
6786 (version "1.6")
6787 (source
6788 (origin
6789 (method git-fetch)
6790 (uri (git-reference
6791 (url "https://github.com/zopefoundation/zope.sqlalchemy")
6792 (commit version)))
6793 (file-name (git-file-name name version))
6794 (sha256
6795 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
6796 (build-system pyproject-build-system)
6797 (arguments
6798 (list
6799 #:phases
6800 #~(modify-phases %standard-phases
6801 (replace 'check
6802 (lambda* (#:key tests? #:allow-other-keys)
6803 (if tests?
6804 (invoke "zope-testrunner" "--test-path=src")
6805 (format #t "test suite not run~%")))))))
6806 (propagated-inputs (list python-sqlalchemy python-transaction
6807 python-zope-interface))
6808 (native-inputs (list python-zope-testing python-zope-testrunner
6809 python-setuptools))
6810 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
6811 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
6812 (description
6813 "The aim of this package is to unify the plethora of existing packages
6814integrating SQLAlchemy with Zope's transaction management. As such,it only
6815provides a data manager and makes no attempt to define a @i{zopeish} way to
6816configure engines.")
6817 (license license:zpl2.1)))
6818
6819(define-public python-zope-configuration
6820 (package
6821 (name "python-zope-configuration")
6822 (version "7.0")
6823 (source
6824 (origin
6825 (method git-fetch)
6826 (uri (git-reference
6827 (url "https://github.com/zopefoundation/zope.configuration")
6828 (commit version)))
6829 (file-name (git-file-name name version))
6830 (sha256
6831 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
6832 (build-system pyproject-build-system)
6833 (arguments
6834 (list
6835 #:phases
6836 #~(modify-phases %standard-phases
6837 (replace 'check
6838 (lambda* (#:key tests? #:allow-other-keys)
6839 (if tests?
6840 (invoke "zope-testrunner" "--test-path=src")
6841 (format #t "test suite not run~%")))))))
6842 (native-inputs (list python-manuel python-setuptools python-zope-testing
6843 python-zope-testrunner))
6844 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
6845 python-zope-schema))
6846 (home-page "https://zopeconfiguration.readthedocs.io")
6847 (synopsis "Zope Configuration Markup Language")
6848 (description "Zope.configuration implements ZCML, the Zope Configuration
6849Markup Language.")
6850 (license license:zpl2.1)))
6851
6852(define-public python-zope-configuration-bootstrap
6853 (python-zope-bootstrap-package python-zope-configuration))
6854
6855(define-public python-zope-copy
6856 (package
6857 (name "python-zope-copy")
6858 (version "6.0")
6859 (source
6860 (origin
6861 (method git-fetch)
6862 (uri (git-reference
6863 (url "https://github.com/zopefoundation/zope.copy")
6864 (commit version)))
6865 (file-name (git-file-name name version))
6866 (sha256
6867 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
6868 (build-system pyproject-build-system)
6869 (arguments
6870 (list
6871 #:phases
6872 #~(modify-phases %standard-phases
6873 (replace 'check
6874 (lambda* (#:key tests? #:allow-other-keys)
6875 (if tests?
6876 (invoke "zope-testrunner" "--test-path=src")
6877 (format #t "test suite not run~%")))))))
6878 (propagated-inputs (list python-zope-interface))
6879 (native-inputs
6880 (list python-zodbpickle
6881 python-zope-component-bootstrap
6882 python-zope-location-bootstrap
6883 python-zope-proxy
6884 python-zope-schema
6885 python-zope-testing
6886 python-zope-testrunner
6887 python-setuptools))
6888 (home-page "https://zopecopy.readthedocs.io")
6889 (synopsis "Pluggable object copying mechanism")
6890 (description
6891 "This package provides a pluggable mechanism for copying persistent objects.")
6892 (license license:zpl2.1)))
6893
6894(define-public python-zope-proxy
6895 (package
6896 (name "python-zope-proxy")
6897 (version "7.0")
6898 (source
6899 (origin
6900 (method git-fetch)
6901 (uri (git-reference
6902 (url "https://github.com/zopefoundation/zope.proxy")
6903 (commit version)))
6904 (file-name (git-file-name name version))
6905 (sha256
6906 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
6907 (build-system pyproject-build-system)
6908 (arguments
6909 (list
6910 #:phases
6911 #~(modify-phases %standard-phases
6912 (replace 'check
6913 (lambda* (#:key tests? #:allow-other-keys)
6914 (if tests?
6915 (invoke "zope-testrunner" "--test-path=src")
6916 (format #t "test suite not run~%")))))))
6917 (native-inputs
6918 (list python-zope-location-bootstrap
6919 python-zope-security-bootstrap
6920 python-zope-testrunner
6921 python-setuptools))
6922 (propagated-inputs (list python-zope-interface))
6923 (home-page "https://zopeproxy.readthedocs.io")
6924 (synopsis "Generic, transparent proxies")
6925 (description
6926 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
6927special objects which serve as mostly-transparent wrappers around another
6928object, intervening in the apparent behavior of the wrapped object only when
6929necessary to apply the policy (e.g., access checking, location brokering,
6930etc.) for which the proxy is responsible.")
6931 (license license:zpl2.1)))
6932
6933(define-public python-zope-proxy-bootstrap
6934 (python-zope-bootstrap-package python-zope-proxy))
6935
6936(define-public python-zope-hookable
6937 (package
6938 (name "python-zope-hookable")
6939 (version "7.0")
6940 (source
6941 (origin
6942 (method git-fetch)
6943 (uri (git-reference
6944 (url "https://github.com/zopefoundation/zope.hookable")
6945 (commit version)))
6946 (file-name (git-file-name name version))
6947 (sha256
6948 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
6949 (build-system pyproject-build-system)
6950 (arguments
6951 (list
6952 #:phases
6953 #~(modify-phases %standard-phases
6954 (replace 'check
6955 (lambda* (#:key tests? #:allow-other-keys)
6956 (if tests?
6957 (invoke "zope-testrunner" "--test-path=src")
6958 (format #t "test suite not run~%")))))))
6959 (native-inputs (list python-zope-testing python-zope-testrunner
6960 python-setuptools))
6961 (home-page "https://zopehookable.readthedocs.io")
6962 (synopsis "Zope hookable")
6963 (description
6964 "This package supports the efficient creation of hookable objects, which
6965are callable objects that are meant to be optionally replaced. The idea is
6966that you create a function that does some default thing and make i hookable.
6967Later, someone can modify what it does by calling its sethook method and
6968changing its implementation. All users of the function, including those that
6969imported it, will see the change.")
6970 (license license:zpl2.1)))
6971
6972(define-public python-zope-location
6973 (package
6974 (name "python-zope-location")
6975 (version "6.0")
6976 (source
6977 (origin
6978 (method git-fetch)
6979 (uri (git-reference
6980 (url "https://github.com/zopefoundation/zope.location")
6981 (commit version)))
6982 (file-name (git-file-name name version))
6983 (sha256
6984 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
6985 (build-system pyproject-build-system)
6986 (arguments
6987 (list
6988 #:phases
6989 #~(modify-phases %standard-phases
6990 (replace 'check
6991 (lambda* (#:key tests? #:allow-other-keys)
6992 (if tests?
6993 (invoke "zope-testrunner" "--test-path=src")
6994 (format #t "test suite not run~%")))))))
6995 (native-inputs (list python-zope-testrunner python-setuptools))
6996 (propagated-inputs (list python-zope-interface python-zope-proxy
6997 python-zope-schema))
6998 (home-page "https://zopelocation.readthedocs.io")
6999 (synopsis "Zope location library")
7000 (description
7001 "Zope.location implements the concept of \"locations\" in Zope3, which
7002are are special objects that have a structural location.")
7003 (license license:zpl2.1)))
7004
7005(define-public python-zope-location-bootstrap
7006 (python-zope-bootstrap-package python-zope-location))
7007
7008(define-public python-zope-security
7009 (package
7010 (name "python-zope-security")
7011 (version "7.3")
7012 (source
7013 (origin
7014 (method git-fetch)
7015 (uri (git-reference
7016 (url "https://github.com/zopefoundation/zope.security")
7017 (commit version)))
7018 (file-name (git-file-name name version))
7019 (sha256
7020 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
7021 (build-system pyproject-build-system)
7022 (arguments
7023 (list
7024 #:phases
7025 #~(modify-phases %standard-phases
7026 (replace 'check
7027 (lambda* (#:key tests? #:allow-other-keys)
7028 (if tests?
7029 (invoke "zope-testrunner" "--test-path=src")
7030 (format #t "test suite not run~%")))))))
7031 (propagated-inputs
7032 (list python-zope-component
7033 python-zope-i18nmessageid
7034 python-zope-interface
7035 python-zope-location
7036 python-zope-proxy
7037 python-zope-schema))
7038 (native-inputs
7039 (list python-btrees
7040 python-zope-component-bootstrap
7041 python-zope-configuration-bootstrap
7042 python-zope-location-bootstrap
7043 python-zope-testing
7044 python-zope-testrunner
7045 python-setuptools))
7046 (home-page "https://zopesecurity.readthedocs.io")
7047 (synopsis "Zope security framework")
7048 (description "Zope.security provides a generic mechanism to implement
7049security policies on Python objects.")
7050 (license license:zpl2.1)))
7051
7052(define-public python-zope-security-bootstrap
7053 (package
7054 (inherit (python-zope-bootstrap-package python-zope-security))
7055 (propagated-inputs
7056 (list python-zope-i18nmessageid
7057 python-zope-interface
7058 python-zope-proxy-bootstrap
7059 python-zope-schema))))
7060
7061(define-public python-zope-component
7062 (package
7063 (name "python-zope-component")
7064 (version "7.0")
7065 (source
7066 (origin
7067 (method git-fetch)
7068 (uri (git-reference
7069 (url "https://github.com/zopefoundation/zope.component")
7070 (commit version)))
7071 (file-name (git-file-name name version))
7072 (sha256
7073 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
7074 (build-system pyproject-build-system)
7075 (arguments
7076 (list
7077 #:phases
7078 #~(modify-phases %standard-phases
7079 (replace 'check
7080 (lambda* (#:key tests? #:allow-other-keys)
7081 (if tests?
7082 (invoke "zope-testrunner" "--test-path=src")
7083 (format #t "test suite not run~%")))))))
7084 (native-inputs
7085 (list python-persistent
7086 python-zope-configuration-bootstrap
7087 python-zope-i18nmessageid
7088 python-zope-location-bootstrap
7089 python-zope-proxy-bootstrap
7090 python-zope-security-bootstrap
7091 python-zope-testing
7092 python-zope-testrunner
7093 python-setuptools))
7094 (propagated-inputs
7095 (list python-zope-deferredimport python-zope-deprecation
7096 python-zope-event python-zope-hookable python-zope-interface))
7097 (home-page "https://zopecomponent.readthedocs.io")
7098 (synopsis "Zope Component Architecture")
7099 (description
7100 "Zope.component represents the core of the Zope Component Architecture.
7101Together with the zope.interface package, it provides facilities for defining,
7102registering and looking up components.")
7103 (license license:zpl2.1)))
7104
7105(define-public python-zope-component-bootstrap
7106 (python-zope-bootstrap-package python-zope-component))
7107
7108(define-public python-zope-deferredimport
7109 (package
7110 (name "python-zope-deferredimport")
7111 (version "6.0")
7112 (source
7113 (origin
7114 (method git-fetch)
7115 (uri (git-reference
7116 (url "https://github.com/zopefoundation/zope.deferredimport")
7117 (commit version)))
7118 (file-name (git-file-name name version))
7119 (sha256
7120 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
7121 (build-system pyproject-build-system)
7122 (arguments
7123 (list
7124 #:phases
7125 #~(modify-phases %standard-phases
7126 (replace 'check
7127 (lambda* (#:key tests? #:allow-other-keys)
7128 (if tests?
7129 (invoke "zope-testrunner" "--test-path=src")
7130 (format #t "test suite not run~%")))))))
7131 (propagated-inputs (list python-zope-proxy))
7132 (native-inputs (list python-zope-testrunner python-setuptools))
7133 (home-page "https://zopedeferredimport.readthedocs.io")
7134 (synopsis "Defer imports until used by code")
7135 (description
7136 "Often, especially for package modules, you want to import names for
7137convenience, but not actually perform the imports until necessary. The
7138@code{zope.deferredimport} package provided facilities for defining names in
7139modules that will be imported from somewhere else when used. You can also cause
7140deprecation warnings to be issued when a variable is used.")
7141 (license license:zpl2.1)))
7142
7143(define-public python-ndg-httpsclient
7144 (package
7145 (name "python-ndg-httpsclient")
7146 (version "0.5.1")
7147 (source
7148 (origin
7149 (method git-fetch)
7150 (uri (git-reference
7151 (url "https://github.com/cedadev/ndg_httpsclient/")
7152 (commit version)))
7153 (file-name (git-file-name name version))
7154 (sha256
7155 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
7156 (build-system pyproject-build-system)
7157 (arguments
7158 (list
7159 #:tests? #f)) ;Tests appear to require networking.
7160 (native-inputs (list python-setuptools))
7161 (propagated-inputs (list python-pyasn1 python-pyopenssl))
7162 (synopsis "HTTPS support for Python's httplib and urllib2")
7163 (description
7164 "This is a HTTPS client implementation for httplib and urllib2 based on
7165PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
7166the default provided with Python and, importantly, enables full verification
7167of the SSL peer.")
7168 (home-page "https://github.com/cedadev/ndg_httpsclient/")
7169 (license license:bsd-3)))
7170
7171(define-public python-netaddr
7172 (package
7173 (name "python-netaddr")
7174 (version "1.3.0")
7175 (source
7176 (origin
7177 (method url-fetch)
7178 (uri (pypi-uri "netaddr" version))
7179 (sha256
7180 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
7181 (build-system pyproject-build-system)
7182 (native-inputs (list python-poetry-core
7183 python-pytest
7184 python-setuptools
7185 python-wheel))
7186 (home-page "https://netaddr.readthedocs.io")
7187 (synopsis "Pythonic manipulation of network addresses")
7188 (description
7189 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
7190and MAC network addresses.")
7191 (license license:bsd-3)))
7192
7193(define-public python-nh3
7194 (package
7195 (name "python-nh3")
7196 (version "0.2.20")
7197 (source
7198 (origin
7199 (method url-fetch)
7200 (uri (pypi-uri "nh3" version))
7201 (sha256
7202 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
7203 (build-system pyproject-build-system)
7204 (arguments
7205 (list
7206 #:imported-modules `(,@%cargo-build-system-modules
7207 ,@%pyproject-build-system-modules)
7208 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
7209 (guix build pyproject-build-system)
7210 (guix build utils))
7211 #:phases
7212 #~(modify-phases %standard-phases
7213 (add-after 'unpack 'prepare-cargo-build-system
7214 (lambda args
7215 (for-each
7216 (lambda (phase)
7217 (format #t "Running cargo phase: ~a~%" phase)
7218 (apply (assoc-ref cargo:%standard-phases phase)
7219 #:cargo-target #$(cargo-triplet)
7220 args))
7221 '(unpack-rust-crates
7222 configure
7223 check-for-pregenerated-files
7224 patch-cargo-checksums)))))))
7225 (native-inputs
7226 (append
7227 (list maturin python-pytest rust `(,rust "cargo"))
7228 (or (and=> (%current-target-system)
7229 (compose list make-rust-sysroot))
7230 '())))
7231 (inputs (cargo-inputs 'python-nh3))
7232 (home-page "https://nh3.readthedocs.io")
7233 (synopsis "Python bindings to Ammonia HTML sanitization library")
7234 (description "This package provides Python bindings to Ammonia HTML
7235sanitizer Rust crate.")
7236 (license license:expat)))
7237
7238(define-public python-noiseprotocol
7239 (package
7240 (name "python-noiseprotocol")
7241 (version "0.3.1")
7242 (source
7243 (origin
7244 (method git-fetch)
7245 (uri (git-reference
7246 (url "https://github.com/plizonczyk/noiseprotocol")
7247 (commit (string-append "v" version))))
7248 (file-name (git-file-name name version))
7249 (sha256
7250 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
7251 (build-system pyproject-build-system)
7252 (propagated-inputs (list python-cryptography))
7253 (native-inputs (list python-setuptools python-pytest))
7254 (home-page "https://github.com/plizonczyk/noiseprotocol")
7255 (synopsis "Implementation of Noise Protocol Framework")
7256 (description
7257 "This package provides an implementation of Noise Protocol Framework.")
7258 (license license:expat)))
7259
7260(define-public python-webrtcvad-wheels
7261 (package
7262 (name "python-webrtcvad-wheels")
7263 (version "2.0.14")
7264 (source
7265 (origin
7266 (method git-fetch)
7267 (uri (git-reference
7268 (url "https://github.com/daanzu/py-webrtcvad-wheels")
7269 (commit (string-append "v" version))))
7270 (file-name (git-file-name name version))
7271 (sha256
7272 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
7273 (build-system pyproject-build-system)
7274 (native-inputs (list python-psutil python-pytest python-setuptools))
7275 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
7276 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
7277 (description
7278 "This package provides a Python interface to the Google
7279@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
7280 (license license:expat)))
7281
7282(define-public python-websocket-client
7283 (package
7284 (name "python-websocket-client")
7285 (version "1.8.0")
7286 (source
7287 (origin
7288 (method url-fetch)
7289 (uri (pypi-uri "websocket_client" version))
7290 (sha256
7291 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
7292 (build-system pyproject-build-system)
7293 (arguments
7294 (list
7295 #:test-flags
7296 ;; This test requires networking.
7297 '(list "-k" "not testConnect")))
7298 (native-inputs
7299 (list python-pysocks
7300 python-pytest
7301 python-setuptools
7302 python-websockets
7303 python-wheel))
7304 (home-page "https://github.com/websocket-client/websocket-client")
7305 (synopsis "WebSocket client for Python")
7306 (description "The Websocket-client module provides the low level APIs for
7307WebSocket usage in Python programs.")
7308 (license license:lgpl2.1+)))
7309
7310(define-public python-websocket-client-0.59
7311 (package
7312 (inherit python-websocket-client)
7313 (version "0.59.0")
7314 (source
7315 (origin
7316 (method url-fetch)
7317 (uri (pypi-uri "websocket-client" version))
7318 (sha256
7319 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
7320 (native-inputs
7321 (modify-inputs native-inputs
7322 (append python-six)))))
7323
7324(define-public python-purl
7325 (package
7326 (name "python-purl")
7327 (version "1.6")
7328 (source
7329 (origin
7330 (method git-fetch)
7331 (uri (git-reference
7332 (url "https://github.com/codeinthehole/purl")
7333 (commit version)))
7334 (file-name (git-file-name name version))
7335 (sha256
7336 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
7337 (build-system pyproject-build-system)
7338 (arguments
7339 (list
7340 #:test-flags #~(list "--pyargs" "./tests")))
7341 (native-inputs (list python-pytest python-setuptools))
7342 (propagated-inputs (list python-six))
7343 (home-page "https://github.com/codeinthehole/purl")
7344 (synopsis "Python package for URL manipulation")
7345 (description "Purl is a Python package for handling URLs.")
7346 (license license:expat)))
7347
7348(define-public python-apiron
7349 (package
7350 (name "python-apiron")
7351 (version "5.1.0")
7352 (source
7353 (origin
7354 (method url-fetch)
7355 (uri (pypi-uri "apiron" version))
7356 (sha256
7357 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
7358 (build-system pyproject-build-system)
7359 (arguments
7360 (list #:test-flags '(list "-k" "not test_call")))
7361 (propagated-inputs
7362 (list python-requests))
7363 (native-inputs
7364 (list python-pytest
7365 python-setuptools
7366 python-wheel))
7367 (home-page "https://github.com/ithaka/apiron")
7368 (synopsis "Python wrapper for interacting with RESTful APIs")
7369 (description
7370 "@code{apiron} provides a declarative, structured configuration of
7371services and endpoints with a unified interface for interacting with RESTful
7372APIs.")
7373 (license license:expat)))
7374
7375(define-public python-beren
7376 (package
7377 (name "python-beren")
7378 (version "0.7.0")
7379 (source
7380 (origin
7381 (method git-fetch)
7382 (uri (git-reference
7383 (url "https://github.com/teffalump/beren")
7384 (commit (string-append "v" version))))
7385 (file-name (git-file-name name version))
7386 (sha256
7387 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
7388 (build-system pyproject-build-system)
7389 (arguments
7390 ;; The test tries to open a connection to a remote server.
7391 `(#:tests? #f))
7392 (native-inputs (list python-setuptools))
7393 (propagated-inputs (list python-apiron))
7394 (home-page "https://github.com/teffalump/beren")
7395 (synopsis "REST client for Orthanc DICOM servers")
7396 (description
7397 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
7398 (license license:gpl3+)))
7399
7400(define-public python-requests
7401 (package
7402 (name "python-requests")
7403 (version "2.32.5")
7404 (source (origin
7405 (method url-fetch)
7406 (uri (pypi-uri "requests" version))
7407 (sha256
7408 (base32
7409 "1kypqz701x9s7j4shm1pdnzy4pzx9lmvhwgan0yqa071asn0pfnv"))))
7410 (build-system pyproject-build-system)
7411 (arguments
7412 (list #:test-flags
7413 ;; These require internet access
7414 '(list "--ignore=tests/test_requests.py"
7415 "-k" (string-append "not test_use_proxy_from_environment"
7416 " and not requests.sessions.Session"
7417 " and not requests.models.PreparedRequest"
7418 " and not requests.api.request")
7419 "tests/")))
7420 (propagated-inputs
7421 (list python-certifi
7422 python-charset-normalizer
7423 python-idna
7424 python-urllib3))
7425 (native-inputs
7426 (list python-pytest
7427 python-pytest-mock
7428 python-setuptools))
7429 (home-page "https://requests.readthedocs.io/")
7430 (synopsis "Python HTTP library")
7431 (description
7432 "Requests is a Python HTTP client library. It aims to be easier to use
7433than Python’s urllib2 library.")
7434 (license license:asl2.0)))
7435
7436(define-public python-requests-kerberos
7437 (package
7438 (name "python-requests-kerberos")
7439 (version "0.14.0")
7440 ;; No tests in the PyPI tarball.
7441 (source
7442 (origin
7443 (method git-fetch)
7444 (uri (git-reference
7445 (url "https://github.com/requests/requests-kerberos")
7446 (commit (string-append "v" version))))
7447 (file-name (git-file-name name version))
7448 (sha256
7449 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
7450 (build-system pyproject-build-system)
7451 (propagated-inputs (list python-cryptography
7452 python-pyspnego
7453 python-requests))
7454 (native-inputs (list python-pytest python-pytest-mock python-setuptools
7455 python-wheel))
7456 (home-page "https://github.com/requests/requests-kerberos")
7457 (synopsis "Kerberos authentication handler for python-requests")
7458 (description "This package provides a Kerberos authentication handler for
7459python-requests.")
7460 (license license:isc)))
7461
7462(define-public python-requests-unixsocket2
7463 (package
7464 (name "python-requests-unixsocket2")
7465 (version "1.0.1")
7466 (source
7467 (origin
7468 (method git-fetch)
7469 (uri (git-reference
7470 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
7471 (commit (string-append "v" version))))
7472 (sha256
7473 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
7474 (build-system pyproject-build-system)
7475 (native-inputs
7476 (list nss-certs-for-test
7477 python-hatchling
7478 python-pytest
7479 python-waitress))
7480 (propagated-inputs
7481 (list python-requests
7482 python-urllib3))
7483 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
7484 (synopsis "Talk HTTP via a UNIX domain socket")
7485 (description
7486 "This Python package lets you use the @code{requests} library to talk
7487HTTP via a UNIX domain socket.")
7488 (license license:asl2.0)))
7489
7490(define-public python-requests-ntlm
7491 (package
7492 (name "python-requests-ntlm")
7493 (version "1.3.0")
7494 (source
7495 (origin
7496 (method git-fetch)
7497 (uri (git-reference
7498 (url "https://github.com/requests/requests-ntlm")
7499 (commit (string-append "v" version))))
7500 (file-name (git-file-name name version))
7501 (sha256
7502 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
7503 (build-system pyproject-build-system)
7504 (arguments
7505 (list
7506 #:test-flags
7507 ;; XXX: Connection refused.
7508 #~(list "-k" (string-join
7509 (list "not test_ntlm_http_with_cbt"
7510 "test_ntlm_http_without_cbt"
7511 "test_ntlm_https_with_cbt"
7512 "test_ntlm_https_without_cbt")
7513 " and not "))
7514 #:phases
7515 #~(modify-phases %standard-phases
7516 (add-before 'check 'spawn-test-server
7517 (lambda _
7518 ;; Taken from .github/workflows/ci.yml.
7519 (spawn "python"
7520 (list "python" "-m" "tests.test_server")))))))
7521 (propagated-inputs
7522 (list python-cryptography python-pyspnego python-requests))
7523 (native-inputs (list python-flask python-pytest python-setuptools))
7524 (home-page "https://github.com/requests/requests-ntlm")
7525 (synopsis "NTLM authentication support for Requests")
7526 (description
7527 "This package allows for HTTP NTLM authentication using the requests
7528library.")
7529 (license license:isc)))
7530
7531(define-public python-requests-mock
7532 (package
7533 (name "python-requests-mock")
7534 (version "1.12.1")
7535 (source
7536 (origin
7537 (method url-fetch)
7538 (uri (pypi-uri "requests-mock" version))
7539 (sha256
7540 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
7541 (build-system pyproject-build-system)
7542 (native-inputs
7543 (list python-purl
7544 python-pytest
7545 python-requests-futures
7546 python-setuptools
7547 python-setuptools-scm
7548 python-testtools))
7549 (propagated-inputs
7550 (list python-requests))
7551 (home-page "https://requests-mock.readthedocs.org/")
7552 (synopsis "Mock out responses from the requests package")
7553 (description
7554 "This module provides a building block to stub out the HTTP requests
7555portions of your testing code.")
7556 (license license:asl2.0)))
7557
7558(define-public python-requests-toolbelt
7559 (package
7560 (name "python-requests-toolbelt")
7561 (version "1.0.0")
7562 (source
7563 (origin
7564 (method url-fetch)
7565 (uri (pypi-uri "requests-toolbelt" version))
7566 (sha256
7567 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
7568 (build-system pyproject-build-system)
7569 (arguments
7570 (list
7571 #:test-flags
7572 ;; Requiring networking or fail due not valid certs: AttributeError:
7573 ;; 'MockHTTPResponse' object has no attribute 'close'
7574 #~(list "-k" (string-append "not test_dump_all"
7575 " and not test_dump_response"
7576 " and not test_prepared_request_override_base"
7577 " and not test_prepared_request_with_base"
7578 " and not test_request_override_base"
7579 " and not test_request_with_base"))))
7580 (native-inputs
7581 (list python-betamax
7582 python-mock
7583 python-pyopenssl
7584 python-pytest
7585 python-setuptools
7586 python-trustme
7587 python-wheel))
7588 (propagated-inputs
7589 (list python-requests))
7590 (synopsis "Extensions to python-requests")
7591 (description "This is a toolbelt of useful classes and functions to be used
7592with python-requests.")
7593 (home-page "https://github.com/requests/toolbelt/")
7594 (license license:asl2.0)))
7595
7596(define-public python-requests-ftp
7597 (package
7598 (name "python-requests-ftp")
7599 (version "0.3.1")
7600 (source
7601 (origin
7602 (method git-fetch)
7603 (uri (git-reference
7604 (url "https://github.com/Lukasa/requests-ftp")
7605 (commit (string-append "v" version))))
7606 (file-name (git-file-name name version))
7607 (sha256
7608 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
7609 (build-system pyproject-build-system)
7610 (arguments
7611 ;; XXX: No connection adapters found.
7612 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
7613 (native-inputs
7614 (list python-pyftpdlib python-pytest python-setuptools python-six))
7615 (propagated-inputs (list python-requests))
7616 (home-page "https://github.com/Lukasa/requests-ftp")
7617 (synopsis "FTP Transport Adapter for Requests")
7618 (description "Requests-FTP is an implementation of a simple FTP transport
7619adapter for use with the Requests library.")
7620 (license license:asl2.0)))
7621
7622(define-public python-aioftp
7623 (package
7624 (name "python-aioftp")
7625 (version "0.27.2")
7626 (source
7627 (origin
7628 (method git-fetch)
7629 (uri (git-reference
7630 (url "https://github.com/aio-libs/aioftp")
7631 (commit version)))
7632 (file-name (git-file-name name version))
7633 (sha256
7634 (base32 "1lshyac5zk1w4x7ygkim3726f8gbkvpvlyiqkn9cs6qjxhxn5bxc"))))
7635 (build-system pyproject-build-system)
7636 (arguments
7637 (list
7638 #:phases
7639 #~(modify-phases %standard-phases
7640 (add-after 'unpack 'use-default-asyncio
7641 ;; async_timeout is deprecated, upstream recommends to use
7642 ;; asyncio, available since Python 3.11.
7643 (lambda _
7644 (substitute* "tests/conftest.py"
7645 (("async_timeout") "asyncio")))))))
7646 (native-inputs
7647 (list python-pytest
7648 python-pytest-mock
7649 python-pytest-asyncio
7650 python-setuptools
7651 python-siosocks
7652 python-trustme))
7653 (home-page "https://aioftp.readthedocs.io/")
7654 (synopsis "FTP client/server for asyncio in Python")
7655 (description
7656 "FTP client and server for asyncio (Python 3) Library implementing FTP
7657protocol, both client and server for Python asyncio module.
7658
7659 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
7660 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
7661 REST, LIST (as fallback).
7662
7663 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
7664 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
7665 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
7666 (license license:asl2.0)))
7667
7668(define-public python-mohawk
7669 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
7670 (revision "0"))
7671 (package
7672 (name "python-mohawk")
7673 (version (git-version "1.1.0" revision commit))
7674 (source
7675 (origin
7676 (method git-fetch)
7677 (uri (git-reference
7678 (url "https://github.com/kumar303/mohawk")
7679 (commit commit)))
7680 (file-name (git-file-name name version))
7681 (sha256
7682 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
7683 (patches
7684 (search-patches "python-mohawk-pytest.patch"))))
7685 (build-system pyproject-build-system)
7686 (arguments
7687 (list #:test-flags #~(list "mohawk/tests.py")))
7688 (native-inputs (list python-pytest python-setuptools))
7689 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
7690 ;python-six is removed?
7691 (home-page "https://github.com/kumar303/mohawk")
7692 (synopsis "Library for Hawk HTTP authorization")
7693 (description
7694 "Mohawk is an alternate Python implementation of the Hawk HTTP
7695authorization scheme.")
7696 (license license:bsd-3))))
7697
7698(define-public python-msal
7699 (package
7700 (name "python-msal")
7701 (version "1.34.0")
7702 (home-page
7703 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
7704 (source
7705 (origin
7706 (method git-fetch)
7707 (uri (git-reference
7708 (url home-page)
7709 (commit version)))
7710 (file-name (git-file-name name version))
7711 (sha256
7712 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
7713 (patches (search-patches "python-msal-requests.patch"))))
7714 (build-system pyproject-build-system)
7715 (arguments
7716 (list
7717 #:test-flags
7718 #~(list
7719 "--ignore=tests/test_benchmark.py"
7720 ;; XXX: Ignoring cryptography version scheme tests.
7721 "-k"
7722 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
7723 ;; XXX: These tests try to access the network.
7724 "--ignore=tests/test_application.py"
7725 "--ignore=tests/test_ccs.py"
7726 ;; XXX: These tests assume they are run on Windows.
7727 "--ignore=tests/test_mi.py")
7728 #:phases
7729 #~(modify-phases %standard-phases
7730 (add-after 'unpack 'set-cryptography-version
7731 (lambda _
7732 (substitute* "tests/test_cryptography.py"
7733 (("^latest_cryptography_version = @version@")
7734 (format #f "latest_cryptography_version = ~s"
7735 #$(package-version
7736 (this-package-input "python-cryptography")))))))
7737 (add-before 'check 'configure-tests
7738 (lambda* (#:key tests? #:allow-other-keys)
7739 (when tests?
7740 (setenv "TRAVIS_TAG" "1")))))))
7741 (native-inputs
7742 (list nss-certs-for-test python-mock python-pytest python-setuptools))
7743 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
7744 (synopsis "Microsoft Authentication Library (MSAL) for Python")
7745 (description
7746 "The Microsoft Authentication Library for Python enables applications to
7747integrate with the Microsoft identity platform. It allows you to sign in
7748users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
7749Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
7750Microsoft Graph or your own APIs registered with the Microsoft identity
7751platform. It is built using industry standard OAuth2 and OpenID Connect
7752protocols.")
7753 (license license:expat)))
7754
7755(define-public oauth2ms
7756 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
7757 (revision "0"))
7758 (package
7759 (name "oauth2ms")
7760 (version (git-version "0.0.0" revision commit))
7761 (source (origin
7762 (method git-fetch)
7763 (uri (git-reference
7764 (url "https://github.com/harishkrupo/oauth2ms")
7765 (commit commit)))
7766 (file-name (git-file-name name version))
7767 (sha256
7768 (base32
7769 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
7770 (build-system copy-build-system)
7771 (arguments
7772 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
7773 ("." #$(string-append "share/doc/" name "-"
7774 version "/")
7775 #:include-regexp ("\\.org$")))
7776 #:phases #~(modify-phases %standard-phases
7777 (add-after 'install 'wrap-pythonpath
7778 (lambda* (#:key inputs outputs #:allow-other-keys)
7779 (let ((path (getenv "GUIX_PYTHONPATH")))
7780 (wrap-program (string-append #$output
7781 "/bin/oauth2ms")
7782 `("GUIX_PYTHONPATH" ":" prefix
7783 (,path)))))))))
7784 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
7785 (home-page "https://github.com/harishkrupo/oauth2ms")
7786 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
7787 (description
7788 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
7789endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
7790used as authentication in IMAP mail servers.")
7791 (license license:asl2.0))))
7792
7793(define-public python-oauthlib
7794 (package
7795 (name "python-oauthlib")
7796 (version "3.3.1")
7797 (source
7798 (origin
7799 (method git-fetch)
7800 (uri (git-reference
7801 (url "https://github.com/oauthlib/oauthlib")
7802 (commit (string-append "v" version))))
7803 (file-name (git-file-name name version))
7804 (sha256
7805 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
7806 (build-system pyproject-build-system)
7807 (native-inputs (list python-pytest python-mock python-setuptools))
7808 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
7809 (home-page "https://github.com/oauthlib/oauthlib")
7810 (synopsis "OAuth implementation for Python")
7811 (description
7812 "Oauthlib is a generic, spec-compliant, thorough implementation of the
7813OAuth request-signing logic.")
7814 (license license:bsd-3)))
7815
7816(define-public python-urllib3
7817 (package
7818 (name "python-urllib3")
7819 (version "2.5.0")
7820 (source
7821 (origin
7822 (method url-fetch)
7823 (uri (pypi-uri "urllib3" version))
7824 (sha256
7825 (base32
7826 "0q17z6zlpyjv9ax5c3d30qwp9fwhz2sc4gbb7yyd86g4qwrpgi1z"))))
7827 (build-system pyproject-build-system)
7828 (arguments `(#:tests? #f))
7829 (native-inputs
7830 (list python-hatch-vcs
7831 python-hatchling
7832 python-setuptools-scm))
7833 (propagated-inputs
7834 (append
7835 ;; These 5 inputs are used to build urrlib3[secure]
7836 (list python-certifi)
7837 (if (member (%current-system)
7838 (package-transitive-supported-systems python-cryptography))
7839 (list python-cryptography)
7840 '())
7841 (list python-idna)
7842 (if (member (%current-system)
7843 (package-transitive-supported-systems python-pyopenssl))
7844 (list python-pyopenssl)
7845 '())
7846 (list python-pysocks)))
7847 (home-page "https://urllib3.readthedocs.io/")
7848 (synopsis "HTTP library with thread-safe connection pooling")
7849 (description
7850 "Urllib3 supports features left out of urllib and urllib2 libraries. It
7851can reuse the same socket connection for multiple requests, it can POST files,
7852supports url redirection and retries, and also gzip and deflate decoding.")
7853 (license license:expat)))
7854
7855(define-public python-urllib3-1.26
7856 (package
7857 (inherit python-urllib3)
7858 (version "1.26.17")
7859 (source
7860 (origin
7861 (method url-fetch)
7862 (uri (pypi-uri "urllib3" version))
7863 (sha256
7864 (base32
7865 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
7866 (native-inputs
7867 (list python-setuptools
7868 python-wheel))))
7869
7870(define-public python-awscrt
7871 (package
7872 (name "python-awscrt")
7873 (version "0.26.1")
7874 (source
7875 (origin
7876 (method url-fetch)
7877 (uri (pypi-uri "awscrt" version))
7878 (sha256
7879 (base32 "0plkc0i0gc6z8fqnyy8kbg43sv3jnv8shcavcz0wb134riykmmm8"))))
7880 (build-system pyproject-build-system)
7881 (arguments
7882 (list
7883 #:test-backend #~'unittest
7884 #:test-flags #~(list "discover" "--verbose")
7885 #:phases
7886 #~(modify-phases %standard-phases
7887 (add-after 'unpack 'disable-broken-tests
7888 (lambda _
7889 ;; Disable broken tests. These tests fail because the
7890 ;; certificate bundle at the default location does not exist.
7891 (substitute* "test/test_auth.py"
7892 (("def test_default_provider")
7893 "def _test_default_provider"))
7894 (substitute* "test/test_http_client.py"
7895 (("def test_h2_client")
7896 "def _test_h2_client"))
7897 (substitute* "test/test_s3.py"
7898 (("def test_sanity")
7899 "def _test_sanity")
7900 (("def test_sanity_secure")
7901 "def _test_sanity_secure")
7902 (("def test_wait_shutdown")
7903 "def _test_wait_shutdown"))))
7904 (add-after 'unpack 'override-cert-bundle-location
7905 (lambda* (#:key inputs #:allow-other-keys)
7906 (let ((bundle (search-input-file inputs
7907 "/etc/ssl/certs/ca-certificates.crt")))
7908 (setenv "SSL_CERT_FILE" bundle)
7909 (substitute* "awscrt/io.py"
7910 (("( +)opt = TlsContextOptions\\(\\)" m indent)
7911 (string-append m "\n"
7912 indent "import os\n"
7913 indent "\
7914opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n")))
7915 (substitute* "test/appexit_http.py"
7916 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
7917 (string-append m indent
7918 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
7919 bundle "')\n")))
7920 (substitute* "test/test_io.py"
7921 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
7922 (string-append m indent
7923 "opt.override_default_trust_store_from_path(None, '"
7924 bundle "')\n"))))))
7925 (add-after 'unpack 'use-system-libraries
7926 (lambda _
7927 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
7928 (inputs (list openssl))
7929 (native-inputs (list cmake-minimal
7930 nss-certs-for-test
7931 python-boto3
7932 python-setuptools
7933 python-websockets))
7934 (home-page "https://github.com/awslabs/aws-crt-python")
7935 (synopsis "Common runtime for AWS Python projects")
7936 (description
7937 "This package provides a common runtime for AWS Python projects.")
7938 (license license:asl2.0)))
7939
7940(define-public awscli
7941 (package
7942 ;; Note: updating awscli typically requires updating botocore as well.
7943 (name "awscli")
7944 (version "1.43.11")
7945 (source
7946 (origin
7947 (method git-fetch)
7948 (uri (git-reference
7949 (url "https://github.com/aws/aws-cli")
7950 (commit version)))
7951 (file-name (git-file-name name version))
7952 (sha256
7953 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
7954 (build-system pyproject-build-system)
7955 (arguments
7956 (list
7957 ;; tests: 2715 passed, 32 warnings
7958 #:test-flags
7959 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7960 ;; Complete test suite is huge and compute hungry, run just unit
7961 ;; tests.
7962 "--ignore=tests/dependencies"
7963 "--ignore=tests/functional"
7964 "--ignore=tests/integration"
7965 ;; TypeError: 'Mock' object is not subscriptable.
7966 "-k" "not test_no_groff_or_mandoc_exists")
7967 #:phases
7968 #~(modify-phases %standard-phases
7969 (add-after 'unpack 'fix-reference-to-groff
7970 (lambda _
7971 ;; XXX: Consider to use wrap-program instead, it tries to parse
7972 ;; the PATH.
7973 (substitute* "awscli/help.py"
7974 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
7975 (("raise ExecutableNotFoundError\\('groff'\\)") "")
7976 (("cmdline = \\['groff'")
7977 (format #f "cmdline = ['~a/bin/groff'"
7978 #$(this-package-input "groff-minimal"))))))
7979 (add-before 'check 'set-environment
7980 (lambda _
7981 ;; PermissionError: [Errno 13] Permission denied:
7982 ;; '/homeless-shelter'
7983 (setenv "HOME" "/tmp"))))))
7984 (native-inputs
7985 (list python-pytest
7986 python-pytest-xdist
7987 python-setuptools
7988 python-wheel))
7989 (inputs
7990 (list groff-minimal
7991 python-botocore
7992 python-colorama
7993 python-docutils-0.19
7994 python-pyyaml
7995 python-rsa-for-awscli-1
7996 python-s3transfer))
7997 (home-page "https://aws.amazon.com/cli/")
7998 (synopsis "Command line client for AWS")
7999 (description
8000 "AWS CLI provides a unified command line interface to the Amazon Web
8001Services (AWS) API.")
8002 (license license:asl2.0)))
8003
8004(define-public awscli-2
8005 (package
8006 (inherit awscli)
8007 ;; Note: updating awscli-2 typically requires updating python-awscrt.
8008 (name "awscli")
8009 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
8010 ;; any fresh one compatible with current state of dependencies in Guix.
8011 (version "2.28.0")
8012 (source
8013 (origin
8014 (method git-fetch)
8015 (uri (git-reference
8016 (url "https://github.com/aws/aws-cli")
8017 (commit version)))
8018 (file-name (git-file-name name version))
8019 (sha256
8020 (base32
8021 "1a1jzvdm434x46yh7ir11lw0nzc64ns4qvxhp5wfra3rh5ykf36j"))))
8022 (build-system pyproject-build-system)
8023 (arguments
8024 (list
8025 ;; When updating and checking locally be very patient as build phase may
8026 ;; hang for 6-8 minutes but eventually passes through.
8027 ;;
8028 ;; tests: 4189 passed, 1 skipped, 2 warnings
8029 #:test-flags
8030 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8031 ;; Full test suite contains more than 70k tests; ignore network
8032 ;; dependent, slow and compute intense tests, keep just unit
8033 ;; tests.
8034 "--ignore=tests/backends"
8035 "--ignore=tests/dependencies"
8036 "--ignore=tests/functional"
8037 "--ignore=tests/integration"
8038 "--ignore=tests/unit/botocore"
8039 ;; Flaky, something to do with PATH disappearing from os.environ?
8040 ;; Passes when run on its own, so maybe something else is
8041 ;; modifying this during the test run.
8042 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
8043 ;; TypeError: 'Mock' object is not subscriptable
8044 "-k" "not test_no_groff_or_mandoc_exists")
8045 #:phases
8046 #~(modify-phases %standard-phases
8047 (add-after 'unpack 'ignore-deprecations
8048 (lambda _
8049 (substitute* "pyproject.toml"
8050 (("\"error::") "\"ignore::"))))
8051 (add-after 'unpack 'fix-reference-to-groff
8052 (lambda* (#:key inputs #:allow-other-keys)
8053 (substitute* "awscli/help.py"
8054 (("if self._exists_on_path\\('groff'\\):") "if True:")
8055 (("cmdline = \\['groff'")
8056 (string-append "cmdline = ['"
8057 (search-input-file inputs "bin/groff")
8058 "'")))))
8059 (add-before 'check 'pre-check
8060 (lambda _ (setenv "HOME" "/tmp"))))))
8061 (inputs
8062 (list groff
8063 ;; less
8064 nss-certs-for-test
8065 python-awscrt
8066 python-colorama
8067 python-dateutil
8068 python-distro
8069 python-docutils
8070 python-jmespath
8071 python-prompt-toolkit
8072 python-ruamel.yaml
8073 python-ruamel.yaml.clib
8074 python-urllib3))
8075 (native-inputs
8076 (list python-flit-core
8077 python-pytest
8078 python-pytest-xdist))))
8079
8080(define-public python-wsgiproxy2
8081 (package
8082 (name "python-wsgiproxy2")
8083 (version "0.5.1")
8084 (source
8085 (origin
8086 (method git-fetch)
8087 (uri (git-reference
8088 (url "https://github.com/gawel/WSGIProxy2/")
8089 (commit version)))
8090 (file-name (git-file-name name version))
8091 (sha256
8092 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
8093 (build-system pyproject-build-system)
8094 (arguments (list #:test-backend #~'unittest))
8095 (native-inputs (list python-webtest python-setuptools))
8096 (propagated-inputs (list python-requests python-six python-urllib3
8097 python-webob))
8098 (home-page "https://github.com/gawel/WSGIProxy2/")
8099 (synopsis "WSGI Proxy with various http client backends")
8100 (description
8101 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
8102function calls into HTTP requests. It also includes code to sign requests and
8103pass private data, and to spawn subprocesses to handle requests.")
8104 (license license:expat)))
8105
8106(define-public python-pastedeploy
8107 (package
8108 (name "python-pastedeploy")
8109 (version "3.1.0")
8110 (source
8111 (origin
8112 (method url-fetch)
8113 (uri (pypi-uri "PasteDeploy" version))
8114 (sha256
8115 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
8116 (build-system pyproject-build-system)
8117 (native-inputs (list python-pytest python-setuptools))
8118 (home-page "https://pylonsproject.org/")
8119 (synopsis "Load, configure, and compose WSGI applications and servers")
8120 (description
8121 "This tool provides code to load WSGI applications and servers from URIs;
8122these URIs can refer to Python Eggs for INI-style configuration files. Paste
8123Script provides commands to serve applications based on this configuration
8124file.")
8125 (license license:expat)))
8126
8127(define-public python-webtest
8128 (package
8129 (name "python-webtest")
8130 (version "3.0.6")
8131 (source
8132 (origin
8133 (method url-fetch)
8134 (uri (pypi-uri "webtest" version))
8135 (sha256
8136 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
8137 (build-system pyproject-build-system)
8138 (arguments
8139 ;; Tests require python-pyquery, which creates a circular dependency.
8140 `(#:tests? #f))
8141 (native-inputs
8142 (list python-setuptools))
8143 (propagated-inputs
8144 (list python-beautifulsoup4
8145 python-waitress
8146 python-webob))
8147 (home-page "https://docs.pylonsproject.org/projects/webtest/")
8148 (synopsis "Helper to test WSGI applications")
8149 (description
8150 "Webtest allows you to test your Python web applications without
8151starting an HTTP server. It supports anything that supports the minimum of
8152WSGI.")
8153 (license license:expat)))
8154
8155(define-public python-flask
8156 (package
8157 (name "python-flask")
8158 (version "3.1.0")
8159 (source
8160 (origin
8161 (method url-fetch)
8162 (uri (pypi-uri "flask" version))
8163 (sha256
8164 (base32 "1b1nb250jxrjplbs21wnwq69250vs3iz2pdhs7cwi5y8hi8kr1sz"))))
8165 (build-system pyproject-build-system)
8166 (native-inputs
8167 (list python-flit-core
8168 python-pytest))
8169 (propagated-inputs
8170 (list python-asgiref ;async extra
8171 python-click
8172 python-blinker
8173 python-itsdangerous
8174 python-jinja2
8175 python-werkzeug))
8176 (home-page "https://palletsprojects.com/p/flask/")
8177 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
8178 (description "Flask is a micro web framework based on the Werkzeug toolkit
8179and Jinja2 template engine. It is called a micro framework because it does not
8180presume or force a developer to use a particular tool or library.")
8181 (license license:bsd-3)))
8182
8183(define-public python-flask-compress
8184 (package
8185 (name "python-flask-compress")
8186 (version "1.18")
8187 (source (origin
8188 (method url-fetch)
8189 (uri (pypi-uri "flask_compress" version))
8190 (sha256
8191 (base32
8192 "0fj1r0ixsjls7z3a2zzamxppjz4qcf8q4jcmn74gsk9kisyy3fpx"))))
8193 (build-system pyproject-build-system)
8194 (native-inputs
8195 (list python-flask-caching
8196 python-pytest
8197 python-setuptools
8198 python-setuptools-scm))
8199 (propagated-inputs
8200 (list python-brotli
8201 python-flask
8202 python-pyzstd))
8203 (home-page "https://github.com/colour-science/flask-compress")
8204 (synopsis "Compress responses in a Flask app")
8205 (description
8206 "This package lets you compress Flask application responses and static
8207files with gzip, deflate or brotli. Flask-Compress both adds the various
8208headers required for a compressed response and compresses the response data.")
8209 (license license:expat)))
8210
8211(define-public python-flask-seasurf
8212 (package
8213 (name "python-flask-seasurf")
8214 (version "2.0.0")
8215 (source (origin
8216 (method url-fetch)
8217 (uri (pypi-uri "Flask-SeaSurf" version))
8218 (sha256
8219 (base32
8220 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
8221 (build-system pyproject-build-system)
8222 (arguments
8223 (list #:tests? #false)) ;there are none
8224 (propagated-inputs (list python-flask))
8225 (native-inputs (list python-setuptools python-wheel))
8226 (home-page "https://github.com/maxcountryman/flask-seasurf/")
8227 (synopsis "CSRF extension for Flask")
8228 (description "SeaSurf is a Flask extension for preventing cross-site
8229request forgery (CSRF). CSRF attacks are problematic because the mechanism
8230they use is relatively easy to exploit. This extension attempts to aid you in
8231securing your application from such attacks. This extension is based on the
8232Django middleware.")
8233 (license license:bsd-3)))
8234
8235(define-public python-flask-wtf
8236 (package
8237 (name "python-flask-wtf")
8238 (version "1.2.2")
8239 (source
8240 (origin
8241 (method url-fetch)
8242 (uri (pypi-uri "Flask-WTF" version))
8243 (sha256
8244 (base32
8245 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
8246 (build-system pyproject-build-system)
8247 (propagated-inputs
8248 (list python-flask python-flask python-itsdangerous python-wtforms))
8249 (native-inputs
8250 (list python-hatchling python-pytest))
8251 (home-page "https://github.com/lepture/flask-wtf")
8252 (synopsis "Simple integration of Flask and WTForms")
8253 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
8254upload, and reCAPTCHA.")
8255 (license license:bsd-3)))
8256
8257(define-public python-flask-multistatic
8258 (package
8259 (name "python-flask-multistatic")
8260 (version "1.0")
8261 (source
8262 (origin
8263 (method url-fetch)
8264 (uri (pypi-uri "flask-multistatic" version))
8265 (sha256
8266 (base32
8267 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
8268 (build-system pyproject-build-system)
8269 (arguments (list #:tests? #f)) ; No tests upstream.
8270 (native-inputs (list python-setuptools))
8271 (propagated-inputs (list python-flask))
8272 (home-page "https://pagure.io/flask-multistatic")
8273 (synopsis "Flask plugin to allow overriding static files")
8274 (description "@code{flask-multistatic} is a flask plugin that adds support
8275for overriding static files.")
8276 (license license:gpl3+)))
8277
8278(define-public python-responses
8279 (package
8280 (name "python-responses")
8281 (version "0.25.3")
8282 (source (origin
8283 (method url-fetch)
8284 (uri (pypi-uri "responses" version))
8285 (sha256
8286 (base32
8287 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
8288 (build-system pyproject-build-system)
8289 (native-inputs
8290 (list python-pytest
8291 python-pytest-asyncio
8292 python-pytest-httpserver
8293 python-setuptools
8294 python-tomli
8295 python-tomli-w
8296 python-wheel))
8297 (propagated-inputs
8298 (list python-requests
8299 python-pyyaml
8300 python-urllib3))
8301 (home-page "https://github.com/getsentry/responses")
8302 (synopsis "Utility for mocking out the `requests` Python library")
8303 (description "A utility library for mocking out the `requests` Python
8304library.")
8305 (license license:asl2.0)))
8306
8307(define-public python-grequests
8308 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
8309 (revision "0"))
8310 (package
8311 (name "python-grequests")
8312 (version (git-version "0.7.0" revision commit))
8313 (source
8314 (origin
8315 (method git-fetch)
8316 (uri (git-reference
8317 (url "https://github.com/kennethreitz/grequests")
8318 (commit commit)))
8319 (file-name (git-file-name name version))
8320 (sha256
8321 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
8322 (build-system pyproject-build-system)
8323 (arguments
8324 (list
8325 ;; XXX: Most failing tests seem to be caused by network access,
8326 ;; but there is no easy/flag way to disable tests selectively.
8327 #:tests? #f
8328 #:test-backend #~'unittest
8329 #:test-flags #~(list "tests.py")))
8330 (propagated-inputs (list python-gevent python-requests))
8331 (native-inputs (list python-setuptools))
8332 (home-page "https://github.com/kennethreitz/grequests")
8333 (synopsis "Python library for asynchronous HTTP requests")
8334 (description
8335 "GRequests is a Python library that allows you to use @code{Requests}
8336with @code{Gevent} to make asynchronous HTTP Requests easily.")
8337 (license license:bsd-2))))
8338
8339(define-public python-gwebsockets
8340 (package
8341 (name "python-gwebsockets")
8342 (version "0.7")
8343 (source
8344 (origin
8345 (method git-fetch)
8346 (uri (git-reference
8347 (url "https://github.com/sugarlabs/gwebsockets")
8348 (commit (string-append "v" version))))
8349 (file-name (git-file-name name version))
8350 (sha256
8351 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
8352 (build-system pyproject-build-system)
8353 (arguments (list #:tests? #f)) ; No tests upstream.
8354 (native-inputs (list python-setuptools))
8355 (propagated-inputs (list python-pygobject))
8356 (home-page "https://github.com/sugarlabs/gwebsockets")
8357 (synopsis "GLib based websockets server")
8358 (description
8359 "This package provides a websocket server written in Python. It uses GIO
8360for network communication and hence it easily integrates with the GLib
8361mainloop.")
8362 (license license:asl2.0)))
8363
8364(define-public python-dpkt
8365 (package
8366 (name "python-dpkt")
8367 (version "1.9.8")
8368 (source
8369 (origin
8370 (method git-fetch)
8371 (uri (git-reference
8372 (url "https://github.com/kbandla/dpkt")
8373 (commit (string-append "v" version))))
8374 (file-name (git-file-name name version))
8375 (sha256
8376 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
8377 (build-system pyproject-build-system)
8378 (arguments
8379 (list
8380 #:test-flags
8381 #~(list "--pyargs" "dpkt")))
8382 (native-inputs (list python-pytest python-setuptools))
8383 (home-page "https://github.com/kbandla/dpkt")
8384 (synopsis "Packet generator and parser for TCP/IP protocols")
8385 (description
8386 "The dpkt module is a fast, simple packet generator and parser for the
8387basic TCP/IP protocols.")
8388 (license license:bsd-3)))
8389
8390(define-public python-geventhttpclient
8391 (package
8392 (name "python-geventhttpclient")
8393 (version "2.3.9")
8394 (source (origin
8395 (method git-fetch)
8396 (uri (git-reference
8397 (url "https://github.com/geventhttpclient/geventhttpclient")
8398 (commit version)
8399 (recursive? #true)))
8400 (file-name (git-file-name name version))
8401 (sha256
8402 (base32
8403 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
8404 (build-system pyproject-build-system)
8405 (arguments
8406 (list
8407 #:test-flags
8408 ;; Disable network tests.
8409 '(list "-k"
8410 (string-append "not test_client_simple"
8411 " and not test_client_ssl"
8412 " and not test_client_with_default_headers"
8413 " and not test_client_without_leading_slash"
8414 " and not test_download"
8415 " and not test_fail_invalid_ca_certificate"
8416 " and not test_httpbin_multipart"
8417 " and not test_multi_queries_greenlet_safe"
8418 " and not test_no_form_encode_header"
8419 " and not test_no_form_encoded_header"
8420 " and not test_request_with_headers"
8421 " and not test_response_context_manager"
8422 " and not test_urllib_request"))))
8423 (native-inputs (list nss-certs-for-test
8424 python-dpkt python-pytest python-requests
8425 python-setuptools python-wheel))
8426 (propagated-inputs (list python-brotli python-certifi python-gevent
8427 python-urllib3))
8428 (home-page "https://github.com/geventhttpclient/geventhttpclient")
8429 (synopsis "HTTP client library for gevent")
8430 (description "@code{python-geventhttpclient} is a high performance,
8431concurrent HTTP client library for python using @code{gevent}.")
8432 (license license:expat)))
8433
8434(define-public python-gevent-websocket
8435 (package
8436 (name "python-gevent-websocket")
8437 (version "0.10.1")
8438 (source
8439 (origin
8440 (method url-fetch)
8441 (uri (pypi-uri "gevent-websocket" version))
8442 (sha256
8443 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
8444 (build-system pyproject-build-system)
8445 (arguments
8446 (list #:tests? #f)) ; no tests in PyPI or git
8447 (native-inputs
8448 (list python-setuptools
8449 python-wheel))
8450 (propagated-inputs
8451 (list python-gevent))
8452 (home-page "https://gitlab.com/noppo/gevent-websocket")
8453 (synopsis "Websocket handler for the gevent pywsgi server")
8454 (description
8455 "Websocket handler for the gevent pywsgi server, a Python network
8456library.
8457
8458Features include:
8459@itemize
8460@item integration on both socket level or using an abstract interface
8461@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
8462Protocol, WAMP}
8463@item easily extendible using a simple WebSocket protocol plugin API
8464@end itemize")
8465 (license license:asl2.0)))
8466
8467(define-public python-requests-oauthlib
8468 (package
8469 (name "python-requests-oauthlib")
8470 (version "2.0.0")
8471 (source
8472 (origin
8473 (method git-fetch)
8474 (uri (git-reference (url
8475 "https://github.com/requests/requests-oauthlib")
8476 (commit (string-append "v" version))))
8477 (file-name (git-file-name name version))
8478 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
8479 (build-system pyproject-build-system)
8480 (arguments
8481 (list
8482 #:test-flags
8483 #~(list
8484 "--ignore=tests/test_core.py" ; requires network access.
8485 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
8486 "-k" "not test_fetch_access_token"))) ; flaky tests.
8487 (native-inputs
8488 (list python-requests-mock python-pytest python-setuptools))
8489 (propagated-inputs
8490 (list python-oauthlib python-requests))
8491 (home-page "https://github.com/requests/requests-oauthlib")
8492 (synopsis "OAuthlib authentication support for Requests")
8493 (description
8494 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
8495provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
8496 (license license:isc)))
8497
8498(define-public python-cachecontrol
8499 (package
8500 (name "python-cachecontrol")
8501 (version "0.14.1")
8502 (source
8503 (origin
8504 (method git-fetch)
8505 (uri (git-reference
8506 (url "https://github.com/ionrock/cachecontrol")
8507 (commit (string-append "v" version))))
8508 (file-name (git-file-name name version))
8509 (sha256
8510 (base32
8511 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
8512 (build-system pyproject-build-system)
8513 (propagated-inputs
8514 (list python-filelock python-msgpack python-requests))
8515 (native-inputs
8516 (list python-cherrypy python-flit-core python-pytest))
8517 (home-page "https://github.com/ionrock/cachecontrol")
8518 (synopsis "The httplib2 caching algorithms for use with requests")
8519 (description "CacheControl is a port of the caching algorithms in
8520@code{httplib2} for use with @code{requests} session objects.")
8521 (license license:asl2.0)))
8522
8523(define-public python-betamax
8524 (package
8525 (name "python-betamax")
8526 (version "0.9.0")
8527 (source
8528 (origin
8529 (method url-fetch)
8530 (uri (pypi-uri "betamax" version))
8531 (sha256
8532 (base32
8533 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
8534 (build-system pyproject-build-system)
8535 (arguments
8536 (list
8537 #:test-flags
8538 #~(list "-k" (string-join
8539 ;; Tests require network access to http://httpbin.org/get.
8540 (list "not test_creates_new_cassettes"
8541 "test_placeholders_work"
8542 "test_post_start_hook"
8543 "test_pre_stop_hook"
8544 "test_preplayback_hook"
8545 "test_prerecord_hook"
8546 "test_prerecord_ignoring_hook"
8547 "test_records_new_events_with_existing_cassette"
8548 "test_records_new_interaction"
8549 "test_records_new_interactions"
8550 "test_replaces_old_interactions"
8551 "test_replays_response_from_cassette"
8552 "test_requests_with_json_body"
8553 "test_saves_content_as_gzip"
8554 "test_unicode_is_saved_properly")
8555 " and not "))))
8556 (native-inputs
8557 (list nss-certs-for-test
8558 python-pytest
8559 python-setuptools))
8560 (propagated-inputs
8561 (list python-requests))
8562 (home-page "https://github.com/sigmavirus24/betamax")
8563 (synopsis "Record HTTP interactions with python-requests")
8564 (description
8565 "Betamax will record your test suite's HTTP interactions and replay them
8566during future tests. It is designed to work with python-requests.")
8567 (license license:expat)))
8568
8569(define-public python-betamax-matchers
8570 (package
8571 (name "python-betamax-matchers")
8572 (version "0.4.0")
8573 (source
8574 (origin
8575 (method git-fetch)
8576 (uri (git-reference
8577 (url "https://github.com/sigmavirus24/betamax_matchers")
8578 (commit version)))
8579 (file-name (git-file-name name version))
8580 (sha256
8581 (base32 "0lyg3r91hwfvavyi5k6sddcla37igigycfv1mx40c32byqwl6pq5"))))
8582 (build-system pyproject-build-system)
8583 (native-inputs (list python-pytest python-setuptools))
8584 (propagated-inputs (list python-betamax python-requests-toolbelt))
8585 (home-page "https://github.com/sigmavirus24/betamax_matchers")
8586 (synopsis "VCR imitation for python-requests")
8587 (description "@code{betamax-matchers} provides a set of Matchers for
8588Betamax.")
8589 (license license:asl2.0)))
8590
8591(define-public python-betamax-serializers
8592 (package
8593 (name "python-betamax-serializers")
8594 (version "0.2.1")
8595 (source
8596 (origin
8597 (method git-fetch)
8598 (uri (git-reference
8599 (url "https://gitlab.com/betamax/serializers")
8600 (commit version)))
8601 (file-name (git-file-name name version))
8602 (sha256
8603 (base32 "1p2l5w3vwvjacs2ndahgcjq55qb53i37p8mz1zh85pjxyszdyw2l"))))
8604 (build-system pyproject-build-system)
8605 (arguments (list #:tests? #f)) ; No tests.
8606 (native-inputs (list python-setuptools))
8607 (propagated-inputs (list python-betamax python-pyyaml))
8608 (synopsis "Set of third-party serializers for Betamax")
8609 (description
8610 "Betamax-Serializers are an experimental set of Serializers for Betamax
8611that may possibly end up in the main package.")
8612 (home-page "https://gitlab.com/betamax/serializers")
8613 (license license:asl2.0)))
8614
8615(define-public python-s3fs
8616 (package
8617 (name "python-s3fs")
8618 (version "2026.1.0")
8619 (source
8620 (origin
8621 (method url-fetch)
8622 (uri (pypi-uri "s3fs" version))
8623 (sha256
8624 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
8625 (build-system pyproject-build-system)
8626 ;; TODO: Many tests fail with "No such file or directory" raised by the
8627 ;; HTTP client.
8628 (arguments (list #:tests? #false))
8629 (native-inputs
8630 (list python-setuptools))
8631 (propagated-inputs
8632 (list python-aiobotocore
8633 python-aiohttp
8634 python-fsspec))
8635 (home-page "https://github.com/fsspec/s3fs/")
8636 (synopsis "Convenient filesystem interface over S3")
8637 (description "This package provides a convenient filesystem interface over
8638S3.")
8639 (license license:bsd-3)))
8640
8641(define-public python-s3transfer
8642 (package
8643 (name "python-s3transfer")
8644 (version "0.16.0")
8645 (source
8646 (origin
8647 (method url-fetch)
8648 (uri (pypi-uri "s3transfer" version))
8649 (sha256
8650 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
8651 (build-system pyproject-build-system)
8652 (arguments
8653 (list
8654 ;; tests: 630 passed, 51 skipped
8655 #:test-flags
8656 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8657 ;; Tests require networking.
8658 "--ignore" "tests/integration")))
8659 (native-inputs
8660 (list python-pytest
8661 python-pytest-xdist
8662 python-setuptools))
8663 (propagated-inputs
8664 (list python-botocore))
8665 (home-page "https://github.com/boto/s3transfer")
8666 (synopsis "Amazon S3 Transfer Manager")
8667 (description
8668 "S3transfer is a Python library for managing Amazon S3 transfers.")
8669 (license license:asl2.0)))
8670
8671(define-public python-flask-restful
8672 (package
8673 (name "python-flask-restful")
8674 (version "0.3.10")
8675 (source
8676 (origin
8677 (method url-fetch)
8678 (uri (pypi-uri "Flask-RESTful" version))
8679 (sha256
8680 (base32
8681 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
8682 (build-system pyproject-build-system)
8683 (arguments
8684 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
8685 (list #:tests? #f))
8686 (propagated-inputs
8687 (list python-aniso8601 python-flask python-pytz))
8688 (native-inputs
8689 (list python-blinker
8690 python-mock
8691 python-pytest
8692 python-setuptools
8693 python-wheel))
8694 (home-page "https://github.com/flask-restful/flask-restful/")
8695 (synopsis "Flask module for creating REST APIs")
8696 (description
8697 "This package contains a Flask module for creating REST APIs.")
8698 (license license:bsd-3)))
8699
8700(define-public python-flask-sqlalchemy
8701 (package
8702 (name "python-flask-sqlalchemy")
8703 ;; Released version fails tests in Python 3.12.
8704 (properties '((commit . "168cb4b7b50fe5176307a10d873781bfafc6eeda")
8705 (revision . "0")))
8706 (version (git-version "3.1.1"
8707 (assoc-ref properties 'revision)
8708 (assoc-ref properties 'commit)))
8709 (source
8710 (origin
8711 (method git-fetch)
8712 (uri (git-reference
8713 (url "https://github.com/pallets-eco/flask-sqlalchemy")
8714 (commit (assoc-ref properties 'commit))))
8715 (file-name (git-file-name name version))
8716 (sha256
8717 (base32
8718 "0xw8v1540m21x9crpgb0i3rxyhh1d24ldg354vndw9cif74ls5p6"))))
8719 (build-system pyproject-build-system)
8720 (arguments
8721 (list
8722 #:test-flags
8723 #~(list "-k" (string-append "not test_explicit_table[db2]"
8724 " and not test_explicit_table[db4]")
8725 "-W" "ignore::DeprecationWarning")))
8726 (native-inputs
8727 (list python-flit-core
8728 python-pytest))
8729 (propagated-inputs
8730 (list python-flask
8731 python-sqlalchemy-2))
8732 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
8733 (synopsis "Module adding SQLAlchemy support to your Flask application")
8734 (description
8735 "This package adds SQLAlchemy support to your Flask application.")
8736 (license license:bsd-3)))
8737
8738(define-public python-flask-restful-swagger
8739 (package
8740 (name "python-flask-restful-swagger")
8741 (version "0.20.1")
8742 ;; XXX: Unbundle minified javascript.
8743 (source
8744 (origin
8745 (method git-fetch)
8746 (uri (git-reference
8747 (url "https://github.com/rantav/flask-restful-swagger")
8748 (commit version)))
8749 (file-name (git-file-name name version))
8750 (sha256
8751 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
8752 (build-system pyproject-build-system)
8753 (arguments (list #:tests? #f)) ; No tests.
8754 (native-inputs (list python-setuptools))
8755 (propagated-inputs (list python-flask-restful python-six))
8756 (home-page "https://github.com/rantav/flask-restful-swagger")
8757 (synopsis "Extract Swagger specs from Flask-Restful projects")
8758 (description "This package lets you extract Swagger API documentation
8759specs from your Flask-Restful projects.")
8760 (license license:expat)))
8761
8762(define-public python-htmlmin
8763 (package
8764 (name "python-htmlmin")
8765 (version "0.1.12")
8766 (source
8767 (origin
8768 (method url-fetch)
8769 (uri (pypi-uri "htmlmin" version))
8770 (sha256
8771 (base32
8772 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
8773 (build-system pyproject-build-system)
8774 (arguments
8775 (list #:tests? #f)) ; no tests
8776 (native-inputs (list python-setuptools))
8777 (home-page "https://htmlmin.readthedocs.org/en/latest/")
8778 (synopsis "HTML minifier")
8779 (description "@code{htmlmin} is an HTML minifier that just works.
8780It comes with safe defaults and easily configurable options.")
8781 (license license:bsd-3)))
8782
8783;; XXX: Forked renamed and updated version.
8784(define-public python-htmlmin2
8785 (package/inherit python-htmlmin
8786 (name "python-htmlmin2")
8787 (version "0.1.13")
8788 (source
8789 (origin
8790 (method git-fetch)
8791 (uri (git-reference
8792 (url "https://github.com/wilhelmer/htmlmin")
8793 (commit (string-append "v" version))))
8794 (file-name (git-file-name name version))
8795 (sha256
8796 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
8797 (build-system pyproject-build-system)
8798 (arguments (list #:test-backend #~'unittest))
8799 (native-inputs (list python-setuptools))
8800 (home-page "https://github.com/wilhelmer/htmlmin")
8801 (description
8802 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
8803defaults and easily configurable options. This variant is an updated fork of
8804the original @code{python-htmlmin}.")
8805 (license license:bsd-3)))
8806
8807(define-public python-flask-htmlmin
8808 (package
8809 (name "python-flask-htmlmin")
8810 (version "3.0.0")
8811 (source
8812 (origin
8813 (method git-fetch)
8814 (uri (git-reference
8815 (url "https://github.com/hamidfzm/Flask-HTMLmin")
8816 (commit (string-append "v" version))))
8817 (file-name (git-file-name name version))
8818 (sha256
8819 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
8820 (build-system pyproject-build-system)
8821 (native-inputs (list python-pytest python-setuptools))
8822 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
8823 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
8824 (synopsis "HTML response minifier for Flask")
8825 (description
8826 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
8827 (license license:bsd-3)))
8828
8829(define-public python-jsmin
8830 (package
8831 (name "python-jsmin")
8832 (version "3.0.1")
8833 (source
8834 (origin
8835 (method url-fetch)
8836 (uri (pypi-uri "jsmin" version))
8837 (sha256
8838 (base32
8839 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
8840 (build-system pyproject-build-system)
8841 (arguments (list #:test-backend #~'unittest))
8842 (native-inputs
8843 (list python-setuptools))
8844 (home-page "https://github.com/tikitu/jsmin/")
8845 (synopsis "Python JavaScript minifier")
8846 (description
8847 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
8848on the command line.")
8849 (license license:expat)))
8850
8851(define-public python-flask-login
8852 (let ((commit "c8bba84b9ba6768e878317fc46c54bd13fa1ac07")
8853 (revision "0"))
8854 (package
8855 (name "python-flask-login")
8856 (version (git-version "0.6.3" revision commit))
8857 (source
8858 (origin
8859 (method git-fetch)
8860 (uri (git-reference
8861 (url "https://github.com/maxcountryman/flask-login")
8862 (commit commit)))
8863 (file-name (git-file-name name version))
8864 (sha256
8865 (base32 "0q0ga1zwm06kvpnsf50ckmsc77959i1spx7z2y3jkbwaa4klsyli"))))
8866 (build-system pyproject-build-system)
8867 (propagated-inputs
8868 (list python-flask))
8869 (native-inputs
8870 ;; For tests.
8871 (list python-blinker
8872 python-flit-core
8873 python-mock
8874 python-pytest
8875 python-semantic-version
8876 python-werkzeug))
8877 (home-page "https://github.com/maxcountryman/flask-login")
8878 (synopsis "User session management for Flask")
8879 (description
8880 "@code{Flask-Login} provides user session management for Flask. It
8881handles the common tasks of logging in, logging out, and remembering your
8882users' sessions over extended periods of time.")
8883 (license license:expat))))
8884
8885(define-public python-oauth2client
8886 (package
8887 (name "python-oauth2client")
8888 (version "4.1.3")
8889 (source
8890 (origin
8891 (method git-fetch)
8892 (uri (git-reference
8893 (url "https://github.com/google/oauth2client/")
8894 (commit (string-append "v" version))))
8895 (file-name (git-file-name name version))
8896 (sha256
8897 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
8898 (build-system pyproject-build-system)
8899 (arguments
8900 (list #:tests? #f))
8901 (native-inputs
8902 (list python-setuptools))
8903 (propagated-inputs
8904 (list python-httplib2
8905 python-pyasn1
8906 python-pyasn1-modules
8907 python-pyparsing
8908 python-rsa
8909 python-six))
8910 (home-page "https://github.com/google/oauth2client/")
8911 (synopsis "OAuth 2.0 client library")
8912 (description "@code{python-oauth2client} provides an OAuth 2.0 client
8913library for Python")
8914 (license license:asl2.0)))
8915
8916(define-public python-authlib
8917 (package
8918 (name "python-authlib")
8919 (version "1.5.1")
8920 (source
8921 (origin
8922 (method url-fetch)
8923 (uri (pypi-uri "authlib" version))
8924 (sha256
8925 (base32 "0blpvz2v2r8yvsgm1yr3n61mhwxvh1b0kyf2rp0i4wv6n3n8bg2w"))))
8926 (build-system pyproject-build-system)
8927 ;; No tests target.
8928 (arguments (list #:tests? #false))
8929 (propagated-inputs
8930 (list python-cryptography
8931 python-django
8932 python-flask
8933 python-httpx
8934 python-requests
8935 python-sqlalchemy-2
8936 python-starlette
8937 python-werkzeug))
8938 (native-inputs (list python-pytest python-setuptools python-wheel))
8939 (home-page "https://pypi.org/project/Authlib/1")
8940 (synopsis "Build OAuth and OpenID Connect servers and clients")
8941 (description
8942 "This is a Python library for building OAuth and OpenID Connect servers
8943and clients.")
8944 (license license:bsd-3)))
8945
8946(define-public python-flask-oidc
8947 (package
8948 (name "python-flask-oidc")
8949 (version "2.3.1")
8950 (source
8951 (origin
8952 (method url-fetch)
8953 (uri (pypi-uri "flask_oidc" version))
8954 (sha256
8955 (base32
8956 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
8957 (build-system pyproject-build-system)
8958 (propagated-inputs
8959 (list python-authlib
8960 python-blinker
8961 python-flask
8962 python-requests
8963 python-responses))
8964 (native-inputs
8965 (list python-pytest python-poetry-core))
8966 (home-page "https://github.com/puiterwijk/flask-oidc")
8967 (synopsis "OpenID Connect extension for Flask")
8968 (description "@code{python-flask-oidc} provides an OpenID Connect extension
8969for Flask.")
8970 (license license:bsd-2)))
8971
8972(define-public python-webassets
8973 (package
8974 (name "python-webassets")
8975 (version "3.0.0")
8976 (source
8977 (origin
8978 (method git-fetch)
8979 (uri (git-reference
8980 (url "https://github.com/miracle2k/webassets")
8981 (commit version)))
8982 (file-name (git-file-name name version))
8983 (sha256
8984 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
8985 (build-system pyproject-build-system)
8986 (propagated-inputs (list python-pyyaml python-zope-dottedname))
8987 (native-inputs (list python-hatchling python-pytest))
8988 (home-page "https://github.com/miracle2k/webassets")
8989 (synopsis "Media asset management")
8990 (description
8991 "This package provides utilities to merge, minify and compress Javascript
8992and CSS files,supporting a variety of different filters, including YUI, jsmin,
8993jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
8994 (license license:bsd-2)))
8995
8996(define-public python-cssmin
8997 (package
8998 (name "python-cssmin")
8999 (version "0.2.0")
9000 (source
9001 (origin
9002 (method git-fetch)
9003 (uri (git-reference
9004 (url "https://github.com/zacharyvoase/cssmin")
9005 (commit (string-append "v" version))))
9006 (file-name (git-file-name name version))
9007 (sha256
9008 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
9009 (build-system pyproject-build-system)
9010 (arguments (list #:tests? #f)) ; No tests.
9011 (native-inputs (list python-setuptools))
9012 (home-page "https://github.com/zacharyvoase/cssmin")
9013 (synopsis "Python port of the YUI CSS Compressor")
9014 (description "Python port of the YUI CSS Compressor.")
9015 (license (list license:expat license:bsd-3))))
9016
9017(define-public python-elastic-transport
9018 (package
9019 (name "python-elastic-transport")
9020 (version "9.1.0")
9021 (source
9022 (origin
9023 (method url-fetch)
9024 (uri (pypi-uri "elastic_transport" version))
9025 (sha256
9026 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
9027 (build-system pyproject-build-system)
9028 (arguments
9029 (list
9030 #:test-flags
9031 ;; Deselect failing tests (mostly due to network not reachable)
9032 #~(list "-k"
9033 (string-append
9034 "not .badssl.com"
9035 " and not test_assert_fingerprint_in_cert_chain_failure"))))
9036 (propagated-inputs (list python-certifi python-urllib3))
9037 (native-inputs (list nss-certs-for-test
9038 python-aiohttp
9039 ;; python-furo
9040 python-httpx
9041 python-opentelemetry-api
9042 python-opentelemetry-sdk
9043 python-orjson
9044 python-pytest
9045 python-pytest-asyncio-0.26
9046 ;; python-pytest-cov
9047 python-pytest-httpbin
9048 python-pytest-httpserver
9049 python-pytest-mock
9050 python-requests
9051 python-respx ;test
9052 python-setuptools
9053 ;; python-sphinx
9054 ;; python-sphinx-autodoc-typehints
9055 python-trustme
9056 python-wheel))
9057 (home-page "https://github.com/elastic/elastic-transport-python")
9058 (synopsis "Common library for Python Elastic client libraries")
9059 (description
9060 "This library was lifted from @code{elasticsearch-py} and then transformed to
9061be used across all Elastic services rather than only Elasticsearch. It
9062provides transport classes and utilities shared among Python Elastic client
9063libraries.")
9064 ;; Apache-2.0 in setup.py and LICENSE file.
9065 (license license:asl2.0)))
9066
9067(define-public python-elasticsearch
9068 (package
9069 (name "python-elasticsearch")
9070 (version "9.1.1")
9071 (source
9072 (origin
9073 (method git-fetch) ; no tests in PyPI release
9074 (uri (git-reference
9075 (url "https://github.com/elastic/elasticsearch-py")
9076 (commit (string-append "v" version))))
9077 (file-name (git-file-name name version))
9078 (sha256
9079 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
9080 (build-system pyproject-build-system)
9081 (native-inputs
9082 (list nss-certs-for-test
9083 python-aiohttp
9084 python-dateutil
9085 python-mock
9086 python-orjson
9087 python-pytest
9088 python-pytest-asyncio
9089 python-pytz
9090 python-pyyaml
9091 python-requests
9092 python-hatchling))
9093 (propagated-inputs
9094 (list python-certifi
9095 python-elastic-transport))
9096 (home-page "https://github.com/elastic/elasticsearch-py")
9097 (synopsis "Low-level client for Elasticsearch")
9098 (description "Official low-level client for Elasticsearch. Its goal is to
9099provide common ground for all Elasticsearch-related code in Python; because of
9100this it tries to be opinion-free and very extendable.")
9101 ;; Apache-2.0 in setup.py and LICENSE file.
9102 (license license:asl2.0)))
9103
9104(define-public python-engineio
9105 (package
9106 (name "python-engineio")
9107 (version "4.12.2")
9108 (source
9109 (origin
9110 (method url-fetch)
9111 (uri (pypi-uri "python_engineio" version))
9112 (sha256
9113 (base32
9114 "1ynyf3n29biwkm6nwzzwzhr4m19lsir1x5azxq2nl7xyw7zi5rz7"))))
9115 (build-system pyproject-build-system)
9116 (arguments
9117 (list
9118 #:test-flags
9119 #~(list "-k"
9120 "not test_static_file_routing and not test_static_files")))
9121 (native-inputs
9122 (list python-pytest
9123 python-pytest-asyncio
9124 python-setuptools
9125 python-tornado))
9126 (propagated-inputs
9127 (list python-aiohttp
9128 python-requests
9129 python-simple-websocket
9130 python-websocket-client))
9131 (home-page "https://github.com/miguelgrinberg/python-engineio/")
9132 (synopsis "Engine.IO server")
9133 (description "This package provides a Python implementation of the
9134@code{Engine.IO} realtime client and server.")
9135 (license license:expat)))
9136
9137(define-public python-ephemeral-port-reserve
9138 (package
9139 (name "python-ephemeral-port-reserve")
9140 (version "1.1.4")
9141 (source
9142 (origin
9143 (method git-fetch) ;no tests in PyPI archive
9144 (uri (git-reference
9145 (url "https://github.com/Yelp/ephemeral-port-reserve")
9146 (commit (string-append "v" version))))
9147 (file-name (git-file-name name version))
9148 (sha256
9149 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
9150 (build-system pyproject-build-system)
9151 (native-inputs
9152 (list python-pytest
9153 python-setuptools
9154 python-wheel))
9155 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
9156 (synopsis "Find an unused port, reliably")
9157 (description
9158 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
9159it.")
9160 (license license:expat)))
9161
9162(define-public python-flask-migrate
9163 (package
9164 (name "python-flask-migrate")
9165 (version "4.1.0")
9166 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
9167 (source (origin
9168 (method git-fetch)
9169 (uri (git-reference (url home-page)
9170 (commit (string-append "v" version))))
9171 (file-name (git-file-name name version))
9172 (sha256
9173 (base32
9174 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
9175 (build-system pyproject-build-system)
9176 (propagated-inputs
9177 (list python-flask python-alembic python-flask-sqlalchemy))
9178 (native-inputs
9179 (list python-pytest python-setuptools python-wheel))
9180 (synopsis "SQLAlchemy database migrations for Flask programs using
9181Alembic")
9182 (description "This package contains SQLAlchemy database migration tools
9183for Flask programs that are using @code{python-alembic}.")
9184 (license license:expat)))
9185
9186(define-public python-genshi
9187 (package
9188 (name "python-genshi")
9189 (version "0.7.10")
9190 (source
9191 (origin
9192 (method git-fetch)
9193 (uri (git-reference
9194 (url "https://github.com/edgewall/genshi")
9195 (commit version)))
9196 (file-name (git-file-name name version))
9197 (sha256
9198 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
9199 (build-system pyproject-build-system)
9200 (arguments (list #:test-backend #~'unittest))
9201 (native-inputs (list python-setuptools))
9202 (propagated-inputs (list python-six))
9203 (home-page "https://genshi.edgewall.org/")
9204 (synopsis "Toolkit for generation of output for the web")
9205 (description "Genshi is a Python library that provides an integrated set
9206of components for parsing, generating, and processing HTML, XML or other
9207textual content for output generation on the web.")
9208 (license license:bsd-3)))
9209
9210(define-public python-flask-principal
9211 (package
9212 (name "python-flask-principal")
9213 (version "0.4.0")
9214 (source
9215 (origin
9216 (method git-fetch)
9217 (uri (git-reference
9218 (url "https://github.com/pallets-eco/flask-principal")
9219 (commit version)))
9220 (file-name (git-file-name name version))
9221 (sha256
9222 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
9223 (build-system pyproject-build-system)
9224 (propagated-inputs (list python-blinker))
9225 (native-inputs (list python-flask python-pynose python-setuptools))
9226 (home-page "https://github.com/pallets-eco/flask-principal")
9227 (synopsis "Identity management for Flask")
9228 (description
9229 "@code{flask_principal} is a identity management library for Flask. It
9230supports managing both authentication and authorization data in a thread-local
9231variable.")
9232 (license license:expat)))
9233
9234(define-public python-flask-httpauth
9235 (package
9236 (name "python-flask-httpauth")
9237 (version "4.8.0")
9238 (source
9239 (origin
9240 (method url-fetch)
9241 (uri (pypi-uri "Flask-HTTPAuth" version))
9242 (sha256
9243 (base32
9244 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
9245 (build-system pyproject-build-system)
9246 (propagated-inputs (list python-flask))
9247 (native-inputs
9248 (list nss-certs-for-test
9249 python-pytest
9250 python-setuptools
9251 python-wheel))
9252 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
9253 (synopsis "Basic and Digest HTTP authentication for Flask routes")
9254 (description "@code{flask_httpauth} provides Basic and Digest HTTP
9255authentication for Flask routes.")
9256 (license license:expat)))
9257
9258(define-public python-uritemplate
9259 (package
9260 (name "python-uritemplate")
9261 (version "4.2.0")
9262 (source
9263 (origin
9264 (method url-fetch)
9265 (uri (pypi-uri "uritemplate" version))
9266 (sha256
9267 (base32
9268 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
9269 (build-system pyproject-build-system)
9270 (native-inputs (list python-pytest python-setuptools))
9271 (home-page "https://uritemplate.readthedocs.io/")
9272 (synopsis "Library to deal with URI Templates")
9273 (description "@code{uritemplate} provides Python library to deal with URI
9274Templates.")
9275 ;; The software is made available under the terms of *either* of the
9276 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
9277 ;; are made under *both* licenses (excerpt from the LICENSE file).
9278 (license (list license:bsd-2 license:asl2.0))))
9279
9280(define-public python-uritemplate-3
9281 (package
9282 (inherit python-uritemplate)
9283 (name "python-uritemplate")
9284 (version "3.0.1")
9285 (source (origin
9286 (method url-fetch)
9287 (uri (pypi-uri "uritemplate" version))
9288 (sha256
9289 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
9290
9291(define-public python-publicsuffix2
9292 (package
9293 (name "python-publicsuffix2")
9294 (version "2.2019-12-21")
9295 (source
9296 (origin
9297 (method git-fetch)
9298 (uri (git-reference
9299 (url "https://github.com/pombredanne/python-publicsuffix2")
9300 (commit (string-append "release-" version))))
9301 (file-name (git-file-name name version))
9302 (sha256
9303 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
9304 (build-system pyproject-build-system)
9305 (arguments
9306 (list
9307 #:tests? #f ;the test suite requires network access
9308 #:phases
9309 #~(modify-phases %standard-phases
9310 (add-after 'unpack 'ignore-maintainer-inputs
9311 (lambda _
9312 ;; Comment out a demand for python-requests, which is used only by
9313 ;; the unused ‘update_psl’ helper command.
9314 (substitute* "setup.py"
9315 (("'requests " match)
9316 (format #f "# ~a" match))))))))
9317 (native-inputs (list python-setuptools))
9318 (home-page "https://github.com/pombredanne/python-publicsuffix2")
9319 (synopsis
9320 "Get a public suffix for a domain name using the Public Suffix List")
9321 (description
9322 "Get a public suffix for a domain name using the Public Suffix List.
9323Forked from and using the same API as the publicsuffix package.")
9324 (license (list license:expat license:mpl2.0))))
9325
9326(define-public python-werkzeug
9327 (package
9328 (name "python-werkzeug")
9329 (version "3.1.3")
9330 (source
9331 (origin
9332 (method url-fetch)
9333 (uri (pypi-uri "werkzeug" version))
9334 (sha256
9335 (base32
9336 "0ij7si3aa3ykac7k7fz481h4majqqwn2iqwhjxkji4y18plkqwk0"))))
9337 (build-system pyproject-build-system)
9338 (arguments
9339 (list
9340 #:test-flags
9341 ;; Test requiring networking setup.
9342 #~(list "--ignore=tests/test_serving.py"
9343 "--deselect=tests/test_debug.py::test_basic"
9344 "--deselect=tests/test_exceptions.py::test_response_body"
9345 "--deselect=tests/middleware/test_http_proxy.py::test_http_proxy")))
9346 (native-inputs
9347 (list python-flit-core
9348 python-pytest
9349 python-watchdog
9350 python-ephemeral-port-reserve
9351 python-pytest-timeout
9352 python-pytest-xprocess))
9353 (propagated-inputs
9354 (list python-markupsafe
9355 python-requests))
9356 (home-page "https://palletsprojects.com/p/werkzeug/")
9357 (synopsis "Utilities for WSGI applications")
9358 (description "One of the most advanced WSGI utility modules. It includes a
9359powerful debugger, full-featured request and response objects, HTTP utilities to
9360handle entity tags, cache control headers, HTTP dates, cookie handling, file
9361uploads, a powerful URL routing system and a bunch of community-contributed
9362addon modules.")
9363 (license license:x11)))
9364
9365(define-public python-werkzeug-1.0
9366 (package
9367 (inherit python-werkzeug)
9368 (version "1.0.1")
9369 (source (origin
9370 (method url-fetch)
9371 (uri (pypi-uri "Werkzeug" version))
9372 (sha256
9373 (base32
9374 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
9375 (patches (search-patches "python-werkzeug-tests.patch"))))
9376 (arguments
9377 (list
9378 #:phases
9379 '(modify-phases %standard-phases
9380 (add-after 'unpack 'ignore-warnings
9381 (lambda _
9382 (substitute* "setup.cfg"
9383 ((" error.*") "")))))))
9384 (propagated-inputs
9385 (list python-requests))
9386 (native-inputs
9387 (list python-pytest python-pytest-timeout python-setuptools
9388 python-wheel))))
9389
9390(define-public python-bottle
9391 (package
9392 (name "python-bottle")
9393 (version "0.13.4")
9394 (source
9395 (origin
9396 (method url-fetch)
9397 (uri (pypi-uri "bottle" version))
9398 (sha256
9399 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
9400 (build-system pyproject-build-system)
9401 (native-inputs (list python-pytest python-setuptools))
9402 (home-page "https://bottlepy.org/")
9403 (synopsis "WSGI framework for small web-applications")
9404 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
9405 (license license:expat)))
9406
9407(define-public python-wtforms
9408 (package
9409 (name "python-wtforms")
9410 (version "3.2.2")
9411 (source
9412 (origin
9413 (method url-fetch)
9414 (uri (pypi-uri "wtforms" version))
9415 (sha256
9416 (base32 "14qbayp2gfmahaqn5migwyz2h1cq3gcdr4q2vd75vwvhhqzwf03v"))))
9417 (build-system pyproject-build-system)
9418 (native-inputs
9419 (list python-babel
9420 python-email-validator
9421 python-hatchling
9422 python-pytest
9423 python-setuptools))
9424 (propagated-inputs (list python-markupsafe))
9425 (home-page "https://wtforms.readthedocs.io/")
9426 (synopsis
9427 "Form validation and rendering library for Python web development")
9428 (description
9429 "WTForms is a flexible forms validation and rendering library
9430for Python web development. It is very similar to the web form API
9431available in Django, but is a standalone package.")
9432 (license license:bsd-3)))
9433
9434(define-public python-wtforms-sqlalchemy
9435 (package
9436 (name "python-wtforms-sqlalchemy")
9437 (version "0.4.1")
9438 (source
9439 (origin
9440 (method url-fetch)
9441 (uri (pypi-uri "WTForms-SQLAlchemy" version))
9442 (sha256
9443 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
9444 (build-system pyproject-build-system)
9445 (native-inputs (list python-pytest python-setuptools python-wheel))
9446 (propagated-inputs (list python-sqlalchemy python-wtforms))
9447 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
9448 (synopsis "SQLAlchemy tools for WTForms")
9449 (description
9450 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
9451package from WTForms. The package has been renamed to
9452@code{wtforms_sqlalchemy} but otherwise should function the same as
9453@code{wtforms.ext.sqlalchemy} did.")
9454 (license license:bsd-3)))
9455
9456(define-public python-urlgrabber
9457 (package
9458 (name "python-urlgrabber")
9459 (version "4.1.0")
9460 (source
9461 (origin
9462 (method url-fetch)
9463 (uri (pypi-uri "urlgrabber" version))
9464 (sha256
9465 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
9466 (build-system pyproject-build-system)
9467 (arguments
9468 (list
9469 #:tests? #f ; Most tests require network access.
9470 #:phases
9471 #~(modify-phases %standard-phases
9472 (replace 'check
9473 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
9474 (when tests?
9475 (invoke "python" "test/runtests.py")))))))
9476 (native-inputs (list python-setuptools))
9477 (propagated-inputs
9478 (list python-pycurl python-setuptools python-six))
9479 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
9480 (synopsis "High-level cross protocol url-grabber")
9481 (description
9482 "@code{urlgrabber} is a library that unifies access to files available on
9483the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
9484supports features like HTTP keep-alive, reget, throttling and more.")
9485 (license license:lgpl2.1+)))
9486
9487(define-public python-pycares
9488 (package
9489 (name "python-pycares")
9490 (version "4.11.0")
9491 (source
9492 (origin
9493 (method git-fetch)
9494 (uri (git-reference
9495 (url "https://github.com/saghul/pycares")
9496 (commit (string-append "v" version))))
9497 (file-name (git-file-name name version))
9498 (sha256
9499 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
9500 (snippet #~(begin
9501 (rmdir "deps/c-ares")))))
9502 (build-system pyproject-build-system)
9503 (arguments
9504 (list
9505 ;; XXX: Half of the tests require internet access
9506 ;; There is currently no markers to avoid running them.
9507 #:tests? #f
9508 #:phases
9509 #~(modify-phases %standard-phases
9510 (add-after 'unpack 'configure-system-lib
9511 (lambda _
9512 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
9513 (native-inputs (list python-pytest python-setuptools))
9514 (inputs (list c-ares))
9515 (propagated-inputs (list python-cffi))
9516 (home-page "https://github.com/saghul/pycares")
9517 (synopsis "Python interface for @code{c-ares}")
9518 (description
9519 "@code{pycares} is a Python module which provides an interface to
9520@code{c-ares}, a C library that performs DNS requests and name resolutions
9521asynchronously.")
9522 (license license:expat)))
9523
9524(define-public python-yarl
9525 (package
9526 (name "python-yarl")
9527 (version "1.18.3")
9528 (source
9529 (origin
9530 (method url-fetch)
9531 (uri (pypi-uri "yarl" version))
9532 (sha256
9533 (base32
9534 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
9535 (build-system pyproject-build-system)
9536 (arguments
9537 (list
9538 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
9539 #:phases
9540 '(modify-phases %standard-phases
9541 (add-after 'unpack 'avoid-pytest-cov-preload
9542 (lambda _
9543 (substitute* "pytest.ini"
9544 (("-p pytest_cov") ""))))
9545 (add-after 'unpack 'patch-build-system
9546 (lambda _
9547 ;; XXX: I don't know how to tell it to build the extensions in
9548 ;; place.
9549 (substitute* "packaging/pep517_backend/_backend.py"
9550 (("build_inplace=False") "build_inplace=True")))))))
9551 (native-inputs
9552 (list python-cython
9553 python-expandvars
9554 python-pytest
9555 python-pytest-xdist
9556 python-setuptools
9557 python-tomli))
9558 (propagated-inputs
9559 (list python-packaging python-idna python-multidict python-propcache))
9560 (home-page "https://github.com/aio-libs/yarl/")
9561 (synopsis "Yet another URL library")
9562 (description "@code{yarl} module provides handy @code{URL} class
9563for URL parsing and changing.")
9564 (license license:asl2.0)))
9565
9566(define-public python-canvasapi
9567 (package
9568 (name "python-canvasapi")
9569 (version "3.4.0")
9570 (source (origin
9571 (method git-fetch)
9572 (uri (git-reference
9573 (url "https://github.com/ucfopen/canvasapi")
9574 (commit (string-append "v" version))))
9575 (file-name (git-file-name name version))
9576 (sha256
9577 (base32
9578 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
9579 (build-system pyproject-build-system)
9580 (propagated-inputs (list python-arrow python-pytz python-requests))
9581 (native-inputs (list python-pytest
9582 python-requests-mock
9583 python-setuptools
9584 python-urllib3))
9585 (home-page "https://github.com/ucfopen/canvasapi")
9586 (synopsis "API wrapper for the Canvas LMS")
9587 (description
9588 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
9589The library enables developers to programmatically manage Canvas courses,
9590users, gradebooks, and more.")
9591 (license license:expat)))
9592
9593(define-public python-google
9594 (package
9595 (name "python-google")
9596 (version "3.0.0")
9597 (source
9598 (origin
9599 (method url-fetch)
9600 (uri (pypi-uri "google" version))
9601 (sha256
9602 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
9603 (build-system pyproject-build-system)
9604 (arguments (list #:tests? #f)) ;There are no tests.
9605 (native-inputs (list python-setuptools))
9606 (propagated-inputs (list python-beautifulsoup4))
9607 (home-page "https://breakingcode.wordpress.com/")
9608 (synopsis "Python bindings to the Google search engine")
9609 (description
9610 "This package provides Python bindings for using the Google search
9611engine. Its module is called @code{googlesearch}.")
9612 (license license:bsd-3)))
9613
9614(define-public python-google-api-client
9615 (package
9616 (name "python-google-api-client")
9617 (version "2.187.0")
9618 (source
9619 (origin
9620 (method git-fetch)
9621 (uri (git-reference
9622 (url "https://github.com/google/google-api-python-client")
9623 (commit (string-append "v" version))))
9624 (file-name (git-file-name name version))
9625 (sha256
9626 (base32 "09vq5d32avri0gl8c7nn5dv2xds1jzjms7vqk3gn66nm2m37x8mv"))))
9627 (build-system pyproject-build-system)
9628 (arguments
9629 (list
9630 #:test-flags
9631 #~(list
9632 "-k"
9633 (string-join
9634 (list
9635 ;; XXX: Deprecated behavior.
9636 "not test_client_options_universe_configured_with_mtls"
9637 "test_universe_env_var_configured_with_mtls"
9638 ;; XXX: Requires CA certificates.
9639 "test_credentials_and_credentials_file_mutually_exclusive")
9640 " and not ")
9641 "tests")))
9642 (native-inputs
9643 (list python-parameterized
9644 python-pytest
9645 python-setuptools))
9646 (propagated-inputs
9647 (list python-google-api-core
9648 python-google-auth
9649 python-google-auth-httplib2
9650 python-httplib2
9651 python-pyparsing
9652 python-uritemplate-3))
9653 (home-page "https://github.com/google/google-api-python-client")
9654 (synopsis "Core Python library for accessing Google APIs")
9655 (description "Python client library for Google's discovery based APIs")
9656 (license license:asl2.0)))
9657
9658(define-public python-google-auth-httplib2
9659 (package
9660 (name "python-google-auth-httplib2")
9661 (version "0.2.0")
9662 (source (origin
9663 (method url-fetch)
9664 (uri (pypi-uri "google-auth-httplib2" version))
9665 (sha256
9666 (base32 "018fckshilc6z2qpj1pclh8haanbq3lr85w6p4g4z5wgyjnppaiq"))))
9667 (build-system pyproject-build-system)
9668 (propagated-inputs
9669 (list python-google-auth python-httplib2))
9670 (native-inputs
9671 (list python-pytest
9672 python-pyparsing
9673 python-pytest-localserver
9674 python-flask
9675 python-setuptools))
9676 (home-page
9677 "https://github.com/GoogleCloudPlatform/google-auth-library-python-httplib2")
9678 (synopsis "Google Authentication Library: httplib2 transport")
9679 (description "This package provides a Google Authentication Library plugin
9680for httplib2 transport.")
9681 (license license:asl2.0)))
9682
9683(define-public python-google-auth-oauthlib
9684 (package
9685 (name "python-google-auth-oauthlib")
9686 (version "1.2.4")
9687 (home-page
9688 "https://github.com/GoogleCloudPlatform/\
9689google-auth-library-python-oauthlib")
9690 (source
9691 (origin
9692 (method git-fetch)
9693 (uri (git-reference
9694 (url home-page)
9695 (commit (string-append "v" version))))
9696 (file-name (git-file-name name version))
9697 (sha256
9698 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
9699 (build-system pyproject-build-system)
9700 (propagated-inputs (list python-google-auth python-requests-oauthlib))
9701 (native-inputs
9702 (list python-click python-mock python-pytest python-setuptools))
9703 (synopsis "Google Authentication Library: oauthlib")
9704 (description "This package provides a Google Authentication Library plugin
9705with oauthlib.")
9706 (license license:asl2.0)))
9707
9708(define-public whoogle-search
9709 (package
9710 (name "whoogle-search")
9711 (version "0.8.4")
9712 (source (origin
9713 (method url-fetch)
9714 (uri (pypi-uri "whoogle-search" version))
9715 (sha256
9716 (base32
9717 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
9718 (build-system pyproject-build-system)
9719 (arguments
9720 (list
9721 ;; The tests need network access
9722 #:tests? #f))
9723 (propagated-inputs
9724 (list python-beautifulsoup4
9725 python-brotli
9726 python-cryptography
9727 python-cssutils
9728 python-defusedxml
9729 python-flask
9730 python-dotenv
9731 python-requests
9732 python-stem
9733 python-validators
9734 python-waitress))
9735 (native-inputs (list python-setuptools python-wheel))
9736 (home-page "https://github.com/benbusby/whoogle-search")
9737 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
9738 (description
9739 "Get Google results, but without any ads, javascript, AMP links,
9740cookies, or IP address tracking. Quick and simple to implement as a primary
9741search engine replacement on both desktop and mobile.")
9742 (license license:expat)))
9743
9744(define-public python-hawkauthlib
9745 (package
9746 (name "python-hawkauthlib")
9747 (version "2.0.0")
9748 (source
9749 (origin
9750 (method git-fetch)
9751 (uri (git-reference
9752 (url "https://github.com/mozilla-services/hawkauthlib")
9753 (commit (string-append "v" version))))
9754 (file-name (git-file-name name version))
9755 (sha256
9756 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
9757 (build-system pyproject-build-system)
9758 (arguments
9759 (list
9760 #:test-backend #~'unittest
9761 #:phases
9762 #~(modify-phases %standard-phases
9763 (add-after 'unpack 'fix-python-incompatibilities
9764 (lambda _
9765 (substitute* (find-files "hawkauthlib/tests" "\\.py$")
9766 (("assertEquals") "assertEqual")))))))
9767 (native-inputs (list python-setuptools))
9768 (propagated-inputs (list python-requests python-webob))
9769 (home-page "https://github.com/mozilla-services/hawkauthlib")
9770 (synopsis "Hawk Access Authentication protocol")
9771 (description
9772 "This is a low-level Python library for implementing Hawk Access
9773Authentication, a simple HTTP request-signing scheme.")
9774 (license license:mpl2.0)))
9775
9776(define-public python-pybrowserid
9777 (package
9778 (name "python-pybrowserid")
9779 (version "0.14.0")
9780 (source
9781 (origin
9782 (method git-fetch)
9783 (uri (git-reference
9784 (url "https://github.com/mozilla/PyBrowserID")
9785 (commit version)))
9786 (file-name (git-file-name name version))
9787 (sha256
9788 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
9789 (build-system pyproject-build-system)
9790 (arguments
9791 (list
9792 #:test-backend #~'unittest
9793 #:phases
9794 #~(modify-phases %standard-phases
9795 (add-after 'unpack 'python-3.12-compatibility
9796 (lambda _
9797 (substitute* (find-files "browserid/tests" "\\.py")
9798 (("assertEquals") "assertEqual")))))))
9799 (propagated-inputs (list python-requests))
9800 (native-inputs (list python-mock python-setuptools))
9801 (home-page "https://github.com/mozilla/PyBrowserID")
9802 (synopsis "Python library for the BrowserID protocol")
9803 (description
9804 "This is a Python client library for the BrowserID protocol that
9805underlies Mozilla Persona.")
9806 (license license:mpl2.0)))
9807
9808(define-public python-pyfxa
9809 (package
9810 (name "python-pyfxa")
9811 (version "0.8.1")
9812 (source
9813 (origin
9814 (method git-fetch)
9815 (uri (git-reference
9816 (url "https://github.com/mozilla/PyFxA")
9817 (commit (string-append "v" version))))
9818 (file-name (git-file-name name version))
9819 (sha256
9820 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
9821 (build-system pyproject-build-system)
9822 (arguments
9823 (list
9824 ;; These tests require network access
9825 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
9826 (propagated-inputs
9827 (list python-cryptography
9828 python-pyjwt
9829 python-parameterized
9830 python-hawkauthlib
9831 python-requests))
9832 (native-inputs
9833 (list python-grequests
9834 python-hatchling
9835 python-mock
9836 python-pytest
9837 python-responses))
9838 (home-page "https://github.com/mozilla/PyFxA")
9839 (synopsis "Firefox Accounts client library for Python")
9840 (description
9841 "This is a Python library for interacting with the Firefox Accounts
9842ecosystem.")
9843 (license license:mpl2.0)))
9844
9845(define-public python-hyperlink
9846 (package
9847 (name "python-hyperlink")
9848 (version "21.0.0")
9849 (source
9850 (origin
9851 (method url-fetch)
9852 (uri (pypi-uri "hyperlink" version))
9853 (sha256
9854 (base32
9855 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
9856 (build-system pyproject-build-system)
9857 (arguments
9858 (list #:phases
9859 #~(modify-phases %standard-phases
9860 (add-before 'check 'pretend-to-be-CI
9861 (lambda _
9862 ;; Pretend to be a CI system to skip flaky tests.
9863 (setenv "CI" "true"))))))
9864 (native-inputs
9865 (list python-pytest python-setuptools python-wheel))
9866 (propagated-inputs
9867 (list python-idna))
9868 (home-page "https://github.com/python-hyper/hyperlink")
9869 (synopsis "Python module to create immutable URLs according to spec")
9870 (description "This package provides a Python module to create immutable, and
9871correct URLs for Python according to RFCs 3986 and 3987.")
9872 (license license:expat)))
9873
9874(define-public python-treq
9875 (package
9876 (name "python-treq")
9877 (version "24.9.1")
9878 (source
9879 (origin
9880 (method url-fetch)
9881 (uri (pypi-uri "treq" version))
9882 (sha256
9883 (base32
9884 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
9885 (build-system pyproject-build-system)
9886 (native-inputs
9887 (list python-httpbin
9888 python-pytest
9889 python-service-identity
9890 python-setuptools
9891 python-wheel))
9892 (propagated-inputs
9893 (list python-attrs
9894 python-hyperlink
9895 python-incremental
9896 python-requests
9897 python-twisted
9898 python-typing-extensions))
9899 (home-page "https://github.com/twisted/treq")
9900 (synopsis "Requests-like API built on top of twisted.web's Agent")
9901 (description "This package provides an HTTP library inspired by
9902@code{requests} but written on top of Twisted's @code{Agents}. It offers a
9903high level API for making HTTP requests when using Twisted.")
9904 (license license:expat)))
9905
9906(define-public python-autobahn
9907 (package
9908 (name "python-autobahn")
9909 (version "25.11.1")
9910 (source
9911 (origin
9912 (method url-fetch)
9913 (uri (pypi-uri "autobahn" version))
9914 (sha256
9915 (base32
9916 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
9917 (build-system pyproject-build-system)
9918 (arguments
9919 (list
9920 ;; The tests fail to run:
9921 ;; https://github.com/crossbario/autobahn-python/issues/1117
9922 #:tests? #f
9923 #:phases #~(modify-phases %standard-phases
9924 (add-after 'unpack 'relax-zope-interface
9925 (lambda _
9926 ;; python-zope-interface is a world rebuild package
9927 ;; and our one-digit lower minor version seems to be
9928 ;; fine.
9929 (substitute* "setup.py"
9930 (("zope.interface>=5.2.0")
9931 "zope.interface>=5.1.0"))))
9932 (add-after 'unpack 'strip-xbr
9933 (lambda _
9934 ;; Strip new XBR feature which isn't available in Guix.
9935 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
9936 (native-inputs (list python-setuptools python-wheel))
9937 (propagated-inputs (list python-cbor2
9938 python-cryptography
9939 python-hyperlink
9940 python-msgpack
9941 python-py-ubjson
9942 python-twisted
9943 python-txaio
9944 python-ujson))
9945 (home-page "https://github.com/crossbario/autobahn-python/")
9946 (synopsis "Web Application Messaging Protocol implementation")
9947 (description "This package provides an implementation of the @dfn{Web Application
9948Messaging Protocol} (WAMP). WAMP connects components in distributed
9949applications using Publish and Subscribe (PubSub) and routed Remote Procedure
9950Calls (rRPC). It is ideal for distributed, multi-client and server applications
9951such as IoT applications or multi-user database-driven business applications.")
9952 (license license:expat)))
9953
9954(define-public python-ws4py
9955 (package
9956 (name "python-ws4py")
9957 (version "0.6.0")
9958 (source
9959 (origin
9960 (method git-fetch)
9961 (uri (git-reference
9962 (url "https://github.com/Lawouach/WebSocket-for-Python")
9963 (commit version)))
9964 (file-name (git-file-name name version))
9965 (sha256
9966 (base32
9967 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
9968 (build-system pyproject-build-system)
9969 (arguments
9970 (list
9971 #:phases
9972 #~(modify-phases %standard-phases
9973 (add-after 'unpack 'remove-cherrypy-support
9974 (lambda _
9975 (delete-file "ws4py/server/cherrypyserver.py")
9976 (delete-file "test/test_cherrypy.py"))))))
9977 (native-inputs (list python-setuptools python-pytest))
9978 (propagated-inputs
9979 (list python-gevent python-tornado))
9980 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
9981 (synopsis "WebSocket client and server library")
9982 (description
9983 "This package provides a WebSocket client and server library for Python.")
9984 (license license:bsd-3)))
9985
9986(define-public python-slowapi
9987 (package
9988 (name "python-slowapi")
9989 (version "0.1.9")
9990 (source
9991 (origin
9992 (method git-fetch)
9993 (uri (git-reference
9994 (url "https://github.com/laurents/slowapi")
9995 (commit (string-append "v" version))))
9996 (file-name (git-file-name name version))
9997 (sha256
9998 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
9999 (build-system pyproject-build-system)
10000 (arguments
10001 (list
10002 #:test-flags
10003 ;; These tests fail because the timestamp contains more decimal points
10004 ;; than expected, so a simple equality comparison fails.
10005 '(list "-k" (string-append "not test_headers_no_breach"
10006 " and not test_headers_breach"))))
10007 (propagated-inputs (list python-limits python-redis))
10008 (native-inputs
10009 (list python-fastapi
10010 python-hiro
10011 python-mock
10012 python-poetry-core
10013 python-pytest))
10014 (home-page "https://github.com/laurents/slowapi")
10015 (synopsis "Rate limiting extension for Starlette and Fastapi")
10016 (description
10017 "This package provides a rate limiting extension for Starlette and
10018Fastapi.")
10019 (license license:expat)))
10020
10021(define-public python-slugify
10022 (package
10023 (name "python-slugify")
10024 (version "8.0.4")
10025 (source
10026 (origin
10027 (method git-fetch)
10028 (uri (git-reference
10029 (url "https://github.com/un33k/python-slugify")
10030 (commit (string-append "v" version))))
10031 (file-name (git-file-name name version))
10032 (sha256
10033 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
10034 (build-system pyproject-build-system)
10035 (arguments (list #:test-backend #~'unittest))
10036 (native-inputs (list python-setuptools))
10037 (propagated-inputs (list python-unidecode python-text-unidecode))
10038 (home-page "https://github.com/un33k/python-slugify")
10039 (synopsis "Python Slugify application that handles Unicode")
10040 (description "This package provides a @command{slufigy} command and
10041library to create slugs from unicode strings while keeping it DRY.")
10042 (license license:expat)))
10043
10044(define-public python-branca
10045 (package
10046 (name "python-branca")
10047 (version "0.7.2")
10048 (source
10049 (origin
10050 (method git-fetch) ; no tests in PyPI
10051 (uri (git-reference
10052 (url "https://github.com/python-visualization/branca")
10053 (commit (string-append "v" version))))
10054 (file-name (git-file-name name version))
10055 (sha256
10056 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
10057 (build-system pyproject-build-system)
10058 (arguments
10059 ;; This file requires Selenium.
10060 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
10061 ;; This test passes but is very slow.
10062 "-k" "not test_color_brewer_extendability")))
10063 (propagated-inputs (list python-jinja2))
10064 (native-inputs
10065 (list python-numpy
10066 python-pytest
10067 python-setuptools
10068 python-setuptools-scm
10069 python-wheel))
10070 (home-page "https://github.com/python-visualization/branca")
10071 (synopsis "Generate complex HTML+JS pages with Python")
10072 (description "This library is a spinoff from @code{folium} that would host
10073the non-map-specific features. It can be used to generate HTML + JS.")
10074 (license license:expat)))
10075
10076(define-public python-tinycss2
10077 (package
10078 (name "python-tinycss2")
10079 (version "1.5.1")
10080 (source
10081 (origin
10082 (method git-fetch)
10083 (uri (git-reference
10084 (url "https://github.com/Kozea/tinycss2")
10085 (commit (string-append "v" version))
10086 (recursive? #true)))
10087 (file-name (git-file-name name version))
10088 (sha256
10089 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
10090 (build-system pyproject-build-system)
10091 (native-inputs
10092 (list python-flit
10093 python-pytest))
10094 (propagated-inputs
10095 (list python-webencodings))
10096 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
10097 (synopsis "Low-level CSS parser for Python")
10098 (description "@code{tinycss2} can parse strings, return Python objects
10099representing tokens and blocks, and generate CSS strings corresponding to
10100these objects.
10101
10102Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
10103grammar of CSS but doesn’t know specific rules, properties or values supported
10104in various CSS modules.")
10105 (license license:bsd-3)))
10106
10107(define-public python-tinyhtml5
10108 (package
10109 (name "python-tinyhtml5")
10110 (version "2.1.0")
10111 (source
10112 (origin
10113 (method git-fetch)
10114 (uri (git-reference
10115 (url "https://github.com/CourtBouillon/tinyhtml5")
10116 (commit version)))
10117 (file-name (git-file-name name version))
10118 (sha256
10119 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
10120 (build-system pyproject-build-system)
10121 (propagated-inputs
10122 (list python-webencodings))
10123 (native-inputs
10124 (list python-flit-core
10125 python-pytest))
10126 (home-page "https://github.com/CourtBouillon/tinyhtml5")
10127 (synopsis "Small HTML parser based on the WHATWG HTML specification")
10128 (description "This Python module is a HTML5 parser that transforms a
10129possibly malformed HTML document into an ElementTree tree. This module is a
10130simplified fork of html5lib.")
10131 (license license:expat)))
10132
10133(define-public python-cssselect2
10134 (package
10135 (name "python-cssselect2")
10136 (version "0.9.0")
10137 (source
10138 (origin
10139 (method git-fetch)
10140 (uri (git-reference
10141 (url "https://github.com/Kozea/cssselect2")
10142 (commit version)))
10143 (file-name (git-file-name name version))
10144 (sha256
10145 (base32 "1drvb83siq9s6dygyhab6kzk2v2ib6cv51ls42p4jrxs9q8cdiw0"))))
10146 (build-system pyproject-build-system)
10147 (propagated-inputs
10148 (list python-tinycss2))
10149 (native-inputs
10150 (list python-flit-core
10151 python-pytest))
10152 (home-page "https://doc.courtbouillon.org/cssselect2/stable/")
10153 (synopsis "CSS selectors for Python ElementTree")
10154 (description "@code{cssselect2} is a straightforward implementation of
10155CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
10156ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
10157
10158Unlike the Python package @code{cssselect}, it does not translate selectors to
10159XPath and therefore does not have all the correctness corner cases that are
10160hard or impossible to fix in cssselect.")
10161 (license license:bsd-3)))
10162
10163(define-public python-uvloop
10164 (package
10165 (name "python-uvloop")
10166 (version "0.21.0")
10167 (source
10168 (origin
10169 (method url-fetch)
10170 (uri (pypi-uri "uvloop" version))
10171 (sha256
10172 (base32 "1qq46ym3ymzfn4j6fnykfmr1f4qnb7x7p15dlw37hi38v87jpw9v"))
10173 (modules '((guix build utils)))
10174 (snippet
10175 '(begin (delete-file-recursively "vendor")
10176 (delete-file "uvloop/loop.c")))))
10177 (build-system pyproject-build-system)
10178 (arguments
10179 (list
10180 #:test-flags
10181 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
10182 ;; to get a meaningful idea about where.
10183 #~(list "--timeout=300"
10184 "--timeout-method=thread"
10185 "-k" (string-join
10186 (list
10187 ;; Timeout, because SIGINT cannot be sent to child.
10188 "not test_signals_sigint_pycode_continue"
10189 "test_signals_sigint_pycode_stop"
10190 "test_signals_sigint_uvcode"
10191 "test_signals_sigint_uvcode_two_loop_runs"
10192 ;; This test is racy and prone to get stuck on
10193 ;; various platforms, possibly a aiohttp issue:
10194 ;; https://github.com/MagicStack/uvloop/issues/412
10195 "test_remote_shutdown_receives_trailing_data"
10196 ;; It looks like pytest is preventing
10197 ;; custom stdout/stderr redirection,
10198 ;; even with -s.
10199 "test_process_streams_redirect"
10200 ;; FileNotFoundError: [Errno 2] No such file or
10201 ;; directory
10202 "test_process_env_2"
10203 ;; socket.gaierror: [Errno -2] Name or service not known
10204 "test_getaddrinfo_21"
10205 #$@(if (target-riscv64?)
10206 `("test_renegotiation")
10207 `()))
10208 " and not "))
10209 #:phases
10210 #~(modify-phases %standard-phases
10211 (add-after 'unpack 'preparations
10212 (lambda _
10213 ;; Use packaged libuv.
10214 (substitute* "setup.py" (("self.use_system_libuv = False")
10215 "self.use_system_libuv = True"))
10216 ;; Replace hardcoded shell command.
10217 (substitute* "uvloop/loop.pyx"
10218 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))))
10219 #$@(if (target-riscv64?)
10220 `((add-after 'unpack 'adjust-test-timeouts
10221 (lambda _
10222 (substitute* '("tests/test_tcp.py"
10223 "tests/test_unix.py")
10224 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
10225 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
10226 '())
10227 (add-before 'check 'pre-check
10228 (lambda* (#:key tests? #:allow-other-keys)
10229 (when tests?
10230 ;; Remove Python module, which conflicts with the installed
10231 ;; version, but lacks the built C module.
10232 (delete-file-recursively "uvloop")))))))
10233 (native-inputs
10234 (list python-aiohttp
10235 python-cython
10236 python-psutil
10237 python-pyopenssl
10238 python-pytest
10239 python-pytest-timeout
10240 python-setuptools
10241 python-wheel))
10242 (inputs
10243 (list libuv))
10244 (home-page "https://github.com/MagicStack/uvloop")
10245 (synopsis "Fast implementation of asyncio event loop on top of libuv")
10246 (description
10247 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
10248event loop. It is implemented in Cython and uses libuv under the hood.")
10249 (license license:expat)))
10250
10251(define-public gunicorn
10252 (package
10253 (name "gunicorn")
10254 (version "25.3.0")
10255 (source
10256 (origin
10257 (method url-fetch)
10258 (uri (pypi-uri "gunicorn" version))
10259 (sha256
10260 (base32
10261 "12g85w735s4dszjfidi4vh786rfxsa5rd60il0fcvxknkwpinkpp"))))
10262 (outputs '("out" "doc"))
10263 (build-system pyproject-build-system)
10264 (arguments
10265 `(#:test-flags
10266 ;; Disable the geventlet tests because eventlet uses dnspython, which
10267 ;; does not work in the build container due to lack of /etc/resolv.conf
10268 '("--ignore=tests/workers/test_geventlet.py")
10269 #:phases (modify-phases %standard-phases
10270 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
10271 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
10272 ;; size. Override it to only add the essential entries.
10273 (replace 'wrap
10274 (lambda* (#:key native-inputs inputs outputs
10275 #:allow-other-keys)
10276 (let* ((out (assoc-ref outputs "out"))
10277 (python (assoc-ref (or native-inputs inputs)
10278 "python"))
10279 (sitedir (string-append "/lib/python"
10280 (python-version python)
10281 "/site-packages")))
10282 (wrap-program (string-append out "/bin/gunicorn")
10283 `("PYTHONPATH" ":" prefix
10284 ,(map (lambda (output)
10285 (string-append output sitedir))
10286 (list python out))))))))))
10287 (inputs (list bash-minimal))
10288 (native-inputs
10289 (list binutils ;for ctypes.util.find_library()
10290 python-eventlet
10291 python-gevent
10292 python-h2
10293 python-httpx
10294 python-pytest
10295 python-pytest-asyncio
10296 python-setuptools
10297 python-uvloop))
10298 (propagated-inputs
10299 (list python-packaging
10300 python-setuptools
10301 python-wheel))
10302 (home-page "https://gunicorn.org/")
10303 (synopsis "Python WSGI HTTP Server for UNIX")
10304 (description
10305 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
10306Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
10307Unicorn project. The Gunicorn server is broadly compatible with
10308various web frameworks, simply implemented, light on server resources,
10309and fairly speedy.")
10310 (license license:expat)))
10311
10312;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
10313;; its tests
10314(define-public gunicorn-bootstrap
10315 (package
10316 (inherit gunicorn)
10317 (name "gunicorn")
10318 (arguments `(#:tests? #f))
10319 (properties '((hidden? . #t)))
10320 (native-inputs `())))
10321
10322(define-public python-httptools
10323 (package
10324 (name "python-httptools")
10325 (version "0.7.1")
10326 (source
10327 (origin
10328 ;; PyPI tarball comes with a vendored http-parser and no tests.
10329 (method git-fetch)
10330 (uri (git-reference
10331 (url "https://github.com/MagicStack/httptools")
10332 (commit (string-append "v" version))))
10333 (file-name (git-file-name name version))
10334 (sha256
10335 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
10336 (modules '((guix build utils)))
10337 (snippet
10338 #~(begin (delete-file-recursively "vendor")))))
10339 (build-system pyproject-build-system)
10340 (arguments
10341 (list
10342 #:test-flags
10343 ;; XXX: AssertionError: HttpParserError not raised.
10344 #~(list "-k" "not test_parser_response_leninent_headers_1")
10345 #:phases
10346 #~(modify-phases %standard-phases
10347 (add-after 'unpack 'configure-build-ext
10348 (lambda _
10349 (with-output-to-file "setup.cfg"
10350 (lambda ()
10351 (display "\
10352[build_ext]
10353use_system_llhttp = true
10354use_system_http_parser = true
10355cython_always = true"))))))))
10356 (native-inputs
10357 (list python-cython
10358 python-pytest
10359 python-setuptools))
10360 (inputs
10361 (list http-parser
10362 llhttp))
10363 (home-page "https://github.com/MagicStack/httptools")
10364 (synopsis "Collection of framework independent HTTP protocol utils")
10365 (description
10366 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
10367 (license license:expat)))
10368
10369(define-public python-uvicorn
10370 (package
10371 (name "python-uvicorn")
10372 (version "0.40.0")
10373 (source
10374 (origin
10375 (method git-fetch)
10376 (uri (git-reference
10377 (url "https://github.com/encode/uvicorn")
10378 (commit version)))
10379 (file-name (git-file-name name version))
10380 (sha256
10381 (base32 "0laplrb2sf9jxv4prhrsqf8kpynipqml2idqq4fr7ikij8qsz6b2"))))
10382 (build-system pyproject-build-system)
10383 (arguments
10384 (list
10385 #:test-flags
10386 #~(list "-o" "asyncio_mode=auto"
10387 ;; After tests have been passed successfully some sockets leave
10388 ;; unclosed, causing Pytest to raise warning on teardown.
10389 "-W" "ignore::ResourceWarning"
10390 "-W" "ignore::pytest.PytestUnraisableExceptionWarning"
10391 ;; For some reason tests stacked in infinity re-invocation loop:
10392 ;; AssertionError where is_alive =
10393 ;; <uvicorn.supervisors.multiprocess.Process object at
10394 ;; 0x7ffff39b6110>.is_alive.
10395 ;; Maybe this <https://github.com/encode/uvicorn/issues/2466>.
10396 "--ignore=tests/supervisors/test_multiprocess.py"
10397
10398 #$@(cond
10399 ((or (target-aarch64?)
10400 (target-riscv64?))
10401 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
10402 (#t '())))))
10403 (native-inputs
10404 (list nss-certs-for-test
10405 python-a2wsgi
10406 python-hatchling
10407 python-httpx-bootstrap
10408 python-pytest
10409 python-pytest-asyncio
10410 python-pytest-mock
10411 python-pytest-xdist
10412 python-requests
10413 python-trustme
10414 python-wsproto))
10415 (propagated-inputs
10416 (list python-a2wsgi
10417 python-click
10418 python-dotenv
10419 python-h11
10420 python-httptools
10421 python-pyyaml
10422 python-uvloop
10423 python-watchfiles
10424 python-websockets))
10425 (home-page "https://github.com/encode/uvicorn")
10426 (synopsis "Fast ASGI server implementation")
10427 (description
10428 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
10429and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
10430for HTTP/2 is planned.")
10431 (license license:bsd-3)))
10432
10433(define-public python-translation-finder
10434 (package
10435 (name "python-translation-finder")
10436 (version "2.22")
10437 (source
10438 (origin
10439 (method url-fetch)
10440 (uri (pypi-uri "translation_finder" version))
10441 (sha256
10442 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
10443 (build-system pyproject-build-system)
10444 (arguments
10445 (list
10446 #:test-flags
10447 ;; AssertionError: 31 != 30 : Mismatched count of results
10448 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
10449 (native-inputs
10450 (list python-pytest
10451 python-setuptools))
10452 (propagated-inputs
10453 (list python-charset-normalizer
10454 python-ruamel.yaml
10455 python-weblate-language-data))
10456 (home-page "https://weblate.org/")
10457 (synopsis "Translation file finder for Weblate")
10458 (description "This package provides a function to find translation file in
10459the source code of a project. It supports many translation file formats and
10460is part of the Weblate translation platform.")
10461 (license license:gpl3+)))
10462
10463(define-public python-gitlab
10464 (package
10465 (name "python-gitlab")
10466 (version "7.0.0")
10467 (source
10468 (origin
10469 (method git-fetch)
10470 (uri (git-reference
10471 (url "https://github.com/python-gitlab/python-gitlab")
10472 (commit (string-append "v" version))))
10473 (file-name (git-file-name name version))
10474 (sha256
10475 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
10476 (build-system pyproject-build-system)
10477 (arguments
10478 (list
10479 #:test-flags
10480 #~(list "--ignore=tests/unit/test_graphql.py"
10481 ;; XXX: Missing helper script.
10482 "-k" "not test_data_from_helper" "tests/unit")))
10483 (native-inputs
10484 (list python-anyio
10485 python-pytest
10486 python-responses
10487 python-setuptools))
10488 (propagated-inputs (list python-requests python-requests-toolbelt))
10489 (home-page "https://github.com/python-gitlab/python-gitlab")
10490 (synopsis "Interact with GitLab API")
10491 (description "This package provides an extended library for interacting
10492with GitLab instances through their API.")
10493 (license license:lgpl3+)))
10494
10495(define-public python-path-and-address
10496 (package
10497 (name "python-path-and-address")
10498 (version "2.0.1")
10499 (source
10500 (origin
10501 (method git-fetch)
10502 (uri (git-reference
10503 (url "https://github.com/joeyespo/path-and-address")
10504 (commit (string-append "v" version))))
10505 (file-name (git-file-name name version))
10506 (sha256
10507 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
10508 (build-system pyproject-build-system)
10509 (native-inputs
10510 (list python-pytest python-setuptools))
10511 (home-page "https://github.com/joeyespo/path-and-address")
10512 (synopsis "Functions for command-line server tools used by humans")
10513 (description "Path-and-address resolves ambiguities of command-line
10514interfaces, inferring which argument is the path, and which is the address.")
10515 (license license:expat)))
10516
10517;; XXX: This project missed maintainer upstream, see
10518;; <https://github.com/joeyespo/grip/issues/387>.
10519;; Consider to remove if it keeps failing to build.
10520(define-public grip
10521 (package
10522 (name "grip")
10523 (version "4.6.1")
10524 (source
10525 (origin
10526 (method git-fetch)
10527 (uri (git-reference
10528 (url "https://github.com/joeyespo/grip")
10529 (commit (string-append "v" version))))
10530 (file-name (git-file-name name version))
10531 (sha256
10532 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
10533 (build-system pyproject-build-system)
10534 (arguments
10535 (list
10536 #:test-flags
10537 ;; All tests fail requiring network access, ignore the whole file.
10538 #~(list "--ignore=tests/test_github.py")
10539 #:phases
10540 #~(modify-phases %standard-phases
10541 ;; This fixes the removal of `charset` attribute of requests from
10542 ;; Werkzeug 2.3.0.
10543 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
10544 (add-after 'unpack 'fix-response-encoding
10545 (lambda _
10546 (substitute* "grip/app.py"
10547 (("response.charset")
10548 "getattr(response, 'charset', 'utf-8')")))))))
10549 (native-inputs
10550 (list nss-certs-for-test
10551 python-pytest
10552 python-responses
10553 python-setuptools
10554 python-wheel))
10555 (propagated-inputs
10556 (list python-docopt
10557 python-flask
10558 python-markdown
10559 python-path-and-address
10560 python-pygments
10561 python-requests))
10562 (home-page "https://github.com/joeyespo/grip")
10563 (synopsis "Preview Markdown files using the GitHub API")
10564 (description
10565 "Grip is a command-line server application written in Python that uses
10566the GitHub Markdown API to render a local Markdown file. The styles and
10567rendering come directly from GitHub, so you'll know exactly how it will
10568appear. Changes you make to the file will be instantly reflected in the
10569browser without requiring a page refresh.")
10570 (license license:expat)))
10571
10572(define-public python-port-for
10573 (package
10574 (name "python-port-for")
10575 (version "0.7.4")
10576 (source
10577 (origin
10578 (method url-fetch)
10579 (uri (pypi-uri "port_for" version))
10580 (sha256
10581 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
10582 (build-system pyproject-build-system)
10583 (propagated-inputs
10584 (list python-urllib3))
10585 (native-inputs
10586 (list python-pytest python-setuptools python-wheel))
10587 (home-page "https://github.com/kmike/port-for/")
10588 (synopsis "TCP localhost port finder and association manager")
10589 (description
10590 "This package provides a utility that helps with local TCP ports
10591management. It can find an unused TCP localhost port and remember the
10592association.")
10593 (license license:expat)))
10594
10595(define-public python-livereload
10596 (package
10597 (name "python-livereload")
10598 (version "2.7.1")
10599 (source
10600 (origin
10601 (method git-fetch)
10602 (uri (git-reference
10603 (url "https://github.com/lepture/python-livereload")
10604 (commit (string-append "v" version))))
10605 (file-name (git-file-name name version))
10606 (sha256
10607 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
10608 (build-system pyproject-build-system)
10609 (arguments (list #:test-backend #~'unittest))
10610 (native-inputs (list python-django python-setuptools))
10611 (propagated-inputs (list python-tornado))
10612 (home-page "https://github.com/lepture/python-livereload")
10613 (synopsis "Python LiveReload")
10614 (description
10615 "Python LiveReload provides a command line utility, @command{livereload},
10616for starting a web server in a directory. It can trigger arbitrary commands
10617and serve updated contents upon changes to the directory.")
10618 (license license:bsd-3)))
10619
10620(define-public python-vf-1
10621 (package
10622 (name "python-vf-1")
10623 (version "1.0.0")
10624 (source
10625 (origin
10626 (method git-fetch)
10627 (uri (git-reference
10628 (url "https://git.sr.ht/~solderpunk/VF-1")
10629 (commit (string-append "v" version))))
10630 (file-name (git-file-name name version))
10631 (sha256
10632 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
10633 (build-system pyproject-build-system)
10634 (arguments (list #:tests? #f)) ; No tests.
10635 (native-inputs (list python-setuptools))
10636 (home-page "https://git.sr.ht/~solderpunk/VF-1")
10637 (synopsis "Command line gopher client")
10638 (description "@code{VF-1} is a command line gopher client with
10639@acronym{TLS, Transport Layer Security} support.")
10640 (license license:bsd-2)))
10641
10642(define-public python-httpcore
10643 (package
10644 (name "python-httpcore")
10645 (version "1.0.9")
10646 (source
10647 (origin
10648 ;; PyPI tarball does not contain tests.
10649 (method git-fetch)
10650 (uri (git-reference
10651 (url "https://github.com/encode/httpcore")
10652 (commit version)))
10653 (file-name (git-file-name name version))
10654 (sha256
10655 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
10656 (build-system pyproject-build-system)
10657 (native-inputs
10658 (list nss-certs-for-test
10659 python-hatch-fancy-pypi-readme
10660 python-hatchling
10661 python-pytest
10662 python-pytest-asyncio
10663 python-pytest-httpbin
10664 python-pytest-trio
10665 python-uvicorn
10666 python-trustme))
10667 (propagated-inputs
10668 (list python-anyio
10669 python-certifi
10670 python-h11
10671 python-h2
10672 python-sniffio
10673 python-socksio
10674 python-trio
10675 python-trio-typing))
10676 (home-page "https://github.com/encode/httpcore")
10677 (synopsis "Minimal, low-level HTTP client")
10678 (description
10679 "HTTP Core provides a minimal and low-level HTTP client, which does one
10680thing only: send HTTP requests.
10681
10682Some things HTTP Core does do:
10683
10684@itemize
10685@item Sending HTTP requests.
10686@item Provides both sync and async interfaces.
10687@item Supports HTTP/1.1 and HTTP/2.
10688@item Async backend support for asyncio and trio.
10689@item Automatic connection pooling.
10690@item HTTP(S) proxy support.
10691@end itemize")
10692 (license license:bsd-3)))
10693
10694;;; Variant used to break a cycle between python-httpx and python-uvicorn.
10695(define-public python-httpcore-bootstrap
10696 (hidden-package
10697 (package/inherit python-httpcore
10698 (name "python-httpcore-bootstrap")
10699 (arguments (list #:tests? #f))
10700 (native-inputs (list python-hatchling
10701 python-hatch-fancy-pypi-readme)))))
10702
10703(define-public python-httpx
10704 (package
10705 (name "python-httpx")
10706 (version "0.28.1")
10707 (source
10708 (origin
10709 ;; PyPI tarball does not contain tests.
10710 (method git-fetch)
10711 (uri (git-reference
10712 (url "https://github.com/encode/httpx")
10713 (commit version)))
10714 (file-name (git-file-name name version))
10715 (sha256
10716 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
10717 (build-system pyproject-build-system)
10718 (arguments
10719 (list
10720 ;; 1401 passed, 1 skipped, 5 deselected
10721 #:test-flags
10722 #~(list "-o" "asyncio_mode=auto"
10723 ;; CLI tests are broken.
10724 "--ignore=tests/test_main.py"
10725 "-k" (string-join
10726 ;; These tests try to open an outgoing connection.
10727 (list "not test_async_proxy_close"
10728 "test_sync_proxy_clos"
10729 "test_write_timeout")
10730 " and not "))))
10731 (native-inputs
10732 (list nss-certs-for-test
10733 python-chardet
10734 python-cryptography
10735 python-hatch-fancy-pypi-readme
10736 python-hatchling
10737 python-pytest
10738 python-pytest-asyncio
10739 python-pytest-trio
10740 python-setuptools
10741 python-trio
10742 python-trustme
10743 python-uvicorn))
10744 (propagated-inputs
10745 (list python-anyio
10746 python-certifi
10747 python-httpcore
10748 python-idna
10749 ;; [brotli]
10750 python-brotli
10751 ;; [http2]
10752 python-h2
10753 ;; [socks]
10754 python-socksio
10755 ;; [zstd]
10756 python-zstandard
10757 ;; For trio, see:
10758 ;; <https://github.com/python-trio/trio/issues/2802>.
10759 python-sniffio))
10760 (home-page "https://www.python-httpx.org/")
10761 (synopsis "HTTP client for Python")
10762 (description
10763 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
10764and async APIs, and support for both HTTP/1.1 and HTTP/2.
10765
10766HTTPX builds on the well-established usability of requests, and gives you:
10767
10768@itemize
10769@item A broadly requests-compatible API.
10770@item Standard synchronous interface, but with async support if you need it.
10771@item HTTP/1.1 and HTTP/2 support.
10772@item Ability to make requests directly to WSGI applications or ASGI applications.
10773@item Strict timeouts everywhere.
10774@item Fully type annotated.
10775@item 99% test coverage.
10776@end itemize
10777
10778Plus all the standard features of requests:
10779
10780@itemize
10781@item International Domains and URLs
10782@item Keep-Alive & Connection Pooling
10783@item Sessions with Cookie Persistence
10784@item Browser-style SSL Verification
10785@item Basic/Digest Authentication
10786@item Elegant Key/Value Cookies
10787@item Automatic Decompression
10788@item Automatic Content Decoding
10789@item Unicode Response Bodies
10790@item Multipart File Uploads
10791@item HTTP(S) Proxy Support
10792@item Connection Timeouts
10793@item Streaming Downloads
10794@item .netrc Support
10795@item Chunked Requests
10796@end itemize")
10797 (license license:bsd-3)))
10798
10799;;; Variant used to break a cycle with python-uvicorn.
10800(define-public python-httpx-bootstrap
10801 (hidden-package
10802 (package/inherit python-httpx
10803 (name "python-httpx-bootstrap")
10804 (arguments (list #:tests? #f))
10805 (native-inputs
10806 (list python-hatchling
10807 python-hatch-fancy-pypi-readme))
10808 (propagated-inputs
10809 (modify-inputs propagated-inputs
10810 (replace "python-httpcore" python-httpcore-bootstrap))))))
10811
10812(define-public python-httpx-sse
10813 (package
10814 (name "python-httpx-sse")
10815 (version "0.4.3")
10816 (source
10817 (origin
10818 (method git-fetch)
10819 (uri (git-reference
10820 (url "https://github.com/florimondmanca/httpx-sse")
10821 (commit version)))
10822 (file-name (git-file-name name version))
10823 (sha256
10824 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
10825 (build-system pyproject-build-system)
10826 (native-inputs
10827 (list python-pytest
10828 python-pytest-asyncio
10829 python-setuptools
10830 python-setuptools-scm
10831 python-sse-starlette))
10832 (propagated-inputs (list python-httpx))
10833 (home-page "https://github.com/florimondmanca/httpx-sse")
10834 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
10835 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
10836 (license license:expat)))
10837
10838(define-public python-httpx-ws
10839 (package
10840 (name "python-httpx-ws")
10841 (version "0.9.0")
10842 (source
10843 (origin
10844 (method git-fetch)
10845 (uri (git-reference
10846 (url "https://github.com/frankie567/httpx-ws")
10847 (commit (string-append "v" version))))
10848 (file-name (git-file-name name version))
10849 (sha256
10850 (base32 "1hin6fndvfnx3mjgy30x0ghgjalikxavyj24klcknnly9sqzg83v"))))
10851 (build-system pyproject-build-system)
10852 (propagated-inputs
10853 (list python-anyio
10854 python-httpcore
10855 python-httpx
10856 python-wsproto))
10857 (native-inputs
10858 (list nss-certs-for-test
10859 python-hatch-regex-commit
10860 python-hatchling
10861 python-pytest
10862 python-pytest-cov
10863 python-starlette
10864 python-uvicorn))
10865 (home-page "https://github.com/frankie567/httpx-ws")
10866 (synopsis "WebSockets support for HTTPX")
10867 (description "This package provides @code{WebSockets} support for HTTPX.")
10868 (license license:expat)))
10869
10870(define-public python-wsgiprox
10871 (package
10872 (name "python-wsgiprox")
10873 (version "1.5.2")
10874 (source
10875 (origin
10876 (method url-fetch)
10877 (uri (pypi-uri "wsgiprox" version))
10878 (sha256
10879 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
10880 (build-system pyproject-build-system)
10881 (arguments
10882 ;; The test suite hangs (see:
10883 ;; https://github.com/webrecorder/wsgiprox/issues/6).
10884 (list
10885 #:tests? #f
10886 #:phases
10887 #~(modify-phases %standard-phases
10888 (add-after 'unpack 'fix-pytest-argument
10889 (lambda _
10890 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
10891 (substitute* "setup.py"
10892 (("--doctest-module")
10893 "--doctest-modules")))))))
10894 (propagated-inputs
10895 (list python-certauth python-gevent python-websocket-client))
10896 (native-inputs
10897 (list python-mock python-waitress python-setuptools))
10898 (home-page "https://github.com/webrecorder/wsgiprox")
10899 (synopsis "HTTP/S proxy with WebSockets over WSGI")
10900 (description
10901 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
10902middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
10903The library accepts HTTP and HTTPS proxy connections, and routes them to a
10904designated prefix.")
10905 (license license:asl2.0)))
10906
10907(define-public python-warcio
10908 ;; The PyPI release is missing some test support files (see:
10909 ;; https://github.com/webrecorder/warcio/issues/132).
10910 (package
10911 (name "python-warcio")
10912 (version "1.8.1")
10913 (source
10914 (origin
10915 (method git-fetch)
10916 (uri (git-reference
10917 (url "https://github.com/webrecorder/warcio")
10918 (commit (string-append "v" version))))
10919 (file-name (git-file-name name version))
10920 (sha256
10921 (base32
10922 "19wwg7zmx33c942dbahdkng1byiwr4c9cd1ayrsh13f818n17zps"))))
10923 (build-system pyproject-build-system)
10924 (arguments
10925 (list
10926 #:test-flags ; These tests fail due to networking requirements.
10927 '(list "-k" (format #f "not ~a"
10928 (string-join
10929 '("test_post_chunked"
10930 "test_remote"
10931 "test_capture_http_proxy"
10932 "test_capture_https_proxy"
10933 "test_capture_https_proxy_same_session")
10934 " and not "))
10935 ; The following test requires the hookdns package.
10936 "--ignore=test/test_capture_http_proxy.py")))
10937 (native-inputs
10938 (list python-httpbin
10939 python-pytest
10940 python-requests
10941 python-setuptools
10942 python-wsgiprox))
10943 (home-page "https://github.com/webrecorder/warcio")
10944 (synopsis "Streaming web archival archive (WARC) library")
10945 (description "warcio is a Python library to read and write the WARC format
10946commonly used in Web archives. It is designed for fast, low-level access to
10947web archival content, oriented around a stream of WARC records rather than
10948files.")
10949 (license license:asl2.0)))
10950
10951(define-public python-websockets
10952 (package
10953 (name "python-websockets")
10954 (version "13.1")
10955 (source
10956 (origin
10957 (method git-fetch)
10958 (uri (git-reference
10959 (url "https://github.com/aaugustin/websockets")
10960 (commit version)))
10961 (file-name (git-file-name name version))
10962 (sha256
10963 (base32
10964 "1dx3rf6fmg4ir9cfcn1fil446qz879cwrjq2rcz5zvl71xkw6hb3"))))
10965 (build-system pyproject-build-system)
10966 (arguments
10967 (list #:test-backend #~'unittest
10968 #:phases
10969 #~(modify-phases %standard-phases
10970 (add-before 'check 'extend-test-timeout
10971 (lambda _
10972 ;; Some architectures need an even longer timeout. Make it
10973 ;; long enough that it should never fail due to timeout.
10974 #$@(if (target-riscv64?)
10975 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
10976 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
10977 (native-inputs
10978 (list python-setuptools
10979 python-wheel))
10980 (home-page "https://github.com/aaugustin/websockets")
10981 (synopsis
10982 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
10983 (description
10984 "@code{websockets} is a library for building WebSocket servers and clients
10985in Python with a focus on correctness and simplicity.
10986
10987Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
10988it provides an elegant coroutine-based API.")
10989 (license license:bsd-3)))
10990
10991(define-public selenium-manager
10992 (package
10993 (name "selenium-manager")
10994 (version "4.34.2")
10995 (source
10996 (origin
10997 (method git-fetch)
10998 (uri (git-reference
10999 (url "https://github.com/SeleniumHQ/selenium")
11000 (commit (string-append "selenium-" version "-python"))))
11001 (file-name (git-file-name name version))
11002 (sha256
11003 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
11004 (build-system cargo-build-system)
11005 (arguments
11006 (list
11007 ;; XXX: Almost all tests require either browsers or network access.
11008 #:tests? #f
11009 #:install-source? #f ; Most likely intended as a leaf.
11010 #:phases
11011 #~(modify-phases %standard-phases
11012 (add-after 'unpack 'chdir
11013 (lambda _
11014 (chdir "rust"))))))
11015 (native-inputs (list pkg-config))
11016 (inputs (cons* (list zstd "lib") xz
11017 (cargo-inputs 'selenium-manager)))
11018 (home-page "https://www.selenium.dev")
11019 (synopsis "CLI tool to manager the browser test infrastructure")
11020 (description
11021 "Selenium simplifies web browser automation. It specifically provides
11022infrastructure for the W3C WebDriver specification — a platform and
11023language-neutral coding interface compatible with all major web browsers.
11024
11025Selenium Manager is a CLI tool that automatically manages the browser/driver
11026infrastructure required by Selenium.")
11027 (license license:asl2.0)))
11028
11029(define-public python-selenium
11030 (package/inherit selenium-manager
11031 (name "python-selenium")
11032 (build-system pyproject-build-system)
11033 (arguments
11034 (list
11035 ;; XXX: Disable failing tests.
11036 #:test-flags
11037 #~(list "--ignore-glob=test/selenium/webdriver/*"
11038 ;; Probably requires those.
11039 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
11040 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
11041 ;; XXX: SSL certificates access.
11042 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
11043 "-k" "not test_missing_cdp_devtools_version_falls_back")
11044 #:phases
11045 #~(modify-phases %standard-phases
11046 (add-after 'unpack 'chdir
11047 (lambda _
11048 (chdir "py")))
11049 (add-after 'chdir 'inject-selenium-manager-binary
11050 (lambda* (#:key inputs #:allow-other-keys)
11051 (substitute* "selenium/webdriver/common/selenium_manager.py"
11052 (("compiled_path = Path.*")
11053 (format #f "return Path(~s)~%"
11054 (search-input-file inputs "bin/selenium-manager"))))
11055 (substitute* "pyproject.toml"
11056 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
11057 "")
11058 (("target = \"selenium\\.webdriver\\.common.*\"")
11059 ""))))
11060 (add-after 'chdir 'relax-requirements
11061 (lambda _
11062 (substitute* "pyproject.toml"
11063 (("\"(typing_extensions|trio)~=.*\"," _ target)
11064 (format #f "~s," target))))))))
11065 (propagated-inputs (list python-certifi
11066 python-trio
11067 python-trio-websocket
11068 python-typing-extensions
11069 python-urllib3
11070 python-websocket-client))
11071 (inputs (list selenium-manager))
11072 (native-inputs (list python-filetype
11073 python-pytest
11074 python-pytest-mock
11075 python-pytest-trio
11076 python-setuptools
11077 python-setuptools-rust))
11078 (synopsis "Python bindings for Selenium")
11079 (description
11080 "Selenium enables web browser automation. It specifically provides
11081infrastructure for the W3C WebDriver specification — a platform and
11082language-neutral coding interface compatible with all major web browsers.")))
11083
11084(define-public python-rapidjson
11085 (package
11086 (name "python-rapidjson")
11087 (version "1.23")
11088 (source
11089 (origin
11090 (method git-fetch)
11091 (uri (git-reference
11092 (url "https://github.com/python-rapidjson/python-rapidjson")
11093 (commit (string-append "v" version))))
11094 (file-name (git-file-name name version))
11095 (sha256
11096 (base32 "0ajf919gg3qmi68jb0m6v80al2n65cn2ac36qz46s0h6zh92cl86"))
11097 (modules '((guix build utils)))
11098 (snippet
11099 '(delete-file-recursively "rapidjson"))))
11100 (build-system pyproject-build-system)
11101 (arguments
11102 (list
11103 #:test-flags '(list "tests")
11104 #:phases
11105 #~(modify-phases %standard-phases
11106 ;; We cannot seem to use #:configure-flags with the
11107 ;; pyproject-build-system to override rj_include_dir.
11108 (add-after 'unpack 'override-rapidjson-sources
11109 (lambda _
11110 (substitute* "setup.py"
11111 (("^rj_include_dir =.*")
11112 (string-append "rj_include_dir = '"
11113 #$(this-package-native-input "rapidjson")
11114 "/include/rapidjson" "'"))
11115 (("if not os.path.isdir.*") "if False:")))))))
11116 (native-inputs
11117 (list rapidjson python-pytest python-pytz python-setuptools))
11118 (home-page "https://github.com/python-rapidjson/python-rapidjson")
11119 (synopsis "Python wrapper around rapidjson")
11120 (description "This package provides a python wrapper around rapidjson.")
11121 (license license:expat)))
11122
11123(define-public python-venusian
11124 (package
11125 (name "python-venusian")
11126 (version "3.1.1")
11127 (source
11128 (origin
11129 (method url-fetch)
11130 (uri (pypi-uri "venusian" version))
11131 (sha256
11132 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
11133 (build-system pyproject-build-system)
11134 (native-inputs
11135 (list python-pytest
11136 python-setuptools))
11137 (home-page "https://docs.pylonsproject.org/projects/venusian")
11138 (synopsis "Library for deferring decorator actions")
11139 (description
11140 "Venusian is a library which allows framework authors to defer decorator
11141actions. Instead of taking actions when a function (or class) decorator is
11142executed at import time, you can defer the action usually taken by the
11143decorator until a separate scan phase.")
11144 (license license:repoze)))
11145
11146(define-public python-zope-deprecation
11147 (package
11148 (name "python-zope-deprecation")
11149 (version "6.0")
11150 (source (origin
11151 (method url-fetch)
11152 (uri (pypi-uri "zope_deprecation" version))
11153 (sha256
11154 (base32
11155 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
11156 (build-system pyproject-build-system)
11157 (arguments
11158 (list #:tests? #f)) ;no tests in PyPI
11159 (native-inputs
11160 (list python-setuptools))
11161 (home-page "https://zopedeprecation.readthedocs.io/")
11162 (synopsis "Function for marking deprecations")
11163 (description "The @code{zope.deprecation} module provides a function for
11164marking modules, classes, functions, methods and properties as deprecated,
11165displaying warnings when usaged in application code.")
11166 (license license:zpl2.1)))
11167
11168(define-public python-translationstring
11169 (package
11170 (name "python-translationstring")
11171 (version "1.4")
11172 (source (origin
11173 (method url-fetch)
11174 (uri (pypi-uri "translationstring" version))
11175 (sha256
11176 (base32
11177 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
11178 (build-system pyproject-build-system)
11179 (native-inputs
11180 (list python-pytest
11181 python-setuptools))
11182 (home-page "https://docs.pylonsproject.org/projects/translationstring")
11183 (synopsis "Internationalization tooling for the Pylons project")
11184 (description "This package provides a library used by various Pylons
11185project packages for internationalization (i18n) duties related to
11186translation.")
11187 (license license:repoze)))
11188
11189(define-public python-plaster
11190 (package
11191 (name "python-plaster")
11192 (version "1.1.2")
11193 (source (origin
11194 (method url-fetch)
11195 (uri (pypi-uri "plaster" version))
11196 (sha256
11197 (base32
11198 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
11199 (build-system pyproject-build-system)
11200 (native-inputs
11201 (list python-pytest
11202 python-setuptools))
11203 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
11204 (synopsis "Configuration loader for multiple config file formats")
11205 (description
11206 "Plaster is a loader interface around multiple config file formats. It
11207exists to define a common API for applications to use when they wish to load
11208configuration. The library itself does not aim to handle anything except a
11209basic API that applications may use to find and load configuration settings.
11210Any specific constraints should be implemented in a pluggable loader which can
11211be registered via an entrypoint.")
11212 (license license:repoze)))
11213
11214(define-public python-plaster-pastedeploy
11215 (package
11216 (name "python-plaster-pastedeploy")
11217 (version "1.0.1")
11218 (source (origin
11219 (method url-fetch)
11220 (uri (pypi-uri "plaster_pastedeploy" version))
11221 (sha256
11222 (base32
11223 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
11224 (build-system pyproject-build-system)
11225 (native-inputs
11226 (list python-pytest
11227 python-setuptools))
11228 (propagated-inputs
11229 (list python-plaster python-pastedeploy))
11230 (home-page "https://github.com/Pylons/plaster_pastedeploy")
11231 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
11232 (description
11233 "This plugin for @code{python-plaster} adds support for PasteDeploy
11234syntax, it provides a plaster @code{Loader} object that can parse ini files
11235according to the standard set by PasteDeploy")
11236 (license license:expat)))
11237
11238(define-public python-hupper
11239 (package
11240 (name "python-hupper")
11241 (version "1.12.1")
11242 (source
11243 (origin
11244 (method url-fetch)
11245 (uri (pypi-uri "hupper" version))
11246 (sha256
11247 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
11248 (build-system pyproject-build-system)
11249 (arguments
11250 (list
11251 ;; RuntimeError: timeout waiting for change to
11252 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
11253 #:test-flags #~(list "--ignore=tests/test_it.py")))
11254 (native-inputs
11255 (list python-pytest python-setuptools python-wheel))
11256 (propagated-inputs
11257 (list python-watchdog))
11258 (home-page "https://readthedocs.org/projects/hupper")
11259 (synopsis "Integrated process monitor tracking changes to imported Python files")
11260 (description
11261 "Hupper is an integrated process monitor that will track changes to any
11262imported Python files in sys.modules as well as custom paths. When files are
11263changed the process is restarted.")
11264 (license license:expat)))
11265
11266(define-public python-pyowm
11267 (package
11268 (name "python-pyowm")
11269 (version "3.3.0")
11270 (source
11271 (origin
11272 (method git-fetch)
11273 (uri (git-reference
11274 (url "https://github.com/csparpa/pyowm")
11275 (commit version)))
11276 (file-name (git-file-name name version))
11277 (sha256
11278 (base32
11279 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
11280 (build-system pyproject-build-system)
11281 (arguments (list #:test-flags #~(list "tests/unit")))
11282 (native-inputs (list python-pytest python-setuptools python-wheel))
11283 (propagated-inputs
11284 (list python-geojson-for-pyowm
11285 python-pysocks
11286 python-requests))
11287 (home-page "https://github.com/csparpa/pyowm")
11288 (synopsis "Python wrapper around OpenWeatherMap web APIs")
11289 (description
11290 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
11291 (license license:expat)))
11292
11293(define-public python-pyramid
11294 (package
11295 (name "python-pyramid")
11296 (version "2.0.2")
11297 (source (origin
11298 (method url-fetch)
11299 (uri (pypi-uri "pyramid" version))
11300 (sha256
11301 (base32
11302 "1phqdz068hl3zda263qkjp5am8fmvmpcxp3nrhsna8g472kkh89p"))))
11303 (build-system pyproject-build-system)
11304 (propagated-inputs
11305 (list python-hupper
11306 python-plaster
11307 python-plaster-pastedeploy
11308 python-setuptools
11309 python-translationstring
11310 python-venusian
11311 python-webob
11312 python-zope-component
11313 python-zope-deprecation
11314 python-zope-interface))
11315 (native-inputs (list python-pytest python-webtest python-wheel))
11316 (home-page "https://trypyramid.com/")
11317 (synopsis "Python web-framework suitable for small and large sites")
11318 (description
11319 "Pyramid makes it easy to write web applications. From minimal
11320request/response web apps to larger, grown applications.")
11321 (license license:repoze)))
11322
11323(define-public python-pyramid-chameleon
11324 ;; PyPI lacks a fresh release, use the latest commit associated with
11325 ;; unrleased version, see:
11326 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
11327 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
11328 (revision "0"))
11329 (package
11330 (name "python-pyramid-chameleon")
11331 (version (git-version "0.4.dev0" revision commit))
11332 (source
11333 (origin
11334 (method git-fetch)
11335 (uri (git-reference
11336 (url "https://github.com/Pylons/pyramid_chameleon")
11337 (commit commit)))
11338 (file-name (git-file-name name version))
11339 (sha256
11340 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
11341 (build-system pyproject-build-system)
11342 (native-inputs
11343 (list python-pytest
11344 python-setuptools))
11345 (propagated-inputs
11346 (list python-chameleon
11347 python-pyramid))
11348 (home-page "https://github.com/Pylons/pyramid_chameleon")
11349 (synopsis "Chameleon template compiler for pyramid")
11350 (description
11351 "These package provides bindings for the Chameleon templating system
11352 for the Pyramid web framework.")
11353 (license license:repoze))))
11354
11355(define-public python-pyramid-debugtoolbar
11356 (package
11357 (name "python-pyramid-debugtoolbar")
11358 (version "4.12.1")
11359 (source
11360 (origin
11361 (method url-fetch)
11362 (uri (pypi-uri "pyramid_debugtoolbar" version))
11363 (sha256
11364 (base32 "0gdlc7vcga4vzma53h5csnhh4gwfmv3w8v9y5fhwqpy8979qis3i"))))
11365 (build-system pyproject-build-system)
11366 (arguments
11367 (list
11368 #:test-flags
11369 ;; Large diff assertion not equal faileurs.
11370 #~(list #$@(map (lambda (test)
11371 (string-append "--deselect=tests"
11372 "/test_panels/test_sqla.py::" test))
11373 (list "TestSimpleSelect::test_panel"
11374 "TestTransactionCommit::test_panel"
11375 "TestTransactionRollback::test_panel")))))
11376 (native-inputs
11377 (list python-pytest
11378 python-setuptools
11379 python-webtest))
11380 (propagated-inputs
11381 (list python-pyramid
11382 python-pyramid-chameleon
11383 python-pyramid-jinja2
11384 python-pyramid-mako
11385 ;; python-selenium ; see: guix/guix#3478
11386 python-sqlalchemy
11387 python-waitress))
11388 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
11389 (synopsis "Pyramid debug toolbar")
11390 (description
11391 "This package provides an interactive HTML debugger for Pyramid application
11392development.")
11393 (license license:bsd-3)))
11394
11395(define-public python-pyramid-jinja2
11396 (package
11397 (name "python-pyramid-jinja2")
11398 (version "2.10.1")
11399 (source
11400 (origin
11401 (method url-fetch)
11402 (uri (pypi-uri "pyramid_jinja2" version))
11403 (sha256
11404 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
11405 (build-system pyproject-build-system)
11406 (arguments
11407 (list
11408 #:test-flags
11409 ;; Two tests failed with assertion not equal.
11410 #~(list "-k" "not test_it_relative_to_package and not test_options")))
11411 (native-inputs
11412 (list python-pytest
11413 python-setuptools
11414 python-webtest))
11415 (propagated-inputs
11416 (list python-jinja2
11417 python-markupsafe
11418 python-pyramid
11419 python-zope-deprecation))
11420 (home-page "https://github.com/Pylons/pyramid_jinja2")
11421 (synopsis "Jinja2 template bindings for the Pyramid web framework")
11422 (description "This package provides Jinja2 template bindings for the
11423Pyramid web framework.")
11424 (license license:repoze)))
11425
11426(define-public python-pyramid-mako
11427 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
11428 ;; master, us the latest commit for now.
11429 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
11430 (revision "0"))
11431 (package
11432 (name "python-pyramid-mako")
11433 (version (git-version "1.1.0" revision commit))
11434 (source
11435 (origin
11436 (method git-fetch)
11437 (uri (git-reference
11438 (url "https://github.com/Pylons/pyramid_mako")
11439 (commit commit)))
11440 (file-name (git-file-name name version))
11441 (sha256
11442 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
11443 (build-system pyproject-build-system)
11444 (native-inputs
11445 (list python-pytest
11446 python-setuptools))
11447 (propagated-inputs
11448 (list python-mako
11449 python-pyramid))
11450 (home-page "https://github.com/Pylons/pyramid_mako")
11451 (synopsis "Mako template bindings for the Pyramid web framework")
11452 (description
11453 "This package provides Mako template bindings for the Pyramid web
11454framework.")
11455 (license license:repoze))))
11456
11457(define-public python-pyramid-retry
11458 (package
11459 (name "python-pyramid-retry")
11460 (version "2.1.1")
11461 (source
11462 (origin
11463 (method url-fetch)
11464 (uri (pypi-uri "pyramid_retry" version))
11465 (sha256
11466 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
11467 (build-system pyproject-build-system)
11468 (native-inputs
11469 (list python-pytest
11470 python-setuptools
11471 python-webtest))
11472 (propagated-inputs
11473 (list python-pyramid
11474 python-zope-interface))
11475 (home-page "https://github.com/Pylons/pyramid_retry")
11476 (synopsis "Pyramid execution policy supporting retrying failed requests")
11477 (description
11478 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
11479and can retry them a configurable number of times under certain \"retryable\"
11480error conditions before indicating a failure to the client.")
11481 (license license:expat)))
11482
11483(define-public python-pyramid-tm
11484 (package
11485 (name "python-pyramid-tm")
11486 (version "2.6")
11487 (source
11488 (origin
11489 (method url-fetch)
11490 (uri (pypi-uri "pyramid_tm" version))
11491 (sha256
11492 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
11493 (build-system pyproject-build-system)
11494 (native-inputs
11495 (list python-pytest
11496 python-setuptools
11497 python-webtest))
11498 (propagated-inputs
11499 (list python-pyramid
11500 python-transaction))
11501 (home-page "https://github.com/Pylons/pyramid_tm")
11502 (synopsis "Centralized transaction management for Pyramid")
11503 (description
11504 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
11505active @url{https://pypi.org/project/transaction/, transaction} as provided by
11506the Python transaction package.")
11507 (license license:repoze)))
11508
11509(define-public python-random-user-agent
11510 (package
11511 (name "python-random-user-agent")
11512 (version "1.0.1")
11513 (source
11514 (origin
11515 (method url-fetch)
11516 (uri (pypi-uri "random_user_agent" version))
11517 (sha256
11518 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
11519 (build-system pyproject-build-system)
11520 (arguments (list #:tests? #f)) ; No tests.
11521 (native-inputs (list python-setuptools))
11522 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
11523 (synopsis "List of user agents")
11524 (description
11525 "This package provides a list of user agents, from a collection of more
11526than 326,000 known user-agents. Users can pick a random one, or select one
11527based on filters.")
11528 (license license:expat)))
11529
11530(define-public python-rangehttpserver
11531 (package
11532 (name "python-rangehttpserver")
11533 (version "1.4.0")
11534 (source
11535 (origin
11536 (method git-fetch)
11537 (uri (git-reference
11538 (url "https://github.com/danvk/RangeHTTPServer")
11539 (commit version)))
11540 (file-name (git-file-name name version))
11541 (sha256
11542 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
11543 (build-system pyproject-build-system)
11544 (native-inputs
11545 (list python-pytest
11546 python-requests
11547 python-setuptools))
11548 (home-page "https://github.com/danvk/RangeHTTPServer")
11549 (synopsis "SimpleHTTPServer with support for range requests")
11550 (description
11551 "This tool provides a simple HTTP server with support for Range
11552requests.")
11553 (license license:asl2.0)))
11554
11555(define-public python-flask-restx
11556 (package
11557 (name "python-flask-restx")
11558 (version "1.3.0")
11559 (source
11560 (origin
11561 (method git-fetch) ;no tests in PyPI archive
11562 (uri (git-reference
11563 (url "https://github.com/python-restx/flask-restx")
11564 (commit version)))
11565 (file-name (git-file-name name version))
11566 (sha256
11567 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
11568 (build-system pyproject-build-system)
11569 (arguments
11570 (list
11571 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
11572 #:test-flags
11573 #~(list "--benchmark-skip"
11574 ;; ValueError: http://www.google.com is not a valid URL. Domain
11575 ;; does not exists.
11576 "--deselect=tests/test_inputs.py::URLTest::test_check"
11577 "-k" (string-join
11578 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
11579 (list "not test_rfc822_value"
11580 "test_iso8601_value"
11581 ;; assert 404 == 2000
11582 "test_specs_endpoint_host_and_subdomain"
11583 ;; ValueError: [email protected] is not a valid email
11584 "test_valid_value_check")
11585 " and not "))))
11586 (native-inputs
11587 (list python-blinker
11588 python-faker
11589 python-pytest
11590 python-pytest-benchmark
11591 python-pytest-flask
11592 python-pytest-mock
11593 python-setuptools))
11594 (propagated-inputs
11595 (list python-aniso8601
11596 python-flask
11597 python-importlib-resources
11598 python-jsonschema
11599 python-pytz
11600 python-werkzeug))
11601 (home-page "https://github.com/python-restx/flask-restx")
11602 (synopsis
11603 "Framework for fast, easy and documented API development with Flask")
11604 (description
11605 "Flask-RESTX is an extension for Flask that adds support for quickly building
11606REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
11607 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
11608decorators and tools to describe your API and expose its documentation properly using
11609Swagger.")
11610 (license license:bsd-3)))
11611
11612(define-deprecated-package python-flask-restplus
11613 python-flask-restx)
11614
11615(define-public python-flask-socketio
11616 (package
11617 (name "python-flask-socketio")
11618 (version "5.5.1")
11619 (source
11620 (origin
11621 (method url-fetch)
11622 (uri (pypi-uri "flask_socketio" version))
11623 (sha256
11624 (base32
11625 "1i0yqn39b4v4r2whppx47sg7iicvqzssd1clx7cclk07l52cjinr"))))
11626 (build-system pyproject-build-system)
11627 (propagated-inputs
11628 (list python-flask python-socketio))
11629 (native-inputs
11630 (list python-pytest python-redis python-setuptools python-wheel))
11631 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
11632 (synopsis "Socket.IO integration for Flask applications")
11633 (description "Socket.IO integration for Flask applications")
11634 (license license:expat)))
11635
11636(define-public python-manuel
11637 (package
11638 (name "python-manuel")
11639 (version "1.13.0")
11640 (source
11641 (origin
11642 (method url-fetch)
11643 (uri (pypi-uri "manuel" version))
11644 (sha256
11645 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
11646 (build-system pyproject-build-system)
11647 (arguments
11648 (list
11649 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
11650 #:tests? #f))
11651 (propagated-inputs
11652 (list python-setuptools)) ;install requires
11653 (home-page "https://pypi.org/project/manuel/")
11654 (synopsis "Build tested documentation")
11655 (description
11656 "Manuel lets you mix and match traditional doctests with custom test syntax.")
11657 (license license:asl2.0)))
11658
11659(define-public python-marshmallow-jsonapi
11660 (package
11661 (name "python-marshmallow-jsonapi")
11662 (version "0.26.0")
11663 (source
11664 (origin
11665 (method git-fetch)
11666 (uri (git-reference
11667 ;; XXX: Deprecated upstream: This repository has been archived
11668 ;; by the owner on Jun 6, 2024. It is now read-only.
11669 ;; Using a maintained fork. The pypi name of this fork
11670 ;; is marshmallow-jsonapi-minfork.
11671 (url "https://github.com/tadams42/marshmallow-jsonapi")
11672 (commit version)))
11673 (file-name (git-file-name name version))
11674 (sha256
11675 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
11676 (build-system pyproject-build-system)
11677 (native-inputs
11678 (list python-faker
11679 python-flask
11680 python-pytest
11681 python-setuptools))
11682 (propagated-inputs (list python-marshmallow))
11683 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
11684 (synopsis "JSON:API 1.0 formatting with Marshmallow")
11685 (description
11686 "The marshmallow-jsonapi package provides a simple way to produce
11687@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
11688framework. It includes optional utilities to integrate with Flask. This is a
11689forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
11690 (license license:expat)))
11691
11692(define-public python-pecan
11693 (package
11694 (name "python-pecan")
11695 (version "1.8.0")
11696 (source
11697 (origin
11698 (method git-fetch)
11699 (uri (git-reference
11700 (url "https://github.com/pecan/pecan")
11701 (commit version)))
11702 (file-name (git-file-name name version))
11703 (sha256
11704 (base32 "0w693jpnjy358992f3jrrlf31knkqn0jvz2jx0iz7ziikprc61p8"))))
11705 (build-system pyproject-build-system)
11706 (arguments
11707 (list
11708 #:test-flags '(list "--pyargs" "pecan")))
11709 (native-inputs
11710 (list gunicorn
11711 python-genshi
11712 python-jinja2
11713 python-pytest
11714 python-sqlalchemy-2
11715 python-webtest))
11716 (propagated-inputs
11717 (list python-mako
11718 python-webob))
11719 (home-page "http://github.com/pecan/pecan")
11720 (synopsis "WSGI object-dispatching web framework")
11721 (description "This package provides a WSGI object-dispatching web
11722framework, designed to be lean and fast, with few dependencies.")
11723 (license license:bsd-3)))
11724
11725(define-public python-persistent
11726 (package
11727 (name "python-persistent")
11728 (version "6.1.1")
11729 (source
11730 (origin
11731 (method git-fetch)
11732 (uri (git-reference
11733 (url "https://github.com/zopefoundation/persistent/")
11734 (commit version)))
11735 (file-name (git-file-name name version))
11736 (sha256
11737 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
11738 (build-system pyproject-build-system)
11739 (arguments
11740 (list
11741 #:phases
11742 #~(modify-phases %standard-phases
11743 (replace 'check
11744 (lambda* (#:key tests? #:allow-other-keys)
11745 (if tests?
11746 (invoke "zope-testrunner" "--test-path=src"
11747 ;; XXX: Ignore doc tests.
11748 "!persistent.tests.test_docs")
11749 (format #t "test suite not run~%")))))))
11750 (propagated-inputs
11751 (list python-cffi
11752 python-zope-deferredimport
11753 python-zope-interface
11754 python-zope-testrunner))
11755 (native-inputs
11756 (list python-manuel python-zope-testrunner python-setuptools))
11757 (home-page "https://github.com/zopefoundation/persistent/")
11758 (synopsis "Translucent persistent objects")
11759 (description
11760 "This package contains a generic persistence implementation for Python.
11761It forms the core protocol for making objects interact \"transparently\" with
11762a database such as the ZODB.")
11763 (license license:zpl2.1)))
11764
11765(define-public python-btrees
11766 (package
11767 (name "python-btrees")
11768 (version "6.1")
11769 (source
11770 (origin
11771 (method git-fetch)
11772 (uri (git-reference
11773 (url "https://github.com/zopefoundation/BTrees")
11774 (commit version)))
11775 (file-name (git-file-name name version))
11776 (sha256
11777 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
11778 (build-system pyproject-build-system)
11779 (arguments
11780 (list
11781 #:phases
11782 #~(modify-phases %standard-phases
11783 (replace 'check
11784 (lambda* (#:key tests? #:allow-other-keys)
11785 (if tests?
11786 (invoke "zope-testrunner" "--test-path=src")
11787 (format #t "test suite not run~%")))))))
11788 (propagated-inputs (list python-persistent python-zope-interface))
11789 (native-inputs (list python-persistent python-transaction
11790 python-zope-testrunner python-setuptools))
11791 (home-page "https://github.com/zopefoundation/BTrees")
11792 (synopsis "Scalable persistent object containers")
11793 (description
11794 "This package contains a set of persistent object containers built around a
11795modified BTree data structure. The trees are optimized for use inside ZODB's
11796\"optimistic concurrency\" paradigm, and include explicit resolution of
11797conflicts detected by that mechanism.")
11798 (license license:zpl2.1)))
11799
11800(define-public python-transaction
11801 (package
11802 (name "python-transaction")
11803 (version "5.0")
11804 (source
11805 (origin
11806 (method url-fetch)
11807 (uri (pypi-uri "transaction" version))
11808 (sha256
11809 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
11810 (build-system pyproject-build-system)
11811 (native-inputs
11812 (list python-pytest
11813 python-setuptools))
11814 (propagated-inputs
11815 (list python-zope-interface))
11816 (home-page "https://github.com/zopefoundation/transaction")
11817 (synopsis "Transaction management for Python")
11818 (description "This package contains a generic transaction implementation
11819for Python. It is mainly used by the ZODB.")
11820 (license license:zpl2.1)))
11821
11822(define-public python-truststore
11823 (package
11824 (name "python-truststore")
11825 (version "0.10.4")
11826 (source
11827 (origin
11828 (method url-fetch)
11829 (uri (pypi-uri "truststore" version))
11830 (sha256
11831 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
11832 (build-system pyproject-build-system)
11833 (arguments
11834 (list #:tests? #f)) ;all tests require Internet access
11835 (native-inputs
11836 (list python-flit-core))
11837 (home-page "https://github.com/sethmlarson/truststore")
11838 (synopsis "Verify certificates using native system trust stores")
11839 (description
11840 "Truststore is a library which exposes native system certificate stores (ie
11841\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
11842Python applications no longer need to rely on certifi as a root certificate
11843store.")
11844 (license license:expat)))
11845
11846(define-public python-robot-detection
11847 (package
11848 (name "python-robot-detection")
11849 (version "0.4.0")
11850 (source
11851 (origin
11852 (method git-fetch)
11853 (uri (git-reference
11854 (url "https://github.com/rory/robot-detection")
11855 (commit (string-append "v" version))))
11856 (file-name (git-file-name name version))
11857 (sha256
11858 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
11859 (build-system pyproject-build-system)
11860 (arguments (list #:test-backend #~'unittest))
11861 (native-inputs (list python-setuptools))
11862 (propagated-inputs (list python-six))
11863 (home-page "https://github.com/rory/robot-detection")
11864 (synopsis "Detect web crawlers")
11865 (description
11866 "@code{robot_detection} is a python module to detect if a given HTTP User
11867Agent is a web crawler. It uses the list of registered robots from
11868@url{http://www.robotstxt.org}.")
11869 (license license:gpl3+)))
11870
11871(define-public python-robotframework-requests
11872 (package
11873 (name "python-robotframework-requests")
11874 (version "0.9.7")
11875 (source
11876 (origin
11877 (method git-fetch) ; no tests in PyPI release
11878 (uri (git-reference
11879 (url "https://github.com/MarketSquare/robotframework-requests")
11880 (commit (string-append "v" version))))
11881 (file-name (git-file-name name version))
11882 (sha256
11883 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
11884 (build-system pyproject-build-system)
11885 (native-inputs
11886 (list python-pytest
11887 python-setuptools
11888 python-wheel))
11889 (propagated-inputs
11890 (list python-requests
11891 python-robotframework))
11892 (home-page "https://github.com/MarketSquare/robotframework-requests")
11893 (synopsis "Robot Framework keyword library wrapper around requests")
11894 (description
11895 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
11896Framework} library aimed to provide HTTP API testing functionalities by
11897wrapping the @code{requests} Python library.")
11898 (license license:expat)))
11899
11900(define-public python-pysolr
11901 (package
11902 (name "python-pysolr")
11903 (version "3.10.0")
11904 (source
11905 (origin
11906 (method url-fetch)
11907 (uri (pypi-uri "pysolr" version))
11908 (sha256
11909 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
11910 (build-system pyproject-build-system)
11911 (arguments
11912 '(#:tests? #f)) ; Tests require network access.
11913 (native-inputs
11914 (list python-setuptools
11915 python-setuptools-scm
11916 python-wheel))
11917 (propagated-inputs
11918 (list python-requests))
11919 (home-page "https://github.com/django-haystack/pysolr/")
11920 (synopsis "Lightweight python wrapper for Apache Solr")
11921 (description
11922 "This module provides an interface that queries the Apache Solr server
11923using a pure Python implementation.")
11924 (license license:bsd-3)))
11925
11926(define-public python-pyjsparser
11927 ;; XXX: This project is potentially abandonware, consider to remove in next
11928 ;; refresh cycle, see:
11929 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
11930 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
11931 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
11932 (package
11933 (name "python-pyjsparser")
11934 (version "2.7.1")
11935 (source
11936 (origin
11937 (method url-fetch)
11938 (uri (pypi-uri "pyjsparser" version))
11939 (sha256
11940 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
11941 (build-system pyproject-build-system)
11942 (arguments
11943 '(#:tests? #f)) ;no tests in PyPI
11944 (native-inputs (list python-setuptools))
11945 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
11946 (synopsis "Fast JavaScript parser")
11947 (description
11948 "This package provides a fast JavaScript parser (based on esprima.js)")
11949 (license license:expat)))
11950
11951(define-public python-js2py
11952 (package
11953 (name "python-js2py")
11954 (properties '((commit . "2e017b86e2f18a6c8a842293b1687f2ce7baa12e")
11955 (revision . "0")))
11956 (version (git-version "0.74"
11957 (assoc-ref properties 'revision)
11958 (assoc-ref properties 'commit)))
11959 (source
11960 (origin
11961 (method git-fetch)
11962 (uri (git-reference
11963 (url "https://github.com/PiotrDabkowski/Js2Py")
11964 (commit (assoc-ref properties 'commit))))
11965 (file-name (git-file-name name version))
11966 (sha256
11967 (base32 "0rsac03shkm0yxq91hzxdvhb96wy168bxdw8azi25bvlm8s3l27p"))
11968 (patches
11969 (list
11970 (origin
11971 (method url-fetch)
11972 (uri (string-append "https://github.com/PiotrDabkowski/Js2Py/commit"
11973 "/fd7df4a91fb08060914c7b1d9e94583d18f3371b"
11974 ".patch"))
11975 (file-name (string-append name "-" version "-pull-327.patch"))
11976 (sha256
11977 (base32 "14v89v8qqrsq0d63xbilkvx19l1rk59mlrbxvd4sj138lk7160ki")))))))
11978 (build-system pyproject-build-system)
11979 (arguments
11980 (list #:tests? #f)) ; tests require Node
11981 (native-inputs
11982 (list python-setuptools))
11983 (propagated-inputs
11984 (list python-pyjsparser
11985 python-six
11986 python-tzlocal))
11987 (home-page "https://github.com/PiotrDabkowski/Js2Py")
11988 (synopsis "JavaScript to Python translator")
11989 (description
11990 "This package provides a JavaScript to Python translator and a JavaScript
11991interpreter written in pure Python.")
11992 (license license:expat)))
11993
11994(define-public python-http-ece
11995 (package
11996 (name "python-http-ece")
11997 (version "1.2.1")
11998 (source
11999 (origin
12000 (method git-fetch)
12001 (uri (git-reference
12002 (url "https://github.com/web-push-libs/encrypted-content-encoding")
12003 (commit (string-append "v" version))))
12004 (file-name (git-file-name name version))
12005 (sha256
12006 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
12007 (build-system pyproject-build-system)
12008 (arguments
12009 `(#:phases
12010 (modify-phases %standard-phases
12011 (add-after 'unpack 'change-directory
12012 (lambda _ (chdir "python") #t)))))
12013 (native-inputs
12014 (list python-pytest python-setuptools))
12015 (propagated-inputs
12016 (list python-cryptography))
12017 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
12018 (synopsis "Encrypted Content Encoding for HTTP")
12019 (description
12020 "This package provides a simple implementation of Encrypted Content
12021Encoding for HTTP.")
12022 (license license:expat)))
12023
12024(define-public python-cloud-init
12025 (package
12026 (name "python-cloud-init")
12027 (version "24.2")
12028 (source
12029 (origin
12030 (method git-fetch)
12031 (uri (git-reference
12032 (url "https://github.com/canonical/cloud-init")
12033 (commit version)))
12034 (file-name (git-file-name name version))
12035 (sha256
12036 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
12037 (build-system pyproject-build-system)
12038 (arguments
12039 (list
12040 #:test-flags
12041 '(list
12042 ;; This requires usermod
12043 "--ignore=tests/unittests/distros/test_create_users.py"
12044 ;; This writes to /var
12045 "--ignore=tests/unittests/net/test_dhcp.py"
12046 "-k"
12047 (string-append
12048 ;; This test messes with PATH, so it cannot find mkdir
12049 "not test_path_env_gets_set_from_main"
12050 " and not test_apt_configure_sources_list_"
12051 ;; These all fail because /bin/sh doesn't exist. We cannot patch
12052 ;; this because the generated scripts must use /bin/sh as they are
12053 ;; supposed to be run on minimal systems.
12054 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
12055 " and not test_handler_runs_bootcmd_script_with_error"
12056 " and not test_subp_combined_stderr_stdout"
12057 " and not test_handle_part"))
12058 #:phases
12059 #~(modify-phases %standard-phases
12060 (add-after 'unpack 'patch-references
12061 (lambda _
12062 (substitute* "tests/unittests/cmd/test_clean.py"
12063 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
12064 (add-after 'install 'move-files
12065 (lambda* (#:key inputs outputs #:allow-other-keys)
12066 (for-each (lambda (dir)
12067 (let ((source (string-append (site-packages inputs outputs) "/" dir))
12068 (target (string-append #$output "/" (basename dir))))
12069 (copy-recursively source target)
12070 (delete-file-recursively source)))
12071 (list "etc" "lib" "usr/lib" "usr/share")))))))
12072 (propagated-inputs
12073 (list python-configobj
12074 python-jinja2
12075 python-jsonpatch
12076 python-jsonschema
12077 python-netifaces
12078 python-oauthlib
12079 python-pyserial
12080 python-pyyaml
12081 python-responses))
12082 (native-inputs
12083 (list procps ;for ps when running tests
12084 python-pytest
12085 python-pytest-mock
12086 python-passlib
12087 python-setuptools
12088 python-wheel))
12089 (home-page "https://github.com/canonical/cloud-init")
12090 (synopsis "Cloud instance initialization tools")
12091 (description
12092 "Cloud-init is the multi-distribution method for cross-platform cloud
12093instance initialization. It is supported across all major public cloud
12094providers, provisioning systems for private cloud infrastructure, and
12095bare-metal installations.")
12096 ;; Either license can be chosen
12097 (license (list license:asl2.0 license:gpl3))))
12098
12099(define-public python-cloudscraper
12100 (package
12101 (name "python-cloudscraper")
12102 (version "3.0.0")
12103 (source
12104 (origin
12105 (method git-fetch)
12106 (uri (git-reference
12107 (url "https://github.com/VeNoMouS/cloudscraper")
12108 (commit version)))
12109 (file-name (git-file-name name version))
12110 (sha256
12111 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
12112 (modules '((guix build utils)))
12113 (snippet
12114 '(with-directory-excursion "cloudscraper"
12115 (for-each delete-file
12116 '("captcha/9kw.py" "captcha/anticaptcha.py"))
12117 (substitute* "__init__.py"
12118 ;; Perhaps it's a joke, but don't promote proprietary software.
12119 (("([Th]is feature is not available) in the .*'" _ prefix)
12120 (string-append prefix ".'")))))))
12121 (build-system pyproject-build-system)
12122 (arguments
12123 (list
12124 #:test-flags
12125 #~(list "-k" "not test_403_handling")
12126 #:phases
12127 #~(modify-phases %standard-phases
12128 (add-after 'unpack 'relax-requirements
12129 (lambda _
12130 ;; XXX: Relax brotli dependency.
12131 (substitute* "pyproject.toml"
12132 (("\"brotli>=.*\"")
12133 "\"brotli\""))
12134 ;; XXX: Dependencies, that have not yet been packaged
12135 ;; and cause an import error when included.
12136 (delete-file "cloudscraper/interpreters/v8.py")))
12137 (add-after 'unpack 'fix-references
12138 (lambda _
12139 (substitute* "cloudscraper/interpreters/nodejs.py"
12140 (("'node'")
12141 (string-append "'" (which "node") "'"))))))))
12142 (inputs (list node-lts))
12143 (propagated-inputs
12144 (list python-pycryptodome
12145 python-brotli
12146 python-js2py
12147 python-polling2
12148 python-requests
12149 python-requests-toolbelt
12150 python-responses
12151 python-pyparsing
12152 python-websocket-client))
12153 (native-inputs (list python-pytest python-setuptools))
12154 (home-page "https://github.com/venomous/cloudscraper")
12155 (synopsis "Cloudflare anti-bot bypass")
12156 (description
12157 "This module acts as a webbrowser solving Cloudflare's Javascript
12158challenges.")
12159 (license license:expat)))
12160
12161(define-public python-imap-tools
12162 (package
12163 (name "python-imap-tools")
12164 (version "1.9.0")
12165 (source
12166 (origin
12167 (method git-fetch) ; no tests in PyPI release
12168 (uri (git-reference
12169 (url "https://github.com/ikvk/imap_tools")
12170 (commit (string-append "v" version))))
12171 (file-name (git-file-name name version))
12172 (sha256
12173 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
12174 (arguments
12175 (list
12176 #:test-flags
12177 ;; Tests require a network connection
12178 #~(list "-k" (string-append "not test_action"
12179 " and not test_attributes"
12180 " and not test_connection"
12181 " and not test_folders"
12182 " and not test_idle"
12183 " and not test_live"))))
12184 (build-system pyproject-build-system)
12185 (native-inputs
12186 (list python-pytest python-setuptools python-wheel))
12187 (home-page "https://github.com/ikvk/imap_tools")
12188 (synopsis "Work with email and mailbox by IMAP")
12189 (description
12190 "This Python library provides tools to deal with email and mailboxes
12191over IMAP:
12192
12193@itemize
12194@item Parsed email message attributes
12195@item Query builder for searching emails
12196@item Work with emails in folders (copy, delete, flag, move, seen)
12197@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
12198@end itemize")
12199 (license license:asl2.0)))
12200
12201(define-public python-giturlparse
12202 (package
12203 (name "python-giturlparse")
12204 (version "0.12.0")
12205 (source
12206 (origin
12207 (method git-fetch)
12208 (uri (git-reference
12209 (url "https://github.com/nephila/giturlparse")
12210 (commit version)))
12211 (file-name (git-file-name name version))
12212 (sha256
12213 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
12214 (build-system pyproject-build-system)
12215 (native-inputs (list python-pytest python-setuptools))
12216 (home-page "https://github.com/nephila/giturlparse")
12217 (synopsis "Git URL parsing module")
12218 (description
12219 "This package provides a git URL parsing module which supports parsing
12220and rewriting of remote git URLs from various hosting providers.")
12221 (license license:asl2.0)))
12222
12223(define-public python-hstspreload
12224 (package
12225 (name "python-hstspreload")
12226 (version "2025.1.1")
12227 (source
12228 (origin
12229 (method git-fetch)
12230 (uri (git-reference
12231 (url "https://github.com/sethmlarson/hstspreload")
12232 (commit version)))
12233 (file-name (git-file-name name version))
12234 (sha256
12235 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
12236 (build-system pyproject-build-system)
12237 (arguments (list #:tests? #f)) ; tests require external resources.
12238 (native-inputs (list python-setuptools))
12239 (home-page "https://github.com/sethmlarson/hstspreload")
12240 (synopsis "Chromium HSTS Preload list as a Python package")
12241 (description
12242 "@code{python-hstspreload} contains Chromium HSTS Preload list
12243as a Python package.")
12244 (license license:bsd-3)))
12245
12246(define-public python-sanic-routing
12247 (package
12248 (name "python-sanic-routing")
12249 (version "23.12.0")
12250 (source
12251 (origin
12252 (method url-fetch)
12253 (uri (pypi-uri "sanic-routing" version))
12254 (sha256
12255 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
12256 (build-system pyproject-build-system)
12257 (arguments
12258 ;; PyPi sources does not contain tests, recursive dependency on
12259 ;; python-sanic.
12260 (list #:tests? #f))
12261 (native-inputs (list python-setuptools python-wheel))
12262 (home-page "https://github.com/sanic-org/sanic-routing/")
12263 (synopsis "Routing component for Sanic")
12264 (description "Internal package for @code{python-sanic}, which provides
12265the @code{BasicRouter}.")
12266 (license license:expat)))
12267
12268(define-public python-sanic-testing
12269 (package
12270 (name "python-sanic-testing")
12271 (version "23.12.0")
12272 (source
12273 (origin
12274 (method url-fetch)
12275 (uri (pypi-uri "sanic-testing" version))
12276 (sha256
12277 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
12278 (build-system pyproject-build-system)
12279 (arguments
12280 ;; PyPi sources does not contain tests, recursive dependency on
12281 ;; python-sanic.
12282 (list #:tests? #f))
12283 (propagated-inputs (list python-httpx python-sanic-bootstrap))
12284 (native-inputs (list python-setuptools python-wheel))
12285 (home-page "https://github.com/sanic-org/sanic-testing/")
12286 (synopsis "Test clients for Sanic")
12287 (description "Internal package for @code{python-sanic}, which is
12288meant to be the core testing utility and clients for testing Sanic
12289applications.")
12290 (license license:expat)))
12291
12292(define-public python-sanic
12293 (package
12294 (name "python-sanic")
12295 (version "25.3.0")
12296 (source
12297 (origin
12298 (method url-fetch)
12299 (uri (pypi-uri "sanic" version))
12300 (sha256
12301 (base32 "1fv9wgsj54scbr7qhmwdgc4zqnqpwacpakcfxhsg10gc04h54pbp"))
12302 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
12303 (modules '((guix build utils)))
12304 (snippet #~(substitute* "setup.py"
12305 (("setuptools>=[0-9.]*")
12306 "setuptools")))))
12307 (build-system pyproject-build-system)
12308 (arguments
12309 (list
12310 #:test-flags
12311 #~(list "--asyncio-mode=auto"
12312 "--ignore=tests/benchmark/"
12313 "--ignore=tests/typing/test_typing.py"
12314 ;; Most tests hang or fail
12315 "--ignore=tests/test_cli.py"
12316 "--ignore=tests/worker/test_worker_serve.py"
12317 "-k"
12318 (string-append
12319 ;; PyPi sources lack examples module.
12320 "not test_gunicorn_"
12321 ;; Does not expect brotli and reordered headers.
12322 " and not test_raw_headers"
12323 ;; These look like buggy testcases.
12324 " and not test_zero_downtime"
12325 " and not test_non_default_uvloop_config_raises_warning"
12326 " and not test_listeners_triggered"
12327 " and not test_keep_alive_connection_context"
12328 " and not test_keep_alive_client_timeout"
12329 " and not test_conflicting_body_methods_overload"
12330 " and not test_unix_connection"
12331 ;; Unclear why they fail since core-updates merge.
12332 " and not test_missing_sni"
12333 " and not test_no_matching_cert"
12334 " and not test_wildcards"
12335 ;; These tests fail because subprotocols appear to be
12336 ;; parameterized as None
12337 " and not test_websocket_route_with_subprotocols"
12338 ;; AF_UNIX path too long
12339 " and not test_setup_and_teardown_unix"
12340 " and not test_configure_socket"
12341 ;; Freezes
12342 " and not test_server_run_with_repl"
12343 " and not test_server_run"
12344 " and not test_no_workers"))))
12345 (propagated-inputs
12346 (list python-aiofiles
12347 python-aioquic
12348 python-html5tagger
12349 python-httptools
12350 python-multidict
12351 python-sanic-routing
12352 python-tracerite
12353 python-typing-extensions
12354 python-ujson
12355 python-uvloop
12356 python-websockets))
12357 (native-inputs
12358 (list python-beautifulsoup4
12359 python-chardet
12360 python-cryptography
12361 python-docutils
12362 python-mypy
12363 python-pygments
12364 python-pytest
12365 python-pytest-asyncio
12366 python-pytest-benchmark
12367 python-pytest-sanic
12368 python-sanic-testing
12369 python-setuptools
12370 python-slotscheck
12371 python-towncrier
12372 python-types-ujson
12373 python-uvicorn
12374 python-wheel))
12375 (home-page "https://github.com/sanic-org/sanic/")
12376 (synopsis "Async Python web server/framework")
12377 (description
12378 "Sanic is a Python web server and web framework that's written to go
12379fast. It allows the usage of the @code{async/await} syntax added in Python
123803.5, which makes your code non-blocking and speedy.")
12381 (license license:expat)))
12382
12383(define-public python-sanic-bootstrap
12384 (package
12385 (inherit python-sanic)
12386 (name "python-sanic-bootstrap")
12387 (arguments (list #:tests? #f))
12388 (native-inputs (list python-setuptools python-wheel))))
12389
12390(define-public python-socketio
12391 (package
12392 (name "python-socketio")
12393 (version "5.12.1")
12394 (source
12395 (origin
12396 (method url-fetch)
12397 (uri (pypi-uri "python_socketio" version))
12398 (sha256
12399 (base32
12400 "175sd3fdld3s477i6b3v49yhf1alsbm1vaxzq44nqrqb8wgzz682"))))
12401 (build-system pyproject-build-system)
12402 (arguments
12403 (list #:test-flags
12404 '(list "--timeout=60"
12405 ;; These tests freeze.
12406 "--ignore-glob=tests/async/*")))
12407 (propagated-inputs
12408 (list python-bidict python-engineio python-msgpack))
12409 (native-inputs
12410 (list python-pytest
12411 python-pytest-asyncio
12412 python-pytest-timeout
12413 python-setuptools
12414 python-uvicorn
12415 python-wheel))
12416 (home-page "https://github.com/miguelgrinberg/python-socketio/")
12417 (synopsis "Python Socket.IO server")
12418 (description
12419 "This package provides a Python implementation of the @code{Socket.IO}
12420realtime client and server.")
12421 (license license:expat)))
12422
12423(define-public python-socks
12424 (package
12425 (name "python-socks")
12426 (version "2.8.1")
12427 (source
12428 (origin
12429 (method git-fetch)
12430 (uri (git-reference
12431 (url "https://github.com/romis2012/python-socks")
12432 (commit (string-append "v" version))))
12433 (file-name (git-file-name name version))
12434 (sha256
12435 (base32 "1x95i9w3izivdgz6hadh5kiil12i4ljk4ashgh3g0rjv2rw33vhj"))))
12436 (build-system pyproject-build-system)
12437 (propagated-inputs (list python-trio))
12438 (native-inputs
12439 (list python-anyio
12440 python-flask
12441 python-pytest
12442 python-pytest-asyncio
12443 python-pytest-trio
12444 python-setuptools
12445 python-tiny-proxy
12446 python-trustme
12447 python-yarl))
12448 (home-page "https://github.com/romis2012/python-socks")
12449 (synopsis
12450 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
12451 (description
12452 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
12453 functionality.")
12454 (license license:asl2.0)))
12455
12456(define-public python-socksio
12457 (package
12458 (name "python-socksio")
12459 (version "1.0.0")
12460 (source
12461 (origin
12462 (method url-fetch)
12463 (uri (pypi-uri "socksio" version))
12464 (sha256
12465 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
12466 (build-system pyproject-build-system)
12467 (native-inputs
12468 (list python-flit-core python-pytest))
12469 (home-page "https://github.com/sethmlarson/socksio")
12470 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
12471 (description "The @code{socksio} Python module is a client-side sans-I/O
12472SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
12473@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
12474means the library itself does not handle the actual sending of the bytes
12475through the network, it only deals with the implementation details of the
12476SOCKS protocols. It can be paired with any I/O library.")
12477 (license license:expat)))
12478
12479(define-public python-simple-websocket
12480 (package
12481 (name "python-simple-websocket")
12482 (version "1.1.0")
12483 (source
12484 (origin
12485 (method url-fetch)
12486 (uri (pypi-uri "simple_websocket" version))
12487 (sha256
12488 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
12489 (build-system pyproject-build-system)
12490 (arguments
12491 ;; Requires Internet access to resolve example.com
12492 (list #:test-flags '(list "--ignore=tests/test_client.py")))
12493 (propagated-inputs (list python-wsproto))
12494 (native-inputs (list python-pytest
12495 python-setuptools))
12496 (home-page "https://github.com/miguelgrinberg/simple-websocket")
12497 (synopsis "Simple WebSocket server and client for Python")
12498 (description "This package provides a simple @code{WebSocket} server and
12499client for Python.")
12500 (license license:expat)))
12501
12502(define-public python-siosocks
12503 (package
12504 (name "python-siosocks")
12505 (version "0.3.0")
12506 (source
12507 (origin
12508 (method git-fetch)
12509 (uri (git-reference
12510 (url "https://github.com/pohmelie/siosocks")
12511 (commit (string-append "v" version))))
12512 (file-name (git-file-name name version))
12513 (sha256
12514 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
12515 (build-system pyproject-build-system)
12516 (native-inputs
12517 (list python-pytest
12518 python-pytest-asyncio
12519 python-pytest-trio
12520 python-setuptools))
12521 (propagated-inputs (list python-trio))
12522 (home-page "https://github.com/pohmelie/siosocks")
12523 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
12524 (description
12525 "This package provides a Python module and framework for sans-io socks proxy
12526client/server with couple io backends.
12527
12528Features:
12529@itemize
12530@item Only TCP connect (no BIND, no UDP)
12531@item Both client and server
12532@item SOCKS versions: 4, 4a, 5
12533@item SOCKSv5 auth: no auth, username/password
12534@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
12535@item One-shot socks server (@code{python -m siosocks})
12536@end itemize")
12537 (license license:expat)))
12538
12539(define-public python-tiny-proxy
12540 (package
12541 (name "python-tiny-proxy")
12542 (version "0.2.1")
12543 (source
12544 (origin
12545 (method url-fetch)
12546 (uri (pypi-uri "tiny_proxy" version))
12547 (sha256
12548 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
12549 (build-system pyproject-build-system)
12550 ;; There are only a handful of tests and they require the as yet
12551 ;; unpackaged httpx_socks.
12552 (arguments (list #:tests? #false))
12553 (propagated-inputs (list python-anyio))
12554 (native-inputs
12555 (list python-httpx
12556 python-pytest
12557 python-setuptools
12558 python-wheel))
12559 (home-page "https://github.com/romis2012/tiny-proxy")
12560 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
12561 (description "This package provides a simple proxy server (SOCKS4(a),
12562SOCKS5(h), HTTP tunnel).")
12563 (license license:asl2.0)))
12564
12565(define-public python-azure-nspkg
12566 (package
12567 (name "python-azure-nspkg")
12568 (version "3.0.2")
12569 (source
12570 (origin
12571 (method url-fetch)
12572 (uri (pypi-uri "azure-nspkg" version ".zip"))
12573 (sha256
12574 (base32
12575 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
12576 (build-system pyproject-build-system)
12577 (arguments (list #:tests? #f)) ;no tests in package
12578 (native-inputs (list unzip python-setuptools))
12579 (home-page "https://github.com/Azure/azure-sdk-for-python")
12580 (synopsis "Azure namespace internals")
12581 (description
12582 "This package is an internal Azure namespace package.")
12583 (license license:expat)))
12584
12585(define-public python-azure-storage-nspkg
12586 (package
12587 (name "python-azure-storage-nspkg")
12588 (version "3.1.0")
12589 (source
12590 (origin
12591 (method url-fetch)
12592 (uri (pypi-uri "azure-storage-nspkg" version))
12593 (sha256
12594 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
12595 (build-system pyproject-build-system)
12596 (arguments
12597 (list #:tests? #f)) ;no tests in PyPI archive
12598 (native-inputs (list python-setuptools))
12599 (propagated-inputs (list python-azure-nspkg))
12600 (home-page "https://github.com/Azure/azure-storage-python")
12601 (synopsis "Microsoft Azure Storage Namespace package")
12602 (description
12603 "This project provides a client library in Python that makes it easy to
12604communicate with Microsoft Azure Storage services.")
12605 (license license:expat)))
12606
12607(define-public python-azure-common
12608 (package
12609 (name "python-azure-common")
12610 (version "1.1.28")
12611 (source
12612 (origin
12613 (method url-fetch)
12614 (uri (pypi-uri "azure-common" version ".zip"))
12615 (sha256
12616 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
12617 (build-system pyproject-build-system)
12618 (arguments
12619 (list #:tests? #f)) ;no tests in PyPI archive
12620 (propagated-inputs (list python-azure-nspkg))
12621 (native-inputs (list python-setuptools unzip))
12622 (home-page "https://github.com/Azure/azure-sdk-for-python")
12623 (synopsis "Microsoft Azure Client library for Python")
12624 (description "This package provides the Microsoft Azure Client library for
12625Python.")
12626 (license license:expat)))
12627
12628(define-public python-azure-core
12629 (package
12630 (name "python-azure-core")
12631 (version "1.32.0")
12632 (source
12633 (origin
12634 (method url-fetch)
12635 (uri (pypi-uri "azure_core" version))
12636 (sha256
12637 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
12638 (build-system pyproject-build-system)
12639 (arguments
12640 (list
12641 #:test-flags
12642 `(list ;; This fails because devtools_testutils doesn't exist.
12643 "--ignore=tests/test_connection_string_parsing.py"
12644 ;; These all need network access.
12645 "--ignore=samples"
12646 "--ignore=tests/async_tests/test_streaming_async.py"
12647 "--ignore=tests/test_streaming.py"
12648 "-m" "not asyncio and not live_test_only"
12649 "-k" ,(string-append
12650 "not test_decompress_plain_no_header"
12651 " and not test_compress_plain_no_header"
12652 " and not test_decompress_compressed_no_header"
12653 " and not test_requests_socket_timeout"))
12654 #:phases
12655 #~(modify-phases %standard-phases
12656 (add-before 'check 'add-test-pythonpath
12657 (lambda* (#:key tests? #:allow-other-keys)
12658 (when tests?
12659 (setenv "PYTHONPATH"
12660 (string-append
12661 (getcwd) "/tests/testserver_tests/coretestserver:"
12662 (getenv "GUIX_PYTHONPATH")))))))))
12663 (propagated-inputs
12664 (list python-aiohttp
12665 python-requests
12666 python-six
12667 python-typing-extensions))
12668 (native-inputs
12669 (list python-flask
12670 python-pytest-8
12671 python-pytest-aiohttp
12672 python-pytest-asyncio
12673 python-pytest-trio
12674 python-setuptools
12675 python-wheel))
12676 (home-page "https://github.com/Azure/azure-sdk-for-python")
12677 (synopsis "Microsoft Azure Core library for Python")
12678 (description "This package provides the Microsoft Azure Core library for
12679Python.")
12680 (license license:expat)))
12681
12682(define-public python-azure-storage-blob
12683 (package
12684 (name "python-azure-storage-blob")
12685 (version "12.27.0")
12686 (source
12687 (origin
12688 (method url-fetch)
12689 (uri (pypi-uri "azure_storage_blob" version))
12690 (sha256
12691 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
12692 (build-system pyproject-build-system)
12693 (arguments
12694 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12695 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12696 ;; it hard to package in Guix.
12697 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12698 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12699 (list #:tests? #f))
12700 (native-inputs
12701 (list python-setuptools))
12702 (propagated-inputs
12703 (list python-azure-core
12704 python-cryptography
12705 python-isodate
12706 python-typing-extensions))
12707 (home-page "https://github.com/Azure/azure-sdk-for-python/")
12708 (synopsis "Microsoft Azure Blob Storage client library for Python")
12709 (description "This package provides the Microsoft Azure Blob Storage
12710Client Library for Python.")
12711 (license license:expat)))
12712
12713(define-public python-azure-storage-file-datalake
12714 (package
12715 (name "python-azure-storage-file-datalake")
12716 (version "12.22.0")
12717 (source
12718 (origin
12719 (method url-fetch)
12720 (uri (pypi-uri "azure_storage_file_datalake" version))
12721 (sha256
12722 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
12723 (build-system pyproject-build-system)
12724 (arguments
12725 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12726 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12727 ;; it hard to package in Guix.
12728 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12729 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12730 (list #:tests? #f))
12731 (native-inputs
12732 (list python-setuptools))
12733 (propagated-inputs
12734 (list python-azure-core
12735 python-azure-storage-blob
12736 python-isodate
12737 python-typing-extensions))
12738 (home-page "https://github.com/Azure/azure-sdk-for-python")
12739 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
12740 (description
12741 "This package provides the Microsoft Azure File @code{DataLake} Storage
12742Client Library for Python.")
12743 (license license:expat)))
12744
12745(define-public python-google-auth
12746 (package
12747 (name "python-google-auth")
12748 (version "2.48.0")
12749 (source
12750 (origin
12751 (method url-fetch)
12752 (uri (pypi-uri "google_auth" version))
12753 (sha256
12754 (base32 "1kj1r3vp2jk2wv1mc0a5lpdnsivsqciah68ajhyql86k1imp0zjg"))))
12755 (build-system pyproject-build-system)
12756 (arguments
12757 (list
12758 #:test-flags
12759 ;; This one test uses crypto.sign with an outdated calling convention.
12760 '(list "--ignore=tests/transport/test__mtls_helper.py")))
12761 (propagated-inputs
12762 (list python-aiohttp
12763 python-cryptography
12764 python-pyasn1-modules
12765 python-requests
12766 python-rsa
12767 python-urllib3))
12768 (native-inputs
12769 (list nss-certs-for-test
12770 python-aiohttp
12771 python-aioresponses
12772 python-flask
12773 python-freezegun
12774 python-grpcio
12775 python-oauth2client
12776 python-packaging
12777 python-pyjwt
12778 python-pyopenssl
12779 python-pytest
12780 python-pytest-asyncio
12781 python-pytest-localserver
12782 python-pyu2f
12783 python-requests
12784 python-responses
12785 python-rsa
12786 python-setuptools
12787 python-urllib3))
12788 (home-page "https://github.com/googleapis/google-auth-library-python")
12789 (synopsis "Google Authentication Library")
12790 (description "This library simplifies using Google's various
12791server-to-server authentication mechanisms to access Google APIs.")
12792 (license license:asl2.0)))
12793
12794(define-public python-google-resumable-media
12795 (package
12796 (name "python-google-resumable-media")
12797 (version "2.8.0")
12798 (source
12799 (origin
12800 (method git-fetch)
12801 (uri (git-reference
12802 (url
12803 "https://github.com/googleapis/google-resumable-media-python")
12804 (commit (string-append "v" version))))
12805 (file-name (git-file-name name version))
12806 (sha256
12807 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
12808 (build-system pyproject-build-system)
12809 (arguments
12810 (list
12811 #:test-flags
12812 #~(list
12813 ;; XXX: Missing test_utils.retry.
12814 "--ignore-glob=tests*/system/"
12815 ;; XXX: md5_hash is not mock.sentinel.md5_hash
12816 "-k" (string-join
12817 (list "not test_brotli"
12818 "test_constructor"
12819 "test_decompress")
12820 " and not "))))
12821 (propagated-inputs (list python-google-crc32c))
12822 (native-inputs
12823 (list python-google-auth
12824 python-mock
12825 python-pytest
12826 python-pytest-asyncio
12827 python-setuptools
12828 python-test-utils))
12829 (home-page "https://github.com/googleapis/google-resumable-media-python")
12830 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
12831 (description "This package provides utilities for Google Media Downloads
12832and Resumable Uploads.")
12833 (license license:asl2.0)))
12834
12835(define-public python-googleapis-common-protos
12836 (package
12837 (name "python-googleapis-common-protos")
12838 (version "1.66.0")
12839 (source
12840 (origin
12841 (method git-fetch)
12842 (uri (git-reference
12843 (url "https://github.com/googleapis/python-api-common-protos")
12844 (commit (string-append "v" version))))
12845 (file-name (git-file-name name version))
12846 (sha256
12847 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
12848 (build-system pyproject-build-system)
12849 (propagated-inputs (list python-protobuf))
12850 (native-inputs (list python-pytest python-setuptools))
12851 (home-page "https://github.com/googleapis/python-api-common-protos")
12852 (synopsis "Common protobufs used in Google APIs")
12853 (description
12854 "This package contains Python classes generated from the common protos in
12855the @code{googleapis/api-common-protos} repository.")
12856 (license license:asl2.0)))
12857
12858(define-public python-google-api-core
12859 (package
12860 (name "python-google-api-core")
12861 (version "2.29.0")
12862 (source
12863 (origin
12864 (method git-fetch)
12865 (uri (git-reference
12866 (url "https://github.com/googleapis/python-api-core")
12867 (commit (string-append "v" version))))
12868 (file-name (git-file-name name version))
12869 (sha256
12870 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
12871 (build-system pyproject-build-system)
12872 (arguments
12873 (list
12874 #:test-flags
12875 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
12876 ;; deprecated and scheduled for removal in a future version. Use
12877 ;; timezone-aware objects to represent datetimes in UTC:
12878 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
12879 #~(list "-W" "ignore::DeprecationWarning")))
12880 (propagated-inputs
12881 (list python-google-auth
12882 python-googleapis-common-protos
12883 python-protobuf
12884 python-proto-plus
12885 python-requests))
12886 (native-inputs
12887 (list python-mock
12888 python-pytest
12889 python-pytest-asyncio
12890 python-pytest-mock
12891 python-setuptools))
12892 (home-page "https://github.com/googleapis/python-api-core")
12893 (synopsis "Google API client core library")
12894 (description
12895 "This library defines common helpers used by all Google API clients.")
12896 (license license:asl2.0)))
12897
12898(define-public python-google-cloud-core
12899 (package
12900 (name "python-google-cloud-core")
12901 (version "2.5.0")
12902 (source
12903 (origin
12904 (method git-fetch)
12905 (uri (git-reference
12906 (url "https://github.com/googleapis/python-cloud-core")
12907 (commit (string-append "v" version))))
12908 (file-name (git-file-name name version))
12909 (sha256
12910 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
12911 (build-system pyproject-build-system)
12912 (arguments
12913 (list
12914 #:test-flags
12915 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
12916 ;; deprecated and scheduled for removal in a future version. Use
12917 ;; timezone-aware objects to represent datetimes in UTC:
12918 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
12919 #~(list "-W" "ignore::DeprecationWarning")))
12920 (propagated-inputs (list python-google-api-core python-google-auth))
12921 (native-inputs
12922 (list python-grpcio
12923 python-grpcio-status
12924 python-pytest
12925 python-setuptools))
12926 (home-page "https://github.com/googleapis/python-cloud-core")
12927 (synopsis "Google Cloud API client core library")
12928 (description
12929 "This library defines common helpers (e.g. base @code{Client} classes)
12930used by all of the @code{google-cloud-*} packages.")
12931 (license license:asl2.0)))
12932
12933(define-public python-google-cloud-storage
12934 (package
12935 (name "python-google-cloud-storage")
12936 (version "2.19.0")
12937 (source
12938 (origin
12939 (method git-fetch)
12940 (uri (git-reference
12941 (url "https://github.com/googleapis/python-storage")
12942 (commit (string-append "v" version))))
12943 (file-name (git-file-name name version))
12944 (sha256
12945 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
12946 (build-system pyproject-build-system)
12947 (arguments
12948 (list
12949 #:test-flags
12950 #~(list
12951 ;; XXX: Missing test_utils.retry.
12952 "--ignore=tests/system/"
12953 ;; Needs docker.
12954 "--ignore=tests/conformance/"
12955 ;; XXX: Deprecations.
12956 "-k" (string-join
12957 (list "not test_set_api_request_attr"
12958 "test_create_bucket_w_custom_endpoint"
12959 "test_ctor_w_api_endpoint_override"
12960 "test_ctor_w_custom_endpoint_use_auth"
12961 "test_list_buckets_w_custom_endpoint")
12962 " and not ")
12963 "tests")))
12964 (native-inputs
12965 (list python-googleapis-common-protos
12966 python-mock
12967 python-pytest
12968 python-test-utils
12969 python-setuptools))
12970 (propagated-inputs
12971 (list python-google-api-core
12972 python-google-auth
12973 python-google-cloud-core
12974 python-google-resumable-media
12975 python-protobuf
12976 python-requests))
12977 (home-page "https://github.com/googleapis/python-storage")
12978 (synopsis "Google Cloud Storage API client library")
12979 (description
12980 "Google Cloud Storage allows you to store data on Google infrastructure,
12981and it can be used to distribute large data objects to users via direct
12982download. This package provides a Google Cloud Storage API client library for
12983Python.")
12984 (license license:asl2.0)))
12985
12986(define-public python-smart-open
12987 (package
12988 (name "python-smart-open")
12989 (version "7.3.0")
12990 (source
12991 (origin
12992 (method git-fetch) ;no tests in PyPI archive
12993 (uri (git-reference
12994 (url "https://github.com/piskvorky/smart_open")
12995 (commit (string-append "v" version))))
12996 (file-name (git-file-name name version))
12997 (sha256
12998 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
12999 (build-system pyproject-build-system)
13000 (arguments
13001 (list
13002 #:test-flags
13003 #~(list "--ignore=ci_helpers/"
13004 "--ignore=integration-tests/"
13005 ;; FIXME: Enable when guix/guix#1436 is resolved.
13006 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
13007 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
13008 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
13009 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
13010 "--ignore=tests/test_gcs.py")))
13011 (propagated-inputs
13012 (list python-azure-common
13013 python-azure-core
13014 python-azure-storage-blob
13015 python-boto3
13016 ;; python-google-cloud-storage ;see guix/guix#1436
13017 python-paramiko
13018 python-requests
13019 python-wrapt
13020 python-zstandard))
13021 (native-inputs
13022 (list python-numpy
13023 python-moto
13024 python-pytest
13025 python-pytest-rerunfailures
13026 python-responses
13027 python-setuptools
13028 python-setuptools-scm
13029 python-wheel))
13030 (home-page "https://github.com/piskvorky/smart_open")
13031 (synopsis "Utilities for streaming large files")
13032 (description
13033 "This package provides utilities for streaming large files (S3, HDFS,
13034GCS, Azure Blob Storage, gzip, bz2, etc.)")
13035 (license license:expat)))
13036
13037(define-public python-smart-open-6
13038 (package
13039 (inherit python-smart-open)
13040 (name "python-smart-open")
13041 (version "6.4.0")
13042 (source
13043 (origin
13044 (method git-fetch)
13045 (uri (git-reference
13046 (url "https://github.com/piskvorky/smart_open")
13047 (commit (string-append "v" version))))
13048 (file-name (git-file-name name version))
13049 (sha256
13050 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
13051 (arguments
13052 (list
13053 ;; XXX: Tests need some older native inputs, disable for now.
13054 #:tests? #f))))
13055
13056(define-public python-w3lib
13057 (package
13058 (name "python-w3lib")
13059 (version "2.3.1")
13060 (source
13061 (origin
13062 (method url-fetch)
13063 (uri (pypi-uri "w3lib" version))
13064 (sha256
13065 (base32
13066 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
13067 (build-system pyproject-build-system)
13068 (native-inputs
13069 (list python-pytest python-setuptools python-wheel))
13070 (home-page "https://github.com/scrapy/w3lib")
13071 (synopsis "Python library of web-related functions")
13072 (description
13073 "This is a Python library of web-related functions, such as: remove
13074comments, or tags from HTML snippets, extract base url from HTML snippets,
13075translate entities on HTML strings, among other things.")
13076 (license license:bsd-3)))
13077
13078(define-public python-webcolors
13079 (package
13080 (name "python-webcolors")
13081 (version "24.11.1")
13082 (source
13083 (origin
13084 (method url-fetch)
13085 (uri (pypi-uri "webcolors" version))
13086 (sha256
13087 (base32 "1xl0vn4xa03vjwx6fj19q9kgb94g65gvdf3p0ivsy0i2ydldgczc"))))
13088 (build-system pyproject-build-system)
13089 (arguments
13090 (list
13091 #:phases
13092 '(modify-phases %standard-phases
13093 (add-after 'unpack 'patch-pyproject
13094 (lambda _
13095 ;; XXX Our version of python-pdm-backend does not recognize
13096 ;; "dependency-groups", but is fine with the bogus
13097 ;; "tool.whatever".
13098 (substitute* "pyproject.toml"
13099 (("\\[dependency-groups\\]") "[tool.whatever]")))))))
13100 (native-inputs
13101 (list python-pdm-backend python-pytest))
13102 (home-page "https://github.com/ubernostrum/webcolors")
13103 (synopsis "HTML/CSS color definitions library")
13104 (description "@code{python-webcolors} is a module for working with
13105HTML/CSS color definitions. Normalizing and converting between the following
13106formats is supported.
13107@itemize
13108@item Specification-defined color names
13109@item Six-digit hexadecimal
13110@item Three-digit hexadecimal
13111@item Integer rgb() triplet
13112@item Percentage rgb() triplet
13113@end itemize
13114Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
13115can be handled by the @code{colorsys} module in the Python standard library.")
13116 (license license:bsd-3)))
13117
13118(define-public python-woob
13119 ;; TODO: woob requires backends which are currently installed on the fly in
13120 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
13121 ;; them in the store instead. Many modules are included in the modules
13122 ;; directory in the source tree, but it is unclear how to install them.
13123 ;; Many modules require extra dependencies though, so maybe they should be
13124 ;; packaged independently of woob itself.
13125 (package
13126 (name "python-woob")
13127 (version "3.7")
13128 (source
13129 (origin
13130 (method git-fetch)
13131 (uri (git-reference
13132 (url "https://gitlab.com/woob/woob.git")
13133 (commit version)))
13134 (file-name (git-file-name name version))
13135 (sha256
13136 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
13137 (build-system pyproject-build-system)
13138 (arguments
13139 (list
13140 #:test-flags
13141 ;; Deselect tests that require DNS lookup.
13142 #~(list
13143 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
13144 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
13145 #:phases
13146 #~(modify-phases %standard-phases
13147 (add-before 'build 'relax-requirements
13148 (lambda _
13149 (substitute* "pyproject.toml"
13150 ;; packaging ~= 23.0
13151 (("\"packaging .*\",")
13152 "")
13153 ;; rich~=13.0
13154 (("\"rich .*\",")
13155 "\"rich\",")))))))
13156 (native-inputs
13157 (list nss-certs-for-test
13158 python-pytest
13159 python-setuptools))
13160 (propagated-inputs
13161 (list python-babel
13162 python-colorama
13163 python-cssselect
13164 python-dateutil
13165 python-feedparser
13166 python-html2text
13167 python-lxml
13168 python-packaging
13169 python-pillow
13170 python-prettytable
13171 python-pycountry
13172 python-pyyaml
13173 python-requests
13174 python-responses
13175 python-rich
13176 python-termcolor
13177 python-unidecode))
13178 (home-page "https://woob.tech/")
13179 (synopsis "Woob, Web Outside Of Browsers")
13180 (description
13181 "Woob is a collection of applications able to interact with
13182websites, without requiring the user to open them in a browser. It also
13183provides well-defined APIs to talk to websites lacking one.")
13184 (license license:lgpl3+)))
13185
13186(define-public python-flask-combo-jsonapi
13187 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
13188 (revision "0"))
13189 (package
13190 (name "python-flask-combo-jsonapi")
13191 (version (git-version "1.1.0" revision commit))
13192 (source
13193 (origin
13194 (method git-fetch)
13195 (uri (git-reference
13196 (url "https://github.com/AdCombo/flask-combo-jsonapi")
13197 (commit commit)))
13198 (file-name (git-file-name name version))
13199 (sha256
13200 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
13201 (build-system pyproject-build-system)
13202 (arguments
13203 (list
13204 #:test-flags
13205 #~(list
13206 "-k"
13207 (string-join
13208 (list
13209 ;; XXX: This tests a feature that doesn't make sense when dropping
13210 ;; marshmallow < 3 support.
13211 "not test_compute_schema_propagate_context"
13212 ;; The following tests fail for unknown reasons (see:
13213 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
13214 "test_get_list_with_simple_filter_relationship_custom_qs_api"
13215 "test_get_list_with_simple_filter_relationship_error")
13216 " and not "))
13217 #:phases
13218 #~(modify-phases %standard-phases
13219 (add-after 'unpack 'loosen-requirements
13220 (lambda _
13221 ;; Don't pin specific versions of dependencies.
13222 (substitute* "requirements.txt"
13223 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
13224 (string-append dep "\n"))
13225 (("^marshmallow_jsonapi[=<>].*")
13226 "marshmallow_jsonapi_minfork\n"))
13227 ;; Drop support for marshmallow < 3.
13228 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
13229 "flask_combo_jsonapi/schema.py")
13230 (("from marshmallow\\.base import SchemaABC")
13231 "from marshmallow import Schema")
13232 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
13233 "if isinstance(related_schema_cls, Schema):"))
13234 (substitute* "tests/test_sqlalchemy_data_layer.py"
13235 (("default=None")
13236 "dump_default=None")
13237 (("missing=")
13238 "load_default=")))))))
13239 (propagated-inputs
13240 (list python-flask
13241 python-marshmallow
13242 python-marshmallow-jsonapi
13243 python-simplejson
13244 python-sqlalchemy
13245 python-apispec
13246 python-simplejson
13247 python-six))
13248 (native-inputs
13249 (list python-pytest python-setuptools))
13250 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
13251 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
13252 (description
13253 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
13254APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
13255specification.
13256
13257It tries to combine the power of Flask-Restless with the flexibility of
13258Flask-RESTful to quickly build APIs that fit the complexity of existing
13259real-life projects with legacy data and diverse storage providers.")
13260 (license license:expat))))
13261
13262(define-public python-mwparserfromhell
13263 (package
13264 (name "python-mwparserfromhell")
13265 (version "0.7.2")
13266 (source
13267 (origin
13268 (method git-fetch)
13269 (uri (git-reference
13270 (url "https://github.com/earwig/mwparserfromhell")
13271 (commit (string-append "v" version))))
13272 (file-name (git-file-name name version))
13273 (sha256
13274 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
13275 (build-system pyproject-build-system)
13276 (native-inputs (list python-pytest python-setuptools))
13277 (home-page "https://github.com/earwig/mwparserfromhell")
13278 (synopsis "Python parser for MediaWiki wikicode")
13279 (description
13280 "The MediaWiki Parser From Hell is a python library package that provides
13281a parser for MediaWiki.
13282
13283It exposes parses as normal string objects with additional methods giving
13284access to the special Wikicode features it contains (hyperlinks, tags,
13285templates…). The parser doesn't interpolate strings at all, it remains at a
13286purely formal level.
13287
13288Full documentation may be found at
13289@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
13290 (license license:expat)))
13291
13292(define-public python-tweepy
13293 (package
13294 (name "python-tweepy")
13295 (version "4.16.0")
13296 (source
13297 (origin
13298 (method git-fetch)
13299 (uri
13300 (git-reference
13301 (url "https://github.com/tweepy/tweepy")
13302 (commit (string-append "v" version))))
13303 (file-name (git-file-name name version))
13304 (sha256
13305 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
13306 (build-system pyproject-build-system)
13307 (arguments
13308 ;; tests: 149 passed, 3 skipped, 1 warning
13309 (list #:test-backend #~'unittest
13310 #:test-flags #~(list "discover" "tests")))
13311 (native-inputs
13312 (list nss-certs-for-test
13313 python-flit-core
13314 python-urllib3-1.26
13315 python-vcrpy))
13316 (propagated-inputs
13317 (list python-aiohttp
13318 python-async-lru
13319 python-oauthlib
13320 python-requests
13321 python-requests-oauthlib))
13322 (home-page "https://www.tweepy.org/")
13323 (synopsis "Twitter library for Python")
13324 (description
13325 "This package provides @code{Tweepy}, an easy-to-use Python library for
13326accessing the Twitter API.")
13327 (license license:expat)))
13328
13329(define-public python-quart
13330 (package
13331 (name "python-quart")
13332 (version "0.19.9")
13333 (source
13334 (origin
13335 (method git-fetch) ; no tests in PyPI release
13336 (uri (git-reference
13337 (url "https://github.com/pallets/quart")
13338 (commit version)))
13339 (file-name (git-file-name name version))
13340 (sha256
13341 (base32 "1h5ifv8g9dc9m07vj4v7dfalam83v38545d845vvgys1gan1pscd"))))
13342 (build-system pyproject-build-system)
13343 (native-inputs
13344 (list python-poetry-core
13345 python-pytest
13346 python-pytest-asyncio))
13347 (propagated-inputs
13348 (list hypercorn
13349 python-aiofiles
13350 python-blinker
13351 python-click
13352 python-dotenv
13353 python-flask
13354 python-itsdangerous
13355 python-jinja2
13356 python-markupsafe
13357 python-toml
13358 python-werkzeug))
13359 (home-page "https://gitlab.com/pgjones/quart/")
13360 (synopsis "Python ASGI web microframework with the same API as Flask")
13361 (description
13362 "This package provides a Python ASGI web microframework with the same API
13363as Flask.")
13364 (license license:expat)))
13365
13366(define-public python-quart-trio
13367 (package
13368 (name "python-quart-trio")
13369 (version "0.12.0")
13370 (source
13371 (origin
13372 (method url-fetch)
13373 (uri (pypi-uri "quart_trio" version))
13374 (sha256
13375 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
13376 (build-system pyproject-build-system)
13377 (arguments
13378 (list
13379 #:phases
13380 #~(modify-phases %standard-phases
13381 (add-after 'unpack 'remove-coverage-pytest-options
13382 (lambda _
13383 (substitute* "pyproject.toml"
13384 (("--no-cov-on-fail") "")))))))
13385 (native-inputs
13386 (list python-pdm-backend
13387 python-pytest
13388 python-pytest-sugar
13389 python-pytest-trio))
13390 (propagated-inputs
13391 (list hypercorn
13392 python-quart
13393 python-trio))
13394 (home-page "https://github.com/pgjones/quart-trio")
13395 (synopsis "Extension for Quart to support the Trio event loop")
13396 (description
13397 "This package provides a Quart extension to provide Trio support. This
13398is an alternative to using the asyncio event loop present in the Python
13399standard library and supported by default in Quart.")
13400 (license license:expat)))
13401
13402(define-public python-ajsonrpc
13403 (package
13404 (name "python-ajsonrpc")
13405 (version "1.2.0")
13406 (source
13407 (origin
13408 (method git-fetch)
13409 (uri (git-reference
13410 (url "https://github.com/pavlov99/ajsonrpc")
13411 (commit version)))
13412 (file-name (git-file-name name version))
13413 (sha256
13414 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
13415 (build-system pyproject-build-system)
13416 (arguments
13417 (list
13418 #:phases
13419 #~(modify-phases %standard-phases
13420 (add-after 'unpack 'set-version
13421 (lambda _
13422 (substitute* "ajsonrpc/__init__.py"
13423 (("^__version__ = .*")
13424 (string-append "__version__ = \"" #$version "\"\n"))))))))
13425 (native-inputs
13426 (list python-pytest
13427 python-setuptools))
13428 (propagated-inputs
13429 (list python-quart
13430 python-sanic
13431 python-tornado))
13432 (home-page "https://github.com/pavlov99/ajsonrpc")
13433 (synopsis "Async JSON-RPC 2.0 protocol and server")
13434 (description
13435 "This package provides a Python JSON-RPC 2.0 protocol and server powered
13436by asyncio.")
13437 (license license:expat)))
13438
13439(define-public python-protego
13440 (package
13441 (name "python-protego")
13442 (version "0.4.0")
13443 (source
13444 (origin
13445 (method url-fetch)
13446 (uri (pypi-uri "protego" version))
13447 (sha256
13448 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
13449 (build-system pyproject-build-system)
13450 (native-inputs (list python-pytest python-setuptools python-wheel))
13451 (home-page "https://github.com/scrapy/protego")
13452 (synopsis "Python robots.txt parser with support for modern conventions")
13453 (description "Protego is a pure-Python @file{robots.txt} parser with support
13454for modern conventions.")
13455 (license license:bsd-3)))
13456
13457(define-public python-parsel
13458 (package
13459 (name "python-parsel")
13460 (version "1.10.0")
13461 (source
13462 (origin
13463 (method url-fetch)
13464 (uri (pypi-uri "parsel" version))
13465 (sha256
13466 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
13467 (build-system pyproject-build-system)
13468 (propagated-inputs
13469 (list python-cssselect
13470 python-jmespath
13471 python-lxml
13472 python-typing-extensions
13473 python-w3lib))
13474 (native-inputs
13475 (list python-psutil python-pytest python-setuptools python-wheel))
13476 (home-page "https://github.com/scrapy/parsel")
13477 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
13478 (description "Parsel is a library to extract and remove data from
13479HTML and XML using XPath and CSS selectors, optionally combined with
13480regular expressions.")
13481 (license license:bsd-3)))
13482
13483(define-public python-scrapy
13484 (package
13485 (name "python-scrapy")
13486 (version "2.13.3")
13487 (source
13488 (origin
13489 (method url-fetch)
13490 (uri (pypi-uri "scrapy" version))
13491 (sha256
13492 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
13493 (build-system pyproject-build-system)
13494 (arguments
13495 (list #:test-flags
13496 #~(list "--numprocesses" (number->string (parallel-job-count))
13497 "-k" (string-join
13498 ;; ConnectionRefusedError: [Errno 111] Connection
13499 ;; refused
13500 (list "not test_append"
13501 "test_append_active_mode"
13502 "test_overwrite"
13503 "test_overwrite_active_mode"
13504 "test_persist"
13505 ;; AssertionError
13506 "test_start_deprecated_super")
13507 " and not ")
13508 ;; Skip documentation testing.
13509 "--ignore=docs")
13510 #:phases
13511 #~(modify-phases %standard-phases
13512 (add-before 'check 'prepare-test-environment
13513 (lambda _
13514 (setenv "HOME" "/tmp"))))))
13515 (propagated-inputs
13516 (list python-cryptography
13517 python-cssselect
13518 python-defusedxml
13519 python-itemadapter
13520 python-itemloaders
13521 python-lxml
13522 python-packaging
13523 python-parsel
13524 python-protego
13525 python-pydispatcher
13526 python-pyopenssl
13527 python-pypydispatcher
13528 python-queuelib
13529 python-service-identity
13530 python-tldextract
13531 python-twisted
13532 python-w3lib
13533 python-zope-interface))
13534 (native-inputs
13535 (list nss-certs-for-test
13536 python-hatchling
13537 python-pexpect
13538 python-pytest
13539 python-pytest-xdist
13540 python-setuptools
13541 python-sybil
13542 python-testfixtures))
13543 (home-page "https://scrapy.org")
13544 (synopsis "High-level Web crawling and Web scraping framework")
13545 (description "Scrapy is a fast high-level web crawling and web
13546scraping framework, used to crawl websites and extract structured data
13547from their pages. It can be used for a wide range of purposes, from data
13548mining to monitoring and automated testing.")
13549 (license license:bsd-3)))
13550
13551(define sdmx-test-data
13552 (let* ((commit "cd7899341b46e179e9f19b638478d70197e12c74")
13553 (revision "1")
13554 (name "sdmx-test-data")
13555 (version (git-version "0" revision commit)))
13556 (origin
13557 (method git-fetch)
13558 (uri (git-reference
13559 (url "https://github.com/khaeru/sdmx-test-data")
13560 (commit commit)))
13561 (file-name (git-file-name name version))
13562 (sha256
13563 (base32 "1n9y83raxxpgljbi0wjj27lhmyn19fnc2325a6cchwsa3b65ywv7")))))
13564
13565(define-public python-sdmx1
13566 (package
13567 (name "python-sdmx1")
13568 (version "2.26.0")
13569 (source
13570 (origin
13571 (method git-fetch)
13572 (uri (git-reference
13573 (url "https://github.com/khaeru/sdmx")
13574 (commit (string-append "v" version))))
13575 (file-name (git-file-name name version))
13576 (sha256
13577 (base32 "096c60pxzcw71bc9fj3hpjprrdiia365rqalapxx56g6g1vkgka9"))))
13578 (build-system pyproject-build-system)
13579 (arguments
13580 (list
13581 #:test-flags
13582 #~(list
13583 ;; 804 passed, 122 skipped, 28 deselected, 23 xfailed, 1 xpassed, 3 warnings
13584 ;; XXX: 'Version' object has no attribute 'pre'
13585 "--ignore=sdmx/tests/model/test_version.py"
13586 ;; Most of these tests require network connection.
13587 "--ignore=sdmx/tests/test_client.py"
13588 "--ignore=sdmx/tests/test_sources.py"
13589 "--ignore=sdmx/tests/test_docs.py"
13590 "--ignore=sdmx/tests/test_session.py"
13591 "--ignore=sdmx/tests/writer/test_xml.py"
13592 "--ignore=sdmx/tests/reader/test_xml_v21.py"
13593 "--deselect=sdmx/tests/convert/test_pandas.py::test_dataset_constraint"
13594 ;; Wrong python-flaky version
13595 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas_in_user_cache"
13596 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas"
13597 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v2_1_samples"
13598 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v3_0_samples"
13599 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_doc"
13600 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_message_type"
13601 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_max_errors"
13602 ;; sqlite3.OperationalError
13603 "--deselect=sdmx/tests/util/test_requests.py::TestOfflineAdapter::test_raises")
13604 #:phases
13605 #~(modify-phases %standard-phases
13606 (add-after 'unpack 'fix-version
13607 (lambda _
13608 ;; versioningit needs git tags; patch pyproject.toml to use
13609 ;; static version and create _version.py directly.
13610 (substitute* "pyproject.toml"
13611 (("version.source = \"versioningit\"")
13612 "
13613[tool.hatch.version]
13614path = \"sdmx/_version.py\"")
13615 ((", \"versioningit\"")
13616 ""))
13617 (call-with-output-file "sdmx/_version.py"
13618 (lambda (port)
13619 (format port "__version__ = \"~a\"~%" #$version)))))
13620 (add-before 'check 'pre-check
13621 (lambda _
13622 (setenv "SDMX_TEST_DATA" #$sdmx-test-data)
13623 (setenv "HOME" (dirname (getcwd))))))))
13624 (propagated-inputs
13625 (list python-dateutil
13626 python-lxml
13627 python-pandas
13628 python-platformdirs
13629 python-requests))
13630 (native-inputs
13631 (list python-filelock
13632 python-flaky
13633 python-hatchling
13634 python-jinja2
13635 python-pyarrow
13636 python-pytest
13637 python-pytest-cov
13638 python-pytest-xdist
13639 python-requests-mock
13640 python-requests-cache
13641 python-responses))
13642 (home-page "https://sdmx1.readthedocs.io")
13643 (synopsis "Statistical Data and Metadata eXchange (SDMX) for Python")
13644 (description "This package provides a Python implementation of the
13645SDMX 2.1 and 3.0 standards for Statistical Data and Metadata eXchange.
13646These standards are developed and used by statistical agencies and
13647international organisations. This package can be used to:
13648@itemize
13649@item Explore and retrieve data available from SDMX-REST web services
13650operated by providers including the World Bank, International Monetary
13651Fund, Eurostat, OECD, and United Nations;
13652@item Read and write data and metadata in file formats including
13653SDMX-ML (XML), SDMX-JSON, and SDMX-CSV;
13654@item Convert data and metadata into @code{python-pandas} objects, for
13655use with the analysis, plotting, and other tools in the Python data
13656science ecosystem;
13657@item Apply the SDMX information model (IM) to structure and publish
13658your own data.
13659@end itemize")
13660 (license license:asl2.0)))
13661
13662(define-public python-jstyleson
13663 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
13664 (revision "0"))
13665 (package
13666 (name "python-jstyleson")
13667 (version (git-version "0.0.2" revision commit))
13668 (source
13669 (origin
13670 (method git-fetch)
13671 (uri (git-reference
13672 (url "https://github.com/linjackson78/jstyleson")
13673 (commit commit)))
13674 (file-name (git-file-name name version))
13675 (sha256
13676 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
13677 (build-system pyproject-build-system)
13678 (native-inputs (list python-pytest python-setuptools))
13679 (home-page "https://github.com/linjackson78/jstyleson")
13680 (synopsis "JSON parser supporting js-style comments")
13681 (description
13682 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
13683standard Python @code{json} library, it understands js-style comments.
13684Trailing comma is also supported.")
13685 (license license:expat))))
13686
13687(define-public python-html-text
13688 (package
13689 (name "python-html-text")
13690 (version "0.7.0")
13691 (source
13692 (origin
13693 (method url-fetch)
13694 (uri (pypi-uri "html_text" version))
13695 (sha256
13696 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
13697 (build-system pyproject-build-system)
13698 (native-inputs
13699 (list python-pytest
13700 python-setuptools
13701 python-wheel))
13702 (propagated-inputs
13703 (list python-lxml
13704 python-lxml-html-clean))
13705 (home-page "https://github.com/TeamHG-Memex/html-text")
13706 (synopsis "Extract text from HTML")
13707 (description "HTML to Text is a Python library for extract text from HTML.
13708Contrary to other solution such as LXML or Beautiful Soup, the text extracted
13709with @code{html_text} does not contain elements such as JavaScript or inline
13710styles not normally visible to users. It also normalizes white space
13711characters in a smarter, more visually pleasing style.")
13712 (license license:expat)))
13713
13714(define-public python-mf2py
13715 (package
13716 (name "python-mf2py")
13717 (version "2.0.1")
13718 (source
13719 (origin
13720 (method git-fetch)
13721 (uri (git-reference
13722 (url "https://github.com/microformats/mf2py")
13723 (commit (string-append "v" version))))
13724 (file-name (git-file-name name version))
13725 (sha256
13726 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
13727 (build-system pyproject-build-system)
13728 (native-inputs (list python-mock python-poetry-core python-pytest))
13729 (propagated-inputs
13730 (list python-beautifulsoup4 python-html5lib python-requests))
13731 (home-page "https://github.com/microformats/mf2py")
13732 (synopsis "Python Microformats2 parser")
13733 (description
13734 "This Python library provides a Microformats2 parser implementing the
13735full Microformats2 (mf2) specification, including backward compatibility with
13736Microformats1 (mf1).")
13737 (license license:expat)))
13738
13739(define-public python-extruct
13740 (package
13741 (name "python-extruct")
13742 (version "0.18.0")
13743 (source (origin
13744 (method git-fetch) ;for tests
13745 (uri (git-reference
13746 (url "https://github.com/scrapinghub/extruct")
13747 (commit (string-append "v" version))))
13748 (file-name (git-file-name name version))
13749 (sha256
13750 (base32
13751 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
13752 (build-system pyproject-build-system)
13753 (arguments
13754 (list
13755 #:test-flags
13756 ;; 67 passed, 3 deselected
13757 ;; XXX: 3 tests fail with errors in assertion.
13758 #~(list "-k" (string-append
13759 "not test_microformat"
13760 " and not test_microformat"
13761 " and not test_umicroformat"))))
13762 (native-inputs
13763 (list python-pytest
13764 python-setuptools
13765 python-wheel))
13766 (propagated-inputs
13767 (list python-html-text
13768 python-jstyleson
13769 python-lxml
13770 python-mf2py
13771 python-pyrdfa3
13772 python-rdflib
13773 python-w3lib))
13774 (home-page "https://github.com/scrapinghub/extruct")
13775 (synopsis "Extract embedded metadata from HTML markup")
13776 (description "@code{extruct} is a Python library for extracting embedded
13777metadata from HTML markup. Currently, extruct supports:
13778@itemize
13779@item W3C's HTML Microdata
13780@item embedded JSON-LD
13781@item Microformat via mf2py
13782@item Facebook's Open Graph
13783@item (experimental) RDFa via rdflib
13784@item Dublin Core Metadata (DC-HTML-2003)
13785@end itemize")
13786 (license license:bsd-3)))
13787
13788(define-public python-wadllib
13789 (package
13790 (name "python-wadllib")
13791 (version "2.0.0")
13792 (source
13793 (origin
13794 (method url-fetch)
13795 (uri (pypi-uri "wadllib" version))
13796 (sha256
13797 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
13798 (build-system pyproject-build-system)
13799 (arguments
13800 (list
13801 ;; XXX: Doctests are currently failing.
13802 #:tests? #f
13803 #:phases
13804 #~(modify-phases %standard-phases
13805 (replace 'check
13806 (lambda* (#:key tests? #:allow-other-keys)
13807 (if tests?
13808 (invoke "zope-testrunner" "--test-path=src")
13809 (format #t "test suite not run~%")))))))
13810 (native-inputs
13811 (list python-multipart python-setuptools python-zope-testrunner))
13812 (propagated-inputs (list python-lazr-uri))
13813 (home-page "https://launchpad.net/wadllib")
13814 (synopsis "Web Application Description Language (WADL) navigation library")
13815 (description "The @code{wadllib} Python library allows navigating HTTP
13816resources using Web Application Description Language (WADL) files as guides.")
13817 (license license:lgpl3)))
13818
13819(define-public python-zeep
13820 (package
13821 (name "python-zeep")
13822 (version "4.3.1")
13823 (source
13824 (origin
13825 (method url-fetch)
13826 (uri (pypi-uri "zeep" version))
13827 (sha256
13828 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
13829 (build-system pyproject-build-system)
13830 (arguments
13831 (list
13832 #:phases
13833 '(modify-phases %standard-phases
13834 (add-after 'unpack 'compatibility
13835 (lambda _
13836 ;; Relax requests-file requirement.
13837 (substitute* "pyproject.toml"
13838 (("\"requests-file.*\",")
13839 "\"requests-file\","))
13840 ;; httpx removed the "proxies" keyword. It's now either "mounts"
13841 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
13842 (substitute* "src/zeep/transports.py"
13843 (("proxies=") "proxy="))))
13844 ;; One test requires write access
13845 (add-before 'check 'set-HOME
13846 (lambda _ (setenv "HOME" (getcwd)))))))
13847 (propagated-inputs
13848 (list python-attrs
13849 python-isodate
13850 python-lxml
13851 python-platformdirs
13852 python-pytz
13853 python-requests
13854 python-requests-file
13855 python-requests-toolbelt))
13856 (native-inputs
13857 (list nss-certs-for-test
13858 python-freezegun
13859 python-pretend
13860 python-pytest
13861 python-pytest-asyncio
13862 python-pytest-httpx
13863 python-requests-mock
13864 python-setuptools
13865 python-wheel))
13866 (home-page "https://docs.python-zeep.org/en/stable/")
13867 (synopsis "Python SOAP client based on lxml / requests")
13868 (description "Zeep is a Python SOAP client. Highlights:
13869
13870@itemize
13871@item Build on top of @code{lxml} and @code{requests}.
13872@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
13873@item Support for WS-Addressing headers.
13874@item Support for WSSE (UserNameToken / x.509 signing).
13875@item Support for @code{asyncio} via @code{httpx}.
13876@item Experimental support for XOP messages.
13877@end itemize")
13878 (license license:expat)))
13879
13880(define-public python-http-client
13881 (package
13882 (name "python-http-client")
13883 (version "3.3.7")
13884 (source
13885 (origin
13886 (method git-fetch)
13887 (uri (git-reference
13888 (url "https://github.com/sendgrid/python-http-client")
13889 (commit version)))
13890 (file-name (git-file-name name version))
13891 (sha256
13892 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
13893 (build-system pyproject-build-system)
13894 (arguments
13895 (list
13896 #:test-backend #~'unittest
13897 #:phases
13898 #~(modify-phases %standard-phases
13899 (add-after 'unpack 'fix-tests
13900 (lambda _
13901 ;; The test expects the copyright to be updated each year.
13902 (substitute* "tests/test_daterange.py"
13903 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
13904 (native-inputs
13905 (list python-setuptools))
13906 (home-page "https://github.com/sendgrid/python-http-client")
13907 (synopsis "HTTP REST client for Python")
13908 (description
13909 "This package provides access to any RESTful or RESTful-like API.")
13910 (license license:expat)))
13911
13912(define-public python-sendgrid
13913 (package
13914 (name "python-sendgrid")
13915 (version "6.9.7")
13916 (source
13917 (origin
13918 (method git-fetch)
13919 (uri (git-reference
13920 (url "https://github.com/sendgrid/sendgrid-python")
13921 (commit version)))
13922 (file-name (git-file-name name version))
13923 (sha256
13924 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
13925 (build-system pyproject-build-system)
13926 (arguments
13927 (list
13928 #:test-flags
13929 #~(list "--ignore=test/integ"
13930 ;; Network access is required.
13931 "--ignore=live_test.py")))
13932 (native-inputs
13933 (list python-pytest
13934 python-setuptools))
13935 (propagated-inputs
13936 (list python-cryptography
13937 python-http-client
13938 python-flask
13939 python-pyyaml
13940 python-six ;hard dependency
13941 python-starkbank-ecdsa
13942 python-werkzeug))
13943 (home-page "https://github.com/sendgrid/sendgrid-python/")
13944 (synopsis "SendGrid API library for Python")
13945 (description
13946 "The @code{sendgrid} Python library allows access to the
13947SendGrid Web API v3. Version 3+ of the library provides full support for all
13948SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
13949 (license license:expat)))
13950
13951(define-public python-sse-starlette
13952 (package
13953 (name "python-sse-starlette")
13954 (version "3.4.4")
13955 (source
13956 (origin
13957 (method git-fetch)
13958 (uri (git-reference
13959 (url "https://github.com/sysid/sse-starlette")
13960 (commit (string-append "v" version))))
13961 (file-name (git-file-name name version))
13962 (sha256
13963 (base32 "0jzy3mjszl7fr524cggyf8k97x6jpykvmxldmm2ckmrqjpyj8jmz"))))
13964 (build-system pyproject-build-system)
13965 (arguments
13966 (list
13967 #:test-flags
13968 #~(list
13969 ;; XXX: Server fails to start.
13970 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
13971 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
13972 ;; XXX: Missing test dependency - testcontainers, Docker is required.
13973 "--ignore=tests/integration/test_multiple_consumers.py")))
13974 (native-inputs
13975 (list python-asgi-lifespan
13976 python-httpx
13977 python-portend
13978 python-pytest
13979 python-pytest-asyncio
13980 python-psutil
13981 python-setuptools
13982 python-tenacity
13983 python-uvicorn))
13984 (propagated-inputs
13985 (list python-anyio
13986 python-starlette))
13987 (home-page "https://github.com/sysid/sse-starlette")
13988 (synopsis "SSE plugin for Starlette")
13989 (description
13990 "This package provides SSE plugin for Starlette.")
13991 (license license:bsd-3)))
13992
13993(define-public python-sseclient-py
13994 (package
13995 (name "python-sseclient-py")
13996 (version "1.9.0")
13997 (source
13998 (origin
13999 (method git-fetch)
14000 (uri (git-reference
14001 (url "https://github.com/mpetazzoni/sseclient")
14002 (commit (string-append "sseclient-py-" version))))
14003 (file-name (git-file-name name version))
14004 (sha256
14005 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
14006 (build-system pyproject-build-system)
14007 (native-inputs (list python-hatchling python-pytest))
14008 (arguments
14009 (list
14010 #:test-backend #~'unittest
14011 #:test-flags #~'("discover" "--verbose" "tests")))
14012 (home-page "https://github.com/mpetazzoni/sseclient")
14013 (synopsis "Pure-Python Server Side Events (SSE) client")
14014 (description
14015 "This package provides a Python client for SSE event sources that
14016seamlessly integrates with @code{urllib3} and @code{requests}.")
14017 (license license:asl2.0)))
14018
14019(define-public python-starlette
14020 (package
14021 (name "python-starlette")
14022 (version "0.49.1")
14023 (source (origin
14024 (method git-fetch)
14025 (uri (git-reference
14026 (url "https://github.com/encode/starlette")
14027 (commit version)))
14028 (file-name (git-file-name name version))
14029 (sha256
14030 (base32
14031 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
14032 (build-system pyproject-build-system)
14033 (propagated-inputs (list python-anyio
14034 python-typing-extensions
14035 ;; [all] extra dependencies:
14036 python-itsdangerous
14037 python-jinja2
14038 python-multipart
14039 python-pyyaml
14040 python-requests))
14041 (native-inputs (list python-hatchling
14042 python-httpx
14043 python-pytest
14044 python-typing-extensions))
14045 (home-page "https://github.com/encode/starlette")
14046 (synopsis "Little ASGI library")
14047 (description
14048 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
14049Interface) framework/toolkit for building async web services in Python.")
14050 (license license:bsd-3)))
14051
14052(define-public python-starsessions
14053 (package
14054 (name "python-starsessions")
14055 (version "1.3.0")
14056 (source (origin
14057 (method git-fetch)
14058 (uri (git-reference
14059 (url "https://github.com/alex-oleshkevich/starsessions")
14060 (commit (string-append "v" version))))
14061 (file-name (git-file-name name version))
14062 (sha256
14063 (base32
14064 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
14065 (build-system pyproject-build-system)
14066 (arguments
14067 (list
14068 #:test-flags
14069 ;; These tests require a running redis server
14070 '(list "--ignore=tests/backends/test_redis.py"
14071 ;; XXX: this failure indicates a real compatibility problem, but
14072 ;; it seems restricted to the tests only.
14073 ;; AttributeError: 'Cookies' object has no attribute
14074 ;; 'clear_session_cookies'
14075 "-k"
14076 (string-append "not test_session_clears_on_tab_close"
14077 ;; This fails because an error is not raised.
14078 " and not test_session_wants_secret_key"))
14079 #:phases
14080 '(modify-phases %standard-phases
14081 (add-after 'unpack 'compatibilitiy
14082 (lambda _
14083 ;; aioredis has been renamed
14084 (substitute* "starsessions/backends/redis.py"
14085 (("aioredis") "redis")))))))
14086 (propagated-inputs
14087 (list python-redis
14088 python-itsdangerous
14089 python-starlette))
14090 (native-inputs
14091 (list python-httpx
14092 python-poetry-core
14093 python-pytest
14094 python-pytest-asyncio
14095 python-requests))
14096 (home-page "https://github.com/alex-oleshkevich/starsessions")
14097 (synopsis "Pluggable session support for Starlette and FastAPI")
14098 (description
14099 "This package adds pluggable session backends and ships default
14100@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
14101and FastAPI.")
14102 (license license:expat)))
14103
14104(define-public python-whereismyip
14105 (package
14106 (name "python-whereismyip")
14107 (version "0.1.0")
14108 (source
14109 (origin
14110 (method url-fetch)
14111 (uri (pypi-uri "whereismyip" version))
14112 (sha256
14113 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
14114 (build-system pyproject-build-system)
14115 (arguments (list #:tests? #false)) ; There are no tests.
14116 (native-inputs (list python-setuptools))
14117 (home-page "https://pypi.org/project/whereismyip/")
14118 (synopsis "Queries multiple geolocation services until one succeeds")
14119 (description
14120 "This package provides a simple Python library that queries multiple geolocation
14121services until one succeeds.")
14122 (license license:gpl3)))
14123
14124(define-public python-whitenoise
14125 (package
14126 (name "python-whitenoise")
14127 (version "6.9.0")
14128 (source (origin
14129 (method git-fetch) ; PyPI missing test fails
14130 (uri (git-reference
14131 (url "https://github.com/evansd/whitenoise")
14132 (commit version)))
14133 (file-name (git-file-name name version))
14134 (sha256
14135 (base32
14136 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
14137 (build-system pyproject-build-system)
14138 (arguments
14139 (list
14140 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
14141 (native-inputs (list python-brotli
14142 python-django
14143 python-requests
14144 python-pytest
14145 python-setuptools
14146 python-wheel))
14147 (home-page "https://github.com/evansd/whitenoise")
14148 (synopsis "Static file serving for WSGI applications")
14149 (description
14150 "WhiteNoise allows your web app to serve its own static files, making it
14151a self-contained unit that can be deployed anywhere without relying on nginx,
14152Amazon S3 or any other external service.")
14153 (license license:expat)))
14154
14155(define-public python-suds
14156 (package
14157 (name "python-suds")
14158 (version "1.2.0")
14159 (source
14160 (origin
14161 (method url-fetch)
14162 (uri (pypi-uri "suds" version))
14163 (sha256
14164 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
14165 (build-system pyproject-build-system)
14166 (arguments
14167 (list #:phases
14168 #~(modify-phases %standard-phases
14169 ;; XXX: chirp expects suds instead of suds_community
14170 (add-after 'install 'add-custom-dist-info
14171 (lambda _
14172 (for-each
14173 (lambda (dir)
14174 (with-directory-excursion (dirname dir)
14175 (symlink
14176 (basename dir)
14177 (string-append "suds-" #$version ".dist-info"))))
14178 (find-files #$output
14179 (lambda (file stat)
14180 (string-suffix? ".dist-info" file))
14181 #:directories? #t)))))))
14182 (native-inputs
14183 (list python-pytest
14184 python-setuptools
14185 python-wheel))
14186 (home-page "https://github.com/suds-community/suds")
14187 (synopsis "Lightweight SOAP python client for consuming Web Services")
14188 (description
14189 "Suds is a lightweight SOAP-based web service client for Python.")
14190 (license license:lgpl3+)))
14191
14192(define-public python-fastapi
14193 (package
14194 (name "python-fastapi")
14195 (version "0.131.0")
14196 (source
14197 (origin
14198 (method url-fetch)
14199 (uri (pypi-uri "fastapi" version))
14200 (sha256
14201 (base32 "1zs80pz8p04akxxmyfihqgii1wjhhad6qx1cjfd8kqmya9g1acb5"))))
14202 (build-system pyproject-build-system)
14203 (arguments
14204 (list
14205 ;; tests: 1126 passed, 12 skipped, 2 deselected
14206 #:test-backend #~'custom
14207 #:test-flags
14208 #~(list
14209 ;; Cannot import 'scripts' with just 'pytest'.
14210 "-m" "pytest"
14211 ;; Needs strawberry and sqlmodel.
14212 "--ignore=tests/test_tutorial/"
14213 ;; Fails due to failure to capture stdout.
14214 "--ignore=tests/test_fastapi_cli.py")))
14215 (native-inputs
14216 (list python-anyio
14217 python-dirty-equals
14218 python-flask
14219 python-inline-snapshot
14220 python-pdm-backend
14221 ;; python-pwdlib
14222 python-pyjwt
14223 python-pytest
14224 python-sqlalchemy-2
14225 ;; python-sqlmodel
14226 python-types-orjson
14227 python-types-ujson))
14228 (propagated-inputs
14229 (list python-starlette
14230 python-pydantic
14231 python-typing-extensions
14232 python-annotated-doc
14233 ;; [optional]
14234 python-email-validator
14235 python-fastapi-cli
14236 python-httpx
14237 python-itsdangerous
14238 python-jinja2
14239 python-multipart
14240 python-orjson
14241 python-pydantic-extra-types
14242 python-pydantic-settings
14243 python-pyyaml
14244 python-ujson
14245 python-uvicorn))
14246 (home-page "https://github.com/fastapi/fastapi")
14247 (synopsis "Web framework based on type hints")
14248 (description "FastAPI provides a web API framework based on pydantic and
14249starlette.")
14250 (license license:expat)))
14251
14252(define-public python-fastapi-csrf-protect
14253 (package
14254 (name "python-fastapi-csrf-protect")
14255 (version "0.3.3")
14256 (source (origin
14257 (method git-fetch)
14258 (uri (git-reference
14259 (url "https://github.com/aekasitt/fastapi-csrf-protect")
14260 (commit (string-append "v" version))))
14261 (file-name (git-file-name name version))
14262 (sha256
14263 (base32
14264 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
14265 (build-system pyproject-build-system)
14266 (propagated-inputs
14267 (list python-fastapi python-itsdangerous
14268 python-pydantic))
14269 (native-inputs
14270 (list python-poetry-core
14271 python-pytest))
14272 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
14273 (synopsis "Cross-Site Request Forgery (XSRF) protection")
14274 (description
14275 "This package provides a stateless implementation of @dfn{Cross-Site
14276Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
14277pattern.")
14278 (license license:expat)))
14279
14280(define-public python-fastapi-pagination-minimal
14281 (package
14282 (name "python-fastapi-pagination-minimal")
14283 (version "0.15.6")
14284 (source (origin
14285 (method git-fetch)
14286 (uri (git-reference
14287 (url "https://github.com/uriyyo/fastapi-pagination")
14288 (commit version)))
14289 (file-name (git-file-name name version))
14290 (sha256
14291 (base32
14292 "1ndazaqi1na0lj6fi42d7mi9lmpxdak0wq0pd97fb3b23ml8rlg6"))))
14293 (build-system pyproject-build-system)
14294 ;; We run the tests in python-fastapi-pagination only.
14295 (arguments (list #:tests? #false))
14296 ;; These are the only required dependencies,
14297 ;; please add all optional dependencies to the
14298 ;; full python-fastapi-pagination below.
14299 (propagated-inputs (list python-fastapi python-pydantic))
14300 (native-inputs (list python-hatchling))
14301 (home-page "https://github.com/uriyyo/fastapi-pagination")
14302 (synopsis "FastAPI pagination library")
14303 (description "@code{fastapi-pagination} is a Python library designed to
14304simplify pagination in FastAPI applications. It provides a set of utility
14305functions and data models to help you paginate your database queries and
14306return paginated responses to your clients.")
14307 (license license:expat)))
14308
14309(define-public python-fastapi-pagination
14310 (package
14311 (inherit python-fastapi-pagination-minimal)
14312 (name "python-fastapi-pagination")
14313 (arguments
14314 (list
14315 #:test-flags
14316 #~(list "--asyncio-mode=auto"
14317 "--ignore=tests/ext"
14318 ;; Netwok access is required.
14319 "-k" (string-join
14320 (list "not test_optional_params[postgres-default]"
14321 "test_optional_params[postgres-limit-offset]"
14322 "test_optional_params[sqlite-default]"
14323 "test_optional_params[sqlite-limit-offset]")
14324 " and not "))
14325 #:phases
14326 '(modify-phases %standard-phases
14327 (add-after 'unpack 'patch-tests
14328 (lambda _
14329 ;; We don't have a package for python-cassandra or motor, but we
14330 ;; also don't need them as we only run the unit tests anyway.
14331 (substitute* "tests/conftest.py"
14332 (("from cassandra.*") "")
14333 (("from motor.*") "")))))))
14334 (propagated-inputs
14335 (modify-inputs (package-propagated-inputs
14336 python-fastapi-pagination-minimal)
14337 (prepend python-asyncpg
14338 python-databases
14339 python-django
14340 python-fastapi
14341 python-pydantic
14342 python-sqlalchemy
14343 (package
14344 (inherit python-tortoise-orm)
14345 (arguments
14346 (substitute-keyword-arguments (package-arguments
14347 python-tortoise-orm)
14348 ((#:phases phases '%standard-phases)
14349 `(modify-phases ,phases
14350 (delete 'sanity-check)))))
14351 (propagated-inputs
14352 (modify-inputs propagated-inputs
14353 (replace "python-aiosqlite" python-aiosqlite)))))))
14354 (native-inputs
14355 (list python-aiosqlite
14356 python-asgi-lifespan
14357 python-asyncpg
14358 python-dirty-equals
14359 python-faker
14360 python-hatchling
14361 python-httpx
14362 python-pytest
14363 python-pytest-asyncio
14364 python-sqlalchemy
14365 python-typing-extensions))
14366 (description
14367 (string-append (package-description python-fastapi-pagination-minimal)
14368 "
14369
14370This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
14371all available optional dependencies supported by mainline
14372@code{fastapi-pagination}."))))
14373
14374(define-public python-fastapi-cli
14375 (package
14376 (name "python-fastapi-cli")
14377 (version "0.0.7")
14378 (source
14379 (origin
14380 (method url-fetch)
14381 (uri (pypi-uri "fastapi_cli" version))
14382 (sha256
14383 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
14384 (build-system pyproject-build-system)
14385 ;; Tests require fastapi, which depends on this package.
14386 (arguments (list #:tests? #false))
14387 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
14388 (native-inputs
14389 (list python-inline-snapshot python-pdm-backend python-pytest))
14390 (home-page "https://pypi.org/project/fastapi-cli/")
14391 (synopsis
14392 "Run and manage FastAPI apps from the command line with FastAPI CLI")
14393 (description
14394 "FastAPI CLI is a command line program fastapi that you can use to serve
14395your FastAPI app, manage your FastAPI project, and more.")
14396 (license license:expat)))
14397
14398(define-public python-pyactiveresource
14399 (package
14400 (name "python-pyactiveresource")
14401 (version "2.2.2")
14402 (source
14403 (origin
14404 (method git-fetch)
14405 (uri (git-reference
14406 (url "https://github.com/Shopify/pyactiveresource")
14407 (commit (string-append "v" version))))
14408 (file-name (git-file-name name version))
14409 (sha256
14410 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
14411 (build-system pyproject-build-system)
14412 ;; XXX: The package is fine, but the tests started failing on [email protected].
14413 ;; The package is not actively maintained, consider removing it once leaf.
14414 (arguments (list #:tests? #f))
14415 (native-inputs
14416 (list python-dateutil python-pytest python-pyyaml python-setuptools))
14417 (propagated-inputs (list python-six))
14418 (home-page "https://github.com/Shopify/pyactiveresource/")
14419 (synopsis "ActiveResource for Python")
14420 (description
14421 "This package provides a Python port of the ActiveResource project.
14422
14423Active Resource attempts to provide a coherent wrapper object-relational
14424mapping for REST web services. It follows the same philosophy as Active
14425Record, in that one of its prime aims is to reduce the amount of code needed
14426to map to these resources. This is made possible by relying on a number of
14427code- and protocol-based conventions that make it easy for Active Resource to
14428infer complex relations and structures.")
14429 (license license:expat)))
14430
14431(define-public python-shopifyapi
14432 (package
14433 (name "python-shopifyapi")
14434 (version "12.7.0")
14435 (source
14436 (origin
14437 (method git-fetch)
14438 (uri (git-reference
14439 (url "https://github.com/Shopify/shopify_python_api")
14440 (commit (string-append "v" version))))
14441 (file-name (git-file-name name version))
14442 (sha256
14443 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
14444 (build-system pyproject-build-system)
14445 (arguments
14446 (list
14447 #:test-flags
14448 #~'("-k"
14449 ;; Disable a failing test.
14450 "not test_raises_if_aud_doesnt_match_api_key")))
14451 (native-inputs (list python-mock python-pytest python-setuptools))
14452 (propagated-inputs (list python-pyactiveresource python-pyjwt
14453 python-pyyaml python-six))
14454 (home-page "https://github.com/Shopify/shopify_python_api")
14455 (synopsis "Shopify API for Python")
14456 (description
14457 "This package provides the Shopify API for Python.
14458
14459The ShopifyAPI library allows Python developers to programmatically access the
14460admin section of stores using an ActiveResource-like interface similar the
14461ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
14462list, create, update, or delete resources (e.g. Order, Product, Collection).")
14463 (license license:expat)))
14464
14465(define-public python-pybadges
14466 (package
14467 (name "python-pybadges")
14468 (version "3.0.1")
14469 (source (origin
14470 (method git-fetch)
14471 (uri (git-reference
14472 (url "https://github.com/google/pybadges")
14473 (commit version)))
14474 (file-name (git-file-name name version))
14475 (sha256
14476 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
14477 (build-system pyproject-build-system)
14478 (arguments
14479 (list
14480 #:test-flags
14481 #~'("-k"
14482 ;; Disable network dependent tests.
14483 "not test_changes and not test_not_image_url and not test_http_url")))
14484 (propagated-inputs (list python-jinja2 python-requests python-setuptools))
14485 (native-inputs (list python-flask
14486 python-fonttools
14487 python-pillow
14488 python-pytest
14489 python-wheel
14490 python-xmldiff))
14491 (home-page "https://github.com/google/pybadges")
14492 (synopsis "Generate Github-style badges on the command-line")
14493 (description
14494 "This package provides @code{python-pybadges}: a library and command-line
14495tool for generating Github-style badges as SVG images.")
14496 (license license:asl2.0)))
14497
14498(define-public python-grid5000
14499 (package
14500 (name "python-grid5000")
14501 (version "1.2.4")
14502 (source (origin
14503 (method git-fetch)
14504 (uri (git-reference
14505 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
14506 (commit (string-append "v" version))))
14507 (file-name (git-file-name name version))
14508 (sha256
14509 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
14510 (build-system pyproject-build-system)
14511 (arguments
14512 (list #:tests? #f)) ; No tests.
14513 (native-inputs (list python-setuptools))
14514 (propagated-inputs (list python-requests python-ipython python-pyyaml))
14515 (home-page "https://pypi.org/project/python-grid5000/")
14516 (synopsis "Grid5000 python client")
14517 (description
14518 "python-grid5000 is a python package wrapping the Grid5000 REST API.
14519You can use it as a library in your python project or you can explore the
14520Grid5000 resources interactively using the embedded shell.")
14521 (license license:gpl3+)))
14522
14523(define-public python-enoslib
14524 (package
14525 (name "python-enoslib")
14526 (version "8.0.1")
14527 (source
14528 (origin
14529 (method git-fetch)
14530 (uri (git-reference
14531 (url "https://gitlab.inria.fr/discovery/enoslib")
14532 (commit (string-append "v" version))))
14533 (file-name (git-file-name name version))
14534 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
14535 (arguments
14536 (list
14537 #:test-flags
14538 #~(list "enoslib/tests/unit"
14539 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
14540 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
14541 #:phases
14542 #~(modify-phases %standard-phases
14543 (add-before 'check 'pre-check
14544 (lambda* (#:key tests? #:allow-other-keys)
14545 (when tests?
14546 ;; Otherwise Ansible fails to create its config directory.
14547 (setenv "HOME" "/tmp"))))
14548 ;; Disable the sanity check, which fails with the following error:
14549 ;;
14550 ;; ContextualVersionConflict(rich 12.4.1
14551 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
14552 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
14553 ;;
14554 ;; The optional jupyter dependency of rich isn't critical for
14555 ;; EnOSlib to work
14556 (delete 'sanity-check))))
14557 (build-system pyproject-build-system)
14558 (native-inputs
14559 (list python-ddt
14560 python-freezegun
14561 python-pytest
14562 python-setuptools
14563 python-wheel))
14564 (propagated-inputs
14565 (list ansible
14566 python-cryptography
14567 python-grid5000
14568 python-jsonschema
14569 python-netaddr
14570 python-packaging
14571 python-requests
14572 python-rich
14573 python-sshtunnel
14574 python-pytz))
14575 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
14576 (synopsis "Deploy distributed testbeds on a variety of platforms")
14577 (description
14578 "EnOSlib is a library to build experimental frameworks on various
14579scientific testbeds. It lets you deploy networks of machines on actual
14580hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
14581 (license license:gpl3+)))
14582
14583(define-public python-pynetbox
14584 (package
14585 (name "python-pynetbox")
14586 (version "7.4.1")
14587 (source (origin
14588 (method url-fetch)
14589 (uri (pypi-uri "pynetbox" version))
14590 (sha256
14591 (base32
14592 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
14593 (build-system pyproject-build-system)
14594 (arguments
14595 (list
14596 #:test-flags
14597 ;; Integration tests depend on docker.
14598 '(list "--ignore=tests/integration")))
14599 (propagated-inputs (list python-packaging python-requests))
14600 (native-inputs
14601 (list python-pytest
14602 python-setuptools
14603 python-setuptools-scm
14604 python-wheel))
14605 (home-page "https://github.com/netbox-community/pynetbox")
14606 (synopsis "NetBox API client library")
14607 (description "Python module to query and edit data stored in a
14608@url{https://netbox.dev,NetBox} instance.")
14609 (license license:asl2.0)))
14610
14611(define-public python-waybackpack
14612 (package
14613 (name "python-waybackpack")
14614 (version "0.6.4")
14615 (source
14616 (origin
14617 (method url-fetch)
14618 (uri (pypi-uri "waybackpack" version))
14619 (sha256
14620 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14621 (build-system pyproject-build-system)
14622 (arguments
14623 (list #:tests? #f)) ; would require network (and SSL certificates)
14624 (propagated-inputs (list python-requests))
14625 (native-inputs (list python-pytest python-setuptools python-wheel))
14626 (home-page "https://github.com/jsvine/waybackpack")
14627 (synopsis
14628 "Download the entire Wayback Machine archive for a given URL")
14629 (description
14630 "This package provides a library and a command-line tool that lets
14631you download the entire Wayback Machine archive for a given URL.")
14632 (license license:expat)))
14633
14634(define-public python-xyzservices
14635 (package
14636 (name "python-xyzservices")
14637 (version "2025.4.0")
14638 (source
14639 (origin
14640 (method url-fetch)
14641 (uri (pypi-uri "xyzservices" version))
14642 (sha256
14643 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14644 (build-system pyproject-build-system)
14645 (arguments
14646 (list
14647 #:test-flags #~(list "-m" "not request")))
14648 (native-inputs
14649 (list python-pytest
14650 python-mercantile
14651 python-requests
14652 python-setuptools
14653 python-setuptools-scm))
14654 (home-page "https://github.com/geopandas/xyzservices")
14655 (synopsis "Source of XYZ tiles providers")
14656 (description "@code{xyzservices} is a lightweight library providing a
14657repository of available XYZ services offering raster basemap tiles. The
14658repository is provided via Python API and as a compressed JSON file.")
14659 (license license:bsd-3)))
14660
14661(define-public s3cmd
14662 (package
14663 (name "s3cmd")
14664 (version "2.4.0")
14665 (source
14666 (origin
14667 (method git-fetch)
14668 (uri (git-reference
14669 (url "https://github.com/s3tools/s3cmd")
14670 (commit (string-append "v" version))))
14671 (file-name (git-file-name name version))
14672 (sha256
14673 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14674 (build-system pyproject-build-system)
14675 (arguments
14676 (list
14677 #:tests? #f ; XXX: Tests require network access.
14678 #:phases
14679 #~(modify-phases %standard-phases
14680 (add-after 'unpack 'hide-wrapping
14681 (lambda _
14682 (substitute* "S3/MultiPart.py"
14683 (("sys\\.argv\\[0\\]")
14684 "\"s3cmd\""))
14685 (substitute* "s3cmd"
14686 (("optparser\\.get_prog_name\\(\\)")
14687 "\"s3cmd\"")))))))
14688 (native-inputs (list python-setuptools))
14689 (inputs (list python-dateutil python-magic))
14690 (home-page "https://s3tools.org/s3cmd")
14691 (synopsis "Command line tool for S3-compatible storage services")
14692 (description
14693 "S3cmd is a command line tool for uploading, retrieving and managing data
14694in storage services that are compatible with the Amazon Simple Storage
14695Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14696GnuPG encryption, and more. It also supports management of Amazon's
14697CloudFront content delivery network.")
14698 (license license:gpl2+)))