projects/guix·blob libreoffice · refs

14787 lines · 533.1 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015-2025 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Christopher Baines <[email protected]>
5;;; Copyright © 2017 Muriithi Frederick Muriuki <[email protected]>
6;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
7;;; Copyright © 2013, 2014, 2015, 2016, 2020, 2023 Andreas Enge <[email protected]>
8;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
9;;; Copyright © 2015-2025 Ricardo Wurmus <[email protected]>
10;;; Copyright © 2017, 2021 Roel Janssen <[email protected]>
11;;; Copyright © 2016, 2017, 2020 Julien Lepiller <[email protected]>
12;;; Copyright © 2016, 2017 Nikita <[email protected]>
13;;; Copyright © 2014, 2017, 2021 Eric Bavier <[email protected]>
14;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
15;;; Copyright © 2015 Cyril Roelandt <[email protected]>
16;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
17;;; Copyright © 2016, 2019, 2022, 2025 Hartmut Goebel <[email protected]>
18;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <[email protected]>
19;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
20;;; Copyright © 2015, 2016 Christine Lemmer-Webber <[email protected]>
21;;; Copyright © 2017 Adriano Peluso <[email protected]>
22;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
23;;; Copyright © 2016 David Craven <[email protected]>
24;;; Copyright © 2017 Oleg Pykhalov <[email protected]>
25;;; Copyright © 2015, 2016 David Thompson <[email protected]>
26;;; Copyright © 2017 Mark Meyer <[email protected]>
27;;; Copyright © 2018 Clément Lassieur <[email protected]>
28;;; Copyright © 2018 Tomáš Čech <[email protected]>
29;;; Copyright © 2018, 2019, 2021, 2024 Nicolas Goaziou <[email protected]>
30;;; Copyright © 2018 Mathieu Othacehe <[email protected]>
31;;; Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
32;;; Copyright © 2018 swedebugia <[email protected]>
33;;; Copyright © 2019 Vagrant Cascadian <[email protected]>
34;;; Copyright © 2019, 2023 Brendan Tildesley <[email protected]>
35;;; Copyright © 2019 Pierre Langlois <[email protected]>
36;;; Copyright © 2019, 2020 Tanguy Le Carrour <[email protected]>
37;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
38;;; Copyright © 2020 Josh Marshall <[email protected]>
39;;; Copyright © 2020 Evan Straw <[email protected]>
40;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
41;;; Copyright © 2020 Holger Peters <[email protected]>
42;;; Copyright © 2020 Noisytoot <[email protected]>
43;;; Copyright © 2020 Edouard Klein <[email protected]>
44;;; Copyright © 2020, 2021, 2022, 2023, 2025 Vinicius Monego <[email protected]>
45;;; Copyright © 2020 Konrad Hinsen <[email protected]>
46;;; Copyright © 2020, 2022, 2024 Giacomo Leidi <[email protected]>
47;;; Copyright © 2020 Raghav Gururajan <[email protected]>
48;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
49;;; Copyright © 2021 Greg Hogan <[email protected]>
50;;; Copyright © 2021 Maxime Devos <[email protected]>
51;;; Copyright © 2021 Pradana Aumars <[email protected]>
52;;; Copyright © 2021, 2022, 2024, 2026 Arun Isaac <[email protected]>
53;;; Copyright © 2021-2022, 2024-2025 jgart <[email protected]>
54;;; Copyright © 2021 Alice Brenon <[email protected]>
55;;; Copyright © 2021 Mekeor Melire <[email protected]>
56;;; Copyright © 2022 John Kehayias <[email protected]>
57;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email protected]>
58;;; Copyright © 2022, 2023, 2025 Felix Gruber <[email protected]>
59;;; Copyright © 2022 Peter Polidoro <[email protected]>
60;;; Copyright © 2022 Antero Mejr <[email protected]>
61;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
62;;; Copyright © 2022, 2025 Nicolas Graves <[email protected]>
63;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
64;;; Copyright © 2022 msimonin <[email protected]>
65;;; Copyright © 2022 Michael Rohleder <[email protected]>
66;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
67;;; Copyright © 2023 dan <[email protected]>
68;;; Copyright © 2023 John Kehayias <[email protected]>
69;;; Copyright © 2023 Juliana Sims <[email protected]>
70;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
71;;; Copyright © 2024 Fabio Natali <[email protected]>
72;;; Copyright © 2024 Steve George <[email protected]>
73;;; Copyright © 2024 Troy Figiel <[email protected]>
74;;; Copyright © 2024, 2025 Sharlatan Hellseher <[email protected]>
75;;; Copyright © 2024 normally_js <[email protected]>
76;;; Copyright © 2024 Markku Korkeala <[email protected]>
77;;; Copyright © 2024 Nguyễn Gia Phong <[email protected]>
78;;; Copyright © 2024 Zheng Junjie <[email protected]>
79;;; Copyright © 2024 Spencer King <[email protected]>
80;;; Copyright © 2024 Attila Lendvai <[email protected]>
81;;; Copyright © 2025 Daniel Ziltener <[email protected]>
82;;; Copyright © 2025 gemmaro <[email protected]>
83;;; Copyright © 2025 Sergio Pastor Pérez <[email protected]>
84;;; Copyright © 2025 Jake Forster <[email protected]>
85;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
86;;; Copyright © 2025 Hugo Buddelmeijer <[email protected]>
87;;; Copyright © 2025-2026 Artur Wroblewski <[email protected]>
88;;; Copyright © 2025, 2026 Allan Adair <[email protected]>
89;;; Copyright © 2025 Aaron Covrig <[email protected]>
90;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
91;;; Copyright © 2026 mst <[email protected]>
92;;;
93;;; This file is part of GNU Guix.
94;;;
95;;; GNU Guix is free software; you can redistribute it and/or modify it
96;;; under the terms of the GNU General Public License as published by
97;;; the Free Software Foundation; either version 3 of the License, or (at
98;;; your option) any later version.
99;;;
100;;; GNU Guix is distributed in the hope that it will be useful, but
101;;; WITHOUT ANY WARRANTY; without even the implied warranty of
102;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
103;;; GNU General Public License for more details.
104;;;
105;;; You should have received a copy of the GNU General Public License
106;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
107
108(define-module (gnu packages python-web)
109 #:use-module (gnu packages admin)
110 #:use-module (gnu packages base)
111 #:use-module (gnu packages bash)
112 #:use-module (gnu packages check)
113 #:use-module (gnu packages cmake)
114 #:use-module (gnu packages compression)
115 #:use-module (gnu packages curl)
116 #:use-module (gnu packages databases)
117 #:use-module (gnu packages django)
118 #:use-module (gnu packages dns)
119 #:use-module (gnu packages freedesktop)
120 #:use-module (gnu packages glib)
121 #:use-module (gnu packages gnupg)
122 #:use-module (gnu packages graphviz)
123 #:use-module (gnu packages groff)
124 #:use-module (gnu packages iso-codes)
125 #:use-module (gnu packages libevent)
126 #:use-module (gnu packages libffi)
127 #:use-module (gnu packages libidn)
128 #:use-module (gnu packages linux)
129 #:use-module (gnu packages lsof)
130 #:use-module (gnu packages node)
131 #:use-module (gnu packages nss)
132 #:use-module (gnu packages openstack)
133 #:use-module (gnu packages pcre)
134 #:use-module (gnu packages pkg-config)
135 #:use-module (gnu packages protobuf)
136 #:use-module (gnu packages python)
137 #:use-module (gnu packages python-build)
138 #:use-module (gnu packages python-check)
139 #:use-module (gnu packages python-compression)
140 #:use-module (gnu packages python-crypto)
141 #:use-module (gnu packages python-science)
142 #:use-module (gnu packages python-xyz)
143 #:use-module (gnu packages qt)
144 #:use-module (gnu packages rdf)
145 #:use-module (gnu packages rpc)
146 #:use-module (gnu packages rust)
147 #:use-module (gnu packages rust-apps)
148 #:use-module (gnu packages serialization)
149 #:use-module (gnu packages sphinx)
150 #:use-module (gnu packages texinfo)
151 #:use-module (gnu packages time)
152 #:use-module (gnu packages tls)
153 #:use-module (gnu packages version-control)
154 #:use-module (gnu packages web)
155 #:use-module (gnu packages xml)
156 #:use-module (gnu packages)
157 #:use-module (guix build-system cargo)
158 #:use-module (guix build-system copy)
159 #:use-module (guix build-system pyproject)
160 #:use-module (guix deprecation)
161 #:use-module (guix download)
162 #:use-module (guix gexp)
163 #:use-module (guix git-download)
164 #:use-module ((guix licenses) #:prefix license:)
165 #:use-module (guix packages)
166 #:use-module (guix utils)
167 #:use-module (srfi srfi-1))
168
169(define-public python-aioboto3
170 (package
171 (name "python-aioboto3")
172 (version "15.5.0")
173 (source
174 (origin
175 (method git-fetch)
176 (uri (git-reference
177 (url "https://github.com/terricain/aioboto3")
178 (commit (string-append "v" version))))
179 (file-name (git-file-name name version))
180 (sha256
181 (base32 "05644x17f9sl8mv9bp8l0rjcmw5x2ssyd5z1v3xmgcspk5qs6qn8"))))
182 (build-system pyproject-build-system)
183 (arguments
184 (list
185 #:tests? #f ;XXX: all tests faild
186 #:phases
187 #~(modify-phases %standard-phases
188 (add-after 'unpack 'relax-requirements
189 (lambda _
190 (substitute* "pyproject.toml"
191 (("aiobotocore\\[boto3\\]==2.25.1")
192 "aiobotocore >= 2.25.1")))))))
193 (native-inputs
194 (list python-setuptools
195 python-setuptools-scm))
196 (propagated-inputs
197 (list python-aiobotocore
198 python-aiofiles
199 ;; [optional]
200 python-boto3
201 python-cryptography))
202 (home-page "https://github.com/terricain/aioboto3")
203 (synopsis "Async boto3 wrapper")
204 (description
205 "This package is mostly just a wrapper combining the great work of boto3
206and aiobotocore.")
207 (license license:asl2.0)))
208
209(define-public python-aiocoap
210 (package
211 (name "python-aiocoap")
212 (version "0.4.14")
213 (source
214 (origin
215 (method git-fetch) ; tests miss data and module files in PyPI release
216 (uri (git-reference
217 (url "https://github.com/chrysn/aiocoap")
218 (commit version)))
219 (file-name (git-file-name name version))
220 (sha256
221 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
222 (build-system pyproject-build-system)
223 (arguments
224 (list
225 #:test-flags
226 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
227 ;; 8683, 0, 0): address already in use
228 #~(list "--ignore=tests/test_server.py"
229 "-k" (string-join
230 ;; TypeError: can only concatenate str (not "NoneType") to
231 ;; str
232 (list "not test_options"
233 "test_uri_parser"
234 "test_help" ; returned non-zero exit status 1.
235 "test_routing" ; address already in use
236 "test_tls")
237 " and not "))))
238 (native-inputs
239 (list openssl ;for tests/test_tls.py
240 python-pytest
241 python-setuptools
242 python-wheel))
243 (propagated-inputs
244 (list ;; python-cbor-diag
245 python-cbor2
246 python-cryptography
247 ;; python-dtlssocket
248 python-filelock
249 ;; python-ge25519
250 python-pygments
251 python-termcolor
252 python-websockets))
253 (home-page "https://github.com/chrysn/aiocoap")
254 (synopsis "Python CoAP library")
255 (description
256 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
257Constrained Application Protocol}, http://coap.space/}. It facilitates
258writing applications that talk to network enabled embedded
259@acronym{IoT,Internet of Things} devices.")
260 (license license:expat)))
261
262(define-public python-alpaca-py
263 (package
264 (name "python-alpaca-py")
265 (version "0.43.2")
266 (source
267 (origin
268 (method git-fetch)
269 (uri (git-reference
270 (url "https://github.com/alpacahq/alpaca-py")
271 (commit (string-append "v" version))))
272 (file-name (git-file-name name version))
273 (sha256
274 (base32 "0majn27r2s2z5nbqvkpmw04kswhj9xkmvmm0rkvb3fga9lwwivlb"))))
275 (build-system pyproject-build-system)
276 (native-inputs
277 (list python-poetry-core
278 python-poetry-dynamic-versioning
279 python-pytest
280 python-pytest-asyncio
281 python-requests-mock))
282 (propagated-inputs
283 (list python-msgpack
284 python-pandas
285 python-pydantic
286 python-requests
287 python-sseclient-py
288 python-websockets))
289 (home-page "https://alpaca.markets/sdks/python/")
290 (synopsis "Alpaca API official Python SDK")
291 (description
292 "Alpaca-py provides an interface to REST, WebSocket and SSE endpoints
293that allow interaction with the @url{https://alpaca.markets/, Alpaca} API.")
294 (license license:asl2.0)))
295
296(define-public python-anaconda-client
297 (package
298 (name "python-anaconda-client")
299 (version "1.13.1")
300 (source
301 (origin
302 (method git-fetch)
303 (uri (git-reference
304 (url "https://github.com/Anaconda-Platform/anaconda-client")
305 (commit version)))
306 (file-name (git-file-name name version))
307 (sha256
308 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
309 (build-system pyproject-build-system)
310 (arguments
311 (list
312 #:test-flags
313 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
314 "--deselect=tests/utils/test_conda.py::test_conda_vars")
315 #:phases
316 #~(modify-phases %standard-phases
317 (add-after 'unpack 'fix-pytest-config
318 (lambda _
319 (substitute* "setup.cfg"
320 (("addopts=.*") "addopts=\n")))))))
321 (native-inputs
322 (list python-freezegun
323 python-pytest
324 python-setuptools))
325 (propagated-inputs
326 (list python-anaconda-cli-base
327 python-conda-package-handling
328 python-conda-package-streaming
329 python-dateutil
330 python-defusedxml
331 python-nbformat
332 python-pillow
333 python-platformdirs
334 python-pytz
335 python-pyyaml
336 python-requests
337 python-requests-toolbelt
338 python-setuptools
339 python-tqdm
340 python-urllib3))
341 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
342 (synopsis "Anaconda Cloud command line client library")
343 (description
344 "Anaconda Cloud command line client library provides an interface to
345Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
346environments.")
347 (license license:bsd-3)))
348
349(define-public python-apprise
350 (package
351 (name "python-apprise")
352 (version "1.9.4")
353 (source
354 (origin
355 (method url-fetch)
356 (uri (pypi-uri "apprise" version))
357 (sha256
358 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
359 (build-system pyproject-build-system)
360 (arguments
361 (list
362 ;; These tests used to be ran with --numprocesses, but that seems to have
363 ;; made them non-deterministic.
364 #:test-flags
365 #~(list "--ignore=tests/test_plugin_macosx.py"
366 "-k" "not test_plugin_glib_send_raises_generic")))
367 (native-inputs
368 (list python-babel
369 python-pytest
370 python-pytest-mock
371 python-setuptools))
372 (propagated-inputs
373 (list python-certifi
374 python-click
375 python-markdown
376 python-pygobject
377 python-pyyaml
378 python-requests
379 python-requests-oauthlib))
380 (home-page "https://github.com/caronc/apprise")
381 (synopsis "Push notification library")
382 (description
383 "Apprise is a Python library that allows sending push notifications to a
384broad range of notification services, such as Telegram, Discord, Slack, Amazon
385SNS, Gotify, etc.")
386 (license license:bsd-2)))
387
388(define-public python-arxiv
389 (package
390 (name "python-arxiv")
391 (version "3.0.0")
392 (source
393 (origin
394 (method git-fetch)
395 (uri (git-reference
396 (url "https://github.com/lukasschwab/arxiv.py")
397 (commit version)))
398 (file-name (git-file-name name version))
399 (sha256
400 (base32 "18kn8q1lbql1w8jm5clla6za2zpijhs5hi2kpz41x5skps96lrd3"))))
401 (build-system pyproject-build-system)
402 (arguments
403 (list #:test-flags
404 #~(list "-k" ;to skip intenet connection tests
405 (string-append "not (TestAPIBugs "
406 "or TestClient "
407 "or TestResult "
408 "or TestDownload)"))))
409 (native-inputs
410 (list python-pytest
411 python-hatch-vcs
412 python-hatchling))
413 (propagated-inputs
414 (list python-feedparser
415 python-requests))
416 (home-page "https://github.com/lukasschwab/arxiv.py")
417 (synopsis "Python wrapper for the arXiv API")
418 (description "Python wrapper for the @code{arXiv} API.")
419 (license license:expat)))
420
421(define-public python-asyncer
422 (package
423 (name "python-asyncer")
424 (version "0.0.17")
425 (source
426 (origin
427 (method git-fetch)
428 (uri (git-reference
429 (url "https://github.com/fastapi/asyncer")
430 (commit version)))
431 (file-name (git-file-name name version))
432 (sha256
433 (base32 "1f4ids6sxwmz89yj98z0qc4qvfkklh0psbxv5px39k807g9aq7p2"))))
434 (build-system pyproject-build-system)
435 (native-inputs
436 (list python-pdm-backend
437 python-pytest))
438 (propagated-inputs
439 (list python-anyio
440 python-sniffio
441 python-typing-extensions))
442 (home-page "https://asyncer.tiangolo.com/")
443 (synopsis "Asyncer, async and await, focused on developer experience")
444 (description
445 "Asyncer is a small library built on top of
446@url{https://anyio.readthedocs.io/en/stable/, AnyIO}.
447
448The main goal of Asyncer is to improve developer experience by providing
449better support for autocompletion and inline errors in the editor, and more
450certainty that the code is bug-free by providing better support for type
451checking tools like mypy.")
452 (license license:expat)))
453
454(define-public python-asyncudp
455 (package
456 (name "python-asyncudp")
457 (version "0.11.0")
458 (source
459 (origin
460 (method git-fetch)
461 (uri (git-reference
462 (url "https://github.com/eerimoq/asyncudp")
463 (commit version)))
464 (file-name (git-file-name name version))
465 (sha256
466 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
467 (build-system pyproject-build-system)
468 (native-inputs (list python-pytest python-setuptools))
469 (home-page (git-reference-url (origin-uri source)))
470 (synopsis "High level UDP sockets for asyncio")
471 (description
472 "This package provides a Python library offering high level UDP sockets
473for asyncio. Import it alongside asyncio and use its API to send and receive
474UDP packets.")
475 (license license:expat)))
476
477(define-public python-behave-web-api
478 (package
479 (name "python-behave-web-api")
480 (version "2.3.0")
481 (source
482 (origin
483 (method git-fetch)
484 (uri (git-reference
485 (url "https://github.com/jefersondaniel/behave-web-api")
486 (commit (string-append "v" version))))
487 (file-name (git-file-name name version))
488 (sha256
489 (base32 "1r8yx8gb5m599cpdqfvk6z9ax3qj26fpvczdr84z8jya0dxfch4p"))))
490 (build-system pyproject-build-system)
491 (native-inputs
492 (list python-pytest
493 python-setuptools))
494 (propagated-inputs
495 (list behave
496 python-requests))
497 (home-page "https://github.com/jefersondaniel/behave-web-api")
498 (synopsis "Provides testing for JSON APIs with Behave for Python")
499 (description "This package provides testing utility modules for testing
500JSON APIs with Behave.")
501 (license license:expat)))
502
503(define-public python-blacksheep
504 (package
505 (name "python-blacksheep")
506 (version "2.6.3")
507 (source
508 (origin
509 (method git-fetch)
510 (uri (git-reference
511 (url "https://github.com/Neoteroi/BlackSheep")
512 (commit (string-append "v" version))))
513 (file-name (git-file-name name version))
514 (sha256
515 (base32 "1k6yqsqnh6nnhi8z5v2yqpxs7qsk35zwd7gcr7cdh825f2vrl7js"))))
516 (build-system pyproject-build-system)
517 (arguments
518 (list
519 ;; tests: 1821 passed
520 ;;
521 ;; Run all unit tests, but do not run integration tests from `itests`
522 ;; directory.
523 #:test-flags
524 #~(list "tests")
525 #:phases
526 #~(modify-phases %standard-phases
527 (add-before 'build 'cythonize
528 (lambda _
529 (with-directory-excursion "blacksheep"
530 (for-each (lambda (file)
531 (invoke "cython" "-3" file "-I" "."))
532 (find-files "." ".*\\.pyx$"))))))))
533 (native-inputs
534 (list nss-certs-for-test
535 python-cython
536 python-defusedxml
537 python-flask
538 python-jinja2
539 python-pydantic
540 python-pyjwt
541 python-pytest
542 python-pytest-asyncio
543 python-setuptools
544 python-starlette))
545 (propagated-inputs
546 (list python-certifi
547 python-essentials
548 python-essentials-openapi
549 python-guardpost
550 python-httptools
551 python-rodi
552 python-itsdangerous))
553 (home-page "https://github.com/Neoteroi/BlackSheep")
554 (synopsis "Asynchronous framework to build event based web applications")
555 (description
556 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
557
558The framework offers
559@itemize
560@item A rich code API, based on dependency injection and inspired by Flask and
561ASP.NET Core.
562@item A typing-friendly codebase, which enables a comfortable development
563experience thanks to hints when coding with IDEs.
564@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
565and JSON.
566@item A cross-platform framework, using the most modern versions of Python.
567@item Good performance.
568@end itemize")
569 (license license:expat)))
570
571(define-public python-bleach
572 (package
573 (name "python-bleach")
574 (version "6.3.0")
575 (source
576 (origin
577 (method git-fetch)
578 (uri (git-reference
579 (url "https://github.com/mozilla/bleach")
580 (commit (string-append "v" version))))
581 (file-name (git-file-name name version))
582 (sha256
583 (base32 "02abk9ixn010sqpbdsd7nxms0gv4prwv6d3nplb8giq85lpn1kkb"))
584 (snippet
585 #~(begin
586 (use-modules (guix build utils))
587 (substitute* (find-files "." "\\.py$")
588 (("bleach\\._vendor\\.html5lib") "html5lib"))
589 (delete-file-recursively "bleach/_vendor/html5lib")))))
590 (build-system pyproject-build-system)
591 (arguments
592 (list
593 ;; tests: 448 passed, 1 deselected, 3 xfailed
594 #:test-flags
595 #~(list (string-append "--deselect=tests/test_clean.py::"
596 "test_self_closing_tags_self_close[wbr]"))
597 #:phases
598 #~(modify-phases %standard-phases
599 (add-after 'unpack 'relax-requirements
600 (lambda _
601 ;; "tinycss2>=1.1.0,<1.5"
602 ;; The 'sanity-check of python-nbclassic fails without this.
603 (substitute* "setup.py"
604 (("\"tinycss2.*") "")))))))
605 (native-inputs
606 (list python-pytest
607 python-setuptools))
608 (propagated-inputs
609 (list python-html5lib
610 python-tinycss2
611 python-webencodings))
612 (home-page "https://github.com/mozilla/bleach")
613 (synopsis "Whitelist-based HTML-sanitizing tool")
614 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
615 (license license:asl2.0)))
616
617(define-public python-cloudpathlib
618 (package
619 (name "python-cloudpathlib")
620 (version "0.23.0")
621 (source
622 (origin
623 (method git-fetch)
624 (uri (git-reference
625 (url "https://github.com/drivendataorg/cloudpathlib")
626 (commit (string-append "v" version))))
627 (file-name (git-file-name name version))
628 (sha256
629 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
630 (build-system pyproject-build-system)
631 (arguments
632 (list
633 ;; tests: 977 passed, 15 skipped, 8642 warnings
634 #:test-flags
635 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
636 ;; TODO: Package azure-identity (required for this file)
637 "--ignore=tests/test_azure_specific.py"
638 ;; TypeError: Retry.__init__() got an unexpected keyword
639 ;; argument 'timeout'
640 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")))
641 (native-inputs
642 (list ;; python-azure-identity
643 python-dotenv
644 python-flit-core
645 python-psutil
646 python-pydantic
647 python-pytest
648 python-pytest-cases
649 python-pytest-reportlog
650 python-pytest-xdist
651 python-shortuuid
652 python-tenacity))
653 (propagated-inputs
654 (list python-azure-storage-blob
655 python-azure-storage-file-datalake
656 python-boto3
657 python-google-cloud-storage
658 python-typing-extensions))
659 (home-page "https://github.com/drivendataorg/cloudpathlib")
660 (synopsis "Pathlib-style classes for cloud storage services")
661 (description
662 "This package provides a Python library with classes that mimic
663@code{pathlib.Path}'s interface for URIs from different cloud storage
664services.")
665 (license license:expat)))
666
667(define-public python-conda-package-handling
668 (package
669 (name "python-conda-package-handling")
670 (version "2.4.0")
671 (source
672 (origin
673 (method git-fetch)
674 (uri (git-reference
675 (url "https://github.com/conda/conda-package-handling/")
676 (commit version)))
677 (file-name (git-file-name name version))
678 (sha256
679 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
680 (build-system pyproject-build-system)
681 (native-inputs
682 (list python-bottle
683 python-mock
684 python-pytest-8
685 python-pytest-mock
686 python-setuptools))
687 (propagated-inputs
688 (list python-conda-package-streaming))
689 (home-page "https://conda.io")
690 (synopsis "Create and extract conda packages of various formats")
691 (description
692 "This library is an abstraction of Conda package handling and a tool for
693extracting, creating, and converting between formats.")
694 (license license:bsd-3)))
695
696(define-public python-conda-package-streaming
697 (package
698 (name "python-conda-package-streaming")
699 (version "0.12.0")
700 (source
701 (origin
702 (method url-fetch)
703 (uri (pypi-uri "conda_package_streaming" version))
704 (sha256
705 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
706 (build-system pyproject-build-system)
707 (arguments
708 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
709 (list #:tests? #f))
710 (native-inputs
711 (list python-flit-core))
712 (propagated-inputs
713 (list python-requests
714 python-zstandard))
715 (home-page "https://conda.github.io/conda-package-streaming/")
716 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
717 (description
718 "This package provides an efficient library to read from new and old format
719@code{.conda} and @code{.tar.bz2} conda packages.")
720 (license license:bsd-3)))
721
722(define-public python-dependency-groups
723 (package
724 (name "python-dependency-groups")
725 (version "1.3.1")
726 (source
727 (origin
728 (method url-fetch)
729 (uri (pypi-uri "dependency_groups" version))
730 (sha256
731 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
732 (build-system pyproject-build-system)
733 (propagated-inputs (list python-packaging python-tomli))
734 (native-inputs (list python-flit-core python-pytest))
735 (home-page "https://dependency-groups.readthedocs.io/")
736 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
737 (description
738 "This package provides a library which is able to parse dependency groups (PEP
739735), following includes, and provide that data as output.")
740 (license license:expat)))
741
742(define-public python-devpi-common
743 (package
744 (name "python-devpi-common")
745 (version "4.0.4")
746 (source
747 (origin
748 (method url-fetch)
749 (uri (pypi-uri "devpi_common" version))
750 (sha256
751 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
752 (build-system pyproject-build-system)
753 (propagated-inputs (list python-lazy python-packaging-legacy
754 python-requests))
755 (native-inputs
756 (list python-pytest
757 python-setuptools
758 python-wheel))
759 (home-page "https://github.com/devpi/devpi")
760 (synopsis
761 "Utilities jointly used by devpi-server, devpi-client and others")
762 (description
763 "This package provides utilities jointly used by devpi-server,
764devpi-client and others.")
765 (license license:expat)))
766
767(define-public python-devpi-client
768 (package
769 (name "python-devpi-client")
770 (version "7.2.0")
771 (source
772 (origin
773 (method url-fetch)
774 (uri (pypi-uri "devpi-client" version))
775 (sha256
776 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
777 (build-system pyproject-build-system)
778 (arguments
779 (list
780 #:test-flags
781 ;; This wants to use pip install
782 '(list "--ignore=testing/test_upload.py"
783 ;; These complain about finding distutils. It's not my fault,
784 ;; mate, setuptools is right there, but you won't pick it!
785 "--ignore=testing/test_list_remove.py"
786 "--ignore=testing/test_main.py"
787 "--ignore=testing/test_install.py"
788 "--ignore=testing/test_functional.py"
789 "--ignore=testing/test_test.py")
790 #:phases
791 '(modify-phases %standard-phases
792 (add-after 'unpack 'patch-tests
793 (lambda _
794 ;; Do not replace the directory name of the store item.
795 (substitute* "testing/conftest.py"
796 (("\"devpi-server\", \"devpi-init\"")
797 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
798 (add-before 'check 'set-HOME
799 ;; Some tests need this
800 (lambda _ (setenv "HOME" "/tmp"))))))
801 (propagated-inputs (list python-pypa-build
802 python-check-manifest
803 python-colorama
804 python-devpi-common
805 python-iniconfig
806 python-pkginfo
807 python-platformdirs
808 python-pluggy
809 python-pypitoken
810 python-tomli))
811 (native-inputs
812 (list python-devpi-server
813 python-pytest
814 python-setuptools
815 python-virtualenv))
816 (home-page "https://github.com/devpi/devpi")
817 (synopsis "Devpi upload/install/... commands for Python developers")
818 (description
819 "The devpi command line tool is typically used in conjunction with
820devpi-server. It allows uploading, testing and installing packages from devpi
821indexes.")
822 (license license:expat)))
823
824(define-public python-devpi-process
825 (package
826 (name "python-devpi-process")
827 (version "1.0.2")
828 (source
829 (origin
830 (method url-fetch)
831 (uri (pypi-uri "devpi_process" version))
832 (sha256
833 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
834 (build-system pyproject-build-system)
835 (arguments
836 (list
837 #:phases
838 '(modify-phases %standard-phases
839 (add-after 'unpack 'relax-requirements
840 (lambda _
841 ;; Our package is too old, sorry.
842 (substitute* "pyproject.toml"
843 (("typing-extensions>=4.12.2")
844 "typing-extensions>=4.10.0"))))
845 (add-after 'unpack 'patch-tool-locations
846 (lambda* (#:key inputs #:allow-other-keys)
847 (substitute* "src/devpi_process/__init__.py"
848 (("_exe\\(\"devpi-init\"\\)")
849 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
850 (("_exe\\(\"devpi-server\"\\)")
851 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
852 (("_exe\\(\"devpi\"\\)")
853 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
854 (propagated-inputs (list python-devpi-client python-devpi-server
855 python-typing-extensions))
856 (native-inputs
857 (list nss-certs-for-test
858 python-hatchling
859 python-hatch-vcs
860 python-httpx
861 python-pytest))
862 (home-page "https://github.com/devpi/devpi")
863 (synopsis "API to create and use a devpi server process")
864 (description
865 "This package provides a programmatic API to create and use a devpi
866server process.")
867 (license license:expat)))
868
869(define-public python-devpi-server
870 (package
871 (name "python-devpi-server")
872 (version "6.17.0")
873 (source
874 (origin
875 (method url-fetch)
876 (uri (pypi-uri "devpi_server" version))
877 (sha256
878 (base32 "13lybrw8j6zjxwvx6sk7bw6854hd2m18s1xcvl0q100j4n06p6ml"))))
879 (build-system pyproject-build-system)
880 (arguments
881 (list
882 #:test-flags
883 ;; These all fail with: "module 'py' has no attribute 'io'"
884 #~(list "--ignore=test_devpi_server/test_importexport.py"
885 "--ignore=test_devpi_server/test_main.py"
886 "--ignore=test_devpi_server/test_genconfig.py")
887 #:phases
888 #~(modify-phases %standard-phases
889 (add-after 'unpack 'relax-requirements
890 (lambda _
891 (substitute* "pyproject.toml"
892 ;; It straggles to check argon2 in passlib on any versions
893 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
894 ;; such extra feature 'argon2'",).
895 (("passlib\\[argon2\\]") "passlib")))))))
896 (propagated-inputs (list python-argon2-cffi
897 python-attrs
898 python-defusedxml
899 python-devpi-common
900 python-httpx
901 python-itsdangerous
902 python-lazy
903 python-legacy-cgi
904 python-passlib
905 python-platformdirs
906 python-pluggy
907 python-py
908 python-pyramid
909 python-repoze-lru
910 python-ruamel.yaml-0.16 ;FIXME: rename
911 python-strictyaml
912 python-waitress))
913 (native-inputs
914 (list python-execnet
915 python-pytest
916 python-pytest-asyncio
917 python-pytest-timeout
918 python-setuptools
919 python-webtest))
920 (home-page "https://devpi.net")
921 (synopsis "Pypi.org caching server")
922 (description "This package implements a reliable private and pypi.org
923caching server.")
924 (license license:expat)))
925
926(define-public python-dicomweb-client
927 (package
928 (name "python-dicomweb-client")
929 (version "0.60.0")
930 (source
931 (origin
932 (method git-fetch)
933 (uri (git-reference
934 (url "https://github.com/ImagingDataCommons/dicomweb-client")
935 (commit (string-append "v" version))))
936 (file-name (git-file-name name version))
937 (sha256
938 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
939 (build-system pyproject-build-system)
940 (arguments
941 (list
942 #:phases
943 #~(modify-phases %standard-phases
944 (add-after 'unpack 'remove-dynamic-versioning
945 (lambda _
946 (substitute* "pyproject.toml"
947 ;; Dynamic versioning via 'uv-dynamic-versioning' is
948 ;; not suitable for Guix.
949 (("dynamic = \\[\"version\"\\]")
950 (string-append "version = \""
951 #$version "\""))))))))
952 (native-inputs
953 (list python-hatchling
954 python-pytest
955 python-pytest-localserver))
956 (propagated-inputs
957 (list python-numpy
958 python-pillow
959 python-pydicom
960 python-requests
961 python-retrying))
962 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
963 (synopsis "Python client for DICOMweb RESTful services")
964 (description
965 "@code{dicomweb_client} provides client interfaces for DICOMweb RESTful
966services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
967DICOM objects over the web, respectively.")
968 (license license:expat)))
969
970(define-public python-dnslib
971 (package
972 (name "python-dnslib")
973 (version "0.9.26")
974 (source
975 (origin
976 (method git-fetch)
977 (uri (git-reference
978 (url "https://github.com/paulc/dnslib")
979 (commit version)))
980 (file-name (git-file-name name version))
981 (sha256
982 (base32 "1x1l727qx6x0kw7yhzhxhbm40wgrh367dr3y0vaix0wrhi30qsyk"))))
983 (build-system pyproject-build-system)
984 (arguments
985 (list
986 #:phases
987 #~(modify-phases %standard-phases
988 (replace 'check
989 (lambda* (#:key tests? #:allow-other-keys)
990 (when tests?
991 (invoke "./run_tests.sh")))))))
992 (native-inputs
993 (list python-setuptools))
994 (home-page "https://github.com/paulc/dnslib")
995 (synopsis "Library to encode/decode DNS wire-format packets")
996 (description
997 "This package provides a simple Python library to encode/decode DNS
998wire-format packets.")
999 (license license:bsd-3)))
1000
1001(define-public python-docusign-esign
1002 (package
1003 (name "python-docusign-esign")
1004 (version "5.0.0")
1005 (source
1006 (origin
1007 (method url-fetch)
1008 (uri (pypi-uri "docusign-esign" version))
1009 (sha256
1010 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
1011 (build-system pyproject-build-system)
1012 ;; Testing requires undocumented setup changes with network access to
1013 ;; <demo.docusign.net>, and so testing is disabled here.
1014 (arguments `(#:tests? #f))
1015 (native-inputs
1016 (list python-setuptools
1017 python-wheel))
1018 (propagated-inputs
1019 (list python-certifi
1020 python-dateutil
1021 python-urllib3
1022 python-pyjwt
1023 python-cryptography))
1024 (home-page "https://developers.docusign.com/")
1025 (synopsis "DocuSign Python Client")
1026 (description
1027 "The Official DocuSign Python Client Library used to interact with the
1028eSign REST API. Send, sign, and approve documents using this client.")
1029 (license license:expat)))
1030
1031(define-public python-domain-connect
1032 (package
1033 (name "python-domain-connect")
1034 (version "0.0.11")
1035 (source
1036 (origin
1037 (method git-fetch) ;no tests in PyPI archive
1038 (uri (git-reference
1039 (url "https://github.com/Domain-Connect/domainconnect_python")
1040 (commit (string-append "v" version))))
1041 (file-name (git-file-name name version))
1042 (sha256
1043 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
1044 (build-system pyproject-build-system)
1045 (arguments
1046 (list
1047 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
1048 ;; present in container.
1049 #:tests? #f
1050 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
1051 (native-inputs
1052 (list python-setuptools))
1053 (propagated-inputs
1054 (list python-cryptography
1055 python-dnspython
1056 python-future
1057 python-publicsuffixlist))
1058 (home-page "https://github.com/Domain-Connect/domainconnect_python")
1059 (synopsis "Client library for Domain Connect protocol")
1060 (description
1061 "This package provides a Service Provider functionality in both Sync and
1062Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
1063 (license license:expat)))
1064
1065(define-public python-domain-connect-dyndns
1066 (package
1067 (name "python-domain-connect-dyndns")
1068 (version "0.0.9")
1069 (source
1070 (origin
1071 (method url-fetch)
1072 (uri (pypi-uri "domain-connect-dyndns" version))
1073 (sha256
1074 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
1075 (build-system pyproject-build-system)
1076 (arguments
1077 (list
1078 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
1079 ;; present in container.
1080 #:tests? #f
1081 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
1082 (native-inputs
1083 (list python-setuptools
1084 python-wheel))
1085 (propagated-inputs
1086 (list python-dnspython
1087 python-domain-connect
1088 python-requests
1089 python-validators))
1090 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
1091 (synopsis "Domain Connect Dynamic DNS in Python")
1092 ;; Project lacks meaningful description in README, see
1093 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
1094 (description
1095 "Python client library for Dynamic DNS using
1096@url{https://www.domainconnect.org/, Domain Connect} protocol.")
1097 (license license:expat)))
1098
1099(define-public python-dominate
1100 (package
1101 (name "python-dominate")
1102 (version "2.9.1")
1103 (source
1104 (origin
1105 (method git-fetch)
1106 (uri (git-reference
1107 (url "https://github.com/Knio/dominate")
1108 (commit version)))
1109 (file-name (git-file-name name version))
1110 (sha256
1111 (base32 "0kv5ly8w2026pwvgamfjxav1g58wmgim30nr9w9qfwcipfjxwn5c"))))
1112 (build-system pyproject-build-system)
1113 (native-inputs
1114 (list python-pytest
1115 python-setuptools))
1116 (home-page "https://github.com/Knio/dominate")
1117 (synopsis "Python library for creating and manipulating HTML documents")
1118 (description
1119 "Dominate is a Python library for creating and manipulating HTML
1120documents using an elegant DOM API.")
1121 (license license:lgpl3+)))
1122
1123(define-public python-dropbox
1124 (package
1125 (name "python-dropbox")
1126 (version "12.0.2")
1127 (source
1128 (origin
1129 (method git-fetch) ; no tests in PyPI release
1130 (uri (git-reference
1131 (url "https://github.com/dropbox/dropbox-sdk-python")
1132 (commit (string-append "v" version))))
1133 (file-name (git-file-name name version))
1134 (sha256
1135 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
1136 (build-system pyproject-build-system)
1137 (arguments
1138 (list
1139 #:test-flags
1140 #~(list "-k" (string-join
1141 ;; Network access is required.
1142 (list "not test_bad_auth"
1143 "test_app_auth"
1144 "test_bad_pins"
1145 "test_bad_pins_session"
1146 "test_downscope"
1147 "test_multi_auth"
1148 "test_path_root"
1149 "test_path_root_err"
1150 "test_refresh"
1151 "test_rpc"
1152 "test_team"
1153 "test_upload_download"
1154 "test_versioned_route")
1155 " and not "))
1156 #:phases
1157 #~(modify-phases %standard-phases
1158 (add-after 'unpack 'relax-requirements
1159 (lambda _
1160 (substitute* "setup.py"
1161 ;; 'stone>=2,<3.3.3',
1162 ((">=2,<3.3.3") ">=2,<3.4.0"))))
1163 (add-before 'check 'pre-check
1164 (lambda _
1165 ;; Otherwise tests setup erroring.
1166 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
1167 (setenv "LEGACY_USER_CLIENT_ID" "guix")
1168 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
1169 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
1170 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
1171 (setenv "SCOPED_USER_CLIENT_ID" "guix")
1172 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
1173 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
1174 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
1175 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
1176 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
1177 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
1178 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
1179 (native-inputs
1180 (list nss-certs-for-test
1181 python-mock
1182 python-pytest
1183 python-pytest-mock
1184 python-setuptools
1185 python-wheel))
1186 (propagated-inputs
1187 (list python-requests python-six python-stone))
1188 (home-page "https://www.dropbox.com/developers")
1189 (synopsis "Official Dropbox API Client")
1190 (description "This package provides a Python SDK for integrating with the
1191Dropbox API v2.")
1192 (license license:expat)))
1193
1194(define-public python-dukpy
1195 (package
1196 (name "python-dukpy")
1197 (version "0.5.1")
1198 (source
1199 (origin
1200 (method git-fetch)
1201 (uri (git-reference
1202 (url "https://github.com/amol-/dukpy")
1203 (commit version)))
1204 (file-name (git-file-name name version))
1205 (sha256
1206 (base32 "1qsqfgy12frrdikjf353bsvhln11jixc3qs9rc1zra55k0569036"))))
1207 (build-system pyproject-build-system)
1208 (arguments
1209 (list
1210 #:test-flags
1211 #~(list #$@(map (lambda (test)
1212 (string-append "--deselect=tests/test_installer.py"
1213 "::TestPackageInstaller::"
1214 test))
1215 ;; Network access is required.
1216 (list "test_install_command"
1217 "test_install_command_latest_ver"
1218 "test_install_command_substrate_error"
1219 "test_install_command_without_dest"
1220 "test_install_react"
1221 "test_install_scoped_package"
1222 "test_install_unexisting_package"
1223 "test_install_unexisting_version")))))
1224 (native-inputs
1225 (list python-mock
1226 python-pytest
1227 python-setuptools
1228 python-webassets))
1229 (home-page "https://github.com/amol-/dukpy")
1230 (synopsis "Simple JavaScript interpreter for Python")
1231 (description
1232 "DukPy is a simple JavaScript interpreter for Python built on top of
1233duktape engine without any external dependency. It comes with a bunch of
1234common transpilers built-in for convenience:
1235@itemize
1236@item CoffeeScript
1237@item BabelJS
1238@item TypeScript
1239@item JSX
1240@item LESS
1241@end itemize")
1242 (license license:expat)))
1243
1244(define-public python-essentials-openapi
1245 (package
1246 (name "python-essentials-openapi")
1247 (version "1.2.1")
1248 (source
1249 (origin
1250 (method git-fetch)
1251 (uri (git-reference
1252 (url "https://github.com/Neoteroi/essentials-openapi")
1253 (commit (string-append "v" version))))
1254 (file-name (git-file-name name version))
1255 (sha256
1256 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
1257 (build-system pyproject-build-system)
1258 (native-inputs
1259 (list python-flask
1260 python-hatchling
1261 python-pydantic
1262 python-pytest
1263 python-rich))
1264 (propagated-inputs
1265 (list python-essentials
1266 python-httpx
1267 python-jinja2
1268 python-markupsafe
1269 python-pyyaml))
1270 (home-page "https://github.com/Neoteroi/essentials-openapi/")
1271 (synopsis "Generator for OpenAPI Documentation")
1272 (description
1273 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
1274formats. Generator for other kinds of documents from OpenAPI Documentation
1275files.")
1276 (license license:expat)))
1277
1278(define-public python-eventlet
1279 (package
1280 (name "python-eventlet")
1281 (version "0.40.4")
1282 (source
1283 (origin
1284 (method url-fetch)
1285 (uri (pypi-uri "eventlet" version))
1286 (sha256
1287 (base32
1288 "0vzjrb7n3x7gdrxiw4dacdxvz0m8saaw9w7n1n9v865yn49gggk9"))))
1289 (build-system pyproject-build-system)
1290 (arguments
1291 (list
1292 #:test-flags
1293 '(list "-k"
1294 (string-append
1295 "not TestGetaddrinfo"
1296 " and not TestProxyResolver"
1297 " and not test_noraise_dns_tcp"
1298 " and not test_raise_dns_tcp"
1299 " and not test_hosts_no_network"
1300 " and not test_import_rdtypes_then_eventlet"
1301 " and not test_patcher_existing_locks"
1302 " and not test_dns_methods_are_green"))
1303 #:phases
1304 #~(modify-phases %standard-phases
1305 (add-after 'unpack 'avoid-OSError
1306 (lambda _
1307 ;; If eventlet tries to load greendns, an OSError is thrown when
1308 ;; getprotobyname is called. Thankfully there is an environment
1309 ;; variable to disable the greendns import, so use it. Note that
1310 ;; this error is propagated to child packages too, so enforce the
1311 ;; changed default.
1312 (substitute* "eventlet/green/socket.py"
1313 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
1314 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")")))))))
1315 (native-inputs
1316 (list python-hatchling
1317 python-hatch-vcs
1318 python-pytest))
1319 (propagated-inputs
1320 (list python-dnspython python-greenlet))
1321 (home-page "https://eventlet.net")
1322 (synopsis "Concurrent networking library for Python")
1323 (description
1324 "Eventlet is a concurrent networking library for Python that
1325allows you to change how you run your code, not how you write it.
1326It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1327Coroutines ensure that the developer uses a blocking style of programming
1328that is similar to threading, but provide the benefits of non-blocking I/O.
1329The event dispatch is implicit, which means you can easily use @code{Eventlet}
1330from the Python interpreter, or as a small part of a larger application.
1331
1332Note: In Guix, this package assumes the environment variable
1333@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
1334to anything else.")
1335 (license license:expat)))
1336
1337(define-public python-feedgen
1338 (package
1339 (name "python-feedgen")
1340 (version "1.0.0")
1341 (source
1342 (origin
1343 (method git-fetch)
1344 (uri (git-reference
1345 (url "https://github.com/lkiesow/python-feedgen")
1346 (commit (string-append "v" version))))
1347 (file-name (git-file-name name version))
1348 (sha256
1349 (base32
1350 "1ppwxp9yck29pk2p2dlrrad6rz16l9h4fhcajp9yb7ns94fm5v3l"))))
1351 (build-system pyproject-build-system)
1352 (propagated-inputs
1353 (list python-dateutil
1354 python-lxml))
1355 (native-inputs
1356 (list python-pytest
1357 python-setuptools))
1358 (home-page "https://feedgen.kiesow.be")
1359 (synopsis "Atom and RSS feed generator")
1360 (description
1361 "This module can be used to generate web feeds in both Atom and RSS
1362format. It also extensible and comes with an extension to produce podcasts.")
1363 ;; The README says that this package is released under both licenses, and
1364 ;; permits the user to choose whichever is more convenient to them.
1365 (license (list license:bsd-2
1366 license:lgpl3+))))
1367
1368(define-public python-flask-caching
1369 (package
1370 (name "python-flask-caching")
1371 (version "2.3.1")
1372 (source
1373 (origin
1374 (method url-fetch)
1375 (uri (pypi-uri "flask_caching" version))
1376 (sha256
1377 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
1378 (build-system pyproject-build-system)
1379 (arguments
1380 (list
1381 #:test-flags
1382 ;; Tests requiring running Redis or dated python-cache.
1383 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
1384 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
1385 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
1386 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
1387 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
1388 "-k" "not test_client_override_reflected_on_cachelib_methods")))
1389 (native-inputs
1390 (list python-pytest
1391 python-pytest-asyncio
1392 python-pytest-xprocess
1393 python-setuptools))
1394 (propagated-inputs
1395 (list python-cachelib
1396 python-flask))
1397 (home-page "https://github.com/pallets-eco/flask-caching")
1398 (synopsis "Caching extension for Flask")
1399 (description
1400 "This package provides a caching support to Flask applications, it's a
1401fort ok https://github.com/thadeusb/flask-cache.")
1402 (license license:bsd-3)))
1403
1404(define-public python-flask-paginate
1405 (package
1406 (name "python-flask-paginate")
1407 (version "2024.4.12")
1408 (source
1409 (origin
1410 (method git-fetch)
1411 (uri (git-reference
1412 (url "https://github.com/lixxu/flask-paginate")
1413 (commit (string-append "v" version))))
1414 (file-name (git-file-name name version))
1415 (sha256
1416 (base32 "1q4ajwk0pzc6934g07gdryjcwi6rd9iqcwv5g5s718dfx2bj1831"))))
1417 (arguments
1418 (list #:test-backend #~'custom
1419 #:test-flags #~(list "tests/tests.py")))
1420 (build-system pyproject-build-system)
1421 (native-inputs
1422 (list python-pytest
1423 python-setuptools))
1424 (propagated-inputs
1425 (list python-flask))
1426 (home-page "https://github.com/lixxu/flask-paginate")
1427 (synopsis "Simple paginate support for Flask")
1428 (description
1429 "Flask-paginate is a simple pagination extension for Flask which is
1430inspired by Ruby's will_paginate library. It supports several CSS frameworks.")
1431 (license license:bsd-3)))
1432
1433(define-public python-flask-limiter
1434 (package
1435 (name "python-flask-limiter")
1436 (version "4.1.1")
1437 (source
1438 (origin
1439 (method git-fetch)
1440 (uri (git-reference
1441 (url "https://github.com/alisaifee/flask-limiter")
1442 (commit version)))
1443 (file-name (git-file-name name version))
1444 (sha256
1445 (base32 "18n12iayzw6qqys26824j5lfbphfcammpmyrvys1k0rn4xcbifln"))))
1446 (build-system pyproject-build-system)
1447 (arguments
1448 (list
1449 ;; tests: 155 passed, 620 deselected
1450 #:test-flags
1451 #~(list "-k" (simple-format #f "not (~a)"
1452 (string-join
1453 (append
1454 ;; The test suite spawns storages in Docker.
1455 '("memcache" "reset_unsupported")
1456 '("mongo")
1457 '("redis" "clear_limits"
1458 "constructor_arguments_over_config"
1459 "custom_key_prefix" "fallback_to_memory"))
1460 " or ")))
1461 #:phases
1462 #~(modify-phases %standard-phases
1463 (add-before 'check 'adjust-tests
1464 (lambda _
1465 (substitute* "pytest.ini"
1466 ((".*--cov=.*") ""))
1467 (substitute* (find-files "tests" "\\.py$")
1468 (("import pymemcache.*") "")
1469 (("import pymongo.*") "")
1470 (("import redis.*") "")))))))
1471 (native-inputs (list python-flask-restful
1472 python-hatch-vcs
1473 python-hatchling
1474 python-hiro
1475 python-pytest
1476 python-pytest-check
1477 python-pytest-mock))
1478 (propagated-inputs (list python-flask
1479 python-limits
1480 python-ordered-set
1481 python-rich))
1482 (home-page "https://flask-limiter.readthedocs.org/")
1483 (synopsis "Rate limiting for Flask applications")
1484 (description
1485 "Flask-Limiter adds rate limiting to Flask applications.
1486Rate limits can be configured at different levels such as:
1487
1488@itemize
1489@item Application wide global limits per user
1490@item Default limits per route
1491@item By blueprints
1492@item By class-based views
1493@item By individual routes
1494@end itemize")
1495 (license license:expat)))
1496
1497(define-public python-gdown
1498 (package
1499 (name "python-gdown")
1500 (version "5.2.0")
1501 (source
1502 (origin
1503 (method url-fetch)
1504 (uri (pypi-uri "gdown" version))
1505 (sha256
1506 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
1507 (build-system pyproject-build-system)
1508 (arguments (list #:tests? #f)) ;network access is required
1509 (native-inputs
1510 (list python-hatch-fancy-pypi-readme
1511 python-hatch-vcs
1512 python-hatchling))
1513 (propagated-inputs
1514 (list python-beautifulsoup4
1515 python-filelock
1516 python-requests
1517 python-tqdm))
1518 (home-page "https://github.com/wkentaro/gdown")
1519 (synopsis "Google Drive Public File/Folder Downloader")
1520 (description
1521 "This package implements a functionality to download large files
1522recursively from Google Drive with option to filter them by file
1523formats (PDF/XML/CSV).")
1524 (license license:expat)))
1525
1526(define-public python-globus-sdk
1527 (package
1528 (name "python-globus-sdk")
1529 (version "4.4.0")
1530 (source
1531 (origin
1532 (method git-fetch)
1533 (uri (git-reference
1534 (url "https://github.com/globus/globus-sdk-python")
1535 (commit version)))
1536 (file-name (git-file-name name version))
1537 (sha256
1538 (base32 "1d0zw9dkpdhsf9zdg3nk6b55gqwzc3v2rj76nj7999hjmq8350vh"))))
1539 (build-system pyproject-build-system)
1540 (arguments
1541 (list
1542 #:phases
1543 #~(modify-phases %standard-phases
1544 (add-before 'check 'pre-check
1545 (lambda _ (setenv "HOME" "/tmp"))))))
1546 (native-inputs
1547 (list python-flaky
1548 python-pytest
1549 python-pytest-randomly
1550 python-responses
1551 python-setuptools))
1552 (propagated-inputs
1553 (list python-cryptography
1554 python-importlib-resources
1555 python-pyjwt
1556 python-requests))
1557 (home-page "https://github.com/globus/globus-sdk-python")
1558 (synopsis "Globus SDK for Python")
1559 (description
1560 "This package provides a SDK for convenient Pythonic interface to
1561@url{https://www.globus.org/, Globus} APIs.")
1562 (license license:asl2.0)))
1563
1564(define-public python-guardpost
1565 (package
1566 (name "python-guardpost")
1567 (version "1.0.4")
1568 (source
1569 (origin
1570 (method git-fetch)
1571 (uri (git-reference
1572 (url "https://github.com/Neoteroi/guardpost")
1573 (commit (string-append "v" version))))
1574 (file-name (git-file-name name version))
1575 (sha256
1576 (base32 "1xsakqn36g2h1s5rnbaf1lasx1jn4skqhmb8kdl1k4pgxp5sczyy"))))
1577 (build-system pyproject-build-system)
1578 (arguments
1579 (list
1580 ;; Possible timing issue, see:
1581 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
1582 #:test-flags '(list "--ignore=tests/test_jwts.py")))
1583 (native-inputs
1584 (list python-flask
1585 python-hatchling
1586 python-pytest
1587 python-pytest-asyncio))
1588 (propagated-inputs
1589 (list python-rodi
1590 ;; [optional]
1591 python-cryptography
1592 python-essentials
1593 python-pyjwt))
1594 (home-page "https://github.com/Neoteroi/GuardPost/")
1595 (synopsis
1596 "Authentication and authorization framework for Python applications")
1597 (description
1598 "GuardPost is a framework to handle authentication and
1599authorization in asynchronous Python applications.
1600
1601Its features include
1602
1603@itemize
1604@item Strategy to implement authentication.
1605@item Strategy to implement authorization.
1606@item Support for dependency injection
1607@item Built-in support for JSON Web Tokens (JWTs) authentication.
1608@end itemize")
1609 (license license:expat)))
1610
1611(define-public python-habanero
1612 (package
1613 (name "python-habanero")
1614 (version "2.3.0")
1615 (source
1616 (origin
1617 (method git-fetch)
1618 (uri (git-reference
1619 (url "https://github.com/sckott/habanero")
1620 (commit (string-append "v" version))))
1621 (file-name (git-file-name name version))
1622 (sha256
1623 (base32 "1a842izcc8l4wb8004v92zsq1h4yc7qc2wi9am6x0f7idlx993sw"))))
1624 (build-system pyproject-build-system)
1625 (arguments
1626 ;; Run only a small portion of unit tests without network access
1627 ;; requirement.
1628 (list #:test-flags #~(list "test/test-filters.py")))
1629 (native-inputs
1630 (list python-hatchling
1631 python-pytest))
1632 (propagated-inputs
1633 (list python-httpx
1634 python-packaging
1635 python-tqdm
1636 python-urllib3))
1637 (home-page "https://github.com/sckott/habanero")
1638 (synopsis "Low Level Client for Crossref Search API")
1639 (description
1640 "Low Level Client for
1641@url{https://api.crossref.org/swagger-ui/index.html, Crossref Search API}.")
1642 (license license:expat)))
1643
1644(define-public python-hookdns
1645 (package
1646 (name "python-hookdns")
1647 (version "2.0.0")
1648 (source
1649 (origin
1650 (method url-fetch)
1651 (uri (pypi-uri "hookdns" version))
1652 (sha256
1653 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
1654 (build-system pyproject-build-system)
1655 (arguments
1656 (list
1657 #:test-flags
1658 #~(list "-k" (string-join
1659 ;; Tests requiring networking.
1660 (list
1661 "not test_patch_contextmanager_with_another_hostname"
1662 "test_patch_contextmanager_with_another_hostname_ipv6"
1663 "test_patch_contextmanager_with_ipv4"
1664 "test_patch_contextmanager_with_name"
1665 "test_patch_contextmanager_with_public_fqdn_and_"
1666 "test_patch_contextmanager_with_unknown_hostname"
1667 "test_patch_decorator_with_another_hostname"
1668 "test_patch_decorator_with_another_hostname_ipv6"
1669 "test_patch_decorator_with_ipv4"
1670 "test_patch_decorator_with_name"
1671 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
1672 "test_patch_decorator_with_unknown_hostname"
1673 "test_real_getaddrinfo_with_name_ipv6"
1674 "test_real_getaddrinfo_with_public_fqdn_ipv4"
1675 "test_real_getaddrinfo_with_public_fqdn_ipv6"
1676 "test_real_gethostbyname_ex_with_public_fqdn"
1677 "test_real_gethostbyname_with_public_fqdn"
1678 "test_real_requests_ip"
1679 "test_real_requests_name"
1680 "test_real_requests_with_public_fqdn"
1681 "test_reentrant")
1682 " and not "))))
1683 (native-inputs
1684 (list python-pytest
1685 python-requests
1686 python-setuptools
1687 python-wheel))
1688 (home-page "https://github.com/cle-b/hookdns")
1689 (synopsis "DNS resolution customization library")
1690 (description
1691 "HookDNS implements functionality that allows for modifying name
1692resolution in a Python script without any changes to the hosts file or the use
1693of a fake DNS resolver.")
1694 (license license:asl2.0)))
1695
1696(define-public python-httpcore2
1697 (package
1698 (name "python-httpcore2")
1699 (version "2.4.0")
1700 (source
1701 (origin
1702 (method git-fetch)
1703 (uri (git-reference
1704 (url "https://github.com/pydantic/httpx2")
1705 (commit (string-append "v" version))))
1706 (file-name (git-file-name name version))
1707 (sha256
1708 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
1709 (build-system pyproject-build-system)
1710 (arguments
1711 (list
1712 #:phases
1713 #~(modify-phases %standard-phases
1714 (add-after 'unpack 'preparation
1715 (lambda _
1716 (chdir "src/httpcore2")
1717 (copy-recursively "../../tests/httpcore2" "tests")
1718 (substitute* (find-files "tests" "\\.py$")
1719 (("tests\\.httpcore2") "tests")
1720 (("tests/httpcore2") "tests"))))
1721 (add-before 'build 'set-version
1722 (lambda _
1723 (substitute* "pyproject.toml"
1724 ((".*uv-dynamic-versioning>.*") "")
1725 (("source.*uv-dynamic-versioning.*") "source = 'vcs'"))
1726 (substitute* "httpcore2/__init__.py"
1727 ((".*= version\\(.*")
1728 (format #f "__version__ = ~s~%" #$version))))))))
1729 (native-inputs
1730 (list python-hatch-fancy-pypi-readme
1731 python-hatch-vcs
1732 python-hatchling
1733 python-pytest
1734 python-pytest-httpbin
1735 python-pytest-trio))
1736 (propagated-inputs
1737 (list python-h11
1738 python-truststore
1739 ;; [optional]
1740 python-anyio
1741 python-h2
1742 python-socksio
1743 python-trio))
1744 (home-page "https://github.com/pydantic/httpx2")
1745 (synopsis "Minimal low-level HTTP client")
1746 (description
1747 "The HTTP Core package provides a minimal low-level HTTP client, which
1748does one thing only. Sending HTTP requests.
1749
1750Some things HTTP Core does do:
1751@itemize
1752@item Sending HTTP requests.
1753@item Thread-safe / task-safe connection pooling.
1754@item HTTP(S) proxy & SOCKS proxy support.
1755@item Supports HTTP/1.1 and HTTP/2.
1756@item Provides both sync and async interfaces.
1757@item Async backend support for @code{asyncio} and @code{trio}.
1758@end itemize")
1759 (license license:bsd-3)))
1760
1761(define-public python-httpretty
1762 (package
1763 (name "python-httpretty")
1764 (version "1.1.4")
1765 (source
1766 (origin
1767 (method url-fetch)
1768 (uri (pypi-uri "httpretty" version))
1769 (sha256
1770 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
1771 (build-system pyproject-build-system)
1772 (arguments
1773 (list
1774 #:test-flags
1775 ;; Only run Unit tests.
1776 #~(list "--ignore=tests/bugfixes"
1777 "--ignore=tests/functional"
1778 "--ignore=tests/pyopenssl"
1779 "-k" (string-join
1780 ;; Tests pattern failing with one of these errors:
1781 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
1782 ;; has no attribute 'should'
1783 ;; AttributeError: 'function' object has no attribute
1784 ;; 'when'
1785 ;; AttributeError: 'AssertionBuilder' object has no
1786 ;; attribute 'should_not'
1787 (list "not fake_socket_passes_through"
1788 "fakesock_socket"
1789 "request_parse_body_when"
1790 "test_Entry_class_normalizes_headers"
1791 "test_has_request"
1792 "test_httpretty_should_raise_proper"
1793 "test_parse_request_line_connect"
1794 "test_request_parse_querystring"
1795 "test_request_string_representation"
1796 "test_request_stubs_internals")
1797 " and not "))))
1798 (native-inputs
1799 (list nss-certs-for-test
1800 python-freezegun
1801 python-mock
1802 python-pytest
1803 python-setuptools
1804 python-sure
1805 python-wheel))
1806 (home-page "https://httpretty.readthedocs.io")
1807 (synopsis "HTTP client mock for Python")
1808 (description
1809 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
1810@code{fakeweb}.")
1811 (license license:expat)))
1812
1813(define-public python-httpx2
1814 (package
1815 (name "python-httpx2")
1816 (version "2.4.0")
1817 (source
1818 (origin
1819 (method git-fetch)
1820 (uri (git-reference
1821 (url "https://github.com/pydantic/httpx2")
1822 (commit (string-append "v" version))))
1823 (file-name (git-file-name name version))
1824 (sha256
1825 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
1826 (arguments
1827 (list
1828 ;; tests: 1227 passed, 200 deselected
1829 #:test-flags
1830 ;; Networking tests.
1831 #~(list "-k" (string-join
1832 (list "not test_async_proxy_close[asyncio]"
1833 "test_async_proxy_close[trio]"
1834 "test_auth"
1835 "test_binary"
1836 "test_client_decode_text_using_autodetect"
1837 "test_client_decode_text_using_explicit_encoding"
1838 "test_follow_redirects"
1839 "test_get"
1840 "test_idna_url[http_with_custom_port]"
1841 "test_idna_url[http_with_port]"
1842 "test_idna_url[https_with_custom_port]"
1843 "test_idna_url[https_with_port]"
1844 "test_idna_url[https_without_port]"
1845 "test_idna_url[idna_label_after_ascii_label]"
1846 "test_idna_url[unicode_tr46_compat]"
1847 "test_json"
1848 "test_post"
1849 "test_redirects"
1850 "test_response_decode_text_using_autodetect"
1851 "test_sync_proxy_close"
1852 "test_url_malformed_idna_label_after_ascii_label"
1853 "test_url_mixed_valid_and_malformed_idna_labels"
1854 "test_verbose")
1855 " and not "))
1856 #:phases
1857 #~(modify-phases %standard-phases
1858 (add-after 'unpack 'preparation
1859 (lambda _
1860 (chdir "src/httpx2")
1861 (copy-recursively "../../tests/httpx2" "tests")
1862 (substitute* (find-files "tests" "\\.py$")
1863 (("tests\\.httpx2") "tests")
1864 (("tests/httpx2") "tests"))))
1865 (add-before 'build 'set-version
1866 (lambda _
1867 (substitute* "pyproject.toml"
1868 (("\"uv-dynamic-versioning>=0\\.8\\.0\"") "")
1869 (("source.*uv-dynamic-versioning.*") "source = 'vcs'")
1870 (("\\.uv-dynamic-versioning") ".vcs")))))))
1871 (build-system pyproject-build-system)
1872 (native-inputs
1873 (list python-chardet
1874 python-hatch-fancy-pypi-readme
1875 python-hatch-vcs
1876 python-hatchling
1877 python-pytest
1878 python-trustme
1879 python-uvicorn))
1880 (propagated-inputs
1881 (list python-anyio
1882 python-httpcore2
1883 python-idna
1884 python-truststore
1885 python-typing-extensions ;Python version < 3.13
1886 ;; [optional]
1887 python-brotli
1888 python-click
1889 python-h2
1890 python-pygments
1891 python-rich
1892 python-socksio
1893 python-zstandard))
1894 (home-page "https://github.com/pydantic/httpx2")
1895 (synopsis "The next generation HTTP client")
1896 (description
1897 "HTTPX2 is a fully featured HTTP client library for Python. It includes
1898an integrated command line client, has support for both HTTP/1.1 and HTTP/2,
1899and provides both sync and async APIs.")
1900 (license license:bsd-3)))
1901
1902(define-public python-jiter
1903 (package
1904 (name "python-jiter")
1905 (version "0.15.0")
1906 (source
1907 (origin
1908 (method git-fetch)
1909 (uri (git-reference
1910 (url "https://github.com/pydantic/jiter/")
1911 (commit (string-append "v" version))))
1912 (file-name (git-file-name name version))
1913 (sha256
1914 (base32 "1z2ljacsc64yykkxvjnq6rq4z56xwr8jhcw02ckv6b85kc66x63p"))))
1915 (build-system pyproject-build-system)
1916 (arguments
1917 (list
1918 #:imported-modules (append %cargo-build-system-modules
1919 %pyproject-build-system-modules)
1920 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
1921 (guix build pyproject-build-system)
1922 (guix build utils))
1923 #:phases
1924 #~(modify-phases %standard-phases
1925 (add-after 'unpack 'prepare-cargo-build-system
1926 (lambda args
1927 (for-each (lambda (phase)
1928 (format #t "Running cargo phase: ~a~%" phase)
1929 (apply (assoc-ref cargo:%standard-phases phase)
1930 #:cargo-target #$(cargo-triplet)
1931 args))
1932 '(prepare-rust-crates
1933 unpack-rust-crates
1934 configure
1935 check-for-pregenerated-files
1936 patch-cargo-checksums))))
1937 (add-after 'prepare-cargo-build-system 'chdir
1938 (lambda _
1939 (chdir "crates/jiter-python"))))))
1940 (native-inputs
1941 (append (list maturin
1942 python-dirty-equals
1943 python-pytest
1944 rust
1945 `(,rust "cargo"))
1946 (or (and=> (%current-target-system)
1947 (compose list make-rust-sysroot))
1948 '())))
1949 (inputs (cargo-inputs 'jiter))
1950 (home-page "https://github.com/pydantic/jiter/")
1951 (synopsis "Iterable JSON parser")
1952 (description
1953 "This package provides a fast Python iterable JSON parser, backed by Rust
1954libraries.")
1955 (license license:bsd-3)))
1956
1957(define-public python-justhtml
1958 (package
1959 (name "python-justhtml")
1960 (version "1.13.0")
1961 (source
1962 (origin
1963 (method git-fetch)
1964 (uri (git-reference
1965 (url "https://github.com/emilstenstrom/justhtml")
1966 (commit (string-append "v" version))))
1967 (file-name (git-file-name name version))
1968 (sha256
1969 (base32 "1hy5w3lr08sj3pivs46nnlfsvrd9ynmicxcrjk4sxbpg7411lyj5"))))
1970 (build-system pyproject-build-system)
1971 (native-inputs
1972 (list python-hatchling))
1973 (home-page "https://github.com/emilstenstrom/justhtml")
1974 (synopsis "Pure Python HTML5 parser")
1975 (description
1976 "JustHTML is a pure Python HTML5 parser. It has a simple API and does
1977not require C extensions or system dependencies.")
1978 (license license:expat)))
1979
1980(define-public python-huggingface-hub
1981 (package
1982 (name "python-huggingface-hub")
1983 (version "0.31.4")
1984 (source
1985 (origin
1986 (method git-fetch)
1987 (uri (git-reference
1988 (url "https://github.com/huggingface/huggingface_hub")
1989 (commit (string-append "v" version))))
1990 (file-name (git-file-name name version))
1991 (sha256
1992 (base32 "1rjkrmvvyzxlbnbndrg4v9qq39grn46c26zrdjgpf114gci5pwap"))))
1993 (build-system pyproject-build-system)
1994 (arguments
1995 (list
1996 #:test-flags
1997 ;; We don't have sentence_transformers...
1998 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
1999 ;; ...nor do we have InquirerPy...
2000 "--ignore=tests/test_command_delete_cache.py"
2001 ;; ...or timm...
2002 "--ignore=contrib/timm/test_timm.py"
2003 ;; ...or spacy_huggingface_hub
2004 "--ignore=contrib/spacy/test_spacy.py"
2005 ;; These all require internet access
2006 "--ignore=tests/test_cache_no_symlinks.py"
2007 "--ignore=tests/test_cache_layout.py"
2008 "--ignore=tests/test_commit_scheduler.py"
2009 "--ignore=tests/test_file_download.py"
2010 "--ignore=tests/test_hf_api.py"
2011 "--ignore=tests/test_hf_file_system.py"
2012 "--ignore=tests/test_inference_api.py"
2013 "--ignore=tests/test_inference_async_client.py"
2014 "--ignore=tests/test_inference_client.py"
2015 "--ignore=tests/test_inference_text_generation.py"
2016 "--ignore=tests/test_login_utils.py"
2017 "--ignore=tests/test_offline_utils.py"
2018 "--ignore=tests/test_repocard.py"
2019 "--ignore=tests/test_repository.py"
2020 "--ignore=tests/test_snapshot_download.py"
2021 "--ignore=tests/test_utils_cache.py"
2022 "--ignore=tests/test_utils_git_credentials.py"
2023 "--ignore=tests/test_utils_http.py"
2024 "--ignore=tests/test_utils_pagination.py"
2025 "--ignore=tests/test_webhooks_server.py"
2026 "-k" (string-append
2027 "not test_push_to_hub"
2028 " and not test_from_pretrained_model_id_only"
2029 " and not test_from_pretrained_model_id_and_revision"
2030 ;; These all require internet access
2031 " and not test_auth"
2032 " and not test_oauth"
2033 " and not test_utils_sha"
2034 " and not test_inference_providers"
2035 " and not test_xet"))
2036 #:phases
2037 '(modify-phases %standard-phases
2038 (add-before 'check 'pre-check
2039 ;; Some tests need to write to HOME.
2040 (lambda _ (setenv "HOME" "/tmp"))))))
2041 (propagated-inputs
2042 (list python-filelock
2043 python-fsspec
2044 python-packaging
2045 python-pyyaml
2046 python-requests
2047 python-tqdm
2048 python-typing-extensions))
2049 (native-inputs
2050 (list python-aiohttp
2051 python-fastapi
2052 python-jedi
2053 python-jinja2
2054 python-numpy
2055 python-pillow
2056 python-pydantic
2057 python-pytest
2058 python-pytest-asyncio
2059 python-pytest-env
2060 python-pytest-mock
2061 python-pytest-rerunfailures
2062 python-pytest-vcr
2063 python-pytest-xdist
2064 python-setuptools
2065 python-types-requests
2066 python-types-toml
2067 python-types-urllib3
2068 python-typing-extensions
2069 python-urllib3
2070 python-wheel))
2071 (home-page "https://huggingface.co/docs/huggingface_hub/")
2072 (synopsis "Client library for accessing the huggingface.co hub")
2073 (description
2074 "This package provides a client library to download and publish models,
2075datasets and other repos on the @url{huggingface.co} hub.")
2076 (license license:asl2.0)))
2077
2078(define-public python-kubernetes
2079 (package
2080 (name "python-kubernetes")
2081 (version "35.0.0")
2082 (source
2083 (origin
2084 (method url-fetch)
2085 (uri (pypi-uri "kubernetes" version))
2086 (sha256
2087 (base32 "1vh9bzq175fzv9av3v37lcfh37yzss2d9vxrb0a84fa2ji2d601x"))))
2088 (build-system pyproject-build-system)
2089 (arguments
2090 (list
2091 #:test-flags
2092 #~(list
2093 ;; The following tests expect a local running Kubernetes cluster.
2094 "--ignore=kubernetes/e2e_test"
2095 "--ignore=kubernetes/dynamic")))
2096 (native-inputs
2097 (list python-pytest
2098 python-setuptools))
2099 (propagated-inputs
2100 (list python-certifi
2101 python-dateutil
2102 python-durationpy
2103 python-google-auth
2104 python-pyyaml
2105 python-requests
2106 python-requests-oauthlib
2107 python-six ;XXX: hard dependency
2108 python-urllib3
2109 python-websocket-client))
2110 (home-page "https://github.com/kubernetes-client/python")
2111 (synopsis "Python client for Kubernetes")
2112 (description
2113 "This package provides an official Python client library for
2114@url{http://kubernetes.io, Kubernetes}.")
2115 (license license:asl2.0)))
2116
2117(define-public python-lazr-restfulclient
2118 (package
2119 (name "python-lazr-restfulclient")
2120 (version "0.14.6")
2121 (source
2122 (origin
2123 (method url-fetch)
2124 (uri (pypi-uri "lazr.restfulclient" version))
2125 (sha256
2126 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
2127 (build-system pyproject-build-system)
2128 (arguments
2129 (list
2130 #:phases
2131 #~(modify-phases %standard-phases
2132 ;; Disable part of the test suite to avoid the lazr.authentication
2133 ;; requirement, which requires 'oauth', a Python 2 only library.
2134 (add-after 'unpack 'remove-some-checks
2135 (lambda _
2136 (with-directory-excursion "src/lazr/restfulclient/tests"
2137 (for-each delete-file '("test_oauth.py" "test_docs.py")))
2138 (substitute* "setup.py"
2139 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
2140 ""))))
2141 (replace 'check
2142 (lambda* (#:key tests? #:allow-other-keys)
2143 (if tests?
2144 (invoke "zope-testrunner" "--test-path=src")
2145 (format #t "test suite not run~%")))))))
2146 (native-inputs
2147 (list python-setuptools
2148 python-testtools
2149 python-wheel
2150 python-wsgi-intercept
2151 python-zope-testrunner))
2152 (propagated-inputs
2153 (list python-distro
2154 python-httplib2
2155 python-oauthlib
2156 python-pyparsing
2157 python-setuptools
2158 python-six
2159 python-wadllib))
2160 (home-page "https://launchpad.net/lazr.restfulclient")
2161 (synopsis "Web client Python library extending wadlib")
2162 (description "This package provides a programmable client library that
2163adds functionality on top of @code{wadlib}.")
2164 (license license:lgpl3+)))
2165
2166(define-public python-launchpadlib
2167 (package
2168 (name "python-launchpadlib")
2169 (version "2.1.0")
2170 (source
2171 (origin
2172 (method url-fetch)
2173 (uri (pypi-uri "launchpadlib" version))
2174 (sha256
2175 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
2176 (build-system pyproject-build-system)
2177 (arguments
2178 (list #:phases #~(modify-phases %standard-phases
2179 (add-before 'check 'set-home
2180 (lambda _
2181 ;; Tests require a writable home.
2182 (setenv "HOME" "/tmp"))))))
2183 (propagated-inputs
2184 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
2185 (native-inputs (list python-pytest python-testresources python-wadllib
2186 python-setuptools python-wheel))
2187 (home-page "https://documentation.ubuntu.com/launchpad")
2188 (synopsis "Python client library for Launchpad's web service")
2189 (description "@code{launchpadlib} is a Python library that allows
2190scripting Launchpad via its the web service API.")
2191 (license license:lgpl3+)))
2192
2193(define-public python-lazr-uri
2194 (package
2195 (name "python-lazr-uri")
2196 (version "1.0.7")
2197 (source
2198 (origin
2199 (method url-fetch)
2200 (uri (pypi-uri "lazr_uri" version))
2201 (sha256
2202 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
2203 (build-system pyproject-build-system)
2204 (arguments
2205 (list
2206 #:phases
2207 #~(modify-phases %standard-phases
2208 (replace 'check
2209 (lambda* (#:key tests? #:allow-other-keys)
2210 (if tests?
2211 (invoke "zope-testrunner" "--test-path=src")
2212 (format #t "test suite not run~%")))))))
2213 (native-inputs (list python-setuptools python-zope-testrunner))
2214 (home-page "https://launchpad.net/lazr.uri")
2215 (synopsis "Python URI manipulation library")
2216 (description "This Python package provides a self-contained, easily
2217reusable library for parsing, manipulating, and generating URIs.")
2218 (license license:lgpl3)))
2219
2220(define-public python-ldaptor
2221 (package
2222 (name "python-ldaptor")
2223 (version "21.2.0")
2224 (source
2225 (origin
2226 (method url-fetch)
2227 (uri (pypi-uri "ldaptor" version))
2228 (sha256
2229 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
2230 (build-system pyproject-build-system)
2231 (arguments
2232 (list
2233 #:test-flags
2234 #~(list "-m" "twisted.trial"
2235 (string-append "-j" (number->string (parallel-job-count)))
2236 "ldaptor")
2237 #:phases
2238 #~(modify-phases %standard-phases
2239 (add-after 'unpack 'python-3.12-patch
2240 (lambda _
2241 (substitute* "ldaptor/config.py"
2242 (("SafeConfigParser")
2243 "ConfigParser"))))
2244 (add-before 'check 'disable-failing-tests
2245 (lambda _
2246 ;; Testing with Twisted 22.4 results in infinite loop creating
2247 ;; temporary config files, see
2248 ;; <https://github.com/twisted/ldaptor/issues/238>.
2249 (delete-file "ldaptor/test/test_config.py")))
2250 (replace 'check
2251 (lambda* (#:key tests? test-flags #:allow-other-keys)
2252 (when tests?
2253 (apply invoke "python" test-flags)))))))
2254 (native-inputs
2255 (list python-setuptools
2256 python-wheel))
2257 (propagated-inputs
2258 (list python-passlib
2259 python-pyopenssl
2260 python-service-identity ; to pass sanity check, for Twisted[tls]
2261 python-pyparsing
2262 python-twisted
2263 python-zope-interface))
2264 (home-page "https://github.com/twisted/ldaptor")
2265 (synopsis "Pure-Python Twisted library for LDAP")
2266 (description
2267 "This package provides a Python Twisted library for LDAP, which key
2268feaatures are:
2269@itemize
2270@item LDAP client logic
2271@item separately-accessible LDAP and BER protocol message generation/parsing
2272@item ASCII-format LDAP filter generation and parsing
2273@item LDIF format data generation
2274@item Samba password changing logic
2275@end itemize")
2276 (license license:expat)))
2277
2278(define-public python-legacy-cgi
2279 (package
2280 (name "python-legacy-cgi")
2281 (version "2.6.1")
2282 (source
2283 (origin
2284 (method url-fetch)
2285 (uri (pypi-uri "legacy_cgi" version))
2286 (sha256
2287 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
2288 (build-system pyproject-build-system)
2289 (native-inputs (list python-poetry-core python-pytest))
2290 (home-page "https://github.com/jackrosenthal/legacy-cgi")
2291 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
2292 (description
2293 "This is a fork of the standard library modules @code{cgi} and
2294@code{cgitb}. They are slated to be removed from the Python standard library
2295in Python 3.13 by PEP-594.")
2296 (license license:psfl)))
2297
2298(define-public python-librouteros
2299 (package
2300 (name "python-librouteros")
2301 (version "4.0.0")
2302 (source
2303 (origin
2304 (method git-fetch)
2305 (uri (git-reference
2306 (url "https://github.com/luqasz/librouteros")
2307 (commit version)))
2308 (file-name (git-file-name name version))
2309 (sha256
2310 (base32 "0in952b2idb5j8v6sxfm21gqbr5i5776w5ir0hdsxjrl2f29305v"))))
2311 (build-system pyproject-build-system)
2312 (arguments
2313 (list
2314 #:build-backend "hatchling.build"
2315 #:test-flags
2316 #~(list "tests/unit")))
2317 (native-inputs
2318 (list python-hatchling
2319 python-pytest
2320 python-pytest-asyncio
2321 python-stamina))
2322 (home-page "https://github.com/luqasz/librouteros")
2323 (synopsis "Python implementation of MikroTik RouterOS API")
2324 (description
2325 "This package implements MikroTik's @code{RouterOS} API.")
2326 (license license:gpl2+)))
2327
2328(define-public python-opentelemetry-api
2329 (package
2330 (name "python-opentelemetry-api")
2331 (version "1.37.0")
2332 (source
2333 (origin
2334 (method url-fetch)
2335 (uri (pypi-uri "opentelemetry_api" version))
2336 (sha256
2337 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
2338 (build-system pyproject-build-system)
2339 (propagated-inputs (list python-importlib-metadata
2340 python-typing-extensions))
2341 (native-inputs (list python-hatchling
2342 python-opentelemetry-test-utils-bootstrap))
2343 (home-page "https://opentelemetry.io/docs/languages/python/")
2344 (synopsis "OpenTelemetry Python API")
2345 (description "@code{OpenTelemetry} Python API.")
2346 (license license:asl2.0)))
2347
2348(define-public python-opentelemetry-api-bootstrap
2349 (hidden-package
2350 (package/inherit python-opentelemetry-api
2351 (name "python-opentelemetry-api-bootstrap")
2352 (arguments
2353 (list
2354 #:tests? #f))
2355 (native-inputs (list python-hatchling)))))
2356
2357(define-public python-opentelemetry-sdk
2358 (package
2359 (name "python-opentelemetry-sdk")
2360 (version "1.37.0")
2361 (source
2362 (origin
2363 (method url-fetch)
2364 (uri (pypi-uri "opentelemetry_sdk" version))
2365 (sha256
2366 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
2367 (build-system pyproject-build-system)
2368 (propagated-inputs (list python-opentelemetry-api
2369 python-opentelemetry-semantic-conventions
2370 python-typing-extensions))
2371 (native-inputs (list python-hatchling
2372 python-opentelemetry-test-utils-bootstrap
2373 python-pytest))
2374 (home-page "https://opentelemetry.io/docs/languages/python/")
2375 (synopsis "OpenTelemetry Python SDK")
2376 (description "@code{OpenTelemetry} Python SDK.")
2377 (license license:asl2.0)))
2378
2379(define-public python-opentelemetry-sdk-bootstrap
2380 (hidden-package
2381 (package/inherit python-opentelemetry-sdk
2382 (name "python-opentelemetry-sdk-bootstrap")
2383 (arguments (list #:tests? #f))
2384 (propagated-inputs (list python-opentelemetry-api-bootstrap
2385 python-opentelemetry-semantic-conventions-bootstrap))
2386 (native-inputs (list python-hatchling)))))
2387
2388(define-public python-opentelemetry-semantic-conventions
2389 (package
2390 (name "python-opentelemetry-semantic-conventions")
2391 (version "0.58b0")
2392 (source
2393 (origin
2394 (method url-fetch)
2395 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
2396 (sha256
2397 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
2398 (build-system pyproject-build-system)
2399 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
2400 (native-inputs (list python-hatchling))
2401 (home-page "https://opentelemetry.io/docs/languages/python/")
2402 (synopsis "OpenTelemetry Semantic Conventions")
2403 (description "@code{OpenTelemetry} Semantic Conventions.")
2404 (license license:asl2.0)))
2405
2406(define-public python-opentelemetry-semantic-conventions-bootstrap
2407 (hidden-package
2408 (package/inherit python-opentelemetry-semantic-conventions
2409 (name "python-opentelemetry-semantic-conventions-bootstrap")
2410 (arguments
2411 (list
2412 #:tests? #f))
2413 (propagated-inputs (list python-opentelemetry-api-bootstrap
2414 python-typing-extensions)))))
2415
2416(define-public python-opentelemetry-test-utils
2417 (package
2418 (name "python-opentelemetry-test-utils")
2419 (version "0.58b0")
2420 (source
2421 (origin
2422 (method url-fetch)
2423 (uri (pypi-uri "opentelemetry_test_utils" version))
2424 (sha256
2425 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
2426 (build-system pyproject-build-system)
2427 (arguments (list #:tests? #f)) ; No tests in the wheel.
2428 (propagated-inputs
2429 (list python-asgiref
2430 python-opentelemetry-api
2431 python-opentelemetry-sdk))
2432 (native-inputs (list python-hatchling))
2433 (home-page "https://opentelemetry.io/docs/languages/python/")
2434 (synopsis "Test utilities for OpenTelemetry unit tests")
2435 (description "Test utilities for @code{OpenTelemetry} unit tests.")
2436 (license license:asl2.0)))
2437
2438(define-public python-opentelemetry-test-utils-bootstrap
2439 (hidden-package
2440 (package/inherit python-opentelemetry-test-utils
2441 (name "python-opentelemetry-test-utils-bootstrap")
2442 (propagated-inputs
2443 (list python-asgiref
2444 python-opentelemetry-api-bootstrap
2445 python-opentelemetry-sdk-bootstrap)))))
2446
2447(define-public python-pathy
2448 (package
2449 (name "python-pathy")
2450 (version "0.11.0")
2451 (source
2452 (origin
2453 (method url-fetch)
2454 (uri (pypi-uri "pathy" version))
2455 (sha256
2456 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
2457 (build-system pyproject-build-system)
2458 (native-inputs
2459 (list python-mock
2460 python-pytest
2461 python-setuptools))
2462 (propagated-inputs
2463 (list python-pathlib-abc-for-python-pathy
2464 python-smart-open-6
2465 python-typer))
2466 (home-page "https://github.com/justindujardin/pathy")
2467 (synopsis "Path interface for local and cloud bucket storage")
2468 (description "Pathy is a python package (with type annotations) for
2469working with Cloud Bucket storage providers using a @code{pathlib} interface.
2470It provides @code{pathlib.Path} subclasses for local and cloud bucket
2471storage.")
2472 (license license:asl2.0)))
2473
2474(define-public python-portend
2475 (package
2476 (name "python-portend")
2477 (version "3.2.1")
2478 (source
2479 (origin
2480 (method url-fetch)
2481 (uri (pypi-uri "portend" version))
2482 (sha256
2483 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
2484 (build-system pyproject-build-system)
2485 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
2486 ;; download dependencies.
2487 (arguments
2488 '(#:test-flags '("-k" "not project")))
2489 (native-inputs
2490 (list python-pytest
2491 python-setuptools
2492 python-setuptools-scm))
2493 (propagated-inputs
2494 (list python-tempora))
2495 (home-page "https://github.com/jaraco/portend")
2496 (synopsis "Monitor TCP ports for bound or unbound states")
2497 (description
2498 "@code{python-portend} can be used to monitor TCP ports for bound or
2499unbound states. For example, waiting for a port to be occupied or freed
2500within a set timeout. @code{python-portend} can also be used directly from
2501the command line.")
2502 (license license:expat)))
2503
2504(define-public python-prawcore
2505 (package
2506 (name "python-prawcore")
2507 (version "2.4.0")
2508 (source
2509 (origin
2510 (method git-fetch)
2511 (uri (git-reference
2512 (url "https://github.com/praw-dev/prawcore")
2513 (commit (string-append "v" version))))
2514 (file-name (git-file-name name version))
2515 (sha256
2516 (base32 "1y7gh7kk002b2h1ppkr1llb2gjfnby28zvx11j4ji0wm3r3rjh5l"))))
2517 (build-system pyproject-build-system)
2518 (arguments
2519 ;; XXX: These tests fail with an incomplete request response.
2520 (list #:test-flags
2521 #~'("-k" #$(string-append
2522 "not test_revoke__access_token_with_refresh_set"
2523 " and not test_revoke__access_token_without_refresh_set"
2524 " and not test_revoke__refresh_token_with_access_set"
2525 " and not test_refresh__with_scopes"
2526 " and not test_request__patch"))))
2527 (native-inputs
2528 (list python-betamax
2529 python-betamax-matchers
2530 python-betamax-serializers
2531 python-flit-core
2532 python-mock
2533 python-pytest
2534 python-testfixtures))
2535 (propagated-inputs
2536 (list python-requests))
2537 (synopsis "Core component of PRAW")
2538 (description "PRAWcore is a low-level communication layer used by PRAW.")
2539 (home-page "https://praw.readthedocs.io/en/latest/")
2540 (license license:bsd-2)))
2541
2542(define-public python-praw
2543 (package
2544 (name "python-praw")
2545 (version "7.8.1")
2546 (source
2547 (origin
2548 (method git-fetch)
2549 (uri (git-reference
2550 (url "https://github.com/praw-dev/praw")
2551 (commit (string-append "v" version))))
2552 (file-name (git-file-name name version))
2553 (sha256
2554 (base32 "05qq43l4334cq8r8k731qnb45nq12vvfdxwbr6q84a1hafp7n4cg"))))
2555 (build-system pyproject-build-system)
2556 (arguments
2557 (list #:test-flags
2558 #~(list "--ignore=tests/units/models"
2559 "--ignore=tests/integration/models"
2560 "--ignore=tests/unit/test_config.py"
2561 "--ignore=tests/integration/test_reddit.py")))
2562 (native-inputs
2563 (list python-betamax
2564 python-betamax-matchers
2565 python-flit-core
2566 python-pytest))
2567 (propagated-inputs
2568 (list python-prawcore python-update-checker python-websocket-client))
2569 (synopsis "Python Reddit API Wrapper")
2570 (description "PRAW is a Python package that allows for simple access to
2571Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
2572API rules.")
2573 (home-page "https://praw.readthedocs.io/en/latest/")
2574 (license license:bsd-2)))
2575
2576(define-public python-frozenlist
2577 (package
2578 (name "python-frozenlist")
2579 (version "1.8.0")
2580 (source
2581 (origin
2582 (method git-fetch)
2583 (uri (git-reference
2584 (url "https://github.com/aio-libs/frozenlist")
2585 (commit (string-append "v" version))))
2586 (file-name (git-file-name name version))
2587 (sha256
2588 (base32 "0r1kxf5b562zrn04nl912i6a8y1fyc891l1284v0zj9llb97limy"))))
2589 ;; XXX: Without "wheel", the 'install phase can't find the wheel.
2590 (outputs (list "out" "wheel"))
2591 (build-system pyproject-build-system)
2592 ;; The configuration contains explicit early calls to pytest_cov.
2593 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
2594 (native-inputs
2595 (list python-cython
2596 python-expandvars
2597 python-pytest
2598 python-setuptools
2599 python-tomli))
2600 (home-page "https://github.com/aio-libs/frozenlist")
2601 (synopsis "List-like data structure for Python")
2602 (description "@code{frozenlist.FrozenList} is a list-like structure which
2603implements @code{collections.abc.MutableSequence}. It can be made immutable
2604by calling @code{FrozenList.freeze}.")
2605 (license license:asl2.0)))
2606
2607(define-public python-aiobotocore
2608 (package
2609 (name "python-aiobotocore")
2610 (version "3.0.0")
2611 (source
2612 (origin
2613 (method url-fetch)
2614 (uri (pypi-uri "aiobotocore" version))
2615 (sha256
2616 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
2617 (build-system pyproject-build-system)
2618 (arguments
2619 ;; TODO: Tests need some setupt, see Makefile.
2620 (list #:tests? #f))
2621 (native-inputs
2622 (list python-setuptools))
2623 (propagated-inputs
2624 (list python-aiohttp
2625 python-aioitertools
2626 python-botocore
2627 python-dateutil
2628 python-jmespath
2629 python-multidict
2630 python-typing-extensions
2631 python-wrapt))
2632 (home-page "https://github.com/aio-libs/aiobotocore")
2633 (synopsis "Async client for AWS services using botocore and aiohttp")
2634 (description "This package provides an async client for Amazon services
2635using botocore and aiohttp/asyncio. This library is a mostly full featured
2636asynchronous version of botocore.")
2637 (license license:asl2.0)))
2638
2639(define-public python-aiohappyeyeballs
2640 (package
2641 (name "python-aiohappyeyeballs")
2642 (properties '((commit . "cc53cf8a1d31f7b460a0114214aac66956f0e2ed")
2643 (revision . "0")))
2644 (version (git-version "2.6.1"
2645 (assoc-ref properties 'revision)
2646 (assoc-ref properties 'commit)))
2647 (source
2648 (origin
2649 (method git-fetch)
2650 (uri (git-reference
2651 (url "https://github.com/aio-libs/aiohappyeyeballs")
2652 (commit (assoc-ref properties 'commit))))
2653 (file-name (git-file-name name version))
2654 (sha256
2655 (base32 "0nc723f4sxryg5h9z8paysmy9dnqw2jy4srxp9axrxkv9qrawa7n"))))
2656 (build-system pyproject-build-system)
2657 (native-inputs
2658 (list python-poetry-core
2659 python-pytest
2660 python-pytest-asyncio))
2661 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
2662 (synopsis "Happy Eyeballs for asyncio")
2663 (description "This library exists to allow connecting with Happy
2664Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
2665DNS name.")
2666 (license license:psfl)))
2667
2668(define-public python-aioitertools
2669 (package
2670 (name "python-aioitertools")
2671 (version "0.12.0")
2672 (source
2673 (origin
2674 (method url-fetch)
2675 (uri (pypi-uri "aioitertools" version))
2676 (sha256
2677 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
2678 (build-system pyproject-build-system)
2679 (arguments
2680 (list #:test-backend #~'custom
2681 #:test-flags #~(list "-m" "aioitertools.tests")))
2682 (native-inputs
2683 (list python-flit-core))
2684 (home-page "https://pypi.org/project/aioitertools/")
2685 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
2686 (description
2687 "This package provides an implementation of itertools, builtins, and more
2688for AsyncIO and mixed-type iterables.")
2689 (license license:expat)))
2690
2691(define-public python-aiosignal
2692 (package
2693 (name "python-aiosignal")
2694 (version "1.4.0")
2695 (source
2696 (origin
2697 (method url-fetch)
2698 (uri (pypi-uri "aiosignal" version))
2699 (sha256
2700 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
2701 (build-system pyproject-build-system)
2702 (arguments
2703 (list
2704 #:phases
2705 #~(modify-phases %standard-phases
2706 (add-after 'unpack 'avoid-pytest-cov-preload
2707 (lambda _
2708 (substitute* "pytest.ini"
2709 (("-p pytest_cov") "")))))))
2710 (native-inputs
2711 (list python-pytest
2712 python-pytest-asyncio
2713 python-setuptools))
2714 (propagated-inputs
2715 (list python-frozenlist))
2716 (home-page "https://github.com/aio-libs/aiosignal")
2717 (synopsis "Callback manager for Python @code{asyncio} projects")
2718 (description "This Python module provides @code{Signal}, an abstraction to
2719register asynchronous callbacks. The @code{Signal} abstraction can be used
2720for adding, removing and dropping callbacks.")
2721 (license license:asl2.0)))
2722
2723(define-public python-aiohttp
2724 (package
2725 (name "python-aiohttp")
2726 ;; TODO: Newer versions require zlib-ng:
2727 ;; <https://github.com/zlib-ng/zlib-ng>,
2728 ;; <https://github.com/pycompression/python-zlib-ng>.
2729 (version "3.11.18")
2730 (source
2731 (origin
2732 (method url-fetch)
2733 (uri (pypi-uri "aiohttp" version))
2734 (sha256
2735 (base32 "12jmkxkc5nnk6ma6m7rrs0w4vzswfc47ffxn5m0pwav1708nx1df"))
2736 (snippet
2737 #~(begin
2738 (use-modules ((guix build utils)))
2739 ;; TODO: Unbundle the llhttp sources.
2740 ;; (delete-file-recursively "vendor")
2741 (delete-file "aiohttp/_http_parser.c")
2742 (delete-file "aiohttp/_http_writer.c")))))
2743 (build-system pyproject-build-system)
2744 (arguments
2745 (list
2746 ;; tests: 3045 passed, 32 skipped, 29 xfailed, 2 subtests passed
2747 #:test-flags
2748 '(list
2749 "-o" "addopts=''" ; Avoid -p pytest_cov.
2750 "-m" "not dev_mode"
2751 "--numprocesses" (number->string (parallel-job-count))
2752 "--ignore=aiohttp/test_utils.py"
2753 ;; This tests requires the 'proxy.py' module, not yet packaged.
2754 "--ignore=tests/test_proxy_functional.py"
2755 ;; These tests need brotli.
2756 "--ignore=tests/test_web_sendfile_functional.py"
2757 "--ignore=tests/test_web_functional.py"
2758 ;; These tests need pytest_codspeed
2759 "--ignore-glob=tests/test_benchmarks*"
2760 ;; These tests need python_on_whales
2761 "--ignore=tests/autobahn/test_autobahn.py"
2762 "-k"
2763 ;; These tests fail for unknown reasons (see:
2764 ;; https://github.com/aio-libs/aiohttp/issues/7130)
2765 (string-append
2766 "not test_no_warnings "
2767 "and not test_default_loop "
2768 "and not test_ctor_global_loop "
2769 "and not test_set_loop_default_loop "
2770
2771 ;; Disable brotli tests, because we’re not providing that optional
2772 ;; library.
2773 "and not test_feed_eof_no_err_brotli "
2774
2775 ;; Disable the following tests as they require
2776 ;; networking.
2777 "and not TestDeflateBuffer "
2778 "and not test_client_session_timeout_zero "
2779 "and not test_empty_body "
2780 "and not test_mark_formdata_as_processed[pyloop] "
2781 "and not test_receive_runtime_err[pyloop] "
2782
2783 ;; assert 'gzip, deflate' == 'gzip, deflate, br'
2784 "and not test_headers[pyloop] "
2785 ;; ~/.. does not resolve
2786 "and not test_add_static_path_resolution"))
2787 #:phases
2788 '(modify-phases %standard-phases
2789 (add-after 'unpack 'fix-tests
2790 (lambda _
2791 ;; Make sure the timestamp of this file is > 1990, because a few
2792 ;; tests like test_static_file_if_modified_since_past_date depend
2793 ;; on it.
2794 (let ((late-90s (* 60 60 24 365 30)))
2795 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
2796 (add-before 'build 'cythonize
2797 (lambda _
2798 ;; Adapted from the Makefile.
2799 (with-directory-excursion "aiohttp"
2800 (for-each
2801 (lambda (file)
2802 (invoke "cython" "-3"
2803 file "-I" "."))
2804 (find-files "." "_.*\\.pyx$"))))))))
2805 (propagated-inputs
2806 (list python-aiohappyeyeballs
2807 python-aiosignal
2808 python-attrs
2809 python-frozenlist
2810 python-multidict
2811 python-propcache
2812 python-yarl))
2813 (native-inputs
2814 (list gunicorn-bootstrap
2815 python-cython
2816 python-freezegun
2817 python-isal
2818 python-pytest
2819 python-pytest-mock
2820 python-pytest-xdist
2821 python-re-assert
2822 python-setuptools))
2823 (home-page "https://github.com/aio-libs/aiohttp/")
2824 (synopsis "Async HTTP client/server framework (asyncio)")
2825 (description "@code{aiohttp} is an asynchronous HTTP client/server
2826framework.
2827
2828Its main features are:
2829@itemize
2830@item Supports both client and server side of HTTP protocol.
2831@item Supports both client and server Web-Sockets out-of-the-box without the
2832Callback Hell.
2833@item Web-server has middlewares and pluggable routing.
2834@end itemize")
2835 (license license:asl2.0)))
2836
2837(define-public python-aiohttp-oauthlib
2838 (package
2839 (name "python-aiohttp-oauthlib")
2840 (version "0.1.0")
2841 (source
2842 (origin
2843 (method url-fetch)
2844 (uri (pypi-uri "aiohttp-oauthlib" version))
2845 (sha256
2846 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
2847 (build-system pyproject-build-system)
2848 (arguments (list #:tests? #f)) ; none included
2849 (propagated-inputs (list python-aiohttp python-oauthlib))
2850 (native-inputs (list python-setuptools python-setuptools-scm))
2851 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
2852 (synopsis "OAuthlib authentication support for aiohttp")
2853 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
2854provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
2855 (license license:isc)))
2856
2857(define-public python-aiohttp-client-cache
2858 (package
2859 (name "python-aiohttp-client-cache")
2860 (version "0.14.3")
2861 (source
2862 (origin
2863 (method git-fetch)
2864 (uri (git-reference
2865 (url "https://github.com/requests-cache/aiohttp-client-cache")
2866 (commit (string-append "v" version))))
2867 (file-name (git-file-name name version))
2868 (sha256
2869 (base32
2870 "13xbmjjvcbzh3yh5z92mc0gwicwfjfq2av5jbqv09sbfzhggs92y"))))
2871 (build-system pyproject-build-system)
2872 (arguments
2873 (list
2874 #:test-flags #~(list "--ignore=test/integration/")))
2875 (native-inputs
2876 (list python-brotli
2877 python-faker
2878 python-hatchling
2879 python-pytest
2880 python-pytest-aiohttp
2881 python-pytest-asyncio
2882 python-types-aiofiles))
2883 (propagated-inputs
2884 (list python-aiohttp
2885 python-attrs
2886 python-itsdangerous
2887 python-url-normalize
2888 ;; [optional]
2889 python-aioboto3
2890 python-aiobotocore
2891 python-aiofiles
2892 python-aiosqlite
2893 python-pymongo
2894 python-redis))
2895 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
2896 (synopsis "Persistent cache for aiohttp requests")
2897 (description
2898 "This package is an asynchronous persistent caching library specifically
2899designed for @samp{aiohttp} requests in Python. With support for various
2900storage backends, it offers flexibility in how and where the cache is stored.
2901Please note that MongoDB and DynamoDB backends are not currently supported due
2902to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
2903 (license license:expat)))
2904
2905(define-public python-aiohttp-cors
2906 (package
2907 (name "python-aiohttp-cors")
2908 (version "0.8.1")
2909 (source
2910 (origin
2911 (method url-fetch)
2912 (uri (pypi-uri "aiohttp_cors" version))
2913 (sha256
2914 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
2915 (build-system pyproject-build-system)
2916 (arguments
2917 (list
2918 #:tests? #f)) ; network access is required to run tests
2919 (native-inputs
2920 (list python-setuptools
2921 python-wheel))
2922 (propagated-inputs
2923 (list python-aiohttp))
2924 (home-page "https://github.com/aio-libs/aiohttp-cors")
2925 (synopsis "CORS support for aiohttp")
2926 (description
2927 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
2928support for aiohttp asyncio-powered asynchronous HTTP server.")
2929 (license license:asl2.0)))
2930
2931(define-public python-aiohttp-retry
2932 (package
2933 (name "python-aiohttp-retry")
2934 (version "2.9.1")
2935 (source
2936 (origin
2937 (method git-fetch)
2938 (uri (git-reference
2939 (url "https://github.com/inyutin/aiohttp_retry")
2940 (commit (string-append "v" version))))
2941 (file-name (git-file-name name version))
2942 (sha256
2943 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
2944 (build-system pyproject-build-system)
2945 (native-inputs
2946 (list python-pytest
2947 python-pytest-aiohttp
2948 python-setuptools))
2949 (propagated-inputs
2950 (list python-aiohttp))
2951 (home-page "https://github.com/inyutin/aiohttp_retry")
2952 (synopsis "Simple retry client for aiohttp")
2953 (description
2954 "This package implements @code{RetryClient} for @code{aiohttp} to retry
2955connection to provided endpoint with timeouts logic or use:
2956
2957@itemize
2958@item @code{ExponentialRetry} with exponential backoff
2959@item @code{RandomRetry} for random backoff
2960@item @code{ListRetry} with backoff you predefine by list
2961@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
2962@item @code{JitterRetry} exponential retry with a bit of randomness
2963@end itemize")
2964 (license license:expat)))
2965
2966(define-public python-aiohttp-socks
2967 (package
2968 (name "python-aiohttp-socks")
2969 (version "0.10.1")
2970 (source
2971 (origin
2972 (method url-fetch)
2973 (uri (pypi-uri "aiohttp_socks" version))
2974 (sha256
2975 (base32
2976 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
2977 (build-system pyproject-build-system)
2978 (arguments (list #:tests? #false)) ;none included
2979 (propagated-inputs
2980 (list python-aiohttp python-socks))
2981 (native-inputs (list python-setuptools python-wheel))
2982 (home-page "https://github.com/romis2012/aiohttp-socks")
2983 (synopsis "SOCKS proxy connector for aiohttp")
2984 (description "This package provides a SOCKS proxy connector for
2985aiohttp. It supports SOCKS4(a) and SOCKS5.")
2986 (license license:asl2.0)))
2987
2988(define-public python-aiodns
2989 (package
2990 (name "python-aiodns")
2991 (version "3.5.0")
2992 (source
2993 (origin
2994 (method git-fetch)
2995 (uri (git-reference
2996 (url "https://github.com/saghul/aiodns")
2997 (commit (string-append "v" version))))
2998 (file-name (git-file-name name version))
2999 (sha256
3000 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
3001 (build-system pyproject-build-system)
3002 (arguments
3003 (list
3004 #:tests? #f)) ;tests require internet access
3005 (native-inputs
3006 (list python-pytest python-pytest-asyncio python-setuptools))
3007 (propagated-inputs (list python-pycares))
3008 (home-page "https://github.com/saghul/aiodns")
3009 (synopsis "Simple DNS resolver for asyncio")
3010 (description
3011 "@code{aiodns} provides a simple way for doing asynchronous DNS
3012resolutions with a synchronous looking interface by using
3013@url{https://github.com/saghul/pycares,pycares}.")
3014 (license license:expat)))
3015
3016(define-public python-aioquic
3017 (package
3018 (name "python-aioquic")
3019 (version "1.2.0")
3020 (source
3021 (origin
3022 (method url-fetch)
3023 (uri (pypi-uri "aioquic" version))
3024 (sha256
3025 (base32 "16bigrn5b46c7nmpzxhnlhh4y03hwc7dbd0mi5f8r53i7yxn64pr"))))
3026 (build-system pyproject-build-system)
3027 (arguments
3028 (list
3029 #:test-flags
3030 #~(list "-k" (string-join
3031 ;; AssertionError: AlertBadCertificate not raised
3032 (list "not test_verify_subject_no_subjaltname"
3033 ;; AttributeError: module
3034 ;; 'service_identity.cryptography' has no attribute
3035 ;; 'extract_patterns'
3036 "test_verify_subject_with_subjaltname"
3037 ;; AttributeError: module
3038 ;; 'service_identity.cryptography' has no attribute
3039 ;; 'extract_patterns'
3040 "test_verify_subject_with_subjaltname_ipaddress")
3041 " and not "))))
3042 (native-inputs
3043 (list nss-certs-for-test
3044 python-pytest
3045 python-setuptools
3046 python-wheel))
3047 (inputs
3048 (list openssl))
3049 (propagated-inputs
3050 (list python-certifi
3051 python-pylsqpack
3052 python-pyopenssl
3053 python-service-identity))
3054 (home-page "https://github.com/aiortc/aioquic")
3055 (synopsis "QUIC and HTTP3 implementation in Python")
3056 (description
3057 "@code{aioquic} is a library for the QUIC network protocol in Python.
3058It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
3059 (license license:bsd-3)))
3060
3061(define-public python-aiorpcx
3062 (package
3063 (name "python-aiorpcx")
3064 (version "0.25.0")
3065 (source
3066 (origin
3067 (method git-fetch)
3068 ;; PyPI misses the util.py file used for tests.
3069 (uri (git-reference
3070 (url "https://github.com/kyuupichan/aiorpcX")
3071 (commit version)))
3072 (file-name (git-file-name name version))
3073 (sha256
3074 (base32
3075 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
3076 (build-system pyproject-build-system)
3077 (arguments
3078 (list
3079 #:test-flags
3080 ;; This test opens a remote connection.
3081 #~(list "-k" "not test_create_connection_resolve_good")))
3082 (native-inputs (list python-pytest
3083 python-pytest-asyncio-0.26
3084 python-setuptools))
3085 (propagated-inputs
3086 (list python-attrs python-websockets))
3087 (home-page "https://github.com/kyuupichan/aiorpcX")
3088 (synopsis "Generic asyncio RPC implementation")
3089 (description
3090 "The aiorpcX library is a generic asyncio implementation of RPC suitable
3091for an application that is a client, server or both.
3092
3093The package includes a module with full coverage of JSON RPC versions 1.0 and
30942.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
3095comes with a SOCKS proxy client.")
3096 (license (list license:expat license:bsd-2))))
3097
3098(define-public python-aiostream
3099 (package
3100 (name "python-aiostream")
3101 (version "0.7.0")
3102 (source
3103 (origin
3104 (method git-fetch) ;no tests in PyPI archive
3105 (uri (git-reference
3106 (url "https://github.com/vxgmichel/aiostream")
3107 (commit (string-append "v" version))))
3108 (file-name (git-file-name name version))
3109 (sha256
3110 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
3111 (build-system pyproject-build-system)
3112 (native-inputs
3113 (list python-pytest python-pytest-asyncio python-setuptools))
3114 (propagated-inputs
3115 (list python-typing-extensions))
3116 (home-page "https://github.com/vxgmichel/aiostream")
3117 (synopsis "Generator-based operators for asynchronous iteration")
3118 (description "@code{aiostream} provides a collection of stream operators that can
3119be combined to create asynchronous pipelines of operations. It can be seen as an
3120asynchronous version of @code{itertools}, although some aspects are slightly
3121different. All the provided operators return a unified interface called a stream. A
3122stream is an enhanced asynchronous iterable.")
3123 (license license:gpl3)))
3124
3125(define-public python-asgiref
3126 (package
3127 (name "python-asgiref")
3128 (version "3.8.1")
3129 (source (origin
3130 (method url-fetch)
3131 (uri (pypi-uri "asgiref" version))
3132 (sha256
3133 (base32 "146mhkn3zp2bqf7j6r3chdlvfzgs5x1lrnqahsllgjdyl20bshy3"))))
3134 (build-system pyproject-build-system)
3135 (native-inputs
3136 (list python-pytest
3137 python-pytest-asyncio
3138 python-setuptools
3139 python-wheel))
3140 (home-page "https://github.com/django/asgiref/")
3141 (synopsis "ASGI specs, helper code, and adapters")
3142 (description
3143 "ASGI is a standard for Python asynchronous web apps and servers to
3144communicate with each other, and positioned as an asynchronous successor to
3145WSGI. This package includes libraries for implementing ASGI servers.")
3146 (license license:bsd-3)))
3147
3148(define-public python-asgi-csrf
3149 (package
3150 (name "python-asgi-csrf")
3151 (version "0.11")
3152 (source (origin
3153 (method git-fetch) ;for tests
3154 (uri (git-reference
3155 (url "https://github.com/simonw/asgi-csrf")
3156 (commit version)))
3157 (file-name (git-file-name name version))
3158 (sha256
3159 (base32
3160 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))))
3161 (build-system pyproject-build-system)
3162 (propagated-inputs (list python-itsdangerous python-multipart))
3163 (native-inputs (list python-asgi-lifespan
3164 python-httpx
3165 python-pytest
3166 python-pytest-asyncio
3167 python-starlette
3168 python-setuptools
3169 python-wheel))
3170 (home-page "https://github.com/simonw/asgi-csrf")
3171 (synopsis "ASGI middleware for protecting against CSRF attacks")
3172 (description "This Asynchronous Server Gateway Interface (ASGI)
3173middleware protects against Cross-site request forgery (CSRF) attacks.
3174It implements the Double Submit Cookie pattern, where a cookie is set
3175that is then compared to a @code{csrftoken} hidden form field or a
3176@code{x-csrftoken} HTTP header.")
3177 (license license:asl2.0)))
3178
3179(define-public python-asgi-lifespan
3180 (package
3181 (name "python-asgi-lifespan")
3182 (version "2.1.0")
3183 (source (origin
3184 (method git-fetch) ;for tests
3185 (uri (git-reference
3186 (url "https://github.com/florimondmanca/asgi-lifespan")
3187 (commit version)))
3188 (file-name (git-file-name name version))
3189 (sha256
3190 (base32
3191 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
3192 (build-system pyproject-build-system)
3193 (arguments
3194 (list
3195 #:test-flags
3196 '(list "-k"
3197 (string-append
3198 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
3199 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
3200 " or test_lifespan_manager[trio-None-BodyFailed-None]"
3201 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
3202 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
3203 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
3204 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
3205 " or test_lifespan_timeout[trio-slow_shutdown]"
3206 " or test_lifespan_not_supported[trio-http_only]"
3207 " or test_lifespan_not_supported[trio-http_no_assert]"
3208 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
3209 ")"))
3210 #:phases
3211 '(modify-phases %standard-phases
3212 (add-after 'unpack 'compatibility
3213 (lambda _
3214 ;; httpx version 0.28.0 removed the "app" shortcut.
3215 (substitute* "tests/test_manager.py"
3216 (("app=manager.app")
3217 "transport=httpx.ASGITransport(manager.app)")))))))
3218 (native-inputs (list python-httpx
3219 python-pytest
3220 python-pytest-asyncio
3221 python-pytest-trio
3222 python-starlette
3223 python-setuptools
3224 python-wheel))
3225 (propagated-inputs (list python-sniffio))
3226 (home-page "https://github.com/florimondmanca/asgi-lifespan")
3227 (synopsis "Programmatic startup/shutdown of ASGI apps")
3228 (description "Programmatically send startup/shutdown lifespan events
3229into Asynchronous Server Gateway Interface (ASGI) applications. When
3230used in combination with an ASGI-capable HTTP client such as HTTPX, this
3231allows mocking or testing ASGI applications without having to spin up an
3232ASGI server.")
3233 (license license:expat)))
3234
3235(define-public python-a2wsgi
3236 (package
3237 (name "python-a2wsgi")
3238 (version "1.10.7")
3239 (source (origin
3240 (method url-fetch)
3241 (uri (pypi-uri "a2wsgi" version))
3242 (sha256
3243 (base32
3244 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
3245 (build-system pyproject-build-system)
3246 (arguments
3247 (list
3248 #:test-flags
3249 #~(list "-k" (string-join
3250 (list "not test_starlette_stream_response"
3251 "test_starlette_base_http_middleware"
3252 "test_baize_stream_response"
3253 ;; Fails because of harmless whitespace differences.
3254 "test_wsgi_post")
3255 " and not "))
3256 #:build-backend "pdm.backend"))
3257 (native-inputs
3258 (list python-pdm-backend
3259 python-pytest
3260 ;; python-baize ; not packed yet
3261 python-httpx-bootstrap
3262 ;; Cycle: python-a2wsgi->python-uvicorn->
3263 ;; python-httpx->python-starlette->python-a2wsgi
3264 ;; python-starlette
3265 python-pytest-asyncio))
3266 (home-page "https://github.com/abersheeran/a2wsgi")
3267 (synopsis "Convert WSGI to ASGI or vice versa")
3268 (description
3269 "This program converts a WSGI program to an ASGI program or the other
3270way around. It depends only on the Python standard library.")
3271 (license license:asl2.0)))
3272
3273(define-public python-httpauth
3274 (package
3275 (name "python-httpauth")
3276 (version "0.4.1")
3277 (source (origin
3278 (method url-fetch)
3279 (uri (pypi-uri "httpauth" version))
3280 (sha256
3281 (base32
3282 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
3283 (build-system pyproject-build-system)
3284 (native-inputs (list python-pytest python-setuptools python-wheel))
3285 (home-page "https://github.com/jonashaag/httpauth")
3286 (synopsis "WSGI HTTP Digest Authentication middleware")
3287 (description "@code{python-httpauth} is WSGI middleware that secures some/all
3288routes using HTTP Digest Authentication.")
3289 (license license:bsd-2)))
3290
3291(define-public python-css-html-js-minify
3292 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
3293 (revision "0"))
3294 (package
3295 (name "python-css-html-js-minify")
3296 (version (git-version "2.5.5" revision commit))
3297 (source
3298 (origin
3299 (method git-fetch)
3300 (uri (git-reference
3301 (url "https://github.com/juancarlospaco/css-html-js-minify")
3302 (commit commit)))
3303 (file-name (git-file-name name version))
3304 (sha256
3305 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
3306 (build-system pyproject-build-system)
3307 (arguments
3308 (list
3309 #:phases
3310 #~(modify-phases %standard-phases
3311 (add-after 'unpack 'relax-requirements
3312 (lambda _
3313 (substitute* "setup.cfg"
3314 (("^tests_require.*") "")))))))
3315 (native-inputs (list python-pytest python-setuptools))
3316 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
3317 (synopsis "CSS/HTML/JS minifier")
3318 (description
3319 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
3320 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
3321 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
3322 ;; looks like the user can choose a license.
3323 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
3324
3325(define-public python-aws-sam-translator
3326 (package
3327 (name "python-aws-sam-translator")
3328 (version "1.107.0")
3329 (source
3330 (origin
3331 (method git-fetch) ; no tests in PyPI release
3332 (uri (git-reference
3333 (url "https://github.com/aws/serverless-application-model")
3334 (commit (string-append "v" version))))
3335 (file-name (git-file-name name version))
3336 (sha256
3337 (base32 "0bx9ha9k6zx6gl1hsgm6cpq4xrfn604v2g1d5dh2d5zq0463gwfq"))))
3338 (build-system pyproject-build-system)
3339 (arguments
3340 (list
3341 #:test-flags
3342 #~(list "--numprocesses" (number->string (parallel-job-count))
3343 "--ignore=tests/bin/test_public_interface.py"
3344 "tests")
3345 #:phases
3346 #~(modify-phases %standard-phases
3347 (add-before 'check 'pre-check
3348 (lambda _
3349 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
3350 (native-inputs
3351 (list python-pytest
3352 python-pytest-rerunfailures
3353 python-pytest-xdist
3354 python-parameterized
3355 python-pyyaml
3356 python-setuptools))
3357 (propagated-inputs
3358 (list python-boto3
3359 python-jsonschema
3360 python-pydantic
3361 python-typing-extensions))
3362 (home-page "https://github.com/aws/serverless-application-model")
3363 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
3364 (description
3365 "AWS SAM Translator is a library that transform @dfn{Serverless Application
3366Model} (SAM) templates into AWS CloudFormation templates.")
3367 (license license:asl2.0)))
3368
3369(define-public python-aws-xray-sdk
3370 (package
3371 (name "python-aws-xray-sdk")
3372 (version "2.14.0")
3373 (home-page "https://github.com/aws/aws-xray-sdk-python")
3374 (source (origin
3375 (method git-fetch)
3376 (uri (git-reference (url home-page) (commit version)))
3377 (file-name (git-file-name name version))
3378 (sha256
3379 (base32
3380 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
3381 (build-system pyproject-build-system)
3382 (arguments
3383 (list
3384 #:test-flags
3385 '(list ;; Tries to connect to external network resources
3386 "--ignore=tests/ext/aiohttp/test_client.py"
3387 "--ignore=tests/ext/httplib/test_httplib.py"
3388 "--ignore=tests/ext/httpx"
3389 "--ignore=tests/ext/requests/test_requests.py"
3390 ;; TODO: How to configure Django for these tests?
3391 "--ignore=tests/ext/django"
3392 ;; These tests require packages not yet in Guix.
3393 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
3394 "--ignore=tests/ext/aiohttp/test_middleware.py"
3395 "--ignore=tests/ext/pg8000/test_pg8000.py"
3396 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
3397 "--ignore=tests/ext/pymysql/test_pymysql.py"
3398 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
3399 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
3400 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
3401 "--ignore=tests/test_async_recorder.py"
3402 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
3403 "--ignore-glob=tests/ext/sqlalchemy*"
3404 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
3405 ;; FIXME: Why is this failing?
3406 "--ignore=tests/test_patcher.py"
3407 "--ignore=tests/test_lambda_context.py")
3408 #:phases
3409 '(modify-phases %standard-phases
3410 (add-before 'check 'pre-check
3411 (lambda _
3412 ;; Allow "import tests.utils" to work as expected.
3413 (setenv "PYTHONPATH" (getcwd)))))))
3414 (native-inputs
3415 (list ;; These are required for the test suite.
3416 python-aiohttp
3417 python-bottle
3418 python-flask
3419 python-flask-sqlalchemy
3420 python-httpx
3421 python-mock
3422 python-pymysql
3423 python-pytest
3424 python-pytest-asyncio-0.26
3425 python-pytest-benchmark
3426 python-setuptools
3427 python-sqlalchemy
3428 python-webtest))
3429 (propagated-inputs
3430 (list python-botocore
3431 python-jsonpickle
3432 python-requests
3433 python-wrapt))
3434 (synopsis "Profile applications on AWS X-Ray")
3435 (description
3436 "The AWS X-Ray SDK for Python enables Python developers to record and
3437emit information from within their applications to the AWS X-Ray service.")
3438 (license license:asl2.0)))
3439
3440(define-public python-publicsuffixlist
3441 (package
3442 (name "python-publicsuffixlist")
3443 (version "1.0.2.20250202")
3444 (source
3445 (origin
3446 (method url-fetch)
3447 (uri (pypi-uri "publicsuffixlist" version))
3448 (sha256
3449 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
3450 (build-system pyproject-build-system)
3451 (arguments (list #:test-backend #~'unittest))
3452 (native-inputs (list python-setuptools))
3453 (home-page "https://github.com/ko-zu/psl")
3454 (synopsis "Public suffix list for Python")
3455 (description
3456 "This package provides an implementation of
3457@url{https://publicsuffix.org/, Public Suffix List } as Python library.
3458
3459Features:
3460@itemize
3461@item supports IDN (unicode and punycoded)
3462@item shipped with built-in PSL and an updater script
3463@item written in Pure Python with no library dependencies
3464@end itemize")
3465 (license license:mpl2.0)))
3466
3467(define-public python-pycognito
3468 (package
3469 (name "python-pycognito")
3470 (version "2024.5.1")
3471 (source
3472 (origin
3473 (method url-fetch)
3474 (uri (pypi-uri "pycognito" version))
3475 (sha256
3476 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
3477 (build-system pyproject-build-system)
3478 (arguments
3479 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
3480 (list #:tests? #f))
3481 (native-inputs
3482 (list python-setuptools))
3483 (propagated-inputs
3484 (list python-boto3
3485 python-envs
3486 python-pyjwt
3487 python-requests))
3488 (home-page "https://github.com/pvizeli/pycognito")
3489 (synopsis "Python library for using AWS Cognito")
3490 (description
3491 "This package provides a Python class to integrate Boto3's Cognito
3492client so it is easy to login users, with @acronym{Secure Remote Password,
3493SRP} support.")
3494 (license license:asl2.0)))
3495
3496(define-public python-pydap
3497 (package
3498 (name "python-pydap")
3499 (version "3.5.10")
3500 (source
3501 (origin
3502 (method git-fetch)
3503 (uri (git-reference
3504 (url "https://github.com/pydap/pydap")
3505 (commit version)))
3506 (file-name (git-file-name name version))
3507 (sha256
3508 (base32 "000b7jqjpx71miwxhbi07amyjyijq925x9x3paa7kzrr268klc2z"))))
3509 (build-system pyproject-build-system)
3510 (arguments
3511 (list
3512 ;; tests: 435 passed, 6 skipped
3513 #:test-flags
3514 ;; Tests need extra packaging.
3515 #~(list "--ignore=src/pydap/tests/test_wsgi_functions.py"
3516 "--ignore=src/pydap/tests/test_wsgi_ssf.py"
3517 ;; Network access is required.
3518 "--ignore=src/pydap/tests/test_client.py"
3519 "--ignore=src/pydap/tests/test_handlers_dap.py"
3520 "--ignore=src/pydap/tests/test_open_dap4_url.py"
3521 "--ignore=src/pydap/tests/test_virtualizarr.py")))
3522 (native-inputs
3523 (list nss-certs-for-test
3524 python-requests-mock
3525 python-pytest
3526 python-setuptools
3527 python-setuptools-scm
3528 python-webtest))
3529 (propagated-inputs
3530 (list python-beautifulsoup4
3531 python-jinja2
3532 python-lxml
3533 python-numpy
3534 python-requests
3535 python-requests-cache
3536 python-scipy
3537 python-webob
3538 ;; [optional]
3539 gunicorn
3540 python-docopt-ng
3541 ;; python-coards ;not packaged yet in Guix
3542 python-fastparquet
3543 ;; python-gsw ;not packaged yet in Guix
3544 python-netcdf4
3545 python-openpyxl
3546 python-pastedeploy
3547 python-werkzeug))
3548 (home-page "https://pydap.github.io/pydap/en/intro.html")
3549 (synopsis "Data Access Protocol implementation in Python")
3550 (description
3551 "This package provides a pure Python implementation of the Data Access
3552Protocol (DAP, aka OPeNDAP).")
3553 (license license:expat)))
3554
3555(define-public python-python3-saml
3556 (package
3557 (name "python-python3-saml")
3558 (version "1.16.0")
3559 (source
3560 (origin
3561 (method git-fetch)
3562 (uri (git-reference
3563 (url "https://github.com/SAML-Toolkits/python3-saml")
3564 (commit (string-append "v" version))))
3565 (file-name (git-file-name name version))
3566 (sha256
3567 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
3568 (build-system pyproject-build-system)
3569 (arguments
3570 (list
3571 ;; 214 tests pass, 50 fail; many fail because of required Internet
3572 ;; access or because of assumptions about the location of test files.
3573 #:tests? #false))
3574 (native-inputs
3575 (list python-freezegun
3576 python-poetry-core))
3577 (inputs
3578 (list xmlsec-openssl))
3579 (propagated-inputs
3580 (list python-isodate
3581 python-lxml
3582 python-xmlsec))
3583 (home-page "https://github.com/SAML-Toolkits/python3-saml")
3584 (synopsis "Saml Python toolkit")
3585 (description
3586 "The SAML Python Toolkit lets you add SAML support to your Python
3587software.")
3588 (license license:expat)))
3589
3590(define-public python-ovh
3591 (package
3592 (name "python-ovh")
3593 (version "1.1.0")
3594 (source (origin
3595 (method url-fetch)
3596 (uri (pypi-uri "ovh" version))
3597 (sha256
3598 (base32
3599 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
3600 (build-system pyproject-build-system)
3601 (arguments (list #:tests? #f)) ; XXX: tests require networking
3602 (propagated-inputs (list python-requests))
3603 (native-inputs (list python-setuptools))
3604 (home-page "https://api.ovh.com")
3605 (synopsis "Interact with OVHcloud APIs")
3606 (description "This package provides the official module to perform HTTP requests
3607to the OVHcloud APIs.")
3608 (license license:bsd-3)))
3609
3610(define-public python-cbor2
3611 (package
3612 (name "python-cbor2")
3613 (version "5.4.2.post1")
3614 (source
3615 (origin
3616 (method url-fetch)
3617 (uri (pypi-uri "cbor2" version))
3618 (sha256
3619 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
3620 (build-system pyproject-build-system)
3621 (native-inputs
3622 (list python-pytest python-setuptools python-setuptools-scm))
3623 (home-page "https://github.com/agronholm/cbor2")
3624 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
3625 (description "This Python library provides encoding and decoding for the
3626Concise Binary Object
3627Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
36288949}) serialization format. The specification is fully compatible with the
3629original RFC 7049. Among its features are:
3630@itemize
3631@item Simple API like the @code{json} or @code{pickle} modules.
3632@item Support many CBOR tags with stdlib objects.
3633@item Generic tag decoding.
3634@item Shared value references including cyclic references.
3635@item String references compact encoding with repeated strings replaced with
3636indices.
3637@item Optional C module backend tested on big- and little-endian architectures.
3638@item Extensible tagged value handling using tag_hook and object_hook on
3639decode and default on encode.
3640@end itemize")
3641 (license license:expat)))
3642
3643(define-public python-cfn-lint
3644 (package
3645 (name "python-cfn-lint")
3646 (version "1.38.1")
3647 (source
3648 (origin
3649 (method git-fetch)
3650 (uri (git-reference
3651 (url "https://github.com/aws-cloudformation/cfn-lint")
3652 (commit (string-append "v" version))))
3653 (file-name (git-file-name name version))
3654 (sha256
3655 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
3656 (build-system pyproject-build-system)
3657 (arguments
3658 (list
3659 ;; tests: 2136 passed, 11 deselected, 1 warning
3660 #:test-flags
3661 #~(list "--ignore=test/integration/"
3662 "-k" (string-join
3663 ;; Tests failing on doctest or comparing diff.
3664 (list "not test_build_graph"
3665 "test_good_template"
3666 "test_success_run"
3667 "test_update_docs"
3668 ;; ImportError: Missing optional dependencies sarif
3669 "test_sarif_formatter")
3670 " and not "))
3671 #:phases
3672 #~(modify-phases %standard-phases
3673 (add-after 'unpack 'remove-deprecated
3674 (lambda _
3675 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
3676 (("deprecated\": \"2025")
3677 "deprecated\": \"2125")))))))
3678 (native-inputs
3679 (list python-defusedxml
3680 python-pydot
3681 python-pytest
3682 python-setuptools))
3683 (propagated-inputs
3684 (list python-aws-sam-translator
3685 python-jsonpatch
3686 python-networkx
3687 python-pyyaml
3688 python-regex
3689 python-sympy
3690 python-typing-extensions
3691 ;; [optional]
3692 python-junit-xml))
3693 (home-page "https://github.com/aws-cloudformation/cfn-lint")
3694 (synopsis "Validate CloudFormation templates")
3695 (description
3696 "This package lets you validate CloudFormation YAML/JSON templates against
3697the CloudFormation spec and additional checks. Includes checking valid values
3698for resource properties and best practices.")
3699 (license license:expat)))
3700
3701(define-public python-pyzabbix
3702 (package
3703 (name "python-pyzabbix")
3704 (version "1.3.1")
3705 (source
3706 (origin
3707 (method git-fetch)
3708 (uri (git-reference
3709 (url "https://github.com/lukecyca/pyzabbix")
3710 (commit version)))
3711 (file-name (git-file-name name version))
3712 (sha256
3713 (base32 "1dbs3bz1mjlvlg46ikhg5j7agwni61ljlpiziknklv95yp29n86v"))))
3714 (build-system pyproject-build-system)
3715 (arguments
3716 (list #:test-flags #~(list "tests")))
3717 (native-inputs
3718 (list python-pytest
3719 python-requests-mock
3720 python-setuptools))
3721 (propagated-inputs
3722 (list python-packaging
3723 python-requests))
3724 (home-page "https://github.com/lukecyca/pyzabbix")
3725 (synopsis "Python interface to the Zabbix API")
3726 (description
3727 "@code{pyzabbix} is a Python module for working with the Zabbix API.")
3728 (license license:lgpl2.1+)))
3729
3730(define-public python-requests-cache
3731 (package
3732 (name "python-requests-cache")
3733 (version "1.2.1")
3734 (source
3735 (origin
3736 (method url-fetch)
3737 (uri (pypi-uri "requests_cache" version))
3738 (sha256
3739 (base32 "1l8i4l2pd26gbrlcdb5z056wvsqfr3vvbyqq2f8x1f65zn3ckav8"))))
3740 (build-system pyproject-build-system)
3741 (arguments
3742 (list
3743 #:test-flags
3744 #~(list "--numprocesses" (number->string (parallel-job-count))
3745 ;; These tests require access to external services, e.g. MongoDB
3746 ;; and Redis.
3747 "--ignore=tests/integration"
3748 ;; AttributeError: <class 'requests.adapters.HTTPAdapter'> does
3749 ;; not have the attribute 'get_connection_with_tls_context'
3750 "-k" "not test_mock_session")
3751 #:phases
3752 #~(modify-phases %standard-phases
3753 (add-before 'check 'pre-check
3754 (lambda _
3755 ;; PermissionError: [Errno 13] Permission denied:
3756 ;; '/homeless-shelter'
3757 (setenv "HOME" "/tmp"))))))
3758 (native-inputs
3759 (list python-poetry-core
3760 python-pytest
3761 python-pytest-rerunfailures
3762 python-pytest-xdist
3763 python-requests-mock
3764 python-responses
3765 python-rich
3766 python-tenacity
3767 python-time-machine
3768 python-timeout-decorator))
3769 (propagated-inputs
3770 (list python-attrs
3771 python-boto3
3772 python-bson
3773 python-cattrs
3774 python-itsdangerous
3775 python-orjson
3776 python-platformdirs
3777 python-pymongo
3778 python-pyyaml
3779 python-redis
3780 python-requests
3781 python-ujson
3782 python-url-normalize
3783 python-urllib3))
3784 (home-page "https://github.com/requests-cache/requests-cache")
3785 (synopsis "Persistent HTTP cache for Python requests")
3786 (description
3787 "This package provides a drop-in replacement for @code{requests.Session}
3788with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
3789responses as planin JSON/YAML file or save responses as plain JSON/YAML
3790files.")
3791 (license license:bsd-2)))
3792
3793(define-public python-requests-futures
3794 (package
3795 (name "python-requests-futures")
3796 (version "1.0.2")
3797 (source
3798 (origin
3799 (method url-fetch)
3800 (uri (pypi-uri "requests_futures" version))
3801 (sha256
3802 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
3803 (build-system pyproject-build-system)
3804 (native-inputs
3805 (list python-greenlet
3806 python-pytest
3807 python-pytest-httpbin
3808 python-setuptools
3809 python-werkzeug))
3810 (propagated-inputs (list python-requests))
3811 (home-page "https://github.com/ross/requests-futures")
3812 (synopsis "Asynchronous Python HTTP for Humans")
3813 (description
3814 "This package provides and add-on the Python Requests HTTP library to run
3815code asynchronously.")
3816 (license license:asl2.0)))
3817
3818(define-public python-requests-unixsocket
3819 (package
3820 (name "python-requests-unixsocket")
3821 (version "0.4.1")
3822 (source
3823 (origin
3824 (method git-fetch)
3825 (uri (git-reference
3826 (url "https://github.com/msabramo/requests-unixsocket")
3827 (commit (string-append "v" version))))
3828 (file-name (git-file-name name version))
3829 (sha256
3830 (base32 "1f0pi31xqzm3cdag4s4gpdj36x169jwc8ibqvcwqz6h9c0pklf3n"))))
3831 (build-system pyproject-build-system)
3832 (native-inputs
3833 (list python-pytest
3834 python-setuptools
3835 python-setuptools-scm
3836 python-waitress))
3837 (propagated-inputs
3838 (list python-requests))
3839 (home-page "https://github.com/msabramo/requests-unixsocket")
3840 (synopsis "Use requests to talk HTTP via a UNIX domain socket")
3841 (description
3842 "This package provides an extension to @code{requests} which let it talk
3843HTTP via a UNIX domain socket.")
3844 (license license:asl2.0)))
3845
3846(define-public python-s3path
3847 (package
3848 (name "python-s3path")
3849 (version "0.6.4")
3850 (source
3851 (origin
3852 (method url-fetch)
3853 (uri (pypi-uri "s3path" version))
3854 (sha256
3855 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
3856 (build-system pyproject-build-system)
3857 (arguments
3858 (list
3859 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
3860 #:tests? #f))
3861 (native-inputs
3862 (list python-setuptools
3863 python-wheel))
3864 (propagated-inputs
3865 (list python-boto3
3866 python-smart-open))
3867 (home-page "https://github.com/liormizr/s3path")
3868 (synopsis "Pathlib extension for AWS S3 Service")
3869 (description
3870 "S3Path provide a Python convenient File-System/Path like interface for
3871AWS S3 Service using boto3 S3 resource as a driver.")
3872 (license license:asl2.0)))
3873
3874(define-public python-falcon
3875 (package
3876 (name "python-falcon")
3877 (version "4.0.2")
3878 (source
3879 (origin
3880 ;; Use git, as there are some test files missing from the PyPI release,
3881 ;; such as 'examples' directory.
3882 (method git-fetch)
3883 (uri (git-reference
3884 (url "https://github.com/falconry/falcon")
3885 (commit version)))
3886 (file-name (git-file-name name version))
3887 (sha256
3888 (base32
3889 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
3890 (build-system pyproject-build-system)
3891 (arguments
3892 (list
3893 #:test-flags
3894 '(list "-k" "not slow"
3895 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
3896 #:phases
3897 '(modify-phases %standard-phases
3898 (add-before 'check 'pre-check
3899 (lambda _
3900 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
3901 (setenv "FALCON_TESTING_SESSION" "Y")
3902 (setenv "PYTHONASYNCIODEBUG" "1")
3903 (setenv "HOME" "/tmp"))))))
3904 (propagated-inputs
3905 (list python-mimeparse))
3906 (native-inputs
3907 (list python-aiofiles
3908 python-cbor2
3909 python-cython ;for faster binaries
3910 python-fakeredis
3911 python-httpx
3912 python-mujson
3913 python-msgpack
3914 python-orjson
3915 python-pecan
3916 python-pillow
3917 python-pytest
3918 python-pytest-asyncio
3919 python-pyyaml
3920 python-rapidjson
3921 python-requests
3922 python-setuptools
3923 python-testtools
3924 python-ujson
3925 python-websockets
3926 python-wheel))
3927 (home-page "https://falconframework.org")
3928 (synopsis "Web framework for building APIs and application backends")
3929 (description "Falcon is a web API framework for building microservices,
3930application backends and higher-level frameworks. Among its features are:
3931@itemize
3932@item Optimized and extensible code base
3933@item Routing via URI templates and REST-inspired resource
3934classes
3935@item Access to headers and bodies through request and response
3936classes
3937@item Request processing via middleware components and hooks
3938@item Idiomatic HTTP error responses
3939@item Straightforward exception handling
3940@item Unit testing support through WSGI helpers and mocks
3941@item Compatible with both CPython and PyPy
3942@item Cython support for better performance when used with CPython
3943@end itemize")
3944 (license license:asl2.0)))
3945
3946(define-public python-falcon-cors
3947 (package
3948 (name "python-falcon-cors")
3949 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
3950 (revision . "0")))
3951 (version (git-version "1.1.7"
3952 (assoc-ref properties 'revision)
3953 (assoc-ref properties 'commit)))
3954 (source
3955 (origin
3956 (method git-fetch)
3957 (uri (git-reference
3958 (url "https://github.com/lwcolton/falcon-cors")
3959 (commit (assoc-ref properties 'commit))))
3960 (file-name (git-file-name name version))
3961 (sha256
3962 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
3963 (build-system pyproject-build-system)
3964 (arguments
3965 (list
3966 ;; XXX: The last commit's tests are incompatible with the more recent
3967 ;; version of python-falcon.
3968 #:tests? #f))
3969 (native-inputs
3970 (list python-falcon python-mock python-pynose python-setuptools))
3971 (home-page "https://github.com/lwcolton/falcon-cors")
3972 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
3973 (description
3974 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
3975support for Falcon. It allows applying a specially crafted CORS object to the
3976incoming requests, enabling the ability to serve resources over a different
3977origin than that of the web application.")
3978 (license license:asl2.0)))
3979
3980(define-public python-furl
3981 (package
3982 (name "python-furl")
3983 (version "2.1.4")
3984 (source
3985 (origin
3986 (method url-fetch)
3987 (uri (pypi-uri "furl" version))
3988 (sha256
3989 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
3990 (build-system pyproject-build-system)
3991 (arguments
3992 (list #:test-flags
3993 #~(list "-k" (string-append "not test_hosts"
3994 " and not test_netloc"
3995 " and not test_odd_urls"))))
3996 (propagated-inputs
3997 (list python-orderedmultidict python-six))
3998 (native-inputs
3999 (list python-pytest python-setuptools python-wheel))
4000 (home-page "https://github.com/gruns/furl")
4001 (synopsis "URL manipulation in Python")
4002 (description "Furl provides an easy-to-use alternative to the
4003@code{urllib} and @code{urlparse} modules for manipulating URLs.")
4004 (license license:unlicense)))
4005
4006(define-public python-httplib2
4007 (package
4008 (name "python-httplib2")
4009 (version "0.31.2")
4010 (source
4011 (origin
4012 (method git-fetch)
4013 (uri (git-reference
4014 (url "https://github.com/httplib2/httplib2")
4015 (commit (string-append "v" version))))
4016 (file-name (git-file-name name version))
4017 (sha256
4018 (base32
4019 "0wdnf4rhw9ar8b15lzvif11ibnnpqkfif3alkhkfywy3ikk8nrxb"))))
4020 (build-system pyproject-build-system)
4021 (arguments
4022 (list
4023 #:phases
4024 #~(modify-phases %standard-phases
4025 (add-after 'unpack 'adjust-test-requirements
4026 (lambda _
4027 (substitute* "requirements-test.txt"
4028 (("==") ">=")))))))
4029 (propagated-inputs
4030 (list python-pyparsing
4031 python-pysocks))
4032 (native-inputs
4033 (list python-cryptography
4034 python-mock
4035 python-pytest
4036 python-pytest-randomly
4037 python-pytest-timeout
4038 python-setuptools))
4039 (home-page "https://github.com/httplib2/httplib2")
4040 (synopsis "Comprehensive HTTP client library")
4041 (description
4042 "A comprehensive HTTP client library supporting many features left out of
4043other HTTP libraries.")
4044 (license license:expat)))
4045
4046(define-public python-cheroot
4047 (package
4048 (name "python-cheroot")
4049 (version "11.1.2")
4050 (source
4051 (origin
4052 (method git-fetch)
4053 (uri (git-reference
4054 (url "https://github.com/cherrypy/cheroot")
4055 (commit (string-append "v" version))))
4056 (file-name (git-file-name name version))
4057 (sha256
4058 (base32 "02rhci01m5fcn8mqpvq3c35rs4n28gxlfvfw2if2f85rgwrji8y8"))))
4059 (build-system pyproject-build-system)
4060 (arguments
4061 (list
4062 #:phases
4063 #~(modify-phases %standard-phases
4064 (add-after 'unpack 'fix-pytest-config
4065 (lambda _
4066 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
4067 (delete-file "pytest.ini"))))))
4068 (native-inputs
4069 (list python-portend
4070 python-pyopenssl
4071 python-pypytools
4072 python-pytest
4073 python-pytest-mock
4074 python-requests
4075 python-requests-toolbelt
4076 python-requests-unixsocket2
4077 python-setuptools
4078 python-setuptools-scm
4079 python-trustme))
4080 (propagated-inputs
4081 (list python-jaraco-functools
4082 python-more-itertools))
4083 (home-page "https://cheroot.cherrypy.dev")
4084 (synopsis "Highly-optimized, pure-python HTTP server")
4085 (description
4086 "Cheroot is a high-performance, pure-Python HTTP server.")
4087 (license license:bsd-3)))
4088
4089(define-public python-cherrypy
4090 (package
4091 (name "python-cherrypy")
4092 (properties '((commit . "1f75bc9eed8e0e385f64f368bd69f58d96fb8c2b")
4093 (revision . "0")))
4094 (version (git-version "18.10.0"
4095 (assoc-ref properties 'revision)
4096 (assoc-ref properties 'commit)))
4097 (source
4098 (origin
4099 (method git-fetch)
4100 (uri (git-reference
4101 (url "https://github.com/cherrypy/cherrypy")
4102 (commit (assoc-ref properties 'commit))))
4103 (file-name (git-file-name name version))
4104 (sha256
4105 (base32 "1l01a4sbfm42s5xp6ngphgqf0yb65ksqbsb27kznvybblyaxfa9p"))))
4106 (build-system pyproject-build-system)
4107 (arguments
4108 (list
4109 #:test-flags
4110 #~(map
4111 (lambda (test)
4112 (string-append "--deselect=cherrypy/test/" test))
4113 (list
4114 ;; Requires bumping python-flaky.
4115 "test_bus.py::test_wait_publishes_periodically"
4116 "test_bus.py::test_block"
4117 "test_bus.py::test_start_with_callback"
4118 "test_refleaks.py::ReferenceTests::test_threadlocal_garbage"
4119 "test_session.py::SessionTest::test_0_Session"
4120 "test_session.py::SessionTest::test_2_File_Concurrency"
4121 ;; assert b'RamSession' == b'FileSession' or FileNotFoundError
4122 "test_session.py::SessionTest::test_3_Redirect"
4123 "test_session.py::SessionTest::test_4_File_deletion"))
4124 #:phases
4125 #~(modify-phases %standard-phases
4126 (add-after 'unpack 'fix-pytest-config
4127 (lambda _
4128 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
4129 (delete-file "pytest.ini")))
4130 (add-after 'unpack 'patch-pyproject
4131 (lambda _
4132 (substitute* "pyproject.toml"
4133 (("\"cherrypy.scaffold\",")
4134 (string-join
4135 (list "\"cherrypy.scaffold\""
4136 "\"cherrypy._private_api\""
4137 "\"cherrypy._private_api.compat\",")
4138 ",\n "))))))))
4139 (propagated-inputs
4140 (list python-cheroot
4141 python-filelock
4142 python-jaraco-collections
4143 python-more-itertools
4144 python-portend
4145 python-zc-lockfile))
4146 (native-inputs
4147 (list python-flaky
4148 python-objgraph
4149 python-path
4150 python-pytest
4151 python-pytest-forked
4152 python-pytest-services
4153 python-pytest-sugar
4154 python-requests-toolbelt
4155 python-setuptools
4156 python-setuptools-scm))
4157 (home-page "https://www.cherrypy.dev")
4158 (synopsis "Object-Oriented HTTP framework")
4159 (description
4160 "CherryPy is a pythonic, object-oriented web framework. It helps in
4161building web applications in the same way any other object-oriented Python
4162program would be built.")
4163 (license license:bsd-3)))
4164
4165(define-public python-parfive
4166 (package
4167 (name "python-parfive")
4168 (version "2.3.1")
4169 (source
4170 (origin
4171 (method git-fetch)
4172 (uri (git-reference
4173 (url "https://github.com/Cadair/parfive")
4174 (commit (string-append "v" version))))
4175 (file-name (git-file-name name version))
4176 (sha256
4177 (base32 "09kkh7kp9qy8m26zk6p7zc84yrc81pjgsi594kaa1v1n83mprl4b"))))
4178 (build-system pyproject-build-system)
4179 (arguments
4180 (list
4181 #:test-flags
4182 ;; Disable tests requiring network access.
4183 #~(list "-k" (string-join
4184 (list "not test_ftp"
4185 "test_ftp_http"
4186 "test_ftp_pasv_command"
4187 "test_problematic_http_urls")
4188 " and not "))))
4189 (native-inputs
4190 (list python-aiofiles
4191 python-pytest
4192 python-pytest-asyncio
4193 python-pytest-localserver
4194 python-pytest-socket
4195 python-setuptools
4196 python-setuptools-scm))
4197 (propagated-inputs
4198 (list python-aiohttp
4199 python-tqdm
4200 ;; [optional]
4201 python-aioftp))
4202 (home-page "https://parfive.readthedocs.io/")
4203 (synopsis "HTTP and FTP parallel file downloader")
4204 (description
4205 "This package provides CLI tool and Python library @code{parallel} file
4206downloader using asyncio. parfive can handle downloading multiple files in
4207parallel as well as downloading each file in a number of chunks.
4208
4209asciicast demo of parfive parfive works by creating a downloader object,
4210appending files to it and then running the download. parfive has a synchronous
4211API, but uses asyncio to parallelise downloading the files.")
4212 (license license:expat)))
4213
4214(define-public python-html2text
4215 (package
4216 (name "python-html2text")
4217 (version "2020.1.16")
4218 (source
4219 (origin
4220 (method url-fetch)
4221 (uri (pypi-uri "html2text" version))
4222 (sha256
4223 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
4224 (build-system pyproject-build-system)
4225 (native-inputs (list python-pytest python-setuptools python-wheel))
4226 (home-page "https://github.com/Alir3z4/html2text")
4227 (synopsis "Convert HTML into plain text")
4228 (description
4229 "html2text takes HTML and converts it into plain ASCII text
4230which is also valid markdown. html2text was originally written by Aaron
4231Swartz.")
4232 (license license:gpl3+)))
4233
4234(define-public python-jose
4235 (package
4236 (name "python-jose")
4237 (version "3.5.0")
4238 (home-page "https://github.com/mpdavis/python-jose")
4239 (source (origin
4240 (method git-fetch)
4241 (uri (git-reference (url home-page) (commit version)))
4242 (file-name (git-file-name name version))
4243 (sha256
4244 (base32
4245 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
4246 (build-system pyproject-build-system)
4247 (native-inputs
4248 (list python-pyasn1 python-pytest python-setuptools))
4249 (propagated-inputs
4250 (list python-cryptography python-ecdsa python-rsa))
4251 (synopsis "JOSE implementation in Python")
4252 (description
4253 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
4254- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
4255JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
4256content using a variety of algorithms.")
4257 (license license:expat)))
4258
4259(define-public python-joserfc
4260 (package
4261 (name "python-joserfc")
4262 (version "1.0.1")
4263 (source
4264 (origin
4265 (method url-fetch)
4266 (uri (pypi-uri "joserfc" version))
4267 (sha256
4268 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
4269 (build-system pyproject-build-system)
4270 (arguments
4271 (list
4272 #:test-flags
4273 ;; No module named 'Crypto'
4274 '(list "--ignore=tests/jwe/test_chacha20.py"
4275 ;; Deprecation warnings are not raised.
4276 "-k" (string-append "not test_guess_bytes_key"
4277 " and not test_guess_callable_key"
4278 " and not test_guess_str_key"))))
4279 (propagated-inputs (list python-cryptography))
4280 (native-inputs (list python-pytest python-setuptools python-wheel))
4281 (home-page "https://github.com/authlib/joserfc")
4282 (synopsis "Python library for JOSE RFCs")
4283 (description
4284 "This package provides a Python library for JOSE RFCs, including JWS,
4285JWE, JWK, JWA, and JWT.")
4286 (license license:bsd-3)))
4287
4288(define-public python-jwcrypto
4289 (package
4290 (name "python-jwcrypto")
4291 (version "1.5.6")
4292 (source
4293 (origin
4294 (method url-fetch)
4295 (uri (pypi-uri "jwcrypto" version))
4296 (sha256
4297 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
4298 (build-system pyproject-build-system)
4299 (native-inputs
4300 (list python-pytest
4301 python-setuptools))
4302 (propagated-inputs
4303 (list python-cryptography
4304 python-typing-extensions))
4305 (home-page "https://github.com/latchset/jwcrypto")
4306 (synopsis "Implementation of JOSE Web standards")
4307 (description
4308 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
4309Encryption} (JOSE) Web Standards.")
4310 (license license:lgpl3+)))
4311
4312(define-public python-pypitoken
4313 (package
4314 (name "python-pypitoken")
4315 (version "7.0.1")
4316 (source
4317 (origin
4318 (method url-fetch)
4319 (uri (pypi-uri "pypitoken" version))
4320 (sha256
4321 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
4322 (build-system pyproject-build-system)
4323 ;; There are no tests.
4324 (arguments (list #:tests? #false))
4325 (propagated-inputs (list python-jsonschema python-pymacaroons
4326 python-typing-extensions))
4327 (native-inputs (list python-poetry-core))
4328 (home-page "https://pypitoken.readthedocs.io/en/latest/")
4329 (synopsis "Manipulate PyPI API tokens")
4330 (description "This package lets you manipulate PyPI API tokens.")
4331 (license license:expat)))
4332
4333(define-public python-pyscss
4334 ;; XXX: no fresh release supporting Python 3.11, use the latest commit, see
4335 ;; <https://github.com/Kronuz/pyScss/issues/428>,
4336 ;; <https://github.com/Kronuz/pyScss/issues/431>.
4337 (let ((commit "73559d047706ccd4593cf6aa092de71f35164723")
4338 (revision "0"))
4339 (package
4340 (name "python-pyscss")
4341 (version (git-version "1.4.0" revision commit))
4342 (source
4343 (origin
4344 (method git-fetch) ; no tests in PyPI release
4345 (uri (git-reference
4346 (url "https://github.com/Kronuz/pyScss")
4347 (commit commit)))
4348 (file-name (git-file-name name version))
4349 (sha256
4350 (base32 "00msypxf5dm57gyfp3jxvjinigi4km84v33w83635pms9li2k3y7"))))
4351 (build-system pyproject-build-system)
4352 (native-inputs
4353 (list python-pytest-8
4354 python-setuptools))
4355 (inputs
4356 (list pcre))
4357 (propagated-inputs
4358 (list python-six)) ;hard dependency in scss/compiler.py
4359 (home-page "https://github.com/Kronuz/pyScss")
4360 (synopsis "Scss compiler for Python")
4361 (description
4362 "@code{pyScss} is a compiler for Sass, a superset language of
4363CSS3 that adds programming capabilities and some other syntactic sugar.")
4364 (license license:expat))))
4365
4366(define-public python-jsonpickle
4367 (package
4368 (name "python-jsonpickle")
4369 (version "4.0.0")
4370 (source (origin
4371 (method url-fetch)
4372 (uri (pypi-uri "jsonpickle" version))
4373 (sha256
4374 (base32
4375 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
4376 (build-system pyproject-build-system)
4377 (arguments
4378 (list
4379 #:test-flags '(list "tests")
4380 #:phases
4381 '(modify-phases %standard-phases
4382 (add-before 'check 'pre-check
4383 (lambda* (#:key inputs #:allow-other-keys)
4384 (setenv "TZ" "UTC")
4385 (setenv "TZDIR"
4386 (search-input-directory inputs "share/zoneinfo")))))))
4387 (native-inputs
4388 (list python-bson
4389 python-ecdsa
4390 python-feedparser
4391 python-pymongo
4392 python-pytest
4393 python-pytest-benchmark
4394 python-pytest-enabler
4395 python-setuptools
4396 python-setuptools-scm
4397 python-simplejson
4398 python-sqlalchemy
4399 python-ujson
4400 python-wheel
4401 tzdata-for-tests))
4402 (home-page "https://jsonpickle.github.io/")
4403 (synopsis "Serialize object graphs into JSON")
4404 (description
4405 "This package provides a Python library for serializing any arbitrary
4406object graph to and from JSON.")
4407 (license license:bsd-3)))
4408
4409(define-public python-mcp
4410 (package
4411 (name "python-mcp")
4412 (version "1.25.0")
4413 (source
4414 (origin
4415 (method url-fetch)
4416 (uri (pypi-uri "mcp" version))
4417 (sha256
4418 (base32 "00k87bl4jvnh7hrmicwb2m715fwccvvlanwf8cnlwdphxdhh6can"))))
4419 (build-system pyproject-build-system)
4420 (arguments
4421 (list
4422 ;; XXX: 186 failed, 648 passed, 94 skipped, 54 errors
4423 ;; A lot of tests fail for unclear reasons.
4424 #:tests? #f))
4425 (propagated-inputs (list python-httpx python-pydantic))
4426 (native-inputs
4427 (list python-hatchling
4428 python-httpx-sse
4429 python-jsonschema
4430 python-pydantic-settings
4431 python-pytest
4432 python-pytest-examples
4433 python-pytest-xdist
4434 python-sse-starlette
4435 python-starlette
4436 python-typer
4437 python-typing-inspection
4438 python-uvicorn))
4439 (home-page "https://modelcontextprotocol.io")
4440 (synopsis "Model Context Protocol SDK")
4441 (description
4442 "This package provides a Python Software Development Kit for the Model
4443Context Protocol (MCP).")
4444 (license license:expat)))
4445
4446(define-public python-mechanicalsoup
4447 (package
4448 (name "python-mechanicalsoup")
4449 (version "1.4.0")
4450 (source
4451 (origin
4452 (method url-fetch)
4453 (uri (pypi-uri "mechanicalsoup" version))
4454 (sha256
4455 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
4456 (build-system pyproject-build-system)
4457 (arguments
4458 (list
4459 #:test-flags
4460 ;; Unclear why test fails.
4461 #~(list "-k" "not test_select_form_associated_elements")
4462 ;; The following dependencies are not directly required, the developer
4463 ;; only pinned versions because of vulnerabilities. They also break
4464 ;; sanity-check because it checks for a python-certifi version which is
4465 ;; more recent than the one available in Guix.
4466 #:phases #~(modify-phases %standard-phases
4467 (add-after 'unpack 'relax-dependencies
4468 (lambda _
4469 (substitute* "requirements.txt"
4470 (("certifi.*") "")
4471 (("urllib3.*") "")))))))
4472 (propagated-inputs
4473 (list python-beautifulsoup4 python-lxml python-requests))
4474 (native-inputs
4475 (list python-pytest
4476 python-pytest-flake8
4477 python-pytest-httpbin
4478 python-pytest-mock
4479 python-requests-mock
4480 python-setuptools
4481 python-wheel))
4482 (home-page "https://mechanicalsoup.readthedocs.io/")
4483 (synopsis "Python library for automating website interaction")
4484 (description
4485 "MechanicalSoup is a Python library for automating interaction with
4486websites. It automatically stores and sends cookies, follows redirects, and can
4487follow links and submit forms. It doesn’t do JavaScript.")
4488 (license license:expat)))
4489
4490(define-public python-hypercorn
4491 (package
4492 (name "python-hypercorn")
4493 (version "0.18.0")
4494 (source
4495 (origin
4496 (method git-fetch)
4497 (uri (git-reference
4498 (url "https://github.com/pgjones/hypercorn")
4499 (commit version)))
4500 (file-name (git-file-name name version))
4501 (sha256
4502 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
4503 (build-system pyproject-build-system)
4504 (propagated-inputs
4505 (list python-aioquic
4506 python-h11
4507 python-h2
4508 python-priority
4509 python-pydata-sphinx-theme
4510 python-sphinxcontrib-mermaid
4511 python-tomli
4512 python-trio
4513 python-typing-extensions
4514 python-uvloop
4515 python-wsproto))
4516 (native-inputs
4517 (list nss-certs-for-test
4518 python-httpx
4519 python-pdm-backend
4520 python-pytest
4521 python-pytest-asyncio
4522 python-pytest-cov
4523 python-pytest-trio))
4524 (home-page "https://github.com/pgjones/hypercorn")
4525 (synopsis "ASGI Server based on Hyper libraries")
4526 (description
4527 "This package provides an ASGI (Asynchronous Server Gateway Interface)
4528Server based on Hyper libraries and inspired by @code{python-gunicorn}.")
4529 (license license:expat)))
4530
4531(define-public python-hyperframe
4532 (package
4533 (name "python-hyperframe")
4534 (version "6.1.0")
4535 (source
4536 (origin
4537 (method url-fetch)
4538 (uri (pypi-uri "hyperframe" version))
4539 (sha256
4540 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
4541 (build-system pyproject-build-system)
4542 (native-inputs
4543 (list python-pytest python-setuptools))
4544 (home-page "https://github.com/python-hyper/hyperframe")
4545 (synopsis "HTTP/2 framing layer for Python")
4546 (description
4547 "This library contains the HTTP/2 framing code used in the hyper project.
4548It provides a pure-Python codebase that is capable of decoding a binary stream
4549into HTTP/2 frames.")
4550 (license license:expat)))
4551
4552(define-public python-hpack
4553 (package
4554 (name "python-hpack")
4555 (version "4.1.0")
4556 (source
4557 (origin
4558 ;; PyPI tarball is missing some files necessary for the tests.
4559 (method git-fetch)
4560 (uri (git-reference
4561 (url "https://github.com/python-hyper/hpack")
4562 (commit (string-append "v" version))))
4563 (file-name (git-file-name name version))
4564 (sha256
4565 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
4566 (build-system pyproject-build-system)
4567 (native-inputs
4568 (list python-pytest python-setuptools))
4569 (home-page "https://hyper.rtfd.org")
4570 (synopsis "Pure-Python HPACK header compression")
4571 (description
4572 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
4573for use in Python programs that implement HTTP/2.")
4574 (license license:expat)))
4575
4576(define-public python-h11
4577 (package
4578 (name "python-h11")
4579 (version "0.16.0")
4580 (source
4581 (origin
4582 (method url-fetch)
4583 (uri (pypi-uri "h11" version))
4584 (sha256
4585 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
4586 (build-system pyproject-build-system)
4587 (native-inputs
4588 (list python-pytest python-setuptools))
4589 (home-page "https://github.com/python-hyper/h11")
4590 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
4591 (description
4592 "This is a little HTTP/1.1 library written from scratch in Python, heavily
4593inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
4594code whatsoever. This means you can hook h11 up to your favorite network API,
4595and that could be anything you want.")
4596 (license license:expat)))
4597
4598(define-public python-h2
4599 (package
4600 (name "python-h2")
4601 (version "4.1.0")
4602 (source
4603 (origin
4604 (method url-fetch)
4605 (uri (pypi-uri "h2" version))
4606 (sha256
4607 (base32 "1fraip114fm1ha5w37pdc0sk8dn9pb0ck267zrwwpap7zc4clfm8"))))
4608 (build-system pyproject-build-system)
4609 (arguments
4610 (list
4611 ;; AssertionError: assert '<RemoteSettingsChanged
4612 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
4613 ;; new_value=32768)}>' == '<RemoteSettingsChanged
4614 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
4615 ;; original_value=65536, new_value=32768)}>'
4616 #:test-flags
4617 #~(list "-k"
4618 (string-join
4619 (list "not test_remotesettingschanged_repr"
4620 ;; This test exceededs the Hypothesis deadline.
4621 #$@(if (target-riscv64?)
4622 #~("test_changing_max_frame_size")
4623 #~())
4624 "test_streamreset_repr"
4625 "test_settingsacknowledged_repr"
4626 "test_connectionterminated_repr[None-None]"
4627 "test_connectionterminated_repr[some"
4628 "test_remotesettingschanged_repr"
4629 "test_streamreset_repr"
4630 "test_settingsacknowledged_repr"
4631 "test_connectionterminated_repr[None-None]"
4632 "test_connectionterminated_repr[some")
4633 " and not "))))
4634 (native-inputs
4635 (list python-pytest
4636 python-setuptools
4637 python-wheel))
4638 (propagated-inputs
4639 (list python-hpack
4640 python-hyperframe))
4641 (home-page "https://github.com/python-hyper/h2")
4642 (synopsis "HTTP/2 State-Machine based protocol implementation")
4643 (description
4644 "This module contains a pure-Python implementation of a HTTP/2 protocol
4645stack. It does not provide a parsing layer, a network layer, or any rules
4646about concurrency. Instead, it's a purely in-memory solution, defined in
4647terms of data actions and HTTP/2 frames. This is one building block of a full
4648Python HTTP implementation.")
4649 (license license:expat)))
4650
4651(define-public python-slixmpp
4652 (package
4653 (name "python-slixmpp")
4654 (version "1.8.6") ; XXX: The latest version which does not require Rust
4655 (source
4656 (origin
4657 (method git-fetch)
4658 (uri (git-reference
4659 (url "https://codeberg.org/poezio/slixmpp")
4660 (commit (string-append "slix-" version))))
4661 (file-name (git-file-name name version))
4662 (sha256
4663 (base32 "0gpy6arwyk4lsx1hbcwbllxs6qbwn58adkp1rm1cfvfrjdv5kxx7"))))
4664 (build-system pyproject-build-system)
4665 (arguments
4666 (list
4667 #:phases
4668 #~(modify-phases %standard-phases
4669 (add-after 'unpack 'patch-setup.py
4670 (lambda _
4671 (substitute* "setup.py"
4672 (("'CC', 'cc'")
4673 "'CC', 'gcc'")))))))
4674 (native-inputs
4675 (list gnupg
4676 pkg-config
4677 python-cython
4678 python-setuptools
4679 python-wheel))
4680 (inputs
4681 (list libidn
4682 python)) ; We are building a Python extension.
4683 (propagated-inputs
4684 (list python-aiodns
4685 python-aiohttp
4686 python-cryptography
4687 python-defusedxml
4688 python-emoji
4689 python-pyasn1
4690 python-pyasn1-modules))
4691 (home-page "https://lab.louiz.org/poezio/slixmpp")
4692 (synopsis "XMPP library without threads")
4693 (description
4694 "Slixmpp is a XMPP library for Python 3.7+. It is a fork of SleekXMPP.
4695Its goal is to only rewrite the core of the library (the low level socket
4696handling, the timers, the events dispatching) in order to remove all
4697threads.")
4698 (license license:expat)))
4699
4700(define-public python-sockjs-tornado
4701 (package
4702 (name "python-sockjs-tornado")
4703 (version "1.0.6")
4704 (source
4705 (origin
4706 (method git-fetch)
4707 (uri (git-reference
4708 (url "https://github.com/mrjoes/sockjs-tornado/")
4709 (commit (string-append "v" version))))
4710 (file-name (git-file-name name version))
4711 (sha256
4712 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
4713 (build-system pyproject-build-system)
4714 (arguments
4715 (list
4716 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
4717 (native-inputs (list python-setuptools))
4718 (propagated-inputs (list python-tornado))
4719 (home-page "https://github.com/mrjoes/sockjs-tornado/")
4720 (synopsis
4721 "SockJS Python server implementation on top of the Tornado framework")
4722 (description
4723 "SockJS-tornado provides the server-side counterpart to a SockJS client
4724library, through the Tornado framework.
4725
4726SockJS provides a low-latency, full-duplex, cross-domain communication channel
4727between a web browser and web server.")
4728 (license license:expat)))
4729
4730(define-public python-flask-assets
4731 ;; The latest release still depends on the abandoned flask-script, whereas
4732 ;; at this later commit (already 2 years old at the time of this writing)
4733 ;; the dependency has been lifted.
4734 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
4735 (revision "1"))
4736 (package
4737 (name "python-flask-assets")
4738 (version (git-version "2.1.0" revision commit))
4739 (source
4740 (origin
4741 (method git-fetch)
4742 (uri (git-reference
4743 (url "https://github.com/miracle2k/flask-assets/")
4744 (commit commit)))
4745 (file-name (git-file-name name version))
4746 (sha256
4747 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
4748 (build-system pyproject-build-system)
4749 (propagated-inputs
4750 (list python-flask python-webassets))
4751 (native-inputs
4752 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
4753 (home-page "https://github.com/miracle2k/flask-assets")
4754 (synopsis "Asset management for Flask")
4755 (description "This package integrates @code{webassets} with Flask, adding
4756support for merging, minifying and compiling CSS and Javascript files.")
4757 (license license:bsd-2))))
4758
4759(define-public python-flask-babel
4760 (package
4761 (name "python-flask-babel")
4762 (version "4.0.0")
4763 (source
4764 (origin
4765 (method git-fetch) ;no tests in pypi release
4766 (uri (git-reference
4767 (url "https://github.com/python-babel/flask-babel")
4768 (commit (string-append "v" version))))
4769 (sha256
4770 (base32
4771 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
4772 (build-system pyproject-build-system)
4773 (native-inputs
4774 (list python-poetry-core
4775 python-pytest
4776 python-pytest-mock))
4777 (propagated-inputs
4778 (list python-babel
4779 python-flask
4780 python-jinja2
4781 python-pytz))
4782 (home-page "https://github.com/python-babel/flask-babel")
4783 (synopsis "Add i18n/l10n support to Flask applications")
4784 (description "This package implements internationalization and localization
4785support for Flask. This is based on the Python babel module as well as pytz -
4786both of which are installed automatically if you install this library.")
4787 (license license:bsd-3)))
4788
4789(define-public python-flask-cors
4790 (package
4791 (name "python-flask-cors")
4792 (version "6.0.2")
4793 (source
4794 (origin
4795 (method git-fetch) ;no tests in PyPI archive
4796 (uri (git-reference
4797 (url "https://github.com/CoryDolphin/flask-cors")
4798 (commit version)))
4799 (file-name (git-file-name name version))
4800 (sha256
4801 (base32 "02y740h951dscgkm7ghsss1bc0m8ymsfdpsimm1j0nkl0zjl6sgm"))))
4802 (build-system pyproject-build-system)
4803 (arguments
4804 (list
4805 #:phases
4806 #~(modify-phases %standard-phases
4807 (add-after 'unpack 'fix-version
4808 (lambda _
4809 ;; Otherwise sanity-check of dependents will fail.
4810 (substitute* "pyproject.toml"
4811 (("version = \"0\\.0\\.1\"" all)
4812 (string-append "version = \"" #$version "\""))))))))
4813 (native-inputs
4814 (list python-pytest
4815 python-setuptools))
4816 (propagated-inputs
4817 (list python-flask
4818 python-werkzeug))
4819 (home-page "https://flask-cors.readthedocs.io/en/latest/")
4820 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
4821 (description
4822 "This package provides a Flask extension for handling @acronym{CORS,Cross
4823Origin Resource Sharing}, making cross-origin AJAX possible.")
4824 (license license:expat)))
4825
4826(define-public python-flask-markdown
4827 (package
4828 (name "python-flask-markdown")
4829 (version "0.3")
4830 (source
4831 (origin
4832 (method git-fetch)
4833 (uri (git-reference
4834 (url "https://github.com/dcolish/flask-markdown")
4835 (commit version)))
4836 (file-name (git-file-name name version))
4837 (sha256
4838 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
4839 (build-system pyproject-build-system)
4840 (arguments
4841 (list
4842 #:tests? #f ;Tests seem to be incompatible with latest python
4843 #:phases
4844 #~(modify-phases %standard-phases
4845 (add-after 'unpack 'set-version
4846 (lambda _
4847 (substitute* "setup.py"
4848 (("dev")
4849 #$version)))))))
4850 (propagated-inputs (list python-markdown python-flask))
4851 (native-inputs (list python-pynose python-setuptools))
4852 (home-page "https://github.com/dcolish/flask-markdown")
4853 (synopsis "Small extension to help with using Markdown in Flask")
4854 (description
4855 "Flask-Markdown supports several extensions for Markdown and integrates
4856into Jinja2 by default.")
4857 (license license:bsd-3)))
4858
4859(define-public python-flask-session
4860 (package
4861 (name "python-flask-session")
4862 (version "0.8.0")
4863 (source
4864 (origin
4865 (method url-fetch)
4866 (uri (pypi-uri "flask_session" version))
4867 (sha256
4868 (base32
4869 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
4870 (build-system pyproject-build-system)
4871 (arguments
4872 '(#:tests? #f)) ; Tests require the various storage backends to be present
4873 (native-inputs (list python-flit-core))
4874 (propagated-inputs
4875 (list python-cachelib python-flask python-msgspec))
4876 (home-page "https://github.com/pallets-eco/flask-session")
4877 (synopsis "Adds server-side session support to your Flask application")
4878 (description
4879 "Flask-Session is an extension for Flask that adds support for
4880Server-side sessions, with a variety of different backends for session
4881storage.")
4882 (license license:bsd-3)))
4883
4884(define-public python-html5lib
4885 (package
4886 (name "python-html5lib")
4887 (version "1.1")
4888 (source
4889 (origin
4890 (method url-fetch)
4891 (uri (pypi-uri "html5lib" version))
4892 (sha256
4893 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
4894 (build-system pyproject-build-system)
4895 (arguments
4896 '(#:tests? #f)) ;tests depend on dated pytest-expect
4897 (native-inputs
4898 (list python-setuptools))
4899 (propagated-inputs
4900 (list python-six
4901 python-webencodings
4902 ;; Required by Calibre 5.
4903 python-chardet))
4904 (home-page "https://github.com/html5lib/html5lib-python")
4905 (synopsis "Python HTML parser based on the WHATWG HTML specification")
4906 (description
4907 "Html5lib is an HTML parser based on the WHATWG HTML specification
4908and written in Python.")
4909 (license license:expat)))
4910
4911(define-public python-html5-parser
4912 (package
4913 (name "python-html5-parser")
4914 (version "0.4.12")
4915 (source
4916 (origin
4917 (method git-fetch)
4918 (uri (git-reference
4919 (url "https://github.com/kovidgoyal/html5-parser")
4920 (commit (string-append "v" version))))
4921 (file-name (git-file-name name version))
4922 (sha256
4923 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
4924 (build-system pyproject-build-system)
4925 (arguments
4926 (list
4927 #:phases
4928 #~(modify-phases %standard-phases
4929 (add-before 'build 'set-configure-flags
4930 (lambda _
4931 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
4932 (native-inputs (list pkg-config python-setuptools))
4933 (inputs (list libxml2))
4934 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
4935 (home-page "https://html5-parser.readthedocs.io")
4936 (synopsis "Fast C-based HTML5 parsing for Python")
4937 (description
4938 "This package provides a fast implementation of the HTML5 parsing spec
4939for Python. Parsing is done in C using a variant of the gumbo parser. The
4940gumbo parse tree is then transformed into an lxml tree, also in C, yielding
4941parse times that can be a thirtieth of the html5lib parse times.")
4942 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
4943 ;; indicate ASL2.0, including the LICENSE file for the whole project.
4944 (license (list license:asl2.0 license:gpl3))))
4945
4946(define-public python-html5tagger
4947 (package
4948 (name "python-html5tagger")
4949 (version "1.3.0")
4950 (source (origin
4951 (method url-fetch)
4952 (uri (pypi-uri "html5tagger" version))
4953 (sha256
4954 (base32
4955 "1acd1a4f66gi4plqnsml7cf33qp83mxsnmnqpdwkpj7597xkvyl4"))))
4956 (build-system pyproject-build-system)
4957 (arguments
4958 (list #:tests? #f)) ;no tests in PyPI or Git
4959 (native-inputs
4960 (list python-setuptools python-setuptools-scm python-wheel))
4961 (home-page "https://github.com/sanic-org/html5tagger")
4962 (synopsis "Create HTML documents from Python")
4963 (description
4964 "@code{html5tagger} provides a simplified HTML5 syntax that can
4965be written directly in Python without templates.")
4966 (license license:unlicense)))
4967
4968(define-public python-minio
4969 (package
4970 (name "python-minio")
4971 (version "7.1.9")
4972 (source
4973 (origin
4974 (method git-fetch)
4975 (uri (git-reference
4976 (url "https://github.com/minio/minio-py")
4977 (commit version)))
4978 (file-name (git-file-name name version))
4979 (sha256
4980 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
4981 (build-system pyproject-build-system)
4982 (arguments
4983 (list
4984 #:test-flags
4985 ;; XXX: requires network access.
4986 #~(list "--ignore=tests/unit/credentials_test.py")))
4987 (native-inputs (list python-pytest python-setuptools))
4988 (propagated-inputs
4989 (list python-certifi python-dateutil python-pytz python-urllib3))
4990 (home-page "https://github.com/minio/minio-py")
4991 (synopsis "Programmatically access Amazon S3 from Python")
4992 (description
4993 "This package provides a Python library for interacting with any
4994Amazon S3 compatible object storage server.")
4995 (license license:asl2.0)))
4996
4997(define-public python-pycrdt
4998 (package
4999 (name "python-pycrdt")
5000 (version "0.13.0")
5001 (source
5002 (origin
5003 (method git-fetch)
5004 (uri (git-reference
5005 (url "https://github.com/y-crdt/pycrdt")
5006 (commit version)))
5007 (file-name (git-file-name name version))
5008 (sha256
5009 (base32 "18mnjbxdlra1w3jl42bf1jb25z9j3inh6s61qighqrvnylgxvxc1"))))
5010 (build-system pyproject-build-system)
5011 (arguments
5012 (list
5013 #:imported-modules `(,@%cargo-build-system-modules
5014 ,@%pyproject-build-system-modules)
5015 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
5016 (guix build pyproject-build-system)
5017 (guix build utils))
5018 #:test-flags #~(list "--ignore=tests/test_types.py")
5019 #:phases
5020 #~(modify-phases %standard-phases
5021 (add-after 'unpack 'relax-requirements
5022 (lambda _
5023 (substitute* "pyproject.toml"
5024 (("requires = \\[\"maturin>=.*\"\\]")
5025 "requires = [\"maturin\"]"))))
5026 (add-after 'unpack 'prepare-cargo-build-system
5027 (lambda args
5028 (for-each
5029 (lambda (phase)
5030 (format #t "Running cargo phase: ~a~%" phase)
5031 (apply (assoc-ref cargo:%standard-phases phase)
5032 #:cargo-target #$(cargo-triplet)
5033 args))
5034 '(unpack-rust-crates
5035 configure
5036 check-for-pregenerated-files
5037 patch-cargo-checksums)))))))
5038 (propagated-inputs
5039 (list python-anyio
5040 python-typing-extensions))
5041 (inputs (cargo-inputs 'pycrdt))
5042 (native-inputs
5043 (append
5044 (list maturin
5045 python-pydantic
5046 python-pytest
5047 rust
5048 `(,rust "cargo"))
5049 (or (and=> (%current-target-system)
5050 (compose list make-rust-sysroot))
5051 '())))
5052 (home-page "https://github.com/y-crdt/pycrdt")
5053 (synopsis "Python CRDTs library ported from Yjs framework")
5054 (description
5055 "Conflict-free Replicated Data Types (CRDTs) allow creating shared
5056documents that can automatically merge changes made concurrently on different
5057copies of the data. When the data lives on different machines, they make it
5058possible to build distributed systems that work with local data, leaving the
5059synchronization and conflict resolution with remote data to the CRDT
5060algorithm, which ensures that all data replicas eventually converge to the
5061same state.
5062
5063This is a Python CRDT library that provides bindings for Yrs, the Rust port of
5064the Yjs framework.")
5065 (license license:expat)))
5066
5067(define-public python-pycrdt-store
5068 (package
5069 (name "python-pycrdt-store")
5070 (version "0.1.3")
5071 (source
5072 (origin
5073 (method git-fetch)
5074 (uri (git-reference
5075 (url "https://github.com/y-crdt/pycrdt-store")
5076 (commit version)))
5077 (file-name (git-file-name name version))
5078 (sha256
5079 (base32 "18yvv5lgxb4v0qlbi8bbkcm1666nxbkmhbx445sxpzab7027fl1a"))))
5080 (build-system pyproject-build-system)
5081 (propagated-inputs
5082 (list python-anyio
5083 python-pycrdt
5084 python-sqlite-anyio))
5085 (native-inputs
5086 (list python-hatchling
5087 python-pytest
5088 python-pytest-rerunfailures
5089 python-trio))
5090 (home-page "https://github.com/y-crdt/pycrdt-store")
5091 (synopsis "Persistent storage for pycrdt")
5092 (description
5093 "This package provides a persistent storage feature for
5094@code{python-pycrdt}.")
5095 (license license:expat)))
5096
5097(define-public python-pycrdt-websocket
5098 (package
5099 (name "python-pycrdt-websocket")
5100 (version "0.16.0")
5101 (source
5102 (origin
5103 (method git-fetch)
5104 (uri (git-reference
5105 (url "https://github.com/y-crdt/pycrdt-websocket")
5106 (commit version)))
5107 (file-name (git-file-name name version))
5108 (sha256
5109 (base32 "1bcxivdra0v5fwlz3hcz98vxi61884bfvcwifsdp3mji28iprv22"))))
5110 (build-system pyproject-build-system)
5111 (arguments
5112 (list
5113 ;; These tests require the unpackaged Yjs.
5114 #:test-flags #~(list "--deselect=tests/test_pycrdt_yjs.py")))
5115 (propagated-inputs
5116 (list python-anyio
5117 python-pycrdt
5118 python-pycrdt-store))
5119 (native-inputs
5120 (list nss-certs-for-test
5121 python-hatchling
5122 python-hypercorn
5123 python-httpx-ws
5124 python-pytest))
5125 (home-page "https://github.com/y-crdt/pycrdt-websocket")
5126 (synopsis "WebSocket connector for pycrdt")
5127 (description "This package provides an asynchronous @code{WebSocket}
5128connector for @code{python-pycrdt}.")
5129 (license license:expat)))
5130
5131(define-public python-pycurl
5132 (package
5133 (name "python-pycurl")
5134 (version "7.45.7")
5135 (source
5136 (origin
5137 (method git-fetch)
5138 (uri (git-reference
5139 (url "https://github.com/pycurl/pycurl")
5140 (commit (string-append
5141 "REL_" (string-replace-substring version "." "_")))))
5142 (file-name (git-file-name name version))
5143 (sha256
5144 (base32 "1gkbv3cvrwd7z3vgqlvcf0wpvm3g6dia8xbx3g4bplnb2cascfiq"))))
5145 (build-system pyproject-build-system)
5146 (arguments
5147 '(#:test-flags
5148 ;; The test suite is not thread safe:
5149 ;; - some tests want to use the same port: address already in use
5150 ;; - some tests use signal.Signal, i.e. main-thread only
5151 (list "-k" (string-append
5152 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
5153 ;; open shared object file: No such file or directory
5154 "not test_libcurl_ssl_gnutls"
5155 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
5156 ;; open shared object file: No such file or directory
5157 " and not test_libcurl_ssl_nss"
5158 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
5159 ;; open shared object file: No such file or directory
5160 " and not test_libcurl_ssl_openssl"
5161 ;; "A requested feature, protocol or option was not
5162 ;; found built-in in this libcurl due to a build-time
5163 ;; decision."
5164 " and not test_issuercert_blob"
5165 " and not test_krb4level"
5166 " and not test_krblevel"))
5167 #:phases (modify-phases %standard-phases
5168 (add-before 'build 'configure-tls-backend
5169 (lambda _
5170 ;; XXX: PycURL fails to automatically determine which
5171 ;; TLS backend to use when cURL is built with
5172 ;; --disable-static. See setup.py and
5173 ;; <https://github.com/pycurl/pycurl/pull/147>.
5174 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
5175 (native-inputs
5176 (list python-bottle
5177 python-flaky
5178 python-flask
5179 python-pytest
5180 python-setuptools
5181 python-wheel))
5182 (inputs
5183 (list curl gnutls))
5184 (home-page "http://pycurl.io/")
5185 (synopsis "Lightweight Python wrapper around libcurl")
5186 (description "Pycurl is a lightweight wrapper around libcurl. It provides
5187high-speed transfers via libcurl and frequently outperforms alternatives.")
5188
5189 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
5190 ;; under the terms of LGPLv2.1+ or Expat.
5191 (license (list license:lgpl2.1+ license:expat))))
5192
5193(define-public python-stamina
5194 (package
5195 (name "python-stamina")
5196 (version "25.2.0")
5197 (source
5198 (origin
5199 (method git-fetch)
5200 (uri (git-reference
5201 (url "https://github.com/hynek/stamina")
5202 (commit version)))
5203 (file-name (git-file-name name version))
5204 (sha256
5205 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
5206 (build-system pyproject-build-system)
5207 (native-inputs
5208 (list python-pytest
5209 python-anyio
5210 python-dirty-equals
5211 python-hatch-fancy-pypi-readme
5212 python-hatch-vcs
5213 python-hatchling
5214 python-structlog))
5215 (propagated-inputs
5216 (list python-tenacity
5217 python-typing-extensions))
5218 (home-page "https://github.com/hynek/stamina")
5219 (synopsis "Retries library for Python")
5220 (description
5221 "@code{stamina} is an opinionated wrapper around the
5222@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
5223 (license license:expat)))
5224
5225(define-public python-stripe
5226 (package
5227 (name "python-stripe")
5228 (version "13.2.0")
5229 (source
5230 (origin
5231 (method git-fetch)
5232 (uri (git-reference
5233 (url "https://github.com/stripe/stripe-python")
5234 (commit (string-append "v" version))))
5235 (file-name (git-file-name name version))
5236 (sha256
5237 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
5238 (build-system pyproject-build-system)
5239 (arguments
5240 '(#:tests? #f)) ;; tests require network
5241 (native-inputs
5242 (list python-flit-core))
5243 (propagated-inputs
5244 (list python-httpx
5245 python-requests))
5246 (home-page "https://github.com/stripe/stripe-python")
5247 (synopsis "Python bindings for the Stripe financial services' API")
5248 (description "This package provides access to the Stripe financial
5249services' API. It includes a pre-defined set of classes for API resources
5250that initialize themselves dynamically from API responses which makes it
5251compatible with a wide range of versions of the Stripe API.")
5252 (license license:expat)))
5253
5254(define-public python-stripe-12
5255 (hidden-package
5256 (package/inherit python-stripe
5257 (name "python-stripe")
5258 (version "12.5.1")
5259 (source
5260 (origin
5261 (inherit (package-source python-stripe))
5262 (uri (git-reference
5263 (url "https://github.com/stripe/stripe-python")
5264 (commit (string-append "v" version))))
5265 (file-name (git-file-name name version))
5266 (sha256 (base32
5267 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
5268 (native-inputs
5269 (list python-setuptools)))))
5270
5271(define-public python-tldextract
5272 (package
5273 (name "python-tldextract")
5274 (version "5.3.0")
5275 (source
5276 (origin
5277 (method url-fetch)
5278 (uri (pypi-uri "tldextract" version))
5279 (sha256
5280 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
5281 (build-system pyproject-build-system)
5282 (arguments
5283 (list
5284 #:phases
5285 #~(modify-phases %standard-phases
5286 (add-after 'unpack 'relax-requirements
5287 (lambda _
5288 (substitute* "pyproject.toml"
5289 (("\"requests-file.*\",")
5290 "\"requests-file\",")))))))
5291 (native-inputs
5292 (list nss-certs-for-test
5293 python-pytest
5294 python-pytest-mock
5295 python-responses
5296 python-setuptools
5297 python-setuptools-scm
5298 python-syrupy))
5299 (propagated-inputs
5300 (list python-filelock
5301 python-idna
5302 python-requests
5303 python-requests-file))
5304 (home-page "https://github.com/john-kurkowski/tldextract")
5305 (synopsis
5306 "Separate the TLD from the registered domain and subdomains of a URL")
5307 (description
5308 "TLDExtract accurately separates the TLD from the registered domain and
5309subdomains of a URL, using the Public Suffix List. By default, this includes
5310the public ICANN TLDs and their exceptions. It can optionally support the
5311Public Suffix List's private domains as well.")
5312 (license license:bsd-3)))
5313
5314(define-public python-tracerite
5315 (package
5316 (name "python-tracerite")
5317 (version "1.1.3")
5318 (source
5319 (origin
5320 (method url-fetch)
5321 (uri (pypi-uri "tracerite" version))
5322 (sha256
5323 (base32 "07mkg0sl0h335kj6yjvxki2c19gxhb7rkks1zgzh7aj0y83c17qi"))))
5324 (build-system pyproject-build-system)
5325 (arguments
5326 (list #:tests? #f)) ;no tests in PyPI or Git
5327 (native-inputs
5328 (list python-setuptools
5329 python-setuptools-scm))
5330 (propagated-inputs
5331 (list python-html5tagger))
5332 (home-page "https://github.com/sanic-org/tracerite")
5333 (synopsis "Human-readable HTML tracebacks")
5334 (description
5335 "@code{tracerite} converts Python tracebacks into useful error messages
5336in human-readable HTML format.")
5337 (license license:unlicense)))
5338
5339(define-public python-trio-websocket
5340 (package
5341 (name "python-trio-websocket")
5342 (version "0.12.2")
5343 (source
5344 (origin
5345 (method git-fetch)
5346 (uri (git-reference
5347 (url "https://github.com/HyperionGray/trio-websocket")
5348 (commit version)))
5349 (file-name (git-file-name name version))
5350 (sha256
5351 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
5352 (build-system pyproject-build-system)
5353 (native-inputs
5354 (list python-pytest
5355 python-pytest-trio
5356 python-setuptools
5357 python-trustme))
5358 (propagated-inputs
5359 (list python-outcome
5360 python-trio
5361 python-wsproto))
5362 (home-page "https://github.com/HyperionGray/trio-websocket")
5363 (synopsis "WebSocket library for Trio")
5364 (description "This library implements both server and client aspects of
5365the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
5366striving for safety, correctness, and ergonomics. It is based on the
5367@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
5368@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
5369the majority of the WebSocket protocol, including framing, codecs, and events.
5370This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
5371the Trio framework}.")
5372 (license license:expat)))
5373
5374(define-public python-txacme
5375 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
5376 ;; compatibility with twisted, use the latest commit from trunk branch.
5377 ;;
5378 ;;See: <https://github.com/twisted/txacme/issues/165>.
5379 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
5380 (revision "0"))
5381 (package
5382 (name "python-txacme")
5383 (version (git-version "0.9.3" revision commit))
5384 (source
5385 (origin
5386 (method git-fetch) ;no fresh release in PyPI
5387 (uri (git-reference
5388 (url "https://github.com/twisted/txacme")
5389 (commit commit)))
5390 (file-name (git-file-name name version))
5391 (sha256
5392 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
5393 (build-system pyproject-build-system)
5394 (arguments
5395 (list #:test-backend #~'custom
5396 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
5397 (native-inputs
5398 (list python-setuptools))
5399 (propagated-inputs
5400 (list python-acme
5401 python-attrs
5402 python-eliot
5403 python-josepy
5404 python-pem
5405 python-treq
5406 python-twisted
5407 python-txsni))
5408 (home-page "https://github.com/twisted/txacme")
5409 (synopsis "Twisted implexmentation of the ACME protocol")
5410 (description
5411 "ACME is Automatic Certificate Management Environment, a protocol that
5412allows clients and certificate authorities to automate verification and
5413certificate issuance. The ACME protocol is used by the free Let's Encrypt
5414Certificate Authority.
5415
5416txacme is an implementation of the protocol for Twisted, the event-driven
5417networking engine for Python.")
5418 (license license:expat))))
5419
5420(define-public python-txaio
5421 (package
5422 (name "python-txaio")
5423 (version "25.9.2")
5424 (source
5425 (origin
5426 (method url-fetch)
5427 (uri (pypi-uri "txaio" version))
5428 (sha256
5429 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
5430 (build-system pyproject-build-system)
5431 (native-inputs
5432 (list python-pytest
5433 python-setuptools))
5434 (home-page "https://github.com/crossbario/txaio")
5435 (synopsis "Compatibility layer between Python asyncio and Twisted")
5436 (description
5437 "Txaio provides a compatibility layer between the Python @code{asyncio}
5438 bsmodule and @code{Twisted}.")
5439 (license license:expat)))
5440
5441;; XXX: Potentially abandonware since 2017, consider to remove when nothing
5442;; depends on it or fails to build.
5443(define-public python-txamqp
5444 (package
5445 (name "python-txamqp")
5446 (version "0.8.2")
5447 (source
5448 (origin
5449 (method url-fetch)
5450 (uri (pypi-uri "txAMQP" version))
5451 (sha256
5452 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
5453 (build-system pyproject-build-system)
5454 (arguments
5455 (list #:tests? #f)) ;all tests failed
5456 (native-inputs
5457 (list python-setuptools))
5458 (propagated-inputs
5459 (list python-six python-twisted))
5460 (home-page "https://github.com/txamqp/txamqp")
5461 (synopsis "Communicate with AMQP peers and brokers using Twisted")
5462 (description
5463 "This package provides a Python library for communicating with AMQP peers
5464and brokers using the asynchronous networking framework Twisted. It contains
5465all the necessary code to connect, send and receive messages to/from an
5466AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
5467also includes support for using Thrift RPC over AMQP in Twisted
5468applications.")
5469 (license license:asl2.0)))
5470
5471(define-public python-txsni
5472 (package
5473 (name "python-txsni")
5474 (version "0.2.0")
5475 (source
5476 (origin
5477 (method git-fetch)
5478 (uri (git-reference
5479 (url "https://github.com/glyph/txsni")
5480 (commit (string-append "v" version))))
5481 (file-name (git-file-name name version))
5482 (sha256
5483 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
5484 (build-system pyproject-build-system)
5485 (arguments
5486 (list #:test-backend #~'custom
5487 #:test-flags #~(list "-m" "twisted.trial"
5488 "--temp-directory=/tmp/_trial_temp"
5489 "txsni")))
5490 (native-inputs
5491 (list python-setuptools))
5492 (propagated-inputs
5493 (list python-pyopenssl
5494 python-service-identity
5495 python-twisted))
5496 (home-page "https://github.com/glyph/txsni")
5497 (synopsis "Run TLS servers with Twisted")
5498 (description
5499 "This package provides an easy-to-use SNI endpoint for use with the
5500Twisted web framework.")
5501 (license license:expat)))
5502
5503(define-public python-txtorcon
5504 (package
5505 (name "python-txtorcon")
5506 (version "24.8.0")
5507 (source
5508 (origin
5509 (method url-fetch)
5510 (uri (pypi-uri "txtorcon" version))
5511 (sha256
5512 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
5513 (build-system pyproject-build-system)
5514 (native-inputs
5515 (list python-pytest
5516 python-setuptools
5517 python-wheel))
5518 (inputs
5519 (list lsof))
5520 (propagated-inputs
5521 (list python-automat
5522 python-idna
5523 python-incremental
5524 python-pyopenssl
5525 python-service-identity
5526 python-twisted
5527 python-zope-interface))
5528 (home-page "https://github.com/meejah/txtorcon")
5529 (synopsis "Twisted-based Tor controller client")
5530 (description
5531 "This package provides a Twisted-based Tor controller client,with
5532state-tracking and configuration abstractions.")
5533 (license license:expat)))
5534
5535(define-public python-url-normalize
5536 (package
5537 (name "python-url-normalize")
5538 (version "2.2.1")
5539 (source
5540 (origin
5541 (method git-fetch) ; no tests in PyPI release
5542 (uri (git-reference
5543 (url "https://github.com/niksite/url-normalize")
5544 (commit (string-append "v" version))))
5545 (file-name (git-file-name name version))
5546 (sha256
5547 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
5548 (build-system pyproject-build-system)
5549 (arguments
5550 (list
5551 #:test-flags #~(list "--ignore=tests/test_cli.py")))
5552 (native-inputs
5553 (list python-pytest python-pytest-socket python-setuptools))
5554 (propagated-inputs
5555 (list python-idna))
5556 (home-page "https://github.com/niksite/url-normalize")
5557 (synopsis "URL normalization for Python")
5558 (description
5559 "This package provides a URI Normalization function with following
5560features:
5561@itemize
5562@item take care of IDN domains
5563@item always provide the URI scheme in lowercase characters
5564@item always provide the host, if any, in lowercase characters
5565@item only perform percent-encoding where it is essential
5566@item always use uppercase A-through-F characters when percent-encoding
5567@item prevent dot-segments appearing in non-relative URI paths
5568@item for schemes that define a default authority, use an empty authority if
5569the default is desired
5570@item for schemes that define an empty path to be equivalent to a path of
5571@code{/}, use @code{/}
5572@item for schemes that define a port, use an empty port if the default is
5573desired
5574@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
5575@end itemize")
5576 (license license:expat)))
5577
5578(define-public python-waitress
5579 (package
5580 (name "python-waitress")
5581 (version "3.0.2")
5582 (source
5583 (origin
5584 (method url-fetch)
5585 (uri (pypi-uri "waitress" version))
5586 (sha256
5587 (base32
5588 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
5589 (build-system pyproject-build-system)
5590 (arguments
5591 (list
5592 ;; https://github.com/Pylons/waitress/issues/443
5593 #:test-flags #~(list "-k" "not test_service_port")))
5594 (native-inputs (list python-pytest python-setuptools))
5595 (home-page "https://github.com/Pylons/waitress")
5596 (synopsis "Waitress WSGI server")
5597 (description
5598 "Waitress is meant to be a production-quality pure-Python WSGI server
5599with very acceptable performance.")
5600 (license license:zpl2.1)))
5601
5602(define-public python-weasel
5603 (package
5604 (name "python-weasel")
5605 (version "1.0.0")
5606 (source
5607 (origin
5608 (method git-fetch)
5609 (uri (git-reference
5610 (url "https://github.com/explosion/weasel/")
5611 (commit (string-append "release-v" version))))
5612 (file-name (git-file-name name version))
5613 (sha256
5614 (base32 "1sxcxri9hl9rs1kvdrv81g6mlg7lifhq9xacskracz63v4nyh8na"))))
5615 (build-system pyproject-build-system)
5616 (arguments
5617 (list
5618 #:test-flags
5619 ;; This test raises an error, but not the one expected by pytest.
5620 #~(list (string-append "--deselect=weasel/tests/test_validation.py::"
5621 "test_project_config_interpolation[10_0]")
5622 ;; Network access is required.
5623 #$@(map (lambda (test) (string-append "--deselect="
5624 "weasel/tests/cli/"
5625 test))
5626 (list "test_cli.py::test_project_git_dir_asset"
5627 "test_cli.py::test_project_git_file_asset"
5628 "test_cli_app.py::test_project_assets")))))
5629 (native-inputs
5630 (list python-pytest
5631 python-setuptools))
5632 (propagated-inputs
5633 (list python-cloudpathlib
5634 python-confection
5635 python-httpx
5636 python-packaging
5637 python-pydantic
5638 python-smart-open
5639 python-srsly
5640 python-typer
5641 python-wasabi))
5642 (home-page "https://github.com/explosion/weasel/")
5643 (synopsis "Small and easy workflow system")
5644 (description
5645 "This package provides a minimalistic workflow system to manage and
5646share end-to-end workflows for different use cases and domains.")
5647 (license license:expat)))
5648
5649(define-public python-webencodings
5650 (package
5651 (name "python-webencodings")
5652 (version "0.5.1")
5653 (source
5654 (origin
5655 (method url-fetch)
5656 (uri (pypi-uri "webencodings" version))
5657 (sha256
5658 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
5659 (build-system pyproject-build-system)
5660 (arguments
5661 (list #:test-flags #~(list "webencodings/tests.py")))
5662 (native-inputs
5663 (list python-pytest python-setuptools))
5664 (home-page "https://github.com/SimonSapin/python-webencodings")
5665 (synopsis "Character encoding aliases for legacy web content")
5666 (description
5667 "In order to be compatible with legacy web content when interpreting
5668something like @code{Content-Type: text/html; charset=latin1}, tools need to
5669use a particular set of aliases for encoding labels as well as some overriding
5670rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
5671actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
5672BOM takes precedence over any other encoding declaration. The WHATWG
5673@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
5674details so that implementations do not have to reverse-engineer each other.
5675
5676This module implements the Encoding standard and has encoding labels and BOM
5677detection, but the actual implementation for encoders and decoders is
5678Python’s.")
5679 (license license:bsd-3)))
5680
5681(define-public python-omnipath
5682 (package
5683 (name "python-omnipath")
5684 (version "1.0.10")
5685 (source
5686 (origin
5687 (method git-fetch)
5688 (uri (git-reference
5689 (url "https://github.com/saezlab/omnipath/")
5690 (commit (string-append "v" version))))
5691 (file-name (git-file-name name version))
5692 (sha256
5693 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
5694 (build-system pyproject-build-system)
5695 (arguments
5696 (list
5697 #:test-flags '(list "-k"
5698 (string-append
5699 ;; These require internet access
5700 "not test_download_homologene"
5701 " and not test_complex_genes"))
5702 #:phases
5703 #~(modify-phases %standard-phases
5704 (add-after 'unpack 'set-home
5705 (lambda _
5706 (setenv "HOME" "/tmp"))))))
5707 (propagated-inputs (list python-attrs
5708 python-docrep
5709 python-inflect
5710 python-networkx
5711 python-packaging
5712 python-pandas
5713 python-requests
5714 python-tqdm
5715 python-typing-extensions
5716 python-urllib3
5717 python-wrapt))
5718 (native-inputs (list nss-certs-for-test
5719 python-bump2version
5720 python-hatchling
5721 python-pytest
5722 python-pytest-mock
5723 python-pytest-socket
5724 python-requests-mock))
5725 (home-page "https://omnipathdb.org/")
5726 (synopsis "Python client for the OmniPath web service")
5727 (description "This package provides a Python client for the OmniPath web
5728service.")
5729 (license license:expat)))
5730
5731(define-public python-openai
5732 (package
5733 (name "python-openai")
5734 (version "2.42.0")
5735 (source
5736 (origin
5737 (method git-fetch)
5738 (uri (git-reference
5739 (url "https://github.com/openai/openai-python")
5740 (commit (string-append "v" version))))
5741 (file-name (git-file-name name version))
5742 (sha256
5743 (base32 "1p0vzy34cx2gfkhsqg2kxzam51cjlpa99q0skzj4426sx2hsw3g6"))))
5744 (build-system pyproject-build-system)
5745 (arguments
5746 (list
5747 #:test-flags
5748 ;; These require internet access and an openai API key.
5749 #~(list "--ignore=openai/tests/asyncio/test_endpoints.py"
5750 "--ignore=openai/tests/test_endpoints.py"
5751 "--ignore-glob=tests/api_resources/*")))
5752 (propagated-inputs
5753 (list python-aiohttp
5754 python-distro
5755 python-httpx
5756 python-jiter
5757 python-pydantic
5758 python-requests
5759 python-tqdm
5760 python-typing-extensions))
5761 (native-inputs
5762 (list nss-certs-for-test
5763 python-dirty-equals
5764 python-hatchling
5765 python-hatch-fancy-pypi-readme
5766 python-inline-snapshot
5767 python-pytest
5768 python-pytest-asyncio
5769 python-pytest-mock
5770 python-pytest-xdist
5771 python-respx
5772 python-rich
5773 python-setuptools))
5774 (home-page "https://github.com/openai/openai-python")
5775 (synopsis "Python client library for the OpenAI API")
5776 (description "This package provides a Python client library for the
5777OpenAI API.")
5778 (license license:expat)))
5779
5780(define-public python-openapi-schema-validator
5781 (package
5782 (name "python-openapi-schema-validator")
5783 (version "0.6.2")
5784 (source
5785 (origin
5786 (method git-fetch) ;no tests in pypi release
5787 (uri (git-reference
5788 (url "https://github.com/p1c2u/openapi-schema-validator")
5789 (commit version)))
5790 (file-name (git-file-name name version))
5791 (sha256
5792 (base32
5793 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
5794 (build-system pyproject-build-system)
5795 (arguments
5796 (list
5797 #:test-flags
5798 ;; This one returns 5 instead of 4 elements
5799 '(list "-k" "not test_array_prefixitems_invalid")
5800 #:phases
5801 #~(modify-phases %standard-phases
5802 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
5803 (add-after 'unpack 'relax-requirements
5804 (lambda _
5805 (substitute* "pyproject.toml"
5806 (("jsonschema-specifications.*")
5807 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
5808 (native-inputs (list python-poetry-core python-pytest))
5809 (propagated-inputs
5810 (list python-isodate
5811 python-jsonschema
5812 python-rfc3339-validator
5813 python-strict-rfc3339))
5814 (home-page "https://github.com/p1c2u/openapi-schema-validator")
5815 (synopsis "OpenAPI schema validation library for Python")
5816 (description "Openapi-schema-validator is a Python library that validates
5817a schema against:
5818@itemize
5819@item OpenAPI Schema Specification v3.0 which is an extended subset of the
5820JSON Schema Specification Wright Draft 00.
5821@item OpenAPI Schema Specification v3.1 which is an extended superset of the
5822JSON Schema Specification Draft 2020-12.
5823@end itemize")
5824 (license license:bsd-3)))
5825
5826(define-public python-openapi-spec-validator
5827 (package
5828 (name "python-openapi-spec-validator")
5829 (version "0.7.1")
5830 (source
5831 (origin
5832 (method git-fetch) ;no tests in pypi release
5833 (uri (git-reference
5834 (url "https://github.com/p1c2u/openapi-spec-validator")
5835 (commit version)))
5836 (file-name (git-file-name name version))
5837 (sha256
5838 (base32
5839 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
5840 (build-system pyproject-build-system)
5841 (arguments
5842 (list
5843 ;; These tests attempt to fetch resources from the Internet
5844 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
5845 "-k" "not example")))
5846 (native-inputs
5847 (list python-poetry-core
5848 python-pytest))
5849 (propagated-inputs
5850 (list python-jsonschema
5851 python-jsonschema-path
5852 python-lazy-object-proxy
5853 python-openapi-schema-validator
5854 python-pyyaml
5855 python-requests
5856 python-setuptools))
5857 (home-page "https://github.com/p1c2u/openapi-spec-validator")
5858 (synopsis "OpenAPI spec validator")
5859 (description "OpenAPI Spec Validator is a Python library that validates an
5860OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
58613.0 and OpenAPI 3.1 specifications. The validator aims to check for full
5862compliance with the specification.")
5863 (license license:asl2.0)))
5864
5865(define-public python-openapi-core
5866 (package
5867 (name "python-openapi-core")
5868 (version "0.19.4")
5869 (source
5870 (origin
5871 (method git-fetch)
5872 (uri (git-reference
5873 (url "https://github.com/p1c2u/openapi-core")
5874 (commit version)))
5875 (file-name (git-file-name name version))
5876 (sha256
5877 (base32
5878 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
5879 (build-system pyproject-build-system)
5880 (arguments
5881 (list
5882 #:test-flags
5883 '(list "tests/unit"
5884 "-k" "not test_chars_valid")))
5885 (native-inputs (list python-django
5886 python-falcon
5887 python-flask
5888 python-mock
5889 python-poetry-core
5890 python-pytest
5891 python-pytest-asyncio
5892 python-responses))
5893 (propagated-inputs
5894 (list python-attrs
5895 python-aiohttp
5896 python-isodate
5897 python-jsonschema
5898 python-lazy-object-proxy
5899 python-more-itertools
5900 python-openapi-schema-validator
5901 python-openapi-spec-validator
5902 python-parse
5903 python-six
5904 python-werkzeug))
5905 (home-page "https://github.com/p1c2u/openapi-core")
5906 (synopsis "OpenAPI core library")
5907 (description "Openapi-core is a Python library that adds client-side and
5908server-side support for the OpenAPI Specification v3. It has features such
5909as:
5910@itemize
5911@item Validation of requests and responses
5912@item Schema casting and unmarshalling
5913@item Media type and parameters deserialization
5914@item Security providers (API keys, Cookie, Basic and Bearer HTTP
5915authentications)
5916@item Custom deserializers and formats
5917@item Integration with libraries and frameworks.
5918@end itemize")
5919 (license license:bsd-3)))
5920
5921(define-public python-openid
5922 (package
5923 (name "python-openid")
5924 (version "3.2.0")
5925 (source
5926 (origin
5927 (method url-fetch)
5928 (uri (pypi-uri "python3-openid" version))
5929 (sha256
5930 (base32
5931 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
5932 (build-system pyproject-build-system)
5933 (arguments
5934 `(#:phases
5935 (modify-phases %standard-phases
5936 (replace 'check
5937 (lambda* (#:key tests? #:allow-other-keys)
5938 (when tests?
5939 (invoke "python" "-m" "unittest" "openid.test.test_suite")))))))
5940 (propagated-inputs
5941 (list python-defusedxml))
5942 (native-inputs
5943 (list python-psycopg2 python-django python-setuptools python-wheel))
5944 (home-page "https://github.com/necaris/python3-openid")
5945 (synopsis "OpenID support for servers and consumers")
5946 (description "This library provides OpenID authentication for Python, both
5947for clients and servers.")
5948 (license license:asl2.0)))
5949
5950(define-public python-cssutils
5951 (package
5952 (name "python-cssutils")
5953 (version "2.11.1")
5954 (source
5955 (origin
5956 (method url-fetch)
5957 (uri (pypi-uri "cssutils" version))
5958 (sha256
5959 (base32
5960 "1qpq7xvzqp4cfcb8837rnd30x4hws3rkp33qpvmnxbxn2djsfqq5"))))
5961 (build-system pyproject-build-system)
5962 (arguments
5963 (list
5964 #:phases
5965 #~(modify-phases %standard-phases
5966 (replace 'check
5967 (lambda _
5968 (invoke "pytest" "-vv" "-k"
5969 (string-append "not encutils "
5970 "and not website.logging")))))))
5971 (native-inputs
5972 (list python-cssselect
5973 python-jaraco-test
5974 python-lxml
5975 python-pytest
5976 python-setuptools
5977 python-wheel))
5978 (propagated-inputs
5979 (list python-more-itertools))
5980 (home-page "https://github.com/jaraco/cssutils")
5981 (synopsis
5982 "CSS Cascading Style Sheets library for Python")
5983 (description
5984 "Cssutils is a Python package for parsing and building CSS
5985Cascading Style Sheets. Currently it provides a DOM only and no rendering
5986options.")
5987 (license license:lgpl3+)))
5988
5989(define-public python-css-parser
5990 (package
5991 (inherit python-cssutils)
5992 (name "python-css-parser")
5993 (version "1.0.10")
5994 (source
5995 (origin
5996 (method url-fetch)
5997 (uri (pypi-uri "css-parser" version))
5998 (sha256
5999 (base32 "0qs375slcwqd7slizh6hzkwxx7cdj36v8kwn0qrfji1kscm9f7mz"))))
6000 (home-page "https://github.com/ebook-utils/css-parser")
6001 (synopsis "Fork of cssutils modified for parsing ebooks")
6002 (description
6003 "Css-parser is a Python package for parsing and building CSS
6004Cascading Style Sheets. Currently it provides a DOM only and no rendering
6005options.
6006
6007It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
6008cssutils not receiving updates as of 1.0.2.")
6009 (license license:lgpl3+)))
6010
6011(define-public python-cssselect
6012 (package
6013 (name "python-cssselect")
6014 (version "1.2.0")
6015 (source (origin
6016 ;; The PyPI release does not contain tests.
6017 (method git-fetch)
6018 (uri (git-reference
6019 (url "https://github.com/scrapy/cssselect")
6020 (commit (string-append "v" version))))
6021 (file-name (git-file-name name version))
6022 (sha256
6023 (base32
6024 "1x4nrvb1p1byi1whmspik7lbh303akdlh762dayfxam3hycsh5kk"))))
6025 (build-system pyproject-build-system)
6026 (native-inputs
6027 (list python-lxml python-pytest python-setuptools python-wheel))
6028 (home-page "https://github.com/scrapy/cssselect")
6029 (synopsis "CSS3 selector parser and translator to XPath 1.0")
6030 (description
6031 "Cssselect ia a Python module that parses CSS3 Selectors and translates
6032them to XPath 1.0 expressions. Such expressions can be used in lxml or
6033another XPath engine to find the matching elements in an XML or HTML document.")
6034 (license license:bsd-3)))
6035
6036(define-public python-databricks-cli
6037 (package
6038 (name "python-databricks-cli")
6039 (version "0.18.0")
6040 (home-page "https://github.com/databricks/databricks-cli")
6041 (source (origin
6042 (method git-fetch)
6043 (uri (git-reference (url home-page) (commit version)))
6044 (file-name (git-file-name name version))
6045 (sha256
6046 (base32
6047 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
6048 (build-system pyproject-build-system)
6049 (arguments
6050 (list #:phases #~(modify-phases %standard-phases
6051 (replace 'check
6052 (lambda _
6053 (invoke "pytest" "tests" "-vv"))))))
6054 (native-inputs
6055 ;; For tests.
6056 (list python-decorator
6057 python-mock
6058 python-pytest
6059 python-requests-mock
6060 python-setuptools
6061 python-wheel))
6062 (propagated-inputs
6063 (list python-click
6064 python-oauthlib
6065 python-pyjwt
6066 python-requests
6067 python-six
6068 python-tabulate))
6069 (synopsis "Command line interface for Databricks")
6070 (description
6071 "The Databricks Command Line Interface is a tool which provides an easy
6072to use interface to the Databricks platform. The CLI is built on top of the
6073Databricks REST APIs.")
6074 (license license:asl2.0)))
6075
6076(define-public python-openid-cla
6077 ;; XXX: Last updated in 2015.
6078 (package
6079 (name "python-openid-cla")
6080 (version "1.2")
6081 (source
6082 (origin
6083 (method url-fetch)
6084 (uri (pypi-uri "python-openid-cla" version))
6085 (sha256
6086 (base32
6087 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
6088 (build-system pyproject-build-system)
6089 (arguments '(#:tests? #f)) ; No tests.
6090 (native-inputs (list python-setuptools python-wheel))
6091 (propagated-inputs (list python-openid python-six))
6092 (home-page "https://github.com/puiterwijk/python-openid-cla/")
6093 (synopsis "Implementation of the OpenID CLA extension for python-openid")
6094 (description "@code{openid-cla} is an implementation of the OpenID
6095contributor license agreement extension for python-openid.")
6096 (license license:bsd-3)))
6097
6098(define-public python-openid-teams
6099 ;; XXX: Last updated in 2018.
6100 (package
6101 (name "python-openid-teams")
6102 (version "1.1")
6103 (source
6104 (origin
6105 (method url-fetch)
6106 (uri (pypi-uri "python-openid-teams" version))
6107 (sha256
6108 (base32
6109 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
6110 (build-system pyproject-build-system)
6111 (arguments '(#:tests? #f)) ; No tests.
6112 (native-inputs (list python-setuptools python-wheel))
6113 (propagated-inputs (list python-openid python-six))
6114 (home-page "https://github.com/puiterwijk/python-openid-teams/")
6115 (synopsis "Implementation of the OpenID teams extension for python-openid")
6116 (description
6117 "@code{openid-teams} is an implementation of the OpenID
6118teams extension for python-openid.")
6119 (license license:bsd-3)))
6120
6121(define-public python-priority
6122 (package
6123 (name "python-priority")
6124 (version "2.0.0")
6125 (source
6126 (origin
6127 (method url-fetch)
6128 (uri (pypi-uri "priority" version))
6129 (sha256
6130 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
6131 (build-system pyproject-build-system)
6132 (native-inputs
6133 (list python-pytest python-setuptools python-wheel))
6134 (home-page "https://python-hyper.org/projects/priority/en/latest/")
6135 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
6136 (description
6137 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
6138set out in RFC 7540 Section 5.3 (Stream Priority).")
6139 (license license:expat)))
6140
6141(define-public python-weblate-language-data
6142 (package
6143 (name "python-weblate-language-data")
6144 (version "2025.8")
6145 (source
6146 (origin
6147 (method url-fetch)
6148 (uri (pypi-uri "weblate_language_data" version))
6149 (sha256
6150 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
6151 (build-system pyproject-build-system)
6152 (arguments (list #:tests? #f)) ;not tests, just data files
6153 (native-inputs
6154 (list python-setuptools))
6155 (propagated-inputs
6156 (list python-translate-toolkit))
6157 (home-page "https://github.com/WeblateOrg/language-data")
6158 (synopsis "Language definitions for Weblate")
6159 (description
6160 "This package provides language definitions used by
6161@url{https://weblate.org/, Weblate}i.")
6162 (license license:expat)))
6163
6164(define-public python-wikidata
6165 (package
6166 (name "python-wikidata")
6167 (version "0.8.1")
6168 (source
6169 (origin
6170 (method git-fetch)
6171 (uri (git-reference
6172 (url "https://github.com/dahlia/wikidata")
6173 (commit version)))
6174 (file-name (git-file-name name version))
6175 (sha256
6176 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
6177 (build-system pyproject-build-system)
6178 (native-inputs
6179 (list python-pytest python-setuptools))
6180 (home-page "https://github.com/dahlia/wikidata")
6181 (synopsis "Wikidata client library")
6182 (description
6183 "This package provides a Python interface to @url{https://www.wikidata.org/,
6184Wikidata}.")
6185 (license license:gpl3+)))
6186
6187(define-public python-wsproto
6188 (package
6189 (name "python-wsproto")
6190 (version "1.2.0")
6191 (source
6192 (origin
6193 (method url-fetch)
6194 (uri (pypi-uri "wsproto" version))
6195 (sha256
6196 (base32 "0rahm1j9danv1l6i6as80acwv16ycihxkhrvwjiqh9drxhk5ymmd"))))
6197 (build-system pyproject-build-system)
6198 (native-inputs
6199 (list python-pytest python-setuptools python-wheel))
6200 (propagated-inputs
6201 (list python-h11))
6202 (home-page "https://github.com/python-hyper/wsproto/")
6203 (synopsis "WebSockets state-machine based protocol implementation")
6204 (description
6205 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
6206stack. It's written from the ground up to be embeddable in whatever program you
6207choose to use, ensuring that you can communicate via WebSockets, as defined in
6208RFC6455, regardless of your programming paradigm.")
6209 (license license:expat)))
6210
6211(define-public hypercorn
6212 (package
6213 (name "hypercorn")
6214 (version "0.18.0")
6215 (source
6216 (origin
6217 (method git-fetch) ;PyPI does not have tests
6218 (uri (git-reference
6219 (url "https://github.com/pgjones/hypercorn")
6220 (commit version)))
6221 (file-name (git-file-name name version))
6222 (sha256
6223 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
6224 (build-system pyproject-build-system)
6225 ;; Propagate because Hypercorn also exposes functionality over a module.
6226 (propagated-inputs (list python-h11
6227 python-h2
6228 python-priority
6229 python-tomli
6230 python-wsproto))
6231 (native-inputs (list nss-certs-for-test
6232 python-httpx
6233 python-pdm-backend
6234 python-poetry-core
6235 python-pytest
6236 python-pytest-asyncio
6237 python-pytest-trio
6238 python-trio))
6239 (home-page "https://gitlab.com/pgjones/hypercorn/")
6240 (synopsis "ASGI Server based on Hyper libraries")
6241 (description
6242 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
6243wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
6244WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
6245can utilise asyncio, uvloop, or trio worker types.")
6246 (license license:expat)))
6247
6248(define-public python-querystring-parser
6249 (package
6250 (name "python-querystring-parser")
6251 (version "1.2.4")
6252 (source
6253 (origin
6254 (method git-fetch)
6255 (uri (git-reference
6256 (url "https://github.com/bernii/querystring-parser")
6257 (commit version)))
6258 (file-name (git-file-name name version))
6259 (sha256
6260 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
6261 (build-system pyproject-build-system)
6262 (arguments
6263 (list
6264 #:test-backend #~'custom
6265 #:test-flags #~(list "querystring_parser/tests.py")
6266 #:phases
6267 #~(modify-phases %standard-phases
6268 (add-after 'unpack 'fix-python-incompatibilities
6269 (lambda _
6270 (substitute* "querystring_parser/tests.py"
6271 ;; XXX FIXME: This test is broken with Python 3.7:
6272 ;; https://github.com/bernii/querystring-parser/issues/35
6273 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
6274 "True")
6275 ;; Removed in Python 3.12.
6276 (("assertEquals")
6277 "assertEqual")))))))
6278 (native-inputs (list python-setuptools))
6279 (propagated-inputs (list python-six))
6280 (home-page "https://github.com/bernii/querystring-parser")
6281 (synopsis "QueryString parser that correctly handles nested dictionaries")
6282 (description
6283 "This package provides a query string parser for Python and Django
6284projects that correctly creates nested dictionaries from sent form/querystring
6285data.")
6286 (license license:expat)))
6287
6288(define-public python-tornado
6289 (package
6290 (name "python-tornado")
6291 (version "6.4.2")
6292 (source
6293 (origin
6294 (method url-fetch)
6295 (uri (pypi-uri "tornado" version))
6296 (sha256
6297 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
6298 (build-system pyproject-build-system)
6299 (arguments
6300 (list
6301 #:test-flags
6302 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
6303 #~(list "--ignore=tornado/test/iostream_test.py")))
6304 (native-inputs
6305 (list python-certifi
6306 python-pytest
6307 python-setuptools))
6308 (home-page "https://www.tornadoweb.org/")
6309 (synopsis "Python web framework and asynchronous networking library")
6310 (description
6311 "Tornado is a Python web framework and asynchronous networking library,
6312originally developed at FriendFeed. By using non-blocking network I/O,
6313Tornado can scale to tens of thousands of open connections, making it ideal
6314for long polling, WebSockets, and other applications that require a long-lived
6315connection to each user.")
6316 (license license:asl2.0)))
6317
6318;; XXX: Deprecated on <2026-01-23>.
6319(define-deprecated-package python-tornado-6 python-tornado)
6320
6321(define-public python-tornado-http-auth
6322 (package
6323 (name "python-tornado-http-auth")
6324 (version "1.1.1")
6325 (source
6326 (origin
6327 (method git-fetch)
6328 (uri (git-reference
6329 (url "https://github.com/gvalkov/tornado-http-auth")
6330 (commit (string-append "v" version))))
6331 (file-name (git-file-name name version))
6332 (sha256
6333 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
6334 (build-system pyproject-build-system)
6335 ;; XXX: This version is incompatible with current tornado.testing.
6336 (arguments (list #:tests? #f))
6337 (native-inputs (list python-setuptools))
6338 (propagated-inputs (list python-tornado))
6339 (home-page "https://github.com/gvalkov/tornado-http-auth")
6340 (synopsis "Digest and basic authentication module for Tornado")
6341 (description
6342 "Provides support for adding authentication to services using the Tornado
6343web framework, either via the basic or digest authentication schemes.")
6344 (license license:asl2.0)))
6345
6346(define-public python-wsgi-intercept
6347 (package
6348 (name "python-wsgi-intercept")
6349 (version "1.13.1")
6350 (source (origin
6351 (method url-fetch)
6352 (uri (pypi-uri "wsgi_intercept" version))
6353 (sha256
6354 (base32
6355 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
6356 (build-system pyproject-build-system)
6357 (arguments
6358 (list
6359 ;; XXX: tests required internet access
6360 #:tests? #f))
6361 (propagated-inputs
6362 (list python-six))
6363 (native-inputs
6364 (list python-httplib2
6365 python-pytest
6366 python-requests
6367 python-setuptools
6368 python-urllib3
6369 python-wheel))
6370 (synopsis "Puts a WSGI application in place of a real URI for testing")
6371 (description "Wsgi_intercept installs a WSGI application in place of a real
6372URI for testing. Testing a WSGI application normally involves starting a
6373server at a local host and port, then pointing your test code to that address.
6374Instead, this library lets you intercept calls to any specific host/port
6375combination and redirect them into a WSGI application importable by your test
6376program. Thus, you can avoid spawning multiple processes or threads to test
6377your Web app.")
6378 (home-page "https://github.com/cdent/wsgi-intercept")
6379 (license license:expat)))
6380
6381(define-public python-webob
6382 (package
6383 (name "python-webob")
6384 (version "1.8.10")
6385 (source
6386 (origin
6387 (method url-fetch)
6388 (uri (pypi-uri "webob" version))
6389 (sha256
6390 (base32
6391 "0avwfsqqva46aix1p61jbwjsw7kh6zkxvfds9xi3zg07yc8km5hw"))))
6392 (build-system pyproject-build-system)
6393 ;; tests: 2394 passed, 9 skipped, 1 xfailed, 35 warnings
6394 (native-inputs
6395 (list python-pytest
6396 python-setuptools))
6397 (home-page "https://webob.org/")
6398 (synopsis "WSGI request and response object")
6399 (description
6400 "WebOb provides wrappers around the WSGI request environment, and an
6401object to help create WSGI responses.")
6402 (license license:expat)))
6403
6404(define-public python-yewtube-search
6405 (package
6406 (name "python-yewtube-search")
6407 ;; Original repository for python-youtube-search package is archived, see:
6408 ;; <https://github.com/alexmercerind/youtube-search-python/issues/189>.
6409 ;; The most promising fork was
6410 ;; <https://github.com/ahmedayyad-dev/youtube-search-python-fork> which is
6411 ;; archived since <2026-04-04>. This is another fork with a different PyPI
6412 ;; name for python-yewtube.
6413 (version "1.6.7")
6414 (source
6415 (origin
6416 (method url-fetch)
6417 (uri (pypi-uri "yewtube_search_python" version))
6418 (sha256
6419 (base32 "0vjh4wrlqx4lv9qi6572jx2d0rsp6gkvaqf0f2ar4npdz0ldgl47"))))
6420 (build-system pyproject-build-system)
6421 (arguments (list #:tests? #f)) ;no tests in repository
6422 (native-inputs
6423 (list python-setuptools))
6424 (propagated-inputs
6425 (list python-httpx))
6426 (home-page "https://github.com/iamtalhaasghar/youtube-search-python")
6427 (synopsis "Search for YouTube videos, channels & playlists")
6428 (description
6429 "This package provides tools to search for @code{YouTube} videos,
6430channels and playlists; as well as getting video metadata from links. This
6431package does not rely on the @code{YouTube} Data API v3.")
6432 (license license:expat)))
6433
6434(define-public python-zc-lockfile
6435 (package
6436 (name "python-zc-lockfile")
6437 (version "4.0")
6438 (source
6439 (origin
6440 (method git-fetch)
6441 (uri (git-reference
6442 (url "https://github.com/zopefoundation/zc.lockfile")
6443 (commit version)))
6444 (file-name (git-file-name name version))
6445 (sha256
6446 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
6447 (build-system pyproject-build-system)
6448 (arguments
6449 (list
6450 #:phases
6451 #~(modify-phases %standard-phases
6452 (replace 'check
6453 (lambda* (#:key tests? #:allow-other-keys)
6454 (if tests?
6455 (invoke "zope-testrunner" "--test-path=src")
6456 (format #t "test suite not run~%")))))))
6457 (native-inputs (list python-zope-testing python-zope-testrunner
6458 python-setuptools))
6459 (home-page "https://github.com/zopefoundation/zc.lockfile")
6460 (synopsis "Interprocess locks using lock files")
6461 (description
6462 "This package provides an implementation of interprocess locks using lock
6463files. These locks can also be used to mediate access to other files.")
6464 (license license:zpl2.1)))
6465
6466(define-public python-zconfig
6467 (package
6468 (name "python-zconfig")
6469 (version "4.3")
6470 (source
6471 (origin
6472 (method git-fetch)
6473 (uri (git-reference
6474 (url "https://github.com/zopefoundation/ZConfig/")
6475 (commit version)))
6476 (file-name (git-file-name name version))
6477 (sha256
6478 (base32 "06c4vffk51fw03q87r31s81b0xbxg2qqvjfmcl2z4hg21fr088c2"))))
6479 (build-system pyproject-build-system)
6480 (arguments
6481 (list
6482 #:phases
6483 #~(modify-phases %standard-phases
6484 (replace 'check
6485 (lambda* (#:key tests? #:allow-other-keys)
6486 (if tests?
6487 (begin
6488 ;; This test assumes we still have setup.py in the
6489 ;; directory from which we import zconfig, which
6490 ;; does not work after installing the package.
6491 (delete-file-recursively
6492 "src/ZConfig/tests/test_readme.py")
6493 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
6494 (format #t "test suite not run~%")))))))
6495 (native-inputs (list python-docutils python-manuel python-zope-exceptions
6496 python-zope-testrunner python-setuptools))
6497 (home-page "https://github.com/zopefoundation/ZConfig/")
6498 (synopsis "Structured configuration library intended for general use")
6499 (description
6500 "@code{zconfig} is a configuration library intended for general use. It
6501supports a hierarchical schema-driven configuration model that allows a schema
6502to specify data conversion routines written in Python. Its model is very
6503different from the model supported by the @code{configparser} module found in
6504Python's standard library, and is more suitable to configuration-intensive
6505applications.")
6506 (license license:zpl2.1)))
6507
6508(define-public python-zodb
6509 (package
6510 (name "python-zodb")
6511 (version "6.0.1")
6512 (source
6513 (origin
6514 (method url-fetch)
6515 (uri (pypi-uri "zodb" version))
6516 (sha256
6517 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
6518 (build-system pyproject-build-system)
6519 (arguments
6520 (list
6521 #:phases
6522 #~(modify-phases %standard-phases
6523 (replace 'check
6524 (lambda* (#:key tests? #:allow-other-keys)
6525 (if tests?
6526 (begin
6527 ;; This test does not work after installing the
6528 ;; package, since it expects the ZODB source code
6529 ;; to reside in the src/ directory.
6530 (delete-file-recursively
6531 "src/ZODB/tests/testdocumentation.py")
6532 (invoke "zope-testrunner" "-vv" "--test-path=src"
6533 "--all"))
6534 (format #t "test suite not run~%")))))))
6535 (native-inputs
6536 (list python-manuel
6537 python-wheel
6538 python-zope-testing
6539 python-zope-testrunner))
6540 (propagated-inputs
6541 (list python-btrees
6542 python-persistent
6543 python-transaction
6544 python-zc-lockfile
6545 python-zconfig
6546 python-zodbpickle
6547 python-zope-interface))
6548 (home-page "http://zodb-docs.readthedocs.io")
6549 (synopsis "Object-oriented database for Python")
6550 (description
6551 "@code{ZODB} provides an object-oriented and @acronym{ACID,
6552Atomicity Consistency Isolation Durability} compliant database for Python with
6553a high degree of transparency. @code{ZODB} is an object-oriented database,
6554not an object-relational mapping. This comes with several advantaged:
6555
6556@itemize
6557@item no separate language for database operations
6558@item very little impact on your code to make objects persistent
6559@item no database mapper that partially hides the database.
6560@item almost no seam between code and database.
6561@end itemize")
6562 (license license:zpl2.1)))
6563
6564(define-public python-zodbpickle
6565 (package
6566 (name "python-zodbpickle")
6567 (version "3.2")
6568 (source
6569 (origin
6570 (method url-fetch)
6571 (uri (pypi-uri "zodbpickle" version))
6572 (sha256
6573 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
6574 (build-system pyproject-build-system)
6575 (arguments
6576 '(#:phases (modify-phases %standard-phases
6577 (replace 'check
6578 (lambda* (#:key tests? #:allow-other-keys)
6579 (if tests?
6580 (invoke "zope-testrunner" "-vv" "--test-path=src"
6581 "--all")
6582 (format #t "test suite not run~%")))))))
6583 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
6584 (home-page "https://github.com/zopefoundation/zodbpickle")
6585 (synopsis "Uniform pickling interface for @code{zodb}")
6586 (description
6587 "This package is a fork of the @code{pickle} module (and the
6588supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
6589support for the @code{noload} operations used by @code{zodb}.")
6590 (license (list license:psfl license:zpl2.1))))
6591
6592(define-public python-zope-dottedname
6593 (package
6594 (name "python-zope-dottedname")
6595 (version "7.0")
6596 (source
6597 (origin
6598 (method git-fetch)
6599 (uri (git-reference
6600 (url "https://github.com/zopefoundation/zope.dottedname")
6601 (commit version)))
6602 (file-name (git-file-name name version))
6603 (sha256
6604 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
6605 (build-system pyproject-build-system)
6606 (arguments
6607 (list #:test-backend #~'custom
6608 #:test-flags #~(list "src/zope/dottedname/tests.py")))
6609 (native-inputs (list python-setuptools))
6610 (home-page "https://zopedottedname.readthedocs.io")
6611 (synopsis "Resolver for Python dotted names")
6612 (description
6613 "This package provides a @code{resolve()} function that resolves strings
6614containing dotted names into the appropriate Python object.")
6615 (license license:zpl2.1)))
6616
6617(define-public python-zope-event
6618 (package
6619 (name "python-zope-event")
6620 (version "6.0")
6621 (source
6622 (origin
6623 (method git-fetch)
6624 (uri (git-reference
6625 (url "https://github.com/zopefoundation/zope.event")
6626 (commit version)))
6627 (file-name (git-file-name name version))
6628 (sha256
6629 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
6630 (build-system pyproject-build-system)
6631 (arguments
6632 (list
6633 #:test-flags
6634 #~(list "src/zope/event/tests.py")))
6635 (native-inputs (list python-pytest python-setuptools))
6636 (home-page "https://zopeevent.readthedocs.io/en/latest/")
6637 (synopsis "Event publishing system for Python")
6638 (description
6639 "Zope.event provides an event publishing API, intended for use by
6640applications which are unaware of any subscribers to their events. It is a
6641simple event-dispatching system on which more sophisticated event dispatching
6642systems can be built.")
6643 (license license:zpl2.1)))
6644
6645(define-public python-zope-interface
6646 (package
6647 (name "python-zope-interface")
6648 (version "7.2")
6649 (source
6650 (origin
6651 (method git-fetch)
6652 (uri (git-reference
6653 (url "https://github.com/zopefoundation/zope.interface")
6654 (commit version)))
6655 (file-name (git-file-name name version))
6656 (sha256
6657 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
6658 (build-system pyproject-build-system)
6659 (arguments
6660 ;; XXX: test suite can't find python-zope-testing
6661 (list #:tests? #f))
6662 (native-inputs (list python-setuptools))
6663 (home-page "https://zopeinterface.readthedocs.io")
6664 (synopsis "\"Design by contract\" methodology in Python")
6665 (description
6666 "Zope.interface provides an implementation of \"object interfaces\" for
6667Python. Interfaces are a mechanism for labeling objects as conforming to a
6668given API or contract.")
6669 (license license:zpl2.1)))
6670
6671(define-public python-zope-exceptions
6672 (package
6673 (name "python-zope-exceptions")
6674 (version "6.0")
6675 (source
6676 (origin
6677 (method git-fetch)
6678 (uri (git-reference
6679 (url "https://github.com/zopefoundation/zope.exceptions")
6680 (commit version)))
6681 (file-name (git-file-name name version))
6682 (sha256
6683 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
6684 (build-system pyproject-build-system)
6685 (arguments
6686 (list
6687 #:phases
6688 #~(modify-phases %standard-phases
6689 (replace 'check
6690 (lambda* (#:key tests? #:allow-other-keys)
6691 (if tests?
6692 (invoke "zope-testrunner" "--test-path=src")
6693 (format #t "test suite not run~%")))))))
6694 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
6695 (propagated-inputs (list python-zope-interface))
6696 (home-page "https://github.com/zopefoundation/zope.exceptions")
6697 (synopsis "Zope exceptions")
6698 (description
6699 "Zope.exceptions provides general-purpose exception types that have uses
6700outside of the Zope framework.")
6701 (license license:zpl2.1)))
6702
6703(define (python-zope-bootstrap-package orig)
6704 (package
6705 (inherit orig)
6706 (name (string-append (package-name orig) "-bootstrap"))
6707 (arguments
6708 (if (null? (package-arguments orig))
6709 (list
6710 #:tests? #f
6711 #:phases #~(modify-phases %standard-phases
6712 (delete 'sanity-check)))
6713 (substitute-keyword-arguments arguments
6714 ((#:tests? _ #f) #f)
6715 ((#:phases phases '%standard-phases)
6716 #~(modify-phases #$phases
6717 (delete 'sanity-check))))))
6718 (propagated-inputs `())
6719 (native-inputs (list python-setuptools))
6720 (properties `((hidden? . #t)))))
6721
6722(define-public python-zope-exceptions-bootstrap
6723 (python-zope-bootstrap-package python-zope-exceptions))
6724
6725(define-public python-zope-testing
6726 (package
6727 (name "python-zope-testing")
6728 (version "6.0")
6729 (source
6730 (origin
6731 (method git-fetch)
6732 (uri (git-reference
6733 (url "https://github.com/zopefoundation/zope.testing")
6734 (commit version)))
6735 (file-name (git-file-name name version))
6736 (sha256
6737 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
6738 (build-system pyproject-build-system)
6739 (arguments
6740 (list
6741 #:phases
6742 #~(modify-phases %standard-phases
6743 (replace 'check
6744 (lambda* (#:key tests? #:allow-other-keys)
6745 (if tests?
6746 (invoke "zope-testrunner" "--test-path=src")
6747 (format #t "test suite not run~%")))))))
6748 (native-inputs (list python-setuptools
6749 python-zope-interface
6750 python-zope-testrunner-bootstrap))
6751 (home-page "https://zopetesting.readthedocs.io/")
6752 (synopsis "Zope testing helpers")
6753 (description
6754 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
6755servers, regular expressions, and more.")
6756 (license license:zpl2.1)))
6757
6758(define-public python-zope-testrunner
6759 (package
6760 (name "python-zope-testrunner")
6761 (version "7.4")
6762 (source
6763 (origin
6764 (method git-fetch)
6765 (uri (git-reference
6766 (url "https://github.com/zopefoundation/zope.testrunner")
6767 (commit version)))
6768 (file-name (git-file-name name version))
6769 (sha256
6770 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
6771 (build-system pyproject-build-system)
6772 (arguments
6773 (list
6774 #:phases
6775 #~(modify-phases %standard-phases
6776 (add-after 'unpack 'remove-problematic-test
6777 (lambda _
6778 ;; This test contains invalid syntax, which breaks bytecode
6779 ;; compilation. For simplicity just remove it.
6780 (delete-file
6781 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
6782 (replace 'check
6783 (lambda* (#:key tests? #:allow-other-keys)
6784 (if tests?
6785 (invoke "zope-testrunner" "--test-path=src")
6786 (format #t "test suite not run~%")))))))
6787 (native-inputs (list python-setuptools python-zope-testing))
6788 (propagated-inputs (list python-zope-exceptions python-zope-interface))
6789 (home-page "https://zopetestrunner.readthedocs.io")
6790 (synopsis "Zope testrunner script")
6791 (description "This package provides a script for running Python tests.")
6792 (license license:zpl2.1)))
6793
6794(define-public python-zope-testrunner-bootstrap
6795 (package
6796 (inherit (python-zope-bootstrap-package python-zope-testrunner))
6797 (propagated-inputs
6798 (list python-six python-zope-exceptions-bootstrap))
6799 (properties `((hidden? . #t)))))
6800
6801(define-public python-zope-i18nmessageid
6802 (package
6803 (name "python-zope-i18nmessageid")
6804 (version "7.0")
6805 (source
6806 (origin
6807 (method git-fetch)
6808 (uri (git-reference
6809 (url "https://github.com/zopefoundation/zope.i18nmessageid")
6810 (commit version)))
6811 (file-name (git-file-name name version))
6812 (sha256
6813 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
6814 (build-system pyproject-build-system)
6815 (arguments
6816 (list
6817 #:phases
6818 #~(modify-phases %standard-phases
6819 (replace 'check
6820 (lambda* (#:key tests? #:allow-other-keys)
6821 (if tests?
6822 (invoke "zope-testrunner" "--test-path=src")
6823 (format #t "test suite not run~%")))))))
6824 (native-inputs (list python-setuptools python-zope-testrunner))
6825 (home-page "https://zopei18nmessageid.readthedocs.io")
6826 (synopsis "Message identifiers for internationalization")
6827 (description "Zope.i18nmessageid provides facilities for declaring
6828internationalized messages within program source text.")
6829 (license license:zpl2.1)))
6830
6831(define-public python-zope-schema
6832 (package
6833 (name "python-zope-schema")
6834 (version "7.0.1")
6835 (source
6836 (origin
6837 (method git-fetch)
6838 (uri (git-reference
6839 (url "https://github.com/zopefoundation/zope.schema")
6840 (commit version)))
6841 (file-name (git-file-name name version))
6842 (sha256
6843 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
6844 (build-system pyproject-build-system)
6845 (arguments
6846 (list
6847 #:phases
6848 #~(modify-phases %standard-phases
6849 (replace 'check
6850 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6851 (add-installed-pythonpath inputs outputs)
6852 (if tests?
6853 (invoke "zope-testrunner" "--test-path=src")
6854 (format #t "test suite not run.~%")))))))
6855 (propagated-inputs (list python-zope-event python-zope-interface))
6856 (native-inputs (list python-zope-i18nmessageid python-zope-testing
6857 python-zope-testrunner python-setuptools))
6858 (home-page "https://zopeschema.readthedocs.io")
6859 (synopsis "Zope data schemas")
6860 (description "Zope.scheme provides extensions to zope.interface for
6861defining data schemas.")
6862 (license license:zpl2.1)))
6863
6864(define-public python-zope-sqlalchemy
6865 (package
6866 (name "python-zope-sqlalchemy")
6867 (version "1.6")
6868 (source
6869 (origin
6870 (method git-fetch)
6871 (uri (git-reference
6872 (url "https://github.com/zopefoundation/zope.sqlalchemy")
6873 (commit version)))
6874 (file-name (git-file-name name version))
6875 (sha256
6876 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
6877 (build-system pyproject-build-system)
6878 (arguments
6879 (list
6880 #:phases
6881 #~(modify-phases %standard-phases
6882 (replace 'check
6883 (lambda* (#:key tests? #:allow-other-keys)
6884 (if tests?
6885 (invoke "zope-testrunner" "--test-path=src")
6886 (format #t "test suite not run~%")))))))
6887 (propagated-inputs (list python-sqlalchemy python-transaction
6888 python-zope-interface))
6889 (native-inputs (list python-zope-testing python-zope-testrunner
6890 python-setuptools))
6891 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
6892 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
6893 (description
6894 "The aim of this package is to unify the plethora of existing packages
6895integrating SQLAlchemy with Zope's transaction management. As such,it only
6896provides a data manager and makes no attempt to define a @i{zopeish} way to
6897configure engines.")
6898 (license license:zpl2.1)))
6899
6900(define-public python-zope-configuration
6901 (package
6902 (name "python-zope-configuration")
6903 (version "7.0")
6904 (source
6905 (origin
6906 (method git-fetch)
6907 (uri (git-reference
6908 (url "https://github.com/zopefoundation/zope.configuration")
6909 (commit version)))
6910 (file-name (git-file-name name version))
6911 (sha256
6912 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
6913 (build-system pyproject-build-system)
6914 (arguments
6915 (list
6916 #:phases
6917 #~(modify-phases %standard-phases
6918 (replace 'check
6919 (lambda* (#:key tests? #:allow-other-keys)
6920 (if tests?
6921 (invoke "zope-testrunner" "--test-path=src")
6922 (format #t "test suite not run~%")))))))
6923 (native-inputs (list python-manuel python-setuptools python-zope-testing
6924 python-zope-testrunner))
6925 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
6926 python-zope-schema))
6927 (home-page "https://zopeconfiguration.readthedocs.io")
6928 (synopsis "Zope Configuration Markup Language")
6929 (description "Zope.configuration implements ZCML, the Zope Configuration
6930Markup Language.")
6931 (license license:zpl2.1)))
6932
6933(define-public python-zope-configuration-bootstrap
6934 (python-zope-bootstrap-package python-zope-configuration))
6935
6936(define-public python-zope-copy
6937 (package
6938 (name "python-zope-copy")
6939 (version "6.0")
6940 (source
6941 (origin
6942 (method git-fetch)
6943 (uri (git-reference
6944 (url "https://github.com/zopefoundation/zope.copy")
6945 (commit version)))
6946 (file-name (git-file-name name version))
6947 (sha256
6948 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
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 (propagated-inputs (list python-zope-interface))
6960 (native-inputs
6961 (list python-zodbpickle
6962 python-zope-component-bootstrap
6963 python-zope-location-bootstrap
6964 python-zope-proxy
6965 python-zope-schema
6966 python-zope-testing
6967 python-zope-testrunner
6968 python-setuptools))
6969 (home-page "https://zopecopy.readthedocs.io")
6970 (synopsis "Pluggable object copying mechanism")
6971 (description
6972 "This package provides a pluggable mechanism for copying persistent objects.")
6973 (license license:zpl2.1)))
6974
6975(define-public python-zope-proxy
6976 (package
6977 (name "python-zope-proxy")
6978 (version "7.0")
6979 (source
6980 (origin
6981 (method git-fetch)
6982 (uri (git-reference
6983 (url "https://github.com/zopefoundation/zope.proxy")
6984 (commit version)))
6985 (file-name (git-file-name name version))
6986 (sha256
6987 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
6988 (build-system pyproject-build-system)
6989 (arguments
6990 (list
6991 #:phases
6992 #~(modify-phases %standard-phases
6993 (replace 'check
6994 (lambda* (#:key tests? #:allow-other-keys)
6995 (if tests?
6996 (invoke "zope-testrunner" "--test-path=src")
6997 (format #t "test suite not run~%")))))))
6998 (native-inputs
6999 (list python-zope-location-bootstrap
7000 python-zope-security-bootstrap
7001 python-zope-testrunner
7002 python-setuptools))
7003 (propagated-inputs (list python-zope-interface))
7004 (home-page "https://zopeproxy.readthedocs.io")
7005 (synopsis "Generic, transparent proxies")
7006 (description
7007 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
7008special objects which serve as mostly-transparent wrappers around another
7009object, intervening in the apparent behavior of the wrapped object only when
7010necessary to apply the policy (e.g., access checking, location brokering,
7011etc.) for which the proxy is responsible.")
7012 (license license:zpl2.1)))
7013
7014(define-public python-zope-proxy-bootstrap
7015 (python-zope-bootstrap-package python-zope-proxy))
7016
7017(define-public python-zope-hookable
7018 (package
7019 (name "python-zope-hookable")
7020 (version "7.0")
7021 (source
7022 (origin
7023 (method git-fetch)
7024 (uri (git-reference
7025 (url "https://github.com/zopefoundation/zope.hookable")
7026 (commit version)))
7027 (file-name (git-file-name name version))
7028 (sha256
7029 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
7030 (build-system pyproject-build-system)
7031 (arguments
7032 (list
7033 #:phases
7034 #~(modify-phases %standard-phases
7035 (replace 'check
7036 (lambda* (#:key tests? #:allow-other-keys)
7037 (if tests?
7038 (invoke "zope-testrunner" "--test-path=src")
7039 (format #t "test suite not run~%")))))))
7040 (native-inputs (list python-zope-testing python-zope-testrunner
7041 python-setuptools))
7042 (home-page "https://zopehookable.readthedocs.io")
7043 (synopsis "Zope hookable")
7044 (description
7045 "This package supports the efficient creation of hookable objects, which
7046are callable objects that are meant to be optionally replaced. The idea is
7047that you create a function that does some default thing and make i hookable.
7048Later, someone can modify what it does by calling its sethook method and
7049changing its implementation. All users of the function, including those that
7050imported it, will see the change.")
7051 (license license:zpl2.1)))
7052
7053(define-public python-zope-location
7054 (package
7055 (name "python-zope-location")
7056 (version "6.0")
7057 (source
7058 (origin
7059 (method git-fetch)
7060 (uri (git-reference
7061 (url "https://github.com/zopefoundation/zope.location")
7062 (commit version)))
7063 (file-name (git-file-name name version))
7064 (sha256
7065 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
7066 (build-system pyproject-build-system)
7067 (arguments
7068 (list
7069 #:phases
7070 #~(modify-phases %standard-phases
7071 (replace 'check
7072 (lambda* (#:key tests? #:allow-other-keys)
7073 (if tests?
7074 (invoke "zope-testrunner" "--test-path=src")
7075 (format #t "test suite not run~%")))))))
7076 (native-inputs (list python-zope-testrunner python-setuptools))
7077 (propagated-inputs (list python-zope-interface python-zope-proxy
7078 python-zope-schema))
7079 (home-page "https://zopelocation.readthedocs.io")
7080 (synopsis "Zope location library")
7081 (description
7082 "Zope.location implements the concept of \"locations\" in Zope3, which
7083are are special objects that have a structural location.")
7084 (license license:zpl2.1)))
7085
7086(define-public python-zope-location-bootstrap
7087 (python-zope-bootstrap-package python-zope-location))
7088
7089(define-public python-zope-security
7090 (package
7091 (name "python-zope-security")
7092 (version "7.3")
7093 (source
7094 (origin
7095 (method git-fetch)
7096 (uri (git-reference
7097 (url "https://github.com/zopefoundation/zope.security")
7098 (commit version)))
7099 (file-name (git-file-name name version))
7100 (sha256
7101 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
7102 (build-system pyproject-build-system)
7103 (arguments
7104 (list
7105 #:phases
7106 #~(modify-phases %standard-phases
7107 (replace 'check
7108 (lambda* (#:key tests? #:allow-other-keys)
7109 (if tests?
7110 (invoke "zope-testrunner" "--test-path=src")
7111 (format #t "test suite not run~%")))))))
7112 (propagated-inputs
7113 (list python-zope-component
7114 python-zope-i18nmessageid
7115 python-zope-interface
7116 python-zope-location
7117 python-zope-proxy
7118 python-zope-schema))
7119 (native-inputs
7120 (list python-btrees
7121 python-zope-component-bootstrap
7122 python-zope-configuration-bootstrap
7123 python-zope-location-bootstrap
7124 python-zope-testing
7125 python-zope-testrunner
7126 python-setuptools))
7127 (home-page "https://zopesecurity.readthedocs.io")
7128 (synopsis "Zope security framework")
7129 (description "Zope.security provides a generic mechanism to implement
7130security policies on Python objects.")
7131 (license license:zpl2.1)))
7132
7133(define-public python-zope-security-bootstrap
7134 (package
7135 (inherit (python-zope-bootstrap-package python-zope-security))
7136 (propagated-inputs
7137 (list python-zope-i18nmessageid
7138 python-zope-interface
7139 python-zope-proxy-bootstrap
7140 python-zope-schema))))
7141
7142(define-public python-zope-component
7143 (package
7144 (name "python-zope-component")
7145 (version "7.0")
7146 (source
7147 (origin
7148 (method git-fetch)
7149 (uri (git-reference
7150 (url "https://github.com/zopefoundation/zope.component")
7151 (commit version)))
7152 (file-name (git-file-name name version))
7153 (sha256
7154 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
7155 (build-system pyproject-build-system)
7156 (arguments
7157 (list
7158 #:phases
7159 #~(modify-phases %standard-phases
7160 (replace 'check
7161 (lambda* (#:key tests? #:allow-other-keys)
7162 (if tests?
7163 (invoke "zope-testrunner" "--test-path=src")
7164 (format #t "test suite not run~%")))))))
7165 (native-inputs
7166 (list python-persistent
7167 python-zope-configuration-bootstrap
7168 python-zope-i18nmessageid
7169 python-zope-location-bootstrap
7170 python-zope-proxy-bootstrap
7171 python-zope-security-bootstrap
7172 python-zope-testing
7173 python-zope-testrunner
7174 python-setuptools))
7175 (propagated-inputs
7176 (list python-zope-deferredimport python-zope-deprecation
7177 python-zope-event python-zope-hookable python-zope-interface))
7178 (home-page "https://zopecomponent.readthedocs.io")
7179 (synopsis "Zope Component Architecture")
7180 (description
7181 "Zope.component represents the core of the Zope Component Architecture.
7182Together with the zope.interface package, it provides facilities for defining,
7183registering and looking up components.")
7184 (license license:zpl2.1)))
7185
7186(define-public python-zope-component-bootstrap
7187 (python-zope-bootstrap-package python-zope-component))
7188
7189(define-public python-zope-deferredimport
7190 (package
7191 (name "python-zope-deferredimport")
7192 (version "6.0")
7193 (source
7194 (origin
7195 (method git-fetch)
7196 (uri (git-reference
7197 (url "https://github.com/zopefoundation/zope.deferredimport")
7198 (commit version)))
7199 (file-name (git-file-name name version))
7200 (sha256
7201 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
7202 (build-system pyproject-build-system)
7203 (arguments
7204 (list
7205 #:phases
7206 #~(modify-phases %standard-phases
7207 (replace 'check
7208 (lambda* (#:key tests? #:allow-other-keys)
7209 (if tests?
7210 (invoke "zope-testrunner" "--test-path=src")
7211 (format #t "test suite not run~%")))))))
7212 (propagated-inputs (list python-zope-proxy))
7213 (native-inputs (list python-zope-testrunner python-setuptools))
7214 (home-page "https://zopedeferredimport.readthedocs.io")
7215 (synopsis "Defer imports until used by code")
7216 (description
7217 "Often, especially for package modules, you want to import names for
7218convenience, but not actually perform the imports until necessary. The
7219@code{zope.deferredimport} package provided facilities for defining names in
7220modules that will be imported from somewhere else when used. You can also cause
7221deprecation warnings to be issued when a variable is used.")
7222 (license license:zpl2.1)))
7223
7224(define-public python-ndg-httpsclient
7225 (package
7226 (name "python-ndg-httpsclient")
7227 (version "0.5.1")
7228 (source
7229 (origin
7230 (method git-fetch)
7231 (uri (git-reference
7232 (url "https://github.com/cedadev/ndg_httpsclient/")
7233 (commit version)))
7234 (file-name (git-file-name name version))
7235 (sha256
7236 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
7237 (build-system pyproject-build-system)
7238 (arguments
7239 (list
7240 #:tests? #f)) ;Tests appear to require networking.
7241 (native-inputs (list python-setuptools))
7242 (propagated-inputs (list python-pyasn1 python-pyopenssl))
7243 (synopsis "HTTPS support for Python's httplib and urllib2")
7244 (description
7245 "This is a HTTPS client implementation for httplib and urllib2 based on
7246PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
7247the default provided with Python and, importantly, enables full verification
7248of the SSL peer.")
7249 (home-page "https://github.com/cedadev/ndg_httpsclient/")
7250 (license license:bsd-3)))
7251
7252(define-public python-netaddr
7253 (package
7254 (name "python-netaddr")
7255 (version "1.3.0")
7256 (source
7257 (origin
7258 (method url-fetch)
7259 (uri (pypi-uri "netaddr" version))
7260 (sha256
7261 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
7262 (build-system pyproject-build-system)
7263 (native-inputs (list python-poetry-core
7264 python-pytest
7265 python-setuptools
7266 python-wheel))
7267 (home-page "https://netaddr.readthedocs.io")
7268 (synopsis "Pythonic manipulation of network addresses")
7269 (description
7270 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
7271and MAC network addresses.")
7272 (license license:bsd-3)))
7273
7274(define-public python-nh3
7275 (package
7276 (name "python-nh3")
7277 (version "0.2.20")
7278 (source
7279 (origin
7280 (method url-fetch)
7281 (uri (pypi-uri "nh3" version))
7282 (sha256
7283 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
7284 (build-system pyproject-build-system)
7285 (arguments
7286 (list
7287 #:imported-modules `(,@%cargo-build-system-modules
7288 ,@%pyproject-build-system-modules)
7289 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
7290 (guix build pyproject-build-system)
7291 (guix build utils))
7292 #:phases
7293 #~(modify-phases %standard-phases
7294 (add-after 'unpack 'prepare-cargo-build-system
7295 (lambda args
7296 (for-each
7297 (lambda (phase)
7298 (format #t "Running cargo phase: ~a~%" phase)
7299 (apply (assoc-ref cargo:%standard-phases phase)
7300 #:cargo-target #$(cargo-triplet)
7301 args))
7302 '(unpack-rust-crates
7303 configure
7304 check-for-pregenerated-files
7305 patch-cargo-checksums)))))))
7306 (native-inputs
7307 (append
7308 (list maturin python-pytest rust `(,rust "cargo"))
7309 (or (and=> (%current-target-system)
7310 (compose list make-rust-sysroot))
7311 '())))
7312 (inputs (cargo-inputs 'python-nh3))
7313 (home-page "https://nh3.readthedocs.io")
7314 (synopsis "Python bindings to Ammonia HTML sanitization library")
7315 (description "This package provides Python bindings to Ammonia HTML
7316sanitizer Rust crate.")
7317 (license license:expat)))
7318
7319(define-public python-noiseprotocol
7320 (package
7321 (name "python-noiseprotocol")
7322 (version "0.3.1")
7323 (source
7324 (origin
7325 (method git-fetch)
7326 (uri (git-reference
7327 (url "https://github.com/plizonczyk/noiseprotocol")
7328 (commit (string-append "v" version))))
7329 (file-name (git-file-name name version))
7330 (sha256
7331 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
7332 (build-system pyproject-build-system)
7333 (propagated-inputs (list python-cryptography))
7334 (native-inputs (list python-setuptools python-pytest))
7335 (home-page "https://github.com/plizonczyk/noiseprotocol")
7336 (synopsis "Implementation of Noise Protocol Framework")
7337 (description
7338 "This package provides an implementation of Noise Protocol Framework.")
7339 (license license:expat)))
7340
7341(define-public python-webrtcvad-wheels
7342 (package
7343 (name "python-webrtcvad-wheels")
7344 (version "2.0.14")
7345 (source
7346 (origin
7347 (method git-fetch)
7348 (uri (git-reference
7349 (url "https://github.com/daanzu/py-webrtcvad-wheels")
7350 (commit (string-append "v" version))))
7351 (file-name (git-file-name name version))
7352 (sha256
7353 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
7354 (build-system pyproject-build-system)
7355 (native-inputs (list python-psutil python-pytest python-setuptools))
7356 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
7357 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
7358 (description
7359 "This package provides a Python interface to the Google
7360@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
7361 (license license:expat)))
7362
7363(define-public python-websocket-client
7364 (package
7365 (name "python-websocket-client")
7366 (version "1.8.0")
7367 (source
7368 (origin
7369 (method url-fetch)
7370 (uri (pypi-uri "websocket_client" version))
7371 (sha256
7372 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
7373 (build-system pyproject-build-system)
7374 (arguments
7375 (list
7376 #:test-flags
7377 ;; This test requires networking.
7378 '(list "-k" "not testConnect")))
7379 (native-inputs
7380 (list python-pysocks
7381 python-pytest
7382 python-setuptools
7383 python-websockets
7384 python-wheel))
7385 (home-page "https://github.com/websocket-client/websocket-client")
7386 (synopsis "WebSocket client for Python")
7387 (description "The Websocket-client module provides the low level APIs for
7388WebSocket usage in Python programs.")
7389 (license license:lgpl2.1+)))
7390
7391(define-public python-websocket-client-0.59
7392 (package
7393 (inherit python-websocket-client)
7394 (version "0.59.0")
7395 (source
7396 (origin
7397 (method url-fetch)
7398 (uri (pypi-uri "websocket-client" version))
7399 (sha256
7400 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
7401 (native-inputs
7402 (modify-inputs native-inputs
7403 (append python-six)))))
7404
7405(define-public python-purl
7406 (package
7407 (name "python-purl")
7408 (version "1.6")
7409 (source
7410 (origin
7411 (method git-fetch)
7412 (uri (git-reference
7413 (url "https://github.com/codeinthehole/purl")
7414 (commit version)))
7415 (file-name (git-file-name name version))
7416 (sha256
7417 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
7418 (build-system pyproject-build-system)
7419 (arguments
7420 (list
7421 #:test-flags #~(list "--pyargs" "./tests")))
7422 (native-inputs (list python-pytest python-setuptools))
7423 (propagated-inputs (list python-six))
7424 (home-page "https://github.com/codeinthehole/purl")
7425 (synopsis "Python package for URL manipulation")
7426 (description "Purl is a Python package for handling URLs.")
7427 (license license:expat)))
7428
7429(define-public python-apiron
7430 (package
7431 (name "python-apiron")
7432 (version "5.1.0")
7433 (source
7434 (origin
7435 (method url-fetch)
7436 (uri (pypi-uri "apiron" version))
7437 (sha256
7438 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
7439 (build-system pyproject-build-system)
7440 (arguments
7441 (list #:test-flags '(list "-k" "not test_call")))
7442 (propagated-inputs
7443 (list python-requests))
7444 (native-inputs
7445 (list python-pytest
7446 python-setuptools
7447 python-wheel))
7448 (home-page "https://github.com/ithaka/apiron")
7449 (synopsis "Python wrapper for interacting with RESTful APIs")
7450 (description
7451 "@code{apiron} provides a declarative, structured configuration of
7452services and endpoints with a unified interface for interacting with RESTful
7453APIs.")
7454 (license license:expat)))
7455
7456(define-public python-beren
7457 (package
7458 (name "python-beren")
7459 (version "0.7.0")
7460 (source
7461 (origin
7462 (method git-fetch)
7463 (uri (git-reference
7464 (url "https://github.com/teffalump/beren")
7465 (commit (string-append "v" version))))
7466 (file-name (git-file-name name version))
7467 (sha256
7468 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
7469 (build-system pyproject-build-system)
7470 (arguments
7471 ;; The test tries to open a connection to a remote server.
7472 `(#:tests? #f))
7473 (native-inputs (list python-setuptools))
7474 (propagated-inputs (list python-apiron))
7475 (home-page "https://github.com/teffalump/beren")
7476 (synopsis "REST client for Orthanc DICOM servers")
7477 (description
7478 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
7479 (license license:gpl3+)))
7480
7481(define-public python-requests
7482 (package
7483 (name "python-requests")
7484 (version "2.32.5")
7485 (source (origin
7486 (method url-fetch)
7487 (uri (pypi-uri "requests" version))
7488 (sha256
7489 (base32
7490 "1kypqz701x9s7j4shm1pdnzy4pzx9lmvhwgan0yqa071asn0pfnv"))))
7491 (build-system pyproject-build-system)
7492 (arguments
7493 (list #:test-flags
7494 ;; These require internet access
7495 '(list "--ignore=tests/test_requests.py"
7496 "-k" (string-append "not test_use_proxy_from_environment"
7497 " and not requests.sessions.Session"
7498 " and not requests.models.PreparedRequest"
7499 " and not requests.api.request")
7500 "tests/")))
7501 (propagated-inputs
7502 (list python-certifi
7503 python-charset-normalizer
7504 python-idna
7505 python-urllib3))
7506 (native-inputs
7507 (list python-pytest
7508 python-pytest-mock
7509 python-setuptools))
7510 (home-page "https://requests.readthedocs.io/")
7511 (synopsis "Python HTTP library")
7512 (description
7513 "Requests is a Python HTTP client library. It aims to be easier to use
7514than Python’s urllib2 library.")
7515 (license license:asl2.0)))
7516
7517(define-public python-requests-kerberos
7518 (package
7519 (name "python-requests-kerberos")
7520 (version "0.14.0")
7521 ;; No tests in the PyPI tarball.
7522 (source
7523 (origin
7524 (method git-fetch)
7525 (uri (git-reference
7526 (url "https://github.com/requests/requests-kerberos")
7527 (commit (string-append "v" version))))
7528 (file-name (git-file-name name version))
7529 (sha256
7530 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
7531 (build-system pyproject-build-system)
7532 (propagated-inputs (list python-cryptography
7533 python-pyspnego
7534 python-requests))
7535 (native-inputs (list python-pytest python-pytest-mock python-setuptools
7536 python-wheel))
7537 (home-page "https://github.com/requests/requests-kerberos")
7538 (synopsis "Kerberos authentication handler for python-requests")
7539 (description "This package provides a Kerberos authentication handler for
7540python-requests.")
7541 (license license:isc)))
7542
7543(define-public python-requests-unixsocket2
7544 (package
7545 (name "python-requests-unixsocket2")
7546 (version "1.0.1")
7547 (source
7548 (origin
7549 (method git-fetch)
7550 (uri (git-reference
7551 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
7552 (commit (string-append "v" version))))
7553 (sha256
7554 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
7555 (build-system pyproject-build-system)
7556 (native-inputs
7557 (list nss-certs-for-test
7558 python-hatchling
7559 python-pytest
7560 python-waitress))
7561 (propagated-inputs
7562 (list python-requests
7563 python-urllib3))
7564 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
7565 (synopsis "Talk HTTP via a UNIX domain socket")
7566 (description
7567 "This Python package lets you use the @code{requests} library to talk
7568HTTP via a UNIX domain socket.")
7569 (license license:asl2.0)))
7570
7571(define-public python-requests-ntlm
7572 (package
7573 (name "python-requests-ntlm")
7574 (version "1.3.0")
7575 (source
7576 (origin
7577 (method git-fetch)
7578 (uri (git-reference
7579 (url "https://github.com/requests/requests-ntlm")
7580 (commit (string-append "v" version))))
7581 (file-name (git-file-name name version))
7582 (sha256
7583 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
7584 (build-system pyproject-build-system)
7585 (arguments
7586 (list
7587 #:test-flags
7588 ;; XXX: Connection refused.
7589 #~(list "-k" (string-join
7590 (list "not test_ntlm_http_with_cbt"
7591 "test_ntlm_http_without_cbt"
7592 "test_ntlm_https_with_cbt"
7593 "test_ntlm_https_without_cbt")
7594 " and not "))
7595 #:phases
7596 #~(modify-phases %standard-phases
7597 (add-before 'check 'spawn-test-server
7598 (lambda _
7599 ;; Taken from .github/workflows/ci.yml.
7600 (spawn "python"
7601 (list "python" "-m" "tests.test_server")))))))
7602 (propagated-inputs
7603 (list python-cryptography python-pyspnego python-requests))
7604 (native-inputs (list python-flask python-pytest python-setuptools))
7605 (home-page "https://github.com/requests/requests-ntlm")
7606 (synopsis "NTLM authentication support for Requests")
7607 (description
7608 "This package allows for HTTP NTLM authentication using the requests
7609library.")
7610 (license license:isc)))
7611
7612(define-public python-requests-mock
7613 (package
7614 (name "python-requests-mock")
7615 (version "1.12.1")
7616 (source
7617 (origin
7618 (method url-fetch)
7619 (uri (pypi-uri "requests-mock" version))
7620 (sha256
7621 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
7622 (build-system pyproject-build-system)
7623 (native-inputs
7624 (list python-purl
7625 python-pytest
7626 python-requests-futures
7627 python-setuptools
7628 python-setuptools-scm
7629 python-testtools))
7630 (propagated-inputs
7631 (list python-requests))
7632 (home-page "https://requests-mock.readthedocs.org/")
7633 (synopsis "Mock out responses from the requests package")
7634 (description
7635 "This module provides a building block to stub out the HTTP requests
7636portions of your testing code.")
7637 (license license:asl2.0)))
7638
7639(define-public python-requests-toolbelt
7640 (package
7641 (name "python-requests-toolbelt")
7642 (version "1.0.0")
7643 (source
7644 (origin
7645 (method url-fetch)
7646 (uri (pypi-uri "requests-toolbelt" version))
7647 (sha256
7648 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
7649 (build-system pyproject-build-system)
7650 (arguments
7651 (list
7652 #:test-flags
7653 ;; Requiring networking or fail due not valid certs: AttributeError:
7654 ;; 'MockHTTPResponse' object has no attribute 'close'
7655 #~(list "-k" (string-append "not test_dump_all"
7656 " and not test_dump_response"
7657 " and not test_prepared_request_override_base"
7658 " and not test_prepared_request_with_base"
7659 " and not test_request_override_base"
7660 " and not test_request_with_base"))))
7661 (native-inputs
7662 (list python-betamax
7663 python-mock
7664 python-pyopenssl
7665 python-pytest
7666 python-setuptools
7667 python-trustme
7668 python-wheel))
7669 (propagated-inputs
7670 (list python-requests))
7671 (synopsis "Extensions to python-requests")
7672 (description "This is a toolbelt of useful classes and functions to be used
7673with python-requests.")
7674 (home-page "https://github.com/requests/toolbelt/")
7675 (license license:asl2.0)))
7676
7677(define-public python-requests-ftp
7678 (package
7679 (name "python-requests-ftp")
7680 (version "0.3.1")
7681 (source
7682 (origin
7683 (method git-fetch)
7684 (uri (git-reference
7685 (url "https://github.com/Lukasa/requests-ftp")
7686 (commit (string-append "v" version))))
7687 (file-name (git-file-name name version))
7688 (sha256
7689 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
7690 (build-system pyproject-build-system)
7691 (arguments
7692 ;; XXX: No connection adapters found.
7693 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
7694 (native-inputs
7695 (list python-pyftpdlib python-pytest python-setuptools python-six))
7696 (propagated-inputs (list python-requests))
7697 (home-page "https://github.com/Lukasa/requests-ftp")
7698 (synopsis "FTP Transport Adapter for Requests")
7699 (description "Requests-FTP is an implementation of a simple FTP transport
7700adapter for use with the Requests library.")
7701 (license license:asl2.0)))
7702
7703(define-public python-aioftp
7704 (package
7705 (name "python-aioftp")
7706 (version "0.27.2")
7707 (source
7708 (origin
7709 (method git-fetch)
7710 (uri (git-reference
7711 (url "https://github.com/aio-libs/aioftp")
7712 (commit version)))
7713 (file-name (git-file-name name version))
7714 (sha256
7715 (base32 "1lshyac5zk1w4x7ygkim3726f8gbkvpvlyiqkn9cs6qjxhxn5bxc"))))
7716 (build-system pyproject-build-system)
7717 (arguments
7718 (list
7719 #:phases
7720 #~(modify-phases %standard-phases
7721 (add-after 'unpack 'use-default-asyncio
7722 ;; async_timeout is deprecated, upstream recommends to use
7723 ;; asyncio, available since Python 3.11.
7724 (lambda _
7725 (substitute* "tests/conftest.py"
7726 (("async_timeout") "asyncio")))))))
7727 (native-inputs
7728 (list python-pytest
7729 python-pytest-mock
7730 python-pytest-asyncio
7731 python-setuptools
7732 python-siosocks
7733 python-trustme))
7734 (home-page "https://aioftp.readthedocs.io/")
7735 (synopsis "FTP client/server for asyncio in Python")
7736 (description
7737 "FTP client and server for asyncio (Python 3) Library implementing FTP
7738protocol, both client and server for Python asyncio module.
7739
7740 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
7741 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
7742 REST, LIST (as fallback).
7743
7744 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
7745 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
7746 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
7747 (license license:asl2.0)))
7748
7749(define-public python-mohawk
7750 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
7751 (revision "0"))
7752 (package
7753 (name "python-mohawk")
7754 (version (git-version "1.1.0" revision commit))
7755 (source
7756 (origin
7757 (method git-fetch)
7758 (uri (git-reference
7759 (url "https://github.com/kumar303/mohawk")
7760 (commit commit)))
7761 (file-name (git-file-name name version))
7762 (sha256
7763 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
7764 (patches
7765 (search-patches "python-mohawk-pytest.patch"))))
7766 (build-system pyproject-build-system)
7767 (arguments
7768 (list #:test-flags #~(list "mohawk/tests.py")))
7769 (native-inputs (list python-pytest python-setuptools))
7770 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
7771 ;python-six is removed?
7772 (home-page "https://github.com/kumar303/mohawk")
7773 (synopsis "Library for Hawk HTTP authorization")
7774 (description
7775 "Mohawk is an alternate Python implementation of the Hawk HTTP
7776authorization scheme.")
7777 (license license:bsd-3))))
7778
7779(define-public python-msal
7780 (package
7781 (name "python-msal")
7782 (version "1.34.0")
7783 (home-page
7784 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
7785 (source
7786 (origin
7787 (method git-fetch)
7788 (uri (git-reference
7789 (url home-page)
7790 (commit version)))
7791 (file-name (git-file-name name version))
7792 (sha256
7793 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
7794 (patches (search-patches "python-msal-requests.patch"))))
7795 (build-system pyproject-build-system)
7796 (arguments
7797 (list
7798 #:test-flags
7799 #~(list
7800 "--ignore=tests/test_benchmark.py"
7801 ;; XXX: Ignoring cryptography version scheme tests.
7802 "-k"
7803 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
7804 ;; XXX: These tests try to access the network.
7805 "--ignore=tests/test_application.py"
7806 "--ignore=tests/test_ccs.py"
7807 ;; XXX: These tests assume they are run on Windows.
7808 "--ignore=tests/test_mi.py")
7809 #:phases
7810 #~(modify-phases %standard-phases
7811 (add-after 'unpack 'set-cryptography-version
7812 (lambda _
7813 (substitute* "tests/test_cryptography.py"
7814 (("^latest_cryptography_version = @version@")
7815 (format #f "latest_cryptography_version = ~s"
7816 #$(package-version
7817 (this-package-input "python-cryptography")))))))
7818 (add-before 'check 'configure-tests
7819 (lambda* (#:key tests? #:allow-other-keys)
7820 (when tests?
7821 (setenv "TRAVIS_TAG" "1")))))))
7822 (native-inputs
7823 (list nss-certs-for-test python-mock python-pytest python-setuptools))
7824 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
7825 (synopsis "Microsoft Authentication Library (MSAL) for Python")
7826 (description
7827 "The Microsoft Authentication Library for Python enables applications to
7828integrate with the Microsoft identity platform. It allows you to sign in
7829users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
7830Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
7831Microsoft Graph or your own APIs registered with the Microsoft identity
7832platform. It is built using industry standard OAuth2 and OpenID Connect
7833protocols.")
7834 (license license:expat)))
7835
7836(define-public oauth2ms
7837 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
7838 (revision "0"))
7839 (package
7840 (name "oauth2ms")
7841 (version (git-version "0.0.0" revision commit))
7842 (source (origin
7843 (method git-fetch)
7844 (uri (git-reference
7845 (url "https://github.com/harishkrupo/oauth2ms")
7846 (commit commit)))
7847 (file-name (git-file-name name version))
7848 (sha256
7849 (base32
7850 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
7851 (build-system copy-build-system)
7852 (arguments
7853 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
7854 ("." #$(string-append "share/doc/" name "-"
7855 version "/")
7856 #:include-regexp ("\\.org$")))
7857 #:phases #~(modify-phases %standard-phases
7858 (add-after 'install 'wrap-pythonpath
7859 (lambda* (#:key inputs outputs #:allow-other-keys)
7860 (let ((path (getenv "GUIX_PYTHONPATH")))
7861 (wrap-program (string-append #$output
7862 "/bin/oauth2ms")
7863 `("GUIX_PYTHONPATH" ":" prefix
7864 (,path)))))))))
7865 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
7866 (home-page "https://github.com/harishkrupo/oauth2ms")
7867 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
7868 (description
7869 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
7870endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
7871used as authentication in IMAP mail servers.")
7872 (license license:asl2.0))))
7873
7874(define-public python-oauthlib
7875 (package
7876 (name "python-oauthlib")
7877 (version "3.3.1")
7878 (source
7879 (origin
7880 (method git-fetch)
7881 (uri (git-reference
7882 (url "https://github.com/oauthlib/oauthlib")
7883 (commit (string-append "v" version))))
7884 (file-name (git-file-name name version))
7885 (sha256
7886 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
7887 (build-system pyproject-build-system)
7888 (native-inputs (list python-pytest python-mock python-setuptools))
7889 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
7890 (home-page "https://github.com/oauthlib/oauthlib")
7891 (synopsis "OAuth implementation for Python")
7892 (description
7893 "Oauthlib is a generic, spec-compliant, thorough implementation of the
7894OAuth request-signing logic.")
7895 (license license:bsd-3)))
7896
7897(define-public python-urllib3
7898 (package
7899 (name "python-urllib3")
7900 (version "2.5.0")
7901 (source
7902 (origin
7903 (method url-fetch)
7904 (uri (pypi-uri "urllib3" version))
7905 (sha256
7906 (base32
7907 "0q17z6zlpyjv9ax5c3d30qwp9fwhz2sc4gbb7yyd86g4qwrpgi1z"))))
7908 (build-system pyproject-build-system)
7909 (arguments `(#:tests? #f))
7910 (native-inputs
7911 (list python-hatch-vcs
7912 python-hatchling
7913 python-setuptools-scm))
7914 (propagated-inputs
7915 (append
7916 ;; These 5 inputs are used to build urrlib3[secure]
7917 (list python-certifi)
7918 (if (member (%current-system)
7919 (package-transitive-supported-systems python-cryptography))
7920 (list python-cryptography)
7921 '())
7922 (list python-idna)
7923 (if (member (%current-system)
7924 (package-transitive-supported-systems python-pyopenssl))
7925 (list python-pyopenssl)
7926 '())
7927 (list python-pysocks)))
7928 (home-page "https://urllib3.readthedocs.io/")
7929 (synopsis "HTTP library with thread-safe connection pooling")
7930 (description
7931 "Urllib3 supports features left out of urllib and urllib2 libraries. It
7932can reuse the same socket connection for multiple requests, it can POST files,
7933supports url redirection and retries, and also gzip and deflate decoding.")
7934 (license license:expat)))
7935
7936(define-public python-urllib3-1.26
7937 (package
7938 (inherit python-urllib3)
7939 (version "1.26.17")
7940 (source
7941 (origin
7942 (method url-fetch)
7943 (uri (pypi-uri "urllib3" version))
7944 (sha256
7945 (base32
7946 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
7947 (native-inputs
7948 (list python-setuptools
7949 python-wheel))))
7950
7951(define-public python-awscrt
7952 (package
7953 (name "python-awscrt")
7954 (version "0.26.1")
7955 (source
7956 (origin
7957 (method url-fetch)
7958 (uri (pypi-uri "awscrt" version))
7959 (sha256
7960 (base32 "0plkc0i0gc6z8fqnyy8kbg43sv3jnv8shcavcz0wb134riykmmm8"))))
7961 (build-system pyproject-build-system)
7962 (arguments
7963 (list
7964 #:test-backend #~'unittest
7965 #:test-flags #~(list "discover" "--verbose")
7966 #:phases
7967 #~(modify-phases %standard-phases
7968 (add-after 'unpack 'disable-broken-tests
7969 (lambda _
7970 ;; Disable broken tests. These tests fail because the
7971 ;; certificate bundle at the default location does not exist.
7972 (substitute* "test/test_auth.py"
7973 (("def test_default_provider")
7974 "def _test_default_provider"))
7975 (substitute* "test/test_http_client.py"
7976 (("def test_h2_client")
7977 "def _test_h2_client"))
7978 (substitute* "test/test_s3.py"
7979 (("def test_sanity")
7980 "def _test_sanity")
7981 (("def test_sanity_secure")
7982 "def _test_sanity_secure")
7983 (("def test_wait_shutdown")
7984 "def _test_wait_shutdown"))))
7985 (add-after 'unpack 'override-cert-bundle-location
7986 (lambda* (#:key inputs #:allow-other-keys)
7987 (let ((bundle (search-input-file inputs
7988 "/etc/ssl/certs/ca-certificates.crt")))
7989 (setenv "SSL_CERT_FILE" bundle)
7990 (substitute* "awscrt/io.py"
7991 (("( +)opt = TlsContextOptions\\(\\)" m indent)
7992 (string-append m "\n"
7993 indent "import os\n"
7994 indent "\
7995opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n")))
7996 (substitute* "test/appexit_http.py"
7997 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
7998 (string-append m indent
7999 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
8000 bundle "')\n")))
8001 (substitute* "test/test_io.py"
8002 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
8003 (string-append m indent
8004 "opt.override_default_trust_store_from_path(None, '"
8005 bundle "')\n"))))))
8006 (add-after 'unpack 'use-system-libraries
8007 (lambda _
8008 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
8009 (inputs (list openssl))
8010 (native-inputs (list cmake-minimal
8011 nss-certs-for-test
8012 python-boto3
8013 python-setuptools
8014 python-websockets))
8015 (home-page "https://github.com/awslabs/aws-crt-python")
8016 (synopsis "Common runtime for AWS Python projects")
8017 (description
8018 "This package provides a common runtime for AWS Python projects.")
8019 (license license:asl2.0)))
8020
8021(define-public awscli
8022 (package
8023 ;; Note: updating awscli typically requires updating botocore as well.
8024 (name "awscli")
8025 (version "1.43.11")
8026 (source
8027 (origin
8028 (method git-fetch)
8029 (uri (git-reference
8030 (url "https://github.com/aws/aws-cli")
8031 (commit version)))
8032 (file-name (git-file-name name version))
8033 (sha256
8034 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
8035 (build-system pyproject-build-system)
8036 (arguments
8037 (list
8038 ;; tests: 2715 passed, 32 warnings
8039 #:test-flags
8040 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8041 ;; Complete test suite is huge and compute hungry, run just unit
8042 ;; tests.
8043 "--ignore=tests/dependencies"
8044 "--ignore=tests/functional"
8045 "--ignore=tests/integration"
8046 ;; TypeError: 'Mock' object is not subscriptable.
8047 "-k" "not test_no_groff_or_mandoc_exists")
8048 #:phases
8049 #~(modify-phases %standard-phases
8050 (add-after 'unpack 'fix-reference-to-groff
8051 (lambda _
8052 ;; XXX: Consider to use wrap-program instead, it tries to parse
8053 ;; the PATH.
8054 (substitute* "awscli/help.py"
8055 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
8056 (("raise ExecutableNotFoundError\\('groff'\\)") "")
8057 (("cmdline = \\['groff'")
8058 (format #f "cmdline = ['~a/bin/groff'"
8059 #$(this-package-input "groff-minimal"))))))
8060 (add-before 'check 'set-environment
8061 (lambda _
8062 ;; PermissionError: [Errno 13] Permission denied:
8063 ;; '/homeless-shelter'
8064 (setenv "HOME" "/tmp"))))))
8065 (native-inputs
8066 (list python-pytest
8067 python-pytest-xdist
8068 python-setuptools
8069 python-wheel))
8070 (inputs
8071 (list groff-minimal
8072 python-botocore
8073 python-colorama
8074 python-docutils-0.19
8075 python-pyyaml
8076 python-rsa-for-awscli-1
8077 python-s3transfer))
8078 (home-page "https://aws.amazon.com/cli/")
8079 (synopsis "Command line client for AWS")
8080 (description
8081 "AWS CLI provides a unified command line interface to the Amazon Web
8082Services (AWS) API.")
8083 (license license:asl2.0)))
8084
8085(define-public awscli-2
8086 (package
8087 (inherit awscli)
8088 ;; Note: updating awscli-2 typically requires updating python-awscrt.
8089 (name "awscli")
8090 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
8091 ;; any fresh one compatible with current state of dependencies in Guix.
8092 (version "2.28.0")
8093 (source
8094 (origin
8095 (method git-fetch)
8096 (uri (git-reference
8097 (url "https://github.com/aws/aws-cli")
8098 (commit version)))
8099 (file-name (git-file-name name version))
8100 (sha256
8101 (base32
8102 "1a1jzvdm434x46yh7ir11lw0nzc64ns4qvxhp5wfra3rh5ykf36j"))))
8103 (build-system pyproject-build-system)
8104 (arguments
8105 (list
8106 ;; When updating and checking locally be very patient as build phase may
8107 ;; hang for 6-8 minutes but eventually passes through.
8108 ;;
8109 ;; tests: 4189 passed, 1 skipped, 2 warnings
8110 #:test-flags
8111 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8112 ;; Full test suite contains more than 70k tests; ignore network
8113 ;; dependent, slow and compute intense tests, keep just unit
8114 ;; tests.
8115 "--ignore=tests/backends"
8116 "--ignore=tests/dependencies"
8117 "--ignore=tests/functional"
8118 "--ignore=tests/integration"
8119 "--ignore=tests/unit/botocore"
8120 ;; Flaky, something to do with PATH disappearing from os.environ?
8121 ;; Passes when run on its own, so maybe something else is
8122 ;; modifying this during the test run.
8123 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
8124 ;; TypeError: 'Mock' object is not subscriptable
8125 "-k" "not test_no_groff_or_mandoc_exists")
8126 #:phases
8127 #~(modify-phases %standard-phases
8128 (add-after 'unpack 'ignore-deprecations
8129 (lambda _
8130 (substitute* "pyproject.toml"
8131 (("\"error::") "\"ignore::"))))
8132 (add-after 'unpack 'fix-reference-to-groff
8133 (lambda* (#:key inputs #:allow-other-keys)
8134 (substitute* "awscli/help.py"
8135 (("if self._exists_on_path\\('groff'\\):") "if True:")
8136 (("cmdline = \\['groff'")
8137 (string-append "cmdline = ['"
8138 (search-input-file inputs "bin/groff")
8139 "'")))))
8140 (add-before 'check 'pre-check
8141 (lambda _ (setenv "HOME" "/tmp"))))))
8142 (inputs
8143 (list groff
8144 ;; less
8145 nss-certs-for-test
8146 python-awscrt
8147 python-colorama
8148 python-dateutil
8149 python-distro
8150 python-docutils
8151 python-jmespath
8152 python-prompt-toolkit
8153 python-ruamel.yaml
8154 python-ruamel.yaml.clib
8155 python-urllib3))
8156 (native-inputs
8157 (list python-flit-core
8158 python-pytest
8159 python-pytest-xdist))))
8160
8161(define-public python-wsgiproxy2
8162 (package
8163 (name "python-wsgiproxy2")
8164 (version "0.5.1")
8165 (source
8166 (origin
8167 (method git-fetch)
8168 (uri (git-reference
8169 (url "https://github.com/gawel/WSGIProxy2/")
8170 (commit version)))
8171 (file-name (git-file-name name version))
8172 (sha256
8173 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
8174 (build-system pyproject-build-system)
8175 (arguments (list #:test-backend #~'unittest))
8176 (native-inputs (list python-webtest python-setuptools))
8177 (propagated-inputs (list python-requests python-six python-urllib3
8178 python-webob))
8179 (home-page "https://github.com/gawel/WSGIProxy2/")
8180 (synopsis "WSGI Proxy with various http client backends")
8181 (description
8182 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
8183function calls into HTTP requests. It also includes code to sign requests and
8184pass private data, and to spawn subprocesses to handle requests.")
8185 (license license:expat)))
8186
8187(define-public python-pastedeploy
8188 (package
8189 (name "python-pastedeploy")
8190 (version "3.1.0")
8191 (source
8192 (origin
8193 (method url-fetch)
8194 (uri (pypi-uri "PasteDeploy" version))
8195 (sha256
8196 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
8197 (build-system pyproject-build-system)
8198 (native-inputs (list python-pytest python-setuptools))
8199 (home-page "https://pylonsproject.org/")
8200 (synopsis "Load, configure, and compose WSGI applications and servers")
8201 (description
8202 "This tool provides code to load WSGI applications and servers from URIs;
8203these URIs can refer to Python Eggs for INI-style configuration files. Paste
8204Script provides commands to serve applications based on this configuration
8205file.")
8206 (license license:expat)))
8207
8208(define-public python-webtest
8209 (package
8210 (name "python-webtest")
8211 (version "3.0.6")
8212 (source
8213 (origin
8214 (method url-fetch)
8215 (uri (pypi-uri "webtest" version))
8216 (sha256
8217 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
8218 (build-system pyproject-build-system)
8219 (arguments
8220 ;; Tests require python-pyquery, which creates a circular dependency.
8221 `(#:tests? #f))
8222 (native-inputs
8223 (list python-setuptools))
8224 (propagated-inputs
8225 (list python-beautifulsoup4
8226 python-waitress
8227 python-webob))
8228 (home-page "https://docs.pylonsproject.org/projects/webtest/")
8229 (synopsis "Helper to test WSGI applications")
8230 (description
8231 "Webtest allows you to test your Python web applications without
8232starting an HTTP server. It supports anything that supports the minimum of
8233WSGI.")
8234 (license license:expat)))
8235
8236(define-public python-flask
8237 (package
8238 (name "python-flask")
8239 (version "3.1.0")
8240 (source
8241 (origin
8242 (method url-fetch)
8243 (uri (pypi-uri "flask" version))
8244 (sha256
8245 (base32 "1b1nb250jxrjplbs21wnwq69250vs3iz2pdhs7cwi5y8hi8kr1sz"))))
8246 (build-system pyproject-build-system)
8247 (native-inputs
8248 (list python-flit-core
8249 python-pytest))
8250 (propagated-inputs
8251 (list python-asgiref ;async extra
8252 python-click
8253 python-blinker
8254 python-itsdangerous
8255 python-jinja2
8256 python-werkzeug))
8257 (home-page "https://palletsprojects.com/p/flask/")
8258 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
8259 (description "Flask is a micro web framework based on the Werkzeug toolkit
8260and Jinja2 template engine. It is called a micro framework because it does not
8261presume or force a developer to use a particular tool or library.")
8262 (license license:bsd-3)))
8263
8264(define-public python-flask-compress
8265 (package
8266 (name "python-flask-compress")
8267 (version "1.18")
8268 (source (origin
8269 (method url-fetch)
8270 (uri (pypi-uri "flask_compress" version))
8271 (sha256
8272 (base32
8273 "0fj1r0ixsjls7z3a2zzamxppjz4qcf8q4jcmn74gsk9kisyy3fpx"))))
8274 (build-system pyproject-build-system)
8275 (native-inputs
8276 (list python-flask-caching
8277 python-pytest
8278 python-setuptools
8279 python-setuptools-scm))
8280 (propagated-inputs
8281 (list python-brotli
8282 python-flask
8283 python-pyzstd))
8284 (home-page "https://github.com/colour-science/flask-compress")
8285 (synopsis "Compress responses in a Flask app")
8286 (description
8287 "This package lets you compress Flask application responses and static
8288files with gzip, deflate or brotli. Flask-Compress both adds the various
8289headers required for a compressed response and compresses the response data.")
8290 (license license:expat)))
8291
8292(define-public python-flask-seasurf
8293 (package
8294 (name "python-flask-seasurf")
8295 (version "2.0.0")
8296 (source (origin
8297 (method url-fetch)
8298 (uri (pypi-uri "Flask-SeaSurf" version))
8299 (sha256
8300 (base32
8301 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
8302 (build-system pyproject-build-system)
8303 (arguments
8304 (list #:tests? #false)) ;there are none
8305 (propagated-inputs (list python-flask))
8306 (native-inputs (list python-setuptools python-wheel))
8307 (home-page "https://github.com/maxcountryman/flask-seasurf/")
8308 (synopsis "CSRF extension for Flask")
8309 (description "SeaSurf is a Flask extension for preventing cross-site
8310request forgery (CSRF). CSRF attacks are problematic because the mechanism
8311they use is relatively easy to exploit. This extension attempts to aid you in
8312securing your application from such attacks. This extension is based on the
8313Django middleware.")
8314 (license license:bsd-3)))
8315
8316(define-public python-flask-wtf
8317 (package
8318 (name "python-flask-wtf")
8319 (version "1.2.2")
8320 (source
8321 (origin
8322 (method url-fetch)
8323 (uri (pypi-uri "Flask-WTF" version))
8324 (sha256
8325 (base32
8326 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
8327 (build-system pyproject-build-system)
8328 (propagated-inputs
8329 (list python-flask python-flask python-itsdangerous python-wtforms))
8330 (native-inputs
8331 (list python-hatchling python-pytest))
8332 (home-page "https://github.com/lepture/flask-wtf")
8333 (synopsis "Simple integration of Flask and WTForms")
8334 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
8335upload, and reCAPTCHA.")
8336 (license license:bsd-3)))
8337
8338(define-public python-flask-multistatic
8339 (package
8340 (name "python-flask-multistatic")
8341 (version "1.0")
8342 (source
8343 (origin
8344 (method url-fetch)
8345 (uri (pypi-uri "flask-multistatic" version))
8346 (sha256
8347 (base32
8348 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
8349 (build-system pyproject-build-system)
8350 (arguments (list #:tests? #f)) ; No tests upstream.
8351 (native-inputs (list python-setuptools))
8352 (propagated-inputs (list python-flask))
8353 (home-page "https://pagure.io/flask-multistatic")
8354 (synopsis "Flask plugin to allow overriding static files")
8355 (description "@code{flask-multistatic} is a flask plugin that adds support
8356for overriding static files.")
8357 (license license:gpl3+)))
8358
8359(define-public python-responses
8360 (package
8361 (name "python-responses")
8362 (version "0.25.3")
8363 (source (origin
8364 (method url-fetch)
8365 (uri (pypi-uri "responses" version))
8366 (sha256
8367 (base32
8368 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
8369 (build-system pyproject-build-system)
8370 (native-inputs
8371 (list python-pytest
8372 python-pytest-asyncio
8373 python-pytest-httpserver
8374 python-setuptools
8375 python-tomli
8376 python-tomli-w
8377 python-wheel))
8378 (propagated-inputs
8379 (list python-requests
8380 python-pyyaml
8381 python-urllib3))
8382 (home-page "https://github.com/getsentry/responses")
8383 (synopsis "Utility for mocking out the `requests` Python library")
8384 (description "A utility library for mocking out the `requests` Python
8385library.")
8386 (license license:asl2.0)))
8387
8388(define-public python-grequests
8389 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
8390 (revision "0"))
8391 (package
8392 (name "python-grequests")
8393 (version (git-version "0.7.0" revision commit))
8394 (source
8395 (origin
8396 (method git-fetch)
8397 (uri (git-reference
8398 (url "https://github.com/kennethreitz/grequests")
8399 (commit commit)))
8400 (file-name (git-file-name name version))
8401 (sha256
8402 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
8403 (build-system pyproject-build-system)
8404 (arguments
8405 (list
8406 ;; XXX: Most failing tests seem to be caused by network access,
8407 ;; but there is no easy/flag way to disable tests selectively.
8408 #:tests? #f
8409 #:test-backend #~'unittest
8410 #:test-flags #~(list "tests.py")))
8411 (propagated-inputs (list python-gevent python-requests))
8412 (native-inputs (list python-setuptools))
8413 (home-page "https://github.com/kennethreitz/grequests")
8414 (synopsis "Python library for asynchronous HTTP requests")
8415 (description
8416 "GRequests is a Python library that allows you to use @code{Requests}
8417with @code{Gevent} to make asynchronous HTTP Requests easily.")
8418 (license license:bsd-2))))
8419
8420(define-public python-gwebsockets
8421 (package
8422 (name "python-gwebsockets")
8423 (version "0.7")
8424 (source
8425 (origin
8426 (method git-fetch)
8427 (uri (git-reference
8428 (url "https://github.com/sugarlabs/gwebsockets")
8429 (commit (string-append "v" version))))
8430 (file-name (git-file-name name version))
8431 (sha256
8432 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
8433 (build-system pyproject-build-system)
8434 (arguments (list #:tests? #f)) ; No tests upstream.
8435 (native-inputs (list python-setuptools))
8436 (propagated-inputs (list python-pygobject))
8437 (home-page "https://github.com/sugarlabs/gwebsockets")
8438 (synopsis "GLib based websockets server")
8439 (description
8440 "This package provides a websocket server written in Python. It uses GIO
8441for network communication and hence it easily integrates with the GLib
8442mainloop.")
8443 (license license:asl2.0)))
8444
8445(define-public python-dpkt
8446 (package
8447 (name "python-dpkt")
8448 (version "1.9.8")
8449 (source
8450 (origin
8451 (method git-fetch)
8452 (uri (git-reference
8453 (url "https://github.com/kbandla/dpkt")
8454 (commit (string-append "v" version))))
8455 (file-name (git-file-name name version))
8456 (sha256
8457 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
8458 (build-system pyproject-build-system)
8459 (arguments
8460 (list
8461 #:test-flags
8462 #~(list "--pyargs" "dpkt")))
8463 (native-inputs (list python-pytest python-setuptools))
8464 (home-page "https://github.com/kbandla/dpkt")
8465 (synopsis "Packet generator and parser for TCP/IP protocols")
8466 (description
8467 "The dpkt module is a fast, simple packet generator and parser for the
8468basic TCP/IP protocols.")
8469 (license license:bsd-3)))
8470
8471(define-public python-geventhttpclient
8472 (package
8473 (name "python-geventhttpclient")
8474 (version "2.3.9")
8475 (source (origin
8476 (method git-fetch)
8477 (uri (git-reference
8478 (url "https://github.com/geventhttpclient/geventhttpclient")
8479 (commit version)
8480 (recursive? #true)))
8481 (file-name (git-file-name name version))
8482 (sha256
8483 (base32
8484 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
8485 (build-system pyproject-build-system)
8486 (arguments
8487 (list
8488 #:test-flags
8489 ;; Disable network tests.
8490 '(list "-k"
8491 (string-append "not test_client_simple"
8492 " and not test_client_ssl"
8493 " and not test_client_with_default_headers"
8494 " and not test_client_without_leading_slash"
8495 " and not test_download"
8496 " and not test_fail_invalid_ca_certificate"
8497 " and not test_httpbin_multipart"
8498 " and not test_multi_queries_greenlet_safe"
8499 " and not test_no_form_encode_header"
8500 " and not test_no_form_encoded_header"
8501 " and not test_request_with_headers"
8502 " and not test_response_context_manager"
8503 " and not test_urllib_request"))))
8504 (native-inputs (list nss-certs-for-test
8505 python-dpkt python-pytest python-requests
8506 python-setuptools python-wheel))
8507 (propagated-inputs (list python-brotli python-certifi python-gevent
8508 python-urllib3))
8509 (home-page "https://github.com/geventhttpclient/geventhttpclient")
8510 (synopsis "HTTP client library for gevent")
8511 (description "@code{python-geventhttpclient} is a high performance,
8512concurrent HTTP client library for python using @code{gevent}.")
8513 (license license:expat)))
8514
8515(define-public python-gevent-websocket
8516 (package
8517 (name "python-gevent-websocket")
8518 (version "0.10.1")
8519 (source
8520 (origin
8521 (method url-fetch)
8522 (uri (pypi-uri "gevent-websocket" version))
8523 (sha256
8524 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
8525 (build-system pyproject-build-system)
8526 (arguments
8527 (list #:tests? #f)) ; no tests in PyPI or git
8528 (native-inputs
8529 (list python-setuptools
8530 python-wheel))
8531 (propagated-inputs
8532 (list python-gevent))
8533 (home-page "https://gitlab.com/noppo/gevent-websocket")
8534 (synopsis "Websocket handler for the gevent pywsgi server")
8535 (description
8536 "Websocket handler for the gevent pywsgi server, a Python network
8537library.
8538
8539Features include:
8540@itemize
8541@item integration on both socket level or using an abstract interface
8542@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
8543Protocol, WAMP}
8544@item easily extendible using a simple WebSocket protocol plugin API
8545@end itemize")
8546 (license license:asl2.0)))
8547
8548(define-public python-requests-oauthlib
8549 (package
8550 (name "python-requests-oauthlib")
8551 (version "2.0.0")
8552 (source
8553 (origin
8554 (method git-fetch)
8555 (uri (git-reference (url
8556 "https://github.com/requests/requests-oauthlib")
8557 (commit (string-append "v" version))))
8558 (file-name (git-file-name name version))
8559 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
8560 (build-system pyproject-build-system)
8561 (arguments
8562 (list
8563 #:test-flags
8564 #~(list
8565 "--ignore=tests/test_core.py" ; requires network access.
8566 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
8567 "-k" "not test_fetch_access_token"))) ; flaky tests.
8568 (native-inputs
8569 (list python-requests-mock python-pytest python-setuptools))
8570 (propagated-inputs
8571 (list python-oauthlib python-requests))
8572 (home-page "https://github.com/requests/requests-oauthlib")
8573 (synopsis "OAuthlib authentication support for Requests")
8574 (description
8575 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
8576provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
8577 (license license:isc)))
8578
8579(define-public python-cachecontrol
8580 (package
8581 (name "python-cachecontrol")
8582 (version "0.14.1")
8583 (source
8584 (origin
8585 (method git-fetch)
8586 (uri (git-reference
8587 (url "https://github.com/ionrock/cachecontrol")
8588 (commit (string-append "v" version))))
8589 (file-name (git-file-name name version))
8590 (sha256
8591 (base32
8592 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
8593 (build-system pyproject-build-system)
8594 (propagated-inputs
8595 (list python-filelock python-msgpack python-requests))
8596 (native-inputs
8597 (list python-cherrypy python-flit-core python-pytest))
8598 (home-page "https://github.com/ionrock/cachecontrol")
8599 (synopsis "The httplib2 caching algorithms for use with requests")
8600 (description "CacheControl is a port of the caching algorithms in
8601@code{httplib2} for use with @code{requests} session objects.")
8602 (license license:asl2.0)))
8603
8604(define-public python-betamax
8605 (package
8606 (name "python-betamax")
8607 (version "0.9.0")
8608 (source
8609 (origin
8610 (method url-fetch)
8611 (uri (pypi-uri "betamax" version))
8612 (sha256
8613 (base32
8614 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
8615 (build-system pyproject-build-system)
8616 (arguments
8617 (list
8618 #:test-flags
8619 #~(list "-k" (string-join
8620 ;; Tests require network access to http://httpbin.org/get.
8621 (list "not test_creates_new_cassettes"
8622 "test_placeholders_work"
8623 "test_post_start_hook"
8624 "test_pre_stop_hook"
8625 "test_preplayback_hook"
8626 "test_prerecord_hook"
8627 "test_prerecord_ignoring_hook"
8628 "test_records_new_events_with_existing_cassette"
8629 "test_records_new_interaction"
8630 "test_records_new_interactions"
8631 "test_replaces_old_interactions"
8632 "test_replays_response_from_cassette"
8633 "test_requests_with_json_body"
8634 "test_saves_content_as_gzip"
8635 "test_unicode_is_saved_properly")
8636 " and not "))))
8637 (native-inputs
8638 (list nss-certs-for-test
8639 python-pytest
8640 python-setuptools))
8641 (propagated-inputs
8642 (list python-requests))
8643 (home-page "https://github.com/sigmavirus24/betamax")
8644 (synopsis "Record HTTP interactions with python-requests")
8645 (description
8646 "Betamax will record your test suite's HTTP interactions and replay them
8647during future tests. It is designed to work with python-requests.")
8648 (license license:expat)))
8649
8650(define-public python-betamax-matchers
8651 (package
8652 (name "python-betamax-matchers")
8653 (version "0.4.0")
8654 (source
8655 (origin
8656 (method git-fetch)
8657 (uri (git-reference
8658 (url "https://github.com/sigmavirus24/betamax_matchers")
8659 (commit version)))
8660 (file-name (git-file-name name version))
8661 (sha256
8662 (base32 "0lyg3r91hwfvavyi5k6sddcla37igigycfv1mx40c32byqwl6pq5"))))
8663 (build-system pyproject-build-system)
8664 (native-inputs (list python-pytest python-setuptools))
8665 (propagated-inputs (list python-betamax python-requests-toolbelt))
8666 (home-page "https://github.com/sigmavirus24/betamax_matchers")
8667 (synopsis "VCR imitation for python-requests")
8668 (description "@code{betamax-matchers} provides a set of Matchers for
8669Betamax.")
8670 (license license:asl2.0)))
8671
8672(define-public python-betamax-serializers
8673 (package
8674 (name "python-betamax-serializers")
8675 (version "0.2.1")
8676 (source
8677 (origin
8678 (method git-fetch)
8679 (uri (git-reference
8680 (url "https://gitlab.com/betamax/serializers")
8681 (commit version)))
8682 (file-name (git-file-name name version))
8683 (sha256
8684 (base32 "1p2l5w3vwvjacs2ndahgcjq55qb53i37p8mz1zh85pjxyszdyw2l"))))
8685 (build-system pyproject-build-system)
8686 (arguments (list #:tests? #f)) ; No tests.
8687 (native-inputs (list python-setuptools))
8688 (propagated-inputs (list python-betamax python-pyyaml))
8689 (synopsis "Set of third-party serializers for Betamax")
8690 (description
8691 "Betamax-Serializers are an experimental set of Serializers for Betamax
8692that may possibly end up in the main package.")
8693 (home-page "https://gitlab.com/betamax/serializers")
8694 (license license:asl2.0)))
8695
8696(define-public python-s3fs
8697 (package
8698 (name "python-s3fs")
8699 (version "2026.1.0")
8700 (source
8701 (origin
8702 (method url-fetch)
8703 (uri (pypi-uri "s3fs" version))
8704 (sha256
8705 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
8706 (build-system pyproject-build-system)
8707 ;; TODO: Many tests fail with "No such file or directory" raised by the
8708 ;; HTTP client.
8709 (arguments (list #:tests? #false))
8710 (native-inputs
8711 (list python-setuptools))
8712 (propagated-inputs
8713 (list python-aiobotocore
8714 python-aiohttp
8715 python-fsspec))
8716 (home-page "https://github.com/fsspec/s3fs/")
8717 (synopsis "Convenient filesystem interface over S3")
8718 (description "This package provides a convenient filesystem interface over
8719S3.")
8720 (license license:bsd-3)))
8721
8722(define-public python-s3transfer
8723 (package
8724 (name "python-s3transfer")
8725 (version "0.16.0")
8726 (source
8727 (origin
8728 (method url-fetch)
8729 (uri (pypi-uri "s3transfer" version))
8730 (sha256
8731 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
8732 (build-system pyproject-build-system)
8733 (arguments
8734 (list
8735 ;; tests: 630 passed, 51 skipped
8736 #:test-flags
8737 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8738 ;; Tests require networking.
8739 "--ignore" "tests/integration")))
8740 (native-inputs
8741 (list python-pytest
8742 python-pytest-xdist
8743 python-setuptools))
8744 (propagated-inputs
8745 (list python-botocore))
8746 (home-page "https://github.com/boto/s3transfer")
8747 (synopsis "Amazon S3 Transfer Manager")
8748 (description
8749 "S3transfer is a Python library for managing Amazon S3 transfers.")
8750 (license license:asl2.0)))
8751
8752(define-public python-flask-restful
8753 (package
8754 (name "python-flask-restful")
8755 (version "0.3.10")
8756 (source
8757 (origin
8758 (method url-fetch)
8759 (uri (pypi-uri "Flask-RESTful" version))
8760 (sha256
8761 (base32
8762 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
8763 (build-system pyproject-build-system)
8764 (arguments
8765 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
8766 (list #:tests? #f))
8767 (propagated-inputs
8768 (list python-aniso8601 python-flask python-pytz))
8769 (native-inputs
8770 (list python-blinker
8771 python-mock
8772 python-pytest
8773 python-setuptools
8774 python-wheel))
8775 (home-page "https://github.com/flask-restful/flask-restful/")
8776 (synopsis "Flask module for creating REST APIs")
8777 (description
8778 "This package contains a Flask module for creating REST APIs.")
8779 (license license:bsd-3)))
8780
8781(define-public python-flask-sqlalchemy
8782 (package
8783 (name "python-flask-sqlalchemy")
8784 ;; Released version fails tests in Python 3.12.
8785 (properties '((commit . "168cb4b7b50fe5176307a10d873781bfafc6eeda")
8786 (revision . "0")))
8787 (version (git-version "3.1.1"
8788 (assoc-ref properties 'revision)
8789 (assoc-ref properties 'commit)))
8790 (source
8791 (origin
8792 (method git-fetch)
8793 (uri (git-reference
8794 (url "https://github.com/pallets-eco/flask-sqlalchemy")
8795 (commit (assoc-ref properties 'commit))))
8796 (file-name (git-file-name name version))
8797 (sha256
8798 (base32
8799 "0xw8v1540m21x9crpgb0i3rxyhh1d24ldg354vndw9cif74ls5p6"))))
8800 (build-system pyproject-build-system)
8801 (arguments
8802 (list
8803 #:test-flags
8804 #~(list "-k" (string-append "not test_explicit_table[db2]"
8805 " and not test_explicit_table[db4]")
8806 "-W" "ignore::DeprecationWarning")))
8807 (native-inputs
8808 (list python-flit-core
8809 python-pytest))
8810 (propagated-inputs
8811 (list python-flask
8812 python-sqlalchemy-2))
8813 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
8814 (synopsis "Module adding SQLAlchemy support to your Flask application")
8815 (description
8816 "This package adds SQLAlchemy support to your Flask application.")
8817 (license license:bsd-3)))
8818
8819(define-public python-flask-restful-swagger
8820 (package
8821 (name "python-flask-restful-swagger")
8822 (version "0.20.1")
8823 ;; XXX: Unbundle minified javascript.
8824 (source
8825 (origin
8826 (method git-fetch)
8827 (uri (git-reference
8828 (url "https://github.com/rantav/flask-restful-swagger")
8829 (commit version)))
8830 (file-name (git-file-name name version))
8831 (sha256
8832 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
8833 (build-system pyproject-build-system)
8834 (arguments (list #:tests? #f)) ; No tests.
8835 (native-inputs (list python-setuptools))
8836 (propagated-inputs (list python-flask-restful python-six))
8837 (home-page "https://github.com/rantav/flask-restful-swagger")
8838 (synopsis "Extract Swagger specs from Flask-Restful projects")
8839 (description "This package lets you extract Swagger API documentation
8840specs from your Flask-Restful projects.")
8841 (license license:expat)))
8842
8843(define-public python-htmlmin
8844 (package
8845 (name "python-htmlmin")
8846 (version "0.1.12")
8847 (source
8848 (origin
8849 (method url-fetch)
8850 (uri (pypi-uri "htmlmin" version))
8851 (sha256
8852 (base32
8853 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
8854 (build-system pyproject-build-system)
8855 (arguments
8856 (list #:tests? #f)) ; no tests
8857 (native-inputs (list python-setuptools))
8858 (home-page "https://htmlmin.readthedocs.org/en/latest/")
8859 (synopsis "HTML minifier")
8860 (description "@code{htmlmin} is an HTML minifier that just works.
8861It comes with safe defaults and easily configurable options.")
8862 (license license:bsd-3)))
8863
8864;; XXX: Forked renamed and updated version.
8865(define-public python-htmlmin2
8866 (package/inherit python-htmlmin
8867 (name "python-htmlmin2")
8868 (version "0.1.13")
8869 (source
8870 (origin
8871 (method git-fetch)
8872 (uri (git-reference
8873 (url "https://github.com/wilhelmer/htmlmin")
8874 (commit (string-append "v" version))))
8875 (file-name (git-file-name name version))
8876 (sha256
8877 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
8878 (build-system pyproject-build-system)
8879 (arguments (list #:test-backend #~'unittest))
8880 (native-inputs (list python-setuptools))
8881 (home-page "https://github.com/wilhelmer/htmlmin")
8882 (description
8883 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
8884defaults and easily configurable options. This variant is an updated fork of
8885the original @code{python-htmlmin}.")
8886 (license license:bsd-3)))
8887
8888(define-public python-flask-htmlmin
8889 (package
8890 (name "python-flask-htmlmin")
8891 (version "3.0.0")
8892 (source
8893 (origin
8894 (method git-fetch)
8895 (uri (git-reference
8896 (url "https://github.com/hamidfzm/Flask-HTMLmin")
8897 (commit (string-append "v" version))))
8898 (file-name (git-file-name name version))
8899 (sha256
8900 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
8901 (build-system pyproject-build-system)
8902 (native-inputs (list python-pytest python-setuptools))
8903 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
8904 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
8905 (synopsis "HTML response minifier for Flask")
8906 (description
8907 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
8908 (license license:bsd-3)))
8909
8910(define-public python-jsmin
8911 (package
8912 (name "python-jsmin")
8913 (version "3.0.1")
8914 (source
8915 (origin
8916 (method url-fetch)
8917 (uri (pypi-uri "jsmin" version))
8918 (sha256
8919 (base32
8920 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
8921 (build-system pyproject-build-system)
8922 (arguments (list #:test-backend #~'unittest))
8923 (native-inputs
8924 (list python-setuptools))
8925 (home-page "https://github.com/tikitu/jsmin/")
8926 (synopsis "Python JavaScript minifier")
8927 (description
8928 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
8929on the command line.")
8930 (license license:expat)))
8931
8932(define-public python-flask-login
8933 (let ((commit "c8bba84b9ba6768e878317fc46c54bd13fa1ac07")
8934 (revision "0"))
8935 (package
8936 (name "python-flask-login")
8937 (version (git-version "0.6.3" revision commit))
8938 (source
8939 (origin
8940 (method git-fetch)
8941 (uri (git-reference
8942 (url "https://github.com/maxcountryman/flask-login")
8943 (commit commit)))
8944 (file-name (git-file-name name version))
8945 (sha256
8946 (base32 "0q0ga1zwm06kvpnsf50ckmsc77959i1spx7z2y3jkbwaa4klsyli"))))
8947 (build-system pyproject-build-system)
8948 (propagated-inputs
8949 (list python-flask))
8950 (native-inputs
8951 ;; For tests.
8952 (list python-blinker
8953 python-flit-core
8954 python-mock
8955 python-pytest
8956 python-semantic-version
8957 python-werkzeug))
8958 (home-page "https://github.com/maxcountryman/flask-login")
8959 (synopsis "User session management for Flask")
8960 (description
8961 "@code{Flask-Login} provides user session management for Flask. It
8962handles the common tasks of logging in, logging out, and remembering your
8963users' sessions over extended periods of time.")
8964 (license license:expat))))
8965
8966(define-public python-oauth2client
8967 (package
8968 (name "python-oauth2client")
8969 (version "4.1.3")
8970 (source
8971 (origin
8972 (method git-fetch)
8973 (uri (git-reference
8974 (url "https://github.com/google/oauth2client/")
8975 (commit (string-append "v" version))))
8976 (file-name (git-file-name name version))
8977 (sha256
8978 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
8979 (build-system pyproject-build-system)
8980 (arguments
8981 (list #:tests? #f))
8982 (native-inputs
8983 (list python-setuptools))
8984 (propagated-inputs
8985 (list python-httplib2
8986 python-pyasn1
8987 python-pyasn1-modules
8988 python-pyparsing
8989 python-rsa
8990 python-six))
8991 (home-page "https://github.com/google/oauth2client/")
8992 (synopsis "OAuth 2.0 client library")
8993 (description "@code{python-oauth2client} provides an OAuth 2.0 client
8994library for Python")
8995 (license license:asl2.0)))
8996
8997(define-public python-authlib
8998 (package
8999 (name "python-authlib")
9000 (version "1.5.1")
9001 (source
9002 (origin
9003 (method url-fetch)
9004 (uri (pypi-uri "authlib" version))
9005 (sha256
9006 (base32 "0blpvz2v2r8yvsgm1yr3n61mhwxvh1b0kyf2rp0i4wv6n3n8bg2w"))))
9007 (build-system pyproject-build-system)
9008 ;; No tests target.
9009 (arguments (list #:tests? #false))
9010 (propagated-inputs
9011 (list python-cryptography
9012 python-django
9013 python-flask
9014 python-httpx
9015 python-requests
9016 python-sqlalchemy-2
9017 python-starlette
9018 python-werkzeug))
9019 (native-inputs (list python-pytest python-setuptools python-wheel))
9020 (home-page "https://pypi.org/project/Authlib/1")
9021 (synopsis "Build OAuth and OpenID Connect servers and clients")
9022 (description
9023 "This is a Python library for building OAuth and OpenID Connect servers
9024and clients.")
9025 (license license:bsd-3)))
9026
9027(define-public python-flask-oidc
9028 (package
9029 (name "python-flask-oidc")
9030 (version "2.3.1")
9031 (source
9032 (origin
9033 (method url-fetch)
9034 (uri (pypi-uri "flask_oidc" version))
9035 (sha256
9036 (base32
9037 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
9038 (build-system pyproject-build-system)
9039 (propagated-inputs
9040 (list python-authlib
9041 python-blinker
9042 python-flask
9043 python-requests
9044 python-responses))
9045 (native-inputs
9046 (list python-pytest python-poetry-core))
9047 (home-page "https://github.com/puiterwijk/flask-oidc")
9048 (synopsis "OpenID Connect extension for Flask")
9049 (description "@code{python-flask-oidc} provides an OpenID Connect extension
9050for Flask.")
9051 (license license:bsd-2)))
9052
9053(define-public python-webassets
9054 (package
9055 (name "python-webassets")
9056 (version "3.0.0")
9057 (source
9058 (origin
9059 (method git-fetch)
9060 (uri (git-reference
9061 (url "https://github.com/miracle2k/webassets")
9062 (commit version)))
9063 (file-name (git-file-name name version))
9064 (sha256
9065 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
9066 (build-system pyproject-build-system)
9067 (propagated-inputs (list python-pyyaml python-zope-dottedname))
9068 (native-inputs (list python-hatchling python-pytest))
9069 (home-page "https://github.com/miracle2k/webassets")
9070 (synopsis "Media asset management")
9071 (description
9072 "This package provides utilities to merge, minify and compress Javascript
9073and CSS files,supporting a variety of different filters, including YUI, jsmin,
9074jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
9075 (license license:bsd-2)))
9076
9077(define-public python-cssmin
9078 (package
9079 (name "python-cssmin")
9080 (version "0.2.0")
9081 (source
9082 (origin
9083 (method git-fetch)
9084 (uri (git-reference
9085 (url "https://github.com/zacharyvoase/cssmin")
9086 (commit (string-append "v" version))))
9087 (file-name (git-file-name name version))
9088 (sha256
9089 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
9090 (build-system pyproject-build-system)
9091 (arguments (list #:tests? #f)) ; No tests.
9092 (native-inputs (list python-setuptools))
9093 (home-page "https://github.com/zacharyvoase/cssmin")
9094 (synopsis "Python port of the YUI CSS Compressor")
9095 (description "Python port of the YUI CSS Compressor.")
9096 (license (list license:expat license:bsd-3))))
9097
9098(define-public python-elastic-transport
9099 (package
9100 (name "python-elastic-transport")
9101 (version "9.1.0")
9102 (source
9103 (origin
9104 (method url-fetch)
9105 (uri (pypi-uri "elastic_transport" version))
9106 (sha256
9107 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
9108 (build-system pyproject-build-system)
9109 (arguments
9110 (list
9111 #:test-flags
9112 ;; Deselect failing tests (mostly due to network not reachable)
9113 #~(list "-k"
9114 (string-append
9115 "not .badssl.com"
9116 " and not test_assert_fingerprint_in_cert_chain_failure"))))
9117 (propagated-inputs (list python-certifi python-urllib3))
9118 (native-inputs (list nss-certs-for-test
9119 python-aiohttp
9120 ;; python-furo
9121 python-httpx
9122 python-opentelemetry-api
9123 python-opentelemetry-sdk
9124 python-orjson
9125 python-pytest
9126 python-pytest-asyncio-0.26
9127 ;; python-pytest-cov
9128 python-pytest-httpbin
9129 python-pytest-httpserver
9130 python-pytest-mock
9131 python-requests
9132 python-respx ;test
9133 python-setuptools
9134 ;; python-sphinx
9135 ;; python-sphinx-autodoc-typehints
9136 python-trustme
9137 python-wheel))
9138 (home-page "https://github.com/elastic/elastic-transport-python")
9139 (synopsis "Common library for Python Elastic client libraries")
9140 (description
9141 "This library was lifted from @code{elasticsearch-py} and then transformed to
9142be used across all Elastic services rather than only Elasticsearch. It
9143provides transport classes and utilities shared among Python Elastic client
9144libraries.")
9145 ;; Apache-2.0 in setup.py and LICENSE file.
9146 (license license:asl2.0)))
9147
9148(define-public python-elasticsearch
9149 (package
9150 (name "python-elasticsearch")
9151 (version "9.1.1")
9152 (source
9153 (origin
9154 (method git-fetch) ; no tests in PyPI release
9155 (uri (git-reference
9156 (url "https://github.com/elastic/elasticsearch-py")
9157 (commit (string-append "v" version))))
9158 (file-name (git-file-name name version))
9159 (sha256
9160 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
9161 (build-system pyproject-build-system)
9162 (native-inputs
9163 (list nss-certs-for-test
9164 python-aiohttp
9165 python-dateutil
9166 python-mock
9167 python-orjson
9168 python-pytest
9169 python-pytest-asyncio
9170 python-pytz
9171 python-pyyaml
9172 python-requests
9173 python-hatchling))
9174 (propagated-inputs
9175 (list python-certifi
9176 python-elastic-transport))
9177 (home-page "https://github.com/elastic/elasticsearch-py")
9178 (synopsis "Low-level client for Elasticsearch")
9179 (description "Official low-level client for Elasticsearch. Its goal is to
9180provide common ground for all Elasticsearch-related code in Python; because of
9181this it tries to be opinion-free and very extendable.")
9182 ;; Apache-2.0 in setup.py and LICENSE file.
9183 (license license:asl2.0)))
9184
9185(define-public python-engineio
9186 (package
9187 (name "python-engineio")
9188 (version "4.12.2")
9189 (source
9190 (origin
9191 (method url-fetch)
9192 (uri (pypi-uri "python_engineio" version))
9193 (sha256
9194 (base32
9195 "1ynyf3n29biwkm6nwzzwzhr4m19lsir1x5azxq2nl7xyw7zi5rz7"))))
9196 (build-system pyproject-build-system)
9197 (arguments
9198 (list
9199 #:test-flags
9200 #~(list "-k"
9201 "not test_static_file_routing and not test_static_files")))
9202 (native-inputs
9203 (list python-pytest
9204 python-pytest-asyncio
9205 python-setuptools
9206 python-tornado))
9207 (propagated-inputs
9208 (list python-aiohttp
9209 python-requests
9210 python-simple-websocket
9211 python-websocket-client))
9212 (home-page "https://github.com/miguelgrinberg/python-engineio/")
9213 (synopsis "Engine.IO server")
9214 (description "This package provides a Python implementation of the
9215@code{Engine.IO} realtime client and server.")
9216 (license license:expat)))
9217
9218(define-public python-ephemeral-port-reserve
9219 (package
9220 (name "python-ephemeral-port-reserve")
9221 (version "1.1.4")
9222 (source
9223 (origin
9224 (method git-fetch) ;no tests in PyPI archive
9225 (uri (git-reference
9226 (url "https://github.com/Yelp/ephemeral-port-reserve")
9227 (commit (string-append "v" version))))
9228 (file-name (git-file-name name version))
9229 (sha256
9230 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
9231 (build-system pyproject-build-system)
9232 (native-inputs
9233 (list python-pytest
9234 python-setuptools
9235 python-wheel))
9236 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
9237 (synopsis "Find an unused port, reliably")
9238 (description
9239 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
9240it.")
9241 (license license:expat)))
9242
9243(define-public python-flask-migrate
9244 (package
9245 (name "python-flask-migrate")
9246 (version "4.1.0")
9247 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
9248 (source (origin
9249 (method git-fetch)
9250 (uri (git-reference (url home-page)
9251 (commit (string-append "v" version))))
9252 (file-name (git-file-name name version))
9253 (sha256
9254 (base32
9255 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
9256 (build-system pyproject-build-system)
9257 (propagated-inputs
9258 (list python-flask python-alembic python-flask-sqlalchemy))
9259 (native-inputs
9260 (list python-pytest python-setuptools python-wheel))
9261 (synopsis "SQLAlchemy database migrations for Flask programs using
9262Alembic")
9263 (description "This package contains SQLAlchemy database migration tools
9264for Flask programs that are using @code{python-alembic}.")
9265 (license license:expat)))
9266
9267(define-public python-genshi
9268 (package
9269 (name "python-genshi")
9270 (version "0.7.10")
9271 (source
9272 (origin
9273 (method git-fetch)
9274 (uri (git-reference
9275 (url "https://github.com/edgewall/genshi")
9276 (commit version)))
9277 (file-name (git-file-name name version))
9278 (sha256
9279 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
9280 (build-system pyproject-build-system)
9281 (arguments (list #:test-backend #~'unittest))
9282 (native-inputs (list python-setuptools))
9283 (propagated-inputs (list python-six))
9284 (home-page "https://genshi.edgewall.org/")
9285 (synopsis "Toolkit for generation of output for the web")
9286 (description "Genshi is a Python library that provides an integrated set
9287of components for parsing, generating, and processing HTML, XML or other
9288textual content for output generation on the web.")
9289 (license license:bsd-3)))
9290
9291(define-public python-flask-principal
9292 (package
9293 (name "python-flask-principal")
9294 (version "0.4.0")
9295 (source
9296 (origin
9297 (method git-fetch)
9298 (uri (git-reference
9299 (url "https://github.com/pallets-eco/flask-principal")
9300 (commit version)))
9301 (file-name (git-file-name name version))
9302 (sha256
9303 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
9304 (build-system pyproject-build-system)
9305 (propagated-inputs (list python-blinker))
9306 (native-inputs (list python-flask python-pynose python-setuptools))
9307 (home-page "https://github.com/pallets-eco/flask-principal")
9308 (synopsis "Identity management for Flask")
9309 (description
9310 "@code{flask_principal} is a identity management library for Flask. It
9311supports managing both authentication and authorization data in a thread-local
9312variable.")
9313 (license license:expat)))
9314
9315(define-public python-flask-httpauth
9316 (package
9317 (name "python-flask-httpauth")
9318 (version "4.8.0")
9319 (source
9320 (origin
9321 (method url-fetch)
9322 (uri (pypi-uri "Flask-HTTPAuth" version))
9323 (sha256
9324 (base32
9325 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
9326 (build-system pyproject-build-system)
9327 (propagated-inputs (list python-flask))
9328 (native-inputs
9329 (list nss-certs-for-test
9330 python-pytest
9331 python-setuptools
9332 python-wheel))
9333 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
9334 (synopsis "Basic and Digest HTTP authentication for Flask routes")
9335 (description "@code{flask_httpauth} provides Basic and Digest HTTP
9336authentication for Flask routes.")
9337 (license license:expat)))
9338
9339(define-public python-uritemplate
9340 (package
9341 (name "python-uritemplate")
9342 (version "4.2.0")
9343 (source
9344 (origin
9345 (method url-fetch)
9346 (uri (pypi-uri "uritemplate" version))
9347 (sha256
9348 (base32
9349 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
9350 (build-system pyproject-build-system)
9351 (native-inputs (list python-pytest python-setuptools))
9352 (home-page "https://uritemplate.readthedocs.io/")
9353 (synopsis "Library to deal with URI Templates")
9354 (description "@code{uritemplate} provides Python library to deal with URI
9355Templates.")
9356 ;; The software is made available under the terms of *either* of the
9357 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
9358 ;; are made under *both* licenses (excerpt from the LICENSE file).
9359 (license (list license:bsd-2 license:asl2.0))))
9360
9361(define-public python-uritemplate-3
9362 (package
9363 (inherit python-uritemplate)
9364 (name "python-uritemplate")
9365 (version "3.0.1")
9366 (source (origin
9367 (method url-fetch)
9368 (uri (pypi-uri "uritemplate" version))
9369 (sha256
9370 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
9371
9372(define-public python-publicsuffix2
9373 (package
9374 (name "python-publicsuffix2")
9375 (version "2.2019-12-21")
9376 (source
9377 (origin
9378 (method git-fetch)
9379 (uri (git-reference
9380 (url "https://github.com/pombredanne/python-publicsuffix2")
9381 (commit (string-append "release-" version))))
9382 (file-name (git-file-name name version))
9383 (sha256
9384 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
9385 (build-system pyproject-build-system)
9386 (arguments
9387 (list
9388 #:tests? #f ;the test suite requires network access
9389 #:phases
9390 #~(modify-phases %standard-phases
9391 (add-after 'unpack 'ignore-maintainer-inputs
9392 (lambda _
9393 ;; Comment out a demand for python-requests, which is used only by
9394 ;; the unused ‘update_psl’ helper command.
9395 (substitute* "setup.py"
9396 (("'requests " match)
9397 (format #f "# ~a" match))))))))
9398 (native-inputs (list python-setuptools))
9399 (home-page "https://github.com/pombredanne/python-publicsuffix2")
9400 (synopsis
9401 "Get a public suffix for a domain name using the Public Suffix List")
9402 (description
9403 "Get a public suffix for a domain name using the Public Suffix List.
9404Forked from and using the same API as the publicsuffix package.")
9405 (license (list license:expat license:mpl2.0))))
9406
9407(define-public python-werkzeug
9408 (package
9409 (name "python-werkzeug")
9410 (version "3.1.3")
9411 (source
9412 (origin
9413 (method url-fetch)
9414 (uri (pypi-uri "werkzeug" version))
9415 (sha256
9416 (base32
9417 "0ij7si3aa3ykac7k7fz481h4majqqwn2iqwhjxkji4y18plkqwk0"))))
9418 (build-system pyproject-build-system)
9419 (arguments
9420 (list
9421 #:test-flags
9422 ;; Test requiring networking setup.
9423 #~(list "--ignore=tests/test_serving.py"
9424 "--deselect=tests/test_debug.py::test_basic"
9425 "--deselect=tests/test_exceptions.py::test_response_body"
9426 "--deselect=tests/middleware/test_http_proxy.py::test_http_proxy")))
9427 (native-inputs
9428 (list python-flit-core
9429 python-pytest
9430 python-watchdog
9431 python-ephemeral-port-reserve
9432 python-pytest-timeout
9433 python-pytest-xprocess))
9434 (propagated-inputs
9435 (list python-markupsafe
9436 python-requests))
9437 (home-page "https://palletsprojects.com/p/werkzeug/")
9438 (synopsis "Utilities for WSGI applications")
9439 (description "One of the most advanced WSGI utility modules. It includes a
9440powerful debugger, full-featured request and response objects, HTTP utilities to
9441handle entity tags, cache control headers, HTTP dates, cookie handling, file
9442uploads, a powerful URL routing system and a bunch of community-contributed
9443addon modules.")
9444 (license license:x11)))
9445
9446(define-public python-werkzeug-1.0
9447 (package
9448 (inherit python-werkzeug)
9449 (version "1.0.1")
9450 (source (origin
9451 (method url-fetch)
9452 (uri (pypi-uri "Werkzeug" version))
9453 (sha256
9454 (base32
9455 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
9456 (patches (search-patches "python-werkzeug-tests.patch"))))
9457 (arguments
9458 (list
9459 #:phases
9460 '(modify-phases %standard-phases
9461 (add-after 'unpack 'ignore-warnings
9462 (lambda _
9463 (substitute* "setup.cfg"
9464 ((" error.*") "")))))))
9465 (propagated-inputs
9466 (list python-requests))
9467 (native-inputs
9468 (list python-pytest python-pytest-timeout python-setuptools
9469 python-wheel))))
9470
9471(define-public python-bottle
9472 (package
9473 (name "python-bottle")
9474 (version "0.13.4")
9475 (source
9476 (origin
9477 (method url-fetch)
9478 (uri (pypi-uri "bottle" version))
9479 (sha256
9480 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
9481 (build-system pyproject-build-system)
9482 (native-inputs (list python-pytest python-setuptools))
9483 (home-page "https://bottlepy.org/")
9484 (synopsis "WSGI framework for small web-applications")
9485 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
9486 (license license:expat)))
9487
9488(define-public python-wtforms
9489 (package
9490 (name "python-wtforms")
9491 (version "3.2.2")
9492 (source
9493 (origin
9494 (method url-fetch)
9495 (uri (pypi-uri "wtforms" version))
9496 (sha256
9497 (base32 "14qbayp2gfmahaqn5migwyz2h1cq3gcdr4q2vd75vwvhhqzwf03v"))))
9498 (build-system pyproject-build-system)
9499 (native-inputs
9500 (list python-babel
9501 python-email-validator
9502 python-hatchling
9503 python-pytest
9504 python-setuptools))
9505 (propagated-inputs (list python-markupsafe))
9506 (home-page "https://wtforms.readthedocs.io/")
9507 (synopsis
9508 "Form validation and rendering library for Python web development")
9509 (description
9510 "WTForms is a flexible forms validation and rendering library
9511for Python web development. It is very similar to the web form API
9512available in Django, but is a standalone package.")
9513 (license license:bsd-3)))
9514
9515(define-public python-wtforms-sqlalchemy
9516 (package
9517 (name "python-wtforms-sqlalchemy")
9518 (version "0.4.1")
9519 (source
9520 (origin
9521 (method url-fetch)
9522 (uri (pypi-uri "WTForms-SQLAlchemy" version))
9523 (sha256
9524 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
9525 (build-system pyproject-build-system)
9526 (native-inputs (list python-pytest python-setuptools python-wheel))
9527 (propagated-inputs (list python-sqlalchemy python-wtforms))
9528 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
9529 (synopsis "SQLAlchemy tools for WTForms")
9530 (description
9531 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
9532package from WTForms. The package has been renamed to
9533@code{wtforms_sqlalchemy} but otherwise should function the same as
9534@code{wtforms.ext.sqlalchemy} did.")
9535 (license license:bsd-3)))
9536
9537(define-public python-urlgrabber
9538 (package
9539 (name "python-urlgrabber")
9540 (version "4.1.0")
9541 (source
9542 (origin
9543 (method url-fetch)
9544 (uri (pypi-uri "urlgrabber" version))
9545 (sha256
9546 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
9547 (build-system pyproject-build-system)
9548 (arguments
9549 (list
9550 #:tests? #f ; Most tests require network access.
9551 #:phases
9552 #~(modify-phases %standard-phases
9553 (replace 'check
9554 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
9555 (when tests?
9556 (invoke "python" "test/runtests.py")))))))
9557 (native-inputs (list python-setuptools))
9558 (propagated-inputs
9559 (list python-pycurl python-setuptools python-six))
9560 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
9561 (synopsis "High-level cross protocol url-grabber")
9562 (description
9563 "@code{urlgrabber} is a library that unifies access to files available on
9564the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
9565supports features like HTTP keep-alive, reget, throttling and more.")
9566 (license license:lgpl2.1+)))
9567
9568(define-public python-pycares
9569 (package
9570 (name "python-pycares")
9571 (version "4.11.0")
9572 (source
9573 (origin
9574 (method git-fetch)
9575 (uri (git-reference
9576 (url "https://github.com/saghul/pycares")
9577 (commit (string-append "v" version))))
9578 (file-name (git-file-name name version))
9579 (sha256
9580 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
9581 (snippet #~(begin
9582 (rmdir "deps/c-ares")))))
9583 (build-system pyproject-build-system)
9584 (arguments
9585 (list
9586 ;; XXX: Half of the tests require internet access
9587 ;; There is currently no markers to avoid running them.
9588 #:tests? #f
9589 #:phases
9590 #~(modify-phases %standard-phases
9591 (add-after 'unpack 'configure-system-lib
9592 (lambda _
9593 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
9594 (native-inputs (list python-pytest python-setuptools))
9595 (inputs (list c-ares))
9596 (propagated-inputs (list python-cffi))
9597 (home-page "https://github.com/saghul/pycares")
9598 (synopsis "Python interface for @code{c-ares}")
9599 (description
9600 "@code{pycares} is a Python module which provides an interface to
9601@code{c-ares}, a C library that performs DNS requests and name resolutions
9602asynchronously.")
9603 (license license:expat)))
9604
9605(define-public python-yarl
9606 (package
9607 (name "python-yarl")
9608 (version "1.18.3")
9609 (source
9610 (origin
9611 (method url-fetch)
9612 (uri (pypi-uri "yarl" version))
9613 (sha256
9614 (base32
9615 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
9616 (build-system pyproject-build-system)
9617 (arguments
9618 (list
9619 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
9620 #:phases
9621 '(modify-phases %standard-phases
9622 (add-after 'unpack 'avoid-pytest-cov-preload
9623 (lambda _
9624 (substitute* "pytest.ini"
9625 (("-p pytest_cov") ""))))
9626 (add-after 'unpack 'patch-build-system
9627 (lambda _
9628 ;; XXX: I don't know how to tell it to build the extensions in
9629 ;; place.
9630 (substitute* "packaging/pep517_backend/_backend.py"
9631 (("build_inplace=False") "build_inplace=True")))))))
9632 (native-inputs
9633 (list python-cython
9634 python-expandvars
9635 python-pytest
9636 python-pytest-xdist
9637 python-setuptools
9638 python-tomli))
9639 (propagated-inputs
9640 (list python-packaging python-idna python-multidict python-propcache))
9641 (home-page "https://github.com/aio-libs/yarl/")
9642 (synopsis "Yet another URL library")
9643 (description "@code{yarl} module provides handy @code{URL} class
9644for URL parsing and changing.")
9645 (license license:asl2.0)))
9646
9647(define-public python-canvasapi
9648 (package
9649 (name "python-canvasapi")
9650 (version "3.4.0")
9651 (source (origin
9652 (method git-fetch)
9653 (uri (git-reference
9654 (url "https://github.com/ucfopen/canvasapi")
9655 (commit (string-append "v" version))))
9656 (file-name (git-file-name name version))
9657 (sha256
9658 (base32
9659 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
9660 (build-system pyproject-build-system)
9661 (propagated-inputs (list python-arrow python-pytz python-requests))
9662 (native-inputs (list python-pytest
9663 python-requests-mock
9664 python-setuptools
9665 python-urllib3))
9666 (home-page "https://github.com/ucfopen/canvasapi")
9667 (synopsis "API wrapper for the Canvas LMS")
9668 (description
9669 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
9670The library enables developers to programmatically manage Canvas courses,
9671users, gradebooks, and more.")
9672 (license license:expat)))
9673
9674(define-public python-google
9675 (package
9676 (name "python-google")
9677 (version "3.0.0")
9678 (source
9679 (origin
9680 (method url-fetch)
9681 (uri (pypi-uri "google" version))
9682 (sha256
9683 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
9684 (build-system pyproject-build-system)
9685 (arguments (list #:tests? #f)) ;There are no tests.
9686 (native-inputs (list python-setuptools))
9687 (propagated-inputs (list python-beautifulsoup4))
9688 (home-page "https://breakingcode.wordpress.com/")
9689 (synopsis "Python bindings to the Google search engine")
9690 (description
9691 "This package provides Python bindings for using the Google search
9692engine. Its module is called @code{googlesearch}.")
9693 (license license:bsd-3)))
9694
9695(define-public python-google-api-client
9696 (package
9697 (name "python-google-api-client")
9698 (version "2.187.0")
9699 (source
9700 (origin
9701 (method git-fetch)
9702 (uri (git-reference
9703 (url "https://github.com/google/google-api-python-client")
9704 (commit (string-append "v" version))))
9705 (file-name (git-file-name name version))
9706 (sha256
9707 (base32 "09vq5d32avri0gl8c7nn5dv2xds1jzjms7vqk3gn66nm2m37x8mv"))))
9708 (build-system pyproject-build-system)
9709 (arguments
9710 (list
9711 #:test-flags
9712 #~(list
9713 "-k"
9714 (string-join
9715 (list
9716 ;; XXX: Deprecated behavior.
9717 "not test_client_options_universe_configured_with_mtls"
9718 "test_universe_env_var_configured_with_mtls"
9719 ;; XXX: Requires CA certificates.
9720 "test_credentials_and_credentials_file_mutually_exclusive")
9721 " and not ")
9722 "tests")))
9723 (native-inputs
9724 (list python-parameterized
9725 python-pytest
9726 python-setuptools))
9727 (propagated-inputs
9728 (list python-google-api-core
9729 python-google-auth
9730 python-google-auth-httplib2
9731 python-httplib2
9732 python-pyparsing
9733 python-uritemplate-3))
9734 (home-page "https://github.com/google/google-api-python-client")
9735 (synopsis "Core Python library for accessing Google APIs")
9736 (description "Python client library for Google's discovery based APIs")
9737 (license license:asl2.0)))
9738
9739(define-public python-google-auth-httplib2
9740 (package
9741 (name "python-google-auth-httplib2")
9742 (version "0.2.0")
9743 (source (origin
9744 (method url-fetch)
9745 (uri (pypi-uri "google-auth-httplib2" version))
9746 (sha256
9747 (base32 "018fckshilc6z2qpj1pclh8haanbq3lr85w6p4g4z5wgyjnppaiq"))))
9748 (build-system pyproject-build-system)
9749 (propagated-inputs
9750 (list python-google-auth python-httplib2))
9751 (native-inputs
9752 (list python-pytest
9753 python-pyparsing
9754 python-pytest-localserver
9755 python-flask
9756 python-setuptools))
9757 (home-page
9758 "https://github.com/GoogleCloudPlatform/google-auth-library-python-httplib2")
9759 (synopsis "Google Authentication Library: httplib2 transport")
9760 (description "This package provides a Google Authentication Library plugin
9761for httplib2 transport.")
9762 (license license:asl2.0)))
9763
9764(define-public python-google-auth-oauthlib
9765 (package
9766 (name "python-google-auth-oauthlib")
9767 (version "1.2.4")
9768 (home-page
9769 "https://github.com/GoogleCloudPlatform/\
9770google-auth-library-python-oauthlib")
9771 (source
9772 (origin
9773 (method git-fetch)
9774 (uri (git-reference
9775 (url home-page)
9776 (commit (string-append "v" version))))
9777 (file-name (git-file-name name version))
9778 (sha256
9779 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
9780 (build-system pyproject-build-system)
9781 (propagated-inputs (list python-google-auth python-requests-oauthlib))
9782 (native-inputs
9783 (list python-click python-mock python-pytest python-setuptools))
9784 (synopsis "Google Authentication Library: oauthlib")
9785 (description "This package provides a Google Authentication Library plugin
9786with oauthlib.")
9787 (license license:asl2.0)))
9788
9789(define-public whoogle-search
9790 (package
9791 (name "whoogle-search")
9792 (version "0.8.4")
9793 (source (origin
9794 (method url-fetch)
9795 (uri (pypi-uri "whoogle-search" version))
9796 (sha256
9797 (base32
9798 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
9799 (build-system pyproject-build-system)
9800 (arguments
9801 (list
9802 ;; The tests need network access
9803 #:tests? #f))
9804 (propagated-inputs
9805 (list python-beautifulsoup4
9806 python-brotli
9807 python-cryptography
9808 python-cssutils
9809 python-defusedxml
9810 python-flask
9811 python-dotenv
9812 python-requests
9813 python-stem
9814 python-validators
9815 python-waitress))
9816 (native-inputs (list python-setuptools python-wheel))
9817 (home-page "https://github.com/benbusby/whoogle-search")
9818 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
9819 (description
9820 "Get Google results, but without any ads, javascript, AMP links,
9821cookies, or IP address tracking. Quick and simple to implement as a primary
9822search engine replacement on both desktop and mobile.")
9823 (license license:expat)))
9824
9825(define-public python-hawkauthlib
9826 (package
9827 (name "python-hawkauthlib")
9828 (version "2.0.0")
9829 (source
9830 (origin
9831 (method git-fetch)
9832 (uri (git-reference
9833 (url "https://github.com/mozilla-services/hawkauthlib")
9834 (commit (string-append "v" version))))
9835 (file-name (git-file-name name version))
9836 (sha256
9837 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
9838 (build-system pyproject-build-system)
9839 (arguments
9840 (list
9841 #:test-backend #~'unittest
9842 #:phases
9843 #~(modify-phases %standard-phases
9844 (add-after 'unpack 'fix-python-incompatibilities
9845 (lambda _
9846 (substitute* (find-files "hawkauthlib/tests" "\\.py$")
9847 (("assertEquals") "assertEqual")))))))
9848 (native-inputs (list python-setuptools))
9849 (propagated-inputs (list python-requests python-webob))
9850 (home-page "https://github.com/mozilla-services/hawkauthlib")
9851 (synopsis "Hawk Access Authentication protocol")
9852 (description
9853 "This is a low-level Python library for implementing Hawk Access
9854Authentication, a simple HTTP request-signing scheme.")
9855 (license license:mpl2.0)))
9856
9857(define-public python-pybrowserid
9858 (package
9859 (name "python-pybrowserid")
9860 (version "0.14.0")
9861 (source
9862 (origin
9863 (method git-fetch)
9864 (uri (git-reference
9865 (url "https://github.com/mozilla/PyBrowserID")
9866 (commit version)))
9867 (file-name (git-file-name name version))
9868 (sha256
9869 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
9870 (build-system pyproject-build-system)
9871 (arguments
9872 (list
9873 #:test-backend #~'unittest
9874 #:phases
9875 #~(modify-phases %standard-phases
9876 (add-after 'unpack 'python-3.12-compatibility
9877 (lambda _
9878 (substitute* (find-files "browserid/tests" "\\.py")
9879 (("assertEquals") "assertEqual")))))))
9880 (propagated-inputs (list python-requests))
9881 (native-inputs (list python-mock python-setuptools))
9882 (home-page "https://github.com/mozilla/PyBrowserID")
9883 (synopsis "Python library for the BrowserID protocol")
9884 (description
9885 "This is a Python client library for the BrowserID protocol that
9886underlies Mozilla Persona.")
9887 (license license:mpl2.0)))
9888
9889(define-public python-pyfxa
9890 (package
9891 (name "python-pyfxa")
9892 (version "0.8.1")
9893 (source
9894 (origin
9895 (method git-fetch)
9896 (uri (git-reference
9897 (url "https://github.com/mozilla/PyFxA")
9898 (commit (string-append "v" version))))
9899 (file-name (git-file-name name version))
9900 (sha256
9901 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
9902 (build-system pyproject-build-system)
9903 (arguments
9904 (list
9905 ;; These tests require network access
9906 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
9907 (propagated-inputs
9908 (list python-cryptography
9909 python-pyjwt
9910 python-parameterized
9911 python-hawkauthlib
9912 python-requests))
9913 (native-inputs
9914 (list python-grequests
9915 python-hatchling
9916 python-mock
9917 python-pytest
9918 python-responses))
9919 (home-page "https://github.com/mozilla/PyFxA")
9920 (synopsis "Firefox Accounts client library for Python")
9921 (description
9922 "This is a Python library for interacting with the Firefox Accounts
9923ecosystem.")
9924 (license license:mpl2.0)))
9925
9926(define-public python-hyperlink
9927 (package
9928 (name "python-hyperlink")
9929 (version "21.0.0")
9930 (source
9931 (origin
9932 (method url-fetch)
9933 (uri (pypi-uri "hyperlink" version))
9934 (sha256
9935 (base32
9936 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
9937 (build-system pyproject-build-system)
9938 (arguments
9939 (list #:phases
9940 #~(modify-phases %standard-phases
9941 (add-before 'check 'pretend-to-be-CI
9942 (lambda _
9943 ;; Pretend to be a CI system to skip flaky tests.
9944 (setenv "CI" "true"))))))
9945 (native-inputs
9946 (list python-pytest python-setuptools python-wheel))
9947 (propagated-inputs
9948 (list python-idna))
9949 (home-page "https://github.com/python-hyper/hyperlink")
9950 (synopsis "Python module to create immutable URLs according to spec")
9951 (description "This package provides a Python module to create immutable, and
9952correct URLs for Python according to RFCs 3986 and 3987.")
9953 (license license:expat)))
9954
9955(define-public python-treq
9956 (package
9957 (name "python-treq")
9958 (version "24.9.1")
9959 (source
9960 (origin
9961 (method url-fetch)
9962 (uri (pypi-uri "treq" version))
9963 (sha256
9964 (base32
9965 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
9966 (build-system pyproject-build-system)
9967 (native-inputs
9968 (list python-httpbin
9969 python-pytest
9970 python-service-identity
9971 python-setuptools
9972 python-wheel))
9973 (propagated-inputs
9974 (list python-attrs
9975 python-hyperlink
9976 python-incremental
9977 python-requests
9978 python-twisted
9979 python-typing-extensions))
9980 (home-page "https://github.com/twisted/treq")
9981 (synopsis "Requests-like API built on top of twisted.web's Agent")
9982 (description "This package provides an HTTP library inspired by
9983@code{requests} but written on top of Twisted's @code{Agents}. It offers a
9984high level API for making HTTP requests when using Twisted.")
9985 (license license:expat)))
9986
9987(define-public python-autobahn
9988 (package
9989 (name "python-autobahn")
9990 (version "25.11.1")
9991 (source
9992 (origin
9993 (method url-fetch)
9994 (uri (pypi-uri "autobahn" version))
9995 (sha256
9996 (base32
9997 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
9998 (build-system pyproject-build-system)
9999 (arguments
10000 (list
10001 ;; The tests fail to run:
10002 ;; https://github.com/crossbario/autobahn-python/issues/1117
10003 #:tests? #f
10004 #:phases #~(modify-phases %standard-phases
10005 (add-after 'unpack 'relax-zope-interface
10006 (lambda _
10007 ;; python-zope-interface is a world rebuild package
10008 ;; and our one-digit lower minor version seems to be
10009 ;; fine.
10010 (substitute* "setup.py"
10011 (("zope.interface>=5.2.0")
10012 "zope.interface>=5.1.0"))))
10013 (add-after 'unpack 'strip-xbr
10014 (lambda _
10015 ;; Strip new XBR feature which isn't available in Guix.
10016 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
10017 (native-inputs (list python-setuptools python-wheel))
10018 (propagated-inputs (list python-cbor2
10019 python-cryptography
10020 python-hyperlink
10021 python-msgpack
10022 python-py-ubjson
10023 python-twisted
10024 python-txaio
10025 python-ujson))
10026 (home-page "https://github.com/crossbario/autobahn-python/")
10027 (synopsis "Web Application Messaging Protocol implementation")
10028 (description "This package provides an implementation of the @dfn{Web Application
10029Messaging Protocol} (WAMP). WAMP connects components in distributed
10030applications using Publish and Subscribe (PubSub) and routed Remote Procedure
10031Calls (rRPC). It is ideal for distributed, multi-client and server applications
10032such as IoT applications or multi-user database-driven business applications.")
10033 (license license:expat)))
10034
10035(define-public python-ws4py
10036 (package
10037 (name "python-ws4py")
10038 (version "0.6.0")
10039 (source
10040 (origin
10041 (method git-fetch)
10042 (uri (git-reference
10043 (url "https://github.com/Lawouach/WebSocket-for-Python")
10044 (commit version)))
10045 (file-name (git-file-name name version))
10046 (sha256
10047 (base32
10048 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
10049 (build-system pyproject-build-system)
10050 (arguments
10051 (list
10052 #:phases
10053 #~(modify-phases %standard-phases
10054 (add-after 'unpack 'remove-cherrypy-support
10055 (lambda _
10056 (delete-file "ws4py/server/cherrypyserver.py")
10057 (delete-file "test/test_cherrypy.py"))))))
10058 (native-inputs (list python-setuptools python-pytest))
10059 (propagated-inputs
10060 (list python-gevent python-tornado))
10061 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
10062 (synopsis "WebSocket client and server library")
10063 (description
10064 "This package provides a WebSocket client and server library for Python.")
10065 (license license:bsd-3)))
10066
10067(define-public python-slowapi
10068 (package
10069 (name "python-slowapi")
10070 (version "0.1.9")
10071 (source
10072 (origin
10073 (method git-fetch)
10074 (uri (git-reference
10075 (url "https://github.com/laurents/slowapi")
10076 (commit (string-append "v" version))))
10077 (file-name (git-file-name name version))
10078 (sha256
10079 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
10080 (build-system pyproject-build-system)
10081 (arguments
10082 (list
10083 #:test-flags
10084 ;; These tests fail because the timestamp contains more decimal points
10085 ;; than expected, so a simple equality comparison fails.
10086 '(list "-k" (string-append "not test_headers_no_breach"
10087 " and not test_headers_breach"))))
10088 (propagated-inputs (list python-limits python-redis))
10089 (native-inputs
10090 (list python-fastapi
10091 python-hiro
10092 python-mock
10093 python-poetry-core
10094 python-pytest))
10095 (home-page "https://github.com/laurents/slowapi")
10096 (synopsis "Rate limiting extension for Starlette and Fastapi")
10097 (description
10098 "This package provides a rate limiting extension for Starlette and
10099Fastapi.")
10100 (license license:expat)))
10101
10102(define-public python-slugify
10103 (package
10104 (name "python-slugify")
10105 (version "8.0.4")
10106 (source
10107 (origin
10108 (method git-fetch)
10109 (uri (git-reference
10110 (url "https://github.com/un33k/python-slugify")
10111 (commit (string-append "v" version))))
10112 (file-name (git-file-name name version))
10113 (sha256
10114 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
10115 (build-system pyproject-build-system)
10116 (arguments (list #:test-backend #~'unittest))
10117 (native-inputs (list python-setuptools))
10118 (propagated-inputs (list python-unidecode python-text-unidecode))
10119 (home-page "https://github.com/un33k/python-slugify")
10120 (synopsis "Python Slugify application that handles Unicode")
10121 (description "This package provides a @command{slufigy} command and
10122library to create slugs from unicode strings while keeping it DRY.")
10123 (license license:expat)))
10124
10125(define-public python-branca
10126 (package
10127 (name "python-branca")
10128 (version "0.7.2")
10129 (source
10130 (origin
10131 (method git-fetch) ; no tests in PyPI
10132 (uri (git-reference
10133 (url "https://github.com/python-visualization/branca")
10134 (commit (string-append "v" version))))
10135 (file-name (git-file-name name version))
10136 (sha256
10137 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
10138 (build-system pyproject-build-system)
10139 (arguments
10140 ;; This file requires Selenium.
10141 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
10142 ;; This test passes but is very slow.
10143 "-k" "not test_color_brewer_extendability")))
10144 (propagated-inputs (list python-jinja2))
10145 (native-inputs
10146 (list python-numpy
10147 python-pytest
10148 python-setuptools
10149 python-setuptools-scm
10150 python-wheel))
10151 (home-page "https://github.com/python-visualization/branca")
10152 (synopsis "Generate complex HTML+JS pages with Python")
10153 (description "This library is a spinoff from @code{folium} that would host
10154the non-map-specific features. It can be used to generate HTML + JS.")
10155 (license license:expat)))
10156
10157(define-public python-tinycss2
10158 (package
10159 (name "python-tinycss2")
10160 (version "1.5.1")
10161 (source
10162 (origin
10163 (method git-fetch)
10164 (uri (git-reference
10165 (url "https://github.com/Kozea/tinycss2")
10166 (commit (string-append "v" version))
10167 (recursive? #true)))
10168 (file-name (git-file-name name version))
10169 (sha256
10170 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
10171 (build-system pyproject-build-system)
10172 (native-inputs
10173 (list python-flit
10174 python-pytest))
10175 (propagated-inputs
10176 (list python-webencodings))
10177 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
10178 (synopsis "Low-level CSS parser for Python")
10179 (description "@code{tinycss2} can parse strings, return Python objects
10180representing tokens and blocks, and generate CSS strings corresponding to
10181these objects.
10182
10183Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
10184grammar of CSS but doesn’t know specific rules, properties or values supported
10185in various CSS modules.")
10186 (license license:bsd-3)))
10187
10188(define-public python-tinyhtml5
10189 (package
10190 (name "python-tinyhtml5")
10191 (version "2.1.0")
10192 (source
10193 (origin
10194 (method git-fetch)
10195 (uri (git-reference
10196 (url "https://github.com/CourtBouillon/tinyhtml5")
10197 (commit version)))
10198 (file-name (git-file-name name version))
10199 (sha256
10200 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
10201 (build-system pyproject-build-system)
10202 (propagated-inputs
10203 (list python-webencodings))
10204 (native-inputs
10205 (list python-flit-core
10206 python-pytest))
10207 (home-page "https://github.com/CourtBouillon/tinyhtml5")
10208 (synopsis "Small HTML parser based on the WHATWG HTML specification")
10209 (description "This Python module is a HTML5 parser that transforms a
10210possibly malformed HTML document into an ElementTree tree. This module is a
10211simplified fork of html5lib.")
10212 (license license:expat)))
10213
10214(define-public python-cssselect2
10215 (package
10216 (name "python-cssselect2")
10217 (version "0.9.0")
10218 (source
10219 (origin
10220 (method git-fetch)
10221 (uri (git-reference
10222 (url "https://github.com/Kozea/cssselect2")
10223 (commit version)))
10224 (file-name (git-file-name name version))
10225 (sha256
10226 (base32 "1drvb83siq9s6dygyhab6kzk2v2ib6cv51ls42p4jrxs9q8cdiw0"))))
10227 (build-system pyproject-build-system)
10228 (propagated-inputs
10229 (list python-tinycss2))
10230 (native-inputs
10231 (list python-flit-core
10232 python-pytest))
10233 (home-page "https://doc.courtbouillon.org/cssselect2/stable/")
10234 (synopsis "CSS selectors for Python ElementTree")
10235 (description "@code{cssselect2} is a straightforward implementation of
10236CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
10237ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
10238
10239Unlike the Python package @code{cssselect}, it does not translate selectors to
10240XPath and therefore does not have all the correctness corner cases that are
10241hard or impossible to fix in cssselect.")
10242 (license license:bsd-3)))
10243
10244(define-public python-uvloop
10245 (package
10246 (name "python-uvloop")
10247 (version "0.21.0")
10248 (source
10249 (origin
10250 (method url-fetch)
10251 (uri (pypi-uri "uvloop" version))
10252 (sha256
10253 (base32 "1qq46ym3ymzfn4j6fnykfmr1f4qnb7x7p15dlw37hi38v87jpw9v"))
10254 (modules '((guix build utils)))
10255 (snippet
10256 '(begin (delete-file-recursively "vendor")
10257 (delete-file "uvloop/loop.c")))))
10258 (build-system pyproject-build-system)
10259 (arguments
10260 (list
10261 #:test-flags
10262 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
10263 ;; to get a meaningful idea about where.
10264 #~(list "--timeout=300"
10265 "--timeout-method=thread"
10266 "-k" (string-join
10267 (list
10268 ;; Timeout, because SIGINT cannot be sent to child.
10269 "not test_signals_sigint_pycode_continue"
10270 "test_signals_sigint_pycode_stop"
10271 "test_signals_sigint_uvcode"
10272 "test_signals_sigint_uvcode_two_loop_runs"
10273 ;; This test is racy and prone to get stuck on
10274 ;; various platforms, possibly a aiohttp issue:
10275 ;; https://github.com/MagicStack/uvloop/issues/412
10276 "test_remote_shutdown_receives_trailing_data"
10277 ;; It looks like pytest is preventing
10278 ;; custom stdout/stderr redirection,
10279 ;; even with -s.
10280 "test_process_streams_redirect"
10281 ;; FileNotFoundError: [Errno 2] No such file or
10282 ;; directory
10283 "test_process_env_2"
10284 ;; socket.gaierror: [Errno -2] Name or service not known
10285 "test_getaddrinfo_21"
10286 #$@(if (target-riscv64?)
10287 `("test_renegotiation")
10288 `()))
10289 " and not "))
10290 #:phases
10291 #~(modify-phases %standard-phases
10292 (add-after 'unpack 'preparations
10293 (lambda _
10294 ;; Use packaged libuv.
10295 (substitute* "setup.py" (("self.use_system_libuv = False")
10296 "self.use_system_libuv = True"))
10297 ;; Replace hardcoded shell command.
10298 (substitute* "uvloop/loop.pyx"
10299 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))))
10300 #$@(if (target-riscv64?)
10301 `((add-after 'unpack 'adjust-test-timeouts
10302 (lambda _
10303 (substitute* '("tests/test_tcp.py"
10304 "tests/test_unix.py")
10305 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
10306 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
10307 '())
10308 (add-before 'check 'pre-check
10309 (lambda* (#:key tests? #:allow-other-keys)
10310 (when tests?
10311 ;; Remove Python module, which conflicts with the installed
10312 ;; version, but lacks the built C module.
10313 (delete-file-recursively "uvloop")))))))
10314 (native-inputs
10315 (list python-aiohttp
10316 python-cython
10317 python-psutil
10318 python-pyopenssl
10319 python-pytest
10320 python-pytest-timeout
10321 python-setuptools
10322 python-wheel))
10323 (inputs
10324 (list libuv))
10325 (home-page "https://github.com/MagicStack/uvloop")
10326 (synopsis "Fast implementation of asyncio event loop on top of libuv")
10327 (description
10328 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
10329event loop. It is implemented in Cython and uses libuv under the hood.")
10330 (license license:expat)))
10331
10332(define-public gunicorn
10333 (package
10334 (name "gunicorn")
10335 (version "25.3.0")
10336 (source
10337 (origin
10338 (method url-fetch)
10339 (uri (pypi-uri "gunicorn" version))
10340 (sha256
10341 (base32
10342 "12g85w735s4dszjfidi4vh786rfxsa5rd60il0fcvxknkwpinkpp"))))
10343 (outputs '("out" "doc"))
10344 (build-system pyproject-build-system)
10345 (arguments
10346 `(#:test-flags
10347 ;; Disable the geventlet tests because eventlet uses dnspython, which
10348 ;; does not work in the build container due to lack of /etc/resolv.conf
10349 '("--ignore=tests/workers/test_geventlet.py")
10350 #:phases (modify-phases %standard-phases
10351 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
10352 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
10353 ;; size. Override it to only add the essential entries.
10354 (replace 'wrap
10355 (lambda* (#:key native-inputs inputs outputs
10356 #:allow-other-keys)
10357 (let* ((out (assoc-ref outputs "out"))
10358 (python (assoc-ref (or native-inputs inputs)
10359 "python"))
10360 (sitedir (string-append "/lib/python"
10361 (python-version python)
10362 "/site-packages")))
10363 (wrap-program (string-append out "/bin/gunicorn")
10364 `("PYTHONPATH" ":" prefix
10365 ,(map (lambda (output)
10366 (string-append output sitedir))
10367 (list python out))))))))))
10368 (inputs (list bash-minimal))
10369 (native-inputs
10370 (list binutils ;for ctypes.util.find_library()
10371 python-eventlet
10372 python-gevent
10373 python-h2
10374 python-httpx
10375 python-pytest
10376 python-pytest-asyncio
10377 python-setuptools
10378 python-uvloop))
10379 (propagated-inputs
10380 (list python-packaging
10381 python-setuptools
10382 python-wheel))
10383 (home-page "https://gunicorn.org/")
10384 (synopsis "Python WSGI HTTP Server for UNIX")
10385 (description
10386 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
10387Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
10388Unicorn project. The Gunicorn server is broadly compatible with
10389various web frameworks, simply implemented, light on server resources,
10390and fairly speedy.")
10391 (license license:expat)))
10392
10393;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
10394;; its tests
10395(define-public gunicorn-bootstrap
10396 (package
10397 (inherit gunicorn)
10398 (name "gunicorn")
10399 (arguments `(#:tests? #f))
10400 (properties '((hidden? . #t)))
10401 (native-inputs `())))
10402
10403(define-public python-httptools
10404 (package
10405 (name "python-httptools")
10406 (version "0.7.1")
10407 (source
10408 (origin
10409 ;; PyPI tarball comes with a vendored http-parser and no tests.
10410 (method git-fetch)
10411 (uri (git-reference
10412 (url "https://github.com/MagicStack/httptools")
10413 (commit (string-append "v" version))))
10414 (file-name (git-file-name name version))
10415 (sha256
10416 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
10417 (modules '((guix build utils)))
10418 (snippet
10419 #~(begin (delete-file-recursively "vendor")))))
10420 (build-system pyproject-build-system)
10421 (arguments
10422 (list
10423 #:test-flags
10424 ;; XXX: AssertionError: HttpParserError not raised.
10425 #~(list "-k" "not test_parser_response_leninent_headers_1")
10426 #:phases
10427 #~(modify-phases %standard-phases
10428 (add-after 'unpack 'configure-build-ext
10429 (lambda _
10430 (with-output-to-file "setup.cfg"
10431 (lambda ()
10432 (display "\
10433[build_ext]
10434use_system_llhttp = true
10435use_system_http_parser = true
10436cython_always = true"))))))))
10437 (native-inputs
10438 (list python-cython
10439 python-pytest
10440 python-setuptools))
10441 (inputs
10442 (list http-parser
10443 llhttp))
10444 (home-page "https://github.com/MagicStack/httptools")
10445 (synopsis "Collection of framework independent HTTP protocol utils")
10446 (description
10447 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
10448 (license license:expat)))
10449
10450(define-public python-uvicorn
10451 (package
10452 (name "python-uvicorn")
10453 (version "0.40.0")
10454 (source
10455 (origin
10456 (method git-fetch)
10457 (uri (git-reference
10458 (url "https://github.com/encode/uvicorn")
10459 (commit version)))
10460 (file-name (git-file-name name version))
10461 (sha256
10462 (base32 "0laplrb2sf9jxv4prhrsqf8kpynipqml2idqq4fr7ikij8qsz6b2"))))
10463 (build-system pyproject-build-system)
10464 (arguments
10465 (list
10466 #:test-flags
10467 #~(list "-o" "asyncio_mode=auto"
10468 ;; After tests have been passed successfully some sockets leave
10469 ;; unclosed, causing Pytest to raise warning on teardown.
10470 "-W" "ignore::ResourceWarning"
10471 "-W" "ignore::pytest.PytestUnraisableExceptionWarning"
10472 ;; For some reason tests stacked in infinity re-invocation loop:
10473 ;; AssertionError where is_alive =
10474 ;; <uvicorn.supervisors.multiprocess.Process object at
10475 ;; 0x7ffff39b6110>.is_alive.
10476 ;; Maybe this <https://github.com/encode/uvicorn/issues/2466>.
10477 "--ignore=tests/supervisors/test_multiprocess.py"
10478
10479 #$@(cond
10480 ((or (target-aarch64?)
10481 (target-riscv64?))
10482 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
10483 (#t '())))))
10484 (native-inputs
10485 (list nss-certs-for-test
10486 python-a2wsgi
10487 python-hatchling
10488 python-httpx-bootstrap
10489 python-pytest
10490 python-pytest-asyncio
10491 python-pytest-mock
10492 python-pytest-xdist
10493 python-requests
10494 python-trustme
10495 python-wsproto))
10496 (propagated-inputs
10497 (list python-a2wsgi
10498 python-click
10499 python-dotenv
10500 python-h11
10501 python-httptools
10502 python-pyyaml
10503 python-uvloop
10504 python-watchfiles
10505 python-websockets))
10506 (home-page "https://github.com/encode/uvicorn")
10507 (synopsis "Fast ASGI server implementation")
10508 (description
10509 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
10510and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
10511for HTTP/2 is planned.")
10512 (license license:bsd-3)))
10513
10514(define-public python-translation-finder
10515 (package
10516 (name "python-translation-finder")
10517 (version "2.22")
10518 (source
10519 (origin
10520 (method url-fetch)
10521 (uri (pypi-uri "translation_finder" version))
10522 (sha256
10523 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
10524 (build-system pyproject-build-system)
10525 (arguments
10526 (list
10527 #:test-flags
10528 ;; AssertionError: 31 != 30 : Mismatched count of results
10529 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
10530 (native-inputs
10531 (list python-pytest
10532 python-setuptools))
10533 (propagated-inputs
10534 (list python-charset-normalizer
10535 python-ruamel.yaml
10536 python-weblate-language-data))
10537 (home-page "https://weblate.org/")
10538 (synopsis "Translation file finder for Weblate")
10539 (description "This package provides a function to find translation file in
10540the source code of a project. It supports many translation file formats and
10541is part of the Weblate translation platform.")
10542 (license license:gpl3+)))
10543
10544(define-public python-gitlab
10545 (package
10546 (name "python-gitlab")
10547 (version "7.0.0")
10548 (source
10549 (origin
10550 (method git-fetch)
10551 (uri (git-reference
10552 (url "https://github.com/python-gitlab/python-gitlab")
10553 (commit (string-append "v" version))))
10554 (file-name (git-file-name name version))
10555 (sha256
10556 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
10557 (build-system pyproject-build-system)
10558 (arguments
10559 (list
10560 #:test-flags
10561 #~(list "--ignore=tests/unit/test_graphql.py"
10562 ;; XXX: Missing helper script.
10563 "-k" "not test_data_from_helper" "tests/unit")))
10564 (native-inputs
10565 (list python-anyio
10566 python-pytest
10567 python-responses
10568 python-setuptools))
10569 (propagated-inputs (list python-requests python-requests-toolbelt))
10570 (home-page "https://github.com/python-gitlab/python-gitlab")
10571 (synopsis "Interact with GitLab API")
10572 (description "This package provides an extended library for interacting
10573with GitLab instances through their API.")
10574 (license license:lgpl3+)))
10575
10576(define-public python-path-and-address
10577 (package
10578 (name "python-path-and-address")
10579 (version "2.0.1")
10580 (source
10581 (origin
10582 (method git-fetch)
10583 (uri (git-reference
10584 (url "https://github.com/joeyespo/path-and-address")
10585 (commit (string-append "v" version))))
10586 (file-name (git-file-name name version))
10587 (sha256
10588 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
10589 (build-system pyproject-build-system)
10590 (native-inputs
10591 (list python-pytest python-setuptools))
10592 (home-page "https://github.com/joeyespo/path-and-address")
10593 (synopsis "Functions for command-line server tools used by humans")
10594 (description "Path-and-address resolves ambiguities of command-line
10595interfaces, inferring which argument is the path, and which is the address.")
10596 (license license:expat)))
10597
10598;; XXX: This project missed maintainer upstream, see
10599;; <https://github.com/joeyespo/grip/issues/387>.
10600;; Consider to remove if it keeps failing to build.
10601(define-public grip
10602 (package
10603 (name "grip")
10604 (version "4.6.1")
10605 (source
10606 (origin
10607 (method git-fetch)
10608 (uri (git-reference
10609 (url "https://github.com/joeyespo/grip")
10610 (commit (string-append "v" version))))
10611 (file-name (git-file-name name version))
10612 (sha256
10613 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
10614 (build-system pyproject-build-system)
10615 (arguments
10616 (list
10617 #:test-flags
10618 ;; All tests fail requiring network access, ignore the whole file.
10619 #~(list "--ignore=tests/test_github.py")
10620 #:phases
10621 #~(modify-phases %standard-phases
10622 ;; This fixes the removal of `charset` attribute of requests from
10623 ;; Werkzeug 2.3.0.
10624 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
10625 (add-after 'unpack 'fix-response-encoding
10626 (lambda _
10627 (substitute* "grip/app.py"
10628 (("response.charset")
10629 "getattr(response, 'charset', 'utf-8')")))))))
10630 (native-inputs
10631 (list nss-certs-for-test
10632 python-pytest
10633 python-responses
10634 python-setuptools
10635 python-wheel))
10636 (propagated-inputs
10637 (list python-docopt
10638 python-flask
10639 python-markdown
10640 python-path-and-address
10641 python-pygments
10642 python-requests))
10643 (home-page "https://github.com/joeyespo/grip")
10644 (synopsis "Preview Markdown files using the GitHub API")
10645 (description
10646 "Grip is a command-line server application written in Python that uses
10647the GitHub Markdown API to render a local Markdown file. The styles and
10648rendering come directly from GitHub, so you'll know exactly how it will
10649appear. Changes you make to the file will be instantly reflected in the
10650browser without requiring a page refresh.")
10651 (license license:expat)))
10652
10653(define-public python-port-for
10654 (package
10655 (name "python-port-for")
10656 (version "0.7.4")
10657 (source
10658 (origin
10659 (method url-fetch)
10660 (uri (pypi-uri "port_for" version))
10661 (sha256
10662 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
10663 (build-system pyproject-build-system)
10664 (propagated-inputs
10665 (list python-urllib3))
10666 (native-inputs
10667 (list python-pytest python-setuptools python-wheel))
10668 (home-page "https://github.com/kmike/port-for/")
10669 (synopsis "TCP localhost port finder and association manager")
10670 (description
10671 "This package provides a utility that helps with local TCP ports
10672management. It can find an unused TCP localhost port and remember the
10673association.")
10674 (license license:expat)))
10675
10676(define-public python-livereload
10677 (package
10678 (name "python-livereload")
10679 (version "2.7.1")
10680 (source
10681 (origin
10682 (method git-fetch)
10683 (uri (git-reference
10684 (url "https://github.com/lepture/python-livereload")
10685 (commit (string-append "v" version))))
10686 (file-name (git-file-name name version))
10687 (sha256
10688 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
10689 (build-system pyproject-build-system)
10690 (arguments (list #:test-backend #~'unittest))
10691 (native-inputs (list python-django python-setuptools))
10692 (propagated-inputs (list python-tornado))
10693 (home-page "https://github.com/lepture/python-livereload")
10694 (synopsis "Python LiveReload")
10695 (description
10696 "Python LiveReload provides a command line utility, @command{livereload},
10697for starting a web server in a directory. It can trigger arbitrary commands
10698and serve updated contents upon changes to the directory.")
10699 (license license:bsd-3)))
10700
10701(define-public python-vf-1
10702 (package
10703 (name "python-vf-1")
10704 (version "1.0.0")
10705 (source
10706 (origin
10707 (method git-fetch)
10708 (uri (git-reference
10709 (url "https://git.sr.ht/~solderpunk/VF-1")
10710 (commit (string-append "v" version))))
10711 (file-name (git-file-name name version))
10712 (sha256
10713 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
10714 (build-system pyproject-build-system)
10715 (arguments (list #:tests? #f)) ; No tests.
10716 (native-inputs (list python-setuptools))
10717 (home-page "https://git.sr.ht/~solderpunk/VF-1")
10718 (synopsis "Command line gopher client")
10719 (description "@code{VF-1} is a command line gopher client with
10720@acronym{TLS, Transport Layer Security} support.")
10721 (license license:bsd-2)))
10722
10723(define-public python-httpcore
10724 (package
10725 (name "python-httpcore")
10726 (version "1.0.9")
10727 (source
10728 (origin
10729 ;; PyPI tarball does not contain tests.
10730 (method git-fetch)
10731 (uri (git-reference
10732 (url "https://github.com/encode/httpcore")
10733 (commit version)))
10734 (file-name (git-file-name name version))
10735 (sha256
10736 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
10737 (build-system pyproject-build-system)
10738 (native-inputs
10739 (list nss-certs-for-test
10740 python-hatch-fancy-pypi-readme
10741 python-hatchling
10742 python-pytest
10743 python-pytest-asyncio
10744 python-pytest-httpbin
10745 python-pytest-trio
10746 python-uvicorn
10747 python-trustme))
10748 (propagated-inputs
10749 (list python-anyio
10750 python-certifi
10751 python-h11
10752 python-h2
10753 python-sniffio
10754 python-socksio
10755 python-trio
10756 python-trio-typing))
10757 (home-page "https://github.com/encode/httpcore")
10758 (synopsis "Minimal, low-level HTTP client")
10759 (description
10760 "HTTP Core provides a minimal and low-level HTTP client, which does one
10761thing only: send HTTP requests.
10762
10763Some things HTTP Core does do:
10764
10765@itemize
10766@item Sending HTTP requests.
10767@item Provides both sync and async interfaces.
10768@item Supports HTTP/1.1 and HTTP/2.
10769@item Async backend support for asyncio and trio.
10770@item Automatic connection pooling.
10771@item HTTP(S) proxy support.
10772@end itemize")
10773 (license license:bsd-3)))
10774
10775;;; Variant used to break a cycle between python-httpx and python-uvicorn.
10776(define-public python-httpcore-bootstrap
10777 (hidden-package
10778 (package/inherit python-httpcore
10779 (name "python-httpcore-bootstrap")
10780 (arguments (list #:tests? #f))
10781 (native-inputs (list python-hatchling
10782 python-hatch-fancy-pypi-readme)))))
10783
10784(define-public python-httpx
10785 (package
10786 (name "python-httpx")
10787 (version "0.28.1")
10788 (source
10789 (origin
10790 ;; PyPI tarball does not contain tests.
10791 (method git-fetch)
10792 (uri (git-reference
10793 (url "https://github.com/encode/httpx")
10794 (commit version)))
10795 (file-name (git-file-name name version))
10796 (sha256
10797 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
10798 (build-system pyproject-build-system)
10799 (arguments
10800 (list
10801 ;; 1401 passed, 1 skipped, 5 deselected
10802 #:test-flags
10803 #~(list "-o" "asyncio_mode=auto"
10804 ;; CLI tests are broken.
10805 "--ignore=tests/test_main.py"
10806 "-k" (string-join
10807 ;; These tests try to open an outgoing connection.
10808 (list "not test_async_proxy_close"
10809 "test_sync_proxy_clos"
10810 "test_write_timeout")
10811 " and not "))))
10812 (native-inputs
10813 (list nss-certs-for-test
10814 python-chardet
10815 python-cryptography
10816 python-hatch-fancy-pypi-readme
10817 python-hatchling
10818 python-pytest
10819 python-pytest-asyncio
10820 python-pytest-trio
10821 python-setuptools
10822 python-trio
10823 python-trustme
10824 python-uvicorn))
10825 (propagated-inputs
10826 (list python-anyio
10827 python-certifi
10828 python-httpcore
10829 python-idna
10830 ;; [brotli]
10831 python-brotli
10832 ;; [http2]
10833 python-h2
10834 ;; [socks]
10835 python-socksio
10836 ;; [zstd]
10837 python-zstandard
10838 ;; For trio, see:
10839 ;; <https://github.com/python-trio/trio/issues/2802>.
10840 python-sniffio))
10841 (home-page "https://www.python-httpx.org/")
10842 (synopsis "HTTP client for Python")
10843 (description
10844 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
10845and async APIs, and support for both HTTP/1.1 and HTTP/2.
10846
10847HTTPX builds on the well-established usability of requests, and gives you:
10848
10849@itemize
10850@item A broadly requests-compatible API.
10851@item Standard synchronous interface, but with async support if you need it.
10852@item HTTP/1.1 and HTTP/2 support.
10853@item Ability to make requests directly to WSGI applications or ASGI applications.
10854@item Strict timeouts everywhere.
10855@item Fully type annotated.
10856@item 99% test coverage.
10857@end itemize
10858
10859Plus all the standard features of requests:
10860
10861@itemize
10862@item International Domains and URLs
10863@item Keep-Alive & Connection Pooling
10864@item Sessions with Cookie Persistence
10865@item Browser-style SSL Verification
10866@item Basic/Digest Authentication
10867@item Elegant Key/Value Cookies
10868@item Automatic Decompression
10869@item Automatic Content Decoding
10870@item Unicode Response Bodies
10871@item Multipart File Uploads
10872@item HTTP(S) Proxy Support
10873@item Connection Timeouts
10874@item Streaming Downloads
10875@item .netrc Support
10876@item Chunked Requests
10877@end itemize")
10878 (license license:bsd-3)))
10879
10880;;; Variant used to break a cycle with python-uvicorn.
10881(define-public python-httpx-bootstrap
10882 (hidden-package
10883 (package/inherit python-httpx
10884 (name "python-httpx-bootstrap")
10885 (arguments (list #:tests? #f))
10886 (native-inputs
10887 (list python-hatchling
10888 python-hatch-fancy-pypi-readme))
10889 (propagated-inputs
10890 (modify-inputs propagated-inputs
10891 (replace "python-httpcore" python-httpcore-bootstrap))))))
10892
10893(define-public python-httpx-sse
10894 (package
10895 (name "python-httpx-sse")
10896 (version "0.4.3")
10897 (source
10898 (origin
10899 (method git-fetch)
10900 (uri (git-reference
10901 (url "https://github.com/florimondmanca/httpx-sse")
10902 (commit version)))
10903 (file-name (git-file-name name version))
10904 (sha256
10905 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
10906 (build-system pyproject-build-system)
10907 (native-inputs
10908 (list python-pytest
10909 python-pytest-asyncio
10910 python-setuptools
10911 python-setuptools-scm
10912 python-sse-starlette))
10913 (propagated-inputs (list python-httpx))
10914 (home-page "https://github.com/florimondmanca/httpx-sse")
10915 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
10916 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
10917 (license license:expat)))
10918
10919(define-public python-httpx-ws
10920 (package
10921 (name "python-httpx-ws")
10922 (version "0.9.0")
10923 (source
10924 (origin
10925 (method git-fetch)
10926 (uri (git-reference
10927 (url "https://github.com/frankie567/httpx-ws")
10928 (commit (string-append "v" version))))
10929 (file-name (git-file-name name version))
10930 (sha256
10931 (base32 "1hin6fndvfnx3mjgy30x0ghgjalikxavyj24klcknnly9sqzg83v"))))
10932 (build-system pyproject-build-system)
10933 (propagated-inputs
10934 (list python-anyio
10935 python-httpcore
10936 python-httpx
10937 python-wsproto))
10938 (native-inputs
10939 (list nss-certs-for-test
10940 python-hatch-regex-commit
10941 python-hatchling
10942 python-pytest
10943 python-pytest-cov
10944 python-starlette
10945 python-uvicorn))
10946 (home-page "https://github.com/frankie567/httpx-ws")
10947 (synopsis "WebSockets support for HTTPX")
10948 (description "This package provides @code{WebSockets} support for HTTPX.")
10949 (license license:expat)))
10950
10951(define-public python-wsgiprox
10952 (package
10953 (name "python-wsgiprox")
10954 (version "1.5.2")
10955 (source
10956 (origin
10957 (method url-fetch)
10958 (uri (pypi-uri "wsgiprox" version))
10959 (sha256
10960 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
10961 (build-system pyproject-build-system)
10962 (arguments
10963 ;; The test suite hangs (see:
10964 ;; https://github.com/webrecorder/wsgiprox/issues/6).
10965 (list
10966 #:tests? #f
10967 #:phases
10968 #~(modify-phases %standard-phases
10969 (add-after 'unpack 'fix-pytest-argument
10970 (lambda _
10971 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
10972 (substitute* "setup.py"
10973 (("--doctest-module")
10974 "--doctest-modules")))))))
10975 (propagated-inputs
10976 (list python-certauth python-gevent python-websocket-client))
10977 (native-inputs
10978 (list python-mock python-waitress python-setuptools))
10979 (home-page "https://github.com/webrecorder/wsgiprox")
10980 (synopsis "HTTP/S proxy with WebSockets over WSGI")
10981 (description
10982 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
10983middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
10984The library accepts HTTP and HTTPS proxy connections, and routes them to a
10985designated prefix.")
10986 (license license:asl2.0)))
10987
10988(define-public python-warcio
10989 ;; The PyPI release is missing some test support files (see:
10990 ;; https://github.com/webrecorder/warcio/issues/132).
10991 (package
10992 (name "python-warcio")
10993 (version "1.8.1")
10994 (source
10995 (origin
10996 (method git-fetch)
10997 (uri (git-reference
10998 (url "https://github.com/webrecorder/warcio")
10999 (commit (string-append "v" version))))
11000 (file-name (git-file-name name version))
11001 (sha256
11002 (base32
11003 "19wwg7zmx33c942dbahdkng1byiwr4c9cd1ayrsh13f818n17zps"))))
11004 (build-system pyproject-build-system)
11005 (arguments
11006 (list
11007 #:test-flags ; These tests fail due to networking requirements.
11008 '(list "-k" (format #f "not ~a"
11009 (string-join
11010 '("test_post_chunked"
11011 "test_remote"
11012 "test_capture_http_proxy"
11013 "test_capture_https_proxy"
11014 "test_capture_https_proxy_same_session")
11015 " and not "))
11016 ; The following test requires the hookdns package.
11017 "--ignore=test/test_capture_http_proxy.py")))
11018 (native-inputs
11019 (list python-httpbin
11020 python-pytest
11021 python-requests
11022 python-setuptools
11023 python-wsgiprox))
11024 (home-page "https://github.com/webrecorder/warcio")
11025 (synopsis "Streaming web archival archive (WARC) library")
11026 (description "warcio is a Python library to read and write the WARC format
11027commonly used in Web archives. It is designed for fast, low-level access to
11028web archival content, oriented around a stream of WARC records rather than
11029files.")
11030 (license license:asl2.0)))
11031
11032(define-public python-websockets
11033 (package
11034 (name "python-websockets")
11035 (version "13.1")
11036 (source
11037 (origin
11038 (method git-fetch)
11039 (uri (git-reference
11040 (url "https://github.com/aaugustin/websockets")
11041 (commit version)))
11042 (file-name (git-file-name name version))
11043 (sha256
11044 (base32
11045 "1dx3rf6fmg4ir9cfcn1fil446qz879cwrjq2rcz5zvl71xkw6hb3"))))
11046 (build-system pyproject-build-system)
11047 (arguments
11048 (list #:test-backend #~'unittest
11049 #:phases
11050 #~(modify-phases %standard-phases
11051 (add-before 'check 'extend-test-timeout
11052 (lambda _
11053 ;; Some architectures need an even longer timeout. Make it
11054 ;; long enough that it should never fail due to timeout.
11055 #$@(if (target-riscv64?)
11056 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
11057 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
11058 (native-inputs
11059 (list python-setuptools
11060 python-wheel))
11061 (home-page "https://github.com/aaugustin/websockets")
11062 (synopsis
11063 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
11064 (description
11065 "@code{websockets} is a library for building WebSocket servers and clients
11066in Python with a focus on correctness and simplicity.
11067
11068Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
11069it provides an elegant coroutine-based API.")
11070 (license license:bsd-3)))
11071
11072(define-public selenium-manager
11073 (package
11074 (name "selenium-manager")
11075 (version "4.34.2")
11076 (source
11077 (origin
11078 (method git-fetch)
11079 (uri (git-reference
11080 (url "https://github.com/SeleniumHQ/selenium")
11081 (commit (string-append "selenium-" version "-python"))))
11082 (file-name (git-file-name name version))
11083 (sha256
11084 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
11085 (build-system cargo-build-system)
11086 (arguments
11087 (list
11088 ;; XXX: Almost all tests require either browsers or network access.
11089 #:tests? #f
11090 #:install-source? #f ; Most likely intended as a leaf.
11091 #:phases
11092 #~(modify-phases %standard-phases
11093 (add-after 'unpack 'chdir
11094 (lambda _
11095 (chdir "rust"))))))
11096 (native-inputs (list pkg-config))
11097 (inputs (cons* (list zstd "lib") xz
11098 (cargo-inputs 'selenium-manager)))
11099 (home-page "https://www.selenium.dev")
11100 (synopsis "CLI tool to manager the browser test infrastructure")
11101 (description
11102 "Selenium simplifies web browser automation. It specifically provides
11103infrastructure for the W3C WebDriver specification — a platform and
11104language-neutral coding interface compatible with all major web browsers.
11105
11106Selenium Manager is a CLI tool that automatically manages the browser/driver
11107infrastructure required by Selenium.")
11108 (license license:asl2.0)))
11109
11110(define-public python-selenium
11111 (package/inherit selenium-manager
11112 (name "python-selenium")
11113 (build-system pyproject-build-system)
11114 (arguments
11115 (list
11116 ;; XXX: Disable failing tests.
11117 #:test-flags
11118 #~(list "--ignore-glob=test/selenium/webdriver/*"
11119 ;; Probably requires those.
11120 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
11121 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
11122 ;; XXX: SSL certificates access.
11123 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
11124 "-k" "not test_missing_cdp_devtools_version_falls_back")
11125 #:phases
11126 #~(modify-phases %standard-phases
11127 (add-after 'unpack 'chdir
11128 (lambda _
11129 (chdir "py")))
11130 (add-after 'chdir 'inject-selenium-manager-binary
11131 (lambda* (#:key inputs #:allow-other-keys)
11132 (substitute* "selenium/webdriver/common/selenium_manager.py"
11133 (("compiled_path = Path.*")
11134 (format #f "return Path(~s)~%"
11135 (search-input-file inputs "bin/selenium-manager"))))
11136 (substitute* "pyproject.toml"
11137 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
11138 "")
11139 (("target = \"selenium\\.webdriver\\.common.*\"")
11140 ""))))
11141 (add-after 'chdir 'relax-requirements
11142 (lambda _
11143 (substitute* "pyproject.toml"
11144 (("\"(typing_extensions|trio)~=.*\"," _ target)
11145 (format #f "~s," target))))))))
11146 (propagated-inputs (list python-certifi
11147 python-trio
11148 python-trio-websocket
11149 python-typing-extensions
11150 python-urllib3
11151 python-websocket-client))
11152 (inputs (list selenium-manager))
11153 (native-inputs (list python-filetype
11154 python-pytest
11155 python-pytest-mock
11156 python-pytest-trio
11157 python-setuptools
11158 python-setuptools-rust))
11159 (synopsis "Python bindings for Selenium")
11160 (description
11161 "Selenium enables web browser automation. It specifically provides
11162infrastructure for the W3C WebDriver specification — a platform and
11163language-neutral coding interface compatible with all major web browsers.")))
11164
11165(define-public python-rapidjson
11166 (package
11167 (name "python-rapidjson")
11168 (version "1.23")
11169 (source
11170 (origin
11171 (method git-fetch)
11172 (uri (git-reference
11173 (url "https://github.com/python-rapidjson/python-rapidjson")
11174 (commit (string-append "v" version))))
11175 (file-name (git-file-name name version))
11176 (sha256
11177 (base32 "0ajf919gg3qmi68jb0m6v80al2n65cn2ac36qz46s0h6zh92cl86"))
11178 (modules '((guix build utils)))
11179 (snippet
11180 '(delete-file-recursively "rapidjson"))))
11181 (build-system pyproject-build-system)
11182 (arguments
11183 (list
11184 #:test-flags '(list "tests")
11185 #:phases
11186 #~(modify-phases %standard-phases
11187 ;; We cannot seem to use #:configure-flags with the
11188 ;; pyproject-build-system to override rj_include_dir.
11189 (add-after 'unpack 'override-rapidjson-sources
11190 (lambda _
11191 (substitute* "setup.py"
11192 (("^rj_include_dir =.*")
11193 (string-append "rj_include_dir = '"
11194 #$(this-package-native-input "rapidjson")
11195 "/include/rapidjson" "'"))
11196 (("if not os.path.isdir.*") "if False:")))))))
11197 (native-inputs
11198 (list rapidjson python-pytest python-pytz python-setuptools))
11199 (home-page "https://github.com/python-rapidjson/python-rapidjson")
11200 (synopsis "Python wrapper around rapidjson")
11201 (description "This package provides a python wrapper around rapidjson.")
11202 (license license:expat)))
11203
11204(define-public python-venusian
11205 (package
11206 (name "python-venusian")
11207 (version "3.1.1")
11208 (source
11209 (origin
11210 (method url-fetch)
11211 (uri (pypi-uri "venusian" version))
11212 (sha256
11213 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
11214 (build-system pyproject-build-system)
11215 (native-inputs
11216 (list python-pytest
11217 python-setuptools))
11218 (home-page "https://docs.pylonsproject.org/projects/venusian")
11219 (synopsis "Library for deferring decorator actions")
11220 (description
11221 "Venusian is a library which allows framework authors to defer decorator
11222actions. Instead of taking actions when a function (or class) decorator is
11223executed at import time, you can defer the action usually taken by the
11224decorator until a separate scan phase.")
11225 (license license:repoze)))
11226
11227(define-public python-zope-deprecation
11228 (package
11229 (name "python-zope-deprecation")
11230 (version "6.0")
11231 (source (origin
11232 (method url-fetch)
11233 (uri (pypi-uri "zope_deprecation" version))
11234 (sha256
11235 (base32
11236 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
11237 (build-system pyproject-build-system)
11238 (arguments
11239 (list #:tests? #f)) ;no tests in PyPI
11240 (native-inputs
11241 (list python-setuptools))
11242 (home-page "https://zopedeprecation.readthedocs.io/")
11243 (synopsis "Function for marking deprecations")
11244 (description "The @code{zope.deprecation} module provides a function for
11245marking modules, classes, functions, methods and properties as deprecated,
11246displaying warnings when usaged in application code.")
11247 (license license:zpl2.1)))
11248
11249(define-public python-translationstring
11250 (package
11251 (name "python-translationstring")
11252 (version "1.4")
11253 (source (origin
11254 (method url-fetch)
11255 (uri (pypi-uri "translationstring" version))
11256 (sha256
11257 (base32
11258 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
11259 (build-system pyproject-build-system)
11260 (native-inputs
11261 (list python-pytest
11262 python-setuptools))
11263 (home-page "https://docs.pylonsproject.org/projects/translationstring")
11264 (synopsis "Internationalization tooling for the Pylons project")
11265 (description "This package provides a library used by various Pylons
11266project packages for internationalization (i18n) duties related to
11267translation.")
11268 (license license:repoze)))
11269
11270(define-public python-plaster
11271 (package
11272 (name "python-plaster")
11273 (version "1.1.2")
11274 (source (origin
11275 (method url-fetch)
11276 (uri (pypi-uri "plaster" version))
11277 (sha256
11278 (base32
11279 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
11280 (build-system pyproject-build-system)
11281 (native-inputs
11282 (list python-pytest
11283 python-setuptools))
11284 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
11285 (synopsis "Configuration loader for multiple config file formats")
11286 (description
11287 "Plaster is a loader interface around multiple config file formats. It
11288exists to define a common API for applications to use when they wish to load
11289configuration. The library itself does not aim to handle anything except a
11290basic API that applications may use to find and load configuration settings.
11291Any specific constraints should be implemented in a pluggable loader which can
11292be registered via an entrypoint.")
11293 (license license:repoze)))
11294
11295(define-public python-plaster-pastedeploy
11296 (package
11297 (name "python-plaster-pastedeploy")
11298 (version "1.0.1")
11299 (source (origin
11300 (method url-fetch)
11301 (uri (pypi-uri "plaster_pastedeploy" version))
11302 (sha256
11303 (base32
11304 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
11305 (build-system pyproject-build-system)
11306 (native-inputs
11307 (list python-pytest
11308 python-setuptools))
11309 (propagated-inputs
11310 (list python-plaster python-pastedeploy))
11311 (home-page "https://github.com/Pylons/plaster_pastedeploy")
11312 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
11313 (description
11314 "This plugin for @code{python-plaster} adds support for PasteDeploy
11315syntax, it provides a plaster @code{Loader} object that can parse ini files
11316according to the standard set by PasteDeploy")
11317 (license license:expat)))
11318
11319(define-public python-hupper
11320 (package
11321 (name "python-hupper")
11322 (version "1.12.1")
11323 (source
11324 (origin
11325 (method url-fetch)
11326 (uri (pypi-uri "hupper" version))
11327 (sha256
11328 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
11329 (build-system pyproject-build-system)
11330 (arguments
11331 (list
11332 ;; RuntimeError: timeout waiting for change to
11333 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
11334 #:test-flags #~(list "--ignore=tests/test_it.py")))
11335 (native-inputs
11336 (list python-pytest python-setuptools python-wheel))
11337 (propagated-inputs
11338 (list python-watchdog))
11339 (home-page "https://readthedocs.org/projects/hupper")
11340 (synopsis "Integrated process monitor tracking changes to imported Python files")
11341 (description
11342 "Hupper is an integrated process monitor that will track changes to any
11343imported Python files in sys.modules as well as custom paths. When files are
11344changed the process is restarted.")
11345 (license license:expat)))
11346
11347(define-public python-pyowm
11348 (package
11349 (name "python-pyowm")
11350 (version "3.3.0")
11351 (source
11352 (origin
11353 (method git-fetch)
11354 (uri (git-reference
11355 (url "https://github.com/csparpa/pyowm")
11356 (commit version)))
11357 (file-name (git-file-name name version))
11358 (sha256
11359 (base32
11360 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
11361 (build-system pyproject-build-system)
11362 (arguments (list #:test-flags #~(list "tests/unit")))
11363 (native-inputs (list python-pytest python-setuptools python-wheel))
11364 (propagated-inputs
11365 (list python-geojson-for-pyowm
11366 python-pysocks
11367 python-requests))
11368 (home-page "https://github.com/csparpa/pyowm")
11369 (synopsis "Python wrapper around OpenWeatherMap web APIs")
11370 (description
11371 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
11372 (license license:expat)))
11373
11374(define-public python-pyramid
11375 (package
11376 (name "python-pyramid")
11377 (version "2.1")
11378 (source
11379 (origin
11380 (method git-fetch)
11381 (uri (git-reference
11382 (url "https://github.com/Pylons/pyramid")
11383 (commit version)))
11384 (file-name (git-file-name name version))
11385 (sha256
11386 (base32 "0my03b81009w9zqx5cdn9qixh0jah49hr0379n98kx2j3b8cfk1p"))))
11387 (build-system pyproject-build-system)
11388 (native-inputs
11389 (list python-pytest
11390 python-setuptools
11391 python-webtest
11392 python-zope-component))
11393 (propagated-inputs
11394 (list python-hupper
11395 python-plaster
11396 python-plaster-pastedeploy
11397 python-translationstring
11398 python-venusian
11399 python-webob
11400 python-zope-deprecation
11401 python-zope-interface))
11402 (home-page "https://trypyramid.com/")
11403 (synopsis "Python web-framework suitable for small and large sites")
11404 (description
11405 "Pyramid makes it easy to write web applications. From minimal
11406request/response web apps to larger, grown applications.")
11407 (license license:repoze)))
11408
11409(define-public python-pyramid-chameleon
11410 ;; PyPI lacks a fresh release, use the latest commit associated with
11411 ;; unrleased version, see:
11412 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
11413 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
11414 (revision "0"))
11415 (package
11416 (name "python-pyramid-chameleon")
11417 (version (git-version "0.4.dev0" revision commit))
11418 (source
11419 (origin
11420 (method git-fetch)
11421 (uri (git-reference
11422 (url "https://github.com/Pylons/pyramid_chameleon")
11423 (commit commit)))
11424 (file-name (git-file-name name version))
11425 (sha256
11426 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
11427 (build-system pyproject-build-system)
11428 (native-inputs
11429 (list python-pytest
11430 python-setuptools))
11431 (propagated-inputs
11432 (list python-chameleon
11433 python-pyramid))
11434 (home-page "https://github.com/Pylons/pyramid_chameleon")
11435 (synopsis "Chameleon template compiler for pyramid")
11436 (description
11437 "These package provides bindings for the Chameleon templating system
11438 for the Pyramid web framework.")
11439 (license license:repoze))))
11440
11441(define-public python-pyramid-debugtoolbar
11442 (package
11443 (name "python-pyramid-debugtoolbar")
11444 (version "4.12.1")
11445 (source
11446 (origin
11447 (method git-fetch)
11448 (uri (git-reference
11449 (url "https://github.com/Pylons/pyramid_debugtoolbar")
11450 (commit version)))
11451 (file-name (git-file-name name version))
11452 (sha256
11453 (base32 "0kalb5rsrlcz62zv9a39kp28mvwg9j6gymvzxbybdnvk51v9if56"))))
11454 (build-system pyproject-build-system)
11455 (arguments
11456 (list
11457 #:test-flags
11458 ;; Large diff assertion not equal faileurs.
11459 #~(list #$@(map (lambda (test)
11460 (string-append "--deselect=tests"
11461 "/test_panels/test_sqla.py::" test))
11462 (list "TestSimpleSelect::test_panel"
11463 "TestTransactionCommit::test_panel"
11464 "TestTransactionRollback::test_panel")))))
11465 (native-inputs
11466 (list python-pytest
11467 python-setuptools
11468 python-webtest))
11469 (propagated-inputs
11470 (list python-pyramid
11471 python-pyramid-chameleon
11472 python-pyramid-jinja2
11473 python-pyramid-mako
11474 python-selenium
11475 python-sqlalchemy
11476 python-waitress))
11477 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
11478 (synopsis "Pyramid debug toolbar")
11479 (description
11480 "This package provides an interactive HTML debugger for Pyramid
11481application development.")
11482 (license license:bsd-3)))
11483
11484(define-public python-pyramid-jinja2
11485 (package
11486 (name "python-pyramid-jinja2")
11487 (version "2.10.1")
11488 (source
11489 (origin
11490 (method url-fetch)
11491 (uri (pypi-uri "pyramid_jinja2" version))
11492 (sha256
11493 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
11494 (build-system pyproject-build-system)
11495 (arguments
11496 (list
11497 #:test-flags
11498 ;; Two tests failed with assertion not equal.
11499 #~(list "-k" "not test_it_relative_to_package and not test_options")))
11500 (native-inputs
11501 (list python-pytest
11502 python-setuptools
11503 python-webtest))
11504 (propagated-inputs
11505 (list python-jinja2
11506 python-markupsafe
11507 python-pyramid
11508 python-zope-deprecation))
11509 (home-page "https://github.com/Pylons/pyramid_jinja2")
11510 (synopsis "Jinja2 template bindings for the Pyramid web framework")
11511 (description "This package provides Jinja2 template bindings for the
11512Pyramid web framework.")
11513 (license license:repoze)))
11514
11515(define-public python-pyramid-mako
11516 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
11517 ;; master, us the latest commit for now.
11518 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
11519 (revision "0"))
11520 (package
11521 (name "python-pyramid-mako")
11522 (version (git-version "1.1.0" revision commit))
11523 (source
11524 (origin
11525 (method git-fetch)
11526 (uri (git-reference
11527 (url "https://github.com/Pylons/pyramid_mako")
11528 (commit commit)))
11529 (file-name (git-file-name name version))
11530 (sha256
11531 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
11532 (build-system pyproject-build-system)
11533 (native-inputs
11534 (list python-pytest
11535 python-setuptools))
11536 (propagated-inputs
11537 (list python-mako
11538 python-pyramid))
11539 (home-page "https://github.com/Pylons/pyramid_mako")
11540 (synopsis "Mako template bindings for the Pyramid web framework")
11541 (description
11542 "This package provides Mako template bindings for the Pyramid web
11543framework.")
11544 (license license:repoze))))
11545
11546(define-public python-pyramid-retry
11547 (package
11548 (name "python-pyramid-retry")
11549 (version "2.1.1")
11550 (source
11551 (origin
11552 (method url-fetch)
11553 (uri (pypi-uri "pyramid_retry" version))
11554 (sha256
11555 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
11556 (build-system pyproject-build-system)
11557 (native-inputs
11558 (list python-pytest
11559 python-setuptools
11560 python-webtest))
11561 (propagated-inputs
11562 (list python-pyramid
11563 python-zope-interface))
11564 (home-page "https://github.com/Pylons/pyramid_retry")
11565 (synopsis "Pyramid execution policy supporting retrying failed requests")
11566 (description
11567 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
11568and can retry them a configurable number of times under certain \"retryable\"
11569error conditions before indicating a failure to the client.")
11570 (license license:expat)))
11571
11572(define-public python-pyramid-tm
11573 (package
11574 (name "python-pyramid-tm")
11575 (version "2.6")
11576 (source
11577 (origin
11578 (method url-fetch)
11579 (uri (pypi-uri "pyramid_tm" version))
11580 (sha256
11581 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
11582 (build-system pyproject-build-system)
11583 (native-inputs
11584 (list python-pytest
11585 python-setuptools
11586 python-webtest))
11587 (propagated-inputs
11588 (list python-pyramid
11589 python-transaction))
11590 (home-page "https://github.com/Pylons/pyramid_tm")
11591 (synopsis "Centralized transaction management for Pyramid")
11592 (description
11593 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
11594active @url{https://pypi.org/project/transaction/, transaction} as provided by
11595the Python transaction package.")
11596 (license license:repoze)))
11597
11598(define-public python-random-user-agent
11599 (package
11600 (name "python-random-user-agent")
11601 (version "1.0.1")
11602 (source
11603 (origin
11604 (method url-fetch)
11605 (uri (pypi-uri "random_user_agent" version))
11606 (sha256
11607 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
11608 (build-system pyproject-build-system)
11609 (arguments (list #:tests? #f)) ; No tests.
11610 (native-inputs (list python-setuptools))
11611 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
11612 (synopsis "List of user agents")
11613 (description
11614 "This package provides a list of user agents, from a collection of more
11615than 326,000 known user-agents. Users can pick a random one, or select one
11616based on filters.")
11617 (license license:expat)))
11618
11619(define-public python-rangehttpserver
11620 (package
11621 (name "python-rangehttpserver")
11622 (version "1.4.0")
11623 (source
11624 (origin
11625 (method git-fetch)
11626 (uri (git-reference
11627 (url "https://github.com/danvk/RangeHTTPServer")
11628 (commit version)))
11629 (file-name (git-file-name name version))
11630 (sha256
11631 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
11632 (build-system pyproject-build-system)
11633 (native-inputs
11634 (list python-pytest
11635 python-requests
11636 python-setuptools))
11637 (home-page "https://github.com/danvk/RangeHTTPServer")
11638 (synopsis "SimpleHTTPServer with support for range requests")
11639 (description
11640 "This tool provides a simple HTTP server with support for Range
11641requests.")
11642 (license license:asl2.0)))
11643
11644(define-public python-flask-restx
11645 (package
11646 (name "python-flask-restx")
11647 (version "1.3.0")
11648 (source
11649 (origin
11650 (method git-fetch) ;no tests in PyPI archive
11651 (uri (git-reference
11652 (url "https://github.com/python-restx/flask-restx")
11653 (commit version)))
11654 (file-name (git-file-name name version))
11655 (sha256
11656 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
11657 (build-system pyproject-build-system)
11658 (arguments
11659 (list
11660 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
11661 #:test-flags
11662 #~(list "--benchmark-skip"
11663 ;; ValueError: http://www.google.com is not a valid URL. Domain
11664 ;; does not exists.
11665 "--deselect=tests/test_inputs.py::URLTest::test_check"
11666 "-k" (string-join
11667 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
11668 (list "not test_rfc822_value"
11669 "test_iso8601_value"
11670 ;; assert 404 == 2000
11671 "test_specs_endpoint_host_and_subdomain"
11672 ;; ValueError: [email protected] is not a valid email
11673 "test_valid_value_check")
11674 " and not "))))
11675 (native-inputs
11676 (list python-blinker
11677 python-faker
11678 python-pytest
11679 python-pytest-benchmark
11680 python-pytest-flask
11681 python-pytest-mock
11682 python-setuptools))
11683 (propagated-inputs
11684 (list python-aniso8601
11685 python-flask
11686 python-importlib-resources
11687 python-jsonschema
11688 python-pytz
11689 python-werkzeug))
11690 (home-page "https://github.com/python-restx/flask-restx")
11691 (synopsis
11692 "Framework for fast, easy and documented API development with Flask")
11693 (description
11694 "Flask-RESTX is an extension for Flask that adds support for quickly building
11695REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
11696 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
11697decorators and tools to describe your API and expose its documentation properly using
11698Swagger.")
11699 (license license:bsd-3)))
11700
11701(define-deprecated-package python-flask-restplus
11702 python-flask-restx)
11703
11704(define-public python-flask-socketio
11705 (package
11706 (name "python-flask-socketio")
11707 (version "5.5.1")
11708 (source
11709 (origin
11710 (method url-fetch)
11711 (uri (pypi-uri "flask_socketio" version))
11712 (sha256
11713 (base32
11714 "1i0yqn39b4v4r2whppx47sg7iicvqzssd1clx7cclk07l52cjinr"))))
11715 (build-system pyproject-build-system)
11716 (propagated-inputs
11717 (list python-flask python-socketio))
11718 (native-inputs
11719 (list python-pytest python-redis python-setuptools python-wheel))
11720 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
11721 (synopsis "Socket.IO integration for Flask applications")
11722 (description "Socket.IO integration for Flask applications")
11723 (license license:expat)))
11724
11725(define-public python-manuel
11726 (package
11727 (name "python-manuel")
11728 (version "1.13.0")
11729 (source
11730 (origin
11731 (method url-fetch)
11732 (uri (pypi-uri "manuel" version))
11733 (sha256
11734 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
11735 (build-system pyproject-build-system)
11736 (arguments
11737 (list
11738 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
11739 #:tests? #f))
11740 (propagated-inputs
11741 (list python-setuptools)) ;install requires
11742 (home-page "https://pypi.org/project/manuel/")
11743 (synopsis "Build tested documentation")
11744 (description
11745 "Manuel lets you mix and match traditional doctests with custom test syntax.")
11746 (license license:asl2.0)))
11747
11748(define-public python-marshmallow-jsonapi
11749 (package
11750 (name "python-marshmallow-jsonapi")
11751 (version "0.26.0")
11752 (source
11753 (origin
11754 (method git-fetch)
11755 (uri (git-reference
11756 ;; XXX: Deprecated upstream: This repository has been archived
11757 ;; by the owner on Jun 6, 2024. It is now read-only.
11758 ;; Using a maintained fork. The pypi name of this fork
11759 ;; is marshmallow-jsonapi-minfork.
11760 (url "https://github.com/tadams42/marshmallow-jsonapi")
11761 (commit version)))
11762 (file-name (git-file-name name version))
11763 (sha256
11764 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
11765 (build-system pyproject-build-system)
11766 (native-inputs
11767 (list python-faker
11768 python-flask
11769 python-pytest
11770 python-setuptools))
11771 (propagated-inputs (list python-marshmallow))
11772 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
11773 (synopsis "JSON:API 1.0 formatting with Marshmallow")
11774 (description
11775 "The marshmallow-jsonapi package provides a simple way to produce
11776@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
11777framework. It includes optional utilities to integrate with Flask. This is a
11778forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
11779 (license license:expat)))
11780
11781(define-public python-pecan
11782 (package
11783 (name "python-pecan")
11784 (version "1.8.0")
11785 (source
11786 (origin
11787 (method git-fetch)
11788 (uri (git-reference
11789 (url "https://github.com/pecan/pecan")
11790 (commit version)))
11791 (file-name (git-file-name name version))
11792 (sha256
11793 (base32 "0w693jpnjy358992f3jrrlf31knkqn0jvz2jx0iz7ziikprc61p8"))))
11794 (build-system pyproject-build-system)
11795 (arguments
11796 (list
11797 #:test-flags '(list "--pyargs" "pecan")))
11798 (native-inputs
11799 (list gunicorn
11800 python-genshi
11801 python-jinja2
11802 python-pytest
11803 python-sqlalchemy-2
11804 python-webtest))
11805 (propagated-inputs
11806 (list python-mako
11807 python-webob))
11808 (home-page "http://github.com/pecan/pecan")
11809 (synopsis "WSGI object-dispatching web framework")
11810 (description "This package provides a WSGI object-dispatching web
11811framework, designed to be lean and fast, with few dependencies.")
11812 (license license:bsd-3)))
11813
11814(define-public python-persistent
11815 (package
11816 (name "python-persistent")
11817 (version "6.1.1")
11818 (source
11819 (origin
11820 (method git-fetch)
11821 (uri (git-reference
11822 (url "https://github.com/zopefoundation/persistent/")
11823 (commit version)))
11824 (file-name (git-file-name name version))
11825 (sha256
11826 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
11827 (build-system pyproject-build-system)
11828 (arguments
11829 (list
11830 #:phases
11831 #~(modify-phases %standard-phases
11832 (replace 'check
11833 (lambda* (#:key tests? #:allow-other-keys)
11834 (if tests?
11835 (invoke "zope-testrunner" "--test-path=src"
11836 ;; XXX: Ignore doc tests.
11837 "!persistent.tests.test_docs")
11838 (format #t "test suite not run~%")))))))
11839 (propagated-inputs
11840 (list python-cffi
11841 python-zope-deferredimport
11842 python-zope-interface
11843 python-zope-testrunner))
11844 (native-inputs
11845 (list python-manuel python-zope-testrunner python-setuptools))
11846 (home-page "https://github.com/zopefoundation/persistent/")
11847 (synopsis "Translucent persistent objects")
11848 (description
11849 "This package contains a generic persistence implementation for Python.
11850It forms the core protocol for making objects interact \"transparently\" with
11851a database such as the ZODB.")
11852 (license license:zpl2.1)))
11853
11854(define-public python-btrees
11855 (package
11856 (name "python-btrees")
11857 (version "6.1")
11858 (source
11859 (origin
11860 (method git-fetch)
11861 (uri (git-reference
11862 (url "https://github.com/zopefoundation/BTrees")
11863 (commit version)))
11864 (file-name (git-file-name name version))
11865 (sha256
11866 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
11867 (build-system pyproject-build-system)
11868 (arguments
11869 (list
11870 #:phases
11871 #~(modify-phases %standard-phases
11872 (replace 'check
11873 (lambda* (#:key tests? #:allow-other-keys)
11874 (if tests?
11875 (invoke "zope-testrunner" "--test-path=src")
11876 (format #t "test suite not run~%")))))))
11877 (propagated-inputs (list python-persistent python-zope-interface))
11878 (native-inputs (list python-persistent python-transaction
11879 python-zope-testrunner python-setuptools))
11880 (home-page "https://github.com/zopefoundation/BTrees")
11881 (synopsis "Scalable persistent object containers")
11882 (description
11883 "This package contains a set of persistent object containers built around a
11884modified BTree data structure. The trees are optimized for use inside ZODB's
11885\"optimistic concurrency\" paradigm, and include explicit resolution of
11886conflicts detected by that mechanism.")
11887 (license license:zpl2.1)))
11888
11889(define-public python-transaction
11890 (package
11891 (name "python-transaction")
11892 (version "5.0")
11893 (source
11894 (origin
11895 (method url-fetch)
11896 (uri (pypi-uri "transaction" version))
11897 (sha256
11898 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
11899 (build-system pyproject-build-system)
11900 (native-inputs
11901 (list python-pytest
11902 python-setuptools))
11903 (propagated-inputs
11904 (list python-zope-interface))
11905 (home-page "https://github.com/zopefoundation/transaction")
11906 (synopsis "Transaction management for Python")
11907 (description "This package contains a generic transaction implementation
11908for Python. It is mainly used by the ZODB.")
11909 (license license:zpl2.1)))
11910
11911(define-public python-truststore
11912 (package
11913 (name "python-truststore")
11914 (version "0.10.4")
11915 (source
11916 (origin
11917 (method url-fetch)
11918 (uri (pypi-uri "truststore" version))
11919 (sha256
11920 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
11921 (build-system pyproject-build-system)
11922 (arguments
11923 (list #:tests? #f)) ;all tests require Internet access
11924 (native-inputs
11925 (list python-flit-core))
11926 (home-page "https://github.com/sethmlarson/truststore")
11927 (synopsis "Verify certificates using native system trust stores")
11928 (description
11929 "Truststore is a library which exposes native system certificate stores (ie
11930\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
11931Python applications no longer need to rely on certifi as a root certificate
11932store.")
11933 (license license:expat)))
11934
11935(define-public python-robot-detection
11936 (package
11937 (name "python-robot-detection")
11938 (version "0.4.0")
11939 (source
11940 (origin
11941 (method git-fetch)
11942 (uri (git-reference
11943 (url "https://github.com/rory/robot-detection")
11944 (commit (string-append "v" version))))
11945 (file-name (git-file-name name version))
11946 (sha256
11947 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
11948 (build-system pyproject-build-system)
11949 (arguments (list #:test-backend #~'unittest))
11950 (native-inputs (list python-setuptools))
11951 (propagated-inputs (list python-six))
11952 (home-page "https://github.com/rory/robot-detection")
11953 (synopsis "Detect web crawlers")
11954 (description
11955 "@code{robot_detection} is a python module to detect if a given HTTP User
11956Agent is a web crawler. It uses the list of registered robots from
11957@url{http://www.robotstxt.org}.")
11958 (license license:gpl3+)))
11959
11960(define-public python-robotframework-requests
11961 (package
11962 (name "python-robotframework-requests")
11963 (version "0.9.7")
11964 (source
11965 (origin
11966 (method git-fetch) ; no tests in PyPI release
11967 (uri (git-reference
11968 (url "https://github.com/MarketSquare/robotframework-requests")
11969 (commit (string-append "v" version))))
11970 (file-name (git-file-name name version))
11971 (sha256
11972 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
11973 (build-system pyproject-build-system)
11974 (native-inputs
11975 (list python-pytest
11976 python-setuptools
11977 python-wheel))
11978 (propagated-inputs
11979 (list python-requests
11980 python-robotframework))
11981 (home-page "https://github.com/MarketSquare/robotframework-requests")
11982 (synopsis "Robot Framework keyword library wrapper around requests")
11983 (description
11984 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
11985Framework} library aimed to provide HTTP API testing functionalities by
11986wrapping the @code{requests} Python library.")
11987 (license license:expat)))
11988
11989(define-public python-pysolr
11990 (package
11991 (name "python-pysolr")
11992 (version "3.10.0")
11993 (source
11994 (origin
11995 (method url-fetch)
11996 (uri (pypi-uri "pysolr" version))
11997 (sha256
11998 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
11999 (build-system pyproject-build-system)
12000 (arguments
12001 '(#:tests? #f)) ; Tests require network access.
12002 (native-inputs
12003 (list python-setuptools
12004 python-setuptools-scm
12005 python-wheel))
12006 (propagated-inputs
12007 (list python-requests))
12008 (home-page "https://github.com/django-haystack/pysolr/")
12009 (synopsis "Lightweight python wrapper for Apache Solr")
12010 (description
12011 "This module provides an interface that queries the Apache Solr server
12012using a pure Python implementation.")
12013 (license license:bsd-3)))
12014
12015(define-public python-pyjsparser
12016 ;; XXX: This project is potentially abandonware, consider to remove in next
12017 ;; refresh cycle, see:
12018 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
12019 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
12020 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
12021 (package
12022 (name "python-pyjsparser")
12023 (version "2.7.1")
12024 (source
12025 (origin
12026 (method url-fetch)
12027 (uri (pypi-uri "pyjsparser" version))
12028 (sha256
12029 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
12030 (build-system pyproject-build-system)
12031 (arguments
12032 '(#:tests? #f)) ;no tests in PyPI
12033 (native-inputs (list python-setuptools))
12034 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
12035 (synopsis "Fast JavaScript parser")
12036 (description
12037 "This package provides a fast JavaScript parser (based on esprima.js)")
12038 (license license:expat)))
12039
12040(define-public python-js2py
12041 (package
12042 (name "python-js2py")
12043 (properties '((commit . "2e017b86e2f18a6c8a842293b1687f2ce7baa12e")
12044 (revision . "0")))
12045 (version (git-version "0.74"
12046 (assoc-ref properties 'revision)
12047 (assoc-ref properties 'commit)))
12048 (source
12049 (origin
12050 (method git-fetch)
12051 (uri (git-reference
12052 (url "https://github.com/PiotrDabkowski/Js2Py")
12053 (commit (assoc-ref properties 'commit))))
12054 (file-name (git-file-name name version))
12055 (sha256
12056 (base32 "0rsac03shkm0yxq91hzxdvhb96wy168bxdw8azi25bvlm8s3l27p"))
12057 (patches
12058 (list
12059 (origin
12060 (method url-fetch)
12061 (uri (string-append "https://github.com/PiotrDabkowski/Js2Py/commit"
12062 "/fd7df4a91fb08060914c7b1d9e94583d18f3371b"
12063 ".patch"))
12064 (file-name (string-append name "-" version "-pull-327.patch"))
12065 (sha256
12066 (base32 "14v89v8qqrsq0d63xbilkvx19l1rk59mlrbxvd4sj138lk7160ki")))))))
12067 (build-system pyproject-build-system)
12068 (arguments
12069 (list #:tests? #f)) ; tests require Node
12070 (native-inputs
12071 (list python-setuptools))
12072 (propagated-inputs
12073 (list python-pyjsparser
12074 python-six
12075 python-tzlocal))
12076 (home-page "https://github.com/PiotrDabkowski/Js2Py")
12077 (synopsis "JavaScript to Python translator")
12078 (description
12079 "This package provides a JavaScript to Python translator and a JavaScript
12080interpreter written in pure Python.")
12081 (license license:expat)))
12082
12083(define-public python-http-ece
12084 (package
12085 (name "python-http-ece")
12086 (version "1.2.1")
12087 (source
12088 (origin
12089 (method git-fetch)
12090 (uri (git-reference
12091 (url "https://github.com/web-push-libs/encrypted-content-encoding")
12092 (commit (string-append "v" version))))
12093 (file-name (git-file-name name version))
12094 (sha256
12095 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
12096 (build-system pyproject-build-system)
12097 (arguments
12098 `(#:phases
12099 (modify-phases %standard-phases
12100 (add-after 'unpack 'change-directory
12101 (lambda _ (chdir "python") #t)))))
12102 (native-inputs
12103 (list python-pytest python-setuptools))
12104 (propagated-inputs
12105 (list python-cryptography))
12106 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
12107 (synopsis "Encrypted Content Encoding for HTTP")
12108 (description
12109 "This package provides a simple implementation of Encrypted Content
12110Encoding for HTTP.")
12111 (license license:expat)))
12112
12113(define-public python-cloud-init
12114 (package
12115 (name "python-cloud-init")
12116 (version "24.2")
12117 (source
12118 (origin
12119 (method git-fetch)
12120 (uri (git-reference
12121 (url "https://github.com/canonical/cloud-init")
12122 (commit version)))
12123 (file-name (git-file-name name version))
12124 (sha256
12125 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
12126 (build-system pyproject-build-system)
12127 (arguments
12128 (list
12129 #:test-flags
12130 '(list
12131 ;; This requires usermod
12132 "--ignore=tests/unittests/distros/test_create_users.py"
12133 ;; This writes to /var
12134 "--ignore=tests/unittests/net/test_dhcp.py"
12135 "-k"
12136 (string-append
12137 ;; This test messes with PATH, so it cannot find mkdir
12138 "not test_path_env_gets_set_from_main"
12139 " and not test_apt_configure_sources_list_"
12140 ;; These all fail because /bin/sh doesn't exist. We cannot patch
12141 ;; this because the generated scripts must use /bin/sh as they are
12142 ;; supposed to be run on minimal systems.
12143 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
12144 " and not test_handler_runs_bootcmd_script_with_error"
12145 " and not test_subp_combined_stderr_stdout"
12146 " and not test_handle_part"))
12147 #:phases
12148 #~(modify-phases %standard-phases
12149 (add-after 'unpack 'patch-references
12150 (lambda _
12151 (substitute* "tests/unittests/cmd/test_clean.py"
12152 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
12153 (add-after 'install 'move-files
12154 (lambda* (#:key inputs outputs #:allow-other-keys)
12155 (for-each (lambda (dir)
12156 (let ((source (string-append (site-packages inputs outputs) "/" dir))
12157 (target (string-append #$output "/" (basename dir))))
12158 (copy-recursively source target)
12159 (delete-file-recursively source)))
12160 (list "etc" "lib" "usr/lib" "usr/share")))))))
12161 (propagated-inputs
12162 (list python-configobj
12163 python-jinja2
12164 python-jsonpatch
12165 python-jsonschema
12166 python-netifaces
12167 python-oauthlib
12168 python-pyserial
12169 python-pyyaml
12170 python-responses))
12171 (native-inputs
12172 (list procps ;for ps when running tests
12173 python-pytest
12174 python-pytest-mock
12175 python-passlib
12176 python-setuptools
12177 python-wheel))
12178 (home-page "https://github.com/canonical/cloud-init")
12179 (synopsis "Cloud instance initialization tools")
12180 (description
12181 "Cloud-init is the multi-distribution method for cross-platform cloud
12182instance initialization. It is supported across all major public cloud
12183providers, provisioning systems for private cloud infrastructure, and
12184bare-metal installations.")
12185 ;; Either license can be chosen
12186 (license (list license:asl2.0 license:gpl3))))
12187
12188(define-public python-cloudscraper
12189 (package
12190 (name "python-cloudscraper")
12191 (version "3.0.0")
12192 (source
12193 (origin
12194 (method git-fetch)
12195 (uri (git-reference
12196 (url "https://github.com/VeNoMouS/cloudscraper")
12197 (commit version)))
12198 (file-name (git-file-name name version))
12199 (sha256
12200 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
12201 (modules '((guix build utils)))
12202 (snippet
12203 '(with-directory-excursion "cloudscraper"
12204 (for-each delete-file
12205 '("captcha/9kw.py" "captcha/anticaptcha.py"))
12206 (substitute* "__init__.py"
12207 ;; Perhaps it's a joke, but don't promote proprietary software.
12208 (("([Th]is feature is not available) in the .*'" _ prefix)
12209 (string-append prefix ".'")))))))
12210 (build-system pyproject-build-system)
12211 (arguments
12212 (list
12213 #:test-flags
12214 #~(list "-k" "not test_403_handling")
12215 #:phases
12216 #~(modify-phases %standard-phases
12217 (add-after 'unpack 'relax-requirements
12218 (lambda _
12219 ;; XXX: Relax brotli dependency.
12220 (substitute* "pyproject.toml"
12221 (("\"brotli>=.*\"")
12222 "\"brotli\""))
12223 ;; XXX: Dependencies, that have not yet been packaged
12224 ;; and cause an import error when included.
12225 (delete-file "cloudscraper/interpreters/v8.py")))
12226 (add-after 'unpack 'fix-references
12227 (lambda _
12228 (substitute* "cloudscraper/interpreters/nodejs.py"
12229 (("'node'")
12230 (string-append "'" (which "node") "'"))))))))
12231 (inputs (list node-lts))
12232 (propagated-inputs
12233 (list python-pycryptodome
12234 python-brotli
12235 python-js2py
12236 python-polling2
12237 python-requests
12238 python-requests-toolbelt
12239 python-responses
12240 python-pyparsing
12241 python-websocket-client))
12242 (native-inputs (list python-pytest python-setuptools))
12243 (home-page "https://github.com/venomous/cloudscraper")
12244 (synopsis "Cloudflare anti-bot bypass")
12245 (description
12246 "This module acts as a webbrowser solving Cloudflare's Javascript
12247challenges.")
12248 (license license:expat)))
12249
12250(define-public python-imap-tools
12251 (package
12252 (name "python-imap-tools")
12253 (version "1.9.0")
12254 (source
12255 (origin
12256 (method git-fetch) ; no tests in PyPI release
12257 (uri (git-reference
12258 (url "https://github.com/ikvk/imap_tools")
12259 (commit (string-append "v" version))))
12260 (file-name (git-file-name name version))
12261 (sha256
12262 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
12263 (arguments
12264 (list
12265 #:test-flags
12266 ;; Tests require a network connection
12267 #~(list "-k" (string-append "not test_action"
12268 " and not test_attributes"
12269 " and not test_connection"
12270 " and not test_folders"
12271 " and not test_idle"
12272 " and not test_live"))))
12273 (build-system pyproject-build-system)
12274 (native-inputs
12275 (list python-pytest python-setuptools python-wheel))
12276 (home-page "https://github.com/ikvk/imap_tools")
12277 (synopsis "Work with email and mailbox by IMAP")
12278 (description
12279 "This Python library provides tools to deal with email and mailboxes
12280over IMAP:
12281
12282@itemize
12283@item Parsed email message attributes
12284@item Query builder for searching emails
12285@item Work with emails in folders (copy, delete, flag, move, seen)
12286@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
12287@end itemize")
12288 (license license:asl2.0)))
12289
12290(define-public python-giturlparse
12291 (package
12292 (name "python-giturlparse")
12293 (version "0.12.0")
12294 (source
12295 (origin
12296 (method git-fetch)
12297 (uri (git-reference
12298 (url "https://github.com/nephila/giturlparse")
12299 (commit version)))
12300 (file-name (git-file-name name version))
12301 (sha256
12302 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
12303 (build-system pyproject-build-system)
12304 (native-inputs (list python-pytest python-setuptools))
12305 (home-page "https://github.com/nephila/giturlparse")
12306 (synopsis "Git URL parsing module")
12307 (description
12308 "This package provides a git URL parsing module which supports parsing
12309and rewriting of remote git URLs from various hosting providers.")
12310 (license license:asl2.0)))
12311
12312(define-public python-hstspreload
12313 (package
12314 (name "python-hstspreload")
12315 (version "2025.1.1")
12316 (source
12317 (origin
12318 (method git-fetch)
12319 (uri (git-reference
12320 (url "https://github.com/sethmlarson/hstspreload")
12321 (commit version)))
12322 (file-name (git-file-name name version))
12323 (sha256
12324 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
12325 (build-system pyproject-build-system)
12326 (arguments (list #:tests? #f)) ; tests require external resources.
12327 (native-inputs (list python-setuptools))
12328 (home-page "https://github.com/sethmlarson/hstspreload")
12329 (synopsis "Chromium HSTS Preload list as a Python package")
12330 (description
12331 "@code{python-hstspreload} contains Chromium HSTS Preload list
12332as a Python package.")
12333 (license license:bsd-3)))
12334
12335(define-public python-sanic-routing
12336 (package
12337 (name "python-sanic-routing")
12338 (version "23.12.0")
12339 (source
12340 (origin
12341 (method url-fetch)
12342 (uri (pypi-uri "sanic-routing" version))
12343 (sha256
12344 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
12345 (build-system pyproject-build-system)
12346 (arguments
12347 ;; PyPi sources does not contain tests, recursive dependency on
12348 ;; python-sanic.
12349 (list #:tests? #f))
12350 (native-inputs (list python-setuptools python-wheel))
12351 (home-page "https://github.com/sanic-org/sanic-routing/")
12352 (synopsis "Routing component for Sanic")
12353 (description "Internal package for @code{python-sanic}, which provides
12354the @code{BasicRouter}.")
12355 (license license:expat)))
12356
12357(define-public python-sanic-testing
12358 (package
12359 (name "python-sanic-testing")
12360 (version "23.12.0")
12361 (source
12362 (origin
12363 (method url-fetch)
12364 (uri (pypi-uri "sanic-testing" version))
12365 (sha256
12366 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
12367 (build-system pyproject-build-system)
12368 (arguments
12369 ;; PyPi sources does not contain tests, recursive dependency on
12370 ;; python-sanic.
12371 (list #:tests? #f))
12372 (propagated-inputs (list python-httpx python-sanic-bootstrap))
12373 (native-inputs (list python-setuptools python-wheel))
12374 (home-page "https://github.com/sanic-org/sanic-testing/")
12375 (synopsis "Test clients for Sanic")
12376 (description "Internal package for @code{python-sanic}, which is
12377meant to be the core testing utility and clients for testing Sanic
12378applications.")
12379 (license license:expat)))
12380
12381(define-public python-sanic
12382 (package
12383 (name "python-sanic")
12384 (version "25.3.0")
12385 (source
12386 (origin
12387 (method url-fetch)
12388 (uri (pypi-uri "sanic" version))
12389 (sha256
12390 (base32 "1fv9wgsj54scbr7qhmwdgc4zqnqpwacpakcfxhsg10gc04h54pbp"))
12391 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
12392 (modules '((guix build utils)))
12393 (snippet #~(substitute* "setup.py"
12394 (("setuptools>=[0-9.]*")
12395 "setuptools")))))
12396 (build-system pyproject-build-system)
12397 (arguments
12398 (list
12399 #:test-flags
12400 #~(list "--asyncio-mode=auto"
12401 "--ignore=tests/benchmark/"
12402 "--ignore=tests/typing/test_typing.py"
12403 ;; Most tests hang or fail
12404 "--ignore=tests/test_cli.py"
12405 "--ignore=tests/worker/test_worker_serve.py"
12406 "-k"
12407 (string-append
12408 ;; PyPi sources lack examples module.
12409 "not test_gunicorn_"
12410 ;; Does not expect brotli and reordered headers.
12411 " and not test_raw_headers"
12412 ;; These look like buggy testcases.
12413 " and not test_zero_downtime"
12414 " and not test_non_default_uvloop_config_raises_warning"
12415 " and not test_listeners_triggered"
12416 " and not test_keep_alive_connection_context"
12417 " and not test_keep_alive_client_timeout"
12418 " and not test_conflicting_body_methods_overload"
12419 " and not test_unix_connection"
12420 ;; Unclear why they fail since core-updates merge.
12421 " and not test_missing_sni"
12422 " and not test_no_matching_cert"
12423 " and not test_wildcards"
12424 ;; These tests fail because subprotocols appear to be
12425 ;; parameterized as None
12426 " and not test_websocket_route_with_subprotocols"
12427 ;; AF_UNIX path too long
12428 " and not test_setup_and_teardown_unix"
12429 " and not test_configure_socket"
12430 ;; Freezes
12431 " and not test_server_run_with_repl"
12432 " and not test_server_run"
12433 " and not test_no_workers"))))
12434 (propagated-inputs
12435 (list python-aiofiles
12436 python-aioquic
12437 python-html5tagger
12438 python-httptools
12439 python-multidict
12440 python-sanic-routing
12441 python-tracerite
12442 python-typing-extensions
12443 python-ujson
12444 python-uvloop
12445 python-websockets))
12446 (native-inputs
12447 (list python-beautifulsoup4
12448 python-chardet
12449 python-cryptography
12450 python-docutils
12451 python-mypy
12452 python-pygments
12453 python-pytest
12454 python-pytest-asyncio
12455 python-pytest-benchmark
12456 python-pytest-sanic
12457 python-sanic-testing
12458 python-setuptools
12459 python-slotscheck
12460 python-towncrier
12461 python-types-ujson
12462 python-uvicorn
12463 python-wheel))
12464 (home-page "https://github.com/sanic-org/sanic/")
12465 (synopsis "Async Python web server/framework")
12466 (description
12467 "Sanic is a Python web server and web framework that's written to go
12468fast. It allows the usage of the @code{async/await} syntax added in Python
124693.5, which makes your code non-blocking and speedy.")
12470 (license license:expat)))
12471
12472(define-public python-sanic-bootstrap
12473 (package
12474 (inherit python-sanic)
12475 (name "python-sanic-bootstrap")
12476 (arguments (list #:tests? #f))
12477 (native-inputs (list python-setuptools python-wheel))))
12478
12479(define-public python-socketio
12480 (package
12481 (name "python-socketio")
12482 (version "5.12.1")
12483 (source
12484 (origin
12485 (method url-fetch)
12486 (uri (pypi-uri "python_socketio" version))
12487 (sha256
12488 (base32
12489 "175sd3fdld3s477i6b3v49yhf1alsbm1vaxzq44nqrqb8wgzz682"))))
12490 (build-system pyproject-build-system)
12491 (arguments
12492 (list #:test-flags
12493 '(list "--timeout=60"
12494 ;; These tests freeze.
12495 "--ignore-glob=tests/async/*")))
12496 (propagated-inputs
12497 (list python-bidict python-engineio python-msgpack))
12498 (native-inputs
12499 (list python-pytest
12500 python-pytest-asyncio
12501 python-pytest-timeout
12502 python-setuptools
12503 python-uvicorn
12504 python-wheel))
12505 (home-page "https://github.com/miguelgrinberg/python-socketio/")
12506 (synopsis "Python Socket.IO server")
12507 (description
12508 "This package provides a Python implementation of the @code{Socket.IO}
12509realtime client and server.")
12510 (license license:expat)))
12511
12512(define-public python-socks
12513 (package
12514 (name "python-socks")
12515 (version "2.8.1")
12516 (source
12517 (origin
12518 (method git-fetch)
12519 (uri (git-reference
12520 (url "https://github.com/romis2012/python-socks")
12521 (commit (string-append "v" version))))
12522 (file-name (git-file-name name version))
12523 (sha256
12524 (base32 "1x95i9w3izivdgz6hadh5kiil12i4ljk4ashgh3g0rjv2rw33vhj"))))
12525 (build-system pyproject-build-system)
12526 (propagated-inputs (list python-trio))
12527 (native-inputs
12528 (list python-anyio
12529 python-flask
12530 python-pytest
12531 python-pytest-asyncio
12532 python-pytest-trio
12533 python-setuptools
12534 python-tiny-proxy
12535 python-trustme
12536 python-yarl))
12537 (home-page "https://github.com/romis2012/python-socks")
12538 (synopsis
12539 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
12540 (description
12541 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
12542 functionality.")
12543 (license license:asl2.0)))
12544
12545(define-public python-socksio
12546 (package
12547 (name "python-socksio")
12548 (version "1.0.0")
12549 (source
12550 (origin
12551 (method url-fetch)
12552 (uri (pypi-uri "socksio" version))
12553 (sha256
12554 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
12555 (build-system pyproject-build-system)
12556 (native-inputs
12557 (list python-flit-core python-pytest))
12558 (home-page "https://github.com/sethmlarson/socksio")
12559 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
12560 (description "The @code{socksio} Python module is a client-side sans-I/O
12561SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
12562@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
12563means the library itself does not handle the actual sending of the bytes
12564through the network, it only deals with the implementation details of the
12565SOCKS protocols. It can be paired with any I/O library.")
12566 (license license:expat)))
12567
12568(define-public python-simple-websocket
12569 (package
12570 (name "python-simple-websocket")
12571 (version "1.1.0")
12572 (source
12573 (origin
12574 (method url-fetch)
12575 (uri (pypi-uri "simple_websocket" version))
12576 (sha256
12577 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
12578 (build-system pyproject-build-system)
12579 (arguments
12580 ;; Requires Internet access to resolve example.com
12581 (list #:test-flags '(list "--ignore=tests/test_client.py")))
12582 (propagated-inputs (list python-wsproto))
12583 (native-inputs (list python-pytest
12584 python-setuptools))
12585 (home-page "https://github.com/miguelgrinberg/simple-websocket")
12586 (synopsis "Simple WebSocket server and client for Python")
12587 (description "This package provides a simple @code{WebSocket} server and
12588client for Python.")
12589 (license license:expat)))
12590
12591(define-public python-siosocks
12592 (package
12593 (name "python-siosocks")
12594 (version "0.3.0")
12595 (source
12596 (origin
12597 (method git-fetch)
12598 (uri (git-reference
12599 (url "https://github.com/pohmelie/siosocks")
12600 (commit (string-append "v" version))))
12601 (file-name (git-file-name name version))
12602 (sha256
12603 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
12604 (build-system pyproject-build-system)
12605 (native-inputs
12606 (list python-pytest
12607 python-pytest-asyncio
12608 python-pytest-trio
12609 python-setuptools))
12610 (propagated-inputs (list python-trio))
12611 (home-page "https://github.com/pohmelie/siosocks")
12612 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
12613 (description
12614 "This package provides a Python module and framework for sans-io socks proxy
12615client/server with couple io backends.
12616
12617Features:
12618@itemize
12619@item Only TCP connect (no BIND, no UDP)
12620@item Both client and server
12621@item SOCKS versions: 4, 4a, 5
12622@item SOCKSv5 auth: no auth, username/password
12623@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
12624@item One-shot socks server (@code{python -m siosocks})
12625@end itemize")
12626 (license license:expat)))
12627
12628(define-public python-tiny-proxy
12629 (package
12630 (name "python-tiny-proxy")
12631 (version "0.2.1")
12632 (source
12633 (origin
12634 (method url-fetch)
12635 (uri (pypi-uri "tiny_proxy" version))
12636 (sha256
12637 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
12638 (build-system pyproject-build-system)
12639 ;; There are only a handful of tests and they require the as yet
12640 ;; unpackaged httpx_socks.
12641 (arguments (list #:tests? #false))
12642 (propagated-inputs (list python-anyio))
12643 (native-inputs
12644 (list python-httpx
12645 python-pytest
12646 python-setuptools
12647 python-wheel))
12648 (home-page "https://github.com/romis2012/tiny-proxy")
12649 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
12650 (description "This package provides a simple proxy server (SOCKS4(a),
12651SOCKS5(h), HTTP tunnel).")
12652 (license license:asl2.0)))
12653
12654(define-public python-azure-nspkg
12655 (package
12656 (name "python-azure-nspkg")
12657 (version "3.0.2")
12658 (source
12659 (origin
12660 (method url-fetch)
12661 (uri (pypi-uri "azure-nspkg" version ".zip"))
12662 (sha256
12663 (base32
12664 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
12665 (build-system pyproject-build-system)
12666 (arguments (list #:tests? #f)) ;no tests in package
12667 (native-inputs (list unzip python-setuptools))
12668 (home-page "https://github.com/Azure/azure-sdk-for-python")
12669 (synopsis "Azure namespace internals")
12670 (description
12671 "This package is an internal Azure namespace package.")
12672 (license license:expat)))
12673
12674(define-public python-azure-storage-nspkg
12675 (package
12676 (name "python-azure-storage-nspkg")
12677 (version "3.1.0")
12678 (source
12679 (origin
12680 (method url-fetch)
12681 (uri (pypi-uri "azure-storage-nspkg" version))
12682 (sha256
12683 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
12684 (build-system pyproject-build-system)
12685 (arguments
12686 (list #:tests? #f)) ;no tests in PyPI archive
12687 (native-inputs (list python-setuptools))
12688 (propagated-inputs (list python-azure-nspkg))
12689 (home-page "https://github.com/Azure/azure-storage-python")
12690 (synopsis "Microsoft Azure Storage Namespace package")
12691 (description
12692 "This project provides a client library in Python that makes it easy to
12693communicate with Microsoft Azure Storage services.")
12694 (license license:expat)))
12695
12696(define-public python-azure-common
12697 (package
12698 (name "python-azure-common")
12699 (version "1.1.28")
12700 (source
12701 (origin
12702 (method url-fetch)
12703 (uri (pypi-uri "azure-common" version ".zip"))
12704 (sha256
12705 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
12706 (build-system pyproject-build-system)
12707 (arguments
12708 (list #:tests? #f)) ;no tests in PyPI archive
12709 (propagated-inputs (list python-azure-nspkg))
12710 (native-inputs (list python-setuptools unzip))
12711 (home-page "https://github.com/Azure/azure-sdk-for-python")
12712 (synopsis "Microsoft Azure Client library for Python")
12713 (description "This package provides the Microsoft Azure Client library for
12714Python.")
12715 (license license:expat)))
12716
12717(define-public python-azure-core
12718 (package
12719 (name "python-azure-core")
12720 (version "1.32.0")
12721 (source
12722 (origin
12723 (method url-fetch)
12724 (uri (pypi-uri "azure_core" version))
12725 (sha256
12726 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
12727 (build-system pyproject-build-system)
12728 (arguments
12729 (list
12730 #:test-flags
12731 `(list ;; This fails because devtools_testutils doesn't exist.
12732 "--ignore=tests/test_connection_string_parsing.py"
12733 ;; These all need network access.
12734 "--ignore=samples"
12735 "--ignore=tests/async_tests/test_streaming_async.py"
12736 "--ignore=tests/test_streaming.py"
12737 "-m" "not asyncio and not live_test_only"
12738 "-k" ,(string-append
12739 "not test_decompress_plain_no_header"
12740 " and not test_compress_plain_no_header"
12741 " and not test_decompress_compressed_no_header"
12742 " and not test_requests_socket_timeout"))
12743 #:phases
12744 #~(modify-phases %standard-phases
12745 (add-before 'check 'add-test-pythonpath
12746 (lambda* (#:key tests? #:allow-other-keys)
12747 (when tests?
12748 (setenv "PYTHONPATH"
12749 (string-append
12750 (getcwd) "/tests/testserver_tests/coretestserver:"
12751 (getenv "GUIX_PYTHONPATH")))))))))
12752 (propagated-inputs
12753 (list python-aiohttp
12754 python-requests
12755 python-six
12756 python-typing-extensions))
12757 (native-inputs
12758 (list python-flask
12759 python-pytest-8
12760 python-pytest-aiohttp
12761 python-pytest-asyncio
12762 python-pytest-trio
12763 python-setuptools
12764 python-wheel))
12765 (home-page "https://github.com/Azure/azure-sdk-for-python")
12766 (synopsis "Microsoft Azure Core library for Python")
12767 (description "This package provides the Microsoft Azure Core library for
12768Python.")
12769 (license license:expat)))
12770
12771(define-public python-azure-storage-blob
12772 (package
12773 (name "python-azure-storage-blob")
12774 (version "12.27.0")
12775 (source
12776 (origin
12777 (method url-fetch)
12778 (uri (pypi-uri "azure_storage_blob" version))
12779 (sha256
12780 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
12781 (build-system pyproject-build-system)
12782 (arguments
12783 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12784 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12785 ;; it hard to package in Guix.
12786 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12787 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12788 (list #:tests? #f))
12789 (native-inputs
12790 (list python-setuptools))
12791 (propagated-inputs
12792 (list python-azure-core
12793 python-cryptography
12794 python-isodate
12795 python-typing-extensions))
12796 (home-page "https://github.com/Azure/azure-sdk-for-python/")
12797 (synopsis "Microsoft Azure Blob Storage client library for Python")
12798 (description "This package provides the Microsoft Azure Blob Storage
12799Client Library for Python.")
12800 (license license:expat)))
12801
12802(define-public python-azure-storage-file-datalake
12803 (package
12804 (name "python-azure-storage-file-datalake")
12805 (version "12.22.0")
12806 (source
12807 (origin
12808 (method url-fetch)
12809 (uri (pypi-uri "azure_storage_file_datalake" version))
12810 (sha256
12811 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
12812 (build-system pyproject-build-system)
12813 (arguments
12814 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12815 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12816 ;; it hard to package in Guix.
12817 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12818 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12819 (list #:tests? #f))
12820 (native-inputs
12821 (list python-setuptools))
12822 (propagated-inputs
12823 (list python-azure-core
12824 python-azure-storage-blob
12825 python-isodate
12826 python-typing-extensions))
12827 (home-page "https://github.com/Azure/azure-sdk-for-python")
12828 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
12829 (description
12830 "This package provides the Microsoft Azure File @code{DataLake} Storage
12831Client Library for Python.")
12832 (license license:expat)))
12833
12834(define-public python-google-auth
12835 (package
12836 (name "python-google-auth")
12837 (version "2.48.0")
12838 (source
12839 (origin
12840 (method url-fetch)
12841 (uri (pypi-uri "google_auth" version))
12842 (sha256
12843 (base32 "1kj1r3vp2jk2wv1mc0a5lpdnsivsqciah68ajhyql86k1imp0zjg"))))
12844 (build-system pyproject-build-system)
12845 (arguments
12846 (list
12847 #:test-flags
12848 ;; This one test uses crypto.sign with an outdated calling convention.
12849 '(list "--ignore=tests/transport/test__mtls_helper.py")))
12850 (propagated-inputs
12851 (list python-aiohttp
12852 python-cryptography
12853 python-pyasn1-modules
12854 python-requests
12855 python-rsa
12856 python-urllib3))
12857 (native-inputs
12858 (list nss-certs-for-test
12859 python-aiohttp
12860 python-aioresponses
12861 python-flask
12862 python-freezegun
12863 python-grpcio
12864 python-oauth2client
12865 python-packaging
12866 python-pyjwt
12867 python-pyopenssl
12868 python-pytest
12869 python-pytest-asyncio
12870 python-pytest-localserver
12871 python-pyu2f
12872 python-requests
12873 python-responses
12874 python-rsa
12875 python-setuptools
12876 python-urllib3))
12877 (home-page "https://github.com/googleapis/google-auth-library-python")
12878 (synopsis "Google Authentication Library")
12879 (description "This library simplifies using Google's various
12880server-to-server authentication mechanisms to access Google APIs.")
12881 (license license:asl2.0)))
12882
12883(define-public python-google-resumable-media
12884 (package
12885 (name "python-google-resumable-media")
12886 (version "2.8.0")
12887 (source
12888 (origin
12889 (method git-fetch)
12890 (uri (git-reference
12891 (url
12892 "https://github.com/googleapis/google-resumable-media-python")
12893 (commit (string-append "v" version))))
12894 (file-name (git-file-name name version))
12895 (sha256
12896 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
12897 (build-system pyproject-build-system)
12898 (arguments
12899 (list
12900 #:test-flags
12901 #~(list
12902 ;; XXX: Missing test_utils.retry.
12903 "--ignore-glob=tests*/system/"
12904 ;; XXX: md5_hash is not mock.sentinel.md5_hash
12905 "-k" (string-join
12906 (list "not test_brotli"
12907 "test_constructor"
12908 "test_decompress")
12909 " and not "))))
12910 (propagated-inputs (list python-google-crc32c))
12911 (native-inputs
12912 (list python-google-auth
12913 python-mock
12914 python-pytest
12915 python-pytest-asyncio
12916 python-setuptools
12917 python-test-utils))
12918 (home-page "https://github.com/googleapis/google-resumable-media-python")
12919 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
12920 (description "This package provides utilities for Google Media Downloads
12921and Resumable Uploads.")
12922 (license license:asl2.0)))
12923
12924(define-public python-googleapis-common-protos
12925 (package
12926 (name "python-googleapis-common-protos")
12927 (version "1.66.0")
12928 (source
12929 (origin
12930 (method git-fetch)
12931 (uri (git-reference
12932 (url "https://github.com/googleapis/python-api-common-protos")
12933 (commit (string-append "v" version))))
12934 (file-name (git-file-name name version))
12935 (sha256
12936 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
12937 (build-system pyproject-build-system)
12938 (propagated-inputs (list python-protobuf))
12939 (native-inputs (list python-pytest python-setuptools))
12940 (home-page "https://github.com/googleapis/python-api-common-protos")
12941 (synopsis "Common protobufs used in Google APIs")
12942 (description
12943 "This package contains Python classes generated from the common protos in
12944the @code{googleapis/api-common-protos} repository.")
12945 (license license:asl2.0)))
12946
12947(define-public python-google-api-core
12948 (package
12949 (name "python-google-api-core")
12950 (version "2.29.0")
12951 (source
12952 (origin
12953 (method git-fetch)
12954 (uri (git-reference
12955 (url "https://github.com/googleapis/python-api-core")
12956 (commit (string-append "v" version))))
12957 (file-name (git-file-name name version))
12958 (sha256
12959 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
12960 (build-system pyproject-build-system)
12961 (arguments
12962 (list
12963 #:test-flags
12964 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
12965 ;; deprecated and scheduled for removal in a future version. Use
12966 ;; timezone-aware objects to represent datetimes in UTC:
12967 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
12968 #~(list "-W" "ignore::DeprecationWarning")))
12969 (propagated-inputs
12970 (list python-google-auth
12971 python-googleapis-common-protos
12972 python-protobuf
12973 python-proto-plus
12974 python-requests))
12975 (native-inputs
12976 (list python-mock
12977 python-pytest
12978 python-pytest-asyncio
12979 python-pytest-mock
12980 python-setuptools))
12981 (home-page "https://github.com/googleapis/python-api-core")
12982 (synopsis "Google API client core library")
12983 (description
12984 "This library defines common helpers used by all Google API clients.")
12985 (license license:asl2.0)))
12986
12987(define-public python-google-cloud-core
12988 (package
12989 (name "python-google-cloud-core")
12990 (version "2.5.0")
12991 (source
12992 (origin
12993 (method git-fetch)
12994 (uri (git-reference
12995 (url "https://github.com/googleapis/python-cloud-core")
12996 (commit (string-append "v" version))))
12997 (file-name (git-file-name name version))
12998 (sha256
12999 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
13000 (build-system pyproject-build-system)
13001 (arguments
13002 (list
13003 #:test-flags
13004 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13005 ;; deprecated and scheduled for removal in a future version. Use
13006 ;; timezone-aware objects to represent datetimes in UTC:
13007 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13008 #~(list "-W" "ignore::DeprecationWarning")))
13009 (propagated-inputs (list python-google-api-core python-google-auth))
13010 (native-inputs
13011 (list python-grpcio
13012 python-grpcio-status
13013 python-pytest
13014 python-setuptools))
13015 (home-page "https://github.com/googleapis/python-cloud-core")
13016 (synopsis "Google Cloud API client core library")
13017 (description
13018 "This library defines common helpers (e.g. base @code{Client} classes)
13019used by all of the @code{google-cloud-*} packages.")
13020 (license license:asl2.0)))
13021
13022(define-public python-google-cloud-storage
13023 (package
13024 (name "python-google-cloud-storage")
13025 (version "2.19.0")
13026 (source
13027 (origin
13028 (method git-fetch)
13029 (uri (git-reference
13030 (url "https://github.com/googleapis/python-storage")
13031 (commit (string-append "v" version))))
13032 (file-name (git-file-name name version))
13033 (sha256
13034 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
13035 (build-system pyproject-build-system)
13036 (arguments
13037 (list
13038 #:test-flags
13039 #~(list
13040 ;; XXX: Missing test_utils.retry.
13041 "--ignore=tests/system/"
13042 ;; Needs docker.
13043 "--ignore=tests/conformance/"
13044 ;; XXX: Deprecations.
13045 "-k" (string-join
13046 (list "not test_set_api_request_attr"
13047 "test_create_bucket_w_custom_endpoint"
13048 "test_ctor_w_api_endpoint_override"
13049 "test_ctor_w_custom_endpoint_use_auth"
13050 "test_list_buckets_w_custom_endpoint")
13051 " and not ")
13052 "tests")))
13053 (native-inputs
13054 (list python-googleapis-common-protos
13055 python-mock
13056 python-pytest
13057 python-test-utils
13058 python-setuptools))
13059 (propagated-inputs
13060 (list python-google-api-core
13061 python-google-auth
13062 python-google-cloud-core
13063 python-google-resumable-media
13064 python-protobuf
13065 python-requests))
13066 (home-page "https://github.com/googleapis/python-storage")
13067 (synopsis "Google Cloud Storage API client library")
13068 (description
13069 "Google Cloud Storage allows you to store data on Google infrastructure,
13070and it can be used to distribute large data objects to users via direct
13071download. This package provides a Google Cloud Storage API client library for
13072Python.")
13073 (license license:asl2.0)))
13074
13075(define-public python-smart-open
13076 (package
13077 (name "python-smart-open")
13078 (version "7.3.0")
13079 (source
13080 (origin
13081 (method git-fetch) ;no tests in PyPI archive
13082 (uri (git-reference
13083 (url "https://github.com/piskvorky/smart_open")
13084 (commit (string-append "v" version))))
13085 (file-name (git-file-name name version))
13086 (sha256
13087 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
13088 (build-system pyproject-build-system)
13089 (arguments
13090 (list
13091 #:test-flags
13092 #~(list "--ignore=ci_helpers/"
13093 "--ignore=integration-tests/"
13094 ;; FIXME: Enable when guix/guix#1436 is resolved.
13095 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
13096 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
13097 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
13098 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
13099 "--ignore=tests/test_gcs.py")))
13100 (propagated-inputs
13101 (list python-azure-common
13102 python-azure-core
13103 python-azure-storage-blob
13104 python-boto3
13105 ;; python-google-cloud-storage ;see guix/guix#1436
13106 python-paramiko
13107 python-requests
13108 python-wrapt
13109 python-zstandard))
13110 (native-inputs
13111 (list python-numpy
13112 python-moto
13113 python-pytest
13114 python-pytest-rerunfailures
13115 python-responses
13116 python-setuptools
13117 python-setuptools-scm
13118 python-wheel))
13119 (home-page "https://github.com/piskvorky/smart_open")
13120 (synopsis "Utilities for streaming large files")
13121 (description
13122 "This package provides utilities for streaming large files (S3, HDFS,
13123GCS, Azure Blob Storage, gzip, bz2, etc.)")
13124 (license license:expat)))
13125
13126(define-public python-smart-open-6
13127 (package
13128 (inherit python-smart-open)
13129 (name "python-smart-open")
13130 (version "6.4.0")
13131 (source
13132 (origin
13133 (method git-fetch)
13134 (uri (git-reference
13135 (url "https://github.com/piskvorky/smart_open")
13136 (commit (string-append "v" version))))
13137 (file-name (git-file-name name version))
13138 (sha256
13139 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
13140 (arguments
13141 (list
13142 ;; XXX: Tests need some older native inputs, disable for now.
13143 #:tests? #f))))
13144
13145(define-public python-w3lib
13146 (package
13147 (name "python-w3lib")
13148 (version "2.3.1")
13149 (source
13150 (origin
13151 (method url-fetch)
13152 (uri (pypi-uri "w3lib" version))
13153 (sha256
13154 (base32
13155 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
13156 (build-system pyproject-build-system)
13157 (native-inputs
13158 (list python-pytest python-setuptools python-wheel))
13159 (home-page "https://github.com/scrapy/w3lib")
13160 (synopsis "Python library of web-related functions")
13161 (description
13162 "This is a Python library of web-related functions, such as: remove
13163comments, or tags from HTML snippets, extract base url from HTML snippets,
13164translate entities on HTML strings, among other things.")
13165 (license license:bsd-3)))
13166
13167(define-public python-webcolors
13168 (package
13169 (name "python-webcolors")
13170 (version "24.11.1")
13171 (source
13172 (origin
13173 (method url-fetch)
13174 (uri (pypi-uri "webcolors" version))
13175 (sha256
13176 (base32 "1xl0vn4xa03vjwx6fj19q9kgb94g65gvdf3p0ivsy0i2ydldgczc"))))
13177 (build-system pyproject-build-system)
13178 (arguments
13179 (list
13180 #:phases
13181 '(modify-phases %standard-phases
13182 (add-after 'unpack 'patch-pyproject
13183 (lambda _
13184 ;; XXX Our version of python-pdm-backend does not recognize
13185 ;; "dependency-groups", but is fine with the bogus
13186 ;; "tool.whatever".
13187 (substitute* "pyproject.toml"
13188 (("\\[dependency-groups\\]") "[tool.whatever]")))))))
13189 (native-inputs
13190 (list python-pdm-backend python-pytest))
13191 (home-page "https://github.com/ubernostrum/webcolors")
13192 (synopsis "HTML/CSS color definitions library")
13193 (description "@code{python-webcolors} is a module for working with
13194HTML/CSS color definitions. Normalizing and converting between the following
13195formats is supported.
13196@itemize
13197@item Specification-defined color names
13198@item Six-digit hexadecimal
13199@item Three-digit hexadecimal
13200@item Integer rgb() triplet
13201@item Percentage rgb() triplet
13202@end itemize
13203Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
13204can be handled by the @code{colorsys} module in the Python standard library.")
13205 (license license:bsd-3)))
13206
13207(define-public python-woob
13208 ;; TODO: woob requires backends which are currently installed on the fly in
13209 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
13210 ;; them in the store instead. Many modules are included in the modules
13211 ;; directory in the source tree, but it is unclear how to install them.
13212 ;; Many modules require extra dependencies though, so maybe they should be
13213 ;; packaged independently of woob itself.
13214 (package
13215 (name "python-woob")
13216 (version "3.7")
13217 (source
13218 (origin
13219 (method git-fetch)
13220 (uri (git-reference
13221 (url "https://gitlab.com/woob/woob.git")
13222 (commit version)))
13223 (file-name (git-file-name name version))
13224 (sha256
13225 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
13226 (build-system pyproject-build-system)
13227 (arguments
13228 (list
13229 #:test-flags
13230 ;; Deselect tests that require DNS lookup.
13231 #~(list
13232 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
13233 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
13234 #:phases
13235 #~(modify-phases %standard-phases
13236 (add-before 'build 'relax-requirements
13237 (lambda _
13238 (substitute* "pyproject.toml"
13239 ;; packaging ~= 23.0
13240 (("\"packaging .*\",")
13241 "")
13242 ;; rich~=13.0
13243 (("\"rich .*\",")
13244 "\"rich\",")))))))
13245 (native-inputs
13246 (list nss-certs-for-test
13247 python-pytest
13248 python-setuptools))
13249 (propagated-inputs
13250 (list python-babel
13251 python-colorama
13252 python-cssselect
13253 python-dateutil
13254 python-feedparser
13255 python-html2text
13256 python-lxml
13257 python-packaging
13258 python-pillow
13259 python-prettytable
13260 python-pycountry
13261 python-pyyaml
13262 python-requests
13263 python-responses
13264 python-rich
13265 python-termcolor
13266 python-unidecode))
13267 (home-page "https://woob.tech/")
13268 (synopsis "Woob, Web Outside Of Browsers")
13269 (description
13270 "Woob is a collection of applications able to interact with
13271websites, without requiring the user to open them in a browser. It also
13272provides well-defined APIs to talk to websites lacking one.")
13273 (license license:lgpl3+)))
13274
13275(define-public python-flask-combo-jsonapi
13276 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
13277 (revision "0"))
13278 (package
13279 (name "python-flask-combo-jsonapi")
13280 (version (git-version "1.1.0" revision commit))
13281 (source
13282 (origin
13283 (method git-fetch)
13284 (uri (git-reference
13285 (url "https://github.com/AdCombo/flask-combo-jsonapi")
13286 (commit commit)))
13287 (file-name (git-file-name name version))
13288 (sha256
13289 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
13290 (build-system pyproject-build-system)
13291 (arguments
13292 (list
13293 #:test-flags
13294 #~(list
13295 "-k"
13296 (string-join
13297 (list
13298 ;; XXX: This tests a feature that doesn't make sense when dropping
13299 ;; marshmallow < 3 support.
13300 "not test_compute_schema_propagate_context"
13301 ;; The following tests fail for unknown reasons (see:
13302 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
13303 "test_get_list_with_simple_filter_relationship_custom_qs_api"
13304 "test_get_list_with_simple_filter_relationship_error")
13305 " and not "))
13306 #:phases
13307 #~(modify-phases %standard-phases
13308 (add-after 'unpack 'loosen-requirements
13309 (lambda _
13310 ;; Don't pin specific versions of dependencies.
13311 (substitute* "requirements.txt"
13312 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
13313 (string-append dep "\n"))
13314 (("^marshmallow_jsonapi[=<>].*")
13315 "marshmallow_jsonapi_minfork\n"))
13316 ;; Drop support for marshmallow < 3.
13317 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
13318 "flask_combo_jsonapi/schema.py")
13319 (("from marshmallow\\.base import SchemaABC")
13320 "from marshmallow import Schema")
13321 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
13322 "if isinstance(related_schema_cls, Schema):"))
13323 (substitute* "tests/test_sqlalchemy_data_layer.py"
13324 (("default=None")
13325 "dump_default=None")
13326 (("missing=")
13327 "load_default=")))))))
13328 (propagated-inputs
13329 (list python-flask
13330 python-marshmallow
13331 python-marshmallow-jsonapi
13332 python-simplejson
13333 python-sqlalchemy
13334 python-apispec
13335 python-simplejson
13336 python-six))
13337 (native-inputs
13338 (list python-pytest python-setuptools))
13339 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
13340 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
13341 (description
13342 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
13343APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
13344specification.
13345
13346It tries to combine the power of Flask-Restless with the flexibility of
13347Flask-RESTful to quickly build APIs that fit the complexity of existing
13348real-life projects with legacy data and diverse storage providers.")
13349 (license license:expat))))
13350
13351(define-public python-mwparserfromhell
13352 (package
13353 (name "python-mwparserfromhell")
13354 (version "0.7.2")
13355 (source
13356 (origin
13357 (method git-fetch)
13358 (uri (git-reference
13359 (url "https://github.com/earwig/mwparserfromhell")
13360 (commit (string-append "v" version))))
13361 (file-name (git-file-name name version))
13362 (sha256
13363 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
13364 (build-system pyproject-build-system)
13365 (native-inputs (list python-pytest python-setuptools))
13366 (home-page "https://github.com/earwig/mwparserfromhell")
13367 (synopsis "Python parser for MediaWiki wikicode")
13368 (description
13369 "The MediaWiki Parser From Hell is a python library package that provides
13370a parser for MediaWiki.
13371
13372It exposes parses as normal string objects with additional methods giving
13373access to the special Wikicode features it contains (hyperlinks, tags,
13374templates…). The parser doesn't interpolate strings at all, it remains at a
13375purely formal level.
13376
13377Full documentation may be found at
13378@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
13379 (license license:expat)))
13380
13381(define-public python-tweepy
13382 (package
13383 (name "python-tweepy")
13384 (version "4.16.0")
13385 (source
13386 (origin
13387 (method git-fetch)
13388 (uri
13389 (git-reference
13390 (url "https://github.com/tweepy/tweepy")
13391 (commit (string-append "v" version))))
13392 (file-name (git-file-name name version))
13393 (sha256
13394 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
13395 (build-system pyproject-build-system)
13396 (arguments
13397 ;; tests: 149 passed, 3 skipped, 1 warning
13398 (list #:test-backend #~'unittest
13399 #:test-flags #~(list "discover" "tests")))
13400 (native-inputs
13401 (list nss-certs-for-test
13402 python-flit-core
13403 python-urllib3-1.26
13404 python-vcrpy))
13405 (propagated-inputs
13406 (list python-aiohttp
13407 python-async-lru
13408 python-oauthlib
13409 python-requests
13410 python-requests-oauthlib))
13411 (home-page "https://www.tweepy.org/")
13412 (synopsis "Twitter library for Python")
13413 (description
13414 "This package provides @code{Tweepy}, an easy-to-use Python library for
13415accessing the Twitter API.")
13416 (license license:expat)))
13417
13418(define-public python-quart
13419 (package
13420 (name "python-quart")
13421 (version "0.19.9")
13422 (source
13423 (origin
13424 (method git-fetch) ; no tests in PyPI release
13425 (uri (git-reference
13426 (url "https://github.com/pallets/quart")
13427 (commit version)))
13428 (file-name (git-file-name name version))
13429 (sha256
13430 (base32 "1h5ifv8g9dc9m07vj4v7dfalam83v38545d845vvgys1gan1pscd"))))
13431 (build-system pyproject-build-system)
13432 (native-inputs
13433 (list python-poetry-core
13434 python-pytest
13435 python-pytest-asyncio))
13436 (propagated-inputs
13437 (list hypercorn
13438 python-aiofiles
13439 python-blinker
13440 python-click
13441 python-dotenv
13442 python-flask
13443 python-itsdangerous
13444 python-jinja2
13445 python-markupsafe
13446 python-toml
13447 python-werkzeug))
13448 (home-page "https://gitlab.com/pgjones/quart/")
13449 (synopsis "Python ASGI web microframework with the same API as Flask")
13450 (description
13451 "This package provides a Python ASGI web microframework with the same API
13452as Flask.")
13453 (license license:expat)))
13454
13455(define-public python-quart-trio
13456 (package
13457 (name "python-quart-trio")
13458 (version "0.12.0")
13459 (source
13460 (origin
13461 (method url-fetch)
13462 (uri (pypi-uri "quart_trio" version))
13463 (sha256
13464 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
13465 (build-system pyproject-build-system)
13466 (arguments
13467 (list
13468 #:phases
13469 #~(modify-phases %standard-phases
13470 (add-after 'unpack 'remove-coverage-pytest-options
13471 (lambda _
13472 (substitute* "pyproject.toml"
13473 (("--no-cov-on-fail") "")))))))
13474 (native-inputs
13475 (list python-pdm-backend
13476 python-pytest
13477 python-pytest-sugar
13478 python-pytest-trio))
13479 (propagated-inputs
13480 (list hypercorn
13481 python-quart
13482 python-trio))
13483 (home-page "https://github.com/pgjones/quart-trio")
13484 (synopsis "Extension for Quart to support the Trio event loop")
13485 (description
13486 "This package provides a Quart extension to provide Trio support. This
13487is an alternative to using the asyncio event loop present in the Python
13488standard library and supported by default in Quart.")
13489 (license license:expat)))
13490
13491(define-public python-ajsonrpc
13492 (package
13493 (name "python-ajsonrpc")
13494 (version "1.2.0")
13495 (source
13496 (origin
13497 (method git-fetch)
13498 (uri (git-reference
13499 (url "https://github.com/pavlov99/ajsonrpc")
13500 (commit version)))
13501 (file-name (git-file-name name version))
13502 (sha256
13503 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
13504 (build-system pyproject-build-system)
13505 (arguments
13506 (list
13507 #:phases
13508 #~(modify-phases %standard-phases
13509 (add-after 'unpack 'set-version
13510 (lambda _
13511 (substitute* "ajsonrpc/__init__.py"
13512 (("^__version__ = .*")
13513 (string-append "__version__ = \"" #$version "\"\n"))))))))
13514 (native-inputs
13515 (list python-pytest
13516 python-setuptools))
13517 (propagated-inputs
13518 (list python-quart
13519 python-sanic
13520 python-tornado))
13521 (home-page "https://github.com/pavlov99/ajsonrpc")
13522 (synopsis "Async JSON-RPC 2.0 protocol and server")
13523 (description
13524 "This package provides a Python JSON-RPC 2.0 protocol and server powered
13525by asyncio.")
13526 (license license:expat)))
13527
13528(define-public python-protego
13529 (package
13530 (name "python-protego")
13531 (version "0.4.0")
13532 (source
13533 (origin
13534 (method url-fetch)
13535 (uri (pypi-uri "protego" version))
13536 (sha256
13537 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
13538 (build-system pyproject-build-system)
13539 (native-inputs (list python-pytest python-setuptools python-wheel))
13540 (home-page "https://github.com/scrapy/protego")
13541 (synopsis "Python robots.txt parser with support for modern conventions")
13542 (description "Protego is a pure-Python @file{robots.txt} parser with support
13543for modern conventions.")
13544 (license license:bsd-3)))
13545
13546(define-public python-parsel
13547 (package
13548 (name "python-parsel")
13549 (version "1.10.0")
13550 (source
13551 (origin
13552 (method url-fetch)
13553 (uri (pypi-uri "parsel" version))
13554 (sha256
13555 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
13556 (build-system pyproject-build-system)
13557 (propagated-inputs
13558 (list python-cssselect
13559 python-jmespath
13560 python-lxml
13561 python-typing-extensions
13562 python-w3lib))
13563 (native-inputs
13564 (list python-psutil python-pytest python-setuptools python-wheel))
13565 (home-page "https://github.com/scrapy/parsel")
13566 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
13567 (description "Parsel is a library to extract and remove data from
13568HTML and XML using XPath and CSS selectors, optionally combined with
13569regular expressions.")
13570 (license license:bsd-3)))
13571
13572(define-public python-scrapy
13573 (package
13574 (name "python-scrapy")
13575 (version "2.13.3")
13576 (source
13577 (origin
13578 (method url-fetch)
13579 (uri (pypi-uri "scrapy" version))
13580 (sha256
13581 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
13582 (build-system pyproject-build-system)
13583 (arguments
13584 (list #:test-flags
13585 #~(list "--numprocesses" (number->string (parallel-job-count))
13586 "-k" (string-join
13587 ;; ConnectionRefusedError: [Errno 111] Connection
13588 ;; refused
13589 (list "not test_append"
13590 "test_append_active_mode"
13591 "test_overwrite"
13592 "test_overwrite_active_mode"
13593 "test_persist"
13594 ;; AssertionError
13595 "test_start_deprecated_super")
13596 " and not ")
13597 ;; Skip documentation testing.
13598 "--ignore=docs")
13599 #:phases
13600 #~(modify-phases %standard-phases
13601 (add-before 'check 'prepare-test-environment
13602 (lambda _
13603 (setenv "HOME" "/tmp"))))))
13604 (propagated-inputs
13605 (list python-cryptography
13606 python-cssselect
13607 python-defusedxml
13608 python-itemadapter
13609 python-itemloaders
13610 python-lxml
13611 python-packaging
13612 python-parsel
13613 python-protego
13614 python-pydispatcher
13615 python-pyopenssl
13616 python-pypydispatcher
13617 python-queuelib
13618 python-service-identity
13619 python-tldextract
13620 python-twisted
13621 python-w3lib
13622 python-zope-interface))
13623 (native-inputs
13624 (list nss-certs-for-test
13625 python-hatchling
13626 python-pexpect
13627 python-pytest
13628 python-pytest-xdist
13629 python-setuptools
13630 python-sybil
13631 python-testfixtures))
13632 (home-page "https://scrapy.org")
13633 (synopsis "High-level Web crawling and Web scraping framework")
13634 (description "Scrapy is a fast high-level web crawling and web
13635scraping framework, used to crawl websites and extract structured data
13636from their pages. It can be used for a wide range of purposes, from data
13637mining to monitoring and automated testing.")
13638 (license license:bsd-3)))
13639
13640(define sdmx-test-data
13641 (let* ((commit "cd7899341b46e179e9f19b638478d70197e12c74")
13642 (revision "1")
13643 (name "sdmx-test-data")
13644 (version (git-version "0" revision commit)))
13645 (origin
13646 (method git-fetch)
13647 (uri (git-reference
13648 (url "https://github.com/khaeru/sdmx-test-data")
13649 (commit commit)))
13650 (file-name (git-file-name name version))
13651 (sha256
13652 (base32 "1n9y83raxxpgljbi0wjj27lhmyn19fnc2325a6cchwsa3b65ywv7")))))
13653
13654(define-public python-sdmx1
13655 (package
13656 (name "python-sdmx1")
13657 (version "2.26.0")
13658 (source
13659 (origin
13660 (method git-fetch)
13661 (uri (git-reference
13662 (url "https://github.com/khaeru/sdmx")
13663 (commit (string-append "v" version))))
13664 (file-name (git-file-name name version))
13665 (sha256
13666 (base32 "096c60pxzcw71bc9fj3hpjprrdiia365rqalapxx56g6g1vkgka9"))))
13667 (build-system pyproject-build-system)
13668 (arguments
13669 (list
13670 #:test-flags
13671 #~(list
13672 ;; 804 passed, 122 skipped, 28 deselected, 23 xfailed, 1 xpassed, 3 warnings
13673 ;; XXX: 'Version' object has no attribute 'pre'
13674 "--ignore=sdmx/tests/model/test_version.py"
13675 ;; Most of these tests require network connection.
13676 "--ignore=sdmx/tests/test_client.py"
13677 "--ignore=sdmx/tests/test_sources.py"
13678 "--ignore=sdmx/tests/test_docs.py"
13679 "--ignore=sdmx/tests/test_session.py"
13680 "--ignore=sdmx/tests/writer/test_xml.py"
13681 "--ignore=sdmx/tests/reader/test_xml_v21.py"
13682 "--deselect=sdmx/tests/convert/test_pandas.py::test_dataset_constraint"
13683 ;; Wrong python-flaky version
13684 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas_in_user_cache"
13685 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas"
13686 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v2_1_samples"
13687 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v3_0_samples"
13688 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_doc"
13689 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_message_type"
13690 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_max_errors"
13691 ;; sqlite3.OperationalError
13692 "--deselect=sdmx/tests/util/test_requests.py::TestOfflineAdapter::test_raises")
13693 #:phases
13694 #~(modify-phases %standard-phases
13695 (add-after 'unpack 'fix-version
13696 (lambda _
13697 ;; versioningit needs git tags; patch pyproject.toml to use
13698 ;; static version and create _version.py directly.
13699 (substitute* "pyproject.toml"
13700 (("version.source = \"versioningit\"")
13701 "
13702[tool.hatch.version]
13703path = \"sdmx/_version.py\"")
13704 ((", \"versioningit\"")
13705 ""))
13706 (call-with-output-file "sdmx/_version.py"
13707 (lambda (port)
13708 (format port "__version__ = \"~a\"~%" #$version)))))
13709 (add-before 'check 'pre-check
13710 (lambda _
13711 (setenv "SDMX_TEST_DATA" #$sdmx-test-data)
13712 (setenv "HOME" (dirname (getcwd))))))))
13713 (propagated-inputs
13714 (list python-dateutil
13715 python-lxml
13716 python-pandas
13717 python-platformdirs
13718 python-requests))
13719 (native-inputs
13720 (list python-filelock
13721 python-flaky
13722 python-hatchling
13723 python-jinja2
13724 python-pyarrow
13725 python-pytest
13726 python-pytest-cov
13727 python-pytest-xdist
13728 python-requests-mock
13729 python-requests-cache
13730 python-responses))
13731 (home-page "https://sdmx1.readthedocs.io")
13732 (synopsis "Statistical Data and Metadata eXchange (SDMX) for Python")
13733 (description "This package provides a Python implementation of the
13734SDMX 2.1 and 3.0 standards for Statistical Data and Metadata eXchange.
13735These standards are developed and used by statistical agencies and
13736international organisations. This package can be used to:
13737@itemize
13738@item Explore and retrieve data available from SDMX-REST web services
13739operated by providers including the World Bank, International Monetary
13740Fund, Eurostat, OECD, and United Nations;
13741@item Read and write data and metadata in file formats including
13742SDMX-ML (XML), SDMX-JSON, and SDMX-CSV;
13743@item Convert data and metadata into @code{python-pandas} objects, for
13744use with the analysis, plotting, and other tools in the Python data
13745science ecosystem;
13746@item Apply the SDMX information model (IM) to structure and publish
13747your own data.
13748@end itemize")
13749 (license license:asl2.0)))
13750
13751(define-public python-jstyleson
13752 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
13753 (revision "0"))
13754 (package
13755 (name "python-jstyleson")
13756 (version (git-version "0.0.2" revision commit))
13757 (source
13758 (origin
13759 (method git-fetch)
13760 (uri (git-reference
13761 (url "https://github.com/linjackson78/jstyleson")
13762 (commit commit)))
13763 (file-name (git-file-name name version))
13764 (sha256
13765 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
13766 (build-system pyproject-build-system)
13767 (native-inputs (list python-pytest python-setuptools))
13768 (home-page "https://github.com/linjackson78/jstyleson")
13769 (synopsis "JSON parser supporting js-style comments")
13770 (description
13771 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
13772standard Python @code{json} library, it understands js-style comments.
13773Trailing comma is also supported.")
13774 (license license:expat))))
13775
13776(define-public python-html-text
13777 (package
13778 (name "python-html-text")
13779 (version "0.7.0")
13780 (source
13781 (origin
13782 (method url-fetch)
13783 (uri (pypi-uri "html_text" version))
13784 (sha256
13785 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
13786 (build-system pyproject-build-system)
13787 (native-inputs
13788 (list python-pytest
13789 python-setuptools
13790 python-wheel))
13791 (propagated-inputs
13792 (list python-lxml
13793 python-lxml-html-clean))
13794 (home-page "https://github.com/TeamHG-Memex/html-text")
13795 (synopsis "Extract text from HTML")
13796 (description "HTML to Text is a Python library for extract text from HTML.
13797Contrary to other solution such as LXML or Beautiful Soup, the text extracted
13798with @code{html_text} does not contain elements such as JavaScript or inline
13799styles not normally visible to users. It also normalizes white space
13800characters in a smarter, more visually pleasing style.")
13801 (license license:expat)))
13802
13803(define-public python-mf2py
13804 (package
13805 (name "python-mf2py")
13806 (version "2.0.1")
13807 (source
13808 (origin
13809 (method git-fetch)
13810 (uri (git-reference
13811 (url "https://github.com/microformats/mf2py")
13812 (commit (string-append "v" version))))
13813 (file-name (git-file-name name version))
13814 (sha256
13815 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
13816 (build-system pyproject-build-system)
13817 (native-inputs (list python-mock python-poetry-core python-pytest))
13818 (propagated-inputs
13819 (list python-beautifulsoup4 python-html5lib python-requests))
13820 (home-page "https://github.com/microformats/mf2py")
13821 (synopsis "Python Microformats2 parser")
13822 (description
13823 "This Python library provides a Microformats2 parser implementing the
13824full Microformats2 (mf2) specification, including backward compatibility with
13825Microformats1 (mf1).")
13826 (license license:expat)))
13827
13828(define-public python-extruct
13829 (package
13830 (name "python-extruct")
13831 (version "0.18.0")
13832 (source (origin
13833 (method git-fetch) ;for tests
13834 (uri (git-reference
13835 (url "https://github.com/scrapinghub/extruct")
13836 (commit (string-append "v" version))))
13837 (file-name (git-file-name name version))
13838 (sha256
13839 (base32
13840 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
13841 (build-system pyproject-build-system)
13842 (arguments
13843 (list
13844 #:test-flags
13845 ;; 67 passed, 3 deselected
13846 ;; XXX: 3 tests fail with errors in assertion.
13847 #~(list "-k" (string-append
13848 "not test_microformat"
13849 " and not test_microformat"
13850 " and not test_umicroformat"))))
13851 (native-inputs
13852 (list python-pytest
13853 python-setuptools
13854 python-wheel))
13855 (propagated-inputs
13856 (list python-html-text
13857 python-jstyleson
13858 python-lxml
13859 python-mf2py
13860 python-pyrdfa3
13861 python-rdflib
13862 python-w3lib))
13863 (home-page "https://github.com/scrapinghub/extruct")
13864 (synopsis "Extract embedded metadata from HTML markup")
13865 (description "@code{extruct} is a Python library for extracting embedded
13866metadata from HTML markup. Currently, extruct supports:
13867@itemize
13868@item W3C's HTML Microdata
13869@item embedded JSON-LD
13870@item Microformat via mf2py
13871@item Facebook's Open Graph
13872@item (experimental) RDFa via rdflib
13873@item Dublin Core Metadata (DC-HTML-2003)
13874@end itemize")
13875 (license license:bsd-3)))
13876
13877(define-public python-wadllib
13878 (package
13879 (name "python-wadllib")
13880 (version "2.0.0")
13881 (source
13882 (origin
13883 (method url-fetch)
13884 (uri (pypi-uri "wadllib" version))
13885 (sha256
13886 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
13887 (build-system pyproject-build-system)
13888 (arguments
13889 (list
13890 ;; XXX: Doctests are currently failing.
13891 #:tests? #f
13892 #:phases
13893 #~(modify-phases %standard-phases
13894 (replace 'check
13895 (lambda* (#:key tests? #:allow-other-keys)
13896 (if tests?
13897 (invoke "zope-testrunner" "--test-path=src")
13898 (format #t "test suite not run~%")))))))
13899 (native-inputs
13900 (list python-multipart python-setuptools python-zope-testrunner))
13901 (propagated-inputs (list python-lazr-uri))
13902 (home-page "https://launchpad.net/wadllib")
13903 (synopsis "Web Application Description Language (WADL) navigation library")
13904 (description "The @code{wadllib} Python library allows navigating HTTP
13905resources using Web Application Description Language (WADL) files as guides.")
13906 (license license:lgpl3)))
13907
13908(define-public python-zeep
13909 (package
13910 (name "python-zeep")
13911 (version "4.3.1")
13912 (source
13913 (origin
13914 (method url-fetch)
13915 (uri (pypi-uri "zeep" version))
13916 (sha256
13917 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
13918 (build-system pyproject-build-system)
13919 (arguments
13920 (list
13921 #:phases
13922 '(modify-phases %standard-phases
13923 (add-after 'unpack 'compatibility
13924 (lambda _
13925 ;; Relax requests-file requirement.
13926 (substitute* "pyproject.toml"
13927 (("\"requests-file.*\",")
13928 "\"requests-file\","))
13929 ;; httpx removed the "proxies" keyword. It's now either "mounts"
13930 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
13931 (substitute* "src/zeep/transports.py"
13932 (("proxies=") "proxy="))))
13933 ;; One test requires write access
13934 (add-before 'check 'set-HOME
13935 (lambda _ (setenv "HOME" (getcwd)))))))
13936 (propagated-inputs
13937 (list python-attrs
13938 python-isodate
13939 python-lxml
13940 python-platformdirs
13941 python-pytz
13942 python-requests
13943 python-requests-file
13944 python-requests-toolbelt))
13945 (native-inputs
13946 (list nss-certs-for-test
13947 python-freezegun
13948 python-pretend
13949 python-pytest
13950 python-pytest-asyncio
13951 python-pytest-httpx
13952 python-requests-mock
13953 python-setuptools
13954 python-wheel))
13955 (home-page "https://docs.python-zeep.org/en/stable/")
13956 (synopsis "Python SOAP client based on lxml / requests")
13957 (description "Zeep is a Python SOAP client. Highlights:
13958
13959@itemize
13960@item Build on top of @code{lxml} and @code{requests}.
13961@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
13962@item Support for WS-Addressing headers.
13963@item Support for WSSE (UserNameToken / x.509 signing).
13964@item Support for @code{asyncio} via @code{httpx}.
13965@item Experimental support for XOP messages.
13966@end itemize")
13967 (license license:expat)))
13968
13969(define-public python-http-client
13970 (package
13971 (name "python-http-client")
13972 (version "3.3.7")
13973 (source
13974 (origin
13975 (method git-fetch)
13976 (uri (git-reference
13977 (url "https://github.com/sendgrid/python-http-client")
13978 (commit version)))
13979 (file-name (git-file-name name version))
13980 (sha256
13981 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
13982 (build-system pyproject-build-system)
13983 (arguments
13984 (list
13985 #:test-backend #~'unittest
13986 #:phases
13987 #~(modify-phases %standard-phases
13988 (add-after 'unpack 'fix-tests
13989 (lambda _
13990 ;; The test expects the copyright to be updated each year.
13991 (substitute* "tests/test_daterange.py"
13992 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
13993 (native-inputs
13994 (list python-setuptools))
13995 (home-page "https://github.com/sendgrid/python-http-client")
13996 (synopsis "HTTP REST client for Python")
13997 (description
13998 "This package provides access to any RESTful or RESTful-like API.")
13999 (license license:expat)))
14000
14001(define-public python-sendgrid
14002 (package
14003 (name "python-sendgrid")
14004 (version "6.9.7")
14005 (source
14006 (origin
14007 (method git-fetch)
14008 (uri (git-reference
14009 (url "https://github.com/sendgrid/sendgrid-python")
14010 (commit version)))
14011 (file-name (git-file-name name version))
14012 (sha256
14013 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
14014 (build-system pyproject-build-system)
14015 (arguments
14016 (list
14017 #:test-flags
14018 #~(list "--ignore=test/integ"
14019 ;; Network access is required.
14020 "--ignore=live_test.py")))
14021 (native-inputs
14022 (list python-pytest
14023 python-setuptools))
14024 (propagated-inputs
14025 (list python-cryptography
14026 python-http-client
14027 python-flask
14028 python-pyyaml
14029 python-six ;hard dependency
14030 python-starkbank-ecdsa
14031 python-werkzeug))
14032 (home-page "https://github.com/sendgrid/sendgrid-python/")
14033 (synopsis "SendGrid API library for Python")
14034 (description
14035 "The @code{sendgrid} Python library allows access to the
14036SendGrid Web API v3. Version 3+ of the library provides full support for all
14037SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
14038 (license license:expat)))
14039
14040(define-public python-sse-starlette
14041 (package
14042 (name "python-sse-starlette")
14043 (version "3.4.4")
14044 (source
14045 (origin
14046 (method git-fetch)
14047 (uri (git-reference
14048 (url "https://github.com/sysid/sse-starlette")
14049 (commit (string-append "v" version))))
14050 (file-name (git-file-name name version))
14051 (sha256
14052 (base32 "0jzy3mjszl7fr524cggyf8k97x6jpykvmxldmm2ckmrqjpyj8jmz"))))
14053 (build-system pyproject-build-system)
14054 (arguments
14055 (list
14056 #:test-flags
14057 #~(list
14058 ;; XXX: Server fails to start.
14059 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
14060 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
14061 ;; XXX: Missing test dependency - testcontainers, Docker is required.
14062 "--ignore=tests/integration/test_multiple_consumers.py")))
14063 (native-inputs
14064 (list python-asgi-lifespan
14065 python-httpx
14066 python-portend
14067 python-pytest
14068 python-pytest-asyncio
14069 python-psutil
14070 python-setuptools
14071 python-tenacity
14072 python-uvicorn))
14073 (propagated-inputs
14074 (list python-anyio
14075 python-starlette))
14076 (home-page "https://github.com/sysid/sse-starlette")
14077 (synopsis "SSE plugin for Starlette")
14078 (description
14079 "This package provides SSE plugin for Starlette.")
14080 (license license:bsd-3)))
14081
14082(define-public python-sseclient-py
14083 (package
14084 (name "python-sseclient-py")
14085 (version "1.9.0")
14086 (source
14087 (origin
14088 (method git-fetch)
14089 (uri (git-reference
14090 (url "https://github.com/mpetazzoni/sseclient")
14091 (commit (string-append "sseclient-py-" version))))
14092 (file-name (git-file-name name version))
14093 (sha256
14094 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
14095 (build-system pyproject-build-system)
14096 (native-inputs (list python-hatchling python-pytest))
14097 (arguments
14098 (list
14099 #:test-backend #~'unittest
14100 #:test-flags #~'("discover" "--verbose" "tests")))
14101 (home-page "https://github.com/mpetazzoni/sseclient")
14102 (synopsis "Pure-Python Server Side Events (SSE) client")
14103 (description
14104 "This package provides a Python client for SSE event sources that
14105seamlessly integrates with @code{urllib3} and @code{requests}.")
14106 (license license:asl2.0)))
14107
14108(define-public python-starlette
14109 (package
14110 (name "python-starlette")
14111 (version "0.49.1")
14112 (source (origin
14113 (method git-fetch)
14114 (uri (git-reference
14115 (url "https://github.com/encode/starlette")
14116 (commit version)))
14117 (file-name (git-file-name name version))
14118 (sha256
14119 (base32
14120 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
14121 (build-system pyproject-build-system)
14122 (propagated-inputs (list python-anyio
14123 python-typing-extensions
14124 ;; [all] extra dependencies:
14125 python-itsdangerous
14126 python-jinja2
14127 python-multipart
14128 python-pyyaml
14129 python-requests))
14130 (native-inputs (list python-hatchling
14131 python-httpx
14132 python-pytest
14133 python-typing-extensions))
14134 (home-page "https://github.com/encode/starlette")
14135 (synopsis "Little ASGI library")
14136 (description
14137 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
14138Interface) framework/toolkit for building async web services in Python.")
14139 (license license:bsd-3)))
14140
14141(define-public python-starsessions
14142 (package
14143 (name "python-starsessions")
14144 (version "1.3.0")
14145 (source (origin
14146 (method git-fetch)
14147 (uri (git-reference
14148 (url "https://github.com/alex-oleshkevich/starsessions")
14149 (commit (string-append "v" version))))
14150 (file-name (git-file-name name version))
14151 (sha256
14152 (base32
14153 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
14154 (build-system pyproject-build-system)
14155 (arguments
14156 (list
14157 #:test-flags
14158 ;; These tests require a running redis server
14159 '(list "--ignore=tests/backends/test_redis.py"
14160 ;; XXX: this failure indicates a real compatibility problem, but
14161 ;; it seems restricted to the tests only.
14162 ;; AttributeError: 'Cookies' object has no attribute
14163 ;; 'clear_session_cookies'
14164 "-k"
14165 (string-append "not test_session_clears_on_tab_close"
14166 ;; This fails because an error is not raised.
14167 " and not test_session_wants_secret_key"))
14168 #:phases
14169 '(modify-phases %standard-phases
14170 (add-after 'unpack 'compatibilitiy
14171 (lambda _
14172 ;; aioredis has been renamed
14173 (substitute* "starsessions/backends/redis.py"
14174 (("aioredis") "redis")))))))
14175 (propagated-inputs
14176 (list python-redis
14177 python-itsdangerous
14178 python-starlette))
14179 (native-inputs
14180 (list python-httpx
14181 python-poetry-core
14182 python-pytest
14183 python-pytest-asyncio
14184 python-requests))
14185 (home-page "https://github.com/alex-oleshkevich/starsessions")
14186 (synopsis "Pluggable session support for Starlette and FastAPI")
14187 (description
14188 "This package adds pluggable session backends and ships default
14189@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
14190and FastAPI.")
14191 (license license:expat)))
14192
14193(define-public python-whereismyip
14194 (package
14195 (name "python-whereismyip")
14196 (version "0.1.0")
14197 (source
14198 (origin
14199 (method url-fetch)
14200 (uri (pypi-uri "whereismyip" version))
14201 (sha256
14202 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
14203 (build-system pyproject-build-system)
14204 (arguments (list #:tests? #false)) ; There are no tests.
14205 (native-inputs (list python-setuptools))
14206 (home-page "https://pypi.org/project/whereismyip/")
14207 (synopsis "Queries multiple geolocation services until one succeeds")
14208 (description
14209 "This package provides a simple Python library that queries multiple geolocation
14210services until one succeeds.")
14211 (license license:gpl3)))
14212
14213(define-public python-whitenoise
14214 (package
14215 (name "python-whitenoise")
14216 (version "6.9.0")
14217 (source (origin
14218 (method git-fetch) ; PyPI missing test fails
14219 (uri (git-reference
14220 (url "https://github.com/evansd/whitenoise")
14221 (commit version)))
14222 (file-name (git-file-name name version))
14223 (sha256
14224 (base32
14225 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
14226 (build-system pyproject-build-system)
14227 (arguments
14228 (list
14229 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
14230 (native-inputs (list python-brotli
14231 python-django
14232 python-requests
14233 python-pytest
14234 python-setuptools
14235 python-wheel))
14236 (home-page "https://github.com/evansd/whitenoise")
14237 (synopsis "Static file serving for WSGI applications")
14238 (description
14239 "WhiteNoise allows your web app to serve its own static files, making it
14240a self-contained unit that can be deployed anywhere without relying on nginx,
14241Amazon S3 or any other external service.")
14242 (license license:expat)))
14243
14244(define-public python-suds
14245 (package
14246 (name "python-suds")
14247 (version "1.2.0")
14248 (source
14249 (origin
14250 (method url-fetch)
14251 (uri (pypi-uri "suds" version))
14252 (sha256
14253 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
14254 (build-system pyproject-build-system)
14255 (arguments
14256 (list #:phases
14257 #~(modify-phases %standard-phases
14258 ;; XXX: chirp expects suds instead of suds_community
14259 (add-after 'install 'add-custom-dist-info
14260 (lambda _
14261 (for-each
14262 (lambda (dir)
14263 (with-directory-excursion (dirname dir)
14264 (symlink
14265 (basename dir)
14266 (string-append "suds-" #$version ".dist-info"))))
14267 (find-files #$output
14268 (lambda (file stat)
14269 (string-suffix? ".dist-info" file))
14270 #:directories? #t)))))))
14271 (native-inputs
14272 (list python-pytest
14273 python-setuptools
14274 python-wheel))
14275 (home-page "https://github.com/suds-community/suds")
14276 (synopsis "Lightweight SOAP python client for consuming Web Services")
14277 (description
14278 "Suds is a lightweight SOAP-based web service client for Python.")
14279 (license license:lgpl3+)))
14280
14281(define-public python-fastapi
14282 (package
14283 (name "python-fastapi")
14284 (version "0.131.0")
14285 (source
14286 (origin
14287 (method url-fetch)
14288 (uri (pypi-uri "fastapi" version))
14289 (sha256
14290 (base32 "1zs80pz8p04akxxmyfihqgii1wjhhad6qx1cjfd8kqmya9g1acb5"))))
14291 (build-system pyproject-build-system)
14292 (arguments
14293 (list
14294 ;; tests: 1126 passed, 12 skipped, 2 deselected
14295 #:test-backend #~'custom
14296 #:test-flags
14297 #~(list
14298 ;; Cannot import 'scripts' with just 'pytest'.
14299 "-m" "pytest"
14300 ;; Needs strawberry and sqlmodel.
14301 "--ignore=tests/test_tutorial/"
14302 ;; Fails due to failure to capture stdout.
14303 "--ignore=tests/test_fastapi_cli.py")))
14304 (native-inputs
14305 (list python-anyio
14306 python-dirty-equals
14307 python-flask
14308 python-inline-snapshot
14309 python-pdm-backend
14310 ;; python-pwdlib
14311 python-pyjwt
14312 python-pytest
14313 python-sqlalchemy-2
14314 ;; python-sqlmodel
14315 python-types-orjson
14316 python-types-ujson))
14317 (propagated-inputs
14318 (list python-starlette
14319 python-pydantic
14320 python-typing-extensions
14321 python-annotated-doc
14322 ;; [optional]
14323 python-email-validator
14324 python-fastapi-cli
14325 python-httpx
14326 python-itsdangerous
14327 python-jinja2
14328 python-multipart
14329 python-orjson
14330 python-pydantic-extra-types
14331 python-pydantic-settings
14332 python-pyyaml
14333 python-ujson
14334 python-uvicorn))
14335 (home-page "https://github.com/fastapi/fastapi")
14336 (synopsis "Web framework based on type hints")
14337 (description "FastAPI provides a web API framework based on pydantic and
14338starlette.")
14339 (license license:expat)))
14340
14341(define-public python-fastapi-csrf-protect
14342 (package
14343 (name "python-fastapi-csrf-protect")
14344 (version "0.3.3")
14345 (source (origin
14346 (method git-fetch)
14347 (uri (git-reference
14348 (url "https://github.com/aekasitt/fastapi-csrf-protect")
14349 (commit (string-append "v" version))))
14350 (file-name (git-file-name name version))
14351 (sha256
14352 (base32
14353 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
14354 (build-system pyproject-build-system)
14355 (propagated-inputs
14356 (list python-fastapi python-itsdangerous
14357 python-pydantic))
14358 (native-inputs
14359 (list python-poetry-core
14360 python-pytest))
14361 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
14362 (synopsis "Cross-Site Request Forgery (XSRF) protection")
14363 (description
14364 "This package provides a stateless implementation of @dfn{Cross-Site
14365Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
14366pattern.")
14367 (license license:expat)))
14368
14369(define-public python-fastapi-pagination-minimal
14370 (package
14371 (name "python-fastapi-pagination-minimal")
14372 (version "0.15.6")
14373 (source (origin
14374 (method git-fetch)
14375 (uri (git-reference
14376 (url "https://github.com/uriyyo/fastapi-pagination")
14377 (commit version)))
14378 (file-name (git-file-name name version))
14379 (sha256
14380 (base32
14381 "1ndazaqi1na0lj6fi42d7mi9lmpxdak0wq0pd97fb3b23ml8rlg6"))))
14382 (build-system pyproject-build-system)
14383 ;; We run the tests in python-fastapi-pagination only.
14384 (arguments (list #:tests? #false))
14385 ;; These are the only required dependencies,
14386 ;; please add all optional dependencies to the
14387 ;; full python-fastapi-pagination below.
14388 (propagated-inputs (list python-fastapi python-pydantic))
14389 (native-inputs (list python-hatchling))
14390 (home-page "https://github.com/uriyyo/fastapi-pagination")
14391 (synopsis "FastAPI pagination library")
14392 (description "@code{fastapi-pagination} is a Python library designed to
14393simplify pagination in FastAPI applications. It provides a set of utility
14394functions and data models to help you paginate your database queries and
14395return paginated responses to your clients.")
14396 (license license:expat)))
14397
14398(define-public python-fastapi-pagination
14399 (package
14400 (inherit python-fastapi-pagination-minimal)
14401 (name "python-fastapi-pagination")
14402 (arguments
14403 (list
14404 #:test-flags
14405 #~(list "--asyncio-mode=auto"
14406 "--ignore=tests/ext"
14407 ;; Netwok access is required.
14408 "-k" (string-join
14409 (list "not test_optional_params[postgres-default]"
14410 "test_optional_params[postgres-limit-offset]"
14411 "test_optional_params[sqlite-default]"
14412 "test_optional_params[sqlite-limit-offset]")
14413 " and not "))
14414 #:phases
14415 '(modify-phases %standard-phases
14416 (add-after 'unpack 'patch-tests
14417 (lambda _
14418 ;; We don't have a package for python-cassandra or motor, but we
14419 ;; also don't need them as we only run the unit tests anyway.
14420 (substitute* "tests/conftest.py"
14421 (("from cassandra.*") "")
14422 (("from motor.*") "")))))))
14423 (propagated-inputs
14424 (modify-inputs (package-propagated-inputs
14425 python-fastapi-pagination-minimal)
14426 (prepend python-asyncpg
14427 python-databases
14428 python-django
14429 python-fastapi
14430 python-pydantic
14431 python-sqlalchemy
14432 (package
14433 (inherit python-tortoise-orm)
14434 (arguments
14435 (substitute-keyword-arguments (package-arguments
14436 python-tortoise-orm)
14437 ((#:phases phases '%standard-phases)
14438 `(modify-phases ,phases
14439 (delete 'sanity-check)))))
14440 (propagated-inputs
14441 (modify-inputs propagated-inputs
14442 (replace "python-aiosqlite" python-aiosqlite)))))))
14443 (native-inputs
14444 (list python-aiosqlite
14445 python-asgi-lifespan
14446 python-asyncpg
14447 python-dirty-equals
14448 python-faker
14449 python-hatchling
14450 python-httpx
14451 python-pytest
14452 python-pytest-asyncio
14453 python-sqlalchemy
14454 python-typing-extensions))
14455 (description
14456 (string-append (package-description python-fastapi-pagination-minimal)
14457 "
14458
14459This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
14460all available optional dependencies supported by mainline
14461@code{fastapi-pagination}."))))
14462
14463(define-public python-fastapi-cli
14464 (package
14465 (name "python-fastapi-cli")
14466 (version "0.0.7")
14467 (source
14468 (origin
14469 (method url-fetch)
14470 (uri (pypi-uri "fastapi_cli" version))
14471 (sha256
14472 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
14473 (build-system pyproject-build-system)
14474 ;; Tests require fastapi, which depends on this package.
14475 (arguments (list #:tests? #false))
14476 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
14477 (native-inputs
14478 (list python-inline-snapshot python-pdm-backend python-pytest))
14479 (home-page "https://pypi.org/project/fastapi-cli/")
14480 (synopsis
14481 "Run and manage FastAPI apps from the command line with FastAPI CLI")
14482 (description
14483 "FastAPI CLI is a command line program fastapi that you can use to serve
14484your FastAPI app, manage your FastAPI project, and more.")
14485 (license license:expat)))
14486
14487(define-public python-pyactiveresource
14488 (package
14489 (name "python-pyactiveresource")
14490 (version "2.2.2")
14491 (source
14492 (origin
14493 (method git-fetch)
14494 (uri (git-reference
14495 (url "https://github.com/Shopify/pyactiveresource")
14496 (commit (string-append "v" version))))
14497 (file-name (git-file-name name version))
14498 (sha256
14499 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
14500 (build-system pyproject-build-system)
14501 ;; XXX: The package is fine, but the tests started failing on [email protected].
14502 ;; The package is not actively maintained, consider removing it once leaf.
14503 (arguments (list #:tests? #f))
14504 (native-inputs
14505 (list python-dateutil python-pytest python-pyyaml python-setuptools))
14506 (propagated-inputs (list python-six))
14507 (home-page "https://github.com/Shopify/pyactiveresource/")
14508 (synopsis "ActiveResource for Python")
14509 (description
14510 "This package provides a Python port of the ActiveResource project.
14511
14512Active Resource attempts to provide a coherent wrapper object-relational
14513mapping for REST web services. It follows the same philosophy as Active
14514Record, in that one of its prime aims is to reduce the amount of code needed
14515to map to these resources. This is made possible by relying on a number of
14516code- and protocol-based conventions that make it easy for Active Resource to
14517infer complex relations and structures.")
14518 (license license:expat)))
14519
14520(define-public python-shopifyapi
14521 (package
14522 (name "python-shopifyapi")
14523 (version "12.7.0")
14524 (source
14525 (origin
14526 (method git-fetch)
14527 (uri (git-reference
14528 (url "https://github.com/Shopify/shopify_python_api")
14529 (commit (string-append "v" version))))
14530 (file-name (git-file-name name version))
14531 (sha256
14532 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
14533 (build-system pyproject-build-system)
14534 (arguments
14535 (list
14536 #:test-flags
14537 #~'("-k"
14538 ;; Disable a failing test.
14539 "not test_raises_if_aud_doesnt_match_api_key")))
14540 (native-inputs (list python-mock python-pytest python-setuptools))
14541 (propagated-inputs (list python-pyactiveresource python-pyjwt
14542 python-pyyaml python-six))
14543 (home-page "https://github.com/Shopify/shopify_python_api")
14544 (synopsis "Shopify API for Python")
14545 (description
14546 "This package provides the Shopify API for Python.
14547
14548The ShopifyAPI library allows Python developers to programmatically access the
14549admin section of stores using an ActiveResource-like interface similar the
14550ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
14551list, create, update, or delete resources (e.g. Order, Product, Collection).")
14552 (license license:expat)))
14553
14554(define-public python-pybadges
14555 (package
14556 (name "python-pybadges")
14557 (version "3.0.1")
14558 (source (origin
14559 (method git-fetch)
14560 (uri (git-reference
14561 (url "https://github.com/google/pybadges")
14562 (commit version)))
14563 (file-name (git-file-name name version))
14564 (sha256
14565 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
14566 (build-system pyproject-build-system)
14567 (arguments
14568 (list
14569 #:test-flags
14570 #~'("-k"
14571 ;; Disable network dependent tests.
14572 "not test_changes and not test_not_image_url and not test_http_url")))
14573 (propagated-inputs (list python-jinja2 python-requests python-setuptools))
14574 (native-inputs (list python-flask
14575 python-fonttools
14576 python-pillow
14577 python-pytest
14578 python-wheel
14579 python-xmldiff))
14580 (home-page "https://github.com/google/pybadges")
14581 (synopsis "Generate Github-style badges on the command-line")
14582 (description
14583 "This package provides @code{python-pybadges}: a library and command-line
14584tool for generating Github-style badges as SVG images.")
14585 (license license:asl2.0)))
14586
14587(define-public python-grid5000
14588 (package
14589 (name "python-grid5000")
14590 (version "1.2.4")
14591 (source (origin
14592 (method git-fetch)
14593 (uri (git-reference
14594 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
14595 (commit (string-append "v" version))))
14596 (file-name (git-file-name name version))
14597 (sha256
14598 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
14599 (build-system pyproject-build-system)
14600 (arguments
14601 (list #:tests? #f)) ; No tests.
14602 (native-inputs (list python-setuptools))
14603 (propagated-inputs (list python-requests python-ipython python-pyyaml))
14604 (home-page "https://pypi.org/project/python-grid5000/")
14605 (synopsis "Grid5000 python client")
14606 (description
14607 "python-grid5000 is a python package wrapping the Grid5000 REST API.
14608You can use it as a library in your python project or you can explore the
14609Grid5000 resources interactively using the embedded shell.")
14610 (license license:gpl3+)))
14611
14612(define-public python-enoslib
14613 (package
14614 (name "python-enoslib")
14615 (version "8.0.1")
14616 (source
14617 (origin
14618 (method git-fetch)
14619 (uri (git-reference
14620 (url "https://gitlab.inria.fr/discovery/enoslib")
14621 (commit (string-append "v" version))))
14622 (file-name (git-file-name name version))
14623 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
14624 (arguments
14625 (list
14626 #:test-flags
14627 #~(list "enoslib/tests/unit"
14628 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
14629 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
14630 #:phases
14631 #~(modify-phases %standard-phases
14632 (add-before 'check 'pre-check
14633 (lambda* (#:key tests? #:allow-other-keys)
14634 (when tests?
14635 ;; Otherwise Ansible fails to create its config directory.
14636 (setenv "HOME" "/tmp"))))
14637 ;; Disable the sanity check, which fails with the following error:
14638 ;;
14639 ;; ContextualVersionConflict(rich 12.4.1
14640 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
14641 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
14642 ;;
14643 ;; The optional jupyter dependency of rich isn't critical for
14644 ;; EnOSlib to work
14645 (delete 'sanity-check))))
14646 (build-system pyproject-build-system)
14647 (native-inputs
14648 (list python-ddt
14649 python-freezegun
14650 python-pytest
14651 python-setuptools
14652 python-wheel))
14653 (propagated-inputs
14654 (list ansible
14655 python-cryptography
14656 python-grid5000
14657 python-jsonschema
14658 python-netaddr
14659 python-packaging
14660 python-requests
14661 python-rich
14662 python-sshtunnel
14663 python-pytz))
14664 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
14665 (synopsis "Deploy distributed testbeds on a variety of platforms")
14666 (description
14667 "EnOSlib is a library to build experimental frameworks on various
14668scientific testbeds. It lets you deploy networks of machines on actual
14669hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
14670 (license license:gpl3+)))
14671
14672(define-public python-pynetbox
14673 (package
14674 (name "python-pynetbox")
14675 (version "7.4.1")
14676 (source (origin
14677 (method url-fetch)
14678 (uri (pypi-uri "pynetbox" version))
14679 (sha256
14680 (base32
14681 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
14682 (build-system pyproject-build-system)
14683 (arguments
14684 (list
14685 #:test-flags
14686 ;; Integration tests depend on docker.
14687 '(list "--ignore=tests/integration")))
14688 (propagated-inputs (list python-packaging python-requests))
14689 (native-inputs
14690 (list python-pytest
14691 python-setuptools
14692 python-setuptools-scm
14693 python-wheel))
14694 (home-page "https://github.com/netbox-community/pynetbox")
14695 (synopsis "NetBox API client library")
14696 (description "Python module to query and edit data stored in a
14697@url{https://netbox.dev,NetBox} instance.")
14698 (license license:asl2.0)))
14699
14700(define-public python-waybackpack
14701 (package
14702 (name "python-waybackpack")
14703 (version "0.6.4")
14704 (source
14705 (origin
14706 (method url-fetch)
14707 (uri (pypi-uri "waybackpack" version))
14708 (sha256
14709 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14710 (build-system pyproject-build-system)
14711 (arguments
14712 (list #:tests? #f)) ; would require network (and SSL certificates)
14713 (propagated-inputs (list python-requests))
14714 (native-inputs (list python-pytest python-setuptools python-wheel))
14715 (home-page "https://github.com/jsvine/waybackpack")
14716 (synopsis
14717 "Download the entire Wayback Machine archive for a given URL")
14718 (description
14719 "This package provides a library and a command-line tool that lets
14720you download the entire Wayback Machine archive for a given URL.")
14721 (license license:expat)))
14722
14723(define-public python-xyzservices
14724 (package
14725 (name "python-xyzservices")
14726 (version "2025.4.0")
14727 (source
14728 (origin
14729 (method url-fetch)
14730 (uri (pypi-uri "xyzservices" version))
14731 (sha256
14732 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14733 (build-system pyproject-build-system)
14734 (arguments
14735 (list
14736 #:test-flags #~(list "-m" "not request")))
14737 (native-inputs
14738 (list python-pytest
14739 python-mercantile
14740 python-requests
14741 python-setuptools
14742 python-setuptools-scm))
14743 (home-page "https://github.com/geopandas/xyzservices")
14744 (synopsis "Source of XYZ tiles providers")
14745 (description "@code{xyzservices} is a lightweight library providing a
14746repository of available XYZ services offering raster basemap tiles. The
14747repository is provided via Python API and as a compressed JSON file.")
14748 (license license:bsd-3)))
14749
14750(define-public s3cmd
14751 (package
14752 (name "s3cmd")
14753 (version "2.4.0")
14754 (source
14755 (origin
14756 (method git-fetch)
14757 (uri (git-reference
14758 (url "https://github.com/s3tools/s3cmd")
14759 (commit (string-append "v" version))))
14760 (file-name (git-file-name name version))
14761 (sha256
14762 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14763 (build-system pyproject-build-system)
14764 (arguments
14765 (list
14766 #:tests? #f ; XXX: Tests require network access.
14767 #:phases
14768 #~(modify-phases %standard-phases
14769 (add-after 'unpack 'hide-wrapping
14770 (lambda _
14771 (substitute* "S3/MultiPart.py"
14772 (("sys\\.argv\\[0\\]")
14773 "\"s3cmd\""))
14774 (substitute* "s3cmd"
14775 (("optparser\\.get_prog_name\\(\\)")
14776 "\"s3cmd\"")))))))
14777 (native-inputs (list python-setuptools))
14778 (inputs (list python-dateutil python-magic))
14779 (home-page "https://s3tools.org/s3cmd")
14780 (synopsis "Command line tool for S3-compatible storage services")
14781 (description
14782 "S3cmd is a command line tool for uploading, retrieving and managing data
14783in storage services that are compatible with the Amazon Simple Storage
14784Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14785GnuPG encryption, and more. It also supports management of Amazon's
14786CloudFront content delivery network.")
14787 (license license:gpl2+)))