projects/guix·blob rename-kernel-team · refs

14289 lines · 515.4 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-asyncudp
389 (package
390 (name "python-asyncudp")
391 (version "0.11.0")
392 (source
393 (origin
394 (method git-fetch)
395 (uri (git-reference
396 (url "https://github.com/eerimoq/asyncudp")
397 (commit version)))
398 (file-name (git-file-name name version))
399 (sha256
400 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
401 (build-system pyproject-build-system)
402 (native-inputs (list python-pytest python-setuptools))
403 (home-page (git-reference-url (origin-uri source)))
404 (synopsis "High level UDP sockets for asyncio")
405 (description
406 "This package provides a Python library offering high level UDP sockets
407for asyncio. Import it alongside asyncio and use its API to send and receive
408UDP packets.")
409 (license license:expat)))
410
411(define-public python-behave-web-api
412 (package
413 (name "python-behave-web-api")
414 (version "2.3.0")
415 (source
416 (origin
417 (method git-fetch)
418 (uri (git-reference
419 (url "https://github.com/jefersondaniel/behave-web-api")
420 (commit (string-append "v" version))))
421 (file-name (git-file-name name version))
422 (sha256
423 (base32 "1r8yx8gb5m599cpdqfvk6z9ax3qj26fpvczdr84z8jya0dxfch4p"))))
424 (build-system pyproject-build-system)
425 (native-inputs
426 (list python-pytest
427 python-setuptools))
428 (propagated-inputs
429 (list behave
430 python-requests))
431 (home-page "https://github.com/jefersondaniel/behave-web-api")
432 (synopsis "Provides testing for JSON APIs with Behave for Python")
433 (description "This package provides testing utility modules for testing
434JSON APIs with Behave.")
435 (license license:expat)))
436
437(define-public python-blacksheep
438 (package
439 (name "python-blacksheep")
440 (version "2.4.6")
441 (source
442 (origin
443 (method git-fetch)
444 (uri (git-reference
445 (url "https://github.com/Neoteroi/BlackSheep")
446 (commit (string-append "v" version))))
447 (file-name (git-file-name name version))
448 (sha256
449 (base32 "120q6hrhfjxdsqav8h5z8yqfi0iiacwxbkryjk7kb20ic2879vqh"))))
450 (build-system pyproject-build-system)
451 (arguments
452 (list
453 ;; tests: 1821 passed
454 ;;
455 ;; Run all unit tests, but do not run integration tests from `itests`
456 ;; directory.
457 #:test-flags
458 #~(list "tests")
459 #:phases
460 #~(modify-phases %standard-phases
461 (add-before 'build 'cythonize
462 (lambda _
463 (with-directory-excursion "blacksheep"
464 (for-each (lambda (file)
465 (invoke "cython" "-3" file "-I" "."))
466 (find-files "." ".*\\.pyx$"))))))))
467 (native-inputs
468 (list nss-certs-for-test
469 python-cython
470 python-flask
471 python-jinja2
472 python-pydantic
473 python-pyjwt
474 python-pytest
475 python-pytest-asyncio
476 python-setuptools))
477 (propagated-inputs
478 (list python-certifi
479 python-essentials
480 python-essentials-openapi
481 python-guardpost
482 python-httptools
483 python-rodi
484 python-itsdangerous))
485 (home-page "https://github.com/Neoteroi/BlackSheep")
486 (synopsis "Asynchronous framework to build event based web applications")
487 (description
488 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
489
490The framework offers
491@itemize
492@item A rich code API, based on dependency injection and inspired by Flask and
493ASP.NET Core.
494@item A typing-friendly codebase, which enables a comfortable development
495experience thanks to hints when coding with IDEs.
496@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
497and JSON.
498@item A cross-platform framework, using the most modern versions of Python.
499@item Good performance.
500@end itemize")
501 (license license:expat)))
502
503(define-public python-bleach
504 (package
505 (name "python-bleach")
506 (version "6.3.0")
507 (source
508 (origin
509 (method git-fetch)
510 (uri (git-reference
511 (url "https://github.com/mozilla/bleach")
512 (commit (string-append "v" version))))
513 (file-name (git-file-name name version))
514 (sha256
515 (base32 "02abk9ixn010sqpbdsd7nxms0gv4prwv6d3nplb8giq85lpn1kkb"))
516 (snippet
517 #~(begin
518 (use-modules (guix build utils))
519 (substitute* (find-files "." "\\.py$")
520 (("bleach\\._vendor\\.html5lib") "html5lib"))
521 (delete-file-recursively "bleach/_vendor/html5lib")))))
522 (build-system pyproject-build-system)
523 (arguments
524 (list
525 ;; tests: 448 passed, 1 deselected, 3 xfailed
526 #:test-flags
527 #~(list (string-append "--deselect=tests/test_clean.py::"
528 "test_self_closing_tags_self_close[wbr]"))
529 #:phases
530 #~(modify-phases %standard-phases
531 (add-after 'unpack 'relax-requirements
532 (lambda _
533 ;; "tinycss2>=1.1.0,<1.5"
534 ;; The 'sanity-check of python-nbclassic fails without this.
535 (substitute* "setup.py"
536 (("\"tinycss2.*") "")))))))
537 (native-inputs
538 (list python-pytest
539 python-setuptools))
540 (propagated-inputs
541 (list python-html5lib
542 python-tinycss2
543 python-webencodings))
544 (home-page "https://github.com/mozilla/bleach")
545 (synopsis "Whitelist-based HTML-sanitizing tool")
546 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
547 (license license:asl2.0)))
548
549(define-public python-cloudpathlib
550 (package
551 (name "python-cloudpathlib")
552 (version "0.23.0")
553 (source
554 (origin
555 (method git-fetch)
556 (uri (git-reference
557 (url "https://github.com/drivendataorg/cloudpathlib")
558 (commit (string-append "v" version))))
559 (file-name (git-file-name name version))
560 (sha256
561 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
562 (build-system pyproject-build-system)
563 (arguments
564 (list
565 ;; tests: 977 passed, 15 skipped, 8642 warnings
566 #:test-flags
567 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
568 ;; TODO: Package azure-identity (required for this file)
569 "--ignore=tests/test_azure_specific.py"
570 ;; TypeError: Retry.__init__() got an unexpected keyword
571 ;; argument 'timeout'
572 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")))
573 (native-inputs
574 (list ;; python-azure-identity
575 python-dotenv
576 python-flit-core
577 python-psutil
578 python-pydantic
579 python-pytest
580 python-pytest-cases
581 python-pytest-reportlog
582 python-pytest-xdist
583 python-shortuuid
584 python-tenacity))
585 (propagated-inputs
586 (list python-azure-storage-blob
587 python-azure-storage-file-datalake
588 python-boto3
589 python-google-cloud-storage
590 python-typing-extensions))
591 (home-page "https://github.com/drivendataorg/cloudpathlib")
592 (synopsis "Pathlib-style classes for cloud storage services")
593 (description
594 "This package provides a Python library with classes that mimic
595@code{pathlib.Path}'s interface for URIs from different cloud storage
596services.")
597 (license license:expat)))
598
599(define-public python-conda-package-handling
600 (package
601 (name "python-conda-package-handling")
602 (version "2.4.0")
603 (source
604 (origin
605 (method git-fetch)
606 (uri (git-reference
607 (url "https://github.com/conda/conda-package-handling/")
608 (commit version)))
609 (file-name (git-file-name name version))
610 (sha256
611 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
612 (build-system pyproject-build-system)
613 (native-inputs
614 (list python-bottle
615 python-mock
616 python-pytest-8
617 python-pytest-mock
618 python-setuptools))
619 (propagated-inputs
620 (list python-conda-package-streaming))
621 (home-page "https://conda.io")
622 (synopsis "Create and extract conda packages of various formats")
623 (description
624 "This library is an abstraction of Conda package handling and a tool for
625extracting, creating, and converting between formats.")
626 (license license:bsd-3)))
627
628(define-public python-conda-package-streaming
629 (package
630 (name "python-conda-package-streaming")
631 (version "0.12.0")
632 (source
633 (origin
634 (method url-fetch)
635 (uri (pypi-uri "conda_package_streaming" version))
636 (sha256
637 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
638 (build-system pyproject-build-system)
639 (arguments
640 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
641 (list #:tests? #f))
642 (native-inputs
643 (list python-flit-core))
644 (propagated-inputs
645 (list python-requests
646 python-zstandard))
647 (home-page "https://conda.github.io/conda-package-streaming/")
648 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
649 (description
650 "This package provides an efficient library to read from new and old format
651@code{.conda} and @code{.tar.bz2} conda packages.")
652 (license license:bsd-3)))
653
654(define-public python-dependency-groups
655 (package
656 (name "python-dependency-groups")
657 (version "1.3.1")
658 (source
659 (origin
660 (method url-fetch)
661 (uri (pypi-uri "dependency_groups" version))
662 (sha256
663 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
664 (build-system pyproject-build-system)
665 (propagated-inputs (list python-packaging python-tomli))
666 (native-inputs (list python-flit-core python-pytest))
667 (home-page "https://dependency-groups.readthedocs.io/")
668 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
669 (description
670 "This package provides a library which is able to parse dependency groups (PEP
671735), following includes, and provide that data as output.")
672 (license license:expat)))
673
674(define-public python-devpi-common
675 (package
676 (name "python-devpi-common")
677 (version "4.0.4")
678 (source
679 (origin
680 (method url-fetch)
681 (uri (pypi-uri "devpi_common" version))
682 (sha256
683 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
684 (build-system pyproject-build-system)
685 (propagated-inputs (list python-lazy python-packaging-legacy
686 python-requests))
687 (native-inputs
688 (list python-pytest
689 python-setuptools
690 python-wheel))
691 (home-page "https://github.com/devpi/devpi")
692 (synopsis
693 "Utilities jointly used by devpi-server, devpi-client and others")
694 (description
695 "This package provides utilities jointly used by devpi-server,
696devpi-client and others.")
697 (license license:expat)))
698
699(define-public python-devpi-client
700 (package
701 (name "python-devpi-client")
702 (version "7.2.0")
703 (source
704 (origin
705 (method url-fetch)
706 (uri (pypi-uri "devpi-client" version))
707 (sha256
708 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
709 (build-system pyproject-build-system)
710 (arguments
711 (list
712 #:test-flags
713 ;; This wants to use pip install
714 '(list "--ignore=testing/test_upload.py"
715 ;; These complain about finding distutils. It's not my fault,
716 ;; mate, setuptools is right there, but you won't pick it!
717 "--ignore=testing/test_list_remove.py"
718 "--ignore=testing/test_main.py"
719 "--ignore=testing/test_install.py"
720 "--ignore=testing/test_functional.py"
721 "--ignore=testing/test_test.py")
722 #:phases
723 '(modify-phases %standard-phases
724 (add-after 'unpack 'patch-tests
725 (lambda _
726 ;; Do not replace the directory name of the store item.
727 (substitute* "testing/conftest.py"
728 (("\"devpi-server\", \"devpi-init\"")
729 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
730 (add-before 'check 'set-HOME
731 ;; Some tests need this
732 (lambda _ (setenv "HOME" "/tmp"))))))
733 (propagated-inputs (list python-pypa-build
734 python-check-manifest
735 python-colorama
736 python-devpi-common
737 python-iniconfig
738 python-pkginfo
739 python-platformdirs
740 python-pluggy
741 python-pypitoken
742 python-tomli))
743 (native-inputs
744 (list python-devpi-server
745 python-pytest
746 python-setuptools
747 python-virtualenv))
748 (home-page "https://github.com/devpi/devpi")
749 (synopsis "Devpi upload/install/... commands for Python developers")
750 (description
751 "The devpi command line tool is typically used in conjunction with
752devpi-server. It allows uploading, testing and installing packages from devpi
753indexes.")
754 (license license:expat)))
755
756(define-public python-devpi-process
757 (package
758 (name "python-devpi-process")
759 (version "1.0.2")
760 (source
761 (origin
762 (method url-fetch)
763 (uri (pypi-uri "devpi_process" version))
764 (sha256
765 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
766 (build-system pyproject-build-system)
767 (arguments
768 (list
769 #:phases
770 '(modify-phases %standard-phases
771 (add-after 'unpack 'relax-requirements
772 (lambda _
773 ;; Our package is too old, sorry.
774 (substitute* "pyproject.toml"
775 (("typing-extensions>=4.12.2")
776 "typing-extensions>=4.10.0"))))
777 (add-after 'unpack 'patch-tool-locations
778 (lambda* (#:key inputs #:allow-other-keys)
779 (substitute* "src/devpi_process/__init__.py"
780 (("_exe\\(\"devpi-init\"\\)")
781 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
782 (("_exe\\(\"devpi-server\"\\)")
783 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
784 (("_exe\\(\"devpi\"\\)")
785 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
786 (propagated-inputs (list python-devpi-client python-devpi-server
787 python-typing-extensions))
788 (native-inputs
789 (list nss-certs-for-test
790 python-hatchling
791 python-hatch-vcs
792 python-httpx
793 python-pytest))
794 (home-page "https://github.com/devpi/devpi")
795 (synopsis "API to create and use a devpi server process")
796 (description
797 "This package provides a programmatic API to create and use a devpi
798server process.")
799 (license license:expat)))
800
801(define-public python-devpi-server
802 (package
803 (name "python-devpi-server")
804 (version "6.17.0")
805 (source
806 (origin
807 (method url-fetch)
808 (uri (pypi-uri "devpi_server" version))
809 (sha256
810 (base32 "13lybrw8j6zjxwvx6sk7bw6854hd2m18s1xcvl0q100j4n06p6ml"))))
811 (build-system pyproject-build-system)
812 (arguments
813 (list
814 #:test-flags
815 ;; These all fail with: "module 'py' has no attribute 'io'"
816 #~(list "--ignore=test_devpi_server/test_importexport.py"
817 "--ignore=test_devpi_server/test_main.py"
818 "--ignore=test_devpi_server/test_genconfig.py")
819 #:phases
820 #~(modify-phases %standard-phases
821 (add-after 'unpack 'relax-requirements
822 (lambda _
823 (substitute* "pyproject.toml"
824 ;; It straggles to check argon2 in passlib on any versions
825 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
826 ;; such extra feature 'argon2'",).
827 (("passlib\\[argon2\\]") "passlib")))))))
828 (propagated-inputs (list python-argon2-cffi
829 python-attrs
830 python-defusedxml
831 python-devpi-common
832 python-httpx
833 python-itsdangerous
834 python-lazy
835 python-legacy-cgi
836 python-passlib
837 python-platformdirs
838 python-pluggy
839 python-py
840 python-pyramid
841 python-repoze-lru
842 python-ruamel.yaml-0.16 ;FIXME: rename
843 python-strictyaml
844 python-waitress))
845 (native-inputs
846 (list python-execnet
847 python-pytest
848 python-pytest-asyncio
849 python-pytest-timeout
850 python-setuptools
851 python-webtest))
852 (home-page "https://devpi.net")
853 (synopsis "Pypi.org caching server")
854 (description "This package implements a reliable private and pypi.org
855caching server.")
856 (license license:expat)))
857
858(define-public python-dicomweb-client
859 (package
860 (name "python-dicomweb-client")
861 (version "0.60.0")
862 (source
863 (origin
864 (method git-fetch)
865 (uri (git-reference
866 (url "https://github.com/ImagingDataCommons/dicomweb-client")
867 (commit (string-append "v" version))))
868 (file-name (git-file-name name version))
869 (sha256
870 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
871 (build-system pyproject-build-system)
872 (arguments
873 (list
874 #:phases
875 #~(modify-phases %standard-phases
876 (add-after 'unpack 'remove-dynamic-versioning
877 (lambda _
878 (substitute* "pyproject.toml"
879 ;; Dynamic versioning via 'uv-dynamic-versioning' is
880 ;; not suitable for Guix.
881 (("dynamic = \\[\"version\"\\]")
882 (string-append "version = \""
883 #$version "\""))))))))
884 (native-inputs
885 (list python-hatchling
886 python-pytest
887 python-pytest-localserver))
888 (propagated-inputs
889 (list python-numpy
890 python-pillow
891 python-pydicom
892 python-requests
893 python-retrying))
894 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
895 (synopsis "Python client for DICOMweb RESTful services")
896 (description
897 "@code{dicomweb_client} provides client interfaces for DICOMweb RESTful
898services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
899DICOM objects over the web, respectively.")
900 (license license:expat)))
901
902(define-public python-docusign-esign
903 (package
904 (name "python-docusign-esign")
905 (version "5.0.0")
906 (source
907 (origin
908 (method url-fetch)
909 (uri (pypi-uri "docusign-esign" version))
910 (sha256
911 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
912 (build-system pyproject-build-system)
913 ;; Testing requires undocumented setup changes with network access to
914 ;; <demo.docusign.net>, and so testing is disabled here.
915 (arguments `(#:tests? #f))
916 (native-inputs
917 (list python-setuptools
918 python-wheel))
919 (propagated-inputs
920 (list python-certifi
921 python-dateutil
922 python-urllib3
923 python-pyjwt
924 python-cryptography))
925 (home-page "https://developers.docusign.com/")
926 (synopsis "DocuSign Python Client")
927 (description
928 "The Official DocuSign Python Client Library used to interact with the
929eSign REST API. Send, sign, and approve documents using this client.")
930 (license license:expat)))
931
932(define-public python-domain-connect
933 (package
934 (name "python-domain-connect")
935 (version "0.0.11")
936 (source
937 (origin
938 (method git-fetch) ;no tests in PyPI archive
939 (uri (git-reference
940 (url "https://github.com/Domain-Connect/domainconnect_python")
941 (commit (string-append "v" version))))
942 (file-name (git-file-name name version))
943 (sha256
944 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
945 (build-system pyproject-build-system)
946 (arguments
947 (list
948 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
949 ;; present in container.
950 #:tests? #f
951 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
952 (native-inputs
953 (list python-setuptools))
954 (propagated-inputs
955 (list python-cryptography
956 python-dnspython
957 python-future
958 python-publicsuffixlist))
959 (home-page "https://github.com/Domain-Connect/domainconnect_python")
960 (synopsis "Client library for Domain Connect protocol")
961 (description
962 "This package provides a Service Provider functionality in both Sync and
963Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
964 (license license:expat)))
965
966(define-public python-domain-connect-dyndns
967 (package
968 (name "python-domain-connect-dyndns")
969 (version "0.0.9")
970 (source
971 (origin
972 (method url-fetch)
973 (uri (pypi-uri "domain-connect-dyndns" version))
974 (sha256
975 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
976 (build-system pyproject-build-system)
977 (arguments
978 (list
979 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
980 ;; present in container.
981 #:tests? #f
982 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
983 (native-inputs
984 (list python-setuptools
985 python-wheel))
986 (propagated-inputs
987 (list python-dnspython
988 python-domain-connect
989 python-requests
990 python-validators))
991 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
992 (synopsis "Domain Connect Dynamic DNS in Python")
993 ;; Project lacks meaningful description in README, see
994 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
995 (description
996 "Python client library for Dynamic DNS using
997@url{https://www.domainconnect.org/, Domain Connect} protocol.")
998 (license license:expat)))
999
1000(define-public python-dropbox
1001 (package
1002 (name "python-dropbox")
1003 (version "12.0.2")
1004 (source
1005 (origin
1006 (method git-fetch) ; no tests in PyPI release
1007 (uri (git-reference
1008 (url "https://github.com/dropbox/dropbox-sdk-python")
1009 (commit (string-append "v" version))))
1010 (file-name (git-file-name name version))
1011 (sha256
1012 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
1013 (build-system pyproject-build-system)
1014 (arguments
1015 (list
1016 #:test-flags
1017 #~(list "-k" (string-join
1018 ;; Network access is required.
1019 (list "not test_bad_auth"
1020 "test_app_auth"
1021 "test_bad_pins"
1022 "test_bad_pins_session"
1023 "test_downscope"
1024 "test_multi_auth"
1025 "test_path_root"
1026 "test_path_root_err"
1027 "test_refresh"
1028 "test_rpc"
1029 "test_team"
1030 "test_upload_download"
1031 "test_versioned_route")
1032 " and not "))
1033 #:phases
1034 #~(modify-phases %standard-phases
1035 (add-after 'unpack 'relax-requirements
1036 (lambda _
1037 (substitute* "setup.py"
1038 ;; 'stone>=2,<3.3.3',
1039 ((">=2,<3.3.3") ">=2,<3.4.0"))))
1040 (add-before 'check 'pre-check
1041 (lambda _
1042 ;; Otherwise tests setup erroring.
1043 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
1044 (setenv "LEGACY_USER_CLIENT_ID" "guix")
1045 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
1046 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
1047 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
1048 (setenv "SCOPED_USER_CLIENT_ID" "guix")
1049 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
1050 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
1051 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
1052 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
1053 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
1054 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
1055 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
1056 (native-inputs
1057 (list nss-certs-for-test
1058 python-mock
1059 python-pytest
1060 python-pytest-mock
1061 python-setuptools
1062 python-wheel))
1063 (propagated-inputs
1064 (list python-requests python-six python-stone))
1065 (home-page "https://www.dropbox.com/developers")
1066 (synopsis "Official Dropbox API Client")
1067 (description "This package provides a Python SDK for integrating with the
1068Dropbox API v2.")
1069 (license license:expat)))
1070
1071(define-public python-dukpy
1072 (package
1073 (name "python-dukpy")
1074 (version "0.5.1")
1075 (source
1076 (origin
1077 (method git-fetch)
1078 (uri (git-reference
1079 (url "https://github.com/amol-/dukpy")
1080 (commit version)))
1081 (file-name (git-file-name name version))
1082 (sha256
1083 (base32 "1qsqfgy12frrdikjf353bsvhln11jixc3qs9rc1zra55k0569036"))))
1084 (build-system pyproject-build-system)
1085 (arguments
1086 (list
1087 #:test-flags
1088 #~(list #$@(map (lambda (test)
1089 (string-append "--deselect=tests/test_installer.py"
1090 "::TestPackageInstaller::"
1091 test))
1092 ;; Network access is required.
1093 (list "test_install_command"
1094 "test_install_command_latest_ver"
1095 "test_install_command_substrate_error"
1096 "test_install_command_without_dest"
1097 "test_install_react"
1098 "test_install_scoped_package"
1099 "test_install_unexisting_package"
1100 "test_install_unexisting_version")))))
1101 (native-inputs
1102 (list python-mock
1103 python-pytest
1104 python-setuptools
1105 python-webassets))
1106 (home-page "https://github.com/amol-/dukpy")
1107 (synopsis "Simple JavaScript interpreter for Python")
1108 (description
1109 "DukPy is a simple JavaScript interpreter for Python built on top of
1110duktape engine without any external dependency. It comes with a bunch of
1111common transpilers built-in for convenience:
1112@itemize
1113@item CoffeeScript
1114@item BabelJS
1115@item TypeScript
1116@item JSX
1117@item LESS
1118@end itemize")
1119 (license license:expat)))
1120
1121(define-public python-essentials-openapi
1122 (package
1123 (name "python-essentials-openapi")
1124 (version "1.2.1")
1125 (source
1126 (origin
1127 (method git-fetch)
1128 (uri (git-reference
1129 (url "https://github.com/Neoteroi/essentials-openapi")
1130 (commit (string-append "v" version))))
1131 (file-name (git-file-name name version))
1132 (sha256
1133 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
1134 (build-system pyproject-build-system)
1135 (native-inputs
1136 (list python-flask
1137 python-hatchling
1138 python-pydantic
1139 python-pytest
1140 python-rich))
1141 (propagated-inputs
1142 (list python-essentials
1143 python-httpx
1144 python-jinja2
1145 python-markupsafe
1146 python-pyyaml))
1147 (home-page "https://github.com/Neoteroi/essentials-openapi/")
1148 (synopsis "Generator for OpenAPI Documentation")
1149 (description
1150 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
1151formats. Generator for other kinds of documents from OpenAPI Documentation
1152files.")
1153 (license license:expat)))
1154
1155(define-public python-eventlet
1156 (package
1157 (name "python-eventlet")
1158 (version "0.40.4")
1159 (source
1160 (origin
1161 (method url-fetch)
1162 (uri (pypi-uri "eventlet" version))
1163 (sha256
1164 (base32
1165 "0vzjrb7n3x7gdrxiw4dacdxvz0m8saaw9w7n1n9v865yn49gggk9"))))
1166 (build-system pyproject-build-system)
1167 (arguments
1168 (list
1169 #:test-flags
1170 '(list "-k"
1171 (string-append
1172 "not TestGetaddrinfo"
1173 " and not TestProxyResolver"
1174 " and not test_noraise_dns_tcp"
1175 " and not test_raise_dns_tcp"
1176 " and not test_hosts_no_network"
1177 " and not test_import_rdtypes_then_eventlet"
1178 " and not test_patcher_existing_locks"
1179 " and not test_dns_methods_are_green"))
1180 #:phases
1181 #~(modify-phases %standard-phases
1182 (add-after 'unpack 'avoid-OSError
1183 (lambda _
1184 ;; If eventlet tries to load greendns, an OSError is thrown when
1185 ;; getprotobyname is called. Thankfully there is an environment
1186 ;; variable to disable the greendns import, so use it. Note that
1187 ;; this error is propagated to child packages too, so enforce the
1188 ;; changed default.
1189 (substitute* "eventlet/green/socket.py"
1190 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
1191 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")")))))))
1192 (native-inputs
1193 (list python-hatchling
1194 python-hatch-vcs
1195 python-pytest))
1196 (propagated-inputs
1197 (list python-dnspython python-greenlet))
1198 (home-page "https://eventlet.net")
1199 (synopsis "Concurrent networking library for Python")
1200 (description
1201 "Eventlet is a concurrent networking library for Python that
1202allows you to change how you run your code, not how you write it.
1203It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1204Coroutines ensure that the developer uses a blocking style of programming
1205that is similar to threading, but provide the benefits of non-blocking I/O.
1206The event dispatch is implicit, which means you can easily use @code{Eventlet}
1207from the Python interpreter, or as a small part of a larger application.
1208
1209Note: In Guix, this package assumes the environment variable
1210@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
1211to anything else.")
1212 (license license:expat)))
1213
1214(define-public python-feedgen
1215 (package
1216 (name "python-feedgen")
1217 (version "1.0.0")
1218 (source
1219 (origin
1220 (method git-fetch)
1221 (uri (git-reference
1222 (url "https://github.com/lkiesow/python-feedgen")
1223 (commit (string-append "v" version))))
1224 (file-name (git-file-name name version))
1225 (sha256
1226 (base32
1227 "1ppwxp9yck29pk2p2dlrrad6rz16l9h4fhcajp9yb7ns94fm5v3l"))))
1228 (build-system pyproject-build-system)
1229 (propagated-inputs
1230 (list python-dateutil
1231 python-lxml))
1232 (native-inputs
1233 (list python-pytest
1234 python-setuptools))
1235 (home-page "https://feedgen.kiesow.be")
1236 (synopsis "Atom and RSS feed generator")
1237 (description
1238 "This module can be used to generate web feeds in both Atom and RSS
1239format. It also extensible and comes with an extension to produce podcasts.")
1240 ;; The README says that this package is released under both licenses, and
1241 ;; permits the user to choose whichever is more convenient to them.
1242 (license (list license:bsd-2
1243 license:lgpl3+))))
1244
1245(define-public python-flask-caching
1246 (package
1247 (name "python-flask-caching")
1248 (version "2.3.1")
1249 (source
1250 (origin
1251 (method url-fetch)
1252 (uri (pypi-uri "flask_caching" version))
1253 (sha256
1254 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
1255 (build-system pyproject-build-system)
1256 (arguments
1257 (list
1258 #:test-flags
1259 ;; Tests requiring running Redis or dated python-cache.
1260 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
1261 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
1262 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
1263 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
1264 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
1265 "-k" "not test_client_override_reflected_on_cachelib_methods")))
1266 (native-inputs
1267 (list python-pytest
1268 python-pytest-asyncio
1269 python-pytest-xprocess
1270 python-setuptools))
1271 (propagated-inputs
1272 (list python-cachelib
1273 python-flask))
1274 (home-page "https://github.com/pallets-eco/flask-caching")
1275 (synopsis "Caching extension for Flask")
1276 (description
1277 "This package provides a caching support to Flask applications, it's a
1278fort ok https://github.com/thadeusb/flask-cache.")
1279 (license license:bsd-3)))
1280
1281(define-public python-flask-paginate
1282 (package
1283 (name "python-flask-paginate")
1284 (version "2024.4.12")
1285 (source
1286 (origin
1287 (method git-fetch)
1288 (uri (git-reference
1289 (url "https://github.com/lixxu/flask-paginate")
1290 (commit (string-append "v" version))))
1291 (file-name (git-file-name name version))
1292 (sha256
1293 (base32 "1q4ajwk0pzc6934g07gdryjcwi6rd9iqcwv5g5s718dfx2bj1831"))))
1294 (arguments
1295 (list #:test-backend #~'custom
1296 #:test-flags #~(list "tests/tests.py")))
1297 (build-system pyproject-build-system)
1298 (native-inputs
1299 (list python-pytest
1300 python-setuptools))
1301 (propagated-inputs
1302 (list python-flask))
1303 (home-page "https://github.com/lixxu/flask-paginate")
1304 (synopsis "Simple paginate support for Flask")
1305 (description
1306 "Flask-paginate is a simple pagination extension for Flask which is
1307inspired by Ruby's will_paginate library. It supports several CSS frameworks.")
1308 (license license:bsd-3)))
1309
1310(define-public python-flask-limiter
1311 (package
1312 (name "python-flask-limiter")
1313 (version "4.1.1")
1314 (source
1315 (origin
1316 (method git-fetch)
1317 (uri (git-reference
1318 (url "https://github.com/alisaifee/flask-limiter")
1319 (commit version)))
1320 (file-name (git-file-name name version))
1321 (sha256
1322 (base32 "18n12iayzw6qqys26824j5lfbphfcammpmyrvys1k0rn4xcbifln"))))
1323 (build-system pyproject-build-system)
1324 (arguments
1325 (list
1326 ;; tests: 155 passed, 620 deselected
1327 #:test-flags
1328 #~(list "-k" (simple-format #f "not (~a)"
1329 (string-join
1330 (append
1331 ;; The test suite spawns storages in Docker.
1332 '("memcache" "reset_unsupported")
1333 '("mongo")
1334 '("redis" "clear_limits"
1335 "constructor_arguments_over_config"
1336 "custom_key_prefix" "fallback_to_memory"))
1337 " or ")))
1338 #:phases
1339 #~(modify-phases %standard-phases
1340 (add-before 'check 'adjust-tests
1341 (lambda _
1342 (substitute* "pytest.ini"
1343 ((".*--cov=.*") ""))
1344 (substitute* (find-files "tests" "\\.py$")
1345 (("import pymemcache.*") "")
1346 (("import pymongo.*") "")
1347 (("import redis.*") "")))))))
1348 (native-inputs (list python-flask-restful
1349 python-hatch-vcs
1350 python-hatchling
1351 python-hiro
1352 python-pytest
1353 python-pytest-check
1354 python-pytest-mock))
1355 (propagated-inputs (list python-flask
1356 python-limits
1357 python-ordered-set
1358 python-rich))
1359 (home-page "https://flask-limiter.readthedocs.org/")
1360 (synopsis "Rate limiting for Flask applications")
1361 (description
1362 "Flask-Limiter adds rate limiting to Flask applications.
1363Rate limits can be configured at different levels such as:
1364
1365@itemize
1366@item Application wide global limits per user
1367@item Default limits per route
1368@item By blueprints
1369@item By class-based views
1370@item By individual routes
1371@end itemize")
1372 (license license:expat)))
1373
1374(define-public python-gdown
1375 (package
1376 (name "python-gdown")
1377 (version "5.2.0")
1378 (source
1379 (origin
1380 (method url-fetch)
1381 (uri (pypi-uri "gdown" version))
1382 (sha256
1383 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
1384 (build-system pyproject-build-system)
1385 (arguments (list #:tests? #f)) ;network access is required
1386 (native-inputs
1387 (list python-hatch-fancy-pypi-readme
1388 python-hatch-vcs
1389 python-hatchling))
1390 (propagated-inputs
1391 (list python-beautifulsoup4
1392 python-filelock
1393 python-requests
1394 python-tqdm))
1395 (home-page "https://github.com/wkentaro/gdown")
1396 (synopsis "Google Drive Public File/Folder Downloader")
1397 (description
1398 "This package implements a functionality to download large files
1399recursively from Google Drive with option to filter them by file
1400formats (PDF/XML/CSV).")
1401 (license license:expat)))
1402
1403(define-public python-globus-sdk
1404 (package
1405 (name "python-globus-sdk")
1406 (version "4.4.0")
1407 (source
1408 (origin
1409 (method git-fetch)
1410 (uri (git-reference
1411 (url "https://github.com/globus/globus-sdk-python")
1412 (commit version)))
1413 (file-name (git-file-name name version))
1414 (sha256
1415 (base32 "1d0zw9dkpdhsf9zdg3nk6b55gqwzc3v2rj76nj7999hjmq8350vh"))))
1416 (build-system pyproject-build-system)
1417 (arguments
1418 (list
1419 #:phases
1420 #~(modify-phases %standard-phases
1421 (add-before 'check 'pre-check
1422 (lambda _ (setenv "HOME" "/tmp"))))))
1423 (native-inputs
1424 (list python-flaky
1425 python-pytest
1426 python-pytest-randomly
1427 python-responses
1428 python-setuptools))
1429 (propagated-inputs
1430 (list python-cryptography
1431 python-importlib-resources
1432 python-pyjwt
1433 python-requests))
1434 (home-page "https://github.com/globus/globus-sdk-python")
1435 (synopsis "Globus SDK for Python")
1436 (description
1437 "This package provides a SDK for convenient Pythonic interface to
1438@url{https://www.globus.org/, Globus} APIs.")
1439 (license license:asl2.0)))
1440
1441(define-public python-guardpost
1442 (package
1443 (name "python-guardpost")
1444 (version "1.0.4")
1445 (source
1446 (origin
1447 (method git-fetch)
1448 (uri (git-reference
1449 (url "https://github.com/Neoteroi/guardpost")
1450 (commit (string-append "v" version))))
1451 (file-name (git-file-name name version))
1452 (sha256
1453 (base32 "1xsakqn36g2h1s5rnbaf1lasx1jn4skqhmb8kdl1k4pgxp5sczyy"))))
1454 (build-system pyproject-build-system)
1455 (arguments
1456 (list
1457 ;; Possible timing issue, see:
1458 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
1459 #:test-flags '(list "--ignore=tests/test_jwts.py")))
1460 (native-inputs
1461 (list python-flask
1462 python-hatchling
1463 python-pytest
1464 python-pytest-asyncio))
1465 (propagated-inputs
1466 (list python-rodi
1467 ;; [optional]
1468 python-cryptography
1469 python-essentials
1470 python-pyjwt))
1471 (home-page "https://github.com/Neoteroi/GuardPost/")
1472 (synopsis
1473 "Authentication and authorization framework for Python applications")
1474 (description
1475 "GuardPost is a framework to handle authentication and
1476authorization in asynchronous Python applications.
1477
1478Its features include
1479
1480@itemize
1481@item Strategy to implement authentication.
1482@item Strategy to implement authorization.
1483@item Support for dependency injection
1484@item Built-in support for JSON Web Tokens (JWTs) authentication.
1485@end itemize")
1486 (license license:expat)))
1487
1488(define-public python-hookdns
1489 (package
1490 (name "python-hookdns")
1491 (version "2.0.0")
1492 (source
1493 (origin
1494 (method url-fetch)
1495 (uri (pypi-uri "hookdns" version))
1496 (sha256
1497 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
1498 (build-system pyproject-build-system)
1499 (arguments
1500 (list
1501 #:test-flags
1502 #~(list "-k" (string-join
1503 ;; Tests requiring networking.
1504 (list
1505 "not test_patch_contextmanager_with_another_hostname"
1506 "test_patch_contextmanager_with_another_hostname_ipv6"
1507 "test_patch_contextmanager_with_ipv4"
1508 "test_patch_contextmanager_with_name"
1509 "test_patch_contextmanager_with_public_fqdn_and_"
1510 "test_patch_contextmanager_with_unknown_hostname"
1511 "test_patch_decorator_with_another_hostname"
1512 "test_patch_decorator_with_another_hostname_ipv6"
1513 "test_patch_decorator_with_ipv4"
1514 "test_patch_decorator_with_name"
1515 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
1516 "test_patch_decorator_with_unknown_hostname"
1517 "test_real_getaddrinfo_with_name_ipv6"
1518 "test_real_getaddrinfo_with_public_fqdn_ipv4"
1519 "test_real_getaddrinfo_with_public_fqdn_ipv6"
1520 "test_real_gethostbyname_ex_with_public_fqdn"
1521 "test_real_gethostbyname_with_public_fqdn"
1522 "test_real_requests_ip"
1523 "test_real_requests_name"
1524 "test_real_requests_with_public_fqdn"
1525 "test_reentrant")
1526 " and not "))))
1527 (native-inputs
1528 (list python-pytest
1529 python-requests
1530 python-setuptools
1531 python-wheel))
1532 (home-page "https://github.com/cle-b/hookdns")
1533 (synopsis "DNS resolution customization library")
1534 (description
1535 "HookDNS implements functionality that allows for modifying name
1536resolution in a Python script without any changes to the hosts file or the use
1537of a fake DNS resolver.")
1538 (license license:asl2.0)))
1539
1540(define-public python-httpretty
1541 (package
1542 (name "python-httpretty")
1543 (version "1.1.4")
1544 (source
1545 (origin
1546 (method url-fetch)
1547 (uri (pypi-uri "httpretty" version))
1548 (sha256
1549 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
1550 (build-system pyproject-build-system)
1551 (arguments
1552 (list
1553 #:test-flags
1554 ;; Only run Unit tests.
1555 #~(list "--ignore=tests/bugfixes"
1556 "--ignore=tests/functional"
1557 "--ignore=tests/pyopenssl"
1558 "-k" (string-join
1559 ;; Tests pattern failing with one of these errors:
1560 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
1561 ;; has no attribute 'should'
1562 ;; AttributeError: 'function' object has no attribute
1563 ;; 'when'
1564 ;; AttributeError: 'AssertionBuilder' object has no
1565 ;; attribute 'should_not'
1566 (list "not fake_socket_passes_through"
1567 "fakesock_socket"
1568 "request_parse_body_when"
1569 "test_Entry_class_normalizes_headers"
1570 "test_has_request"
1571 "test_httpretty_should_raise_proper"
1572 "test_parse_request_line_connect"
1573 "test_request_parse_querystring"
1574 "test_request_string_representation"
1575 "test_request_stubs_internals")
1576 " and not "))))
1577 (native-inputs
1578 (list nss-certs-for-test
1579 python-freezegun
1580 python-mock
1581 python-pytest
1582 python-setuptools
1583 python-sure
1584 python-wheel))
1585 (home-page "https://httpretty.readthedocs.io")
1586 (synopsis "HTTP client mock for Python")
1587 (description
1588 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
1589@code{fakeweb}.")
1590 (license license:expat)))
1591
1592(define-public python-justhtml
1593 (package
1594 (name "python-justhtml")
1595 (version "1.13.0")
1596 (source
1597 (origin
1598 (method git-fetch)
1599 (uri (git-reference
1600 (url "https://github.com/emilstenstrom/justhtml")
1601 (commit (string-append "v" version))))
1602 (file-name (git-file-name name version))
1603 (sha256
1604 (base32 "1hy5w3lr08sj3pivs46nnlfsvrd9ynmicxcrjk4sxbpg7411lyj5"))))
1605 (build-system pyproject-build-system)
1606 (native-inputs
1607 (list python-hatchling))
1608 (home-page "https://github.com/emilstenstrom/justhtml")
1609 (synopsis "Pure Python HTML5 parser")
1610 (description
1611 "JustHTML is a pure Python HTML5 parser. It has a simple API and does
1612not require C extensions or system dependencies.")
1613 (license license:expat)))
1614
1615(define-public python-huggingface-hub
1616 (package
1617 (name "python-huggingface-hub")
1618 (version "0.31.4")
1619 (source
1620 (origin
1621 (method git-fetch)
1622 (uri (git-reference
1623 (url "https://github.com/huggingface/huggingface_hub")
1624 (commit (string-append "v" version))))
1625 (file-name (git-file-name name version))
1626 (sha256
1627 (base32 "1rjkrmvvyzxlbnbndrg4v9qq39grn46c26zrdjgpf114gci5pwap"))))
1628 (build-system pyproject-build-system)
1629 (arguments
1630 (list
1631 #:test-flags
1632 ;; We don't have sentence_transformers...
1633 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
1634 ;; ...nor do we have InquirerPy...
1635 "--ignore=tests/test_command_delete_cache.py"
1636 ;; ...or timm...
1637 "--ignore=contrib/timm/test_timm.py"
1638 ;; ...or spacy_huggingface_hub
1639 "--ignore=contrib/spacy/test_spacy.py"
1640 ;; These all require internet access
1641 "--ignore=tests/test_cache_no_symlinks.py"
1642 "--ignore=tests/test_cache_layout.py"
1643 "--ignore=tests/test_commit_scheduler.py"
1644 "--ignore=tests/test_file_download.py"
1645 "--ignore=tests/test_hf_api.py"
1646 "--ignore=tests/test_hf_file_system.py"
1647 "--ignore=tests/test_inference_api.py"
1648 "--ignore=tests/test_inference_async_client.py"
1649 "--ignore=tests/test_inference_client.py"
1650 "--ignore=tests/test_inference_text_generation.py"
1651 "--ignore=tests/test_login_utils.py"
1652 "--ignore=tests/test_offline_utils.py"
1653 "--ignore=tests/test_repocard.py"
1654 "--ignore=tests/test_repository.py"
1655 "--ignore=tests/test_snapshot_download.py"
1656 "--ignore=tests/test_utils_cache.py"
1657 "--ignore=tests/test_utils_git_credentials.py"
1658 "--ignore=tests/test_utils_http.py"
1659 "--ignore=tests/test_utils_pagination.py"
1660 "--ignore=tests/test_webhooks_server.py"
1661 "-k" (string-append
1662 "not test_push_to_hub"
1663 " and not test_from_pretrained_model_id_only"
1664 " and not test_from_pretrained_model_id_and_revision"
1665 ;; These all require internet access
1666 " and not test_auth"
1667 " and not test_oauth"
1668 " and not test_utils_sha"
1669 " and not test_inference_providers"
1670 " and not test_xet"))
1671 #:phases
1672 '(modify-phases %standard-phases
1673 (add-before 'check 'pre-check
1674 ;; Some tests need to write to HOME.
1675 (lambda _ (setenv "HOME" "/tmp"))))))
1676 (propagated-inputs
1677 (list python-filelock
1678 python-fsspec
1679 python-packaging
1680 python-pyyaml
1681 python-requests
1682 python-tqdm
1683 python-typing-extensions))
1684 (native-inputs
1685 (list python-aiohttp
1686 python-fastapi
1687 python-jedi
1688 python-jinja2
1689 python-numpy
1690 python-pillow
1691 python-pydantic
1692 python-pytest
1693 python-pytest-asyncio
1694 python-pytest-env
1695 python-pytest-mock
1696 python-pytest-rerunfailures
1697 python-pytest-vcr
1698 python-pytest-xdist
1699 python-setuptools
1700 python-types-requests
1701 python-types-toml
1702 python-types-urllib3
1703 python-typing-extensions
1704 python-urllib3
1705 python-wheel))
1706 (home-page "https://huggingface.co/docs/huggingface_hub/")
1707 (synopsis "Client library for accessing the huggingface.co hub")
1708 (description
1709 "This package provides a client library to download and publish models,
1710datasets and other repos on the @url{huggingface.co} hub.")
1711 (license license:asl2.0)))
1712
1713(define-public python-kubernetes
1714 (package
1715 (name "python-kubernetes")
1716 (version "35.0.0")
1717 (source
1718 (origin
1719 (method url-fetch)
1720 (uri (pypi-uri "kubernetes" version))
1721 (sha256
1722 (base32 "1vh9bzq175fzv9av3v37lcfh37yzss2d9vxrb0a84fa2ji2d601x"))))
1723 (build-system pyproject-build-system)
1724 (arguments
1725 (list
1726 #:test-flags
1727 #~(list
1728 ;; The following tests expect a local running Kubernetes cluster.
1729 "--ignore=kubernetes/e2e_test"
1730 "--ignore=kubernetes/dynamic")))
1731 (native-inputs
1732 (list python-pytest
1733 python-setuptools))
1734 (propagated-inputs
1735 (list python-certifi
1736 python-dateutil
1737 python-durationpy
1738 python-google-auth
1739 python-pyyaml
1740 python-requests
1741 python-requests-oauthlib
1742 python-six ;XXX: hard dependency
1743 python-urllib3
1744 python-websocket-client))
1745 (home-page "https://github.com/kubernetes-client/python")
1746 (synopsis "Python client for Kubernetes")
1747 (description
1748 "This package provides an official Python client library for
1749@url{http://kubernetes.io, Kubernetes}.")
1750 (license license:asl2.0)))
1751
1752(define-public python-lazr-restfulclient
1753 (package
1754 (name "python-lazr-restfulclient")
1755 (version "0.14.6")
1756 (source
1757 (origin
1758 (method url-fetch)
1759 (uri (pypi-uri "lazr.restfulclient" version))
1760 (sha256
1761 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
1762 (build-system pyproject-build-system)
1763 (arguments
1764 (list
1765 #:phases
1766 #~(modify-phases %standard-phases
1767 ;; Disable part of the test suite to avoid the lazr.authentication
1768 ;; requirement, which requires 'oauth', a Python 2 only library.
1769 (add-after 'unpack 'remove-some-checks
1770 (lambda _
1771 (with-directory-excursion "src/lazr/restfulclient/tests"
1772 (for-each delete-file '("test_oauth.py" "test_docs.py")))
1773 (substitute* "setup.py"
1774 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
1775 ""))))
1776 (replace 'check
1777 (lambda* (#:key tests? #:allow-other-keys)
1778 (if tests?
1779 (invoke "zope-testrunner" "--test-path=src")
1780 (format #t "test suite not run~%")))))))
1781 (native-inputs
1782 (list python-setuptools
1783 python-testtools
1784 python-wheel
1785 python-wsgi-intercept
1786 python-zope-testrunner))
1787 (propagated-inputs
1788 (list python-distro
1789 python-httplib2
1790 python-oauthlib
1791 python-pyparsing
1792 python-setuptools
1793 python-six
1794 python-wadllib))
1795 (home-page "https://launchpad.net/lazr.restfulclient")
1796 (synopsis "Web client Python library extending wadlib")
1797 (description "This package provides a programmable client library that
1798adds functionality on top of @code{wadlib}.")
1799 (license license:lgpl3+)))
1800
1801(define-public python-launchpadlib
1802 (package
1803 (name "python-launchpadlib")
1804 (version "2.1.0")
1805 (source
1806 (origin
1807 (method url-fetch)
1808 (uri (pypi-uri "launchpadlib" version))
1809 (sha256
1810 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
1811 (build-system pyproject-build-system)
1812 (arguments
1813 (list #:phases #~(modify-phases %standard-phases
1814 (add-before 'check 'set-home
1815 (lambda _
1816 ;; Tests require a writable home.
1817 (setenv "HOME" "/tmp"))))))
1818 (propagated-inputs
1819 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
1820 (native-inputs (list python-pytest python-testresources python-wadllib
1821 python-setuptools python-wheel))
1822 (home-page "https://documentation.ubuntu.com/launchpad")
1823 (synopsis "Python client library for Launchpad's web service")
1824 (description "@code{launchpadlib} is a Python library that allows
1825scripting Launchpad via its the web service API.")
1826 (license license:lgpl3+)))
1827
1828(define-public python-lazr-uri
1829 (package
1830 (name "python-lazr-uri")
1831 (version "1.0.7")
1832 (source
1833 (origin
1834 (method url-fetch)
1835 (uri (pypi-uri "lazr_uri" version))
1836 (sha256
1837 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
1838 (build-system pyproject-build-system)
1839 (arguments
1840 (list
1841 #:phases
1842 #~(modify-phases %standard-phases
1843 (replace 'check
1844 (lambda* (#:key tests? #:allow-other-keys)
1845 (if tests?
1846 (invoke "zope-testrunner" "--test-path=src")
1847 (format #t "test suite not run~%")))))))
1848 (native-inputs (list python-setuptools python-zope-testrunner))
1849 (home-page "https://launchpad.net/lazr.uri")
1850 (synopsis "Python URI manipulation library")
1851 (description "This Python package provides a self-contained, easily
1852reusable library for parsing, manipulating, and generating URIs.")
1853 (license license:lgpl3)))
1854
1855(define-public python-ldaptor
1856 (package
1857 (name "python-ldaptor")
1858 (version "21.2.0")
1859 (source
1860 (origin
1861 (method url-fetch)
1862 (uri (pypi-uri "ldaptor" version))
1863 (sha256
1864 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
1865 (build-system pyproject-build-system)
1866 (arguments
1867 (list
1868 #:test-flags
1869 #~(list "-m" "twisted.trial"
1870 (string-append "-j" (number->string (parallel-job-count)))
1871 "ldaptor")
1872 #:phases
1873 #~(modify-phases %standard-phases
1874 (add-after 'unpack 'python-3.12-patch
1875 (lambda _
1876 (substitute* "ldaptor/config.py"
1877 (("SafeConfigParser")
1878 "ConfigParser"))))
1879 (add-before 'check 'disable-failing-tests
1880 (lambda _
1881 ;; Testing with Twisted 22.4 results in infinite loop creating
1882 ;; temporary config files, see
1883 ;; <https://github.com/twisted/ldaptor/issues/238>.
1884 (delete-file "ldaptor/test/test_config.py")))
1885 (replace 'check
1886 (lambda* (#:key tests? test-flags #:allow-other-keys)
1887 (when tests?
1888 (apply invoke "python" test-flags)))))))
1889 (native-inputs
1890 (list python-setuptools
1891 python-wheel))
1892 (propagated-inputs
1893 (list python-passlib
1894 python-pyopenssl
1895 python-service-identity ; to pass sanity check, for Twisted[tls]
1896 python-pyparsing
1897 python-twisted
1898 python-zope-interface))
1899 (home-page "https://github.com/twisted/ldaptor")
1900 (synopsis "Pure-Python Twisted library for LDAP")
1901 (description
1902 "This package provides a Python Twisted library for LDAP, which key
1903feaatures are:
1904@itemize
1905@item LDAP client logic
1906@item separately-accessible LDAP and BER protocol message generation/parsing
1907@item ASCII-format LDAP filter generation and parsing
1908@item LDIF format data generation
1909@item Samba password changing logic
1910@end itemize")
1911 (license license:expat)))
1912
1913(define-public python-legacy-cgi
1914 (package
1915 (name "python-legacy-cgi")
1916 (version "2.6.1")
1917 (source
1918 (origin
1919 (method url-fetch)
1920 (uri (pypi-uri "legacy_cgi" version))
1921 (sha256
1922 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
1923 (build-system pyproject-build-system)
1924 (native-inputs (list python-poetry-core python-pytest))
1925 (home-page "https://github.com/jackrosenthal/legacy-cgi")
1926 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
1927 (description
1928 "This is a fork of the standard library modules @code{cgi} and
1929@code{cgitb}. They are slated to be removed from the Python standard library
1930in Python 3.13 by PEP-594.")
1931 (license license:psfl)))
1932
1933(define-public python-librouteros
1934 (package
1935 (name "python-librouteros")
1936 (version "4.0.0")
1937 (source
1938 (origin
1939 (method git-fetch)
1940 (uri (git-reference
1941 (url "https://github.com/luqasz/librouteros")
1942 (commit version)))
1943 (file-name (git-file-name name version))
1944 (sha256
1945 (base32 "0in952b2idb5j8v6sxfm21gqbr5i5776w5ir0hdsxjrl2f29305v"))))
1946 (build-system pyproject-build-system)
1947 (arguments
1948 (list
1949 #:build-backend "hatchling.build"
1950 #:test-flags
1951 #~(list "tests/unit")))
1952 (native-inputs
1953 (list python-hatchling
1954 python-pytest
1955 python-pytest-asyncio
1956 python-stamina))
1957 (home-page "https://github.com/luqasz/librouteros")
1958 (synopsis "Python implementation of MikroTik RouterOS API")
1959 (description
1960 "This package implements MikroTik's @code{RouterOS} API.")
1961 (license license:gpl2+)))
1962
1963(define-public python-opentelemetry-api
1964 (package
1965 (name "python-opentelemetry-api")
1966 (version "1.37.0")
1967 (source
1968 (origin
1969 (method url-fetch)
1970 (uri (pypi-uri "opentelemetry_api" version))
1971 (sha256
1972 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
1973 (build-system pyproject-build-system)
1974 (propagated-inputs (list python-importlib-metadata
1975 python-typing-extensions))
1976 (native-inputs (list python-hatchling
1977 python-opentelemetry-test-utils-bootstrap))
1978 (home-page "https://opentelemetry.io/docs/languages/python/")
1979 (synopsis "OpenTelemetry Python API")
1980 (description "@code{OpenTelemetry} Python API.")
1981 (license license:asl2.0)))
1982
1983(define-public python-opentelemetry-api-bootstrap
1984 (hidden-package
1985 (package/inherit python-opentelemetry-api
1986 (name "python-opentelemetry-api-bootstrap")
1987 (arguments
1988 (list
1989 #:tests? #f))
1990 (native-inputs (list python-hatchling)))))
1991
1992(define-public python-opentelemetry-sdk
1993 (package
1994 (name "python-opentelemetry-sdk")
1995 (version "1.37.0")
1996 (source
1997 (origin
1998 (method url-fetch)
1999 (uri (pypi-uri "opentelemetry_sdk" version))
2000 (sha256
2001 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
2002 (build-system pyproject-build-system)
2003 (propagated-inputs (list python-opentelemetry-api
2004 python-opentelemetry-semantic-conventions
2005 python-typing-extensions))
2006 (native-inputs (list python-hatchling
2007 python-opentelemetry-test-utils-bootstrap
2008 python-pytest))
2009 (home-page "https://opentelemetry.io/docs/languages/python/")
2010 (synopsis "OpenTelemetry Python SDK")
2011 (description "@code{OpenTelemetry} Python SDK.")
2012 (license license:asl2.0)))
2013
2014(define-public python-opentelemetry-sdk-bootstrap
2015 (hidden-package
2016 (package/inherit python-opentelemetry-sdk
2017 (name "python-opentelemetry-sdk-bootstrap")
2018 (arguments (list #:tests? #f))
2019 (propagated-inputs (list python-opentelemetry-api-bootstrap
2020 python-opentelemetry-semantic-conventions-bootstrap))
2021 (native-inputs (list python-hatchling)))))
2022
2023(define-public python-opentelemetry-semantic-conventions
2024 (package
2025 (name "python-opentelemetry-semantic-conventions")
2026 (version "0.58b0")
2027 (source
2028 (origin
2029 (method url-fetch)
2030 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
2031 (sha256
2032 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
2033 (build-system pyproject-build-system)
2034 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
2035 (native-inputs (list python-hatchling))
2036 (home-page "https://opentelemetry.io/docs/languages/python/")
2037 (synopsis "OpenTelemetry Semantic Conventions")
2038 (description "@code{OpenTelemetry} Semantic Conventions.")
2039 (license license:asl2.0)))
2040
2041(define-public python-opentelemetry-semantic-conventions-bootstrap
2042 (hidden-package
2043 (package/inherit python-opentelemetry-semantic-conventions
2044 (name "python-opentelemetry-semantic-conventions-bootstrap")
2045 (arguments
2046 (list
2047 #:tests? #f))
2048 (propagated-inputs (list python-opentelemetry-api-bootstrap
2049 python-typing-extensions)))))
2050
2051(define-public python-opentelemetry-test-utils
2052 (package
2053 (name "python-opentelemetry-test-utils")
2054 (version "0.58b0")
2055 (source
2056 (origin
2057 (method url-fetch)
2058 (uri (pypi-uri "opentelemetry_test_utils" version))
2059 (sha256
2060 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
2061 (build-system pyproject-build-system)
2062 (arguments (list #:tests? #f)) ; No tests in the wheel.
2063 (propagated-inputs
2064 (list python-asgiref
2065 python-opentelemetry-api
2066 python-opentelemetry-sdk))
2067 (native-inputs (list python-hatchling))
2068 (home-page "https://opentelemetry.io/docs/languages/python/")
2069 (synopsis "Test utilities for OpenTelemetry unit tests")
2070 (description "Test utilities for @code{OpenTelemetry} unit tests.")
2071 (license license:asl2.0)))
2072
2073(define-public python-opentelemetry-test-utils-bootstrap
2074 (hidden-package
2075 (package/inherit python-opentelemetry-test-utils
2076 (name "python-opentelemetry-test-utils-bootstrap")
2077 (propagated-inputs
2078 (list python-asgiref
2079 python-opentelemetry-api-bootstrap
2080 python-opentelemetry-sdk-bootstrap)))))
2081
2082(define-public python-pathy
2083 (package
2084 (name "python-pathy")
2085 (version "0.11.0")
2086 (source
2087 (origin
2088 (method url-fetch)
2089 (uri (pypi-uri "pathy" version))
2090 (sha256
2091 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
2092 (build-system pyproject-build-system)
2093 (native-inputs
2094 (list python-mock
2095 python-pytest
2096 python-setuptools))
2097 (propagated-inputs
2098 (list python-pathlib-abc-for-python-pathy
2099 python-smart-open-6
2100 python-typer))
2101 (home-page "https://github.com/justindujardin/pathy")
2102 (synopsis "Path interface for local and cloud bucket storage")
2103 (description "Pathy is a python package (with type annotations) for
2104working with Cloud Bucket storage providers using a @code{pathlib} interface.
2105It provides @code{pathlib.Path} subclasses for local and cloud bucket
2106storage.")
2107 (license license:asl2.0)))
2108
2109(define-public python-portend
2110 (package
2111 (name "python-portend")
2112 (version "3.2.1")
2113 (source
2114 (origin
2115 (method url-fetch)
2116 (uri (pypi-uri "portend" version))
2117 (sha256
2118 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
2119 (build-system pyproject-build-system)
2120 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
2121 ;; download dependencies.
2122 (arguments
2123 '(#:test-flags '("-k" "not project")))
2124 (native-inputs
2125 (list python-pytest
2126 python-setuptools
2127 python-setuptools-scm))
2128 (propagated-inputs
2129 (list python-tempora))
2130 (home-page "https://github.com/jaraco/portend")
2131 (synopsis "Monitor TCP ports for bound or unbound states")
2132 (description
2133 "@code{python-portend} can be used to monitor TCP ports for bound or
2134unbound states. For example, waiting for a port to be occupied or freed
2135within a set timeout. @code{python-portend} can also be used directly from
2136the command line.")
2137 (license license:expat)))
2138
2139(define-public python-prawcore
2140 (package
2141 (name "python-prawcore")
2142 (version "2.4.0")
2143 (source
2144 (origin
2145 (method git-fetch)
2146 (uri (git-reference
2147 (url "https://github.com/praw-dev/prawcore")
2148 (commit (string-append "v" version))))
2149 (file-name (git-file-name name version))
2150 (sha256
2151 (base32 "1y7gh7kk002b2h1ppkr1llb2gjfnby28zvx11j4ji0wm3r3rjh5l"))))
2152 (build-system pyproject-build-system)
2153 (arguments
2154 ;; XXX: These tests fail with an incomplete request response.
2155 (list #:test-flags
2156 #~'("-k" #$(string-append
2157 "not test_revoke__access_token_with_refresh_set"
2158 " and not test_revoke__access_token_without_refresh_set"
2159 " and not test_revoke__refresh_token_with_access_set"
2160 " and not test_refresh__with_scopes"
2161 " and not test_request__patch"))))
2162 (native-inputs
2163 (list python-betamax
2164 python-betamax-matchers
2165 python-betamax-serializers
2166 python-flit-core
2167 python-mock
2168 python-pytest
2169 python-testfixtures))
2170 (propagated-inputs
2171 (list python-requests))
2172 (synopsis "Core component of PRAW")
2173 (description "PRAWcore is a low-level communication layer used by PRAW.")
2174 (home-page "https://praw.readthedocs.io/en/latest/")
2175 (license license:bsd-2)))
2176
2177(define-public python-praw
2178 (package
2179 (name "python-praw")
2180 (version "7.8.1")
2181 (source
2182 (origin
2183 (method git-fetch)
2184 (uri (git-reference
2185 (url "https://github.com/praw-dev/praw")
2186 (commit (string-append "v" version))))
2187 (file-name (git-file-name name version))
2188 (sha256
2189 (base32 "05qq43l4334cq8r8k731qnb45nq12vvfdxwbr6q84a1hafp7n4cg"))))
2190 (build-system pyproject-build-system)
2191 (arguments
2192 (list #:test-flags
2193 #~(list "--ignore=tests/units/models"
2194 "--ignore=tests/integration/models"
2195 "--ignore=tests/unit/test_config.py"
2196 "--ignore=tests/integration/test_reddit.py")))
2197 (native-inputs
2198 (list python-betamax
2199 python-betamax-matchers
2200 python-flit-core
2201 python-pytest))
2202 (propagated-inputs
2203 (list python-prawcore python-update-checker python-websocket-client))
2204 (synopsis "Python Reddit API Wrapper")
2205 (description "PRAW is a Python package that allows for simple access to
2206Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
2207API rules.")
2208 (home-page "https://praw.readthedocs.io/en/latest/")
2209 (license license:bsd-2)))
2210
2211(define-public python-frozenlist
2212 (package
2213 (name "python-frozenlist")
2214 (version "1.8.0")
2215 (source
2216 (origin
2217 (method git-fetch)
2218 (uri (git-reference
2219 (url "https://github.com/aio-libs/frozenlist")
2220 (commit (string-append "v" version))))
2221 (file-name (git-file-name name version))
2222 (sha256
2223 (base32 "0r1kxf5b562zrn04nl912i6a8y1fyc891l1284v0zj9llb97limy"))))
2224 ;; XXX: Without "wheel", the 'install phase can't find the wheel.
2225 (outputs (list "out" "wheel"))
2226 (build-system pyproject-build-system)
2227 ;; The configuration contains explicit early calls to pytest_cov.
2228 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
2229 (native-inputs
2230 (list python-cython
2231 python-expandvars
2232 python-pytest
2233 python-setuptools
2234 python-tomli))
2235 (home-page "https://github.com/aio-libs/frozenlist")
2236 (synopsis "List-like data structure for Python")
2237 (description "@code{frozenlist.FrozenList} is a list-like structure which
2238implements @code{collections.abc.MutableSequence}. It can be made immutable
2239by calling @code{FrozenList.freeze}.")
2240 (license license:asl2.0)))
2241
2242(define-public python-aiobotocore
2243 (package
2244 (name "python-aiobotocore")
2245 (version "3.0.0")
2246 (source
2247 (origin
2248 (method url-fetch)
2249 (uri (pypi-uri "aiobotocore" version))
2250 (sha256
2251 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
2252 (build-system pyproject-build-system)
2253 (arguments
2254 ;; TODO: Tests need some setupt, see Makefile.
2255 (list #:tests? #f))
2256 (native-inputs
2257 (list python-setuptools))
2258 (propagated-inputs
2259 (list python-aiohttp
2260 python-aioitertools
2261 python-botocore
2262 python-dateutil
2263 python-jmespath
2264 python-multidict
2265 python-typing-extensions
2266 python-wrapt))
2267 (home-page "https://github.com/aio-libs/aiobotocore")
2268 (synopsis "Async client for AWS services using botocore and aiohttp")
2269 (description "This package provides an async client for Amazon services
2270using botocore and aiohttp/asyncio. This library is a mostly full featured
2271asynchronous version of botocore.")
2272 (license license:asl2.0)))
2273
2274(define-public python-aiohappyeyeballs
2275 (package
2276 (name "python-aiohappyeyeballs")
2277 (properties '((commit . "cc53cf8a1d31f7b460a0114214aac66956f0e2ed")
2278 (revision . "0")))
2279 (version (git-version "2.6.1"
2280 (assoc-ref properties 'revision)
2281 (assoc-ref properties 'commit)))
2282 (source
2283 (origin
2284 (method git-fetch)
2285 (uri (git-reference
2286 (url "https://github.com/aio-libs/aiohappyeyeballs")
2287 (commit (assoc-ref properties 'commit))))
2288 (file-name (git-file-name name version))
2289 (sha256
2290 (base32 "0nc723f4sxryg5h9z8paysmy9dnqw2jy4srxp9axrxkv9qrawa7n"))))
2291 (build-system pyproject-build-system)
2292 (native-inputs
2293 (list python-poetry-core
2294 python-pytest
2295 python-pytest-asyncio))
2296 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
2297 (synopsis "Happy Eyeballs for asyncio")
2298 (description "This library exists to allow connecting with Happy
2299Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
2300DNS name.")
2301 (license license:psfl)))
2302
2303(define-public python-aioitertools
2304 (package
2305 (name "python-aioitertools")
2306 (version "0.12.0")
2307 (source
2308 (origin
2309 (method url-fetch)
2310 (uri (pypi-uri "aioitertools" version))
2311 (sha256
2312 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
2313 (build-system pyproject-build-system)
2314 (arguments
2315 (list #:test-backend #~'custom
2316 #:test-flags #~(list "-m" "aioitertools.tests")))
2317 (native-inputs
2318 (list python-flit-core))
2319 (home-page "https://pypi.org/project/aioitertools/")
2320 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
2321 (description
2322 "This package provides an implementation of itertools, builtins, and more
2323for AsyncIO and mixed-type iterables.")
2324 (license license:expat)))
2325
2326(define-public python-aiosignal
2327 (package
2328 (name "python-aiosignal")
2329 (version "1.4.0")
2330 (source
2331 (origin
2332 (method url-fetch)
2333 (uri (pypi-uri "aiosignal" version))
2334 (sha256
2335 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
2336 (build-system pyproject-build-system)
2337 (arguments
2338 (list
2339 #:phases
2340 #~(modify-phases %standard-phases
2341 (add-after 'unpack 'avoid-pytest-cov-preload
2342 (lambda _
2343 (substitute* "pytest.ini"
2344 (("-p pytest_cov") "")))))))
2345 (native-inputs
2346 (list python-pytest
2347 python-pytest-asyncio
2348 python-setuptools))
2349 (propagated-inputs
2350 (list python-frozenlist))
2351 (home-page "https://github.com/aio-libs/aiosignal")
2352 (synopsis "Callback manager for Python @code{asyncio} projects")
2353 (description "This Python module provides @code{Signal}, an abstraction to
2354register asynchronous callbacks. The @code{Signal} abstraction can be used
2355for adding, removing and dropping callbacks.")
2356 (license license:asl2.0)))
2357
2358(define-public python-aiohttp
2359 (package
2360 (name "python-aiohttp")
2361 ;; TODO: Newer versions require zlib-ng:
2362 ;; <https://github.com/zlib-ng/zlib-ng>,
2363 ;; <https://github.com/pycompression/python-zlib-ng>.
2364 (version "3.11.18")
2365 (source
2366 (origin
2367 (method url-fetch)
2368 (uri (pypi-uri "aiohttp" version))
2369 (sha256
2370 (base32 "12jmkxkc5nnk6ma6m7rrs0w4vzswfc47ffxn5m0pwav1708nx1df"))
2371 (snippet
2372 #~(begin
2373 (use-modules ((guix build utils)))
2374 ;; TODO: Unbundle the llhttp sources.
2375 ;; (delete-file-recursively "vendor")
2376 (delete-file "aiohttp/_http_parser.c")
2377 (delete-file "aiohttp/_http_writer.c")))))
2378 (build-system pyproject-build-system)
2379 (arguments
2380 (list
2381 ;; tests: 3045 passed, 32 skipped, 29 xfailed, 2 subtests passed
2382 #:test-flags
2383 '(list
2384 "-o" "addopts=''" ; Avoid -p pytest_cov.
2385 "-m" "not dev_mode"
2386 "--numprocesses" (number->string (parallel-job-count))
2387 "--ignore=aiohttp/test_utils.py"
2388 ;; This tests requires the 'proxy.py' module, not yet packaged.
2389 "--ignore=tests/test_proxy_functional.py"
2390 ;; These tests need brotli.
2391 "--ignore=tests/test_web_sendfile_functional.py"
2392 "--ignore=tests/test_web_functional.py"
2393 ;; These tests need pytest_codspeed
2394 "--ignore-glob=tests/test_benchmarks*"
2395 ;; These tests need python_on_whales
2396 "--ignore=tests/autobahn/test_autobahn.py"
2397 "-k"
2398 ;; These tests fail for unknown reasons (see:
2399 ;; https://github.com/aio-libs/aiohttp/issues/7130)
2400 (string-append
2401 "not test_no_warnings "
2402 "and not test_default_loop "
2403 "and not test_ctor_global_loop "
2404 "and not test_set_loop_default_loop "
2405
2406 ;; Disable brotli tests, because we’re not providing that optional
2407 ;; library.
2408 "and not test_feed_eof_no_err_brotli "
2409
2410 ;; Disable the following tests as they require
2411 ;; networking.
2412 "and not TestDeflateBuffer "
2413 "and not test_client_session_timeout_zero "
2414 "and not test_empty_body "
2415 "and not test_mark_formdata_as_processed[pyloop] "
2416 "and not test_receive_runtime_err[pyloop] "
2417
2418 ;; assert 'gzip, deflate' == 'gzip, deflate, br'
2419 "and not test_headers[pyloop] "
2420 ;; ~/.. does not resolve
2421 "and not test_add_static_path_resolution"))
2422 #:phases
2423 '(modify-phases %standard-phases
2424 (add-after 'unpack 'fix-tests
2425 (lambda _
2426 ;; Make sure the timestamp of this file is > 1990, because a few
2427 ;; tests like test_static_file_if_modified_since_past_date depend
2428 ;; on it.
2429 (let ((late-90s (* 60 60 24 365 30)))
2430 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
2431 (add-before 'build 'cythonize
2432 (lambda _
2433 ;; Adapted from the Makefile.
2434 (with-directory-excursion "aiohttp"
2435 (for-each
2436 (lambda (file)
2437 (invoke "cython" "-3"
2438 file "-I" "."))
2439 (find-files "." "_.*\\.pyx$"))))))))
2440 (propagated-inputs
2441 (list python-aiohappyeyeballs
2442 python-aiosignal
2443 python-attrs
2444 python-frozenlist
2445 python-multidict
2446 python-propcache
2447 python-yarl))
2448 (native-inputs
2449 (list gunicorn-bootstrap
2450 python-cython
2451 python-freezegun
2452 python-isal
2453 python-pytest
2454 python-pytest-mock
2455 python-pytest-xdist
2456 python-re-assert
2457 python-setuptools))
2458 (home-page "https://github.com/aio-libs/aiohttp/")
2459 (synopsis "Async HTTP client/server framework (asyncio)")
2460 (description "@code{aiohttp} is an asynchronous HTTP client/server
2461framework.
2462
2463Its main features are:
2464@itemize
2465@item Supports both client and server side of HTTP protocol.
2466@item Supports both client and server Web-Sockets out-of-the-box without the
2467Callback Hell.
2468@item Web-server has middlewares and pluggable routing.
2469@end itemize")
2470 (license license:asl2.0)))
2471
2472(define-public python-aiohttp-oauthlib
2473 (package
2474 (name "python-aiohttp-oauthlib")
2475 (version "0.1.0")
2476 (source
2477 (origin
2478 (method url-fetch)
2479 (uri (pypi-uri "aiohttp-oauthlib" version))
2480 (sha256
2481 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
2482 (build-system pyproject-build-system)
2483 (arguments (list #:tests? #f)) ; none included
2484 (propagated-inputs (list python-aiohttp python-oauthlib))
2485 (native-inputs (list python-setuptools python-setuptools-scm))
2486 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
2487 (synopsis "OAuthlib authentication support for aiohttp")
2488 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
2489provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
2490 (license license:isc)))
2491
2492(define-public python-aiohttp-client-cache
2493 (package
2494 (name "python-aiohttp-client-cache")
2495 (version "0.14.2")
2496 (source
2497 (origin
2498 (method git-fetch)
2499 (uri (git-reference
2500 (url "https://github.com/requests-cache/aiohttp-client-cache")
2501 (commit (string-append "v" version))))
2502 (file-name (git-file-name name version))
2503 (sha256
2504 (base32
2505 "17qa2sh63wa7b9ma40y2b6k9sjscc5vfwlmf46sv36l1mz9rmd4y"))))
2506 (build-system pyproject-build-system)
2507 (arguments
2508 (list
2509 #:test-flags
2510 ;; Run unit tests only which not require networking or additional setup.
2511 #~(list "--ignore=test/integration")))
2512 (native-inputs
2513 (list python-hatchling
2514 ;; TODO: Missing packages: pytest-clarity,
2515 ;; nox-poetry, types-aiofiles.
2516 python-async-timeout
2517 python-brotli
2518 python-faker
2519 python-pytest
2520 python-pytest-aiohttp
2521 python-pytest-asyncio
2522 python-pytest-xdist))
2523 (propagated-inputs
2524 (list python-aiofiles
2525 python-aiohttp
2526 python-aiosqlite
2527 python-attrs
2528 python-itsdangerous
2529 python-redis
2530 python-url-normalize))
2531 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
2532 (synopsis "Persistent cache for aiohttp requests")
2533 (description
2534 "This package is an asynchronous persistent caching library specifically
2535designed for @samp{aiohttp} requests in Python. With support for various
2536storage backends, it offers flexibility in how and where the cache is stored.
2537Please note that MongoDB and DynamoDB backends are not currently supported due
2538to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
2539 (license license:expat)))
2540
2541(define-public python-aiohttp-cors
2542 (package
2543 (name "python-aiohttp-cors")
2544 (version "0.8.1")
2545 (source
2546 (origin
2547 (method url-fetch)
2548 (uri (pypi-uri "aiohttp_cors" version))
2549 (sha256
2550 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
2551 (build-system pyproject-build-system)
2552 (arguments
2553 (list
2554 #:tests? #f)) ; network access is required to run tests
2555 (native-inputs
2556 (list python-setuptools
2557 python-wheel))
2558 (propagated-inputs
2559 (list python-aiohttp))
2560 (home-page "https://github.com/aio-libs/aiohttp-cors")
2561 (synopsis "CORS support for aiohttp")
2562 (description
2563 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
2564support for aiohttp asyncio-powered asynchronous HTTP server.")
2565 (license license:asl2.0)))
2566
2567(define-public python-aiohttp-retry
2568 (package
2569 (name "python-aiohttp-retry")
2570 (version "2.9.1")
2571 (source
2572 (origin
2573 (method git-fetch)
2574 (uri (git-reference
2575 (url "https://github.com/inyutin/aiohttp_retry")
2576 (commit (string-append "v" version))))
2577 (file-name (git-file-name name version))
2578 (sha256
2579 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
2580 (build-system pyproject-build-system)
2581 (native-inputs
2582 (list python-pytest
2583 python-pytest-aiohttp
2584 python-setuptools))
2585 (propagated-inputs
2586 (list python-aiohttp))
2587 (home-page "https://github.com/inyutin/aiohttp_retry")
2588 (synopsis "Simple retry client for aiohttp")
2589 (description
2590 "This package implements @code{RetryClient} for @code{aiohttp} to retry
2591connection to provided endpoint with timeouts logic or use:
2592
2593@itemize
2594@item @code{ExponentialRetry} with exponential backoff
2595@item @code{RandomRetry} for random backoff
2596@item @code{ListRetry} with backoff you predefine by list
2597@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
2598@item @code{JitterRetry} exponential retry with a bit of randomness
2599@end itemize")
2600 (license license:expat)))
2601
2602(define-public python-aiohttp-socks
2603 (package
2604 (name "python-aiohttp-socks")
2605 (version "0.10.1")
2606 (source
2607 (origin
2608 (method url-fetch)
2609 (uri (pypi-uri "aiohttp_socks" version))
2610 (sha256
2611 (base32
2612 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
2613 (build-system pyproject-build-system)
2614 (arguments (list #:tests? #false)) ;none included
2615 (propagated-inputs
2616 (list python-aiohttp python-socks))
2617 (native-inputs (list python-setuptools python-wheel))
2618 (home-page "https://github.com/romis2012/aiohttp-socks")
2619 (synopsis "SOCKS proxy connector for aiohttp")
2620 (description "This package provides a SOCKS proxy connector for
2621aiohttp. It supports SOCKS4(a) and SOCKS5.")
2622 (license license:asl2.0)))
2623
2624(define-public python-aiodns
2625 (package
2626 (name "python-aiodns")
2627 (version "3.5.0")
2628 (source
2629 (origin
2630 (method git-fetch)
2631 (uri (git-reference
2632 (url "https://github.com/saghul/aiodns")
2633 (commit (string-append "v" version))))
2634 (file-name (git-file-name name version))
2635 (sha256
2636 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
2637 (build-system pyproject-build-system)
2638 (arguments
2639 (list
2640 #:tests? #f)) ;tests require internet access
2641 (native-inputs
2642 (list python-pytest python-pytest-asyncio python-setuptools))
2643 (propagated-inputs (list python-pycares))
2644 (home-page "https://github.com/saghul/aiodns")
2645 (synopsis "Simple DNS resolver for asyncio")
2646 (description
2647 "@code{aiodns} provides a simple way for doing asynchronous DNS
2648resolutions with a synchronous looking interface by using
2649@url{https://github.com/saghul/pycares,pycares}.")
2650 (license license:expat)))
2651
2652(define-public python-aioquic
2653 (package
2654 (name "python-aioquic")
2655 (version "1.2.0")
2656 (source
2657 (origin
2658 (method url-fetch)
2659 (uri (pypi-uri "aioquic" version))
2660 (sha256
2661 (base32 "16bigrn5b46c7nmpzxhnlhh4y03hwc7dbd0mi5f8r53i7yxn64pr"))))
2662 (build-system pyproject-build-system)
2663 (arguments
2664 (list
2665 #:test-flags
2666 #~(list "-k" (string-join
2667 ;; AssertionError: AlertBadCertificate not raised
2668 (list "not test_verify_subject_no_subjaltname"
2669 ;; AttributeError: module
2670 ;; 'service_identity.cryptography' has no attribute
2671 ;; 'extract_patterns'
2672 "test_verify_subject_with_subjaltname"
2673 ;; AttributeError: module
2674 ;; 'service_identity.cryptography' has no attribute
2675 ;; 'extract_patterns'
2676 "test_verify_subject_with_subjaltname_ipaddress")
2677 " and not "))))
2678 (native-inputs
2679 (list nss-certs-for-test
2680 python-pytest
2681 python-setuptools
2682 python-wheel))
2683 (inputs
2684 (list openssl))
2685 (propagated-inputs
2686 (list python-certifi
2687 python-pylsqpack
2688 python-pyopenssl
2689 python-service-identity))
2690 (home-page "https://github.com/aiortc/aioquic")
2691 (synopsis "QUIC and HTTP3 implementation in Python")
2692 (description
2693 "@code{aioquic} is a library for the QUIC network protocol in Python.
2694It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
2695 (license license:bsd-3)))
2696
2697(define-public python-aiorpcx
2698 (package
2699 (name "python-aiorpcx")
2700 (version "0.25.0")
2701 (source
2702 (origin
2703 (method git-fetch)
2704 ;; PyPI misses the util.py file used for tests.
2705 (uri (git-reference
2706 (url "https://github.com/kyuupichan/aiorpcX")
2707 (commit version)))
2708 (file-name (git-file-name name version))
2709 (sha256
2710 (base32
2711 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
2712 (build-system pyproject-build-system)
2713 (arguments
2714 (list
2715 #:test-flags
2716 ;; This test opens a remote connection.
2717 #~(list "-k" "not test_create_connection_resolve_good")))
2718 (native-inputs (list python-pytest
2719 python-pytest-asyncio-0.26
2720 python-setuptools))
2721 (propagated-inputs
2722 (list python-attrs python-websockets))
2723 (home-page "https://github.com/kyuupichan/aiorpcX")
2724 (synopsis "Generic asyncio RPC implementation")
2725 (description
2726 "The aiorpcX library is a generic asyncio implementation of RPC suitable
2727for an application that is a client, server or both.
2728
2729The package includes a module with full coverage of JSON RPC versions 1.0 and
27302.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
2731comes with a SOCKS proxy client.")
2732 (license (list license:expat license:bsd-2))))
2733
2734(define-public python-aiostream
2735 (package
2736 (name "python-aiostream")
2737 (version "0.7.0")
2738 (source
2739 (origin
2740 (method git-fetch) ;no tests in PyPI archive
2741 (uri (git-reference
2742 (url "https://github.com/vxgmichel/aiostream")
2743 (commit (string-append "v" version))))
2744 (file-name (git-file-name name version))
2745 (sha256
2746 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
2747 (build-system pyproject-build-system)
2748 (native-inputs
2749 (list python-pytest python-pytest-asyncio python-setuptools))
2750 (propagated-inputs
2751 (list python-typing-extensions))
2752 (home-page "https://github.com/vxgmichel/aiostream")
2753 (synopsis "Generator-based operators for asynchronous iteration")
2754 (description "@code{aiostream} provides a collection of stream operators that can
2755be combined to create asynchronous pipelines of operations. It can be seen as an
2756asynchronous version of @code{itertools}, although some aspects are slightly
2757different. All the provided operators return a unified interface called a stream. A
2758stream is an enhanced asynchronous iterable.")
2759 (license license:gpl3)))
2760
2761(define-public python-asgiref
2762 (package
2763 (name "python-asgiref")
2764 (version "3.8.1")
2765 (source (origin
2766 (method url-fetch)
2767 (uri (pypi-uri "asgiref" version))
2768 (sha256
2769 (base32 "146mhkn3zp2bqf7j6r3chdlvfzgs5x1lrnqahsllgjdyl20bshy3"))))
2770 (build-system pyproject-build-system)
2771 (native-inputs
2772 (list python-pytest
2773 python-pytest-asyncio
2774 python-setuptools
2775 python-wheel))
2776 (home-page "https://github.com/django/asgiref/")
2777 (synopsis "ASGI specs, helper code, and adapters")
2778 (description
2779 "ASGI is a standard for Python asynchronous web apps and servers to
2780communicate with each other, and positioned as an asynchronous successor to
2781WSGI. This package includes libraries for implementing ASGI servers.")
2782 (license license:bsd-3)))
2783
2784(define-public python-asgi-csrf
2785 (package
2786 (name "python-asgi-csrf")
2787 (version "0.11")
2788 (source (origin
2789 (method git-fetch) ;for tests
2790 (uri (git-reference
2791 (url "https://github.com/simonw/asgi-csrf")
2792 (commit version)))
2793 (file-name (git-file-name name version))
2794 (sha256
2795 (base32
2796 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))))
2797 (build-system pyproject-build-system)
2798 (propagated-inputs (list python-itsdangerous python-multipart))
2799 (native-inputs (list python-asgi-lifespan
2800 python-httpx
2801 python-pytest
2802 python-pytest-asyncio
2803 python-starlette
2804 python-setuptools
2805 python-wheel))
2806 (home-page "https://github.com/simonw/asgi-csrf")
2807 (synopsis "ASGI middleware for protecting against CSRF attacks")
2808 (description "This Asynchronous Server Gateway Interface (ASGI)
2809middleware protects against Cross-site request forgery (CSRF) attacks.
2810It implements the Double Submit Cookie pattern, where a cookie is set
2811that is then compared to a @code{csrftoken} hidden form field or a
2812@code{x-csrftoken} HTTP header.")
2813 (license license:asl2.0)))
2814
2815(define-public python-asgi-lifespan
2816 (package
2817 (name "python-asgi-lifespan")
2818 (version "2.1.0")
2819 (source (origin
2820 (method git-fetch) ;for tests
2821 (uri (git-reference
2822 (url "https://github.com/florimondmanca/asgi-lifespan")
2823 (commit version)))
2824 (file-name (git-file-name name version))
2825 (sha256
2826 (base32
2827 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
2828 (build-system pyproject-build-system)
2829 (arguments
2830 (list
2831 #:test-flags
2832 '(list "-k"
2833 (string-append
2834 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
2835 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
2836 " or test_lifespan_manager[trio-None-BodyFailed-None]"
2837 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
2838 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
2839 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
2840 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
2841 " or test_lifespan_timeout[trio-slow_shutdown]"
2842 " or test_lifespan_not_supported[trio-http_only]"
2843 " or test_lifespan_not_supported[trio-http_no_assert]"
2844 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
2845 ")"))
2846 #:phases
2847 '(modify-phases %standard-phases
2848 (add-after 'unpack 'compatibility
2849 (lambda _
2850 ;; httpx version 0.28.0 removed the "app" shortcut.
2851 (substitute* "tests/test_manager.py"
2852 (("app=manager.app")
2853 "transport=httpx.ASGITransport(manager.app)")))))))
2854 (native-inputs (list python-httpx
2855 python-pytest
2856 python-pytest-asyncio
2857 python-pytest-trio
2858 python-starlette
2859 python-setuptools
2860 python-wheel))
2861 (propagated-inputs (list python-sniffio))
2862 (home-page "https://github.com/florimondmanca/asgi-lifespan")
2863 (synopsis "Programmatic startup/shutdown of ASGI apps")
2864 (description "Programmatically send startup/shutdown lifespan events
2865into Asynchronous Server Gateway Interface (ASGI) applications. When
2866used in combination with an ASGI-capable HTTP client such as HTTPX, this
2867allows mocking or testing ASGI applications without having to spin up an
2868ASGI server.")
2869 (license license:expat)))
2870
2871(define-public python-a2wsgi
2872 (package
2873 (name "python-a2wsgi")
2874 (version "1.10.7")
2875 (source (origin
2876 (method url-fetch)
2877 (uri (pypi-uri "a2wsgi" version))
2878 (sha256
2879 (base32
2880 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
2881 (build-system pyproject-build-system)
2882 (arguments
2883 (list
2884 #:test-flags
2885 #~(list "-k" (string-join
2886 (list "not test_starlette_stream_response"
2887 "test_starlette_base_http_middleware"
2888 "test_baize_stream_response"
2889 ;; Fails because of harmless whitespace differences.
2890 "test_wsgi_post")
2891 " and not "))
2892 #:build-backend "pdm.backend"))
2893 (native-inputs
2894 (list python-pdm-backend
2895 python-pytest
2896 ;; python-baize ; not packed yet
2897 python-httpx-bootstrap
2898 ;; Cycle: python-a2wsgi->python-uvicorn->
2899 ;; python-httpx->python-starlette->python-a2wsgi
2900 ;; python-starlette
2901 python-pytest-asyncio))
2902 (home-page "https://github.com/abersheeran/a2wsgi")
2903 (synopsis "Convert WSGI to ASGI or vice versa")
2904 (description
2905 "This program converts a WSGI program to an ASGI program or the other
2906way around. It depends only on the Python standard library.")
2907 (license license:asl2.0)))
2908
2909(define-public python-httpauth
2910 (package
2911 (name "python-httpauth")
2912 (version "0.4.1")
2913 (source (origin
2914 (method url-fetch)
2915 (uri (pypi-uri "httpauth" version))
2916 (sha256
2917 (base32
2918 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
2919 (build-system pyproject-build-system)
2920 (native-inputs (list python-pytest python-setuptools python-wheel))
2921 (home-page "https://github.com/jonashaag/httpauth")
2922 (synopsis "WSGI HTTP Digest Authentication middleware")
2923 (description "@code{python-httpauth} is WSGI middleware that secures some/all
2924routes using HTTP Digest Authentication.")
2925 (license license:bsd-2)))
2926
2927(define-public python-css-html-js-minify
2928 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
2929 (revision "0"))
2930 (package
2931 (name "python-css-html-js-minify")
2932 (version (git-version "2.5.5" revision commit))
2933 (source
2934 (origin
2935 (method git-fetch)
2936 (uri (git-reference
2937 (url "https://github.com/juancarlospaco/css-html-js-minify")
2938 (commit commit)))
2939 (file-name (git-file-name name version))
2940 (sha256
2941 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
2942 (build-system pyproject-build-system)
2943 (arguments
2944 (list
2945 #:phases
2946 #~(modify-phases %standard-phases
2947 (add-after 'unpack 'relax-requirements
2948 (lambda _
2949 (substitute* "setup.cfg"
2950 (("^tests_require.*") "")))))))
2951 (native-inputs (list python-pytest python-setuptools))
2952 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
2953 (synopsis "CSS/HTML/JS minifier")
2954 (description
2955 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
2956 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
2957 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
2958 ;; looks like the user can choose a license.
2959 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
2960
2961(define-public python-aws-sam-translator
2962 (package
2963 (name "python-aws-sam-translator")
2964 (version "1.107.0")
2965 (source
2966 (origin
2967 (method git-fetch) ; no tests in PyPI release
2968 (uri (git-reference
2969 (url "https://github.com/aws/serverless-application-model")
2970 (commit (string-append "v" version))))
2971 (file-name (git-file-name name version))
2972 (sha256
2973 (base32 "0bx9ha9k6zx6gl1hsgm6cpq4xrfn604v2g1d5dh2d5zq0463gwfq"))))
2974 (build-system pyproject-build-system)
2975 (arguments
2976 (list
2977 #:test-flags
2978 #~(list "--numprocesses" (number->string (parallel-job-count))
2979 "--ignore=tests/bin/test_public_interface.py"
2980 "tests")
2981 #:phases
2982 #~(modify-phases %standard-phases
2983 (add-before 'check 'pre-check
2984 (lambda _
2985 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
2986 (native-inputs
2987 (list python-pytest
2988 python-pytest-rerunfailures
2989 python-pytest-xdist
2990 python-parameterized
2991 python-pyyaml
2992 python-setuptools))
2993 (propagated-inputs
2994 (list python-boto3
2995 python-jsonschema
2996 python-pydantic
2997 python-typing-extensions))
2998 (home-page "https://github.com/aws/serverless-application-model")
2999 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
3000 (description
3001 "AWS SAM Translator is a library that transform @dfn{Serverless Application
3002Model} (SAM) templates into AWS CloudFormation templates.")
3003 (license license:asl2.0)))
3004
3005(define-public python-aws-xray-sdk
3006 (package
3007 (name "python-aws-xray-sdk")
3008 (version "2.14.0")
3009 (home-page "https://github.com/aws/aws-xray-sdk-python")
3010 (source (origin
3011 (method git-fetch)
3012 (uri (git-reference (url home-page) (commit version)))
3013 (file-name (git-file-name name version))
3014 (sha256
3015 (base32
3016 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
3017 (build-system pyproject-build-system)
3018 (arguments
3019 (list
3020 #:test-flags
3021 '(list ;; Tries to connect to external network resources
3022 "--ignore=tests/ext/aiohttp/test_client.py"
3023 "--ignore=tests/ext/httplib/test_httplib.py"
3024 "--ignore=tests/ext/httpx"
3025 "--ignore=tests/ext/requests/test_requests.py"
3026 ;; TODO: How to configure Django for these tests?
3027 "--ignore=tests/ext/django"
3028 ;; These tests require packages not yet in Guix.
3029 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
3030 "--ignore=tests/ext/aiohttp/test_middleware.py"
3031 "--ignore=tests/ext/pg8000/test_pg8000.py"
3032 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
3033 "--ignore=tests/ext/pymysql/test_pymysql.py"
3034 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
3035 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
3036 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
3037 "--ignore=tests/test_async_recorder.py"
3038 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
3039 "--ignore-glob=tests/ext/sqlalchemy*"
3040 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
3041 ;; FIXME: Why is this failing?
3042 "--ignore=tests/test_patcher.py"
3043 "--ignore=tests/test_lambda_context.py")
3044 #:phases
3045 '(modify-phases %standard-phases
3046 (add-before 'check 'pre-check
3047 (lambda _
3048 ;; Allow "import tests.utils" to work as expected.
3049 (setenv "PYTHONPATH" (getcwd)))))))
3050 (native-inputs
3051 (list ;; These are required for the test suite.
3052 python-aiohttp
3053 python-bottle
3054 python-flask
3055 python-flask-sqlalchemy
3056 python-httpx
3057 python-mock
3058 python-pymysql
3059 python-pytest
3060 python-pytest-asyncio-0.26
3061 python-pytest-benchmark
3062 python-setuptools
3063 python-sqlalchemy
3064 python-webtest))
3065 (propagated-inputs
3066 (list python-botocore
3067 python-jsonpickle
3068 python-requests
3069 python-wrapt))
3070 (synopsis "Profile applications on AWS X-Ray")
3071 (description
3072 "The AWS X-Ray SDK for Python enables Python developers to record and
3073emit information from within their applications to the AWS X-Ray service.")
3074 (license license:asl2.0)))
3075
3076(define-public python-publicsuffixlist
3077 (package
3078 (name "python-publicsuffixlist")
3079 (version "1.0.2.20250202")
3080 (source
3081 (origin
3082 (method url-fetch)
3083 (uri (pypi-uri "publicsuffixlist" version))
3084 (sha256
3085 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
3086 (build-system pyproject-build-system)
3087 (arguments (list #:test-backend #~'unittest))
3088 (native-inputs (list python-setuptools))
3089 (home-page "https://github.com/ko-zu/psl")
3090 (synopsis "Public suffix list for Python")
3091 (description
3092 "This package provides an implementation of
3093@url{https://publicsuffix.org/, Public Suffix List } as Python library.
3094
3095Features:
3096@itemize
3097@item supports IDN (unicode and punycoded)
3098@item shipped with built-in PSL and an updater script
3099@item written in Pure Python with no library dependencies
3100@end itemize")
3101 (license license:mpl2.0)))
3102
3103(define-public python-pycognito
3104 (package
3105 (name "python-pycognito")
3106 (version "2024.5.1")
3107 (source
3108 (origin
3109 (method url-fetch)
3110 (uri (pypi-uri "pycognito" version))
3111 (sha256
3112 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
3113 (build-system pyproject-build-system)
3114 (arguments
3115 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
3116 (list #:tests? #f))
3117 (native-inputs
3118 (list python-setuptools))
3119 (propagated-inputs
3120 (list python-boto3
3121 python-envs
3122 python-pyjwt
3123 python-requests))
3124 (home-page "https://github.com/pvizeli/pycognito")
3125 (synopsis "Python library for using AWS Cognito")
3126 (description
3127 "This package provides a Python class to integrate Boto3's Cognito
3128client so it is easy to login users, with @acronym{Secure Remote Password,
3129SRP} support.")
3130 (license license:asl2.0)))
3131
3132(define-public python-python3-saml
3133 (package
3134 (name "python-python3-saml")
3135 (version "1.16.0")
3136 (source
3137 (origin
3138 (method git-fetch)
3139 (uri (git-reference
3140 (url "https://github.com/SAML-Toolkits/python3-saml")
3141 (commit (string-append "v" version))))
3142 (file-name (git-file-name name version))
3143 (sha256
3144 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
3145 (build-system pyproject-build-system)
3146 (arguments
3147 (list
3148 ;; 214 tests pass, 50 fail; many fail because of required Internet
3149 ;; access or because of assumptions about the location of test files.
3150 #:tests? #false))
3151 (native-inputs
3152 (list python-freezegun
3153 python-poetry-core))
3154 (inputs
3155 (list xmlsec-openssl))
3156 (propagated-inputs
3157 (list python-isodate
3158 python-lxml
3159 python-xmlsec))
3160 (home-page "https://github.com/SAML-Toolkits/python3-saml")
3161 (synopsis "Saml Python toolkit")
3162 (description
3163 "The SAML Python Toolkit lets you add SAML support to your Python
3164software.")
3165 (license license:expat)))
3166
3167(define-public python-ovh
3168 (package
3169 (name "python-ovh")
3170 (version "1.1.0")
3171 (source (origin
3172 (method url-fetch)
3173 (uri (pypi-uri "ovh" version))
3174 (sha256
3175 (base32
3176 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
3177 (build-system pyproject-build-system)
3178 (arguments (list #:tests? #f)) ; XXX: tests require networking
3179 (propagated-inputs (list python-requests))
3180 (native-inputs (list python-setuptools))
3181 (home-page "https://api.ovh.com")
3182 (synopsis "Interact with OVHcloud APIs")
3183 (description "This package provides the official module to perform HTTP requests
3184to the OVHcloud APIs.")
3185 (license license:bsd-3)))
3186
3187(define-public python-cbor2
3188 (package
3189 (name "python-cbor2")
3190 (version "5.4.2.post1")
3191 (source
3192 (origin
3193 (method url-fetch)
3194 (uri (pypi-uri "cbor2" version))
3195 (sha256
3196 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
3197 (build-system pyproject-build-system)
3198 (native-inputs
3199 (list python-pytest python-setuptools python-setuptools-scm))
3200 (home-page "https://github.com/agronholm/cbor2")
3201 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
3202 (description "This Python library provides encoding and decoding for the
3203Concise Binary Object
3204Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
32058949}) serialization format. The specification is fully compatible with the
3206original RFC 7049. Among its features are:
3207@itemize
3208@item Simple API like the @code{json} or @code{pickle} modules.
3209@item Support many CBOR tags with stdlib objects.
3210@item Generic tag decoding.
3211@item Shared value references including cyclic references.
3212@item String references compact encoding with repeated strings replaced with
3213indices.
3214@item Optional C module backend tested on big- and little-endian architectures.
3215@item Extensible tagged value handling using tag_hook and object_hook on
3216decode and default on encode.
3217@end itemize")
3218 (license license:expat)))
3219
3220(define-public python-cfn-lint
3221 (package
3222 (name "python-cfn-lint")
3223 (version "1.38.1")
3224 (source
3225 (origin
3226 (method git-fetch)
3227 (uri (git-reference
3228 (url "https://github.com/aws-cloudformation/cfn-lint")
3229 (commit (string-append "v" version))))
3230 (file-name (git-file-name name version))
3231 (sha256
3232 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
3233 (build-system pyproject-build-system)
3234 (arguments
3235 (list
3236 ;; tests: 2136 passed, 11 deselected, 1 warning
3237 #:test-flags
3238 #~(list "--ignore=test/integration/"
3239 "-k" (string-join
3240 ;; Tests failing on doctest or comparing diff.
3241 (list "not test_build_graph"
3242 "test_good_template"
3243 "test_success_run"
3244 "test_update_docs"
3245 ;; ImportError: Missing optional dependencies sarif
3246 "test_sarif_formatter")
3247 " and not "))
3248 #:phases
3249 #~(modify-phases %standard-phases
3250 (add-after 'unpack 'remove-deprecated
3251 (lambda _
3252 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
3253 (("deprecated\": \"2025")
3254 "deprecated\": \"2125")))))))
3255 (native-inputs
3256 (list python-defusedxml
3257 python-pydot
3258 python-pytest
3259 python-setuptools))
3260 (propagated-inputs
3261 (list python-aws-sam-translator
3262 python-jsonpatch
3263 python-networkx
3264 python-pyyaml
3265 python-regex
3266 python-sympy
3267 python-typing-extensions
3268 ;; [optional]
3269 python-junit-xml))
3270 (home-page "https://github.com/aws-cloudformation/cfn-lint")
3271 (synopsis "Validate CloudFormation templates")
3272 (description
3273 "This package lets you validate CloudFormation YAML/JSON templates against
3274the CloudFormation spec and additional checks. Includes checking valid values
3275for resource properties and best practices.")
3276 (license license:expat)))
3277
3278(define-public python-pyzabbix
3279 (package
3280 (name "python-pyzabbix")
3281 (version "1.3.1")
3282 (source
3283 (origin
3284 (method git-fetch)
3285 (uri (git-reference
3286 (url "https://github.com/lukecyca/pyzabbix")
3287 (commit version)))
3288 (file-name (git-file-name name version))
3289 (sha256
3290 (base32 "1dbs3bz1mjlvlg46ikhg5j7agwni61ljlpiziknklv95yp29n86v"))))
3291 (build-system pyproject-build-system)
3292 (arguments
3293 (list #:test-flags #~(list "tests")))
3294 (native-inputs
3295 (list python-pytest
3296 python-requests-mock
3297 python-setuptools))
3298 (propagated-inputs
3299 (list python-packaging
3300 python-requests))
3301 (home-page "https://github.com/lukecyca/pyzabbix")
3302 (synopsis "Python interface to the Zabbix API")
3303 (description
3304 "@code{pyzabbix} is a Python module for working with the Zabbix API.")
3305 (license license:lgpl2.1+)))
3306
3307(define-public python-requests-cache
3308 (package
3309 (name "python-requests-cache")
3310 (version "1.2.1")
3311 (source
3312 (origin
3313 (method url-fetch)
3314 (uri (pypi-uri "requests_cache" version))
3315 (sha256
3316 (base32 "1l8i4l2pd26gbrlcdb5z056wvsqfr3vvbyqq2f8x1f65zn3ckav8"))))
3317 (build-system pyproject-build-system)
3318 (arguments
3319 (list
3320 #:test-flags
3321 #~(list "--numprocesses" (number->string (parallel-job-count))
3322 ;; These tests require access to external services, e.g. MongoDB
3323 ;; and Redis.
3324 "--ignore=tests/integration"
3325 ;; AttributeError: <class 'requests.adapters.HTTPAdapter'> does
3326 ;; not have the attribute 'get_connection_with_tls_context'
3327 "-k" "not test_mock_session")
3328 #:phases
3329 #~(modify-phases %standard-phases
3330 (add-before 'check 'pre-check
3331 (lambda _
3332 ;; PermissionError: [Errno 13] Permission denied:
3333 ;; '/homeless-shelter'
3334 (setenv "HOME" "/tmp"))))))
3335 (native-inputs
3336 (list python-poetry-core
3337 python-pytest
3338 python-pytest-rerunfailures
3339 python-pytest-xdist
3340 python-requests-mock
3341 python-responses
3342 python-rich
3343 python-tenacity
3344 python-time-machine
3345 python-timeout-decorator))
3346 (propagated-inputs
3347 (list python-attrs
3348 python-boto3
3349 python-bson
3350 python-cattrs
3351 python-itsdangerous
3352 python-orjson
3353 python-platformdirs
3354 python-pymongo
3355 python-pyyaml
3356 python-redis
3357 python-requests
3358 python-ujson
3359 python-url-normalize
3360 python-urllib3))
3361 (home-page "https://github.com/requests-cache/requests-cache")
3362 (synopsis "Persistent HTTP cache for Python requests")
3363 (description
3364 "This package provides a drop-in replacement for @code{requests.Session}
3365with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
3366responses as planin JSON/YAML file or save responses as plain JSON/YAML
3367files.")
3368 (license license:bsd-2)))
3369
3370(define-public python-requests-futures
3371 (package
3372 (name "python-requests-futures")
3373 (version "1.0.2")
3374 (source
3375 (origin
3376 (method url-fetch)
3377 (uri (pypi-uri "requests_futures" version))
3378 (sha256
3379 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
3380 (build-system pyproject-build-system)
3381 (native-inputs
3382 (list python-greenlet
3383 python-pytest
3384 python-pytest-httpbin
3385 python-setuptools
3386 python-werkzeug))
3387 (propagated-inputs (list python-requests))
3388 (home-page "https://github.com/ross/requests-futures")
3389 (synopsis "Asynchronous Python HTTP for Humans")
3390 (description
3391 "This package provides and add-on the Python Requests HTTP library to run
3392code asynchronously.")
3393 (license license:asl2.0)))
3394
3395(define-public python-s3path
3396 (package
3397 (name "python-s3path")
3398 (version "0.6.4")
3399 (source
3400 (origin
3401 (method url-fetch)
3402 (uri (pypi-uri "s3path" version))
3403 (sha256
3404 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
3405 (build-system pyproject-build-system)
3406 (arguments
3407 (list
3408 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
3409 #:tests? #f))
3410 (native-inputs
3411 (list python-setuptools
3412 python-wheel))
3413 (propagated-inputs
3414 (list python-boto3
3415 python-smart-open))
3416 (home-page "https://github.com/liormizr/s3path")
3417 (synopsis "Pathlib extension for AWS S3 Service")
3418 (description
3419 "S3Path provide a Python convenient File-System/Path like interface for
3420AWS S3 Service using boto3 S3 resource as a driver.")
3421 (license license:asl2.0)))
3422
3423(define-public python-falcon
3424 (package
3425 (name "python-falcon")
3426 (version "4.0.2")
3427 (source
3428 (origin
3429 ;; Use git, as there are some test files missing from the PyPI release,
3430 ;; such as 'examples' directory.
3431 (method git-fetch)
3432 (uri (git-reference
3433 (url "https://github.com/falconry/falcon")
3434 (commit version)))
3435 (file-name (git-file-name name version))
3436 (sha256
3437 (base32
3438 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
3439 (build-system pyproject-build-system)
3440 (arguments
3441 (list
3442 #:test-flags
3443 '(list "-k" "not slow"
3444 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
3445 #:phases
3446 '(modify-phases %standard-phases
3447 (add-before 'check 'pre-check
3448 (lambda _
3449 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
3450 (setenv "FALCON_TESTING_SESSION" "Y")
3451 (setenv "PYTHONASYNCIODEBUG" "1")
3452 (setenv "HOME" "/tmp"))))))
3453 (propagated-inputs
3454 (list python-mimeparse))
3455 (native-inputs
3456 (list python-aiofiles
3457 python-cbor2
3458 python-cython ;for faster binaries
3459 python-fakeredis
3460 python-httpx
3461 python-mujson
3462 python-msgpack
3463 python-orjson
3464 python-pecan
3465 python-pillow
3466 python-pytest
3467 python-pytest-asyncio
3468 python-pyyaml
3469 python-rapidjson
3470 python-requests
3471 python-setuptools
3472 python-testtools
3473 python-ujson
3474 python-websockets
3475 python-wheel))
3476 (home-page "https://falconframework.org")
3477 (synopsis "Web framework for building APIs and application backends")
3478 (description "Falcon is a web API framework for building microservices,
3479application backends and higher-level frameworks. Among its features are:
3480@itemize
3481@item Optimized and extensible code base
3482@item Routing via URI templates and REST-inspired resource
3483classes
3484@item Access to headers and bodies through request and response
3485classes
3486@item Request processing via middleware components and hooks
3487@item Idiomatic HTTP error responses
3488@item Straightforward exception handling
3489@item Unit testing support through WSGI helpers and mocks
3490@item Compatible with both CPython and PyPy
3491@item Cython support for better performance when used with CPython
3492@end itemize")
3493 (license license:asl2.0)))
3494
3495(define-public python-falcon-cors
3496 (package
3497 (name "python-falcon-cors")
3498 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
3499 (revision . "0")))
3500 (version (git-version "1.1.7"
3501 (assoc-ref properties 'revision)
3502 (assoc-ref properties 'commit)))
3503 (source
3504 (origin
3505 (method git-fetch)
3506 (uri (git-reference
3507 (url "https://github.com/lwcolton/falcon-cors")
3508 (commit (assoc-ref properties 'commit))))
3509 (file-name (git-file-name name version))
3510 (sha256
3511 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
3512 (build-system pyproject-build-system)
3513 (arguments
3514 (list
3515 ;; XXX: The last commit's tests are incompatible with the more recent
3516 ;; version of python-falcon.
3517 #:tests? #f))
3518 (native-inputs
3519 (list python-falcon python-mock python-pynose python-setuptools))
3520 (home-page "https://github.com/lwcolton/falcon-cors")
3521 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
3522 (description
3523 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
3524support for Falcon. It allows applying a specially crafted CORS object to the
3525incoming requests, enabling the ability to serve resources over a different
3526origin than that of the web application.")
3527 (license license:asl2.0)))
3528
3529(define-public python-furl
3530 (package
3531 (name "python-furl")
3532 (version "2.1.4")
3533 (source
3534 (origin
3535 (method url-fetch)
3536 (uri (pypi-uri "furl" version))
3537 (sha256
3538 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
3539 (build-system pyproject-build-system)
3540 (arguments
3541 (list #:test-flags
3542 #~(list "-k" (string-append "not test_hosts"
3543 " and not test_netloc"
3544 " and not test_odd_urls"))))
3545 (propagated-inputs
3546 (list python-orderedmultidict python-six))
3547 (native-inputs
3548 (list python-pytest python-setuptools python-wheel))
3549 (home-page "https://github.com/gruns/furl")
3550 (synopsis "URL manipulation in Python")
3551 (description "Furl provides an easy-to-use alternative to the
3552@code{urllib} and @code{urlparse} modules for manipulating URLs.")
3553 (license license:unlicense)))
3554
3555(define-public python-httplib2
3556 (package
3557 (name "python-httplib2")
3558 (version "0.31.2")
3559 (source
3560 (origin
3561 (method git-fetch)
3562 (uri (git-reference
3563 (url "https://github.com/httplib2/httplib2")
3564 (commit (string-append "v" version))))
3565 (file-name (git-file-name name version))
3566 (sha256
3567 (base32
3568 "0wdnf4rhw9ar8b15lzvif11ibnnpqkfif3alkhkfywy3ikk8nrxb"))))
3569 (build-system pyproject-build-system)
3570 (arguments
3571 (list
3572 #:phases
3573 #~(modify-phases %standard-phases
3574 (add-after 'unpack 'adjust-test-requirements
3575 (lambda _
3576 (substitute* "requirements-test.txt"
3577 (("==") ">=")))))))
3578 (propagated-inputs
3579 (list python-pyparsing
3580 python-pysocks))
3581 (native-inputs
3582 (list python-cryptography
3583 python-mock
3584 python-pytest
3585 python-pytest-randomly
3586 python-pytest-timeout
3587 python-setuptools))
3588 (home-page "https://github.com/httplib2/httplib2")
3589 (synopsis "Comprehensive HTTP client library")
3590 (description
3591 "A comprehensive HTTP client library supporting many features left out of
3592other HTTP libraries.")
3593 (license license:expat)))
3594
3595(define-public python-cheroot
3596 (package
3597 (name "python-cheroot")
3598 (version "11.1.2")
3599 (source
3600 (origin
3601 (method git-fetch)
3602 (uri (git-reference
3603 (url "https://github.com/cherrypy/cheroot")
3604 (commit (string-append "v" version))))
3605 (file-name (git-file-name name version))
3606 (sha256
3607 (base32 "02rhci01m5fcn8mqpvq3c35rs4n28gxlfvfw2if2f85rgwrji8y8"))))
3608 (build-system pyproject-build-system)
3609 (arguments
3610 (list
3611 #:phases
3612 #~(modify-phases %standard-phases
3613 (add-after 'unpack 'fix-pytest-config
3614 (lambda _
3615 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
3616 (delete-file "pytest.ini"))))))
3617 (native-inputs
3618 (list python-portend
3619 python-pyopenssl
3620 python-pypytools
3621 python-pytest
3622 python-pytest-mock
3623 python-requests
3624 python-requests-toolbelt
3625 python-requests-unixsocket2
3626 python-setuptools
3627 python-setuptools-scm
3628 python-trustme))
3629 (propagated-inputs
3630 (list python-jaraco-functools
3631 python-more-itertools))
3632 (home-page "https://cheroot.cherrypy.dev")
3633 (synopsis "Highly-optimized, pure-python HTTP server")
3634 (description
3635 "Cheroot is a high-performance, pure-Python HTTP server.")
3636 (license license:bsd-3)))
3637
3638(define-public python-cherrypy
3639 (package
3640 (name "python-cherrypy")
3641 (properties '((commit . "1f75bc9eed8e0e385f64f368bd69f58d96fb8c2b")
3642 (revision . "0")))
3643 (version (git-version "18.10.0"
3644 (assoc-ref properties 'revision)
3645 (assoc-ref properties 'commit)))
3646 (source
3647 (origin
3648 (method git-fetch)
3649 (uri (git-reference
3650 (url "https://github.com/cherrypy/cherrypy")
3651 (commit (assoc-ref properties 'commit))))
3652 (file-name (git-file-name name version))
3653 (sha256
3654 (base32 "1l01a4sbfm42s5xp6ngphgqf0yb65ksqbsb27kznvybblyaxfa9p"))))
3655 (build-system pyproject-build-system)
3656 (arguments
3657 (list
3658 #:test-flags
3659 #~(map
3660 (lambda (test)
3661 (string-append "--deselect=cherrypy/test/" test))
3662 (list
3663 ;; Requires bumping python-flaky.
3664 "test_bus.py::test_wait_publishes_periodically"
3665 "test_bus.py::test_block"
3666 "test_bus.py::test_start_with_callback"
3667 "test_refleaks.py::ReferenceTests::test_threadlocal_garbage"
3668 "test_session.py::SessionTest::test_0_Session"
3669 "test_session.py::SessionTest::test_2_File_Concurrency"
3670 ;; assert b'RamSession' == b'FileSession' or FileNotFoundError
3671 "test_session.py::SessionTest::test_3_Redirect"
3672 "test_session.py::SessionTest::test_4_File_deletion"))
3673 #:phases
3674 #~(modify-phases %standard-phases
3675 (add-after 'unpack 'fix-pytest-config
3676 (lambda _
3677 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
3678 (delete-file "pytest.ini")))
3679 (add-after 'unpack 'patch-pyproject
3680 (lambda _
3681 (substitute* "pyproject.toml"
3682 (("\"cherrypy.scaffold\",")
3683 (string-join
3684 (list "\"cherrypy.scaffold\""
3685 "\"cherrypy._private_api\""
3686 "\"cherrypy._private_api.compat\",")
3687 ",\n "))))))))
3688 (propagated-inputs
3689 (list python-cheroot
3690 python-filelock
3691 python-jaraco-collections
3692 python-more-itertools
3693 python-portend
3694 python-zc-lockfile))
3695 (native-inputs
3696 (list python-flaky
3697 python-objgraph
3698 python-path
3699 python-pytest
3700 python-pytest-forked
3701 python-pytest-services
3702 python-pytest-sugar
3703 python-requests-toolbelt
3704 python-setuptools
3705 python-setuptools-scm))
3706 (home-page "https://www.cherrypy.dev")
3707 (synopsis "Object-Oriented HTTP framework")
3708 (description
3709 "CherryPy is a pythonic, object-oriented web framework. It helps in
3710building web applications in the same way any other object-oriented Python
3711program would be built.")
3712 (license license:bsd-3)))
3713
3714(define-public python-parfive
3715 (package
3716 (name "python-parfive")
3717 (version "2.3.1")
3718 (source
3719 (origin
3720 (method git-fetch)
3721 (uri (git-reference
3722 (url "https://github.com/Cadair/parfive")
3723 (commit (string-append "v" version))))
3724 (file-name (git-file-name name version))
3725 (sha256
3726 (base32 "09kkh7kp9qy8m26zk6p7zc84yrc81pjgsi594kaa1v1n83mprl4b"))))
3727 (build-system pyproject-build-system)
3728 (arguments
3729 (list
3730 #:test-flags
3731 ;; Disable tests requiring network access.
3732 #~(list "-k" (string-join
3733 (list "not test_ftp"
3734 "test_ftp_http"
3735 "test_ftp_pasv_command"
3736 "test_problematic_http_urls")
3737 " and not "))))
3738 (native-inputs
3739 (list python-aiofiles
3740 python-pytest
3741 python-pytest-asyncio
3742 python-pytest-localserver
3743 python-pytest-socket
3744 python-setuptools
3745 python-setuptools-scm))
3746 (propagated-inputs
3747 (list python-aiohttp
3748 python-tqdm
3749 ;; [optional]
3750 python-aioftp))
3751 (home-page "https://parfive.readthedocs.io/")
3752 (synopsis "HTTP and FTP parallel file downloader")
3753 (description
3754 "This package provides CLI tool and Python library @code{parallel} file
3755downloader using asyncio. parfive can handle downloading multiple files in
3756parallel as well as downloading each file in a number of chunks.
3757
3758asciicast demo of parfive parfive works by creating a downloader object,
3759appending files to it and then running the download. parfive has a synchronous
3760API, but uses asyncio to parallelise downloading the files.")
3761 (license license:expat)))
3762
3763(define-public python-html2text
3764 (package
3765 (name "python-html2text")
3766 (version "2020.1.16")
3767 (source
3768 (origin
3769 (method url-fetch)
3770 (uri (pypi-uri "html2text" version))
3771 (sha256
3772 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
3773 (build-system pyproject-build-system)
3774 (native-inputs (list python-pytest python-setuptools python-wheel))
3775 (home-page "https://github.com/Alir3z4/html2text")
3776 (synopsis "Convert HTML into plain text")
3777 (description
3778 "html2text takes HTML and converts it into plain ASCII text
3779which is also valid markdown. html2text was originally written by Aaron
3780Swartz.")
3781 (license license:gpl3+)))
3782
3783(define-public python-jose
3784 (package
3785 (name "python-jose")
3786 (version "3.5.0")
3787 (home-page "https://github.com/mpdavis/python-jose")
3788 (source (origin
3789 (method git-fetch)
3790 (uri (git-reference (url home-page) (commit version)))
3791 (file-name (git-file-name name version))
3792 (sha256
3793 (base32
3794 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
3795 (build-system pyproject-build-system)
3796 (native-inputs
3797 (list python-pyasn1 python-pytest python-setuptools))
3798 (propagated-inputs
3799 (list python-cryptography python-ecdsa python-rsa))
3800 (synopsis "JOSE implementation in Python")
3801 (description
3802 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
3803- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
3804JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
3805content using a variety of algorithms.")
3806 (license license:expat)))
3807
3808(define-public python-joserfc
3809 (package
3810 (name "python-joserfc")
3811 (version "1.0.1")
3812 (source
3813 (origin
3814 (method url-fetch)
3815 (uri (pypi-uri "joserfc" version))
3816 (sha256
3817 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
3818 (build-system pyproject-build-system)
3819 (arguments
3820 (list
3821 #:test-flags
3822 ;; No module named 'Crypto'
3823 '(list "--ignore=tests/jwe/test_chacha20.py"
3824 ;; Deprecation warnings are not raised.
3825 "-k" (string-append "not test_guess_bytes_key"
3826 " and not test_guess_callable_key"
3827 " and not test_guess_str_key"))))
3828 (propagated-inputs (list python-cryptography))
3829 (native-inputs (list python-pytest python-setuptools python-wheel))
3830 (home-page "https://github.com/authlib/joserfc")
3831 (synopsis "Python library for JOSE RFCs")
3832 (description
3833 "This package provides a Python library for JOSE RFCs, including JWS,
3834JWE, JWK, JWA, and JWT.")
3835 (license license:bsd-3)))
3836
3837(define-public python-jwcrypto
3838 (package
3839 (name "python-jwcrypto")
3840 (version "1.5.6")
3841 (source
3842 (origin
3843 (method url-fetch)
3844 (uri (pypi-uri "jwcrypto" version))
3845 (sha256
3846 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
3847 (build-system pyproject-build-system)
3848 (native-inputs
3849 (list python-pytest
3850 python-setuptools))
3851 (propagated-inputs
3852 (list python-cryptography
3853 python-typing-extensions))
3854 (home-page "https://github.com/latchset/jwcrypto")
3855 (synopsis "Implementation of JOSE Web standards")
3856 (description
3857 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
3858Encryption} (JOSE) Web Standards.")
3859 (license license:lgpl3+)))
3860
3861(define-public python-pypitoken
3862 (package
3863 (name "python-pypitoken")
3864 (version "7.0.1")
3865 (source
3866 (origin
3867 (method url-fetch)
3868 (uri (pypi-uri "pypitoken" version))
3869 (sha256
3870 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
3871 (build-system pyproject-build-system)
3872 ;; There are no tests.
3873 (arguments (list #:tests? #false))
3874 (propagated-inputs (list python-jsonschema python-pymacaroons
3875 python-typing-extensions))
3876 (native-inputs (list python-poetry-core))
3877 (home-page "https://pypitoken.readthedocs.io/en/latest/")
3878 (synopsis "Manipulate PyPI API tokens")
3879 (description "This package lets you manipulate PyPI API tokens.")
3880 (license license:expat)))
3881
3882(define-public python-pyscss
3883 ;; XXX: no fresh release supporting Python 3.11, use the latest commit, see
3884 ;; <https://github.com/Kronuz/pyScss/issues/428>,
3885 ;; <https://github.com/Kronuz/pyScss/issues/431>.
3886 (let ((commit "73559d047706ccd4593cf6aa092de71f35164723")
3887 (revision "0"))
3888 (package
3889 (name "python-pyscss")
3890 (version (git-version "1.4.0" revision commit))
3891 (source
3892 (origin
3893 (method git-fetch) ; no tests in PyPI release
3894 (uri (git-reference
3895 (url "https://github.com/Kronuz/pyScss")
3896 (commit commit)))
3897 (file-name (git-file-name name version))
3898 (sha256
3899 (base32 "00msypxf5dm57gyfp3jxvjinigi4km84v33w83635pms9li2k3y7"))))
3900 (build-system pyproject-build-system)
3901 (native-inputs
3902 (list python-pytest-8
3903 python-setuptools))
3904 (inputs
3905 (list pcre))
3906 (propagated-inputs
3907 (list python-six)) ;hard dependency in scss/compiler.py
3908 (home-page "https://github.com/Kronuz/pyScss")
3909 (synopsis "Scss compiler for Python")
3910 (description
3911 "@code{pyScss} is a compiler for Sass, a superset language of
3912CSS3 that adds programming capabilities and some other syntactic sugar.")
3913 (license license:expat))))
3914
3915(define-public python-jsonpickle
3916 (package
3917 (name "python-jsonpickle")
3918 (version "4.0.0")
3919 (source (origin
3920 (method url-fetch)
3921 (uri (pypi-uri "jsonpickle" version))
3922 (sha256
3923 (base32
3924 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
3925 (build-system pyproject-build-system)
3926 (arguments
3927 (list
3928 #:test-flags '(list "tests")
3929 #:phases
3930 '(modify-phases %standard-phases
3931 (add-before 'check 'pre-check
3932 (lambda* (#:key inputs #:allow-other-keys)
3933 (setenv "TZ" "UTC")
3934 (setenv "TZDIR"
3935 (search-input-directory inputs "share/zoneinfo")))))))
3936 (native-inputs
3937 (list python-bson
3938 python-ecdsa
3939 python-feedparser
3940 python-pymongo
3941 python-pytest
3942 python-pytest-benchmark
3943 python-pytest-enabler
3944 python-setuptools
3945 python-setuptools-scm
3946 python-simplejson
3947 python-sqlalchemy
3948 python-ujson
3949 python-wheel
3950 tzdata-for-tests))
3951 (home-page "https://jsonpickle.github.io/")
3952 (synopsis "Serialize object graphs into JSON")
3953 (description
3954 "This package provides a Python library for serializing any arbitrary
3955object graph to and from JSON.")
3956 (license license:bsd-3)))
3957
3958(define-public python-mcp
3959 (package
3960 (name "python-mcp")
3961 (version "1.25.0")
3962 (source
3963 (origin
3964 (method url-fetch)
3965 (uri (pypi-uri "mcp" version))
3966 (sha256
3967 (base32 "00k87bl4jvnh7hrmicwb2m715fwccvvlanwf8cnlwdphxdhh6can"))))
3968 (build-system pyproject-build-system)
3969 (arguments
3970 (list
3971 ;; XXX: 186 failed, 648 passed, 94 skipped, 54 errors
3972 ;; A lot of tests fail for unclear reasons.
3973 #:tests? #f))
3974 (propagated-inputs (list python-httpx python-pydantic))
3975 (native-inputs
3976 (list python-hatchling
3977 python-httpx-sse
3978 python-jsonschema
3979 python-pydantic-settings
3980 python-pytest
3981 python-pytest-examples
3982 python-pytest-xdist
3983 python-sse-starlette
3984 python-starlette
3985 python-typer
3986 python-typing-inspection
3987 python-uvicorn))
3988 (home-page "https://modelcontextprotocol.io")
3989 (synopsis "Model Context Protocol SDK")
3990 (description
3991 "This package provides a Python Software Development Kit for the Model
3992Context Protocol (MCP).")
3993 (license license:expat)))
3994
3995(define-public python-mechanicalsoup
3996 (package
3997 (name "python-mechanicalsoup")
3998 (version "1.4.0")
3999 (source
4000 (origin
4001 (method url-fetch)
4002 (uri (pypi-uri "mechanicalsoup" version))
4003 (sha256
4004 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
4005 (build-system pyproject-build-system)
4006 (arguments
4007 (list
4008 #:test-flags
4009 ;; Unclear why test fails.
4010 #~(list "-k" "not test_select_form_associated_elements")
4011 ;; The following dependencies are not directly required, the developer
4012 ;; only pinned versions because of vulnerabilities. They also break
4013 ;; sanity-check because it checks for a python-certifi version which is
4014 ;; more recent than the one available in Guix.
4015 #:phases #~(modify-phases %standard-phases
4016 (add-after 'unpack 'relax-dependencies
4017 (lambda _
4018 (substitute* "requirements.txt"
4019 (("certifi.*") "")
4020 (("urllib3.*") "")))))))
4021 (propagated-inputs
4022 (list python-beautifulsoup4 python-lxml python-requests))
4023 (native-inputs
4024 (list python-pytest
4025 python-pytest-flake8
4026 python-pytest-httpbin
4027 python-pytest-mock
4028 python-requests-mock
4029 python-setuptools
4030 python-wheel))
4031 (home-page "https://mechanicalsoup.readthedocs.io/")
4032 (synopsis "Python library for automating website interaction")
4033 (description
4034 "MechanicalSoup is a Python library for automating interaction with
4035websites. It automatically stores and sends cookies, follows redirects, and can
4036follow links and submit forms. It doesn’t do JavaScript.")
4037 (license license:expat)))
4038
4039(define-public python-hypercorn
4040 (package
4041 (name "python-hypercorn")
4042 (version "0.18.0")
4043 (source
4044 (origin
4045 (method git-fetch)
4046 (uri (git-reference
4047 (url "https://github.com/pgjones/hypercorn")
4048 (commit version)))
4049 (file-name (git-file-name name version))
4050 (sha256
4051 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
4052 (build-system pyproject-build-system)
4053 (propagated-inputs
4054 (list python-aioquic
4055 python-h11
4056 python-h2
4057 python-priority
4058 python-pydata-sphinx-theme
4059 python-sphinxcontrib-mermaid
4060 python-tomli
4061 python-trio
4062 python-typing-extensions
4063 python-uvloop
4064 python-wsproto))
4065 (native-inputs
4066 (list nss-certs-for-test
4067 python-httpx
4068 python-pdm-backend
4069 python-pytest
4070 python-pytest-asyncio
4071 python-pytest-cov
4072 python-pytest-trio))
4073 (home-page "https://github.com/pgjones/hypercorn")
4074 (synopsis "ASGI Server based on Hyper libraries")
4075 (description
4076 "This package provides an ASGI (Asynchronous Server Gateway Interface)
4077Server based on Hyper libraries and inspired by @code{python-gunicorn}.")
4078 (license license:expat)))
4079
4080(define-public python-hyperframe
4081 (package
4082 (name "python-hyperframe")
4083 (version "6.1.0")
4084 (source
4085 (origin
4086 (method url-fetch)
4087 (uri (pypi-uri "hyperframe" version))
4088 (sha256
4089 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
4090 (build-system pyproject-build-system)
4091 (native-inputs
4092 (list python-pytest python-setuptools))
4093 (home-page "https://github.com/python-hyper/hyperframe")
4094 (synopsis "HTTP/2 framing layer for Python")
4095 (description
4096 "This library contains the HTTP/2 framing code used in the hyper project.
4097It provides a pure-Python codebase that is capable of decoding a binary stream
4098into HTTP/2 frames.")
4099 (license license:expat)))
4100
4101(define-public python-hpack
4102 (package
4103 (name "python-hpack")
4104 (version "4.1.0")
4105 (source
4106 (origin
4107 ;; PyPI tarball is missing some files necessary for the tests.
4108 (method git-fetch)
4109 (uri (git-reference
4110 (url "https://github.com/python-hyper/hpack")
4111 (commit (string-append "v" version))))
4112 (file-name (git-file-name name version))
4113 (sha256
4114 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
4115 (build-system pyproject-build-system)
4116 (native-inputs
4117 (list python-pytest python-setuptools))
4118 (home-page "https://hyper.rtfd.org")
4119 (synopsis "Pure-Python HPACK header compression")
4120 (description
4121 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
4122for use in Python programs that implement HTTP/2.")
4123 (license license:expat)))
4124
4125(define-public python-h11
4126 (package
4127 (name "python-h11")
4128 (version "0.16.0")
4129 (source
4130 (origin
4131 (method url-fetch)
4132 (uri (pypi-uri "h11" version))
4133 (sha256
4134 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
4135 (build-system pyproject-build-system)
4136 (native-inputs
4137 (list python-pytest python-setuptools))
4138 (home-page "https://github.com/python-hyper/h11")
4139 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
4140 (description
4141 "This is a little HTTP/1.1 library written from scratch in Python, heavily
4142inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
4143code whatsoever. This means you can hook h11 up to your favorite network API,
4144and that could be anything you want.")
4145 (license license:expat)))
4146
4147(define-public python-h2
4148 (package
4149 (name "python-h2")
4150 (version "4.1.0")
4151 (source
4152 (origin
4153 (method url-fetch)
4154 (uri (pypi-uri "h2" version))
4155 (sha256
4156 (base32 "1fraip114fm1ha5w37pdc0sk8dn9pb0ck267zrwwpap7zc4clfm8"))))
4157 (build-system pyproject-build-system)
4158 (arguments
4159 (list
4160 ;; AssertionError: assert '<RemoteSettingsChanged
4161 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
4162 ;; new_value=32768)}>' == '<RemoteSettingsChanged
4163 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
4164 ;; original_value=65536, new_value=32768)}>'
4165 #:test-flags
4166 #~(list "-k"
4167 (string-join
4168 (list "not test_remotesettingschanged_repr"
4169 ;; This test exceededs the Hypothesis deadline.
4170 #$@(if (target-riscv64?)
4171 #~("test_changing_max_frame_size")
4172 #~())
4173 "test_streamreset_repr"
4174 "test_settingsacknowledged_repr"
4175 "test_connectionterminated_repr[None-None]"
4176 "test_connectionterminated_repr[some"
4177 "test_remotesettingschanged_repr"
4178 "test_streamreset_repr"
4179 "test_settingsacknowledged_repr"
4180 "test_connectionterminated_repr[None-None]"
4181 "test_connectionterminated_repr[some")
4182 " and not "))))
4183 (native-inputs
4184 (list python-pytest
4185 python-setuptools
4186 python-wheel))
4187 (propagated-inputs
4188 (list python-hpack
4189 python-hyperframe))
4190 (home-page "https://github.com/python-hyper/h2")
4191 (synopsis "HTTP/2 State-Machine based protocol implementation")
4192 (description
4193 "This module contains a pure-Python implementation of a HTTP/2 protocol
4194stack. It does not provide a parsing layer, a network layer, or any rules
4195about concurrency. Instead, it's a purely in-memory solution, defined in
4196terms of data actions and HTTP/2 frames. This is one building block of a full
4197Python HTTP implementation.")
4198 (license license:expat)))
4199
4200(define-public python-slixmpp
4201 (package
4202 (name "python-slixmpp")
4203 (version "1.8.6") ; XXX: The latest version which does not require Rust
4204 (source
4205 (origin
4206 (method git-fetch)
4207 (uri (git-reference
4208 (url "https://codeberg.org/poezio/slixmpp")
4209 (commit (string-append "slix-" version))))
4210 (file-name (git-file-name name version))
4211 (sha256
4212 (base32 "0gpy6arwyk4lsx1hbcwbllxs6qbwn58adkp1rm1cfvfrjdv5kxx7"))))
4213 (build-system pyproject-build-system)
4214 (arguments
4215 (list
4216 #:phases
4217 #~(modify-phases %standard-phases
4218 (add-after 'unpack 'patch-setup.py
4219 (lambda _
4220 (substitute* "setup.py"
4221 (("'CC', 'cc'")
4222 "'CC', 'gcc'")))))))
4223 (native-inputs
4224 (list gnupg
4225 pkg-config
4226 python-cython
4227 python-setuptools
4228 python-wheel))
4229 (inputs
4230 (list libidn
4231 python)) ; We are building a Python extension.
4232 (propagated-inputs
4233 (list python-aiodns
4234 python-aiohttp
4235 python-cryptography
4236 python-defusedxml
4237 python-emoji
4238 python-pyasn1
4239 python-pyasn1-modules))
4240 (home-page "https://lab.louiz.org/poezio/slixmpp")
4241 (synopsis "XMPP library without threads")
4242 (description
4243 "Slixmpp is a XMPP library for Python 3.7+. It is a fork of SleekXMPP.
4244Its goal is to only rewrite the core of the library (the low level socket
4245handling, the timers, the events dispatching) in order to remove all
4246threads.")
4247 (license license:expat)))
4248
4249(define-public python-sockjs-tornado
4250 (package
4251 (name "python-sockjs-tornado")
4252 (version "1.0.6")
4253 (source
4254 (origin
4255 (method git-fetch)
4256 (uri (git-reference
4257 (url "https://github.com/mrjoes/sockjs-tornado/")
4258 (commit (string-append "v" version))))
4259 (file-name (git-file-name name version))
4260 (sha256
4261 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
4262 (build-system pyproject-build-system)
4263 (arguments
4264 (list
4265 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
4266 (native-inputs (list python-setuptools))
4267 (propagated-inputs (list python-tornado))
4268 (home-page "https://github.com/mrjoes/sockjs-tornado/")
4269 (synopsis
4270 "SockJS Python server implementation on top of the Tornado framework")
4271 (description
4272 "SockJS-tornado provides the server-side counterpart to a SockJS client
4273library, through the Tornado framework.
4274
4275SockJS provides a low-latency, full-duplex, cross-domain communication channel
4276between a web browser and web server.")
4277 (license license:expat)))
4278
4279(define-public python-flask-assets
4280 ;; The latest release still depends on the abandoned flask-script, whereas
4281 ;; at this later commit (already 2 years old at the time of this writing)
4282 ;; the dependency has been lifted.
4283 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
4284 (revision "1"))
4285 (package
4286 (name "python-flask-assets")
4287 (version (git-version "2.1.0" revision commit))
4288 (source
4289 (origin
4290 (method git-fetch)
4291 (uri (git-reference
4292 (url "https://github.com/miracle2k/flask-assets/")
4293 (commit commit)))
4294 (file-name (git-file-name name version))
4295 (sha256
4296 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
4297 (build-system pyproject-build-system)
4298 (propagated-inputs
4299 (list python-flask python-webassets))
4300 (native-inputs
4301 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
4302 (home-page "https://github.com/miracle2k/flask-assets")
4303 (synopsis "Asset management for Flask")
4304 (description "This package integrates @code{webassets} with Flask, adding
4305support for merging, minifying and compiling CSS and Javascript files.")
4306 (license license:bsd-2))))
4307
4308(define-public python-flask-babel
4309 (package
4310 (name "python-flask-babel")
4311 (version "4.0.0")
4312 (source
4313 (origin
4314 (method git-fetch) ;no tests in pypi release
4315 (uri (git-reference
4316 (url "https://github.com/python-babel/flask-babel")
4317 (commit (string-append "v" version))))
4318 (sha256
4319 (base32
4320 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
4321 (build-system pyproject-build-system)
4322 (native-inputs
4323 (list python-poetry-core
4324 python-pytest
4325 python-pytest-mock))
4326 (propagated-inputs
4327 (list python-babel
4328 python-flask
4329 python-jinja2
4330 python-pytz))
4331 (home-page "https://github.com/python-babel/flask-babel")
4332 (synopsis "Add i18n/l10n support to Flask applications")
4333 (description "This package implements internationalization and localization
4334support for Flask. This is based on the Python babel module as well as pytz -
4335both of which are installed automatically if you install this library.")
4336 (license license:bsd-3)))
4337
4338(define-public python-flask-cors
4339 (package
4340 (name "python-flask-cors")
4341 (version "6.0.2")
4342 (source
4343 (origin
4344 (method git-fetch) ;no tests in PyPI archive
4345 (uri (git-reference
4346 (url "https://github.com/CoryDolphin/flask-cors")
4347 (commit version)))
4348 (file-name (git-file-name name version))
4349 (sha256
4350 (base32 "02y740h951dscgkm7ghsss1bc0m8ymsfdpsimm1j0nkl0zjl6sgm"))))
4351 (build-system pyproject-build-system)
4352 (arguments
4353 (list
4354 #:phases
4355 #~(modify-phases %standard-phases
4356 (add-after 'unpack 'fix-version
4357 (lambda _
4358 ;; Otherwise sanity-check of dependents will fail.
4359 (substitute* "pyproject.toml"
4360 (("version = \"0\\.0\\.1\"" all)
4361 (string-append "version = \"" #$version "\""))))))))
4362 (native-inputs
4363 (list python-pytest
4364 python-setuptools))
4365 (propagated-inputs
4366 (list python-flask
4367 python-werkzeug))
4368 (home-page "https://flask-cors.readthedocs.io/en/latest/")
4369 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
4370 (description
4371 "This package provides a Flask extension for handling @acronym{CORS,Cross
4372Origin Resource Sharing}, making cross-origin AJAX possible.")
4373 (license license:expat)))
4374
4375(define-public python-flask-markdown
4376 (package
4377 (name "python-flask-markdown")
4378 (version "0.3")
4379 (source
4380 (origin
4381 (method git-fetch)
4382 (uri (git-reference
4383 (url "https://github.com/dcolish/flask-markdown")
4384 (commit version)))
4385 (file-name (git-file-name name version))
4386 (sha256
4387 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
4388 (build-system pyproject-build-system)
4389 (arguments
4390 (list
4391 #:tests? #f ;Tests seem to be incompatible with latest python
4392 #:phases
4393 #~(modify-phases %standard-phases
4394 (add-after 'unpack 'set-version
4395 (lambda _
4396 (substitute* "setup.py"
4397 (("dev")
4398 #$version)))))))
4399 (propagated-inputs (list python-markdown python-flask))
4400 (native-inputs (list python-pynose python-setuptools))
4401 (home-page "https://github.com/dcolish/flask-markdown")
4402 (synopsis "Small extension to help with using Markdown in Flask")
4403 (description
4404 "Flask-Markdown supports several extensions for Markdown and integrates
4405into Jinja2 by default.")
4406 (license license:bsd-3)))
4407
4408(define-public python-flask-session
4409 (package
4410 (name "python-flask-session")
4411 (version "0.8.0")
4412 (source
4413 (origin
4414 (method url-fetch)
4415 (uri (pypi-uri "flask_session" version))
4416 (sha256
4417 (base32
4418 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
4419 (build-system pyproject-build-system)
4420 (arguments
4421 '(#:tests? #f)) ; Tests require the various storage backends to be present
4422 (native-inputs (list python-flit-core))
4423 (propagated-inputs
4424 (list python-cachelib python-flask python-msgspec))
4425 (home-page "https://github.com/pallets-eco/flask-session")
4426 (synopsis "Adds server-side session support to your Flask application")
4427 (description
4428 "Flask-Session is an extension for Flask that adds support for
4429Server-side sessions, with a variety of different backends for session
4430storage.")
4431 (license license:bsd-3)))
4432
4433(define-public python-html5lib
4434 (package
4435 (name "python-html5lib")
4436 (version "1.1")
4437 (source
4438 (origin
4439 (method url-fetch)
4440 (uri (pypi-uri "html5lib" version))
4441 (sha256
4442 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
4443 (build-system pyproject-build-system)
4444 (arguments
4445 '(#:tests? #f)) ;tests depend on dated pytest-expect
4446 (native-inputs
4447 (list python-setuptools))
4448 (propagated-inputs
4449 (list python-six
4450 python-webencodings
4451 ;; Required by Calibre 5.
4452 python-chardet))
4453 (home-page "https://github.com/html5lib/html5lib-python")
4454 (synopsis "Python HTML parser based on the WHATWG HTML specification")
4455 (description
4456 "Html5lib is an HTML parser based on the WHATWG HTML specification
4457and written in Python.")
4458 (license license:expat)))
4459
4460(define-public python-html5-parser
4461 (package
4462 (name "python-html5-parser")
4463 (version "0.4.12")
4464 (source
4465 (origin
4466 (method git-fetch)
4467 (uri (git-reference
4468 (url "https://github.com/kovidgoyal/html5-parser")
4469 (commit (string-append "v" version))))
4470 (file-name (git-file-name name version))
4471 (sha256
4472 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
4473 (build-system pyproject-build-system)
4474 (arguments
4475 (list
4476 #:phases
4477 #~(modify-phases %standard-phases
4478 (add-before 'build 'set-configure-flags
4479 (lambda _
4480 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
4481 (native-inputs (list pkg-config python-setuptools))
4482 (inputs (list libxml2))
4483 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
4484 (home-page "https://html5-parser.readthedocs.io")
4485 (synopsis "Fast C-based HTML5 parsing for Python")
4486 (description
4487 "This package provides a fast implementation of the HTML5 parsing spec
4488for Python. Parsing is done in C using a variant of the gumbo parser. The
4489gumbo parse tree is then transformed into an lxml tree, also in C, yielding
4490parse times that can be a thirtieth of the html5lib parse times.")
4491 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
4492 ;; indicate ASL2.0, including the LICENSE file for the whole project.
4493 (license (list license:asl2.0 license:gpl3))))
4494
4495(define-public python-html5tagger
4496 (package
4497 (name "python-html5tagger")
4498 (version "1.3.0")
4499 (source (origin
4500 (method url-fetch)
4501 (uri (pypi-uri "html5tagger" version))
4502 (sha256
4503 (base32
4504 "1acd1a4f66gi4plqnsml7cf33qp83mxsnmnqpdwkpj7597xkvyl4"))))
4505 (build-system pyproject-build-system)
4506 (arguments
4507 (list #:tests? #f)) ;no tests in PyPI or Git
4508 (native-inputs
4509 (list python-setuptools python-setuptools-scm python-wheel))
4510 (home-page "https://github.com/sanic-org/html5tagger")
4511 (synopsis "Create HTML documents from Python")
4512 (description
4513 "@code{html5tagger} provides a simplified HTML5 syntax that can
4514be written directly in Python without templates.")
4515 (license license:unlicense)))
4516
4517(define-public python-minio
4518 (package
4519 (name "python-minio")
4520 (version "7.1.9")
4521 (source
4522 (origin
4523 (method git-fetch)
4524 (uri (git-reference
4525 (url "https://github.com/minio/minio-py")
4526 (commit version)))
4527 (file-name (git-file-name name version))
4528 (sha256
4529 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
4530 (build-system pyproject-build-system)
4531 (arguments
4532 (list
4533 #:test-flags
4534 ;; XXX: requires network access.
4535 #~(list "--ignore=tests/unit/credentials_test.py")))
4536 (native-inputs (list python-pytest python-setuptools))
4537 (propagated-inputs
4538 (list python-certifi python-dateutil python-pytz python-urllib3))
4539 (home-page "https://github.com/minio/minio-py")
4540 (synopsis "Programmatically access Amazon S3 from Python")
4541 (description
4542 "This package provides a Python library for interacting with any
4543Amazon S3 compatible object storage server.")
4544 (license license:asl2.0)))
4545
4546(define-public python-pycrdt
4547 (package
4548 (name "python-pycrdt")
4549 (version "0.13.0")
4550 (source
4551 (origin
4552 (method git-fetch)
4553 (uri (git-reference
4554 (url "https://github.com/y-crdt/pycrdt")
4555 (commit version)))
4556 (file-name (git-file-name name version))
4557 (sha256
4558 (base32 "18mnjbxdlra1w3jl42bf1jb25z9j3inh6s61qighqrvnylgxvxc1"))))
4559 (build-system pyproject-build-system)
4560 (arguments
4561 (list
4562 #:imported-modules `(,@%cargo-build-system-modules
4563 ,@%pyproject-build-system-modules)
4564 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4565 (guix build pyproject-build-system)
4566 (guix build utils))
4567 #:test-flags #~(list "--ignore=tests/test_types.py")
4568 #:phases
4569 #~(modify-phases %standard-phases
4570 (add-after 'unpack 'relax-requirements
4571 (lambda _
4572 (substitute* "pyproject.toml"
4573 (("requires = \\[\"maturin>=.*\"\\]")
4574 "requires = [\"maturin\"]"))))
4575 (add-after 'unpack 'prepare-cargo-build-system
4576 (lambda args
4577 (for-each
4578 (lambda (phase)
4579 (format #t "Running cargo phase: ~a~%" phase)
4580 (apply (assoc-ref cargo:%standard-phases phase)
4581 #:cargo-target #$(cargo-triplet)
4582 args))
4583 '(unpack-rust-crates
4584 configure
4585 check-for-pregenerated-files
4586 patch-cargo-checksums)))))))
4587 (propagated-inputs
4588 (list python-anyio
4589 python-typing-extensions))
4590 (inputs (cargo-inputs 'pycrdt))
4591 (native-inputs
4592 (append
4593 (list maturin
4594 python-pydantic
4595 python-pytest
4596 rust
4597 `(,rust "cargo"))
4598 (or (and=> (%current-target-system)
4599 (compose list make-rust-sysroot))
4600 '())))
4601 (home-page "https://github.com/y-crdt/pycrdt")
4602 (synopsis "Python CRDTs library ported from Yjs framework")
4603 (description
4604 "Conflict-free Replicated Data Types (CRDTs) allow creating shared
4605documents that can automatically merge changes made concurrently on different
4606copies of the data. When the data lives on different machines, they make it
4607possible to build distributed systems that work with local data, leaving the
4608synchronization and conflict resolution with remote data to the CRDT
4609algorithm, which ensures that all data replicas eventually converge to the
4610same state.
4611
4612This is a Python CRDT library that provides bindings for Yrs, the Rust port of
4613the Yjs framework.")
4614 (license license:expat)))
4615
4616(define-public python-pycrdt-store
4617 (package
4618 (name "python-pycrdt-store")
4619 (version "0.1.3")
4620 (source
4621 (origin
4622 (method git-fetch)
4623 (uri (git-reference
4624 (url "https://github.com/y-crdt/pycrdt-store")
4625 (commit version)))
4626 (file-name (git-file-name name version))
4627 (sha256
4628 (base32 "18yvv5lgxb4v0qlbi8bbkcm1666nxbkmhbx445sxpzab7027fl1a"))))
4629 (build-system pyproject-build-system)
4630 (propagated-inputs
4631 (list python-anyio
4632 python-pycrdt
4633 python-sqlite-anyio))
4634 (native-inputs
4635 (list python-hatchling
4636 python-pytest
4637 python-pytest-rerunfailures
4638 python-trio))
4639 (home-page "https://github.com/y-crdt/pycrdt-store")
4640 (synopsis "Persistent storage for pycrdt")
4641 (description
4642 "This package provides a persistent storage feature for
4643@code{python-pycrdt}.")
4644 (license license:expat)))
4645
4646(define-public python-pycrdt-websocket
4647 (package
4648 (name "python-pycrdt-websocket")
4649 (version "0.16.0")
4650 (source
4651 (origin
4652 (method git-fetch)
4653 (uri (git-reference
4654 (url "https://github.com/y-crdt/pycrdt-websocket")
4655 (commit version)))
4656 (file-name (git-file-name name version))
4657 (sha256
4658 (base32 "1bcxivdra0v5fwlz3hcz98vxi61884bfvcwifsdp3mji28iprv22"))))
4659 (build-system pyproject-build-system)
4660 (arguments
4661 (list
4662 ;; These tests require the unpackaged Yjs.
4663 #:test-flags #~(list "--deselect=tests/test_pycrdt_yjs.py")))
4664 (propagated-inputs
4665 (list python-anyio
4666 python-pycrdt
4667 python-pycrdt-store))
4668 (native-inputs
4669 (list nss-certs-for-test
4670 python-hatchling
4671 python-hypercorn
4672 python-httpx-ws
4673 python-pytest))
4674 (home-page "https://github.com/y-crdt/pycrdt-websocket")
4675 (synopsis "WebSocket connector for pycrdt")
4676 (description "This package provides an asynchronous @code{WebSocket}
4677connector for @code{python-pycrdt}.")
4678 (license license:expat)))
4679
4680(define-public python-pycurl
4681 (package
4682 (name "python-pycurl")
4683 (version "7.45.4")
4684 (source
4685 (origin
4686 (method git-fetch)
4687 (uri (git-reference
4688 (url "https://github.com/pycurl/pycurl")
4689 (commit (string-append
4690 "REL_" (string-replace-substring version "." "_")))))
4691 (file-name (git-file-name name version))
4692 (sha256
4693 (base32 "00cd1l0lsml0708hpv5k4qyhqfv0qphb0p317j9aci2wdspn1mpl"))))
4694 (build-system pyproject-build-system)
4695 (arguments
4696 '(#:test-flags
4697 ;; The test suite is not thread safe:
4698 ;; - some tests want to use the same port: address already in use
4699 ;; - some tests use signal.Signal, i.e. main-thread only
4700 (list "-k" (string-append
4701 ;; Disable hanginging tests
4702 "not test_multi_socket_select"
4703 ;; E assert None is not None
4704 ;; E+ where None =
4705 ;; <tests.multi_callback_test.MultiCallbackTest
4706 ;; testMethod=test_multi_socket_action>.timer_result
4707 " and not test_multi_socket_action"
4708 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
4709 ;; open shared object file: No such file or directory
4710 " and not test_libcurl_ssl_gnutls"
4711 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
4712 ;; open shared object file: No such file or directory
4713 " and not test_libcurl_ssl_nss"
4714 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
4715 ;; open shared object file: No such file or directory
4716 " and not test_libcurl_ssl_openssl"
4717 ;; Probably due to an expired CA
4718 " and not test_request_without_certinfo"
4719 ;; "A libcurl function was given a bad argument"
4720 " and not test_proxy_tlsauth"))
4721 #:phases (modify-phases %standard-phases
4722 (add-before 'build 'configure-tls-backend
4723 (lambda _
4724 ;; XXX: PycURL fails to automatically determine which
4725 ;; TLS backend to use when cURL is built with
4726 ;; --disable-static. See setup.py and
4727 ;; <https://github.com/pycurl/pycurl/pull/147>.
4728 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
4729 (native-inputs
4730 (list python-bottle
4731 python-flaky
4732 python-flask
4733 python-pytest
4734 python-setuptools
4735 python-wheel))
4736 (inputs
4737 (list curl gnutls))
4738 (home-page "http://pycurl.io/")
4739 (synopsis "Lightweight Python wrapper around libcurl")
4740 (description "Pycurl is a lightweight wrapper around libcurl. It provides
4741high-speed transfers via libcurl and frequently outperforms alternatives.")
4742
4743 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
4744 ;; under the terms of LGPLv2.1+ or Expat.
4745 (license (list license:lgpl2.1+ license:expat))))
4746
4747(define-public python-stamina
4748 (package
4749 (name "python-stamina")
4750 (version "25.2.0")
4751 (source
4752 (origin
4753 (method git-fetch)
4754 (uri (git-reference
4755 (url "https://github.com/hynek/stamina")
4756 (commit version)))
4757 (file-name (git-file-name name version))
4758 (sha256
4759 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
4760 (build-system pyproject-build-system)
4761 (native-inputs
4762 (list python-pytest
4763 python-anyio
4764 python-dirty-equals
4765 python-hatch-fancy-pypi-readme
4766 python-hatch-vcs
4767 python-hatchling
4768 python-structlog))
4769 (propagated-inputs
4770 (list python-tenacity
4771 python-typing-extensions))
4772 (home-page "https://github.com/hynek/stamina")
4773 (synopsis "Retries library for Python")
4774 (description
4775 "@code{stamina} is an opinionated wrapper around the
4776@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
4777 (license license:expat)))
4778
4779(define-public python-stripe
4780 (package
4781 (name "python-stripe")
4782 (version "13.2.0")
4783 (source
4784 (origin
4785 (method git-fetch)
4786 (uri (git-reference
4787 (url "https://github.com/stripe/stripe-python")
4788 (commit (string-append "v" version))))
4789 (file-name (git-file-name name version))
4790 (sha256
4791 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
4792 (build-system pyproject-build-system)
4793 (arguments
4794 '(#:tests? #f)) ;; tests require network
4795 (native-inputs
4796 (list python-flit-core))
4797 (propagated-inputs
4798 (list python-httpx
4799 python-requests))
4800 (home-page "https://github.com/stripe/stripe-python")
4801 (synopsis "Python bindings for the Stripe financial services' API")
4802 (description "This package provides access to the Stripe financial
4803services' API. It includes a pre-defined set of classes for API resources
4804that initialize themselves dynamically from API responses which makes it
4805compatible with a wide range of versions of the Stripe API.")
4806 (license license:expat)))
4807
4808(define-public python-stripe-12
4809 (hidden-package
4810 (package/inherit python-stripe
4811 (name "python-stripe")
4812 (version "12.5.1")
4813 (source
4814 (origin
4815 (inherit (package-source python-stripe))
4816 (uri (git-reference
4817 (url "https://github.com/stripe/stripe-python")
4818 (commit (string-append "v" version))))
4819 (file-name (git-file-name name version))
4820 (sha256 (base32
4821 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
4822 (native-inputs
4823 (list python-setuptools)))))
4824
4825(define-public python-tldextract
4826 (package
4827 (name "python-tldextract")
4828 (version "5.3.0")
4829 (source
4830 (origin
4831 (method url-fetch)
4832 (uri (pypi-uri "tldextract" version))
4833 (sha256
4834 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
4835 (build-system pyproject-build-system)
4836 (arguments
4837 (list
4838 #:phases
4839 #~(modify-phases %standard-phases
4840 (add-after 'unpack 'relax-requirements
4841 (lambda _
4842 (substitute* "pyproject.toml"
4843 (("\"requests-file.*\",")
4844 "\"requests-file\",")))))))
4845 (native-inputs
4846 (list nss-certs-for-test
4847 python-pytest
4848 python-pytest-mock
4849 python-responses
4850 python-setuptools
4851 python-setuptools-scm
4852 python-syrupy))
4853 (propagated-inputs
4854 (list python-filelock
4855 python-idna
4856 python-requests
4857 python-requests-file))
4858 (home-page "https://github.com/john-kurkowski/tldextract")
4859 (synopsis
4860 "Separate the TLD from the registered domain and subdomains of a URL")
4861 (description
4862 "TLDExtract accurately separates the TLD from the registered domain and
4863subdomains of a URL, using the Public Suffix List. By default, this includes
4864the public ICANN TLDs and their exceptions. It can optionally support the
4865Public Suffix List's private domains as well.")
4866 (license license:bsd-3)))
4867
4868(define-public python-tracerite
4869 (package
4870 (name "python-tracerite")
4871 (version "1.1.3")
4872 (source
4873 (origin
4874 (method url-fetch)
4875 (uri (pypi-uri "tracerite" version))
4876 (sha256
4877 (base32 "07mkg0sl0h335kj6yjvxki2c19gxhb7rkks1zgzh7aj0y83c17qi"))))
4878 (build-system pyproject-build-system)
4879 (arguments
4880 (list #:tests? #f)) ;no tests in PyPI or Git
4881 (native-inputs
4882 (list python-setuptools
4883 python-setuptools-scm))
4884 (propagated-inputs
4885 (list python-html5tagger))
4886 (home-page "https://github.com/sanic-org/tracerite")
4887 (synopsis "Human-readable HTML tracebacks")
4888 (description
4889 "@code{tracerite} converts Python tracebacks into useful error messages
4890in human-readable HTML format.")
4891 (license license:unlicense)))
4892
4893(define-public python-trio-websocket
4894 (package
4895 (name "python-trio-websocket")
4896 (version "0.12.2")
4897 (source
4898 (origin
4899 (method git-fetch)
4900 (uri (git-reference
4901 (url "https://github.com/HyperionGray/trio-websocket")
4902 (commit version)))
4903 (file-name (git-file-name name version))
4904 (sha256
4905 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
4906 (build-system pyproject-build-system)
4907 (native-inputs
4908 (list python-pytest
4909 python-pytest-trio
4910 python-setuptools
4911 python-trustme))
4912 (propagated-inputs
4913 (list python-outcome
4914 python-trio
4915 python-wsproto))
4916 (home-page "https://github.com/HyperionGray/trio-websocket")
4917 (synopsis "WebSocket library for Trio")
4918 (description "This library implements both server and client aspects of
4919the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
4920striving for safety, correctness, and ergonomics. It is based on the
4921@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
4922@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
4923the majority of the WebSocket protocol, including framing, codecs, and events.
4924This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
4925the Trio framework}.")
4926 (license license:expat)))
4927
4928(define-public python-txacme
4929 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
4930 ;; compatibility with twisted, use the latest commit from trunk branch.
4931 ;;
4932 ;;See: <https://github.com/twisted/txacme/issues/165>.
4933 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
4934 (revision "0"))
4935 (package
4936 (name "python-txacme")
4937 (version (git-version "0.9.3" revision commit))
4938 (source
4939 (origin
4940 (method git-fetch) ;no fresh release in PyPI
4941 (uri (git-reference
4942 (url "https://github.com/twisted/txacme")
4943 (commit commit)))
4944 (file-name (git-file-name name version))
4945 (sha256
4946 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
4947 (build-system pyproject-build-system)
4948 (arguments
4949 (list #:test-backend #~'custom
4950 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
4951 (native-inputs
4952 (list python-setuptools))
4953 (propagated-inputs
4954 (list python-acme
4955 python-attrs
4956 python-eliot
4957 python-josepy
4958 python-pem
4959 python-treq
4960 python-twisted
4961 python-txsni))
4962 (home-page "https://github.com/twisted/txacme")
4963 (synopsis "Twisted implexmentation of the ACME protocol")
4964 (description
4965 "ACME is Automatic Certificate Management Environment, a protocol that
4966allows clients and certificate authorities to automate verification and
4967certificate issuance. The ACME protocol is used by the free Let's Encrypt
4968Certificate Authority.
4969
4970txacme is an implementation of the protocol for Twisted, the event-driven
4971networking engine for Python.")
4972 (license license:expat))))
4973
4974(define-public python-txaio
4975 (package
4976 (name "python-txaio")
4977 (version "25.9.2")
4978 (source
4979 (origin
4980 (method url-fetch)
4981 (uri (pypi-uri "txaio" version))
4982 (sha256
4983 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
4984 (build-system pyproject-build-system)
4985 (native-inputs
4986 (list python-pytest
4987 python-setuptools))
4988 (home-page "https://github.com/crossbario/txaio")
4989 (synopsis "Compatibility layer between Python asyncio and Twisted")
4990 (description
4991 "Txaio provides a compatibility layer between the Python @code{asyncio}
4992 bsmodule and @code{Twisted}.")
4993 (license license:expat)))
4994
4995;; XXX: Potentially abandonware since 2017, consider to remove when nothing
4996;; depends on it or fails to build.
4997(define-public python-txamqp
4998 (package
4999 (name "python-txamqp")
5000 (version "0.8.2")
5001 (source
5002 (origin
5003 (method url-fetch)
5004 (uri (pypi-uri "txAMQP" version))
5005 (sha256
5006 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
5007 (build-system pyproject-build-system)
5008 (arguments
5009 (list #:tests? #f)) ;all tests failed
5010 (native-inputs
5011 (list python-setuptools))
5012 (propagated-inputs
5013 (list python-six python-twisted))
5014 (home-page "https://github.com/txamqp/txamqp")
5015 (synopsis "Communicate with AMQP peers and brokers using Twisted")
5016 (description
5017 "This package provides a Python library for communicating with AMQP peers
5018and brokers using the asynchronous networking framework Twisted. It contains
5019all the necessary code to connect, send and receive messages to/from an
5020AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
5021also includes support for using Thrift RPC over AMQP in Twisted
5022applications.")
5023 (license license:asl2.0)))
5024
5025(define-public python-txsni
5026 (package
5027 (name "python-txsni")
5028 (version "0.2.0")
5029 (source
5030 (origin
5031 (method git-fetch)
5032 (uri (git-reference
5033 (url "https://github.com/glyph/txsni")
5034 (commit (string-append "v" version))))
5035 (file-name (git-file-name name version))
5036 (sha256
5037 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
5038 (build-system pyproject-build-system)
5039 (arguments
5040 (list #:test-backend #~'custom
5041 #:test-flags #~(list "-m" "twisted.trial"
5042 "--temp-directory=/tmp/_trial_temp"
5043 "txsni")))
5044 (native-inputs
5045 (list python-setuptools))
5046 (propagated-inputs
5047 (list python-pyopenssl
5048 python-service-identity
5049 python-twisted))
5050 (home-page "https://github.com/glyph/txsni")
5051 (synopsis "Run TLS servers with Twisted")
5052 (description
5053 "This package provides an easy-to-use SNI endpoint for use with the
5054Twisted web framework.")
5055 (license license:expat)))
5056
5057(define-public python-txtorcon
5058 (package
5059 (name "python-txtorcon")
5060 (version "24.8.0")
5061 (source
5062 (origin
5063 (method url-fetch)
5064 (uri (pypi-uri "txtorcon" version))
5065 (sha256
5066 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
5067 (build-system pyproject-build-system)
5068 (native-inputs
5069 (list python-pytest
5070 python-setuptools
5071 python-wheel))
5072 (inputs
5073 (list lsof))
5074 (propagated-inputs
5075 (list python-automat
5076 python-idna
5077 python-incremental
5078 python-pyopenssl
5079 python-service-identity
5080 python-twisted
5081 python-zope-interface))
5082 (home-page "https://github.com/meejah/txtorcon")
5083 (synopsis "Twisted-based Tor controller client")
5084 (description
5085 "This package provides a Twisted-based Tor controller client,with
5086state-tracking and configuration abstractions.")
5087 (license license:expat)))
5088
5089(define-public python-url-normalize
5090 (package
5091 (name "python-url-normalize")
5092 (version "2.2.1")
5093 (source
5094 (origin
5095 (method git-fetch) ; no tests in PyPI release
5096 (uri (git-reference
5097 (url "https://github.com/niksite/url-normalize")
5098 (commit (string-append "v" version))))
5099 (file-name (git-file-name name version))
5100 (sha256
5101 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
5102 (build-system pyproject-build-system)
5103 (arguments
5104 (list
5105 #:test-flags #~(list "--ignore=tests/test_cli.py")))
5106 (native-inputs
5107 (list python-pytest python-pytest-socket python-setuptools))
5108 (propagated-inputs
5109 (list python-idna))
5110 (home-page "https://github.com/niksite/url-normalize")
5111 (synopsis "URL normalization for Python")
5112 (description
5113 "This package provides a URI Normalization function with following
5114features:
5115@itemize
5116@item take care of IDN domains
5117@item always provide the URI scheme in lowercase characters
5118@item always provide the host, if any, in lowercase characters
5119@item only perform percent-encoding where it is essential
5120@item always use uppercase A-through-F characters when percent-encoding
5121@item prevent dot-segments appearing in non-relative URI paths
5122@item for schemes that define a default authority, use an empty authority if
5123the default is desired
5124@item for schemes that define an empty path to be equivalent to a path of
5125@code{/}, use @code{/}
5126@item for schemes that define a port, use an empty port if the default is
5127desired
5128@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
5129@end itemize")
5130 (license license:expat)))
5131
5132(define-public python-waitress
5133 (package
5134 (name "python-waitress")
5135 (version "3.0.2")
5136 (source
5137 (origin
5138 (method url-fetch)
5139 (uri (pypi-uri "waitress" version))
5140 (sha256
5141 (base32
5142 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
5143 (build-system pyproject-build-system)
5144 (arguments
5145 (list
5146 ;; https://github.com/Pylons/waitress/issues/443
5147 #:test-flags #~(list "-k" "not test_service_port")))
5148 (native-inputs (list python-pytest python-setuptools))
5149 (home-page "https://github.com/Pylons/waitress")
5150 (synopsis "Waitress WSGI server")
5151 (description
5152 "Waitress is meant to be a production-quality pure-Python WSGI server
5153with very acceptable performance.")
5154 (license license:zpl2.1)))
5155
5156(define-public python-weasel
5157 (package
5158 (name "python-weasel")
5159 (version "0.4.1")
5160 (source
5161 (origin
5162 (method url-fetch)
5163 (uri (pypi-uri "weasel" version))
5164 (sha256
5165 (base32 "1aas113r29y6yxrmdlsw80rj8w4kgw1jhfjw9rsgc4rf0w7j3g5a"))))
5166 (build-system pyproject-build-system)
5167 (arguments
5168 (list
5169 #:test-flags
5170 ;; Network access is required.
5171 #~(list #$@(map (lambda (test) (string-append "--deselect="
5172 "weasel/tests/cli/"
5173 test))
5174 (list "test_cli.py::test_project_git_dir_asset"
5175 "test_cli.py::test_project_git_file_asset"
5176 "test_cli_app.py::test_project_assets")))))
5177 (native-inputs
5178 (list python-pytest
5179 python-setuptools))
5180 (propagated-inputs
5181 (list python-cloudpathlib
5182 python-confection
5183 python-packaging
5184 python-pydantic
5185 python-requests
5186 python-smart-open
5187 python-srsly
5188 python-typer
5189 python-wasabi))
5190 (home-page "https://github.com/explosion/weasel/")
5191 (synopsis "Small and easy workflow system")
5192 (description
5193 "This package provides a minimalistic workflow system to manage and
5194share end-to-end workflows for different use cases and domains.")
5195 (license license:expat)))
5196
5197(define-public python-webencodings
5198 (package
5199 (name "python-webencodings")
5200 (version "0.5.1")
5201 (source
5202 (origin
5203 (method url-fetch)
5204 (uri (pypi-uri "webencodings" version))
5205 (sha256
5206 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
5207 (build-system pyproject-build-system)
5208 (arguments
5209 (list #:test-flags #~(list "webencodings/tests.py")))
5210 (native-inputs
5211 (list python-pytest python-setuptools))
5212 (home-page "https://github.com/SimonSapin/python-webencodings")
5213 (synopsis "Character encoding aliases for legacy web content")
5214 (description
5215 "In order to be compatible with legacy web content when interpreting
5216something like @code{Content-Type: text/html; charset=latin1}, tools need to
5217use a particular set of aliases for encoding labels as well as some overriding
5218rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
5219actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
5220BOM takes precedence over any other encoding declaration. The WHATWG
5221@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
5222details so that implementations do not have to reverse-engineer each other.
5223
5224This module implements the Encoding standard and has encoding labels and BOM
5225detection, but the actual implementation for encoders and decoders is
5226Python’s.")
5227 (license license:bsd-3)))
5228
5229(define-public python-omnipath
5230 (package
5231 (name "python-omnipath")
5232 (version "1.0.10")
5233 (source
5234 (origin
5235 (method git-fetch)
5236 (uri (git-reference
5237 (url "https://github.com/saezlab/omnipath/")
5238 (commit (string-append "v" version))))
5239 (file-name (git-file-name name version))
5240 (sha256
5241 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
5242 (build-system pyproject-build-system)
5243 (arguments
5244 (list
5245 #:test-flags '(list "-k"
5246 (string-append
5247 ;; These require internet access
5248 "not test_download_homologene"
5249 " and not test_complex_genes"))
5250 #:phases
5251 #~(modify-phases %standard-phases
5252 (add-after 'unpack 'set-home
5253 (lambda _
5254 (setenv "HOME" "/tmp"))))))
5255 (propagated-inputs (list python-attrs
5256 python-docrep
5257 python-inflect
5258 python-networkx
5259 python-packaging
5260 python-pandas
5261 python-requests
5262 python-tqdm
5263 python-typing-extensions
5264 python-urllib3
5265 python-wrapt))
5266 (native-inputs (list nss-certs-for-test
5267 python-bump2version
5268 python-hatchling
5269 python-pytest
5270 python-pytest-mock
5271 python-pytest-socket
5272 python-requests-mock))
5273 (home-page "https://omnipathdb.org/")
5274 (synopsis "Python client for the OmniPath web service")
5275 (description "This package provides a Python client for the OmniPath web
5276service.")
5277 (license license:expat)))
5278
5279(define-public python-openai
5280 (package
5281 (name "python-openai")
5282 (version "1.3.5")
5283 (source (origin
5284 (method git-fetch)
5285 (uri (git-reference
5286 (url "https://github.com/openai/openai-python")
5287 (commit (string-append "v" version))))
5288 (file-name (git-file-name name version))
5289 (sha256
5290 (base32
5291 "0k1rwhj7v22x5bnv9xbk9nj9grxqmmclh9538qqjadgqxfn5x74q"))))
5292 (build-system pyproject-build-system)
5293 (arguments
5294 (list
5295 #:test-flags
5296 ;; These require internet access and an openai API key.
5297 '(list "--ignore=openai/tests/asyncio/test_endpoints.py"
5298 "--ignore=openai/tests/test_endpoints.py"
5299 "--ignore-glob=tests/api_resources/*"
5300 ;; Needs respx
5301 "--ignore=tests/api_resources/audio/test_speech.py"
5302 "--ignore=tests/api_resources/test_files.py"
5303 "--ignore=tests/test_client.py"
5304 "-k" "not test_requestor_cycle_sessions\
5305 and not test_requestor_sets_request_id\
5306 and not test_file_cli\
5307 and not test_basic_async\
5308 and not test_async\
5309 and not test_datetime_with_alias\
5310 and not test_pydantic")
5311 #:phases
5312 '(modify-phases %standard-phases
5313 (add-after 'unpack 'relax-requirements
5314 (lambda _
5315 (substitute* "pyproject.toml"
5316 (("distro>=1.7.0") "distro>=1.6.0")
5317 (("anyio>=3.5.0, <4") "anyio"))))
5318 (add-after 'unpack 'httpx-compatibility
5319 (lambda _
5320 (substitute* "src/openai/_base_client.py"
5321 (("proxies=proxies,") "")
5322 (("self._proxies = proxies") "")
5323 (("proxies: ProxiesTypes . None,") "")))))))
5324 (propagated-inputs
5325 (list python-aiohttp
5326 python-distro
5327 python-httpx
5328 python-pydantic
5329 python-requests
5330 python-tqdm
5331 python-typing-extensions))
5332 (native-inputs (list nss-certs-for-test
5333 python-dirty-equals
5334 python-hatchling
5335 python-pytest python-pytest-asyncio
5336 python-pytest-mock python-setuptools python-wheel))
5337 (home-page "https://github.com/openai/openai-python")
5338 (synopsis "Python client library for the OpenAI API")
5339 (description "This package provides a Python client library for the
5340OpenAI API.")
5341 (license license:expat)))
5342
5343(define-public python-openapi-schema-validator
5344 (package
5345 (name "python-openapi-schema-validator")
5346 (version "0.6.2")
5347 (source
5348 (origin
5349 (method git-fetch) ;no tests in pypi release
5350 (uri (git-reference
5351 (url "https://github.com/p1c2u/openapi-schema-validator")
5352 (commit version)))
5353 (file-name (git-file-name name version))
5354 (sha256
5355 (base32
5356 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
5357 (build-system pyproject-build-system)
5358 (arguments
5359 (list
5360 #:test-flags
5361 ;; This one returns 5 instead of 4 elements
5362 '(list "-k" "not test_array_prefixitems_invalid")
5363 #:phases
5364 #~(modify-phases %standard-phases
5365 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
5366 (add-after 'unpack 'relax-requirements
5367 (lambda _
5368 (substitute* "pyproject.toml"
5369 (("jsonschema-specifications.*")
5370 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
5371 (native-inputs (list python-poetry-core python-pytest))
5372 (propagated-inputs
5373 (list python-isodate
5374 python-jsonschema
5375 python-rfc3339-validator
5376 python-strict-rfc3339))
5377 (home-page "https://github.com/p1c2u/openapi-schema-validator")
5378 (synopsis "OpenAPI schema validation library for Python")
5379 (description "Openapi-schema-validator is a Python library that validates
5380a schema against:
5381@itemize
5382@item OpenAPI Schema Specification v3.0 which is an extended subset of the
5383JSON Schema Specification Wright Draft 00.
5384@item OpenAPI Schema Specification v3.1 which is an extended superset of the
5385JSON Schema Specification Draft 2020-12.
5386@end itemize")
5387 (license license:bsd-3)))
5388
5389(define-public python-openapi-spec-validator
5390 (package
5391 (name "python-openapi-spec-validator")
5392 (version "0.7.1")
5393 (source
5394 (origin
5395 (method git-fetch) ;no tests in pypi release
5396 (uri (git-reference
5397 (url "https://github.com/p1c2u/openapi-spec-validator")
5398 (commit version)))
5399 (file-name (git-file-name name version))
5400 (sha256
5401 (base32
5402 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
5403 (build-system pyproject-build-system)
5404 (arguments
5405 (list
5406 ;; These tests attempt to fetch resources from the Internet
5407 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
5408 "-k" "not example")))
5409 (native-inputs
5410 (list python-poetry-core
5411 python-pytest))
5412 (propagated-inputs
5413 (list python-jsonschema
5414 python-jsonschema-path
5415 python-lazy-object-proxy
5416 python-openapi-schema-validator
5417 python-pyyaml
5418 python-requests
5419 python-setuptools))
5420 (home-page "https://github.com/p1c2u/openapi-spec-validator")
5421 (synopsis "OpenAPI spec validator")
5422 (description "OpenAPI Spec Validator is a Python library that validates an
5423OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
54243.0 and OpenAPI 3.1 specifications. The validator aims to check for full
5425compliance with the specification.")
5426 (license license:asl2.0)))
5427
5428(define-public python-openapi-core
5429 (package
5430 (name "python-openapi-core")
5431 (version "0.19.4")
5432 (source
5433 (origin
5434 (method git-fetch)
5435 (uri (git-reference
5436 (url "https://github.com/p1c2u/openapi-core")
5437 (commit version)))
5438 (file-name (git-file-name name version))
5439 (sha256
5440 (base32
5441 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
5442 (build-system pyproject-build-system)
5443 (arguments
5444 (list
5445 #:test-flags
5446 '(list "tests/unit"
5447 "-k" "not test_chars_valid")))
5448 (native-inputs (list python-django
5449 python-falcon
5450 python-flask
5451 python-mock
5452 python-poetry-core
5453 python-pytest
5454 python-pytest-asyncio
5455 python-responses))
5456 (propagated-inputs
5457 (list python-attrs
5458 python-aiohttp
5459 python-isodate
5460 python-jsonschema
5461 python-lazy-object-proxy
5462 python-more-itertools
5463 python-openapi-schema-validator
5464 python-openapi-spec-validator
5465 python-parse
5466 python-six
5467 python-werkzeug))
5468 (home-page "https://github.com/p1c2u/openapi-core")
5469 (synopsis "OpenAPI core library")
5470 (description "Openapi-core is a Python library that adds client-side and
5471server-side support for the OpenAPI Specification v3. It has features such
5472as:
5473@itemize
5474@item Validation of requests and responses
5475@item Schema casting and unmarshalling
5476@item Media type and parameters deserialization
5477@item Security providers (API keys, Cookie, Basic and Bearer HTTP
5478authentications)
5479@item Custom deserializers and formats
5480@item Integration with libraries and frameworks.
5481@end itemize")
5482 (license license:bsd-3)))
5483
5484(define-public python-openid
5485 (package
5486 (name "python-openid")
5487 (version "3.2.0")
5488 (source
5489 (origin
5490 (method url-fetch)
5491 (uri (pypi-uri "python3-openid" version))
5492 (sha256
5493 (base32
5494 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
5495 (build-system pyproject-build-system)
5496 (arguments
5497 `(#:phases
5498 (modify-phases %standard-phases
5499 (replace 'check
5500 (lambda* (#:key tests? #:allow-other-keys)
5501 (when tests?
5502 (invoke "python" "-m" "unittest" "openid.test.test_suite")))))))
5503 (propagated-inputs
5504 (list python-defusedxml))
5505 (native-inputs
5506 (list python-psycopg2 python-django python-setuptools python-wheel))
5507 (home-page "https://github.com/necaris/python3-openid")
5508 (synopsis "OpenID support for servers and consumers")
5509 (description "This library provides OpenID authentication for Python, both
5510for clients and servers.")
5511 (license license:asl2.0)))
5512
5513(define-public python-cssutils
5514 (package
5515 (name "python-cssutils")
5516 (version "2.11.1")
5517 (source
5518 (origin
5519 (method url-fetch)
5520 (uri (pypi-uri "cssutils" version))
5521 (sha256
5522 (base32
5523 "1qpq7xvzqp4cfcb8837rnd30x4hws3rkp33qpvmnxbxn2djsfqq5"))))
5524 (build-system pyproject-build-system)
5525 (arguments
5526 (list
5527 #:phases
5528 #~(modify-phases %standard-phases
5529 (replace 'check
5530 (lambda _
5531 (invoke "pytest" "-vv" "-k"
5532 (string-append "not encutils "
5533 "and not website.logging")))))))
5534 (native-inputs
5535 (list python-cssselect
5536 python-jaraco-test
5537 python-lxml
5538 python-pytest
5539 python-setuptools
5540 python-wheel))
5541 (propagated-inputs
5542 (list python-more-itertools))
5543 (home-page "https://github.com/jaraco/cssutils")
5544 (synopsis
5545 "CSS Cascading Style Sheets library for Python")
5546 (description
5547 "Cssutils is a Python package for parsing and building CSS
5548Cascading Style Sheets. Currently it provides a DOM only and no rendering
5549options.")
5550 (license license:lgpl3+)))
5551
5552(define-public python-css-parser
5553 (package
5554 (inherit python-cssutils)
5555 (name "python-css-parser")
5556 (version "1.0.10")
5557 (source
5558 (origin
5559 (method url-fetch)
5560 (uri (pypi-uri "css-parser" version))
5561 (sha256
5562 (base32 "0qs375slcwqd7slizh6hzkwxx7cdj36v8kwn0qrfji1kscm9f7mz"))))
5563 (home-page "https://github.com/ebook-utils/css-parser")
5564 (synopsis "Fork of cssutils modified for parsing ebooks")
5565 (description
5566 "Css-parser is a Python package for parsing and building CSS
5567Cascading Style Sheets. Currently it provides a DOM only and no rendering
5568options.
5569
5570It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
5571cssutils not receiving updates as of 1.0.2.")
5572 (license license:lgpl3+)))
5573
5574(define-public python-cssselect
5575 (package
5576 (name "python-cssselect")
5577 (version "1.2.0")
5578 (source (origin
5579 ;; The PyPI release does not contain tests.
5580 (method git-fetch)
5581 (uri (git-reference
5582 (url "https://github.com/scrapy/cssselect")
5583 (commit (string-append "v" version))))
5584 (file-name (git-file-name name version))
5585 (sha256
5586 (base32
5587 "1x4nrvb1p1byi1whmspik7lbh303akdlh762dayfxam3hycsh5kk"))))
5588 (build-system pyproject-build-system)
5589 (native-inputs
5590 (list python-lxml python-pytest python-setuptools python-wheel))
5591 (home-page "https://github.com/scrapy/cssselect")
5592 (synopsis "CSS3 selector parser and translator to XPath 1.0")
5593 (description
5594 "Cssselect ia a Python module that parses CSS3 Selectors and translates
5595them to XPath 1.0 expressions. Such expressions can be used in lxml or
5596another XPath engine to find the matching elements in an XML or HTML document.")
5597 (license license:bsd-3)))
5598
5599(define-public python-databricks-cli
5600 (package
5601 (name "python-databricks-cli")
5602 (version "0.18.0")
5603 (home-page "https://github.com/databricks/databricks-cli")
5604 (source (origin
5605 (method git-fetch)
5606 (uri (git-reference (url home-page) (commit version)))
5607 (file-name (git-file-name name version))
5608 (sha256
5609 (base32
5610 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
5611 (build-system pyproject-build-system)
5612 (arguments
5613 (list #:phases #~(modify-phases %standard-phases
5614 (replace 'check
5615 (lambda _
5616 (invoke "pytest" "tests" "-vv"))))))
5617 (native-inputs
5618 ;; For tests.
5619 (list python-decorator
5620 python-mock
5621 python-pytest
5622 python-requests-mock
5623 python-setuptools
5624 python-wheel))
5625 (propagated-inputs
5626 (list python-click
5627 python-oauthlib
5628 python-pyjwt
5629 python-requests
5630 python-six
5631 python-tabulate))
5632 (synopsis "Command line interface for Databricks")
5633 (description
5634 "The Databricks Command Line Interface is a tool which provides an easy
5635to use interface to the Databricks platform. The CLI is built on top of the
5636Databricks REST APIs.")
5637 (license license:asl2.0)))
5638
5639(define-public python-openid-cla
5640 ;; XXX: Last updated in 2015.
5641 (package
5642 (name "python-openid-cla")
5643 (version "1.2")
5644 (source
5645 (origin
5646 (method url-fetch)
5647 (uri (pypi-uri "python-openid-cla" version))
5648 (sha256
5649 (base32
5650 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
5651 (build-system pyproject-build-system)
5652 (arguments '(#:tests? #f)) ; No tests.
5653 (native-inputs (list python-setuptools python-wheel))
5654 (propagated-inputs (list python-openid python-six))
5655 (home-page "https://github.com/puiterwijk/python-openid-cla/")
5656 (synopsis "Implementation of the OpenID CLA extension for python-openid")
5657 (description "@code{openid-cla} is an implementation of the OpenID
5658contributor license agreement extension for python-openid.")
5659 (license license:bsd-3)))
5660
5661(define-public python-openid-teams
5662 ;; XXX: Last updated in 2018.
5663 (package
5664 (name "python-openid-teams")
5665 (version "1.1")
5666 (source
5667 (origin
5668 (method url-fetch)
5669 (uri (pypi-uri "python-openid-teams" version))
5670 (sha256
5671 (base32
5672 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
5673 (build-system pyproject-build-system)
5674 (arguments '(#:tests? #f)) ; No tests.
5675 (native-inputs (list python-setuptools python-wheel))
5676 (propagated-inputs (list python-openid python-six))
5677 (home-page "https://github.com/puiterwijk/python-openid-teams/")
5678 (synopsis "Implementation of the OpenID teams extension for python-openid")
5679 (description
5680 "@code{openid-teams} is an implementation of the OpenID
5681teams extension for python-openid.")
5682 (license license:bsd-3)))
5683
5684(define-public python-priority
5685 (package
5686 (name "python-priority")
5687 (version "2.0.0")
5688 (source
5689 (origin
5690 (method url-fetch)
5691 (uri (pypi-uri "priority" version))
5692 (sha256
5693 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
5694 (build-system pyproject-build-system)
5695 (native-inputs
5696 (list python-pytest python-setuptools python-wheel))
5697 (home-page "https://python-hyper.org/projects/priority/en/latest/")
5698 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
5699 (description
5700 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
5701set out in RFC 7540 Section 5.3 (Stream Priority).")
5702 (license license:expat)))
5703
5704(define-public python-weblate-language-data
5705 (package
5706 (name "python-weblate-language-data")
5707 (version "2025.8")
5708 (source
5709 (origin
5710 (method url-fetch)
5711 (uri (pypi-uri "weblate_language_data" version))
5712 (sha256
5713 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
5714 (build-system pyproject-build-system)
5715 (arguments (list #:tests? #f)) ;not tests, just data files
5716 (native-inputs
5717 (list python-setuptools))
5718 (propagated-inputs
5719 (list python-translate-toolkit))
5720 (home-page "https://github.com/WeblateOrg/language-data")
5721 (synopsis "Language definitions for Weblate")
5722 (description
5723 "This package provides language definitions used by
5724@url{https://weblate.org/, Weblate}i.")
5725 (license license:expat)))
5726
5727(define-public python-wikidata
5728 (package
5729 (name "python-wikidata")
5730 (version "0.8.1")
5731 (source
5732 (origin
5733 (method git-fetch)
5734 (uri (git-reference
5735 (url "https://github.com/dahlia/wikidata")
5736 (commit version)))
5737 (file-name (git-file-name name version))
5738 (sha256
5739 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
5740 (build-system pyproject-build-system)
5741 (native-inputs
5742 (list python-pytest python-setuptools))
5743 (home-page "https://github.com/dahlia/wikidata")
5744 (synopsis "Wikidata client library")
5745 (description
5746 "This package provides a Python interface to @url{https://www.wikidata.org/,
5747Wikidata}.")
5748 (license license:gpl3+)))
5749
5750(define-public python-wsproto
5751 (package
5752 (name "python-wsproto")
5753 (version "1.2.0")
5754 (source
5755 (origin
5756 (method url-fetch)
5757 (uri (pypi-uri "wsproto" version))
5758 (sha256
5759 (base32 "0rahm1j9danv1l6i6as80acwv16ycihxkhrvwjiqh9drxhk5ymmd"))))
5760 (build-system pyproject-build-system)
5761 (native-inputs
5762 (list python-pytest python-setuptools python-wheel))
5763 (propagated-inputs
5764 (list python-h11))
5765 (home-page "https://github.com/python-hyper/wsproto/")
5766 (synopsis "WebSockets state-machine based protocol implementation")
5767 (description
5768 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
5769stack. It's written from the ground up to be embeddable in whatever program you
5770choose to use, ensuring that you can communicate via WebSockets, as defined in
5771RFC6455, regardless of your programming paradigm.")
5772 (license license:expat)))
5773
5774(define-public hypercorn
5775 (package
5776 (name "hypercorn")
5777 (version "0.18.0")
5778 (source
5779 (origin
5780 (method git-fetch) ;PyPI does not have tests
5781 (uri (git-reference
5782 (url "https://github.com/pgjones/hypercorn")
5783 (commit version)))
5784 (file-name (git-file-name name version))
5785 (sha256
5786 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
5787 (build-system pyproject-build-system)
5788 ;; Propagate because Hypercorn also exposes functionality over a module.
5789 (propagated-inputs (list python-h11
5790 python-h2
5791 python-priority
5792 python-tomli
5793 python-wsproto))
5794 (native-inputs (list nss-certs-for-test
5795 python-httpx
5796 python-pdm-backend
5797 python-poetry-core
5798 python-pytest
5799 python-pytest-asyncio
5800 python-pytest-trio
5801 python-trio))
5802 (home-page "https://gitlab.com/pgjones/hypercorn/")
5803 (synopsis "ASGI Server based on Hyper libraries")
5804 (description
5805 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
5806wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
5807WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
5808can utilise asyncio, uvloop, or trio worker types.")
5809 (license license:expat)))
5810
5811(define-public python-querystring-parser
5812 (package
5813 (name "python-querystring-parser")
5814 (version "1.2.4")
5815 (source
5816 (origin
5817 (method git-fetch)
5818 (uri (git-reference
5819 (url "https://github.com/bernii/querystring-parser")
5820 (commit version)))
5821 (file-name (git-file-name name version))
5822 (sha256
5823 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
5824 (build-system pyproject-build-system)
5825 (arguments
5826 (list
5827 #:test-backend #~'custom
5828 #:test-flags #~(list "querystring_parser/tests.py")
5829 #:phases
5830 #~(modify-phases %standard-phases
5831 (add-after 'unpack 'fix-python-incompatibilities
5832 (lambda _
5833 (substitute* "querystring_parser/tests.py"
5834 ;; XXX FIXME: This test is broken with Python 3.7:
5835 ;; https://github.com/bernii/querystring-parser/issues/35
5836 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
5837 "True")
5838 ;; Removed in Python 3.12.
5839 (("assertEquals")
5840 "assertEqual")))))))
5841 (native-inputs (list python-setuptools))
5842 (propagated-inputs (list python-six))
5843 (home-page "https://github.com/bernii/querystring-parser")
5844 (synopsis "QueryString parser that correctly handles nested dictionaries")
5845 (description
5846 "This package provides a query string parser for Python and Django
5847projects that correctly creates nested dictionaries from sent form/querystring
5848data.")
5849 (license license:expat)))
5850
5851(define-public python-tornado
5852 (package
5853 (name "python-tornado")
5854 (version "6.4.2")
5855 (source
5856 (origin
5857 (method url-fetch)
5858 (uri (pypi-uri "tornado" version))
5859 (sha256
5860 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
5861 (build-system pyproject-build-system)
5862 (arguments
5863 (list
5864 #:test-flags
5865 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
5866 #~(list "--ignore=tornado/test/iostream_test.py")))
5867 (native-inputs
5868 (list python-certifi
5869 python-pytest
5870 python-setuptools))
5871 (home-page "https://www.tornadoweb.org/")
5872 (synopsis "Python web framework and asynchronous networking library")
5873 (description
5874 "Tornado is a Python web framework and asynchronous networking library,
5875originally developed at FriendFeed. By using non-blocking network I/O,
5876Tornado can scale to tens of thousands of open connections, making it ideal
5877for long polling, WebSockets, and other applications that require a long-lived
5878connection to each user.")
5879 (license license:asl2.0)))
5880
5881(define-public python-tornado-5
5882 (package
5883 (inherit python-tornado)
5884 (version "5.1.1")
5885 (source
5886 (origin
5887 (method url-fetch)
5888 (uri (pypi-uri "tornado" version))
5889 (sha256
5890 (base32
5891 "02clqk2116jbnq8lnaqmdw3p52nqrd9ib59r4xz2ll43fpcmhlaf"))))
5892 (build-system pyproject-build-system)
5893 (arguments
5894 (list
5895 #:phases
5896 '(modify-phases %standard-phases
5897 (add-after 'unpack 'fix-collections
5898 (lambda _
5899 (substitute* "tornado/httputil.py"
5900 (("collections.MutableMapping")
5901 "collections.abc.MutableMapping"))))
5902 (replace 'check
5903 (lambda* (#:key tests? #:allow-other-keys)
5904 (when tests?
5905 (substitute* "tornado/test/runtests.py"
5906 (("\"error\", category=DeprecationWarning")
5907 "\"ignore\", category=DeprecationWarning")
5908 ;; Disable tests that use SSL.
5909 (("'tornado.test.simple_httpclient_test',") "")
5910 (("'tornado.test.iostream_test',") "")
5911 (("'tornado.test.httpserver_test',") "")
5912 ;; Some timeouts are triggered in these two modules
5913 (("'tornado.test.queues_test',") "")
5914 (("'tornado.test.locks_test',") ""))
5915 ;; Skip all network tests
5916 (setenv "NO_NETWORK" "1")
5917 ;; Skip timing-relevant tests
5918 (setenv "TRAVIS" "1")
5919 (invoke "python" "-m" "tornado.test.runtests"
5920 "--verbose=yes")))))))
5921 (native-inputs
5922 (list python-certifi
5923 python-setuptools))))
5924
5925;; XXX: Deprecated on <2026-01-23>.
5926(define-deprecated-package python-tornado-6 python-tornado)
5927
5928(define-public python-tornado-http-auth
5929 (package
5930 (name "python-tornado-http-auth")
5931 (version "1.1.1")
5932 (source
5933 (origin
5934 (method git-fetch)
5935 (uri (git-reference
5936 (url "https://github.com/gvalkov/tornado-http-auth")
5937 (commit (string-append "v" version))))
5938 (file-name (git-file-name name version))
5939 (sha256
5940 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
5941 (build-system pyproject-build-system)
5942 ;; XXX: This version is incompatible with current tornado.testing.
5943 (arguments (list #:tests? #f))
5944 (native-inputs (list python-setuptools))
5945 (propagated-inputs (list python-tornado))
5946 (home-page "https://github.com/gvalkov/tornado-http-auth")
5947 (synopsis "Digest and basic authentication module for Tornado")
5948 (description
5949 "Provides support for adding authentication to services using the Tornado
5950web framework, either via the basic or digest authentication schemes.")
5951 (license license:asl2.0)))
5952
5953(define-public python-wsgi-intercept
5954 (package
5955 (name "python-wsgi-intercept")
5956 (version "1.13.1")
5957 (source (origin
5958 (method url-fetch)
5959 (uri (pypi-uri "wsgi_intercept" version))
5960 (sha256
5961 (base32
5962 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
5963 (build-system pyproject-build-system)
5964 (arguments
5965 (list
5966 ;; XXX: tests required internet access
5967 #:tests? #f))
5968 (propagated-inputs
5969 (list python-six))
5970 (native-inputs
5971 (list python-httplib2
5972 python-pytest
5973 python-requests
5974 python-setuptools
5975 python-urllib3
5976 python-wheel))
5977 (synopsis "Puts a WSGI application in place of a real URI for testing")
5978 (description "Wsgi_intercept installs a WSGI application in place of a real
5979URI for testing. Testing a WSGI application normally involves starting a
5980server at a local host and port, then pointing your test code to that address.
5981Instead, this library lets you intercept calls to any specific host/port
5982combination and redirect them into a WSGI application importable by your test
5983program. Thus, you can avoid spawning multiple processes or threads to test
5984your Web app.")
5985 (home-page "https://github.com/cdent/wsgi-intercept")
5986 (license license:expat)))
5987
5988(define-public python-webob
5989 (package
5990 (name "python-webob")
5991 (version "1.8.9")
5992 (source
5993 (origin
5994 (method url-fetch)
5995 (uri (pypi-uri "webob" version))
5996 (sha256
5997 (base32
5998 "12b5sl10yzzzz3g11kij3rdzk9y6583ywggc6h9nsxmnxpi7hq5d"))))
5999 (build-system pyproject-build-system)
6000 ;; tests: 2380 passed, 9 skipped, 1 xfailed, 12 warnings
6001 (native-inputs
6002 (list python-pytest
6003 python-setuptools))
6004 (home-page "https://webob.org/")
6005 (synopsis "WSGI request and response object")
6006 (description
6007 "WebOb provides wrappers around the WSGI request environment, and an
6008object to help create WSGI responses.")
6009 (license license:expat)))
6010
6011(define-public python-yewtube-search
6012 (package
6013 (name "python-yewtube-search")
6014 ;; Original repository for python-youtube-search package is archived, see:
6015 ;; <https://github.com/alexmercerind/youtube-search-python/issues/189>.
6016 ;; The most promising fork was
6017 ;; <https://github.com/ahmedayyad-dev/youtube-search-python-fork> which is
6018 ;; archived since <2026-04-04>. This is another fork with a different PyPI
6019 ;; name for python-yewtube.
6020 (version "1.6.7")
6021 (source
6022 (origin
6023 (method url-fetch)
6024 (uri (pypi-uri "yewtube_search_python" version))
6025 (sha256
6026 (base32 "0vjh4wrlqx4lv9qi6572jx2d0rsp6gkvaqf0f2ar4npdz0ldgl47"))))
6027 (build-system pyproject-build-system)
6028 (arguments (list #:tests? #f)) ;no tests in repository
6029 (native-inputs
6030 (list python-setuptools))
6031 (propagated-inputs
6032 (list python-httpx))
6033 (home-page "https://github.com/iamtalhaasghar/youtube-search-python")
6034 (synopsis "Search for YouTube videos, channels & playlists")
6035 (description
6036 "This package provides tools to search for @code{YouTube} videos,
6037channels and playlists; as well as getting video metadata from links. This
6038package does not rely on the @code{YouTube} Data API v3.")
6039 (license license:expat)))
6040
6041(define-public python-zc-lockfile
6042 (package
6043 (name "python-zc-lockfile")
6044 (version "4.0")
6045 (source
6046 (origin
6047 (method git-fetch)
6048 (uri (git-reference
6049 (url "https://github.com/zopefoundation/zc.lockfile")
6050 (commit version)))
6051 (file-name (git-file-name name version))
6052 (sha256
6053 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
6054 (build-system pyproject-build-system)
6055 (arguments
6056 (list
6057 #:phases
6058 #~(modify-phases %standard-phases
6059 (replace 'check
6060 (lambda* (#:key tests? #:allow-other-keys)
6061 (if tests?
6062 (invoke "zope-testrunner" "--test-path=src")
6063 (format #t "test suite not run~%")))))))
6064 (native-inputs (list python-zope-testing python-zope-testrunner
6065 python-setuptools))
6066 (home-page "https://github.com/zopefoundation/zc.lockfile")
6067 (synopsis "Interprocess locks using lock files")
6068 (description
6069 "This package provides an implementation of interprocess locks using lock
6070files. These locks can also be used to mediate access to other files.")
6071 (license license:zpl2.1)))
6072
6073(define-public python-zconfig
6074 (package
6075 (name "python-zconfig")
6076 (version "4.3")
6077 (source
6078 (origin
6079 (method git-fetch)
6080 (uri (git-reference
6081 (url "https://github.com/zopefoundation/ZConfig/")
6082 (commit version)))
6083 (file-name (git-file-name name version))
6084 (sha256
6085 (base32 "06c4vffk51fw03q87r31s81b0xbxg2qqvjfmcl2z4hg21fr088c2"))))
6086 (build-system pyproject-build-system)
6087 (arguments
6088 (list
6089 #:phases
6090 #~(modify-phases %standard-phases
6091 (replace 'check
6092 (lambda* (#:key tests? #:allow-other-keys)
6093 (if tests?
6094 (begin
6095 ;; This test assumes we still have setup.py in the
6096 ;; directory from which we import zconfig, which
6097 ;; does not work after installing the package.
6098 (delete-file-recursively
6099 "src/ZConfig/tests/test_readme.py")
6100 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
6101 (format #t "test suite not run~%")))))))
6102 (native-inputs (list python-docutils python-manuel python-zope-exceptions
6103 python-zope-testrunner python-setuptools))
6104 (home-page "https://github.com/zopefoundation/ZConfig/")
6105 (synopsis "Structured configuration library intended for general use")
6106 (description
6107 "@code{zconfig} is a configuration library intended for general use. It
6108supports a hierarchical schema-driven configuration model that allows a schema
6109to specify data conversion routines written in Python. Its model is very
6110different from the model supported by the @code{configparser} module found in
6111Python's standard library, and is more suitable to configuration-intensive
6112applications.")
6113 (license license:zpl2.1)))
6114
6115(define-public python-zodb
6116 (package
6117 (name "python-zodb")
6118 (version "6.0.1")
6119 (source
6120 (origin
6121 (method url-fetch)
6122 (uri (pypi-uri "zodb" version))
6123 (sha256
6124 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
6125 (build-system pyproject-build-system)
6126 (arguments
6127 (list
6128 #:phases
6129 #~(modify-phases %standard-phases
6130 (replace 'check
6131 (lambda* (#:key tests? #:allow-other-keys)
6132 (if tests?
6133 (begin
6134 ;; This test does not work after installing the
6135 ;; package, since it expects the ZODB source code
6136 ;; to reside in the src/ directory.
6137 (delete-file-recursively
6138 "src/ZODB/tests/testdocumentation.py")
6139 (invoke "zope-testrunner" "-vv" "--test-path=src"
6140 "--all"))
6141 (format #t "test suite not run~%")))))))
6142 (native-inputs
6143 (list python-manuel
6144 python-wheel
6145 python-zope-testing
6146 python-zope-testrunner))
6147 (propagated-inputs
6148 (list python-btrees
6149 python-persistent
6150 python-transaction
6151 python-zc-lockfile
6152 python-zconfig
6153 python-zodbpickle
6154 python-zope-interface))
6155 (home-page "http://zodb-docs.readthedocs.io")
6156 (synopsis "Object-oriented database for Python")
6157 (description
6158 "@code{ZODB} provides an object-oriented and @acronym{ACID,
6159Atomicity Consistency Isolation Durability} compliant database for Python with
6160a high degree of transparency. @code{ZODB} is an object-oriented database,
6161not an object-relational mapping. This comes with several advantaged:
6162
6163@itemize
6164@item no separate language for database operations
6165@item very little impact on your code to make objects persistent
6166@item no database mapper that partially hides the database.
6167@item almost no seam between code and database.
6168@end itemize")
6169 (license license:zpl2.1)))
6170
6171(define-public python-zodbpickle
6172 (package
6173 (name "python-zodbpickle")
6174 (version "3.2")
6175 (source
6176 (origin
6177 (method url-fetch)
6178 (uri (pypi-uri "zodbpickle" version))
6179 (sha256
6180 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
6181 (build-system pyproject-build-system)
6182 (arguments
6183 '(#:phases (modify-phases %standard-phases
6184 (replace 'check
6185 (lambda* (#:key tests? #:allow-other-keys)
6186 (if tests?
6187 (invoke "zope-testrunner" "-vv" "--test-path=src"
6188 "--all")
6189 (format #t "test suite not run~%")))))))
6190 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
6191 (home-page "https://github.com/zopefoundation/zodbpickle")
6192 (synopsis "Uniform pickling interface for @code{zodb}")
6193 (description
6194 "This package is a fork of the @code{pickle} module (and the
6195supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
6196support for the @code{noload} operations used by @code{zodb}.")
6197 (license (list license:psfl license:zpl2.1))))
6198
6199(define-public python-zope-dottedname
6200 (package
6201 (name "python-zope-dottedname")
6202 (version "7.0")
6203 (source
6204 (origin
6205 (method git-fetch)
6206 (uri (git-reference
6207 (url "https://github.com/zopefoundation/zope.dottedname")
6208 (commit version)))
6209 (file-name (git-file-name name version))
6210 (sha256
6211 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
6212 (build-system pyproject-build-system)
6213 (arguments
6214 (list #:test-backend #~'custom
6215 #:test-flags #~(list "src/zope/dottedname/tests.py")))
6216 (native-inputs (list python-setuptools))
6217 (home-page "https://zopedottedname.readthedocs.io")
6218 (synopsis "Resolver for Python dotted names")
6219 (description
6220 "This package provides a @code{resolve()} function that resolves strings
6221containing dotted names into the appropriate Python object.")
6222 (license license:zpl2.1)))
6223
6224(define-public python-zope-event
6225 (package
6226 (name "python-zope-event")
6227 (version "6.0")
6228 (source
6229 (origin
6230 (method git-fetch)
6231 (uri (git-reference
6232 (url "https://github.com/zopefoundation/zope.event")
6233 (commit version)))
6234 (file-name (git-file-name name version))
6235 (sha256
6236 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
6237 (build-system pyproject-build-system)
6238 (arguments
6239 (list
6240 #:test-flags
6241 #~(list "src/zope/event/tests.py")))
6242 (native-inputs (list python-pytest python-setuptools))
6243 (home-page "https://zopeevent.readthedocs.io/en/latest/")
6244 (synopsis "Event publishing system for Python")
6245 (description
6246 "Zope.event provides an event publishing API, intended for use by
6247applications which are unaware of any subscribers to their events. It is a
6248simple event-dispatching system on which more sophisticated event dispatching
6249systems can be built.")
6250 (license license:zpl2.1)))
6251
6252(define-public python-zope-interface
6253 (package
6254 (name "python-zope-interface")
6255 (version "7.2")
6256 (source
6257 (origin
6258 (method git-fetch)
6259 (uri (git-reference
6260 (url "https://github.com/zopefoundation/zope.interface")
6261 (commit version)))
6262 (file-name (git-file-name name version))
6263 (sha256
6264 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
6265 (build-system pyproject-build-system)
6266 (arguments
6267 ;; XXX: test suite can't find python-zope-testing
6268 (list #:tests? #f))
6269 (native-inputs (list python-setuptools))
6270 (home-page "https://zopeinterface.readthedocs.io")
6271 (synopsis "\"Design by contract\" methodology in Python")
6272 (description
6273 "Zope.interface provides an implementation of \"object interfaces\" for
6274Python. Interfaces are a mechanism for labeling objects as conforming to a
6275given API or contract.")
6276 (license license:zpl2.1)))
6277
6278(define-public python-zope-exceptions
6279 (package
6280 (name "python-zope-exceptions")
6281 (version "6.0")
6282 (source
6283 (origin
6284 (method git-fetch)
6285 (uri (git-reference
6286 (url "https://github.com/zopefoundation/zope.exceptions")
6287 (commit version)))
6288 (file-name (git-file-name name version))
6289 (sha256
6290 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
6291 (build-system pyproject-build-system)
6292 (arguments
6293 (list
6294 #:phases
6295 #~(modify-phases %standard-phases
6296 (replace 'check
6297 (lambda* (#:key tests? #:allow-other-keys)
6298 (if tests?
6299 (invoke "zope-testrunner" "--test-path=src")
6300 (format #t "test suite not run~%")))))))
6301 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
6302 (propagated-inputs (list python-zope-interface))
6303 (home-page "https://github.com/zopefoundation/zope.exceptions")
6304 (synopsis "Zope exceptions")
6305 (description
6306 "Zope.exceptions provides general-purpose exception types that have uses
6307outside of the Zope framework.")
6308 (license license:zpl2.1)))
6309
6310(define (python-zope-bootstrap-package orig)
6311 (package
6312 (inherit orig)
6313 (name (string-append (package-name orig) "-bootstrap"))
6314 (arguments
6315 (if (null? (package-arguments orig))
6316 (list
6317 #:tests? #f
6318 #:phases #~(modify-phases %standard-phases
6319 (delete 'sanity-check)))
6320 (substitute-keyword-arguments arguments
6321 ((#:tests? _ #f) #f)
6322 ((#:phases phases '%standard-phases)
6323 #~(modify-phases #$phases
6324 (delete 'sanity-check))))))
6325 (propagated-inputs `())
6326 (native-inputs (list python-setuptools))
6327 (properties `((hidden? . #t)))))
6328
6329(define-public python-zope-exceptions-bootstrap
6330 (python-zope-bootstrap-package python-zope-exceptions))
6331
6332(define-public python-zope-testing
6333 (package
6334 (name "python-zope-testing")
6335 (version "6.0")
6336 (source
6337 (origin
6338 (method git-fetch)
6339 (uri (git-reference
6340 (url "https://github.com/zopefoundation/zope.testing")
6341 (commit version)))
6342 (file-name (git-file-name name version))
6343 (sha256
6344 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
6345 (build-system pyproject-build-system)
6346 (arguments
6347 (list
6348 #:phases
6349 #~(modify-phases %standard-phases
6350 (replace 'check
6351 (lambda* (#:key tests? #:allow-other-keys)
6352 (if tests?
6353 (invoke "zope-testrunner" "--test-path=src")
6354 (format #t "test suite not run~%")))))))
6355 (native-inputs (list python-setuptools
6356 python-zope-interface
6357 python-zope-testrunner-bootstrap))
6358 (home-page "https://zopetesting.readthedocs.io/")
6359 (synopsis "Zope testing helpers")
6360 (description
6361 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
6362servers, regular expressions, and more.")
6363 (license license:zpl2.1)))
6364
6365(define-public python-zope-testrunner
6366 (package
6367 (name "python-zope-testrunner")
6368 (version "7.4")
6369 (source
6370 (origin
6371 (method git-fetch)
6372 (uri (git-reference
6373 (url "https://github.com/zopefoundation/zope.testrunner")
6374 (commit version)))
6375 (file-name (git-file-name name version))
6376 (sha256
6377 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
6378 (build-system pyproject-build-system)
6379 (arguments
6380 (list
6381 #:phases
6382 #~(modify-phases %standard-phases
6383 (add-after 'unpack 'remove-problematic-test
6384 (lambda _
6385 ;; This test contains invalid syntax, which breaks bytecode
6386 ;; compilation. For simplicity just remove it.
6387 (delete-file
6388 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
6389 (replace 'check
6390 (lambda* (#:key tests? #:allow-other-keys)
6391 (if tests?
6392 (invoke "zope-testrunner" "--test-path=src")
6393 (format #t "test suite not run~%")))))))
6394 (native-inputs (list python-setuptools python-zope-testing))
6395 (propagated-inputs (list python-zope-exceptions python-zope-interface))
6396 (home-page "https://zopetestrunner.readthedocs.io")
6397 (synopsis "Zope testrunner script")
6398 (description "This package provides a script for running Python tests.")
6399 (license license:zpl2.1)))
6400
6401(define-public python-zope-testrunner-bootstrap
6402 (package
6403 (inherit (python-zope-bootstrap-package python-zope-testrunner))
6404 (propagated-inputs
6405 (list python-six python-zope-exceptions-bootstrap))
6406 (properties `((hidden? . #t)))))
6407
6408(define-public python-zope-i18nmessageid
6409 (package
6410 (name "python-zope-i18nmessageid")
6411 (version "7.0")
6412 (source
6413 (origin
6414 (method git-fetch)
6415 (uri (git-reference
6416 (url "https://github.com/zopefoundation/zope.i18nmessageid")
6417 (commit version)))
6418 (file-name (git-file-name name version))
6419 (sha256
6420 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
6421 (build-system pyproject-build-system)
6422 (arguments
6423 (list
6424 #:phases
6425 #~(modify-phases %standard-phases
6426 (replace 'check
6427 (lambda* (#:key tests? #:allow-other-keys)
6428 (if tests?
6429 (invoke "zope-testrunner" "--test-path=src")
6430 (format #t "test suite not run~%")))))))
6431 (native-inputs (list python-setuptools python-zope-testrunner))
6432 (home-page "https://zopei18nmessageid.readthedocs.io")
6433 (synopsis "Message identifiers for internationalization")
6434 (description "Zope.i18nmessageid provides facilities for declaring
6435internationalized messages within program source text.")
6436 (license license:zpl2.1)))
6437
6438(define-public python-zope-schema
6439 (package
6440 (name "python-zope-schema")
6441 (version "7.0.1")
6442 (source
6443 (origin
6444 (method git-fetch)
6445 (uri (git-reference
6446 (url "https://github.com/zopefoundation/zope.schema")
6447 (commit version)))
6448 (file-name (git-file-name name version))
6449 (sha256
6450 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
6451 (build-system pyproject-build-system)
6452 (arguments
6453 (list
6454 #:phases
6455 #~(modify-phases %standard-phases
6456 (replace 'check
6457 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6458 (add-installed-pythonpath inputs outputs)
6459 (if tests?
6460 (invoke "zope-testrunner" "--test-path=src")
6461 (format #t "test suite not run.~%")))))))
6462 (propagated-inputs (list python-zope-event python-zope-interface))
6463 (native-inputs (list python-zope-i18nmessageid python-zope-testing
6464 python-zope-testrunner python-setuptools))
6465 (home-page "https://zopeschema.readthedocs.io")
6466 (synopsis "Zope data schemas")
6467 (description "Zope.scheme provides extensions to zope.interface for
6468defining data schemas.")
6469 (license license:zpl2.1)))
6470
6471(define-public python-zope-sqlalchemy
6472 (package
6473 (name "python-zope-sqlalchemy")
6474 (version "1.6")
6475 (source
6476 (origin
6477 (method git-fetch)
6478 (uri (git-reference
6479 (url "https://github.com/zopefoundation/zope.sqlalchemy")
6480 (commit version)))
6481 (file-name (git-file-name name version))
6482 (sha256
6483 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
6484 (build-system pyproject-build-system)
6485 (arguments
6486 (list
6487 #:phases
6488 #~(modify-phases %standard-phases
6489 (replace 'check
6490 (lambda* (#:key tests? #:allow-other-keys)
6491 (if tests?
6492 (invoke "zope-testrunner" "--test-path=src")
6493 (format #t "test suite not run~%")))))))
6494 (propagated-inputs (list python-sqlalchemy python-transaction
6495 python-zope-interface))
6496 (native-inputs (list python-zope-testing python-zope-testrunner
6497 python-setuptools))
6498 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
6499 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
6500 (description
6501 "The aim of this package is to unify the plethora of existing packages
6502integrating SQLAlchemy with Zope's transaction management. As such,it only
6503provides a data manager and makes no attempt to define a @i{zopeish} way to
6504configure engines.")
6505 (license license:zpl2.1)))
6506
6507(define-public python-zope-configuration
6508 (package
6509 (name "python-zope-configuration")
6510 (version "7.0")
6511 (source
6512 (origin
6513 (method git-fetch)
6514 (uri (git-reference
6515 (url "https://github.com/zopefoundation/zope.configuration")
6516 (commit version)))
6517 (file-name (git-file-name name version))
6518 (sha256
6519 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
6520 (build-system pyproject-build-system)
6521 (arguments
6522 (list
6523 #:phases
6524 #~(modify-phases %standard-phases
6525 (replace 'check
6526 (lambda* (#:key tests? #:allow-other-keys)
6527 (if tests?
6528 (invoke "zope-testrunner" "--test-path=src")
6529 (format #t "test suite not run~%")))))))
6530 (native-inputs (list python-manuel python-setuptools python-zope-testing
6531 python-zope-testrunner))
6532 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
6533 python-zope-schema))
6534 (home-page "https://zopeconfiguration.readthedocs.io")
6535 (synopsis "Zope Configuration Markup Language")
6536 (description "Zope.configuration implements ZCML, the Zope Configuration
6537Markup Language.")
6538 (license license:zpl2.1)))
6539
6540(define-public python-zope-configuration-bootstrap
6541 (python-zope-bootstrap-package python-zope-configuration))
6542
6543(define-public python-zope-copy
6544 (package
6545 (name "python-zope-copy")
6546 (version "6.0")
6547 (source
6548 (origin
6549 (method git-fetch)
6550 (uri (git-reference
6551 (url "https://github.com/zopefoundation/zope.copy")
6552 (commit version)))
6553 (file-name (git-file-name name version))
6554 (sha256
6555 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
6556 (build-system pyproject-build-system)
6557 (arguments
6558 (list
6559 #:phases
6560 #~(modify-phases %standard-phases
6561 (replace 'check
6562 (lambda* (#:key tests? #:allow-other-keys)
6563 (if tests?
6564 (invoke "zope-testrunner" "--test-path=src")
6565 (format #t "test suite not run~%")))))))
6566 (propagated-inputs (list python-zope-interface))
6567 (native-inputs
6568 (list python-zodbpickle
6569 python-zope-component-bootstrap
6570 python-zope-location-bootstrap
6571 python-zope-proxy
6572 python-zope-schema
6573 python-zope-testing
6574 python-zope-testrunner
6575 python-setuptools))
6576 (home-page "https://zopecopy.readthedocs.io")
6577 (synopsis "Pluggable object copying mechanism")
6578 (description
6579 "This package provides a pluggable mechanism for copying persistent objects.")
6580 (license license:zpl2.1)))
6581
6582(define-public python-zope-proxy
6583 (package
6584 (name "python-zope-proxy")
6585 (version "7.0")
6586 (source
6587 (origin
6588 (method git-fetch)
6589 (uri (git-reference
6590 (url "https://github.com/zopefoundation/zope.proxy")
6591 (commit version)))
6592 (file-name (git-file-name name version))
6593 (sha256
6594 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
6595 (build-system pyproject-build-system)
6596 (arguments
6597 (list
6598 #:phases
6599 #~(modify-phases %standard-phases
6600 (replace 'check
6601 (lambda* (#:key tests? #:allow-other-keys)
6602 (if tests?
6603 (invoke "zope-testrunner" "--test-path=src")
6604 (format #t "test suite not run~%")))))))
6605 (native-inputs
6606 (list python-zope-location-bootstrap
6607 python-zope-security-bootstrap
6608 python-zope-testrunner
6609 python-setuptools))
6610 (propagated-inputs (list python-zope-interface))
6611 (home-page "https://zopeproxy.readthedocs.io")
6612 (synopsis "Generic, transparent proxies")
6613 (description
6614 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
6615special objects which serve as mostly-transparent wrappers around another
6616object, intervening in the apparent behavior of the wrapped object only when
6617necessary to apply the policy (e.g., access checking, location brokering,
6618etc.) for which the proxy is responsible.")
6619 (license license:zpl2.1)))
6620
6621(define-public python-zope-proxy-bootstrap
6622 (python-zope-bootstrap-package python-zope-proxy))
6623
6624(define-public python-zope-hookable
6625 (package
6626 (name "python-zope-hookable")
6627 (version "7.0")
6628 (source
6629 (origin
6630 (method git-fetch)
6631 (uri (git-reference
6632 (url "https://github.com/zopefoundation/zope.hookable")
6633 (commit version)))
6634 (file-name (git-file-name name version))
6635 (sha256
6636 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
6637 (build-system pyproject-build-system)
6638 (arguments
6639 (list
6640 #:phases
6641 #~(modify-phases %standard-phases
6642 (replace 'check
6643 (lambda* (#:key tests? #:allow-other-keys)
6644 (if tests?
6645 (invoke "zope-testrunner" "--test-path=src")
6646 (format #t "test suite not run~%")))))))
6647 (native-inputs (list python-zope-testing python-zope-testrunner
6648 python-setuptools))
6649 (home-page "https://zopehookable.readthedocs.io")
6650 (synopsis "Zope hookable")
6651 (description
6652 "This package supports the efficient creation of hookable objects, which
6653are callable objects that are meant to be optionally replaced. The idea is
6654that you create a function that does some default thing and make i hookable.
6655Later, someone can modify what it does by calling its sethook method and
6656changing its implementation. All users of the function, including those that
6657imported it, will see the change.")
6658 (license license:zpl2.1)))
6659
6660(define-public python-zope-location
6661 (package
6662 (name "python-zope-location")
6663 (version "6.0")
6664 (source
6665 (origin
6666 (method git-fetch)
6667 (uri (git-reference
6668 (url "https://github.com/zopefoundation/zope.location")
6669 (commit version)))
6670 (file-name (git-file-name name version))
6671 (sha256
6672 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
6673 (build-system pyproject-build-system)
6674 (arguments
6675 (list
6676 #:phases
6677 #~(modify-phases %standard-phases
6678 (replace 'check
6679 (lambda* (#:key tests? #:allow-other-keys)
6680 (if tests?
6681 (invoke "zope-testrunner" "--test-path=src")
6682 (format #t "test suite not run~%")))))))
6683 (native-inputs (list python-zope-testrunner python-setuptools))
6684 (propagated-inputs (list python-zope-interface python-zope-proxy
6685 python-zope-schema))
6686 (home-page "https://zopelocation.readthedocs.io")
6687 (synopsis "Zope location library")
6688 (description
6689 "Zope.location implements the concept of \"locations\" in Zope3, which
6690are are special objects that have a structural location.")
6691 (license license:zpl2.1)))
6692
6693(define-public python-zope-location-bootstrap
6694 (python-zope-bootstrap-package python-zope-location))
6695
6696(define-public python-zope-security
6697 (package
6698 (name "python-zope-security")
6699 (version "7.3")
6700 (source
6701 (origin
6702 (method git-fetch)
6703 (uri (git-reference
6704 (url "https://github.com/zopefoundation/zope.security")
6705 (commit version)))
6706 (file-name (git-file-name name version))
6707 (sha256
6708 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
6709 (build-system pyproject-build-system)
6710 (arguments
6711 (list
6712 #:phases
6713 #~(modify-phases %standard-phases
6714 (replace 'check
6715 (lambda* (#:key tests? #:allow-other-keys)
6716 (if tests?
6717 (invoke "zope-testrunner" "--test-path=src")
6718 (format #t "test suite not run~%")))))))
6719 (propagated-inputs
6720 (list python-zope-component
6721 python-zope-i18nmessageid
6722 python-zope-interface
6723 python-zope-location
6724 python-zope-proxy
6725 python-zope-schema))
6726 (native-inputs
6727 (list python-btrees
6728 python-zope-component-bootstrap
6729 python-zope-configuration-bootstrap
6730 python-zope-location-bootstrap
6731 python-zope-testing
6732 python-zope-testrunner
6733 python-setuptools))
6734 (home-page "https://zopesecurity.readthedocs.io")
6735 (synopsis "Zope security framework")
6736 (description "Zope.security provides a generic mechanism to implement
6737security policies on Python objects.")
6738 (license license:zpl2.1)))
6739
6740(define-public python-zope-security-bootstrap
6741 (package
6742 (inherit (python-zope-bootstrap-package python-zope-security))
6743 (propagated-inputs
6744 (list python-zope-i18nmessageid
6745 python-zope-interface
6746 python-zope-proxy-bootstrap
6747 python-zope-schema))))
6748
6749(define-public python-zope-component
6750 (package
6751 (name "python-zope-component")
6752 (version "7.0")
6753 (source
6754 (origin
6755 (method git-fetch)
6756 (uri (git-reference
6757 (url "https://github.com/zopefoundation/zope.component")
6758 (commit version)))
6759 (file-name (git-file-name name version))
6760 (sha256
6761 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
6762 (build-system pyproject-build-system)
6763 (arguments
6764 (list
6765 #:phases
6766 #~(modify-phases %standard-phases
6767 (replace 'check
6768 (lambda* (#:key tests? #:allow-other-keys)
6769 (if tests?
6770 (invoke "zope-testrunner" "--test-path=src")
6771 (format #t "test suite not run~%")))))))
6772 (native-inputs
6773 (list python-persistent
6774 python-zope-configuration-bootstrap
6775 python-zope-i18nmessageid
6776 python-zope-location-bootstrap
6777 python-zope-proxy-bootstrap
6778 python-zope-security-bootstrap
6779 python-zope-testing
6780 python-zope-testrunner
6781 python-setuptools))
6782 (propagated-inputs
6783 (list python-zope-deferredimport python-zope-deprecation
6784 python-zope-event python-zope-hookable python-zope-interface))
6785 (home-page "https://zopecomponent.readthedocs.io")
6786 (synopsis "Zope Component Architecture")
6787 (description
6788 "Zope.component represents the core of the Zope Component Architecture.
6789Together with the zope.interface package, it provides facilities for defining,
6790registering and looking up components.")
6791 (license license:zpl2.1)))
6792
6793(define-public python-zope-component-bootstrap
6794 (python-zope-bootstrap-package python-zope-component))
6795
6796(define-public python-zope-deferredimport
6797 (package
6798 (name "python-zope-deferredimport")
6799 (version "6.0")
6800 (source
6801 (origin
6802 (method git-fetch)
6803 (uri (git-reference
6804 (url "https://github.com/zopefoundation/zope.deferredimport")
6805 (commit version)))
6806 (file-name (git-file-name name version))
6807 (sha256
6808 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
6809 (build-system pyproject-build-system)
6810 (arguments
6811 (list
6812 #:phases
6813 #~(modify-phases %standard-phases
6814 (replace 'check
6815 (lambda* (#:key tests? #:allow-other-keys)
6816 (if tests?
6817 (invoke "zope-testrunner" "--test-path=src")
6818 (format #t "test suite not run~%")))))))
6819 (propagated-inputs (list python-zope-proxy))
6820 (native-inputs (list python-zope-testrunner python-setuptools))
6821 (home-page "https://zopedeferredimport.readthedocs.io")
6822 (synopsis "Defer imports until used by code")
6823 (description
6824 "Often, especially for package modules, you want to import names for
6825convenience, but not actually perform the imports until necessary. The
6826@code{zope.deferredimport} package provided facilities for defining names in
6827modules that will be imported from somewhere else when used. You can also cause
6828deprecation warnings to be issued when a variable is used.")
6829 (license license:zpl2.1)))
6830
6831(define-public python-ndg-httpsclient
6832 (package
6833 (name "python-ndg-httpsclient")
6834 (version "0.5.1")
6835 (source
6836 (origin
6837 (method git-fetch)
6838 (uri (git-reference
6839 (url "https://github.com/cedadev/ndg_httpsclient/")
6840 (commit version)))
6841 (file-name (git-file-name name version))
6842 (sha256
6843 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
6844 (build-system pyproject-build-system)
6845 (arguments
6846 (list
6847 #:tests? #f)) ;Tests appear to require networking.
6848 (native-inputs (list python-setuptools))
6849 (propagated-inputs (list python-pyasn1 python-pyopenssl))
6850 (synopsis "HTTPS support for Python's httplib and urllib2")
6851 (description
6852 "This is a HTTPS client implementation for httplib and urllib2 based on
6853PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
6854the default provided with Python and, importantly, enables full verification
6855of the SSL peer.")
6856 (home-page "https://github.com/cedadev/ndg_httpsclient/")
6857 (license license:bsd-3)))
6858
6859(define-public python-netaddr
6860 (package
6861 (name "python-netaddr")
6862 (version "1.3.0")
6863 (source
6864 (origin
6865 (method url-fetch)
6866 (uri (pypi-uri "netaddr" version))
6867 (sha256
6868 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
6869 (build-system pyproject-build-system)
6870 (native-inputs (list python-poetry-core
6871 python-pytest
6872 python-setuptools
6873 python-wheel))
6874 (home-page "https://netaddr.readthedocs.io")
6875 (synopsis "Pythonic manipulation of network addresses")
6876 (description
6877 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
6878and MAC network addresses.")
6879 (license license:bsd-3)))
6880
6881(define-public python-nh3
6882 (package
6883 (name "python-nh3")
6884 (version "0.2.20")
6885 (source
6886 (origin
6887 (method url-fetch)
6888 (uri (pypi-uri "nh3" version))
6889 (sha256
6890 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
6891 (build-system pyproject-build-system)
6892 (arguments
6893 (list
6894 #:imported-modules `(,@%cargo-build-system-modules
6895 ,@%pyproject-build-system-modules)
6896 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
6897 (guix build pyproject-build-system)
6898 (guix build utils))
6899 #:phases
6900 #~(modify-phases %standard-phases
6901 (add-after 'unpack 'prepare-cargo-build-system
6902 (lambda args
6903 (for-each
6904 (lambda (phase)
6905 (format #t "Running cargo phase: ~a~%" phase)
6906 (apply (assoc-ref cargo:%standard-phases phase)
6907 #:cargo-target #$(cargo-triplet)
6908 args))
6909 '(unpack-rust-crates
6910 configure
6911 check-for-pregenerated-files
6912 patch-cargo-checksums)))))))
6913 (native-inputs
6914 (append
6915 (list maturin python-pytest rust `(,rust "cargo"))
6916 (or (and=> (%current-target-system)
6917 (compose list make-rust-sysroot))
6918 '())))
6919 (inputs (cargo-inputs 'python-nh3))
6920 (home-page "https://nh3.readthedocs.io")
6921 (synopsis "Python bindings to Ammonia HTML sanitization library")
6922 (description "This package provides Python bindings to Ammonia HTML
6923sanitizer Rust crate.")
6924 (license license:expat)))
6925
6926(define-public python-noiseprotocol
6927 (package
6928 (name "python-noiseprotocol")
6929 (version "0.3.1")
6930 (source
6931 (origin
6932 (method git-fetch)
6933 (uri (git-reference
6934 (url "https://github.com/plizonczyk/noiseprotocol")
6935 (commit (string-append "v" version))))
6936 (file-name (git-file-name name version))
6937 (sha256
6938 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
6939 (build-system pyproject-build-system)
6940 (propagated-inputs (list python-cryptography))
6941 (native-inputs (list python-setuptools python-pytest))
6942 (home-page "https://github.com/plizonczyk/noiseprotocol")
6943 (synopsis "Implementation of Noise Protocol Framework")
6944 (description
6945 "This package provides an implementation of Noise Protocol Framework.")
6946 (license license:expat)))
6947
6948(define-public python-webrtcvad-wheels
6949 (package
6950 (name "python-webrtcvad-wheels")
6951 (version "2.0.14")
6952 (source
6953 (origin
6954 (method git-fetch)
6955 (uri (git-reference
6956 (url "https://github.com/daanzu/py-webrtcvad-wheels")
6957 (commit (string-append "v" version))))
6958 (file-name (git-file-name name version))
6959 (sha256
6960 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
6961 (build-system pyproject-build-system)
6962 (native-inputs (list python-psutil python-pytest python-setuptools))
6963 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
6964 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
6965 (description
6966 "This package provides a Python interface to the Google
6967@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
6968 (license license:expat)))
6969
6970(define-public python-websocket-client
6971 (package
6972 (name "python-websocket-client")
6973 (version "1.8.0")
6974 (source
6975 (origin
6976 (method url-fetch)
6977 (uri (pypi-uri "websocket_client" version))
6978 (sha256
6979 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
6980 (build-system pyproject-build-system)
6981 (arguments
6982 (list
6983 #:test-flags
6984 ;; This test requires networking.
6985 '(list "-k" "not testConnect")))
6986 (native-inputs
6987 (list python-pysocks
6988 python-pytest
6989 python-setuptools
6990 python-websockets
6991 python-wheel))
6992 (home-page "https://github.com/websocket-client/websocket-client")
6993 (synopsis "WebSocket client for Python")
6994 (description "The Websocket-client module provides the low level APIs for
6995WebSocket usage in Python programs.")
6996 (license license:lgpl2.1+)))
6997
6998(define-public python-websocket-client-0.59
6999 (package
7000 (inherit python-websocket-client)
7001 (version "0.59.0")
7002 (source
7003 (origin
7004 (method url-fetch)
7005 (uri (pypi-uri "websocket-client" version))
7006 (sha256
7007 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
7008 (native-inputs
7009 (modify-inputs native-inputs
7010 (append python-six)))))
7011
7012(define-public python-purl
7013 (package
7014 (name "python-purl")
7015 (version "1.6")
7016 (source
7017 (origin
7018 (method git-fetch)
7019 (uri (git-reference
7020 (url "https://github.com/codeinthehole/purl")
7021 (commit version)))
7022 (file-name (git-file-name name version))
7023 (sha256
7024 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
7025 (build-system pyproject-build-system)
7026 (arguments
7027 (list
7028 #:test-flags #~(list "--pyargs" "./tests")))
7029 (native-inputs (list python-pytest python-setuptools))
7030 (propagated-inputs (list python-six))
7031 (home-page "https://github.com/codeinthehole/purl")
7032 (synopsis "Python package for URL manipulation")
7033 (description "Purl is a Python package for handling URLs.")
7034 (license license:expat)))
7035
7036(define-public python-apiron
7037 (package
7038 (name "python-apiron")
7039 (version "5.1.0")
7040 (source
7041 (origin
7042 (method url-fetch)
7043 (uri (pypi-uri "apiron" version))
7044 (sha256
7045 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
7046 (build-system pyproject-build-system)
7047 (arguments
7048 (list #:test-flags '(list "-k" "not test_call")))
7049 (propagated-inputs
7050 (list python-requests))
7051 (native-inputs
7052 (list python-pytest
7053 python-setuptools
7054 python-wheel))
7055 (home-page "https://github.com/ithaka/apiron")
7056 (synopsis "Python wrapper for interacting with RESTful APIs")
7057 (description
7058 "@code{apiron} provides a declarative, structured configuration of
7059services and endpoints with a unified interface for interacting with RESTful
7060APIs.")
7061 (license license:expat)))
7062
7063(define-public python-beren
7064 (package
7065 (name "python-beren")
7066 (version "0.7.0")
7067 (source
7068 (origin
7069 (method git-fetch)
7070 (uri (git-reference
7071 (url "https://github.com/teffalump/beren")
7072 (commit (string-append "v" version))))
7073 (file-name (git-file-name name version))
7074 (sha256
7075 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
7076 (build-system pyproject-build-system)
7077 (arguments
7078 ;; The test tries to open a connection to a remote server.
7079 `(#:tests? #f))
7080 (native-inputs (list python-setuptools))
7081 (propagated-inputs (list python-apiron))
7082 (home-page "https://github.com/teffalump/beren")
7083 (synopsis "REST client for Orthanc DICOM servers")
7084 (description
7085 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
7086 (license license:gpl3+)))
7087
7088(define-public python-requests
7089 (package
7090 (name "python-requests")
7091 (version "2.32.5")
7092 (source (origin
7093 (method url-fetch)
7094 (uri (pypi-uri "requests" version))
7095 (sha256
7096 (base32
7097 "1kypqz701x9s7j4shm1pdnzy4pzx9lmvhwgan0yqa071asn0pfnv"))))
7098 (build-system pyproject-build-system)
7099 (arguments
7100 (list #:test-flags
7101 ;; These require internet access
7102 '(list "--ignore=tests/test_requests.py"
7103 "-k" (string-append "not test_use_proxy_from_environment"
7104 " and not requests.sessions.Session"
7105 " and not requests.models.PreparedRequest"
7106 " and not requests.api.request")
7107 "tests/")))
7108 (propagated-inputs
7109 (list python-certifi
7110 python-charset-normalizer
7111 python-idna
7112 python-urllib3))
7113 (native-inputs
7114 (list python-pytest
7115 python-pytest-mock
7116 python-setuptools))
7117 (home-page "https://requests.readthedocs.io/")
7118 (synopsis "Python HTTP library")
7119 (description
7120 "Requests is a Python HTTP client library. It aims to be easier to use
7121than Python’s urllib2 library.")
7122 (license license:asl2.0)))
7123
7124(define-public python-requests-kerberos
7125 (package
7126 (name "python-requests-kerberos")
7127 (version "0.14.0")
7128 ;; No tests in the PyPI tarball.
7129 (source
7130 (origin
7131 (method git-fetch)
7132 (uri (git-reference
7133 (url "https://github.com/requests/requests-kerberos")
7134 (commit (string-append "v" version))))
7135 (file-name (git-file-name name version))
7136 (sha256
7137 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
7138 (build-system pyproject-build-system)
7139 (propagated-inputs (list python-cryptography
7140 python-pyspnego
7141 python-requests))
7142 (native-inputs (list python-pytest python-pytest-mock python-setuptools
7143 python-wheel))
7144 (home-page "https://github.com/requests/requests-kerberos")
7145 (synopsis "Kerberos authentication handler for python-requests")
7146 (description "This package provides a Kerberos authentication handler for
7147python-requests.")
7148 (license license:isc)))
7149
7150(define-public python-requests-unixsocket2
7151 (package
7152 (name "python-requests-unixsocket2")
7153 (version "1.0.1")
7154 (source
7155 (origin
7156 (method git-fetch)
7157 (uri (git-reference
7158 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
7159 (commit (string-append "v" version))))
7160 (sha256
7161 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
7162 (build-system pyproject-build-system)
7163 (native-inputs
7164 (list nss-certs-for-test
7165 python-hatchling
7166 python-pytest
7167 python-waitress))
7168 (propagated-inputs
7169 (list python-requests
7170 python-urllib3))
7171 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
7172 (synopsis "Talk HTTP via a UNIX domain socket")
7173 (description
7174 "This Python package lets you use the @code{requests} library to talk
7175HTTP via a UNIX domain socket.")
7176 (license license:asl2.0)))
7177
7178(define-public python-requests-ntlm
7179 (package
7180 (name "python-requests-ntlm")
7181 (version "1.3.0")
7182 (source
7183 (origin
7184 (method git-fetch)
7185 (uri (git-reference
7186 (url "https://github.com/requests/requests-ntlm")
7187 (commit (string-append "v" version))))
7188 (file-name (git-file-name name version))
7189 (sha256
7190 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
7191 (build-system pyproject-build-system)
7192 (arguments
7193 (list
7194 #:test-flags
7195 ;; XXX: Connection refused.
7196 #~(list "-k" (string-join
7197 (list "not test_ntlm_http_with_cbt"
7198 "test_ntlm_http_without_cbt"
7199 "test_ntlm_https_with_cbt"
7200 "test_ntlm_https_without_cbt")
7201 " and not "))
7202 #:phases
7203 #~(modify-phases %standard-phases
7204 (add-before 'check 'spawn-test-server
7205 (lambda _
7206 ;; Taken from .github/workflows/ci.yml.
7207 (spawn "python"
7208 (list "python" "-m" "tests.test_server")))))))
7209 (propagated-inputs
7210 (list python-cryptography python-pyspnego python-requests))
7211 (native-inputs (list python-flask python-pytest python-setuptools))
7212 (home-page "https://github.com/requests/requests-ntlm")
7213 (synopsis "NTLM authentication support for Requests")
7214 (description
7215 "This package allows for HTTP NTLM authentication using the requests
7216library.")
7217 (license license:isc)))
7218
7219(define-public python-requests-mock
7220 (package
7221 (name "python-requests-mock")
7222 (version "1.12.1")
7223 (source
7224 (origin
7225 (method url-fetch)
7226 (uri (pypi-uri "requests-mock" version))
7227 (sha256
7228 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
7229 (build-system pyproject-build-system)
7230 (native-inputs
7231 (list python-purl
7232 python-pytest
7233 python-requests-futures
7234 python-setuptools
7235 python-setuptools-scm
7236 python-testtools))
7237 (propagated-inputs
7238 (list python-requests))
7239 (home-page "https://requests-mock.readthedocs.org/")
7240 (synopsis "Mock out responses from the requests package")
7241 (description
7242 "This module provides a building block to stub out the HTTP requests
7243portions of your testing code.")
7244 (license license:asl2.0)))
7245
7246(define-public python-requests-toolbelt
7247 (package
7248 (name "python-requests-toolbelt")
7249 (version "1.0.0")
7250 (source
7251 (origin
7252 (method url-fetch)
7253 (uri (pypi-uri "requests-toolbelt" version))
7254 (sha256
7255 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
7256 (build-system pyproject-build-system)
7257 (arguments
7258 (list
7259 #:test-flags
7260 ;; Requiring networking or fail due not valid certs: AttributeError:
7261 ;; 'MockHTTPResponse' object has no attribute 'close'
7262 #~(list "-k" (string-append "not test_dump_all"
7263 " and not test_dump_response"
7264 " and not test_prepared_request_override_base"
7265 " and not test_prepared_request_with_base"
7266 " and not test_request_override_base"
7267 " and not test_request_with_base"))))
7268 (native-inputs
7269 (list python-betamax
7270 python-mock
7271 python-pyopenssl
7272 python-pytest
7273 python-setuptools
7274 python-trustme
7275 python-wheel))
7276 (propagated-inputs
7277 (list python-requests))
7278 (synopsis "Extensions to python-requests")
7279 (description "This is a toolbelt of useful classes and functions to be used
7280with python-requests.")
7281 (home-page "https://github.com/requests/toolbelt/")
7282 (license license:asl2.0)))
7283
7284(define-public python-requests-ftp
7285 (package
7286 (name "python-requests-ftp")
7287 (version "0.3.1")
7288 (source
7289 (origin
7290 (method git-fetch)
7291 (uri (git-reference
7292 (url "https://github.com/Lukasa/requests-ftp")
7293 (commit (string-append "v" version))))
7294 (file-name (git-file-name name version))
7295 (sha256
7296 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
7297 (build-system pyproject-build-system)
7298 (arguments
7299 ;; XXX: No connection adapters found.
7300 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
7301 (native-inputs
7302 (list python-pyftpdlib python-pytest python-setuptools python-six))
7303 (propagated-inputs (list python-requests))
7304 (home-page "https://github.com/Lukasa/requests-ftp")
7305 (synopsis "FTP Transport Adapter for Requests")
7306 (description "Requests-FTP is an implementation of a simple FTP transport
7307adapter for use with the Requests library.")
7308 (license license:asl2.0)))
7309
7310(define-public python-aioftp
7311 (package
7312 (name "python-aioftp")
7313 (version "0.27.2")
7314 (source
7315 (origin
7316 (method git-fetch)
7317 (uri (git-reference
7318 (url "https://github.com/aio-libs/aioftp")
7319 (commit version)))
7320 (file-name (git-file-name name version))
7321 (sha256
7322 (base32 "1lshyac5zk1w4x7ygkim3726f8gbkvpvlyiqkn9cs6qjxhxn5bxc"))))
7323 (build-system pyproject-build-system)
7324 (native-inputs
7325 (list python-async-timeout
7326 python-pytest
7327 python-pytest-mock
7328 python-pytest-asyncio
7329 python-setuptools
7330 python-siosocks
7331 python-trustme))
7332 (home-page "https://aioftp.readthedocs.io/")
7333 (synopsis "FTP client/server for asyncio in Python")
7334 (description
7335 "FTP client and server for asyncio (Python 3) Library implementing FTP
7336protocol, both client and server for Python asyncio module.
7337
7338 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
7339 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
7340 REST, LIST (as fallback).
7341
7342 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
7343 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
7344 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
7345 (license license:asl2.0)))
7346
7347(define-public python-mohawk
7348 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
7349 (revision "0"))
7350 (package
7351 (name "python-mohawk")
7352 (version (git-version "1.1.0" revision commit))
7353 (source
7354 (origin
7355 (method git-fetch)
7356 (uri (git-reference
7357 (url "https://github.com/kumar303/mohawk")
7358 (commit commit)))
7359 (file-name (git-file-name name version))
7360 (sha256
7361 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
7362 (patches
7363 (search-patches "python-mohawk-pytest.patch"))))
7364 (build-system pyproject-build-system)
7365 (arguments
7366 (list #:test-flags #~(list "mohawk/tests.py")))
7367 (native-inputs (list python-pytest python-setuptools))
7368 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
7369 ;python-six is removed?
7370 (home-page "https://github.com/kumar303/mohawk")
7371 (synopsis "Library for Hawk HTTP authorization")
7372 (description
7373 "Mohawk is an alternate Python implementation of the Hawk HTTP
7374authorization scheme.")
7375 (license license:bsd-3))))
7376
7377(define-public python-msal
7378 (package
7379 (name "python-msal")
7380 (version "1.34.0")
7381 (home-page
7382 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
7383 (source
7384 (origin
7385 (method git-fetch)
7386 (uri (git-reference
7387 (url home-page)
7388 (commit version)))
7389 (file-name (git-file-name name version))
7390 (sha256
7391 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
7392 (patches (search-patches "python-msal-requests.patch"))))
7393 (build-system pyproject-build-system)
7394 (arguments
7395 (list
7396 #:test-flags
7397 #~(list
7398 "--ignore=tests/test_benchmark.py"
7399 ;; XXX: Ignoring cryptography version scheme tests.
7400 "-k"
7401 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
7402 ;; XXX: These tests try to access the network.
7403 "--ignore=tests/test_application.py"
7404 "--ignore=tests/test_ccs.py"
7405 ;; XXX: These tests assume they are run on Windows.
7406 "--ignore=tests/test_mi.py")
7407 #:phases
7408 #~(modify-phases %standard-phases
7409 (add-after 'unpack 'set-cryptography-version
7410 (lambda _
7411 (substitute* "tests/test_cryptography.py"
7412 (("^latest_cryptography_version = @version@")
7413 (format #f "latest_cryptography_version = ~s"
7414 #$(package-version
7415 (this-package-input "python-cryptography")))))))
7416 (add-before 'check 'configure-tests
7417 (lambda* (#:key tests? #:allow-other-keys)
7418 (when tests?
7419 (setenv "TRAVIS_TAG" "1")))))))
7420 (native-inputs
7421 (list nss-certs-for-test python-mock python-pytest python-setuptools))
7422 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
7423 (synopsis "Microsoft Authentication Library (MSAL) for Python")
7424 (description
7425 "The Microsoft Authentication Library for Python enables applications to
7426integrate with the Microsoft identity platform. It allows you to sign in
7427users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
7428Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
7429Microsoft Graph or your own APIs registered with the Microsoft identity
7430platform. It is built using industry standard OAuth2 and OpenID Connect
7431protocols.")
7432 (license license:expat)))
7433
7434(define-public oauth2ms
7435 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
7436 (revision "0"))
7437 (package
7438 (name "oauth2ms")
7439 (version (git-version "0.0.0" revision commit))
7440 (source (origin
7441 (method git-fetch)
7442 (uri (git-reference
7443 (url "https://github.com/harishkrupo/oauth2ms")
7444 (commit commit)))
7445 (file-name (git-file-name name version))
7446 (sha256
7447 (base32
7448 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
7449 (build-system copy-build-system)
7450 (arguments
7451 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
7452 ("." #$(string-append "share/doc/" name "-"
7453 version "/")
7454 #:include-regexp ("\\.org$")))
7455 #:phases #~(modify-phases %standard-phases
7456 (add-after 'install 'wrap-pythonpath
7457 (lambda* (#:key inputs outputs #:allow-other-keys)
7458 (let ((path (getenv "GUIX_PYTHONPATH")))
7459 (wrap-program (string-append #$output
7460 "/bin/oauth2ms")
7461 `("GUIX_PYTHONPATH" ":" prefix
7462 (,path)))))))))
7463 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
7464 (home-page "https://github.com/harishkrupo/oauth2ms")
7465 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
7466 (description
7467 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
7468endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
7469used as authentication in IMAP mail servers.")
7470 (license license:asl2.0))))
7471
7472(define-public python-oauthlib
7473 (package
7474 (name "python-oauthlib")
7475 (version "3.3.1")
7476 (source
7477 (origin
7478 (method git-fetch)
7479 (uri (git-reference
7480 (url "https://github.com/oauthlib/oauthlib")
7481 (commit (string-append "v" version))))
7482 (file-name (git-file-name name version))
7483 (sha256
7484 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
7485 (build-system pyproject-build-system)
7486 (native-inputs (list python-pytest python-mock python-setuptools))
7487 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
7488 (home-page "https://github.com/oauthlib/oauthlib")
7489 (synopsis "OAuth implementation for Python")
7490 (description
7491 "Oauthlib is a generic, spec-compliant, thorough implementation of the
7492OAuth request-signing logic.")
7493 (license license:bsd-3)))
7494
7495(define-public python-urllib3
7496 (package
7497 (name "python-urllib3")
7498 (version "2.5.0")
7499 (source
7500 (origin
7501 (method url-fetch)
7502 (uri (pypi-uri "urllib3" version))
7503 (sha256
7504 (base32
7505 "0q17z6zlpyjv9ax5c3d30qwp9fwhz2sc4gbb7yyd86g4qwrpgi1z"))))
7506 (build-system pyproject-build-system)
7507 (arguments `(#:tests? #f))
7508 (native-inputs
7509 (list python-hatch-vcs
7510 python-hatchling
7511 python-setuptools-scm))
7512 (propagated-inputs
7513 (append
7514 ;; These 5 inputs are used to build urrlib3[secure]
7515 (list python-certifi)
7516 (if (member (%current-system)
7517 (package-transitive-supported-systems python-cryptography))
7518 (list python-cryptography)
7519 '())
7520 (list python-idna)
7521 (if (member (%current-system)
7522 (package-transitive-supported-systems python-pyopenssl))
7523 (list python-pyopenssl)
7524 '())
7525 (list python-pysocks)))
7526 (home-page "https://urllib3.readthedocs.io/")
7527 (synopsis "HTTP library with thread-safe connection pooling")
7528 (description
7529 "Urllib3 supports features left out of urllib and urllib2 libraries. It
7530can reuse the same socket connection for multiple requests, it can POST files,
7531supports url redirection and retries, and also gzip and deflate decoding.")
7532 (license license:expat)))
7533
7534(define-public python-urllib3-1.25
7535 (package
7536 (inherit python-urllib3)
7537 (version "1.25.19")
7538 (source
7539 (origin
7540 (method url-fetch)
7541 (uri (pypi-uri "urllib3" version))
7542 (sha256
7543 (base32
7544 "09rmjqm5syhhc8fx3v06h3yv6cqy0b1081jg8wm5grpwpr72j61h"))))
7545 (native-inputs
7546 (list python-setuptools
7547 python-wheel))))
7548
7549(define-public python-urllib3-1.26
7550 (package
7551 (inherit python-urllib3)
7552 (version "1.26.17")
7553 (source
7554 (origin
7555 (method url-fetch)
7556 (uri (pypi-uri "urllib3" version))
7557 (sha256
7558 (base32
7559 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
7560 (native-inputs
7561 (list python-setuptools
7562 python-wheel))))
7563
7564(define-public python-awscrt
7565 (package
7566 (name "python-awscrt")
7567 (version "0.26.1")
7568 (source
7569 (origin
7570 (method url-fetch)
7571 (uri (pypi-uri "awscrt" version))
7572 (sha256
7573 (base32 "0plkc0i0gc6z8fqnyy8kbg43sv3jnv8shcavcz0wb134riykmmm8"))))
7574 (build-system pyproject-build-system)
7575 (arguments
7576 (list
7577 #:test-backend #~'unittest
7578 #:test-flags #~(list "discover" "--verbose")
7579 #:phases
7580 #~(modify-phases %standard-phases
7581 (add-after 'unpack 'disable-broken-tests
7582 (lambda _
7583 ;; Disable broken tests. These tests fail because the
7584 ;; certificate bundle at the default location does not exist.
7585 (substitute* "test/test_auth.py"
7586 (("def test_default_provider")
7587 "def _test_default_provider"))
7588 (substitute* "test/test_http_client.py"
7589 (("def test_h2_client")
7590 "def _test_h2_client"))
7591 (substitute* "test/test_s3.py"
7592 (("def test_sanity")
7593 "def _test_sanity")
7594 (("def test_sanity_secure")
7595 "def _test_sanity_secure")
7596 (("def test_wait_shutdown")
7597 "def _test_wait_shutdown"))))
7598 (add-after 'unpack 'override-cert-bundle-location
7599 (lambda* (#:key inputs #:allow-other-keys)
7600 (let ((bundle (search-input-file inputs
7601 "/etc/ssl/certs/ca-certificates.crt")))
7602 (setenv "SSL_CERT_FILE" bundle)
7603 (substitute* "awscrt/io.py"
7604 (("( +)opt = TlsContextOptions\\(\\)" m indent)
7605 (string-append m "\n"
7606 indent "import os\n"
7607 indent "\
7608opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n")))
7609 (substitute* "test/appexit_http.py"
7610 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
7611 (string-append m indent
7612 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
7613 bundle "')\n")))
7614 (substitute* "test/test_io.py"
7615 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
7616 (string-append m indent
7617 "opt.override_default_trust_store_from_path(None, '"
7618 bundle "')\n"))))))
7619 (add-after 'unpack 'use-system-libraries
7620 (lambda _
7621 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
7622 (inputs (list openssl))
7623 (native-inputs (list cmake-minimal
7624 nss-certs-for-test
7625 python-boto3
7626 python-setuptools
7627 python-websockets))
7628 (home-page "https://github.com/awslabs/aws-crt-python")
7629 (synopsis "Common runtime for AWS Python projects")
7630 (description
7631 "This package provides a common runtime for AWS Python projects.")
7632 (license license:asl2.0)))
7633
7634(define-public awscli
7635 (package
7636 ;; Note: updating awscli typically requires updating botocore as well.
7637 (name "awscli")
7638 (version "1.43.11")
7639 (source
7640 (origin
7641 (method git-fetch)
7642 (uri (git-reference
7643 (url "https://github.com/aws/aws-cli")
7644 (commit version)))
7645 (file-name (git-file-name name version))
7646 (sha256
7647 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
7648 (build-system pyproject-build-system)
7649 (arguments
7650 (list
7651 ;; tests: 2715 passed, 32 warnings
7652 #:test-flags
7653 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7654 ;; Complete test suite is huge and compute hungry, run just unit
7655 ;; tests.
7656 "--ignore=tests/dependencies"
7657 "--ignore=tests/functional"
7658 "--ignore=tests/integration"
7659 ;; TypeError: 'Mock' object is not subscriptable.
7660 "-k" "not test_no_groff_or_mandoc_exists")
7661 #:phases
7662 #~(modify-phases %standard-phases
7663 (add-after 'unpack 'fix-reference-to-groff
7664 (lambda _
7665 ;; XXX: Consider to use wrap-program instead, it tries to parse
7666 ;; the PATH.
7667 (substitute* "awscli/help.py"
7668 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
7669 (("raise ExecutableNotFoundError\\('groff'\\)") "")
7670 (("cmdline = \\['groff'")
7671 (format #f "cmdline = ['~a/bin/groff'"
7672 #$(this-package-input "groff-minimal"))))))
7673 (add-before 'check 'set-environment
7674 (lambda _
7675 ;; PermissionError: [Errno 13] Permission denied:
7676 ;; '/homeless-shelter'
7677 (setenv "HOME" "/tmp"))))))
7678 (native-inputs
7679 (list python-pytest
7680 python-pytest-xdist
7681 python-setuptools
7682 python-wheel))
7683 (inputs
7684 (list groff-minimal
7685 python-botocore
7686 python-colorama
7687 python-docutils-0.19
7688 python-pyyaml
7689 python-rsa-for-awscli-1
7690 python-s3transfer))
7691 (home-page "https://aws.amazon.com/cli/")
7692 (synopsis "Command line client for AWS")
7693 (description
7694 "AWS CLI provides a unified command line interface to the Amazon Web
7695Services (AWS) API.")
7696 (license license:asl2.0)))
7697
7698(define-public awscli-2
7699 (package
7700 (inherit awscli)
7701 ;; Note: updating awscli-2 typically requires updating python-awscrt.
7702 (name "awscli")
7703 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
7704 ;; any fresh one compatible with current state of dependencies in Guix.
7705 (version "2.28.0")
7706 (source
7707 (origin
7708 (method git-fetch)
7709 (uri (git-reference
7710 (url "https://github.com/aws/aws-cli")
7711 (commit version)))
7712 (file-name (git-file-name name version))
7713 (sha256
7714 (base32
7715 "1a1jzvdm434x46yh7ir11lw0nzc64ns4qvxhp5wfra3rh5ykf36j"))))
7716 (build-system pyproject-build-system)
7717 (arguments
7718 (list
7719 ;; When updating and checking locally be very patient as build phase may
7720 ;; hang for 6-8 minutes but eventually passes through.
7721 ;;
7722 ;; tests: 4189 passed, 1 skipped, 2 warnings
7723 #:test-flags
7724 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7725 ;; Full test suite contains more than 70k tests; ignore network
7726 ;; dependent, slow and compute intense tests, keep just unit
7727 ;; tests.
7728 "--ignore=tests/backends"
7729 "--ignore=tests/dependencies"
7730 "--ignore=tests/functional"
7731 "--ignore=tests/integration"
7732 "--ignore=tests/unit/botocore"
7733 ;; Flaky, something to do with PATH disappearing from os.environ?
7734 ;; Passes when run on its own, so maybe something else is
7735 ;; modifying this during the test run.
7736 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
7737 ;; TypeError: 'Mock' object is not subscriptable
7738 "-k" "not test_no_groff_or_mandoc_exists")
7739 #:phases
7740 #~(modify-phases %standard-phases
7741 (add-after 'unpack 'ignore-deprecations
7742 (lambda _
7743 (substitute* "pyproject.toml"
7744 (("\"error::") "\"ignore::"))))
7745 (add-after 'unpack 'fix-reference-to-groff
7746 (lambda* (#:key inputs #:allow-other-keys)
7747 (substitute* "awscli/help.py"
7748 (("if self._exists_on_path\\('groff'\\):") "if True:")
7749 (("cmdline = \\['groff'")
7750 (string-append "cmdline = ['"
7751 (search-input-file inputs "bin/groff")
7752 "'")))))
7753 (add-before 'check 'pre-check
7754 (lambda _ (setenv "HOME" "/tmp"))))))
7755 (inputs
7756 (list groff
7757 ;; less
7758 nss-certs-for-test
7759 python-awscrt
7760 python-colorama
7761 python-dateutil
7762 python-distro
7763 python-docutils
7764 python-jmespath
7765 python-prompt-toolkit
7766 python-ruamel.yaml
7767 python-ruamel.yaml.clib
7768 python-urllib3))
7769 (native-inputs
7770 (list python-flit-core
7771 python-pytest
7772 python-pytest-xdist))))
7773
7774(define-public python-wsgiproxy2
7775 (package
7776 (name "python-wsgiproxy2")
7777 (version "0.5.1")
7778 (source
7779 (origin
7780 (method git-fetch)
7781 (uri (git-reference
7782 (url "https://github.com/gawel/WSGIProxy2/")
7783 (commit version)))
7784 (file-name (git-file-name name version))
7785 (sha256
7786 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
7787 (build-system pyproject-build-system)
7788 (arguments (list #:test-backend #~'unittest))
7789 (native-inputs (list python-webtest python-setuptools))
7790 (propagated-inputs (list python-requests python-six python-urllib3
7791 python-webob))
7792 (home-page "https://github.com/gawel/WSGIProxy2/")
7793 (synopsis "WSGI Proxy with various http client backends")
7794 (description
7795 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
7796function calls into HTTP requests. It also includes code to sign requests and
7797pass private data, and to spawn subprocesses to handle requests.")
7798 (license license:expat)))
7799
7800(define-public python-pastedeploy
7801 (package
7802 (name "python-pastedeploy")
7803 (version "3.1.0")
7804 (source
7805 (origin
7806 (method url-fetch)
7807 (uri (pypi-uri "PasteDeploy" version))
7808 (sha256
7809 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
7810 (build-system pyproject-build-system)
7811 (native-inputs (list python-pytest python-setuptools))
7812 (home-page "https://pylonsproject.org/")
7813 (synopsis "Load, configure, and compose WSGI applications and servers")
7814 (description
7815 "This tool provides code to load WSGI applications and servers from URIs;
7816these URIs can refer to Python Eggs for INI-style configuration files. Paste
7817Script provides commands to serve applications based on this configuration
7818file.")
7819 (license license:expat)))
7820
7821(define-public python-webtest
7822 (package
7823 (name "python-webtest")
7824 (version "3.0.6")
7825 (source
7826 (origin
7827 (method url-fetch)
7828 (uri (pypi-uri "webtest" version))
7829 (sha256
7830 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
7831 (build-system pyproject-build-system)
7832 (arguments
7833 ;; Tests require python-pyquery, which creates a circular dependency.
7834 `(#:tests? #f))
7835 (native-inputs
7836 (list python-setuptools))
7837 (propagated-inputs
7838 (list python-beautifulsoup4
7839 python-waitress
7840 python-webob))
7841 (home-page "https://docs.pylonsproject.org/projects/webtest/")
7842 (synopsis "Helper to test WSGI applications")
7843 (description
7844 "Webtest allows you to test your Python web applications without
7845starting an HTTP server. It supports anything that supports the minimum of
7846WSGI.")
7847 (license license:expat)))
7848
7849(define-public python-flask
7850 (package
7851 (name "python-flask")
7852 (version "3.1.0")
7853 (source
7854 (origin
7855 (method url-fetch)
7856 (uri (pypi-uri "flask" version))
7857 (sha256
7858 (base32 "1b1nb250jxrjplbs21wnwq69250vs3iz2pdhs7cwi5y8hi8kr1sz"))))
7859 (build-system pyproject-build-system)
7860 (native-inputs
7861 (list python-flit-core
7862 python-pytest))
7863 (propagated-inputs
7864 (list python-asgiref ;async extra
7865 python-click
7866 python-blinker
7867 python-itsdangerous
7868 python-jinja2
7869 python-werkzeug))
7870 (home-page "https://palletsprojects.com/p/flask/")
7871 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
7872 (description "Flask is a micro web framework based on the Werkzeug toolkit
7873and Jinja2 template engine. It is called a micro framework because it does not
7874presume or force a developer to use a particular tool or library.")
7875 (license license:bsd-3)))
7876
7877(define-public python-flask-compress
7878 (package
7879 (name "python-flask-compress")
7880 (version "1.18")
7881 (source (origin
7882 (method url-fetch)
7883 (uri (pypi-uri "flask_compress" version))
7884 (sha256
7885 (base32
7886 "0fj1r0ixsjls7z3a2zzamxppjz4qcf8q4jcmn74gsk9kisyy3fpx"))))
7887 (build-system pyproject-build-system)
7888 (native-inputs
7889 (list python-flask-caching
7890 python-pytest
7891 python-setuptools
7892 python-setuptools-scm))
7893 (propagated-inputs
7894 (list python-brotli
7895 python-flask
7896 python-pyzstd))
7897 (home-page "https://github.com/colour-science/flask-compress")
7898 (synopsis "Compress responses in a Flask app")
7899 (description
7900 "This package lets you compress Flask application responses and static
7901files with gzip, deflate or brotli. Flask-Compress both adds the various
7902headers required for a compressed response and compresses the response data.")
7903 (license license:expat)))
7904
7905(define-public python-flask-seasurf
7906 (package
7907 (name "python-flask-seasurf")
7908 (version "2.0.0")
7909 (source (origin
7910 (method url-fetch)
7911 (uri (pypi-uri "Flask-SeaSurf" version))
7912 (sha256
7913 (base32
7914 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
7915 (build-system pyproject-build-system)
7916 (arguments
7917 (list #:tests? #false)) ;there are none
7918 (propagated-inputs (list python-flask))
7919 (native-inputs (list python-setuptools python-wheel))
7920 (home-page "https://github.com/maxcountryman/flask-seasurf/")
7921 (synopsis "CSRF extension for Flask")
7922 (description "SeaSurf is a Flask extension for preventing cross-site
7923request forgery (CSRF). CSRF attacks are problematic because the mechanism
7924they use is relatively easy to exploit. This extension attempts to aid you in
7925securing your application from such attacks. This extension is based on the
7926Django middleware.")
7927 (license license:bsd-3)))
7928
7929(define-public python-flask-wtf
7930 (package
7931 (name "python-flask-wtf")
7932 (version "1.2.2")
7933 (source
7934 (origin
7935 (method url-fetch)
7936 (uri (pypi-uri "Flask-WTF" version))
7937 (sha256
7938 (base32
7939 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
7940 (build-system pyproject-build-system)
7941 (propagated-inputs
7942 (list python-flask python-flask python-itsdangerous python-wtforms))
7943 (native-inputs
7944 (list python-hatchling python-pytest))
7945 (home-page "https://github.com/lepture/flask-wtf")
7946 (synopsis "Simple integration of Flask and WTForms")
7947 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
7948upload, and reCAPTCHA.")
7949 (license license:bsd-3)))
7950
7951(define-public python-flask-multistatic
7952 (package
7953 (name "python-flask-multistatic")
7954 (version "1.0")
7955 (source
7956 (origin
7957 (method url-fetch)
7958 (uri (pypi-uri "flask-multistatic" version))
7959 (sha256
7960 (base32
7961 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
7962 (build-system pyproject-build-system)
7963 (arguments (list #:tests? #f)) ; No tests upstream.
7964 (native-inputs (list python-setuptools))
7965 (propagated-inputs (list python-flask))
7966 (home-page "https://pagure.io/flask-multistatic")
7967 (synopsis "Flask plugin to allow overriding static files")
7968 (description "@code{flask-multistatic} is a flask plugin that adds support
7969for overriding static files.")
7970 (license license:gpl3+)))
7971
7972(define-public python-responses
7973 (package
7974 (name "python-responses")
7975 (version "0.25.3")
7976 (source (origin
7977 (method url-fetch)
7978 (uri (pypi-uri "responses" version))
7979 (sha256
7980 (base32
7981 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
7982 (build-system pyproject-build-system)
7983 (native-inputs
7984 (list python-pytest
7985 python-pytest-asyncio
7986 python-pytest-httpserver
7987 python-setuptools
7988 python-tomli
7989 python-tomli-w
7990 python-wheel))
7991 (propagated-inputs
7992 (list python-requests
7993 python-pyyaml
7994 python-urllib3))
7995 (home-page "https://github.com/getsentry/responses")
7996 (synopsis "Utility for mocking out the `requests` Python library")
7997 (description "A utility library for mocking out the `requests` Python
7998library.")
7999 (license license:asl2.0)))
8000
8001(define-public python-grequests
8002 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
8003 (revision "0"))
8004 (package
8005 (name "python-grequests")
8006 (version (git-version "0.7.0" revision commit))
8007 (source
8008 (origin
8009 (method git-fetch)
8010 (uri (git-reference
8011 (url "https://github.com/kennethreitz/grequests")
8012 (commit commit)))
8013 (file-name (git-file-name name version))
8014 (sha256
8015 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
8016 (build-system pyproject-build-system)
8017 (arguments
8018 (list
8019 ;; XXX: Most failing tests seem to be caused by network access,
8020 ;; but there is no easy/flag way to disable tests selectively.
8021 #:tests? #f
8022 #:test-backend #~'unittest
8023 #:test-flags #~(list "tests.py")))
8024 (propagated-inputs (list python-gevent python-requests))
8025 (native-inputs (list python-setuptools))
8026 (home-page "https://github.com/kennethreitz/grequests")
8027 (synopsis "Python library for asynchronous HTTP requests")
8028 (description
8029 "GRequests is a Python library that allows you to use @code{Requests}
8030with @code{Gevent} to make asynchronous HTTP Requests easily.")
8031 (license license:bsd-2))))
8032
8033(define-public python-gwebsockets
8034 (package
8035 (name "python-gwebsockets")
8036 (version "0.7")
8037 (source
8038 (origin
8039 (method git-fetch)
8040 (uri (git-reference
8041 (url "https://github.com/sugarlabs/gwebsockets")
8042 (commit (string-append "v" version))))
8043 (file-name (git-file-name name version))
8044 (sha256
8045 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
8046 (build-system pyproject-build-system)
8047 (arguments (list #:tests? #f)) ; No tests upstream.
8048 (native-inputs (list python-setuptools))
8049 (propagated-inputs (list python-pygobject))
8050 (home-page "https://github.com/sugarlabs/gwebsockets")
8051 (synopsis "GLib based websockets server")
8052 (description
8053 "This package provides a websocket server written in Python. It uses GIO
8054for network communication and hence it easily integrates with the GLib
8055mainloop.")
8056 (license license:asl2.0)))
8057
8058(define-public python-dpkt
8059 (package
8060 (name "python-dpkt")
8061 (version "1.9.8")
8062 (source
8063 (origin
8064 (method git-fetch)
8065 (uri (git-reference
8066 (url "https://github.com/kbandla/dpkt")
8067 (commit (string-append "v" version))))
8068 (file-name (git-file-name name version))
8069 (sha256
8070 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
8071 (build-system pyproject-build-system)
8072 (arguments
8073 (list
8074 #:test-flags
8075 #~(list "--pyargs" "dpkt")))
8076 (native-inputs (list python-pytest python-setuptools))
8077 (home-page "https://github.com/kbandla/dpkt")
8078 (synopsis "Packet generator and parser for TCP/IP protocols")
8079 (description
8080 "The dpkt module is a fast, simple packet generator and parser for the
8081basic TCP/IP protocols.")
8082 (license license:bsd-3)))
8083
8084(define-public python-geventhttpclient
8085 (package
8086 (name "python-geventhttpclient")
8087 (version "2.3.9")
8088 (source (origin
8089 (method git-fetch)
8090 (uri (git-reference
8091 (url "https://github.com/geventhttpclient/geventhttpclient")
8092 (commit version)
8093 (recursive? #true)))
8094 (file-name (git-file-name name version))
8095 (sha256
8096 (base32
8097 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
8098 (build-system pyproject-build-system)
8099 (arguments
8100 (list
8101 #:test-flags
8102 ;; Disable network tests.
8103 '(list "-k"
8104 (string-append "not test_client_simple"
8105 " and not test_client_ssl"
8106 " and not test_client_with_default_headers"
8107 " and not test_client_without_leading_slash"
8108 " and not test_download"
8109 " and not test_fail_invalid_ca_certificate"
8110 " and not test_httpbin_multipart"
8111 " and not test_multi_queries_greenlet_safe"
8112 " and not test_no_form_encode_header"
8113 " and not test_no_form_encoded_header"
8114 " and not test_request_with_headers"
8115 " and not test_response_context_manager"
8116 " and not test_urllib_request"))))
8117 (native-inputs (list nss-certs-for-test
8118 python-dpkt python-pytest python-requests
8119 python-setuptools python-wheel))
8120 (propagated-inputs (list python-brotli python-certifi python-gevent
8121 python-urllib3))
8122 (home-page "https://github.com/geventhttpclient/geventhttpclient")
8123 (synopsis "HTTP client library for gevent")
8124 (description "@code{python-geventhttpclient} is a high performance,
8125concurrent HTTP client library for python using @code{gevent}.")
8126 (license license:expat)))
8127
8128(define-public python-gevent-websocket
8129 (package
8130 (name "python-gevent-websocket")
8131 (version "0.10.1")
8132 (source
8133 (origin
8134 (method url-fetch)
8135 (uri (pypi-uri "gevent-websocket" version))
8136 (sha256
8137 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
8138 (build-system pyproject-build-system)
8139 (arguments
8140 (list #:tests? #f)) ; no tests in PyPI or git
8141 (native-inputs
8142 (list python-setuptools
8143 python-wheel))
8144 (propagated-inputs
8145 (list python-gevent))
8146 (home-page "https://gitlab.com/noppo/gevent-websocket")
8147 (synopsis "Websocket handler for the gevent pywsgi server")
8148 (description
8149 "Websocket handler for the gevent pywsgi server, a Python network
8150library.
8151
8152Features include:
8153@itemize
8154@item integration on both socket level or using an abstract interface
8155@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
8156Protocol, WAMP}
8157@item easily extendible using a simple WebSocket protocol plugin API
8158@end itemize")
8159 (license license:asl2.0)))
8160
8161(define-public python-requests-oauthlib
8162 (package
8163 (name "python-requests-oauthlib")
8164 (version "2.0.0")
8165 (source
8166 (origin
8167 (method git-fetch)
8168 (uri (git-reference (url
8169 "https://github.com/requests/requests-oauthlib")
8170 (commit (string-append "v" version))))
8171 (file-name (git-file-name name version))
8172 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
8173 (build-system pyproject-build-system)
8174 (arguments
8175 (list
8176 #:test-flags
8177 #~(list
8178 "--ignore=tests/test_core.py" ; requires network access.
8179 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
8180 "-k" "not test_fetch_access_token"))) ; flaky tests.
8181 (native-inputs
8182 (list python-requests-mock python-pytest python-setuptools))
8183 (propagated-inputs
8184 (list python-oauthlib python-requests))
8185 (home-page "https://github.com/requests/requests-oauthlib")
8186 (synopsis "OAuthlib authentication support for Requests")
8187 (description
8188 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
8189provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
8190 (license license:isc)))
8191
8192(define-public python-cachecontrol
8193 (package
8194 (name "python-cachecontrol")
8195 (version "0.14.1")
8196 (source
8197 (origin
8198 (method git-fetch)
8199 (uri (git-reference
8200 (url "https://github.com/ionrock/cachecontrol")
8201 (commit (string-append "v" version))))
8202 (file-name (git-file-name name version))
8203 (sha256
8204 (base32
8205 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
8206 (build-system pyproject-build-system)
8207 (propagated-inputs
8208 (list python-filelock python-msgpack python-requests))
8209 (native-inputs
8210 (list python-cherrypy python-flit-core python-pytest))
8211 (home-page "https://github.com/ionrock/cachecontrol")
8212 (synopsis "The httplib2 caching algorithms for use with requests")
8213 (description "CacheControl is a port of the caching algorithms in
8214@code{httplib2} for use with @code{requests} session objects.")
8215 (license license:asl2.0)))
8216
8217(define-public python-betamax
8218 (package
8219 (name "python-betamax")
8220 (version "0.9.0")
8221 (source
8222 (origin
8223 (method url-fetch)
8224 (uri (pypi-uri "betamax" version))
8225 (sha256
8226 (base32
8227 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
8228 (build-system pyproject-build-system)
8229 (arguments
8230 (list
8231 #:test-flags
8232 #~(list "-k" (string-join
8233 ;; Tests require network access to http://httpbin.org/get.
8234 (list "not test_creates_new_cassettes"
8235 "test_placeholders_work"
8236 "test_post_start_hook"
8237 "test_pre_stop_hook"
8238 "test_preplayback_hook"
8239 "test_prerecord_hook"
8240 "test_prerecord_ignoring_hook"
8241 "test_records_new_events_with_existing_cassette"
8242 "test_records_new_interaction"
8243 "test_records_new_interactions"
8244 "test_replaces_old_interactions"
8245 "test_replays_response_from_cassette"
8246 "test_requests_with_json_body"
8247 "test_saves_content_as_gzip"
8248 "test_unicode_is_saved_properly")
8249 " and not "))))
8250 (native-inputs
8251 (list nss-certs-for-test
8252 python-pytest
8253 python-setuptools))
8254 (propagated-inputs
8255 (list python-requests))
8256 (home-page "https://github.com/sigmavirus24/betamax")
8257 (synopsis "Record HTTP interactions with python-requests")
8258 (description
8259 "Betamax will record your test suite's HTTP interactions and replay them
8260during future tests. It is designed to work with python-requests.")
8261 (license license:expat)))
8262
8263(define-public python-betamax-matchers
8264 (package
8265 (name "python-betamax-matchers")
8266 (version "0.4.0")
8267 (source
8268 (origin
8269 (method git-fetch)
8270 (uri (git-reference
8271 (url "https://github.com/sigmavirus24/betamax_matchers")
8272 (commit version)))
8273 (file-name (git-file-name name version))
8274 (sha256
8275 (base32 "0lyg3r91hwfvavyi5k6sddcla37igigycfv1mx40c32byqwl6pq5"))))
8276 (build-system pyproject-build-system)
8277 (native-inputs (list python-pytest python-setuptools))
8278 (propagated-inputs (list python-betamax python-requests-toolbelt))
8279 (home-page "https://github.com/sigmavirus24/betamax_matchers")
8280 (synopsis "VCR imitation for python-requests")
8281 (description "@code{betamax-matchers} provides a set of Matchers for
8282Betamax.")
8283 (license license:asl2.0)))
8284
8285(define-public python-betamax-serializers
8286 (package
8287 (name "python-betamax-serializers")
8288 (version "0.2.1")
8289 (source
8290 (origin
8291 (method git-fetch)
8292 (uri (git-reference
8293 (url "https://gitlab.com/betamax/serializers")
8294 (commit version)))
8295 (file-name (git-file-name name version))
8296 (sha256
8297 (base32 "1p2l5w3vwvjacs2ndahgcjq55qb53i37p8mz1zh85pjxyszdyw2l"))))
8298 (build-system pyproject-build-system)
8299 (arguments (list #:tests? #f)) ; No tests.
8300 (native-inputs (list python-setuptools))
8301 (propagated-inputs (list python-betamax python-pyyaml))
8302 (synopsis "Set of third-party serializers for Betamax")
8303 (description
8304 "Betamax-Serializers are an experimental set of Serializers for Betamax
8305that may possibly end up in the main package.")
8306 (home-page "https://gitlab.com/betamax/serializers")
8307 (license license:asl2.0)))
8308
8309(define-public python-s3fs
8310 (package
8311 (name "python-s3fs")
8312 (version "2026.1.0")
8313 (source
8314 (origin
8315 (method url-fetch)
8316 (uri (pypi-uri "s3fs" version))
8317 (sha256
8318 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
8319 (build-system pyproject-build-system)
8320 ;; TODO: Many tests fail with "No such file or directory" raised by the
8321 ;; HTTP client.
8322 (arguments (list #:tests? #false))
8323 (native-inputs
8324 (list python-setuptools))
8325 (propagated-inputs
8326 (list python-aiobotocore
8327 python-aiohttp
8328 python-fsspec))
8329 (home-page "https://github.com/fsspec/s3fs/")
8330 (synopsis "Convenient filesystem interface over S3")
8331 (description "This package provides a convenient filesystem interface over
8332S3.")
8333 (license license:bsd-3)))
8334
8335(define-public python-s3transfer
8336 (package
8337 (name "python-s3transfer")
8338 (version "0.16.0")
8339 (source
8340 (origin
8341 (method url-fetch)
8342 (uri (pypi-uri "s3transfer" version))
8343 (sha256
8344 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
8345 (build-system pyproject-build-system)
8346 (arguments
8347 (list
8348 ;; tests: 630 passed, 51 skipped
8349 #:test-flags
8350 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8351 ;; Tests require networking.
8352 "--ignore" "tests/integration")))
8353 (native-inputs
8354 (list python-pytest
8355 python-pytest-xdist
8356 python-setuptools))
8357 (propagated-inputs
8358 (list python-botocore))
8359 (home-page "https://github.com/boto/s3transfer")
8360 (synopsis "Amazon S3 Transfer Manager")
8361 (description
8362 "S3transfer is a Python library for managing Amazon S3 transfers.")
8363 (license license:asl2.0)))
8364
8365(define-public python-flask-restful
8366 (package
8367 (name "python-flask-restful")
8368 (version "0.3.10")
8369 (source
8370 (origin
8371 (method url-fetch)
8372 (uri (pypi-uri "Flask-RESTful" version))
8373 (sha256
8374 (base32
8375 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
8376 (build-system pyproject-build-system)
8377 (arguments
8378 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
8379 (list #:tests? #f))
8380 (propagated-inputs
8381 (list python-aniso8601 python-flask python-pytz))
8382 (native-inputs
8383 (list python-blinker
8384 python-mock
8385 python-pytest
8386 python-setuptools
8387 python-wheel))
8388 (home-page "https://github.com/flask-restful/flask-restful/")
8389 (synopsis "Flask module for creating REST APIs")
8390 (description
8391 "This package contains a Flask module for creating REST APIs.")
8392 (license license:bsd-3)))
8393
8394(define-public python-flask-sqlalchemy
8395 (package
8396 (name "python-flask-sqlalchemy")
8397 ;; Released version fails tests in Python 3.12.
8398 (properties '((commit . "168cb4b7b50fe5176307a10d873781bfafc6eeda")
8399 (revision . "0")))
8400 (version (git-version "3.1.1"
8401 (assoc-ref properties 'revision)
8402 (assoc-ref properties 'commit)))
8403 (source
8404 (origin
8405 (method git-fetch)
8406 (uri (git-reference
8407 (url "https://github.com/pallets-eco/flask-sqlalchemy")
8408 (commit (assoc-ref properties 'commit))))
8409 (file-name (git-file-name name version))
8410 (sha256
8411 (base32
8412 "0xw8v1540m21x9crpgb0i3rxyhh1d24ldg354vndw9cif74ls5p6"))))
8413 (build-system pyproject-build-system)
8414 (arguments
8415 (list
8416 #:test-flags
8417 #~(list "-k" (string-append "not test_explicit_table[db2]"
8418 " and not test_explicit_table[db4]")
8419 "-W" "ignore::DeprecationWarning")))
8420 (native-inputs
8421 (list python-flit-core
8422 python-pytest))
8423 (propagated-inputs
8424 (list python-flask
8425 python-sqlalchemy-2))
8426 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
8427 (synopsis "Module adding SQLAlchemy support to your Flask application")
8428 (description
8429 "This package adds SQLAlchemy support to your Flask application.")
8430 (license license:bsd-3)))
8431
8432(define-public python-flask-restful-swagger
8433 (package
8434 (name "python-flask-restful-swagger")
8435 (version "0.20.1")
8436 ;; XXX: Unbundle minified javascript.
8437 (source
8438 (origin
8439 (method git-fetch)
8440 (uri (git-reference
8441 (url "https://github.com/rantav/flask-restful-swagger")
8442 (commit version)))
8443 (file-name (git-file-name name version))
8444 (sha256
8445 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
8446 (build-system pyproject-build-system)
8447 (arguments (list #:tests? #f)) ; No tests.
8448 (native-inputs (list python-setuptools))
8449 (propagated-inputs (list python-flask-restful python-six))
8450 (home-page "https://github.com/rantav/flask-restful-swagger")
8451 (synopsis "Extract Swagger specs from Flask-Restful projects")
8452 (description "This package lets you extract Swagger API documentation
8453specs from your Flask-Restful projects.")
8454 (license license:expat)))
8455
8456(define-public python-htmlmin
8457 (package
8458 (name "python-htmlmin")
8459 (version "0.1.12")
8460 (source
8461 (origin
8462 (method url-fetch)
8463 (uri (pypi-uri "htmlmin" version))
8464 (sha256
8465 (base32
8466 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
8467 (build-system pyproject-build-system)
8468 (arguments
8469 (list #:tests? #f)) ; no tests
8470 (native-inputs (list python-setuptools))
8471 (home-page "https://htmlmin.readthedocs.org/en/latest/")
8472 (synopsis "HTML minifier")
8473 (description "@code{htmlmin} is an HTML minifier that just works.
8474It comes with safe defaults and easily configurable options.")
8475 (license license:bsd-3)))
8476
8477;; XXX: Forked renamed and updated version.
8478(define-public python-htmlmin2
8479 (package/inherit python-htmlmin
8480 (name "python-htmlmin2")
8481 (version "0.1.13")
8482 (source
8483 (origin
8484 (method git-fetch)
8485 (uri (git-reference
8486 (url "https://github.com/wilhelmer/htmlmin")
8487 (commit (string-append "v" version))))
8488 (file-name (git-file-name name version))
8489 (sha256
8490 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
8491 (build-system pyproject-build-system)
8492 (arguments (list #:test-backend #~'unittest))
8493 (native-inputs (list python-setuptools))
8494 (home-page "https://github.com/wilhelmer/htmlmin")
8495 (description
8496 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
8497defaults and easily configurable options. This variant is an updated fork of
8498the original @code{python-htmlmin}.")
8499 (license license:bsd-3)))
8500
8501(define-public python-flask-htmlmin
8502 (package
8503 (name "python-flask-htmlmin")
8504 (version "3.0.0")
8505 (source
8506 (origin
8507 (method git-fetch)
8508 (uri (git-reference
8509 (url "https://github.com/hamidfzm/Flask-HTMLmin")
8510 (commit (string-append "v" version))))
8511 (file-name (git-file-name name version))
8512 (sha256
8513 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
8514 (build-system pyproject-build-system)
8515 (native-inputs (list python-pytest python-setuptools))
8516 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
8517 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
8518 (synopsis "HTML response minifier for Flask")
8519 (description
8520 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
8521 (license license:bsd-3)))
8522
8523(define-public python-jsmin
8524 (package
8525 (name "python-jsmin")
8526 (version "3.0.1")
8527 (source
8528 (origin
8529 (method url-fetch)
8530 (uri (pypi-uri "jsmin" version))
8531 (sha256
8532 (base32
8533 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
8534 (build-system pyproject-build-system)
8535 (arguments (list #:test-backend #~'unittest))
8536 (native-inputs
8537 (list python-setuptools))
8538 (home-page "https://github.com/tikitu/jsmin/")
8539 (synopsis "Python JavaScript minifier")
8540 (description
8541 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
8542on the command line.")
8543 (license license:expat)))
8544
8545(define-public python-flask-login
8546 (let ((commit "c8bba84b9ba6768e878317fc46c54bd13fa1ac07")
8547 (revision "0"))
8548 (package
8549 (name "python-flask-login")
8550 (version (git-version "0.6.3" revision commit))
8551 (source
8552 (origin
8553 (method git-fetch)
8554 (uri (git-reference
8555 (url "https://github.com/maxcountryman/flask-login")
8556 (commit commit)))
8557 (file-name (git-file-name name version))
8558 (sha256
8559 (base32 "0q0ga1zwm06kvpnsf50ckmsc77959i1spx7z2y3jkbwaa4klsyli"))))
8560 (build-system pyproject-build-system)
8561 (propagated-inputs
8562 (list python-flask))
8563 (native-inputs
8564 ;; For tests.
8565 (list python-blinker
8566 python-flit-core
8567 python-mock
8568 python-pytest
8569 python-semantic-version
8570 python-werkzeug))
8571 (home-page "https://github.com/maxcountryman/flask-login")
8572 (synopsis "User session management for Flask")
8573 (description
8574 "@code{Flask-Login} provides user session management for Flask. It
8575handles the common tasks of logging in, logging out, and remembering your
8576users' sessions over extended periods of time.")
8577 (license license:expat))))
8578
8579(define-public python-oauth2client
8580 (package
8581 (name "python-oauth2client")
8582 (version "4.1.3")
8583 (source
8584 (origin
8585 (method git-fetch)
8586 (uri (git-reference
8587 (url "https://github.com/google/oauth2client/")
8588 (commit (string-append "v" version))))
8589 (file-name (git-file-name name version))
8590 (sha256
8591 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
8592 (build-system pyproject-build-system)
8593 (arguments
8594 (list #:tests? #f))
8595 (native-inputs
8596 (list python-setuptools))
8597 (propagated-inputs
8598 (list python-httplib2
8599 python-pyasn1
8600 python-pyasn1-modules
8601 python-pyparsing
8602 python-rsa
8603 python-six))
8604 (home-page "https://github.com/google/oauth2client/")
8605 (synopsis "OAuth 2.0 client library")
8606 (description "@code{python-oauth2client} provides an OAuth 2.0 client
8607library for Python")
8608 (license license:asl2.0)))
8609
8610(define-public python-authlib
8611 (package
8612 (name "python-authlib")
8613 (version "1.5.1")
8614 (source
8615 (origin
8616 (method url-fetch)
8617 (uri (pypi-uri "authlib" version))
8618 (sha256
8619 (base32 "0blpvz2v2r8yvsgm1yr3n61mhwxvh1b0kyf2rp0i4wv6n3n8bg2w"))))
8620 (build-system pyproject-build-system)
8621 ;; No tests target.
8622 (arguments (list #:tests? #false))
8623 (propagated-inputs
8624 (list python-cryptography
8625 python-django
8626 python-flask
8627 python-httpx
8628 python-requests
8629 python-sqlalchemy-2
8630 python-starlette
8631 python-werkzeug))
8632 (native-inputs (list python-pytest python-setuptools python-wheel))
8633 (home-page "https://pypi.org/project/Authlib/1")
8634 (synopsis "Build OAuth and OpenID Connect servers and clients")
8635 (description
8636 "This is a Python library for building OAuth and OpenID Connect servers
8637and clients.")
8638 (license license:bsd-3)))
8639
8640(define-public python-flask-oidc
8641 (package
8642 (name "python-flask-oidc")
8643 (version "2.3.1")
8644 (source
8645 (origin
8646 (method url-fetch)
8647 (uri (pypi-uri "flask_oidc" version))
8648 (sha256
8649 (base32
8650 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
8651 (build-system pyproject-build-system)
8652 (propagated-inputs
8653 (list python-authlib
8654 python-blinker
8655 python-flask
8656 python-requests
8657 python-responses))
8658 (native-inputs
8659 (list python-pytest python-poetry-core))
8660 (home-page "https://github.com/puiterwijk/flask-oidc")
8661 (synopsis "OpenID Connect extension for Flask")
8662 (description "@code{python-flask-oidc} provides an OpenID Connect extension
8663for Flask.")
8664 (license license:bsd-2)))
8665
8666(define-public python-webassets
8667 (package
8668 (name "python-webassets")
8669 (version "3.0.0")
8670 (source
8671 (origin
8672 (method git-fetch)
8673 (uri (git-reference
8674 (url "https://github.com/miracle2k/webassets")
8675 (commit version)))
8676 (file-name (git-file-name name version))
8677 (sha256
8678 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
8679 (build-system pyproject-build-system)
8680 (propagated-inputs (list python-pyyaml python-zope-dottedname))
8681 (native-inputs (list python-hatchling python-pytest))
8682 (home-page "https://github.com/miracle2k/webassets")
8683 (synopsis "Media asset management")
8684 (description
8685 "This package provides utilities to merge, minify and compress Javascript
8686and CSS files,supporting a variety of different filters, including YUI, jsmin,
8687jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
8688 (license license:bsd-2)))
8689
8690(define-public python-cssmin
8691 (package
8692 (name "python-cssmin")
8693 (version "0.2.0")
8694 (source
8695 (origin
8696 (method git-fetch)
8697 (uri (git-reference
8698 (url "https://github.com/zacharyvoase/cssmin")
8699 (commit (string-append "v" version))))
8700 (file-name (git-file-name name version))
8701 (sha256
8702 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
8703 (build-system pyproject-build-system)
8704 (arguments (list #:tests? #f)) ; No tests.
8705 (native-inputs (list python-setuptools))
8706 (home-page "https://github.com/zacharyvoase/cssmin")
8707 (synopsis "Python port of the YUI CSS Compressor")
8708 (description "Python port of the YUI CSS Compressor.")
8709 (license (list license:expat license:bsd-3))))
8710
8711(define-public python-elastic-transport
8712 (package
8713 (name "python-elastic-transport")
8714 (version "9.1.0")
8715 (source
8716 (origin
8717 (method url-fetch)
8718 (uri (pypi-uri "elastic_transport" version))
8719 (sha256
8720 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
8721 (build-system pyproject-build-system)
8722 (arguments
8723 (list
8724 #:test-flags
8725 ;; Deselect failing tests (mostly due to network not reachable)
8726 #~(list "-k"
8727 (string-append
8728 "not .badssl.com"
8729 " and not test_assert_fingerprint_in_cert_chain_failure"))))
8730 (propagated-inputs (list python-certifi python-urllib3))
8731 (native-inputs (list nss-certs-for-test
8732 python-aiohttp
8733 ;; python-furo
8734 python-httpx
8735 python-opentelemetry-api
8736 python-opentelemetry-sdk
8737 python-orjson
8738 python-pytest
8739 python-pytest-asyncio-0.26
8740 ;; python-pytest-cov
8741 python-pytest-httpbin
8742 python-pytest-httpserver
8743 python-pytest-mock
8744 python-requests
8745 python-respx ;test
8746 python-setuptools
8747 ;; python-sphinx
8748 ;; python-sphinx-autodoc-typehints
8749 python-trustme
8750 python-wheel))
8751 (home-page "https://github.com/elastic/elastic-transport-python")
8752 (synopsis "Common library for Python Elastic client libraries")
8753 (description
8754 "This library was lifted from @code{elasticsearch-py} and then transformed to
8755be used across all Elastic services rather than only Elasticsearch. It
8756provides transport classes and utilities shared among Python Elastic client
8757libraries.")
8758 ;; Apache-2.0 in setup.py and LICENSE file.
8759 (license license:asl2.0)))
8760
8761(define-public python-elasticsearch
8762 (package
8763 (name "python-elasticsearch")
8764 (version "9.1.1")
8765 (source
8766 (origin
8767 (method git-fetch) ; no tests in PyPI release
8768 (uri (git-reference
8769 (url "https://github.com/elastic/elasticsearch-py")
8770 (commit (string-append "v" version))))
8771 (file-name (git-file-name name version))
8772 (sha256
8773 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
8774 (build-system pyproject-build-system)
8775 (native-inputs
8776 (list nss-certs-for-test
8777 python-aiohttp
8778 python-dateutil
8779 python-mock
8780 python-orjson
8781 python-pytest
8782 python-pytest-asyncio
8783 python-pytz
8784 python-pyyaml
8785 python-requests
8786 python-hatchling))
8787 (propagated-inputs
8788 (list python-certifi
8789 python-elastic-transport))
8790 (home-page "https://github.com/elastic/elasticsearch-py")
8791 (synopsis "Low-level client for Elasticsearch")
8792 (description "Official low-level client for Elasticsearch. Its goal is to
8793provide common ground for all Elasticsearch-related code in Python; because of
8794this it tries to be opinion-free and very extendable.")
8795 ;; Apache-2.0 in setup.py and LICENSE file.
8796 (license license:asl2.0)))
8797
8798(define-public python-engineio
8799 (package
8800 (name "python-engineio")
8801 (version "4.12.2")
8802 (source
8803 (origin
8804 (method url-fetch)
8805 (uri (pypi-uri "python_engineio" version))
8806 (sha256
8807 (base32
8808 "1ynyf3n29biwkm6nwzzwzhr4m19lsir1x5azxq2nl7xyw7zi5rz7"))))
8809 (build-system pyproject-build-system)
8810 (arguments
8811 (list
8812 #:test-flags
8813 #~(list "-k"
8814 "not test_static_file_routing and not test_static_files")))
8815 (native-inputs
8816 (list python-pytest
8817 python-pytest-asyncio
8818 python-setuptools
8819 python-tornado))
8820 (propagated-inputs
8821 (list python-aiohttp
8822 python-requests
8823 python-simple-websocket
8824 python-websocket-client))
8825 (home-page "https://github.com/miguelgrinberg/python-engineio/")
8826 (synopsis "Engine.IO server")
8827 (description "This package provides a Python implementation of the
8828@code{Engine.IO} realtime client and server.")
8829 (license license:expat)))
8830
8831(define-public python-ephemeral-port-reserve
8832 (package
8833 (name "python-ephemeral-port-reserve")
8834 (version "1.1.4")
8835 (source
8836 (origin
8837 (method git-fetch) ;no tests in PyPI archive
8838 (uri (git-reference
8839 (url "https://github.com/Yelp/ephemeral-port-reserve")
8840 (commit (string-append "v" version))))
8841 (file-name (git-file-name name version))
8842 (sha256
8843 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
8844 (build-system pyproject-build-system)
8845 (native-inputs
8846 (list python-pytest
8847 python-setuptools
8848 python-wheel))
8849 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
8850 (synopsis "Find an unused port, reliably")
8851 (description
8852 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
8853it.")
8854 (license license:expat)))
8855
8856(define-public python-flask-migrate
8857 (package
8858 (name "python-flask-migrate")
8859 (version "4.1.0")
8860 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
8861 (source (origin
8862 (method git-fetch)
8863 (uri (git-reference (url home-page)
8864 (commit (string-append "v" version))))
8865 (file-name (git-file-name name version))
8866 (sha256
8867 (base32
8868 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
8869 (build-system pyproject-build-system)
8870 (propagated-inputs
8871 (list python-flask python-alembic python-flask-sqlalchemy))
8872 (native-inputs
8873 (list python-pytest python-setuptools python-wheel))
8874 (synopsis "SQLAlchemy database migrations for Flask programs using
8875Alembic")
8876 (description "This package contains SQLAlchemy database migration tools
8877for Flask programs that are using @code{python-alembic}.")
8878 (license license:expat)))
8879
8880(define-public python-genshi
8881 (package
8882 (name "python-genshi")
8883 (version "0.7.10")
8884 (source
8885 (origin
8886 (method git-fetch)
8887 (uri (git-reference
8888 (url "https://github.com/edgewall/genshi")
8889 (commit version)))
8890 (file-name (git-file-name name version))
8891 (sha256
8892 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
8893 (build-system pyproject-build-system)
8894 (arguments (list #:test-backend #~'unittest))
8895 (native-inputs (list python-setuptools))
8896 (propagated-inputs (list python-six))
8897 (home-page "https://genshi.edgewall.org/")
8898 (synopsis "Toolkit for generation of output for the web")
8899 (description "Genshi is a Python library that provides an integrated set
8900of components for parsing, generating, and processing HTML, XML or other
8901textual content for output generation on the web.")
8902 (license license:bsd-3)))
8903
8904(define-public python-flask-principal
8905 (package
8906 (name "python-flask-principal")
8907 (version "0.4.0")
8908 (source
8909 (origin
8910 (method git-fetch)
8911 (uri (git-reference
8912 (url "https://github.com/pallets-eco/flask-principal")
8913 (commit version)))
8914 (file-name (git-file-name name version))
8915 (sha256
8916 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
8917 (build-system pyproject-build-system)
8918 (propagated-inputs (list python-blinker))
8919 (native-inputs (list python-flask python-pynose python-setuptools))
8920 (home-page "https://github.com/pallets-eco/flask-principal")
8921 (synopsis "Identity management for Flask")
8922 (description
8923 "@code{flask_principal} is a identity management library for Flask. It
8924supports managing both authentication and authorization data in a thread-local
8925variable.")
8926 (license license:expat)))
8927
8928(define-public python-flask-httpauth
8929 (package
8930 (name "python-flask-httpauth")
8931 (version "4.8.0")
8932 (source
8933 (origin
8934 (method url-fetch)
8935 (uri (pypi-uri "Flask-HTTPAuth" version))
8936 (sha256
8937 (base32
8938 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
8939 (build-system pyproject-build-system)
8940 (propagated-inputs (list python-flask))
8941 (native-inputs
8942 (list nss-certs-for-test
8943 python-pytest
8944 python-setuptools
8945 python-wheel))
8946 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
8947 (synopsis "Basic and Digest HTTP authentication for Flask routes")
8948 (description "@code{flask_httpauth} provides Basic and Digest HTTP
8949authentication for Flask routes.")
8950 (license license:expat)))
8951
8952(define-public python-uritemplate
8953 (package
8954 (name "python-uritemplate")
8955 (version "4.2.0")
8956 (source
8957 (origin
8958 (method url-fetch)
8959 (uri (pypi-uri "uritemplate" version))
8960 (sha256
8961 (base32
8962 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
8963 (build-system pyproject-build-system)
8964 (native-inputs (list python-pytest python-setuptools))
8965 (home-page "https://uritemplate.readthedocs.io/")
8966 (synopsis "Library to deal with URI Templates")
8967 (description "@code{uritemplate} provides Python library to deal with URI
8968Templates.")
8969 ;; The software is made available under the terms of *either* of the
8970 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
8971 ;; are made under *both* licenses (excerpt from the LICENSE file).
8972 (license (list license:bsd-2 license:asl2.0))))
8973
8974(define-public python-uritemplate-3
8975 (package
8976 (inherit python-uritemplate)
8977 (name "python-uritemplate")
8978 (version "3.0.1")
8979 (source (origin
8980 (method url-fetch)
8981 (uri (pypi-uri "uritemplate" version))
8982 (sha256
8983 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
8984
8985(define-public python-publicsuffix2
8986 (package
8987 (name "python-publicsuffix2")
8988 (version "2.2019-12-21")
8989 (source
8990 (origin
8991 (method git-fetch)
8992 (uri (git-reference
8993 (url "https://github.com/pombredanne/python-publicsuffix2")
8994 (commit (string-append "release-" version))))
8995 (file-name (git-file-name name version))
8996 (sha256
8997 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
8998 (build-system pyproject-build-system)
8999 (arguments
9000 (list
9001 #:tests? #f ;the test suite requires network access
9002 #:phases
9003 #~(modify-phases %standard-phases
9004 (add-after 'unpack 'ignore-maintainer-inputs
9005 (lambda _
9006 ;; Comment out a demand for python-requests, which is used only by
9007 ;; the unused ‘update_psl’ helper command.
9008 (substitute* "setup.py"
9009 (("'requests " match)
9010 (format #f "# ~a" match))))))))
9011 (native-inputs (list python-setuptools))
9012 (home-page "https://github.com/pombredanne/python-publicsuffix2")
9013 (synopsis
9014 "Get a public suffix for a domain name using the Public Suffix List")
9015 (description
9016 "Get a public suffix for a domain name using the Public Suffix List.
9017Forked from and using the same API as the publicsuffix package.")
9018 (license (list license:expat license:mpl2.0))))
9019
9020(define-public python-werkzeug
9021 (package
9022 (name "python-werkzeug")
9023 (version "3.1.3")
9024 (source
9025 (origin
9026 (method url-fetch)
9027 (uri (pypi-uri "werkzeug" version))
9028 (sha256
9029 (base32
9030 "0ij7si3aa3ykac7k7fz481h4majqqwn2iqwhjxkji4y18plkqwk0"))))
9031 (build-system pyproject-build-system)
9032 (arguments
9033 (list
9034 #:test-flags
9035 ;; Test requiring networking setup.
9036 #~(list "--ignore=tests/test_serving.py"
9037 "--deselect=tests/test_debug.py::test_basic"
9038 "--deselect=tests/test_exceptions.py::test_response_body"
9039 "--deselect=tests/middleware/test_http_proxy.py::test_http_proxy")))
9040 (native-inputs
9041 (list python-flit-core
9042 python-pytest
9043 python-watchdog
9044 python-ephemeral-port-reserve
9045 python-pytest-timeout
9046 python-pytest-xprocess))
9047 (propagated-inputs
9048 (list python-markupsafe
9049 python-requests))
9050 (home-page "https://palletsprojects.com/p/werkzeug/")
9051 (synopsis "Utilities for WSGI applications")
9052 (description "One of the most advanced WSGI utility modules. It includes a
9053powerful debugger, full-featured request and response objects, HTTP utilities to
9054handle entity tags, cache control headers, HTTP dates, cookie handling, file
9055uploads, a powerful URL routing system and a bunch of community-contributed
9056addon modules.")
9057 (license license:x11)))
9058
9059(define-public python-werkzeug-1.0
9060 (package
9061 (inherit python-werkzeug)
9062 (version "1.0.1")
9063 (source (origin
9064 (method url-fetch)
9065 (uri (pypi-uri "Werkzeug" version))
9066 (sha256
9067 (base32
9068 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
9069 (patches (search-patches "python-werkzeug-tests.patch"))))
9070 (arguments
9071 (list
9072 #:phases
9073 '(modify-phases %standard-phases
9074 (add-after 'unpack 'ignore-warnings
9075 (lambda _
9076 (substitute* "setup.cfg"
9077 ((" error.*") "")))))))
9078 (propagated-inputs
9079 (list python-requests))
9080 (native-inputs
9081 (list python-pytest python-pytest-timeout python-setuptools
9082 python-wheel))))
9083
9084(define-public python-bottle
9085 (package
9086 (name "python-bottle")
9087 (version "0.13.4")
9088 (source
9089 (origin
9090 (method url-fetch)
9091 (uri (pypi-uri "bottle" version))
9092 (sha256
9093 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
9094 (build-system pyproject-build-system)
9095 (native-inputs (list python-pytest python-setuptools))
9096 (home-page "https://bottlepy.org/")
9097 (synopsis "WSGI framework for small web-applications")
9098 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
9099 (license license:expat)))
9100
9101(define-public python-wtforms
9102 (package
9103 (name "python-wtforms")
9104 (version "3.2.2")
9105 (source
9106 (origin
9107 (method url-fetch)
9108 (uri (pypi-uri "wtforms" version))
9109 (sha256
9110 (base32 "14qbayp2gfmahaqn5migwyz2h1cq3gcdr4q2vd75vwvhhqzwf03v"))))
9111 (build-system pyproject-build-system)
9112 (native-inputs
9113 (list python-babel
9114 python-email-validator
9115 python-hatchling
9116 python-pytest
9117 python-setuptools))
9118 (propagated-inputs (list python-markupsafe))
9119 (home-page "https://wtforms.readthedocs.io/")
9120 (synopsis
9121 "Form validation and rendering library for Python web development")
9122 (description
9123 "WTForms is a flexible forms validation and rendering library
9124for Python web development. It is very similar to the web form API
9125available in Django, but is a standalone package.")
9126 (license license:bsd-3)))
9127
9128(define-public python-wtforms-sqlalchemy
9129 (package
9130 (name "python-wtforms-sqlalchemy")
9131 (version "0.4.1")
9132 (source
9133 (origin
9134 (method url-fetch)
9135 (uri (pypi-uri "WTForms-SQLAlchemy" version))
9136 (sha256
9137 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
9138 (build-system pyproject-build-system)
9139 (native-inputs (list python-pytest python-setuptools python-wheel))
9140 (propagated-inputs (list python-sqlalchemy python-wtforms))
9141 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
9142 (synopsis "SQLAlchemy tools for WTForms")
9143 (description
9144 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
9145package from WTForms. The package has been renamed to
9146@code{wtforms_sqlalchemy} but otherwise should function the same as
9147@code{wtforms.ext.sqlalchemy} did.")
9148 (license license:bsd-3)))
9149
9150(define-public python-urlgrabber
9151 (package
9152 (name "python-urlgrabber")
9153 (version "4.1.0")
9154 (source
9155 (origin
9156 (method url-fetch)
9157 (uri (pypi-uri "urlgrabber" version))
9158 (sha256
9159 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
9160 (build-system pyproject-build-system)
9161 (arguments
9162 (list
9163 #:tests? #f ; Most tests require network access.
9164 #:phases
9165 #~(modify-phases %standard-phases
9166 (replace 'check
9167 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
9168 (when tests?
9169 (invoke "python" "test/runtests.py")))))))
9170 (native-inputs (list python-setuptools))
9171 (propagated-inputs
9172 (list python-pycurl python-setuptools python-six))
9173 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
9174 (synopsis "High-level cross protocol url-grabber")
9175 (description
9176 "@code{urlgrabber} is a library that unifies access to files available on
9177the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
9178supports features like HTTP keep-alive, reget, throttling and more.")
9179 (license license:lgpl2.1+)))
9180
9181(define-public python-pycares
9182 (package
9183 (name "python-pycares")
9184 (version "4.11.0")
9185 (source
9186 (origin
9187 (method git-fetch)
9188 (uri (git-reference
9189 (url "https://github.com/saghul/pycares")
9190 (commit (string-append "v" version))))
9191 (file-name (git-file-name name version))
9192 (sha256
9193 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
9194 (snippet #~(begin
9195 (rmdir "deps/c-ares")))))
9196 (build-system pyproject-build-system)
9197 (arguments
9198 (list
9199 ;; XXX: Half of the tests require internet access
9200 ;; There is currently no markers to avoid running them.
9201 #:tests? #f
9202 #:phases
9203 #~(modify-phases %standard-phases
9204 (add-after 'unpack 'configure-system-lib
9205 (lambda _
9206 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
9207 (native-inputs (list python-pytest python-setuptools))
9208 (inputs (list c-ares))
9209 (propagated-inputs (list python-cffi))
9210 (home-page "https://github.com/saghul/pycares")
9211 (synopsis "Python interface for @code{c-ares}")
9212 (description
9213 "@code{pycares} is a Python module which provides an interface to
9214@code{c-ares}, a C library that performs DNS requests and name resolutions
9215asynchronously.")
9216 (license license:expat)))
9217
9218(define-public python-yarl
9219 (package
9220 (name "python-yarl")
9221 (version "1.18.3")
9222 (source
9223 (origin
9224 (method url-fetch)
9225 (uri (pypi-uri "yarl" version))
9226 (sha256
9227 (base32
9228 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
9229 (build-system pyproject-build-system)
9230 (arguments
9231 (list
9232 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
9233 #:phases
9234 '(modify-phases %standard-phases
9235 (add-after 'unpack 'avoid-pytest-cov-preload
9236 (lambda _
9237 (substitute* "pytest.ini"
9238 (("-p pytest_cov") ""))))
9239 (add-after 'unpack 'patch-build-system
9240 (lambda _
9241 ;; XXX: I don't know how to tell it to build the extensions in
9242 ;; place.
9243 (substitute* "packaging/pep517_backend/_backend.py"
9244 (("build_inplace=False") "build_inplace=True")))))))
9245 (native-inputs
9246 (list python-cython
9247 python-expandvars
9248 python-pytest
9249 python-pytest-xdist
9250 python-setuptools
9251 python-tomli))
9252 (propagated-inputs
9253 (list python-packaging python-idna python-multidict python-propcache))
9254 (home-page "https://github.com/aio-libs/yarl/")
9255 (synopsis "Yet another URL library")
9256 (description "@code{yarl} module provides handy @code{URL} class
9257for URL parsing and changing.")
9258 (license license:asl2.0)))
9259
9260(define-public python-canvasapi
9261 (package
9262 (name "python-canvasapi")
9263 (version "3.4.0")
9264 (source (origin
9265 (method git-fetch)
9266 (uri (git-reference
9267 (url "https://github.com/ucfopen/canvasapi")
9268 (commit (string-append "v" version))))
9269 (file-name (git-file-name name version))
9270 (sha256
9271 (base32
9272 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
9273 (build-system pyproject-build-system)
9274 (propagated-inputs (list python-arrow python-pytz python-requests))
9275 (native-inputs (list python-pytest
9276 python-requests-mock
9277 python-setuptools
9278 python-urllib3))
9279 (home-page "https://github.com/ucfopen/canvasapi")
9280 (synopsis "API wrapper for the Canvas LMS")
9281 (description
9282 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
9283The library enables developers to programmatically manage Canvas courses,
9284users, gradebooks, and more.")
9285 (license license:expat)))
9286
9287(define-public python-google
9288 (package
9289 (name "python-google")
9290 (version "3.0.0")
9291 (source
9292 (origin
9293 (method url-fetch)
9294 (uri (pypi-uri "google" version))
9295 (sha256
9296 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
9297 (build-system pyproject-build-system)
9298 (arguments (list #:tests? #f)) ;There are no tests.
9299 (native-inputs (list python-setuptools))
9300 (propagated-inputs (list python-beautifulsoup4))
9301 (home-page "https://breakingcode.wordpress.com/")
9302 (synopsis "Python bindings to the Google search engine")
9303 (description
9304 "This package provides Python bindings for using the Google search
9305engine. Its module is called @code{googlesearch}.")
9306 (license license:bsd-3)))
9307
9308(define-public python-google-api-client
9309 (package
9310 (name "python-google-api-client")
9311 (version "2.187.0")
9312 (source
9313 (origin
9314 (method git-fetch)
9315 (uri (git-reference
9316 (url "https://github.com/google/google-api-python-client")
9317 (commit (string-append "v" version))))
9318 (file-name (git-file-name name version))
9319 (sha256
9320 (base32 "09vq5d32avri0gl8c7nn5dv2xds1jzjms7vqk3gn66nm2m37x8mv"))))
9321 (build-system pyproject-build-system)
9322 (arguments
9323 (list
9324 #:test-flags
9325 #~(list
9326 "-k"
9327 (string-join
9328 (list
9329 ;; XXX: Deprecated behavior.
9330 "not test_client_options_universe_configured_with_mtls"
9331 "test_universe_env_var_configured_with_mtls"
9332 ;; XXX: Requires CA certificates.
9333 "test_credentials_and_credentials_file_mutually_exclusive")
9334 " and not ")
9335 "tests")))
9336 (native-inputs
9337 (list python-parameterized
9338 python-pytest
9339 python-setuptools))
9340 (propagated-inputs
9341 (list python-google-api-core
9342 python-google-auth
9343 python-google-auth-httplib2
9344 python-httplib2
9345 python-pyparsing
9346 python-uritemplate-3))
9347 (home-page "https://github.com/google/google-api-python-client")
9348 (synopsis "Core Python library for accessing Google APIs")
9349 (description "Python client library for Google's discovery based APIs")
9350 (license license:asl2.0)))
9351
9352(define-public python-google-auth-httplib2
9353 (package
9354 (name "python-google-auth-httplib2")
9355 (version "0.2.0")
9356 (source (origin
9357 (method url-fetch)
9358 (uri (pypi-uri "google-auth-httplib2" version))
9359 (sha256
9360 (base32 "018fckshilc6z2qpj1pclh8haanbq3lr85w6p4g4z5wgyjnppaiq"))))
9361 (build-system pyproject-build-system)
9362 (propagated-inputs
9363 (list python-google-auth python-httplib2))
9364 (native-inputs
9365 (list python-pytest
9366 python-pyparsing
9367 python-pytest-localserver
9368 python-flask
9369 python-setuptools))
9370 (home-page
9371 "https://github.com/GoogleCloudPlatform/google-auth-library-python-httplib2")
9372 (synopsis "Google Authentication Library: httplib2 transport")
9373 (description "This package provides a Google Authentication Library plugin
9374for httplib2 transport.")
9375 (license license:asl2.0)))
9376
9377(define-public python-google-auth-oauthlib
9378 (package
9379 (name "python-google-auth-oauthlib")
9380 (version "1.2.4")
9381 (home-page
9382 "https://github.com/GoogleCloudPlatform/\
9383google-auth-library-python-oauthlib")
9384 (source
9385 (origin
9386 (method git-fetch)
9387 (uri (git-reference
9388 (url home-page)
9389 (commit (string-append "v" version))))
9390 (file-name (git-file-name name version))
9391 (sha256
9392 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
9393 (build-system pyproject-build-system)
9394 (propagated-inputs (list python-google-auth python-requests-oauthlib))
9395 (native-inputs
9396 (list python-click python-mock python-pytest python-setuptools))
9397 (synopsis "Google Authentication Library: oauthlib")
9398 (description "This package provides a Google Authentication Library plugin
9399with oauthlib.")
9400 (license license:asl2.0)))
9401
9402(define-public whoogle-search
9403 (package
9404 (name "whoogle-search")
9405 (version "0.8.4")
9406 (source (origin
9407 (method url-fetch)
9408 (uri (pypi-uri "whoogle-search" version))
9409 (sha256
9410 (base32
9411 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
9412 (build-system pyproject-build-system)
9413 (arguments
9414 (list
9415 ;; The tests need network access
9416 #:tests? #f))
9417 (propagated-inputs
9418 (list python-beautifulsoup4
9419 python-brotli
9420 python-cryptography
9421 python-cssutils
9422 python-defusedxml
9423 python-flask
9424 python-dotenv
9425 python-requests
9426 python-stem
9427 python-validators
9428 python-waitress))
9429 (native-inputs (list python-setuptools python-wheel))
9430 (home-page "https://github.com/benbusby/whoogle-search")
9431 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
9432 (description
9433 "Get Google results, but without any ads, javascript, AMP links,
9434cookies, or IP address tracking. Quick and simple to implement as a primary
9435search engine replacement on both desktop and mobile.")
9436 (license license:expat)))
9437
9438(define-public python-hawkauthlib
9439 (package
9440 (name "python-hawkauthlib")
9441 (version "2.0.0")
9442 (source
9443 (origin
9444 (method git-fetch)
9445 (uri (git-reference
9446 (url "https://github.com/mozilla-services/hawkauthlib")
9447 (commit (string-append "v" version))))
9448 (file-name (git-file-name name version))
9449 (sha256
9450 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
9451 (build-system pyproject-build-system)
9452 (arguments
9453 (list
9454 #:test-backend #~'unittest
9455 #:phases
9456 #~(modify-phases %standard-phases
9457 (add-after 'unpack 'fix-python-incompatibilities
9458 (lambda _
9459 (substitute* (find-files "hawkauthlib/tests" "\\.py$")
9460 (("assertEquals") "assertEqual")))))))
9461 (native-inputs (list python-setuptools))
9462 (propagated-inputs (list python-requests python-webob))
9463 (home-page "https://github.com/mozilla-services/hawkauthlib")
9464 (synopsis "Hawk Access Authentication protocol")
9465 (description
9466 "This is a low-level Python library for implementing Hawk Access
9467Authentication, a simple HTTP request-signing scheme.")
9468 (license license:mpl2.0)))
9469
9470(define-public python-pybrowserid
9471 (package
9472 (name "python-pybrowserid")
9473 (version "0.14.0")
9474 (source
9475 (origin
9476 (method git-fetch)
9477 (uri (git-reference
9478 (url "https://github.com/mozilla/PyBrowserID")
9479 (commit version)))
9480 (file-name (git-file-name name version))
9481 (sha256
9482 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
9483 (build-system pyproject-build-system)
9484 (arguments
9485 (list
9486 #:test-backend #~'unittest
9487 #:phases
9488 #~(modify-phases %standard-phases
9489 (add-after 'unpack 'python-3.12-compatibility
9490 (lambda _
9491 (substitute* (find-files "browserid/tests" "\\.py")
9492 (("assertEquals") "assertEqual")))))))
9493 (propagated-inputs (list python-requests))
9494 (native-inputs (list python-mock python-setuptools))
9495 (home-page "https://github.com/mozilla/PyBrowserID")
9496 (synopsis "Python library for the BrowserID protocol")
9497 (description
9498 "This is a Python client library for the BrowserID protocol that
9499underlies Mozilla Persona.")
9500 (license license:mpl2.0)))
9501
9502(define-public python-pyfxa
9503 (package
9504 (name "python-pyfxa")
9505 (version "0.8.1")
9506 (source
9507 (origin
9508 (method git-fetch)
9509 (uri (git-reference
9510 (url "https://github.com/mozilla/PyFxA")
9511 (commit (string-append "v" version))))
9512 (file-name (git-file-name name version))
9513 (sha256
9514 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
9515 (build-system pyproject-build-system)
9516 (arguments
9517 (list
9518 ;; These tests require network access
9519 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
9520 (propagated-inputs
9521 (list python-cryptography
9522 python-pyjwt
9523 python-parameterized
9524 python-hawkauthlib
9525 python-requests))
9526 (native-inputs
9527 (list python-grequests
9528 python-hatchling
9529 python-mock
9530 python-pytest
9531 python-responses))
9532 (home-page "https://github.com/mozilla/PyFxA")
9533 (synopsis "Firefox Accounts client library for Python")
9534 (description
9535 "This is a Python library for interacting with the Firefox Accounts
9536ecosystem.")
9537 (license license:mpl2.0)))
9538
9539(define-public python-hyperlink
9540 (package
9541 (name "python-hyperlink")
9542 (version "21.0.0")
9543 (source
9544 (origin
9545 (method url-fetch)
9546 (uri (pypi-uri "hyperlink" version))
9547 (sha256
9548 (base32
9549 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
9550 (build-system pyproject-build-system)
9551 (arguments
9552 (list #:phases
9553 #~(modify-phases %standard-phases
9554 (add-before 'check 'pretend-to-be-CI
9555 (lambda _
9556 ;; Pretend to be a CI system to skip flaky tests.
9557 (setenv "CI" "true"))))))
9558 (native-inputs
9559 (list python-pytest python-setuptools python-wheel))
9560 (propagated-inputs
9561 (list python-idna))
9562 (home-page "https://github.com/python-hyper/hyperlink")
9563 (synopsis "Python module to create immutable URLs according to spec")
9564 (description "This package provides a Python module to create immutable, and
9565correct URLs for Python according to RFCs 3986 and 3987.")
9566 (license license:expat)))
9567
9568(define-public python-treq
9569 (package
9570 (name "python-treq")
9571 (version "24.9.1")
9572 (source
9573 (origin
9574 (method url-fetch)
9575 (uri (pypi-uri "treq" version))
9576 (sha256
9577 (base32
9578 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
9579 (build-system pyproject-build-system)
9580 (native-inputs
9581 (list python-httpbin
9582 python-pytest
9583 python-service-identity
9584 python-setuptools
9585 python-wheel))
9586 (propagated-inputs
9587 (list python-attrs
9588 python-hyperlink
9589 python-incremental
9590 python-requests
9591 python-twisted
9592 python-typing-extensions))
9593 (home-page "https://github.com/twisted/treq")
9594 (synopsis "Requests-like API built on top of twisted.web's Agent")
9595 (description "This package provides an HTTP library inspired by
9596@code{requests} but written on top of Twisted's @code{Agents}. It offers a
9597high level API for making HTTP requests when using Twisted.")
9598 (license license:expat)))
9599
9600(define-public python-autobahn
9601 (package
9602 (name "python-autobahn")
9603 (version "25.11.1")
9604 (source
9605 (origin
9606 (method url-fetch)
9607 (uri (pypi-uri "autobahn" version))
9608 (sha256
9609 (base32
9610 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
9611 (build-system pyproject-build-system)
9612 (arguments
9613 (list
9614 ;; The tests fail to run:
9615 ;; https://github.com/crossbario/autobahn-python/issues/1117
9616 #:tests? #f
9617 #:phases #~(modify-phases %standard-phases
9618 (add-after 'unpack 'relax-zope-interface
9619 (lambda _
9620 ;; python-zope-interface is a world rebuild package
9621 ;; and our one-digit lower minor version seems to be
9622 ;; fine.
9623 (substitute* "setup.py"
9624 (("zope.interface>=5.2.0")
9625 "zope.interface>=5.1.0"))))
9626 (add-after 'unpack 'strip-xbr
9627 (lambda _
9628 ;; Strip new XBR feature which isn't available in Guix.
9629 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
9630 (native-inputs (list python-setuptools python-wheel))
9631 (propagated-inputs (list python-cbor2
9632 python-cryptography
9633 python-hyperlink
9634 python-msgpack
9635 python-py-ubjson
9636 python-twisted
9637 python-txaio
9638 python-ujson))
9639 (home-page "https://github.com/crossbario/autobahn-python/")
9640 (synopsis "Web Application Messaging Protocol implementation")
9641 (description "This package provides an implementation of the @dfn{Web Application
9642Messaging Protocol} (WAMP). WAMP connects components in distributed
9643applications using Publish and Subscribe (PubSub) and routed Remote Procedure
9644Calls (rRPC). It is ideal for distributed, multi-client and server applications
9645such as IoT applications or multi-user database-driven business applications.")
9646 (license license:expat)))
9647
9648(define-public python-ws4py
9649 (package
9650 (name "python-ws4py")
9651 (version "0.6.0")
9652 (source
9653 (origin
9654 (method git-fetch)
9655 (uri (git-reference
9656 (url "https://github.com/Lawouach/WebSocket-for-Python")
9657 (commit version)))
9658 (file-name (git-file-name name version))
9659 (sha256
9660 (base32
9661 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
9662 (build-system pyproject-build-system)
9663 (arguments
9664 (list
9665 #:phases
9666 #~(modify-phases %standard-phases
9667 (add-after 'unpack 'remove-cherrypy-support
9668 (lambda _
9669 (delete-file "ws4py/server/cherrypyserver.py")
9670 (delete-file "test/test_cherrypy.py"))))))
9671 (native-inputs (list python-setuptools python-pytest))
9672 (propagated-inputs
9673 (list python-gevent python-tornado))
9674 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
9675 (synopsis "WebSocket client and server library")
9676 (description
9677 "This package provides a WebSocket client and server library for Python.")
9678 (license license:bsd-3)))
9679
9680(define-public python-slowapi
9681 (package
9682 (name "python-slowapi")
9683 (version "0.1.9")
9684 (source
9685 (origin
9686 (method git-fetch)
9687 (uri (git-reference
9688 (url "https://github.com/laurents/slowapi")
9689 (commit (string-append "v" version))))
9690 (file-name (git-file-name name version))
9691 (sha256
9692 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
9693 (build-system pyproject-build-system)
9694 (arguments
9695 (list
9696 #:test-flags
9697 ;; These tests fail because the timestamp contains more decimal points
9698 ;; than expected, so a simple equality comparison fails.
9699 '(list "-k" (string-append "not test_headers_no_breach"
9700 " and not test_headers_breach"))))
9701 (propagated-inputs (list python-limits python-redis))
9702 (native-inputs
9703 (list python-fastapi
9704 python-hiro
9705 python-mock
9706 python-poetry-core
9707 python-pytest))
9708 (home-page "https://github.com/laurents/slowapi")
9709 (synopsis "Rate limiting extension for Starlette and Fastapi")
9710 (description
9711 "This package provides a rate limiting extension for Starlette and
9712Fastapi.")
9713 (license license:expat)))
9714
9715(define-public python-slugify
9716 (package
9717 (name "python-slugify")
9718 (version "8.0.4")
9719 (source
9720 (origin
9721 (method git-fetch)
9722 (uri (git-reference
9723 (url "https://github.com/un33k/python-slugify")
9724 (commit (string-append "v" version))))
9725 (file-name (git-file-name name version))
9726 (sha256
9727 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
9728 (build-system pyproject-build-system)
9729 (arguments (list #:test-backend #~'unittest))
9730 (native-inputs (list python-setuptools))
9731 (propagated-inputs (list python-unidecode python-text-unidecode))
9732 (home-page "https://github.com/un33k/python-slugify")
9733 (synopsis "Python Slugify application that handles Unicode")
9734 (description "This package provides a @command{slufigy} command and
9735library to create slugs from unicode strings while keeping it DRY.")
9736 (license license:expat)))
9737
9738(define-public python-branca
9739 (package
9740 (name "python-branca")
9741 (version "0.7.2")
9742 (source
9743 (origin
9744 (method git-fetch) ; no tests in PyPI
9745 (uri (git-reference
9746 (url "https://github.com/python-visualization/branca")
9747 (commit (string-append "v" version))))
9748 (file-name (git-file-name name version))
9749 (sha256
9750 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
9751 (build-system pyproject-build-system)
9752 (arguments
9753 ;; This file requires Selenium.
9754 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
9755 ;; This test passes but is very slow.
9756 "-k" "not test_color_brewer_extendability")))
9757 (propagated-inputs (list python-jinja2))
9758 (native-inputs
9759 (list python-numpy
9760 python-pytest
9761 python-setuptools
9762 python-setuptools-scm
9763 python-wheel))
9764 (home-page "https://github.com/python-visualization/branca")
9765 (synopsis "Generate complex HTML+JS pages with Python")
9766 (description "This library is a spinoff from @code{folium} that would host
9767the non-map-specific features. It can be used to generate HTML + JS.")
9768 (license license:expat)))
9769
9770(define-public python-tinycss2
9771 (package
9772 (name "python-tinycss2")
9773 (version "1.5.1")
9774 (source
9775 (origin
9776 (method git-fetch)
9777 (uri (git-reference
9778 (url "https://github.com/Kozea/tinycss2")
9779 (commit (string-append "v" version))
9780 (recursive? #true)))
9781 (file-name (git-file-name name version))
9782 (sha256
9783 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
9784 (build-system pyproject-build-system)
9785 (native-inputs
9786 (list python-flit
9787 python-pytest))
9788 (propagated-inputs
9789 (list python-webencodings))
9790 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
9791 (synopsis "Low-level CSS parser for Python")
9792 (description "@code{tinycss2} can parse strings, return Python objects
9793representing tokens and blocks, and generate CSS strings corresponding to
9794these objects.
9795
9796Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
9797grammar of CSS but doesn’t know specific rules, properties or values supported
9798in various CSS modules.")
9799 (license license:bsd-3)))
9800
9801(define-public python-tinyhtml5
9802 (package
9803 (name "python-tinyhtml5")
9804 (version "2.1.0")
9805 (source
9806 (origin
9807 (method git-fetch)
9808 (uri (git-reference
9809 (url "https://github.com/CourtBouillon/tinyhtml5")
9810 (commit version)))
9811 (file-name (git-file-name name version))
9812 (sha256
9813 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
9814 (build-system pyproject-build-system)
9815 (propagated-inputs
9816 (list python-webencodings))
9817 (native-inputs
9818 (list python-flit-core
9819 python-pytest))
9820 (home-page "https://github.com/CourtBouillon/tinyhtml5")
9821 (synopsis "Small HTML parser based on the WHATWG HTML specification")
9822 (description "This Python module is a HTML5 parser that transforms a
9823possibly malformed HTML document into an ElementTree tree. This module is a
9824simplified fork of html5lib.")
9825 (license license:expat)))
9826
9827(define-public python-cssselect2
9828 (package
9829 (name "python-cssselect2")
9830 (version "0.9.0")
9831 (source
9832 (origin
9833 (method git-fetch)
9834 (uri (git-reference
9835 (url "https://github.com/Kozea/cssselect2")
9836 (commit version)))
9837 (file-name (git-file-name name version))
9838 (sha256
9839 (base32 "1drvb83siq9s6dygyhab6kzk2v2ib6cv51ls42p4jrxs9q8cdiw0"))))
9840 (build-system pyproject-build-system)
9841 (propagated-inputs
9842 (list python-tinycss2))
9843 (native-inputs
9844 (list python-flit-core
9845 python-pytest))
9846 (home-page "https://doc.courtbouillon.org/cssselect2/stable/")
9847 (synopsis "CSS selectors for Python ElementTree")
9848 (description "@code{cssselect2} is a straightforward implementation of
9849CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
9850ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
9851
9852Unlike the Python package @code{cssselect}, it does not translate selectors to
9853XPath and therefore does not have all the correctness corner cases that are
9854hard or impossible to fix in cssselect.")
9855 (license license:bsd-3)))
9856
9857(define-public python-uvloop
9858 (package
9859 (name "python-uvloop")
9860 (version "0.21.0")
9861 (source
9862 (origin
9863 (method url-fetch)
9864 (uri (pypi-uri "uvloop" version))
9865 (sha256
9866 (base32 "1qq46ym3ymzfn4j6fnykfmr1f4qnb7x7p15dlw37hi38v87jpw9v"))
9867 (modules '((guix build utils)))
9868 (snippet
9869 '(begin (delete-file-recursively "vendor")
9870 (delete-file "uvloop/loop.c")))))
9871 (build-system pyproject-build-system)
9872 (arguments
9873 (list
9874 #:test-flags
9875 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
9876 ;; to get a meaningful idea about where.
9877 #~(list "--timeout=300"
9878 "--timeout-method=thread"
9879 "-k" (string-join
9880 (list
9881 ;; Timeout, because SIGINT cannot be sent to child.
9882 "not test_signals_sigint_pycode_continue"
9883 "test_signals_sigint_pycode_stop"
9884 "test_signals_sigint_uvcode"
9885 "test_signals_sigint_uvcode_two_loop_runs"
9886 ;; This test is racy and prone to get stuck on
9887 ;; various platforms, possibly a aiohttp issue:
9888 ;; https://github.com/MagicStack/uvloop/issues/412
9889 "test_remote_shutdown_receives_trailing_data"
9890 ;; It looks like pytest is preventing
9891 ;; custom stdout/stderr redirection,
9892 ;; even with -s.
9893 "test_process_streams_redirect"
9894 ;; FileNotFoundError: [Errno 2] No such file or
9895 ;; directory
9896 "test_process_env_2"
9897 ;; socket.gaierror: [Errno -2] Name or service not known
9898 "test_getaddrinfo_21"
9899 #$@(if (target-riscv64?)
9900 `("test_renegotiation")
9901 `()))
9902 " and not "))
9903 #:phases
9904 #~(modify-phases %standard-phases
9905 (add-after 'unpack 'preparations
9906 (lambda _
9907 ;; Use packaged libuv.
9908 (substitute* "setup.py" (("self.use_system_libuv = False")
9909 "self.use_system_libuv = True"))
9910 ;; Replace hardcoded shell command.
9911 (substitute* "uvloop/loop.pyx"
9912 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))))
9913 #$@(if (target-riscv64?)
9914 `((add-after 'unpack 'adjust-test-timeouts
9915 (lambda _
9916 (substitute* '("tests/test_tcp.py"
9917 "tests/test_unix.py")
9918 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
9919 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
9920 '())
9921 (add-before 'check 'pre-check
9922 (lambda* (#:key tests? #:allow-other-keys)
9923 (when tests?
9924 ;; Remove Python module, which conflicts with the installed
9925 ;; version, but lacks the built C module.
9926 (delete-file-recursively "uvloop")))))))
9927 (native-inputs
9928 (list python-aiohttp
9929 python-cython
9930 python-psutil
9931 python-pyopenssl
9932 python-pytest
9933 python-pytest-timeout
9934 python-setuptools
9935 python-wheel))
9936 (inputs
9937 (list libuv))
9938 (home-page "https://github.com/MagicStack/uvloop")
9939 (synopsis "Fast implementation of asyncio event loop on top of libuv")
9940 (description
9941 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
9942event loop. It is implemented in Cython and uses libuv under the hood.")
9943 (license license:expat)))
9944
9945(define-public gunicorn
9946 (package
9947 (name "gunicorn")
9948 (version "25.3.0")
9949 (source
9950 (origin
9951 (method url-fetch)
9952 (uri (pypi-uri "gunicorn" version))
9953 (sha256
9954 (base32
9955 "12g85w735s4dszjfidi4vh786rfxsa5rd60il0fcvxknkwpinkpp"))))
9956 (outputs '("out" "doc"))
9957 (build-system pyproject-build-system)
9958 (arguments
9959 `(#:test-flags
9960 ;; Disable the geventlet tests because eventlet uses dnspython, which
9961 ;; does not work in the build container due to lack of /etc/resolv.conf
9962 '("--ignore=tests/workers/test_geventlet.py")
9963 #:phases (modify-phases %standard-phases
9964 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
9965 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
9966 ;; size. Override it to only add the essential entries.
9967 (replace 'wrap
9968 (lambda* (#:key native-inputs inputs outputs
9969 #:allow-other-keys)
9970 (let* ((out (assoc-ref outputs "out"))
9971 (python (assoc-ref (or native-inputs inputs)
9972 "python"))
9973 (sitedir (string-append "/lib/python"
9974 (python-version python)
9975 "/site-packages")))
9976 (wrap-program (string-append out "/bin/gunicorn")
9977 `("PYTHONPATH" ":" prefix
9978 ,(map (lambda (output)
9979 (string-append output sitedir))
9980 (list python out))))))))))
9981 (inputs (list bash-minimal))
9982 (native-inputs
9983 (list binutils ;for ctypes.util.find_library()
9984 python-eventlet
9985 python-gevent
9986 python-h2
9987 python-httpx
9988 python-pytest
9989 python-pytest-asyncio
9990 python-setuptools
9991 python-uvloop))
9992 (propagated-inputs
9993 (list python-packaging
9994 python-setuptools
9995 python-wheel))
9996 (home-page "https://gunicorn.org/")
9997 (synopsis "Python WSGI HTTP Server for UNIX")
9998 (description
9999 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
10000Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
10001Unicorn project. The Gunicorn server is broadly compatible with
10002various web frameworks, simply implemented, light on server resources,
10003and fairly speedy.")
10004 (license license:expat)))
10005
10006;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
10007;; its tests
10008(define-public gunicorn-bootstrap
10009 (package
10010 (inherit gunicorn)
10011 (name "gunicorn")
10012 (arguments `(#:tests? #f))
10013 (properties '((hidden? . #t)))
10014 (native-inputs `())))
10015
10016(define-public python-httptools
10017 (package
10018 (name "python-httptools")
10019 (version "0.7.1")
10020 (source
10021 (origin
10022 ;; PyPI tarball comes with a vendored http-parser and no tests.
10023 (method git-fetch)
10024 (uri (git-reference
10025 (url "https://github.com/MagicStack/httptools")
10026 (commit (string-append "v" version))))
10027 (file-name (git-file-name name version))
10028 (sha256
10029 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
10030 (modules '((guix build utils)))
10031 (snippet
10032 #~(begin (delete-file-recursively "vendor")))))
10033 (build-system pyproject-build-system)
10034 (arguments
10035 (list
10036 #:test-flags
10037 ;; XXX: AssertionError: HttpParserError not raised.
10038 #~(list "-k" "not test_parser_response_leninent_headers_1")
10039 #:phases
10040 #~(modify-phases %standard-phases
10041 (add-after 'unpack 'configure-build-ext
10042 (lambda _
10043 (with-output-to-file "setup.cfg"
10044 (lambda ()
10045 (display "\
10046[build_ext]
10047use_system_llhttp = true
10048use_system_http_parser = true
10049cython_always = true"))))))))
10050 (native-inputs
10051 (list python-cython
10052 python-pytest
10053 python-setuptools))
10054 (inputs
10055 (list http-parser
10056 llhttp))
10057 (home-page "https://github.com/MagicStack/httptools")
10058 (synopsis "Collection of framework independent HTTP protocol utils")
10059 (description
10060 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
10061 (license license:expat)))
10062
10063(define-public python-uvicorn
10064 (package
10065 (name "python-uvicorn")
10066 (version "0.40.0")
10067 (source
10068 (origin
10069 (method git-fetch)
10070 (uri (git-reference
10071 (url "https://github.com/encode/uvicorn")
10072 (commit version)))
10073 (file-name (git-file-name name version))
10074 (sha256
10075 (base32 "0laplrb2sf9jxv4prhrsqf8kpynipqml2idqq4fr7ikij8qsz6b2"))))
10076 (build-system pyproject-build-system)
10077 (arguments
10078 (list
10079 #:test-flags
10080 #~(list "-o" "asyncio_mode=auto"
10081 ;; After tests have been passed successfully some sockets leave
10082 ;; unclosed, causing Pytest to raise warning on teardown.
10083 "-W" "ignore::ResourceWarning"
10084 "-W" "ignore::pytest.PytestUnraisableExceptionWarning"
10085 ;; For some reason tests stacked in infinity re-invocation loop:
10086 ;; AssertionError where is_alive =
10087 ;; <uvicorn.supervisors.multiprocess.Process object at
10088 ;; 0x7ffff39b6110>.is_alive.
10089 ;; Maybe this <https://github.com/encode/uvicorn/issues/2466>.
10090 "--ignore=tests/supervisors/test_multiprocess.py"
10091
10092 #$@(cond
10093 ((or (target-aarch64?)
10094 (target-riscv64?))
10095 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
10096 (#t '())))))
10097 (native-inputs
10098 (list nss-certs-for-test
10099 python-a2wsgi
10100 python-hatchling
10101 python-httpx-bootstrap
10102 python-pytest
10103 python-pytest-asyncio
10104 python-pytest-mock
10105 python-pytest-xdist
10106 python-requests
10107 python-trustme
10108 python-wsproto))
10109 (propagated-inputs
10110 (list python-a2wsgi
10111 python-click
10112 python-dotenv
10113 python-h11
10114 python-httptools
10115 python-pyyaml
10116 python-uvloop
10117 python-watchfiles
10118 python-websockets))
10119 (home-page "https://github.com/encode/uvicorn")
10120 (synopsis "Fast ASGI server implementation")
10121 (description
10122 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
10123and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
10124for HTTP/2 is planned.")
10125 (license license:bsd-3)))
10126
10127(define-public python-translation-finder
10128 (package
10129 (name "python-translation-finder")
10130 (version "2.22")
10131 (source
10132 (origin
10133 (method url-fetch)
10134 (uri (pypi-uri "translation_finder" version))
10135 (sha256
10136 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
10137 (build-system pyproject-build-system)
10138 (arguments
10139 (list
10140 #:test-flags
10141 ;; AssertionError: 31 != 30 : Mismatched count of results
10142 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
10143 (native-inputs
10144 (list python-pytest
10145 python-setuptools))
10146 (propagated-inputs
10147 (list python-charset-normalizer
10148 python-ruamel.yaml
10149 python-weblate-language-data))
10150 (home-page "https://weblate.org/")
10151 (synopsis "Translation file finder for Weblate")
10152 (description "This package provides a function to find translation file in
10153the source code of a project. It supports many translation file formats and
10154is part of the Weblate translation platform.")
10155 (license license:gpl3+)))
10156
10157(define-public python-gitlab
10158 (package
10159 (name "python-gitlab")
10160 (version "7.0.0")
10161 (source
10162 (origin
10163 (method git-fetch)
10164 (uri (git-reference
10165 (url "https://github.com/python-gitlab/python-gitlab")
10166 (commit (string-append "v" version))))
10167 (file-name (git-file-name name version))
10168 (sha256
10169 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
10170 (build-system pyproject-build-system)
10171 (arguments
10172 (list
10173 #:test-flags
10174 #~(list "--ignore=tests/unit/test_graphql.py"
10175 ;; XXX: Missing helper script.
10176 "-k" "not test_data_from_helper" "tests/unit")))
10177 (native-inputs
10178 (list python-anyio
10179 python-pytest
10180 python-responses
10181 python-setuptools))
10182 (propagated-inputs (list python-requests python-requests-toolbelt))
10183 (home-page "https://github.com/python-gitlab/python-gitlab")
10184 (synopsis "Interact with GitLab API")
10185 (description "This package provides an extended library for interacting
10186with GitLab instances through their API.")
10187 (license license:lgpl3+)))
10188
10189(define-public python-path-and-address
10190 (package
10191 (name "python-path-and-address")
10192 (version "2.0.1")
10193 (source
10194 (origin
10195 (method git-fetch)
10196 (uri (git-reference
10197 (url "https://github.com/joeyespo/path-and-address")
10198 (commit (string-append "v" version))))
10199 (file-name (git-file-name name version))
10200 (sha256
10201 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
10202 (build-system pyproject-build-system)
10203 (native-inputs
10204 (list python-pytest python-setuptools))
10205 (home-page "https://github.com/joeyespo/path-and-address")
10206 (synopsis "Functions for command-line server tools used by humans")
10207 (description "Path-and-address resolves ambiguities of command-line
10208interfaces, inferring which argument is the path, and which is the address.")
10209 (license license:expat)))
10210
10211;; XXX: This project missed maintainer upstream, see
10212;; <https://github.com/joeyespo/grip/issues/387>.
10213;; Consider to remove if it keeps failing to build.
10214(define-public grip
10215 (package
10216 (name "grip")
10217 (version "4.6.1")
10218 (source
10219 (origin
10220 (method git-fetch)
10221 (uri (git-reference
10222 (url "https://github.com/joeyespo/grip")
10223 (commit (string-append "v" version))))
10224 (file-name (git-file-name name version))
10225 (sha256
10226 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
10227 (build-system pyproject-build-system)
10228 (arguments
10229 (list
10230 #:test-flags
10231 ;; All tests fail requiring network access, ignore the whole file.
10232 #~(list "--ignore=tests/test_github.py")
10233 #:phases
10234 #~(modify-phases %standard-phases
10235 ;; This fixes the removal of `charset` attribute of requests from
10236 ;; Werkzeug 2.3.0.
10237 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
10238 (add-after 'unpack 'fix-response-encoding
10239 (lambda _
10240 (substitute* "grip/app.py"
10241 (("response.charset")
10242 "getattr(response, 'charset', 'utf-8')")))))))
10243 (native-inputs
10244 (list nss-certs-for-test
10245 python-pytest
10246 python-responses
10247 python-setuptools
10248 python-wheel))
10249 (propagated-inputs
10250 (list python-docopt
10251 python-flask
10252 python-markdown
10253 python-path-and-address
10254 python-pygments
10255 python-requests))
10256 (home-page "https://github.com/joeyespo/grip")
10257 (synopsis "Preview Markdown files using the GitHub API")
10258 (description
10259 "Grip is a command-line server application written in Python that uses
10260the GitHub Markdown API to render a local Markdown file. The styles and
10261rendering come directly from GitHub, so you'll know exactly how it will
10262appear. Changes you make to the file will be instantly reflected in the
10263browser without requiring a page refresh.")
10264 (license license:expat)))
10265
10266(define-public python-port-for
10267 (package
10268 (name "python-port-for")
10269 (version "0.7.4")
10270 (source
10271 (origin
10272 (method url-fetch)
10273 (uri (pypi-uri "port_for" version))
10274 (sha256
10275 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
10276 (build-system pyproject-build-system)
10277 (propagated-inputs
10278 (list python-urllib3))
10279 (native-inputs
10280 (list python-pytest python-setuptools python-wheel))
10281 (home-page "https://github.com/kmike/port-for/")
10282 (synopsis "TCP localhost port finder and association manager")
10283 (description
10284 "This package provides a utility that helps with local TCP ports
10285management. It can find an unused TCP localhost port and remember the
10286association.")
10287 (license license:expat)))
10288
10289(define-public python-livereload
10290 (package
10291 (name "python-livereload")
10292 (version "2.7.1")
10293 (source
10294 (origin
10295 (method git-fetch)
10296 (uri (git-reference
10297 (url "https://github.com/lepture/python-livereload")
10298 (commit (string-append "v" version))))
10299 (file-name (git-file-name name version))
10300 (sha256
10301 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
10302 (build-system pyproject-build-system)
10303 (arguments (list #:test-backend #~'unittest))
10304 (native-inputs (list python-django python-setuptools))
10305 (propagated-inputs (list python-tornado))
10306 (home-page "https://github.com/lepture/python-livereload")
10307 (synopsis "Python LiveReload")
10308 (description
10309 "Python LiveReload provides a command line utility, @command{livereload},
10310for starting a web server in a directory. It can trigger arbitrary commands
10311and serve updated contents upon changes to the directory.")
10312 (license license:bsd-3)))
10313
10314(define-public python-vf-1
10315 (package
10316 (name "python-vf-1")
10317 (version "1.0.0")
10318 (source
10319 (origin
10320 (method git-fetch)
10321 (uri (git-reference
10322 (url "https://git.sr.ht/~solderpunk/VF-1")
10323 (commit (string-append "v" version))))
10324 (file-name (git-file-name name version))
10325 (sha256
10326 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
10327 (build-system pyproject-build-system)
10328 (arguments (list #:tests? #f)) ; No tests.
10329 (native-inputs (list python-setuptools))
10330 (home-page "https://git.sr.ht/~solderpunk/VF-1")
10331 (synopsis "Command line gopher client")
10332 (description "@code{VF-1} is a command line gopher client with
10333@acronym{TLS, Transport Layer Security} support.")
10334 (license license:bsd-2)))
10335
10336(define-public python-httpcore
10337 (package
10338 (name "python-httpcore")
10339 (version "1.0.9")
10340 (source
10341 (origin
10342 ;; PyPI tarball does not contain tests.
10343 (method git-fetch)
10344 (uri (git-reference
10345 (url "https://github.com/encode/httpcore")
10346 (commit version)))
10347 (file-name (git-file-name name version))
10348 (sha256
10349 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
10350 (build-system pyproject-build-system)
10351 (native-inputs
10352 (list nss-certs-for-test
10353 python-hatch-fancy-pypi-readme
10354 python-hatchling
10355 python-pytest
10356 python-pytest-asyncio
10357 python-pytest-httpbin
10358 python-pytest-trio
10359 python-uvicorn
10360 python-trustme))
10361 (propagated-inputs
10362 (list python-anyio
10363 python-certifi
10364 python-h11
10365 python-h2
10366 python-sniffio
10367 python-socksio
10368 python-trio
10369 python-trio-typing))
10370 (home-page "https://github.com/encode/httpcore")
10371 (synopsis "Minimal, low-level HTTP client")
10372 (description
10373 "HTTP Core provides a minimal and low-level HTTP client, which does one
10374thing only: send HTTP requests.
10375
10376Some things HTTP Core does do:
10377
10378@itemize
10379@item Sending HTTP requests.
10380@item Provides both sync and async interfaces.
10381@item Supports HTTP/1.1 and HTTP/2.
10382@item Async backend support for asyncio and trio.
10383@item Automatic connection pooling.
10384@item HTTP(S) proxy support.
10385@end itemize")
10386 (license license:bsd-3)))
10387
10388;;; Variant used to break a cycle between python-httpx and python-uvicorn.
10389(define-public python-httpcore-bootstrap
10390 (hidden-package
10391 (package/inherit python-httpcore
10392 (name "python-httpcore-bootstrap")
10393 (arguments (list #:tests? #f))
10394 (native-inputs (list python-hatchling
10395 python-hatch-fancy-pypi-readme)))))
10396
10397(define-public python-httpx
10398 (package
10399 (name "python-httpx")
10400 (version "0.28.1")
10401 (source
10402 (origin
10403 ;; PyPI tarball does not contain tests.
10404 (method git-fetch)
10405 (uri (git-reference
10406 (url "https://github.com/encode/httpx")
10407 (commit version)))
10408 (file-name (git-file-name name version))
10409 (sha256
10410 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
10411 (build-system pyproject-build-system)
10412 (arguments
10413 (list
10414 ;; 1401 passed, 1 skipped, 5 deselected
10415 #:test-flags
10416 #~(list "-o" "asyncio_mode=auto"
10417 ;; CLI tests are broken.
10418 "--ignore=tests/test_main.py"
10419 "-k" (string-join
10420 ;; These tests try to open an outgoing connection.
10421 (list "not test_async_proxy_close"
10422 "test_sync_proxy_clos"
10423 "test_write_timeout")
10424 " and not "))))
10425 (native-inputs
10426 (list nss-certs-for-test
10427 python-chardet
10428 python-cryptography
10429 python-hatch-fancy-pypi-readme
10430 python-hatchling
10431 python-pytest
10432 python-pytest-asyncio
10433 python-pytest-trio
10434 python-setuptools
10435 python-trio
10436 python-trustme
10437 python-uvicorn))
10438 (propagated-inputs
10439 (list python-anyio
10440 python-certifi
10441 python-httpcore
10442 python-idna
10443 ;; [brotli]
10444 python-brotli
10445 ;; [http2]
10446 python-h2
10447 ;; [socks]
10448 python-socksio
10449 ;; [zstd]
10450 python-zstandard
10451 ;; For trio, see:
10452 ;; <https://github.com/python-trio/trio/issues/2802>.
10453 python-sniffio))
10454 (home-page "https://www.python-httpx.org/")
10455 (synopsis "HTTP client for Python")
10456 (description
10457 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
10458and async APIs, and support for both HTTP/1.1 and HTTP/2.
10459
10460HTTPX builds on the well-established usability of requests, and gives you:
10461
10462@itemize
10463@item A broadly requests-compatible API.
10464@item Standard synchronous interface, but with async support if you need it.
10465@item HTTP/1.1 and HTTP/2 support.
10466@item Ability to make requests directly to WSGI applications or ASGI applications.
10467@item Strict timeouts everywhere.
10468@item Fully type annotated.
10469@item 99% test coverage.
10470@end itemize
10471
10472Plus all the standard features of requests:
10473
10474@itemize
10475@item International Domains and URLs
10476@item Keep-Alive & Connection Pooling
10477@item Sessions with Cookie Persistence
10478@item Browser-style SSL Verification
10479@item Basic/Digest Authentication
10480@item Elegant Key/Value Cookies
10481@item Automatic Decompression
10482@item Automatic Content Decoding
10483@item Unicode Response Bodies
10484@item Multipart File Uploads
10485@item HTTP(S) Proxy Support
10486@item Connection Timeouts
10487@item Streaming Downloads
10488@item .netrc Support
10489@item Chunked Requests
10490@end itemize")
10491 (license license:bsd-3)))
10492
10493;;; Variant used to break a cycle with python-uvicorn.
10494(define-public python-httpx-bootstrap
10495 (hidden-package
10496 (package/inherit python-httpx
10497 (name "python-httpx-bootstrap")
10498 (arguments (list #:tests? #f))
10499 (native-inputs
10500 (list python-hatchling
10501 python-hatch-fancy-pypi-readme))
10502 (propagated-inputs
10503 (modify-inputs propagated-inputs
10504 (replace "python-httpcore" python-httpcore-bootstrap))))))
10505
10506(define-public python-httpx-sse
10507 (package
10508 (name "python-httpx-sse")
10509 (version "0.4.3")
10510 (source
10511 (origin
10512 (method git-fetch)
10513 (uri (git-reference
10514 (url "https://github.com/florimondmanca/httpx-sse")
10515 (commit version)))
10516 (file-name (git-file-name name version))
10517 (sha256
10518 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
10519 (build-system pyproject-build-system)
10520 (native-inputs
10521 (list python-pytest
10522 python-pytest-asyncio
10523 python-setuptools
10524 python-setuptools-scm
10525 python-sse-starlette))
10526 (propagated-inputs (list python-httpx))
10527 (home-page "https://github.com/florimondmanca/httpx-sse")
10528 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
10529 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
10530 (license license:expat)))
10531
10532(define-public python-httpx-ws
10533 (package
10534 (name "python-httpx-ws")
10535 (version "0.9.0")
10536 (source
10537 (origin
10538 (method git-fetch)
10539 (uri (git-reference
10540 (url "https://github.com/frankie567/httpx-ws")
10541 (commit (string-append "v" version))))
10542 (file-name (git-file-name name version))
10543 (sha256
10544 (base32 "1hin6fndvfnx3mjgy30x0ghgjalikxavyj24klcknnly9sqzg83v"))))
10545 (build-system pyproject-build-system)
10546 (propagated-inputs
10547 (list python-anyio
10548 python-httpcore
10549 python-httpx
10550 python-wsproto))
10551 (native-inputs
10552 (list nss-certs-for-test
10553 python-hatch-regex-commit
10554 python-hatchling
10555 python-pytest
10556 python-pytest-cov
10557 python-starlette
10558 python-uvicorn))
10559 (home-page "https://github.com/frankie567/httpx-ws")
10560 (synopsis "WebSockets support for HTTPX")
10561 (description "This package provides @code{WebSockets} support for HTTPX.")
10562 (license license:expat)))
10563
10564(define-public python-wsgiprox
10565 (package
10566 (name "python-wsgiprox")
10567 (version "1.5.2")
10568 (source
10569 (origin
10570 (method url-fetch)
10571 (uri (pypi-uri "wsgiprox" version))
10572 (sha256
10573 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
10574 (build-system pyproject-build-system)
10575 (arguments
10576 ;; The test suite hangs (see:
10577 ;; https://github.com/webrecorder/wsgiprox/issues/6).
10578 (list
10579 #:tests? #f
10580 #:phases
10581 #~(modify-phases %standard-phases
10582 (add-after 'unpack 'fix-pytest-argument
10583 (lambda _
10584 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
10585 (substitute* "setup.py"
10586 (("--doctest-module")
10587 "--doctest-modules")))))))
10588 (propagated-inputs
10589 (list python-certauth python-gevent python-websocket-client))
10590 (native-inputs
10591 (list python-mock python-waitress python-setuptools))
10592 (home-page "https://github.com/webrecorder/wsgiprox")
10593 (synopsis "HTTP/S proxy with WebSockets over WSGI")
10594 (description
10595 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
10596middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
10597The library accepts HTTP and HTTPS proxy connections, and routes them to a
10598designated prefix.")
10599 (license license:asl2.0)))
10600
10601(define-public python-warcio
10602 ;; The PyPI release is missing some test support files (see:
10603 ;; https://github.com/webrecorder/warcio/issues/132).
10604 (package
10605 (name "python-warcio")
10606 (version "1.8.1")
10607 (source
10608 (origin
10609 (method git-fetch)
10610 (uri (git-reference
10611 (url "https://github.com/webrecorder/warcio")
10612 (commit (string-append "v" version))))
10613 (file-name (git-file-name name version))
10614 (sha256
10615 (base32
10616 "19wwg7zmx33c942dbahdkng1byiwr4c9cd1ayrsh13f818n17zps"))))
10617 (build-system pyproject-build-system)
10618 (arguments
10619 (list
10620 #:test-flags ; These tests fail due to networking requirements.
10621 '(list "-k" (format #f "not ~a"
10622 (string-join
10623 '("test_post_chunked"
10624 "test_remote"
10625 "test_capture_http_proxy"
10626 "test_capture_https_proxy"
10627 "test_capture_https_proxy_same_session")
10628 " and not "))
10629 ; The following test requires the hookdns package.
10630 "--ignore=test/test_capture_http_proxy.py")))
10631 (native-inputs
10632 (list python-httpbin
10633 python-pytest
10634 python-requests
10635 python-setuptools
10636 python-wsgiprox))
10637 (home-page "https://github.com/webrecorder/warcio")
10638 (synopsis "Streaming web archival archive (WARC) library")
10639 (description "warcio is a Python library to read and write the WARC format
10640commonly used in Web archives. It is designed for fast, low-level access to
10641web archival content, oriented around a stream of WARC records rather than
10642files.")
10643 (license license:asl2.0)))
10644
10645(define-public python-websockets
10646 (package
10647 (name "python-websockets")
10648 (version "13.1")
10649 (source
10650 (origin
10651 (method git-fetch)
10652 (uri (git-reference
10653 (url "https://github.com/aaugustin/websockets")
10654 (commit version)))
10655 (file-name (git-file-name name version))
10656 (sha256
10657 (base32
10658 "1dx3rf6fmg4ir9cfcn1fil446qz879cwrjq2rcz5zvl71xkw6hb3"))))
10659 (build-system pyproject-build-system)
10660 (arguments
10661 (list #:test-backend #~'unittest
10662 #:phases
10663 #~(modify-phases %standard-phases
10664 (add-before 'check 'extend-test-timeout
10665 (lambda _
10666 ;; Some architectures need an even longer timeout. Make it
10667 ;; long enough that it should never fail due to timeout.
10668 #$@(if (target-riscv64?)
10669 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
10670 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
10671 (native-inputs
10672 (list python-setuptools
10673 python-wheel))
10674 (home-page "https://github.com/aaugustin/websockets")
10675 (synopsis
10676 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
10677 (description
10678 "@code{websockets} is a library for building WebSocket servers and clients
10679in Python with a focus on correctness and simplicity.
10680
10681Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
10682it provides an elegant coroutine-based API.")
10683 (license license:bsd-3)))
10684
10685(define-public selenium-manager
10686 (package
10687 (name "selenium-manager")
10688 (version "4.34.2")
10689 (source
10690 (origin
10691 (method git-fetch)
10692 (uri (git-reference
10693 (url "https://github.com/SeleniumHQ/selenium")
10694 (commit (string-append "selenium-" version "-python"))))
10695 (file-name (git-file-name name version))
10696 (sha256
10697 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
10698 (build-system cargo-build-system)
10699 (arguments
10700 (list
10701 ;; XXX: Almost all tests require either browsers or network access.
10702 #:tests? #f
10703 #:install-source? #f ; Most likely intended as a leaf.
10704 #:phases
10705 #~(modify-phases %standard-phases
10706 (add-after 'unpack 'chdir
10707 (lambda _
10708 (chdir "rust"))))))
10709 (native-inputs (list pkg-config))
10710 (inputs (cons* (list zstd "lib") xz
10711 (cargo-inputs 'selenium-manager)))
10712 (home-page "https://www.selenium.dev")
10713 (synopsis "CLI tool to manager the browser test infrastructure")
10714 (description
10715 "Selenium simplifies web browser automation. It specifically provides
10716infrastructure for the W3C WebDriver specification — a platform and
10717language-neutral coding interface compatible with all major web browsers.
10718
10719Selenium Manager is a CLI tool that automatically manages the browser/driver
10720infrastructure required by Selenium.")
10721 (license license:asl2.0)))
10722
10723(define-public python-selenium
10724 (package/inherit selenium-manager
10725 (name "python-selenium")
10726 (build-system pyproject-build-system)
10727 (arguments
10728 (list
10729 ;; XXX: Disable failing tests.
10730 #:test-flags
10731 #~(list "--ignore-glob=test/selenium/webdriver/*"
10732 ;; Probably requires those.
10733 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
10734 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
10735 ;; XXX: SSL certificates access.
10736 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
10737 "-k" "not test_missing_cdp_devtools_version_falls_back")
10738 #:phases
10739 #~(modify-phases %standard-phases
10740 (add-after 'unpack 'chdir
10741 (lambda _
10742 (chdir "py")))
10743 (add-after 'chdir 'inject-selenium-manager-binary
10744 (lambda* (#:key inputs #:allow-other-keys)
10745 (substitute* "selenium/webdriver/common/selenium_manager.py"
10746 (("compiled_path = Path.*")
10747 (format #f "return Path(~s)~%"
10748 (search-input-file inputs "bin/selenium-manager"))))
10749 (substitute* "pyproject.toml"
10750 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
10751 "")
10752 (("target = \"selenium\\.webdriver\\.common.*\"")
10753 ""))))
10754 (add-after 'chdir 'relax-requirements
10755 (lambda _
10756 (substitute* "pyproject.toml"
10757 (("\"(typing_extensions|trio)~=.*\"," _ target)
10758 (format #f "~s," target))))))))
10759 (propagated-inputs (list python-certifi
10760 python-trio
10761 python-trio-websocket
10762 python-typing-extensions
10763 python-urllib3
10764 python-websocket-client))
10765 (inputs (list selenium-manager))
10766 (native-inputs (list python-filetype
10767 python-pytest
10768 python-pytest-mock
10769 python-pytest-trio
10770 python-setuptools
10771 python-setuptools-rust))
10772 (synopsis "Python bindings for Selenium")
10773 (description
10774 "Selenium enables web browser automation. It specifically provides
10775infrastructure for the W3C WebDriver specification — a platform and
10776language-neutral coding interface compatible with all major web browsers.")))
10777
10778(define-public python-rapidjson
10779 (package
10780 (name "python-rapidjson")
10781 (version "1.23")
10782 (source
10783 (origin
10784 (method git-fetch)
10785 (uri (git-reference
10786 (url "https://github.com/python-rapidjson/python-rapidjson")
10787 (commit (string-append "v" version))))
10788 (file-name (git-file-name name version))
10789 (sha256
10790 (base32 "0ajf919gg3qmi68jb0m6v80al2n65cn2ac36qz46s0h6zh92cl86"))
10791 (modules '((guix build utils)))
10792 (snippet
10793 '(delete-file-recursively "rapidjson"))))
10794 (build-system pyproject-build-system)
10795 (arguments
10796 (list
10797 #:test-flags '(list "tests")
10798 #:phases
10799 #~(modify-phases %standard-phases
10800 ;; We cannot seem to use #:configure-flags with the
10801 ;; pyproject-build-system to override rj_include_dir.
10802 (add-after 'unpack 'override-rapidjson-sources
10803 (lambda _
10804 (substitute* "setup.py"
10805 (("^rj_include_dir =.*")
10806 (string-append "rj_include_dir = '"
10807 #$(this-package-native-input "rapidjson")
10808 "/include/rapidjson" "'"))
10809 (("if not os.path.isdir.*") "if False:")))))))
10810 (native-inputs
10811 (list rapidjson python-pytest python-pytz python-setuptools))
10812 (home-page "https://github.com/python-rapidjson/python-rapidjson")
10813 (synopsis "Python wrapper around rapidjson")
10814 (description "This package provides a python wrapper around rapidjson.")
10815 (license license:expat)))
10816
10817(define-public python-venusian
10818 (package
10819 (name "python-venusian")
10820 (version "3.1.1")
10821 (source
10822 (origin
10823 (method url-fetch)
10824 (uri (pypi-uri "venusian" version))
10825 (sha256
10826 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
10827 (build-system pyproject-build-system)
10828 (native-inputs
10829 (list python-pytest
10830 python-setuptools))
10831 (home-page "https://docs.pylonsproject.org/projects/venusian")
10832 (synopsis "Library for deferring decorator actions")
10833 (description
10834 "Venusian is a library which allows framework authors to defer decorator
10835actions. Instead of taking actions when a function (or class) decorator is
10836executed at import time, you can defer the action usually taken by the
10837decorator until a separate scan phase.")
10838 (license license:repoze)))
10839
10840(define-public python-zope-deprecation
10841 (package
10842 (name "python-zope-deprecation")
10843 (version "6.0")
10844 (source (origin
10845 (method url-fetch)
10846 (uri (pypi-uri "zope_deprecation" version))
10847 (sha256
10848 (base32
10849 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
10850 (build-system pyproject-build-system)
10851 (arguments
10852 (list #:tests? #f)) ;no tests in PyPI
10853 (native-inputs
10854 (list python-setuptools))
10855 (home-page "https://zopedeprecation.readthedocs.io/")
10856 (synopsis "Function for marking deprecations")
10857 (description "The @code{zope.deprecation} module provides a function for
10858marking modules, classes, functions, methods and properties as deprecated,
10859displaying warnings when usaged in application code.")
10860 (license license:zpl2.1)))
10861
10862(define-public python-translationstring
10863 (package
10864 (name "python-translationstring")
10865 (version "1.4")
10866 (source (origin
10867 (method url-fetch)
10868 (uri (pypi-uri "translationstring" version))
10869 (sha256
10870 (base32
10871 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
10872 (build-system pyproject-build-system)
10873 (native-inputs
10874 (list python-pytest
10875 python-setuptools))
10876 (home-page "https://docs.pylonsproject.org/projects/translationstring")
10877 (synopsis "Internationalization tooling for the Pylons project")
10878 (description "This package provides a library used by various Pylons
10879project packages for internationalization (i18n) duties related to
10880translation.")
10881 (license license:repoze)))
10882
10883(define-public python-plaster
10884 (package
10885 (name "python-plaster")
10886 (version "1.1.2")
10887 (source (origin
10888 (method url-fetch)
10889 (uri (pypi-uri "plaster" version))
10890 (sha256
10891 (base32
10892 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
10893 (build-system pyproject-build-system)
10894 (native-inputs
10895 (list python-pytest
10896 python-setuptools))
10897 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
10898 (synopsis "Configuration loader for multiple config file formats")
10899 (description
10900 "Plaster is a loader interface around multiple config file formats. It
10901exists to define a common API for applications to use when they wish to load
10902configuration. The library itself does not aim to handle anything except a
10903basic API that applications may use to find and load configuration settings.
10904Any specific constraints should be implemented in a pluggable loader which can
10905be registered via an entrypoint.")
10906 (license license:repoze)))
10907
10908(define-public python-plaster-pastedeploy
10909 (package
10910 (name "python-plaster-pastedeploy")
10911 (version "1.0.1")
10912 (source (origin
10913 (method url-fetch)
10914 (uri (pypi-uri "plaster_pastedeploy" version))
10915 (sha256
10916 (base32
10917 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
10918 (build-system pyproject-build-system)
10919 (native-inputs
10920 (list python-pytest
10921 python-setuptools))
10922 (propagated-inputs
10923 (list python-plaster python-pastedeploy))
10924 (home-page "https://github.com/Pylons/plaster_pastedeploy")
10925 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
10926 (description
10927 "This plugin for @code{python-plaster} adds support for PasteDeploy
10928syntax, it provides a plaster @code{Loader} object that can parse ini files
10929according to the standard set by PasteDeploy")
10930 (license license:expat)))
10931
10932(define-public python-hupper
10933 (package
10934 (name "python-hupper")
10935 (version "1.12.1")
10936 (source
10937 (origin
10938 (method url-fetch)
10939 (uri (pypi-uri "hupper" version))
10940 (sha256
10941 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
10942 (build-system pyproject-build-system)
10943 (arguments
10944 (list
10945 ;; RuntimeError: timeout waiting for change to
10946 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
10947 #:test-flags #~(list "--ignore=tests/test_it.py")))
10948 (native-inputs
10949 (list python-pytest python-setuptools python-wheel))
10950 (propagated-inputs
10951 (list python-watchdog))
10952 (home-page "https://readthedocs.org/projects/hupper")
10953 (synopsis "Integrated process monitor tracking changes to imported Python files")
10954 (description
10955 "Hupper is an integrated process monitor that will track changes to any
10956imported Python files in sys.modules as well as custom paths. When files are
10957changed the process is restarted.")
10958 (license license:expat)))
10959
10960(define-public python-pyowm
10961 (package
10962 (name "python-pyowm")
10963 (version "3.3.0")
10964 (source
10965 (origin
10966 (method git-fetch)
10967 (uri (git-reference
10968 (url "https://github.com/csparpa/pyowm")
10969 (commit version)))
10970 (file-name (git-file-name name version))
10971 (sha256
10972 (base32
10973 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
10974 (build-system pyproject-build-system)
10975 (arguments (list #:test-flags #~(list "tests/unit")))
10976 (native-inputs (list python-pytest python-setuptools python-wheel))
10977 (propagated-inputs
10978 (list python-geojson-for-pyowm
10979 python-pysocks
10980 python-requests))
10981 (home-page "https://github.com/csparpa/pyowm")
10982 (synopsis "Python wrapper around OpenWeatherMap web APIs")
10983 (description
10984 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
10985 (license license:expat)))
10986
10987(define-public python-pyramid
10988 (package
10989 (name "python-pyramid")
10990 (version "2.0.2")
10991 (source (origin
10992 (method url-fetch)
10993 (uri (pypi-uri "pyramid" version))
10994 (sha256
10995 (base32
10996 "1phqdz068hl3zda263qkjp5am8fmvmpcxp3nrhsna8g472kkh89p"))))
10997 (build-system pyproject-build-system)
10998 (propagated-inputs
10999 (list python-hupper
11000 python-plaster
11001 python-plaster-pastedeploy
11002 python-setuptools
11003 python-translationstring
11004 python-venusian
11005 python-webob
11006 python-zope-component
11007 python-zope-deprecation
11008 python-zope-interface))
11009 (native-inputs (list python-pytest python-webtest python-wheel))
11010 (home-page "https://trypyramid.com/")
11011 (synopsis "Python web-framework suitable for small and large sites")
11012 (description
11013 "Pyramid makes it easy to write web applications. From minimal
11014request/response web apps to larger, grown applications.")
11015 (license license:repoze)))
11016
11017(define-public python-pyramid-chameleon
11018 ;; PyPI lacks a fresh release, use the latest commit associated with
11019 ;; unrleased version, see:
11020 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
11021 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
11022 (revision "0"))
11023 (package
11024 (name "python-pyramid-chameleon")
11025 (version (git-version "0.4.dev0" revision commit))
11026 (source
11027 (origin
11028 (method git-fetch)
11029 (uri (git-reference
11030 (url "https://github.com/Pylons/pyramid_chameleon")
11031 (commit commit)))
11032 (file-name (git-file-name name version))
11033 (sha256
11034 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
11035 (build-system pyproject-build-system)
11036 (native-inputs
11037 (list python-pytest
11038 python-setuptools))
11039 (propagated-inputs
11040 (list python-chameleon
11041 python-pyramid))
11042 (home-page "https://github.com/Pylons/pyramid_chameleon")
11043 (synopsis "Chameleon template compiler for pyramid")
11044 (description
11045 "These package provides bindings for the Chameleon templating system
11046 for the Pyramid web framework.")
11047 (license license:repoze))))
11048
11049(define-public python-pyramid-debugtoolbar
11050 (package
11051 (name "python-pyramid-debugtoolbar")
11052 (version "4.12.1")
11053 (source
11054 (origin
11055 (method url-fetch)
11056 (uri (pypi-uri "pyramid_debugtoolbar" version))
11057 (sha256
11058 (base32 "0gdlc7vcga4vzma53h5csnhh4gwfmv3w8v9y5fhwqpy8979qis3i"))))
11059 (build-system pyproject-build-system)
11060 (arguments
11061 (list
11062 #:test-flags
11063 ;; Large diff assertion not equal faileurs.
11064 #~(list #$@(map (lambda (test)
11065 (string-append "--deselect=tests"
11066 "/test_panels/test_sqla.py::" test))
11067 (list "TestSimpleSelect::test_panel"
11068 "TestTransactionCommit::test_panel"
11069 "TestTransactionRollback::test_panel")))))
11070 (native-inputs
11071 (list python-pytest
11072 python-setuptools
11073 python-webtest))
11074 (propagated-inputs
11075 (list python-pyramid
11076 python-pyramid-chameleon
11077 python-pyramid-jinja2
11078 python-pyramid-mako
11079 ;; python-selenium ; see: guix/guix#3478
11080 python-sqlalchemy
11081 python-waitress))
11082 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
11083 (synopsis "Pyramid debug toolbar")
11084 (description
11085 "This package provides an interactive HTML debugger for Pyramid application
11086development.")
11087 (license license:bsd-3)))
11088
11089(define-public python-pyramid-jinja2
11090 (package
11091 (name "python-pyramid-jinja2")
11092 (version "2.10.1")
11093 (source
11094 (origin
11095 (method url-fetch)
11096 (uri (pypi-uri "pyramid_jinja2" version))
11097 (sha256
11098 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
11099 (build-system pyproject-build-system)
11100 (arguments
11101 (list
11102 #:test-flags
11103 ;; Two tests failed with assertion not equal.
11104 #~(list "-k" "not test_it_relative_to_package and not test_options")))
11105 (native-inputs
11106 (list python-pytest
11107 python-setuptools
11108 python-webtest))
11109 (propagated-inputs
11110 (list python-jinja2
11111 python-markupsafe
11112 python-pyramid
11113 python-zope-deprecation))
11114 (home-page "https://github.com/Pylons/pyramid_jinja2")
11115 (synopsis "Jinja2 template bindings for the Pyramid web framework")
11116 (description "This package provides Jinja2 template bindings for the
11117Pyramid web framework.")
11118 (license license:repoze)))
11119
11120(define-public python-pyramid-mako
11121 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
11122 ;; master, us the latest commit for now.
11123 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
11124 (revision "0"))
11125 (package
11126 (name "python-pyramid-mako")
11127 (version (git-version "1.1.0" revision commit))
11128 (source
11129 (origin
11130 (method git-fetch)
11131 (uri (git-reference
11132 (url "https://github.com/Pylons/pyramid_mako")
11133 (commit commit)))
11134 (file-name (git-file-name name version))
11135 (sha256
11136 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
11137 (build-system pyproject-build-system)
11138 (native-inputs
11139 (list python-pytest
11140 python-setuptools))
11141 (propagated-inputs
11142 (list python-mako
11143 python-pyramid))
11144 (home-page "https://github.com/Pylons/pyramid_mako")
11145 (synopsis "Mako template bindings for the Pyramid web framework")
11146 (description
11147 "This package provides Mako template bindings for the Pyramid web
11148framework.")
11149 (license license:repoze))))
11150
11151(define-public python-pyramid-retry
11152 (package
11153 (name "python-pyramid-retry")
11154 (version "2.1.1")
11155 (source
11156 (origin
11157 (method url-fetch)
11158 (uri (pypi-uri "pyramid_retry" version))
11159 (sha256
11160 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
11161 (build-system pyproject-build-system)
11162 (native-inputs
11163 (list python-pytest
11164 python-setuptools
11165 python-webtest))
11166 (propagated-inputs
11167 (list python-pyramid
11168 python-zope-interface))
11169 (home-page "https://github.com/Pylons/pyramid_retry")
11170 (synopsis "Pyramid execution policy supporting retrying failed requests")
11171 (description
11172 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
11173and can retry them a configurable number of times under certain \"retryable\"
11174error conditions before indicating a failure to the client.")
11175 (license license:expat)))
11176
11177(define-public python-pyramid-tm
11178 (package
11179 (name "python-pyramid-tm")
11180 (version "2.6")
11181 (source
11182 (origin
11183 (method url-fetch)
11184 (uri (pypi-uri "pyramid_tm" version))
11185 (sha256
11186 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
11187 (build-system pyproject-build-system)
11188 (native-inputs
11189 (list python-pytest
11190 python-setuptools
11191 python-webtest))
11192 (propagated-inputs
11193 (list python-pyramid
11194 python-transaction))
11195 (home-page "https://github.com/Pylons/pyramid_tm")
11196 (synopsis "Centralized transaction management for Pyramid")
11197 (description
11198 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
11199active @url{https://pypi.org/project/transaction/, transaction} as provided by
11200the Python transaction package.")
11201 (license license:repoze)))
11202
11203(define-public python-random-user-agent
11204 (package
11205 (name "python-random-user-agent")
11206 (version "1.0.1")
11207 (source
11208 (origin
11209 (method url-fetch)
11210 (uri (pypi-uri "random_user_agent" version))
11211 (sha256
11212 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
11213 (build-system pyproject-build-system)
11214 (arguments (list #:tests? #f)) ; No tests.
11215 (native-inputs (list python-setuptools))
11216 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
11217 (synopsis "List of user agents")
11218 (description
11219 "This package provides a list of user agents, from a collection of more
11220than 326,000 known user-agents. Users can pick a random one, or select one
11221based on filters.")
11222 (license license:expat)))
11223
11224(define-public python-rangehttpserver
11225 (package
11226 (name "python-rangehttpserver")
11227 (version "1.4.0")
11228 (source
11229 (origin
11230 (method git-fetch)
11231 (uri (git-reference
11232 (url "https://github.com/danvk/RangeHTTPServer")
11233 (commit version)))
11234 (file-name (git-file-name name version))
11235 (sha256
11236 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
11237 (build-system pyproject-build-system)
11238 (native-inputs
11239 (list python-pytest
11240 python-requests
11241 python-setuptools))
11242 (home-page "https://github.com/danvk/RangeHTTPServer")
11243 (synopsis "SimpleHTTPServer with support for range requests")
11244 (description
11245 "This tool provides a simple HTTP server with support for Range
11246requests.")
11247 (license license:asl2.0)))
11248
11249(define-public python-flask-restx
11250 (package
11251 (name "python-flask-restx")
11252 (version "1.3.0")
11253 (source
11254 (origin
11255 (method git-fetch) ;no tests in PyPI archive
11256 (uri (git-reference
11257 (url "https://github.com/python-restx/flask-restx")
11258 (commit version)))
11259 (file-name (git-file-name name version))
11260 (sha256
11261 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
11262 (build-system pyproject-build-system)
11263 (arguments
11264 (list
11265 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
11266 #:test-flags
11267 #~(list "--benchmark-skip"
11268 ;; ValueError: http://www.google.com is not a valid URL. Domain
11269 ;; does not exists.
11270 "--deselect=tests/test_inputs.py::URLTest::test_check"
11271 "-k" (string-join
11272 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
11273 (list "not test_rfc822_value"
11274 "test_iso8601_value"
11275 ;; assert 404 == 2000
11276 "test_specs_endpoint_host_and_subdomain"
11277 ;; ValueError: [email protected] is not a valid email
11278 "test_valid_value_check")
11279 " and not "))))
11280 (native-inputs
11281 (list python-blinker
11282 python-faker
11283 python-pytest
11284 python-pytest-benchmark
11285 python-pytest-flask
11286 python-pytest-mock
11287 python-setuptools))
11288 (propagated-inputs
11289 (list python-aniso8601
11290 python-flask
11291 python-importlib-resources
11292 python-jsonschema
11293 python-pytz
11294 python-werkzeug))
11295 (home-page "https://github.com/python-restx/flask-restx")
11296 (synopsis
11297 "Framework for fast, easy and documented API development with Flask")
11298 (description
11299 "Flask-RESTX is an extension for Flask that adds support for quickly building
11300REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
11301 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
11302decorators and tools to describe your API and expose its documentation properly using
11303Swagger.")
11304 (license license:bsd-3)))
11305
11306(define-deprecated-package python-flask-restplus
11307 python-flask-restx)
11308
11309(define-public python-flask-socketio
11310 (package
11311 (name "python-flask-socketio")
11312 (version "5.5.1")
11313 (source
11314 (origin
11315 (method url-fetch)
11316 (uri (pypi-uri "flask_socketio" version))
11317 (sha256
11318 (base32
11319 "1i0yqn39b4v4r2whppx47sg7iicvqzssd1clx7cclk07l52cjinr"))))
11320 (build-system pyproject-build-system)
11321 (propagated-inputs
11322 (list python-flask python-socketio))
11323 (native-inputs
11324 (list python-pytest python-redis python-setuptools python-wheel))
11325 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
11326 (synopsis "Socket.IO integration for Flask applications")
11327 (description "Socket.IO integration for Flask applications")
11328 (license license:expat)))
11329
11330(define-public python-manuel
11331 (package
11332 (name "python-manuel")
11333 (version "1.13.0")
11334 (source
11335 (origin
11336 (method url-fetch)
11337 (uri (pypi-uri "manuel" version))
11338 (sha256
11339 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
11340 (build-system pyproject-build-system)
11341 (arguments
11342 (list
11343 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
11344 #:tests? #f))
11345 (propagated-inputs
11346 (list python-setuptools)) ;install requires
11347 (home-page "https://pypi.org/project/manuel/")
11348 (synopsis "Build tested documentation")
11349 (description
11350 "Manuel lets you mix and match traditional doctests with custom test syntax.")
11351 (license license:asl2.0)))
11352
11353(define-public python-marshmallow-jsonapi
11354 (package
11355 (name "python-marshmallow-jsonapi")
11356 (version "0.26.0")
11357 (source
11358 (origin
11359 (method git-fetch)
11360 (uri (git-reference
11361 ;; XXX: Deprecated upstream: This repository has been archived
11362 ;; by the owner on Jun 6, 2024. It is now read-only.
11363 ;; Using a maintained fork. The pypi name of this fork
11364 ;; is marshmallow-jsonapi-minfork.
11365 (url "https://github.com/tadams42/marshmallow-jsonapi")
11366 (commit version)))
11367 (file-name (git-file-name name version))
11368 (sha256
11369 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
11370 (build-system pyproject-build-system)
11371 (native-inputs
11372 (list python-faker
11373 python-flask
11374 python-pytest
11375 python-setuptools))
11376 (propagated-inputs (list python-marshmallow))
11377 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
11378 (synopsis "JSON:API 1.0 formatting with Marshmallow")
11379 (description
11380 "The marshmallow-jsonapi package provides a simple way to produce
11381@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
11382framework. It includes optional utilities to integrate with Flask. This is a
11383forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
11384 (license license:expat)))
11385
11386(define-public python-pecan
11387 (package
11388 (name "python-pecan")
11389 (version "1.8.0")
11390 (source
11391 (origin
11392 (method git-fetch)
11393 (uri (git-reference
11394 (url "https://github.com/pecan/pecan")
11395 (commit version)))
11396 (file-name (git-file-name name version))
11397 (sha256
11398 (base32 "0w693jpnjy358992f3jrrlf31knkqn0jvz2jx0iz7ziikprc61p8"))))
11399 (build-system pyproject-build-system)
11400 (arguments
11401 (list
11402 #:test-flags '(list "--pyargs" "pecan")))
11403 (native-inputs
11404 (list gunicorn
11405 python-genshi
11406 python-jinja2
11407 python-pytest
11408 python-sqlalchemy-2
11409 python-webtest))
11410 (propagated-inputs
11411 (list python-mako
11412 python-webob))
11413 (home-page "http://github.com/pecan/pecan")
11414 (synopsis "WSGI object-dispatching web framework")
11415 (description "This package provides a WSGI object-dispatching web
11416framework, designed to be lean and fast, with few dependencies.")
11417 (license license:bsd-3)))
11418
11419(define-public python-persistent
11420 (package
11421 (name "python-persistent")
11422 (version "6.1.1")
11423 (source
11424 (origin
11425 (method git-fetch)
11426 (uri (git-reference
11427 (url "https://github.com/zopefoundation/persistent/")
11428 (commit version)))
11429 (file-name (git-file-name name version))
11430 (sha256
11431 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
11432 (build-system pyproject-build-system)
11433 (arguments
11434 (list
11435 #:phases
11436 #~(modify-phases %standard-phases
11437 (replace 'check
11438 (lambda* (#:key tests? #:allow-other-keys)
11439 (if tests?
11440 (invoke "zope-testrunner" "--test-path=src"
11441 ;; XXX: Ignore doc tests.
11442 "!persistent.tests.test_docs")
11443 (format #t "test suite not run~%")))))))
11444 (propagated-inputs
11445 (list python-cffi
11446 python-zope-deferredimport
11447 python-zope-interface
11448 python-zope-testrunner))
11449 (native-inputs
11450 (list python-manuel python-zope-testrunner python-setuptools))
11451 (home-page "https://github.com/zopefoundation/persistent/")
11452 (synopsis "Translucent persistent objects")
11453 (description
11454 "This package contains a generic persistence implementation for Python.
11455It forms the core protocol for making objects interact \"transparently\" with
11456a database such as the ZODB.")
11457 (license license:zpl2.1)))
11458
11459(define-public python-btrees
11460 (package
11461 (name "python-btrees")
11462 (version "6.1")
11463 (source
11464 (origin
11465 (method git-fetch)
11466 (uri (git-reference
11467 (url "https://github.com/zopefoundation/BTrees")
11468 (commit version)))
11469 (file-name (git-file-name name version))
11470 (sha256
11471 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
11472 (build-system pyproject-build-system)
11473 (arguments
11474 (list
11475 #:phases
11476 #~(modify-phases %standard-phases
11477 (replace 'check
11478 (lambda* (#:key tests? #:allow-other-keys)
11479 (if tests?
11480 (invoke "zope-testrunner" "--test-path=src")
11481 (format #t "test suite not run~%")))))))
11482 (propagated-inputs (list python-persistent python-zope-interface))
11483 (native-inputs (list python-persistent python-transaction
11484 python-zope-testrunner python-setuptools))
11485 (home-page "https://github.com/zopefoundation/BTrees")
11486 (synopsis "Scalable persistent object containers")
11487 (description
11488 "This package contains a set of persistent object containers built around a
11489modified BTree data structure. The trees are optimized for use inside ZODB's
11490\"optimistic concurrency\" paradigm, and include explicit resolution of
11491conflicts detected by that mechanism.")
11492 (license license:zpl2.1)))
11493
11494(define-public python-transaction
11495 (package
11496 (name "python-transaction")
11497 (version "5.0")
11498 (source
11499 (origin
11500 (method url-fetch)
11501 (uri (pypi-uri "transaction" version))
11502 (sha256
11503 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
11504 (build-system pyproject-build-system)
11505 (native-inputs
11506 (list python-pytest
11507 python-setuptools))
11508 (propagated-inputs
11509 (list python-zope-interface))
11510 (home-page "https://github.com/zopefoundation/transaction")
11511 (synopsis "Transaction management for Python")
11512 (description "This package contains a generic transaction implementation
11513for Python. It is mainly used by the ZODB.")
11514 (license license:zpl2.1)))
11515
11516(define-public python-truststore
11517 (package
11518 (name "python-truststore")
11519 (version "0.10.4")
11520 (source
11521 (origin
11522 (method url-fetch)
11523 (uri (pypi-uri "truststore" version))
11524 (sha256
11525 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
11526 (build-system pyproject-build-system)
11527 (arguments
11528 (list #:tests? #f)) ;all tests require Internet access
11529 (native-inputs
11530 (list python-flit-core))
11531 (home-page "https://github.com/sethmlarson/truststore")
11532 (synopsis "Verify certificates using native system trust stores")
11533 (description
11534 "Truststore is a library which exposes native system certificate stores (ie
11535\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
11536Python applications no longer need to rely on certifi as a root certificate
11537store.")
11538 (license license:expat)))
11539
11540(define-public python-robot-detection
11541 (package
11542 (name "python-robot-detection")
11543 (version "0.4.0")
11544 (source
11545 (origin
11546 (method git-fetch)
11547 (uri (git-reference
11548 (url "https://github.com/rory/robot-detection")
11549 (commit (string-append "v" version))))
11550 (file-name (git-file-name name version))
11551 (sha256
11552 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
11553 (build-system pyproject-build-system)
11554 (arguments (list #:test-backend #~'unittest))
11555 (native-inputs (list python-setuptools))
11556 (propagated-inputs (list python-six))
11557 (home-page "https://github.com/rory/robot-detection")
11558 (synopsis "Detect web crawlers")
11559 (description
11560 "@code{robot_detection} is a python module to detect if a given HTTP User
11561Agent is a web crawler. It uses the list of registered robots from
11562@url{http://www.robotstxt.org}.")
11563 (license license:gpl3+)))
11564
11565(define-public python-robotframework-requests
11566 (package
11567 (name "python-robotframework-requests")
11568 (version "0.9.7")
11569 (source
11570 (origin
11571 (method git-fetch) ; no tests in PyPI release
11572 (uri (git-reference
11573 (url "https://github.com/MarketSquare/robotframework-requests")
11574 (commit (string-append "v" version))))
11575 (file-name (git-file-name name version))
11576 (sha256
11577 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
11578 (build-system pyproject-build-system)
11579 (native-inputs
11580 (list python-pytest
11581 python-setuptools
11582 python-wheel))
11583 (propagated-inputs
11584 (list python-requests
11585 python-robotframework))
11586 (home-page "https://github.com/MarketSquare/robotframework-requests")
11587 (synopsis "Robot Framework keyword library wrapper around requests")
11588 (description
11589 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
11590Framework} library aimed to provide HTTP API testing functionalities by
11591wrapping the @code{requests} Python library.")
11592 (license license:expat)))
11593
11594(define-public python-pysolr
11595 (package
11596 (name "python-pysolr")
11597 (version "3.10.0")
11598 (source
11599 (origin
11600 (method url-fetch)
11601 (uri (pypi-uri "pysolr" version))
11602 (sha256
11603 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
11604 (build-system pyproject-build-system)
11605 (arguments
11606 '(#:tests? #f)) ; Tests require network access.
11607 (native-inputs
11608 (list python-setuptools
11609 python-setuptools-scm
11610 python-wheel))
11611 (propagated-inputs
11612 (list python-requests))
11613 (home-page "https://github.com/django-haystack/pysolr/")
11614 (synopsis "Lightweight python wrapper for Apache Solr")
11615 (description
11616 "This module provides an interface that queries the Apache Solr server
11617using a pure Python implementation.")
11618 (license license:bsd-3)))
11619
11620(define-public python-pyjsparser
11621 ;; XXX: This project is potentially abandonware, consider to remove in next
11622 ;; refresh cycle, see:
11623 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
11624 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
11625 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
11626 (package
11627 (name "python-pyjsparser")
11628 (version "2.7.1")
11629 (source
11630 (origin
11631 (method url-fetch)
11632 (uri (pypi-uri "pyjsparser" version))
11633 (sha256
11634 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
11635 (build-system pyproject-build-system)
11636 (arguments
11637 '(#:tests? #f)) ;no tests in PyPI
11638 (native-inputs (list python-setuptools))
11639 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
11640 (synopsis "Fast JavaScript parser")
11641 (description
11642 "This package provides a fast JavaScript parser (based on esprima.js)")
11643 (license license:expat)))
11644
11645(define-public python-js2py
11646 (package
11647 (name "python-js2py")
11648 (properties '((commit . "2e017b86e2f18a6c8a842293b1687f2ce7baa12e")
11649 (revision . "0")))
11650 (version (git-version "0.74"
11651 (assoc-ref properties 'revision)
11652 (assoc-ref properties 'commit)))
11653 (source
11654 (origin
11655 (method git-fetch)
11656 (uri (git-reference
11657 (url "https://github.com/PiotrDabkowski/Js2Py")
11658 (commit (assoc-ref properties 'commit))))
11659 (file-name (git-file-name name version))
11660 (sha256
11661 (base32 "0rsac03shkm0yxq91hzxdvhb96wy168bxdw8azi25bvlm8s3l27p"))
11662 (patches
11663 (list
11664 (origin
11665 (method url-fetch)
11666 (uri (string-append "https://github.com/PiotrDabkowski/Js2Py/commit"
11667 "/fd7df4a91fb08060914c7b1d9e94583d18f3371b"
11668 ".patch"))
11669 (file-name (string-append name "-" version "-pull-327.patch"))
11670 (sha256
11671 (base32 "14v89v8qqrsq0d63xbilkvx19l1rk59mlrbxvd4sj138lk7160ki")))))))
11672 (build-system pyproject-build-system)
11673 (arguments
11674 (list #:tests? #f)) ; tests require Node
11675 (native-inputs
11676 (list python-setuptools))
11677 (propagated-inputs
11678 (list python-pyjsparser
11679 python-six
11680 python-tzlocal))
11681 (home-page "https://github.com/PiotrDabkowski/Js2Py")
11682 (synopsis "JavaScript to Python translator")
11683 (description
11684 "This package provides a JavaScript to Python translator and a JavaScript
11685interpreter written in pure Python.")
11686 (license license:expat)))
11687
11688(define-public python-http-ece
11689 (package
11690 (name "python-http-ece")
11691 (version "1.2.1")
11692 (source
11693 (origin
11694 (method git-fetch)
11695 (uri (git-reference
11696 (url "https://github.com/web-push-libs/encrypted-content-encoding")
11697 (commit (string-append "v" version))))
11698 (file-name (git-file-name name version))
11699 (sha256
11700 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
11701 (build-system pyproject-build-system)
11702 (arguments
11703 `(#:phases
11704 (modify-phases %standard-phases
11705 (add-after 'unpack 'change-directory
11706 (lambda _ (chdir "python") #t)))))
11707 (native-inputs
11708 (list python-pytest python-setuptools))
11709 (propagated-inputs
11710 (list python-cryptography))
11711 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
11712 (synopsis "Encrypted Content Encoding for HTTP")
11713 (description
11714 "This package provides a simple implementation of Encrypted Content
11715Encoding for HTTP.")
11716 (license license:expat)))
11717
11718(define-public python-cloud-init
11719 (package
11720 (name "python-cloud-init")
11721 (version "24.2")
11722 (source
11723 (origin
11724 (method git-fetch)
11725 (uri (git-reference
11726 (url "https://github.com/canonical/cloud-init")
11727 (commit version)))
11728 (file-name (git-file-name name version))
11729 (sha256
11730 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
11731 (build-system pyproject-build-system)
11732 (arguments
11733 (list
11734 #:test-flags
11735 '(list
11736 ;; This requires usermod
11737 "--ignore=tests/unittests/distros/test_create_users.py"
11738 ;; This writes to /var
11739 "--ignore=tests/unittests/net/test_dhcp.py"
11740 "-k"
11741 (string-append
11742 ;; This test messes with PATH, so it cannot find mkdir
11743 "not test_path_env_gets_set_from_main"
11744 " and not test_apt_configure_sources_list_"
11745 ;; These all fail because /bin/sh doesn't exist. We cannot patch
11746 ;; this because the generated scripts must use /bin/sh as they are
11747 ;; supposed to be run on minimal systems.
11748 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
11749 " and not test_handler_runs_bootcmd_script_with_error"
11750 " and not test_subp_combined_stderr_stdout"
11751 " and not test_handle_part"))
11752 #:phases
11753 #~(modify-phases %standard-phases
11754 (add-after 'unpack 'patch-references
11755 (lambda _
11756 (substitute* "tests/unittests/cmd/test_clean.py"
11757 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
11758 (add-after 'install 'move-files
11759 (lambda* (#:key inputs outputs #:allow-other-keys)
11760 (for-each (lambda (dir)
11761 (let ((source (string-append (site-packages inputs outputs) "/" dir))
11762 (target (string-append #$output "/" (basename dir))))
11763 (copy-recursively source target)
11764 (delete-file-recursively source)))
11765 (list "etc" "lib" "usr/lib" "usr/share")))))))
11766 (propagated-inputs
11767 (list python-configobj
11768 python-jinja2
11769 python-jsonpatch
11770 python-jsonschema
11771 python-netifaces
11772 python-oauthlib
11773 python-pyserial
11774 python-pyyaml
11775 python-responses))
11776 (native-inputs
11777 (list procps ;for ps when running tests
11778 python-pytest
11779 python-pytest-mock
11780 python-passlib
11781 python-setuptools
11782 python-wheel))
11783 (home-page "https://github.com/canonical/cloud-init")
11784 (synopsis "Cloud instance initialization tools")
11785 (description
11786 "Cloud-init is the multi-distribution method for cross-platform cloud
11787instance initialization. It is supported across all major public cloud
11788providers, provisioning systems for private cloud infrastructure, and
11789bare-metal installations.")
11790 ;; Either license can be chosen
11791 (license (list license:asl2.0 license:gpl3))))
11792
11793(define-public python-cloudscraper
11794 (package
11795 (name "python-cloudscraper")
11796 (version "3.0.0")
11797 (source
11798 (origin
11799 (method git-fetch)
11800 (uri (git-reference
11801 (url "https://github.com/VeNoMouS/cloudscraper")
11802 (commit version)))
11803 (file-name (git-file-name name version))
11804 (sha256
11805 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
11806 (modules '((guix build utils)))
11807 (snippet
11808 '(with-directory-excursion "cloudscraper"
11809 (for-each delete-file
11810 '("captcha/9kw.py" "captcha/anticaptcha.py"))
11811 (substitute* "__init__.py"
11812 ;; Perhaps it's a joke, but don't promote proprietary software.
11813 (("([Th]is feature is not available) in the .*'" _ prefix)
11814 (string-append prefix ".'")))))))
11815 (build-system pyproject-build-system)
11816 (arguments
11817 (list
11818 #:test-flags
11819 #~(list "-k" "not test_403_handling")
11820 #:phases
11821 #~(modify-phases %standard-phases
11822 (add-after 'unpack 'relax-requirements
11823 (lambda _
11824 ;; XXX: Relax brotli dependency.
11825 (substitute* "pyproject.toml"
11826 (("\"brotli>=.*\"")
11827 "\"brotli\""))
11828 ;; XXX: Dependencies, that have not yet been packaged
11829 ;; and cause an import error when included.
11830 (delete-file "cloudscraper/interpreters/v8.py")))
11831 (add-after 'unpack 'fix-references
11832 (lambda _
11833 (substitute* "cloudscraper/interpreters/nodejs.py"
11834 (("'node'")
11835 (string-append "'" (which "node") "'"))))))))
11836 (inputs (list node-lts))
11837 (propagated-inputs
11838 (list python-pycryptodome
11839 python-brotli
11840 python-js2py
11841 python-polling2
11842 python-requests
11843 python-requests-toolbelt
11844 python-responses
11845 python-pyparsing
11846 python-websocket-client))
11847 (native-inputs (list python-pytest python-setuptools))
11848 (home-page "https://github.com/venomous/cloudscraper")
11849 (synopsis "Cloudflare anti-bot bypass")
11850 (description
11851 "This module acts as a webbrowser solving Cloudflare's Javascript
11852challenges.")
11853 (license license:expat)))
11854
11855(define-public python-imap-tools
11856 (package
11857 (name "python-imap-tools")
11858 (version "1.9.0")
11859 (source
11860 (origin
11861 (method git-fetch) ; no tests in PyPI release
11862 (uri (git-reference
11863 (url "https://github.com/ikvk/imap_tools")
11864 (commit (string-append "v" version))))
11865 (file-name (git-file-name name version))
11866 (sha256
11867 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
11868 (arguments
11869 (list
11870 #:test-flags
11871 ;; Tests require a network connection
11872 #~(list "-k" (string-append "not test_action"
11873 " and not test_attributes"
11874 " and not test_connection"
11875 " and not test_folders"
11876 " and not test_idle"
11877 " and not test_live"))))
11878 (build-system pyproject-build-system)
11879 (native-inputs
11880 (list python-pytest python-setuptools python-wheel))
11881 (home-page "https://github.com/ikvk/imap_tools")
11882 (synopsis "Work with email and mailbox by IMAP")
11883 (description
11884 "This Python library provides tools to deal with email and mailboxes
11885over IMAP:
11886
11887@itemize
11888@item Parsed email message attributes
11889@item Query builder for searching emails
11890@item Work with emails in folders (copy, delete, flag, move, seen)
11891@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
11892@end itemize")
11893 (license license:asl2.0)))
11894
11895(define-public python-giturlparse
11896 (package
11897 (name "python-giturlparse")
11898 (version "0.12.0")
11899 (source
11900 (origin
11901 (method git-fetch)
11902 (uri (git-reference
11903 (url "https://github.com/nephila/giturlparse")
11904 (commit version)))
11905 (file-name (git-file-name name version))
11906 (sha256
11907 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
11908 (build-system pyproject-build-system)
11909 (native-inputs (list python-pytest python-setuptools))
11910 (home-page "https://github.com/nephila/giturlparse")
11911 (synopsis "Git URL parsing module")
11912 (description
11913 "This package provides a git URL parsing module which supports parsing
11914and rewriting of remote git URLs from various hosting providers.")
11915 (license license:asl2.0)))
11916
11917(define-public python-hstspreload
11918 (package
11919 (name "python-hstspreload")
11920 (version "2025.1.1")
11921 (source
11922 (origin
11923 (method git-fetch)
11924 (uri (git-reference
11925 (url "https://github.com/sethmlarson/hstspreload")
11926 (commit version)))
11927 (file-name (git-file-name name version))
11928 (sha256
11929 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
11930 (build-system pyproject-build-system)
11931 (arguments (list #:tests? #f)) ; tests require external resources.
11932 (native-inputs (list python-setuptools))
11933 (home-page "https://github.com/sethmlarson/hstspreload")
11934 (synopsis "Chromium HSTS Preload list as a Python package")
11935 (description
11936 "@code{python-hstspreload} contains Chromium HSTS Preload list
11937as a Python package.")
11938 (license license:bsd-3)))
11939
11940(define-public python-sanic-routing
11941 (package
11942 (name "python-sanic-routing")
11943 (version "23.12.0")
11944 (source
11945 (origin
11946 (method url-fetch)
11947 (uri (pypi-uri "sanic-routing" version))
11948 (sha256
11949 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
11950 (build-system pyproject-build-system)
11951 (arguments
11952 ;; PyPi sources does not contain tests, recursive dependency on
11953 ;; python-sanic.
11954 (list #:tests? #f))
11955 (native-inputs (list python-setuptools python-wheel))
11956 (home-page "https://github.com/sanic-org/sanic-routing/")
11957 (synopsis "Routing component for Sanic")
11958 (description "Internal package for @code{python-sanic}, which provides
11959the @code{BasicRouter}.")
11960 (license license:expat)))
11961
11962(define-public python-sanic-testing
11963 (package
11964 (name "python-sanic-testing")
11965 (version "23.12.0")
11966 (source
11967 (origin
11968 (method url-fetch)
11969 (uri (pypi-uri "sanic-testing" version))
11970 (sha256
11971 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
11972 (build-system pyproject-build-system)
11973 (arguments
11974 ;; PyPi sources does not contain tests, recursive dependency on
11975 ;; python-sanic.
11976 (list #:tests? #f))
11977 (propagated-inputs (list python-httpx python-sanic-bootstrap))
11978 (native-inputs (list python-setuptools python-wheel))
11979 (home-page "https://github.com/sanic-org/sanic-testing/")
11980 (synopsis "Test clients for Sanic")
11981 (description "Internal package for @code{python-sanic}, which is
11982meant to be the core testing utility and clients for testing Sanic
11983applications.")
11984 (license license:expat)))
11985
11986(define-public python-sanic
11987 (package
11988 (name "python-sanic")
11989 (version "25.3.0")
11990 (source
11991 (origin
11992 (method url-fetch)
11993 (uri (pypi-uri "sanic" version))
11994 (sha256
11995 (base32 "1fv9wgsj54scbr7qhmwdgc4zqnqpwacpakcfxhsg10gc04h54pbp"))
11996 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
11997 (modules '((guix build utils)))
11998 (snippet #~(substitute* "setup.py"
11999 (("setuptools>=[0-9.]*")
12000 "setuptools")))))
12001 (build-system pyproject-build-system)
12002 (arguments
12003 (list
12004 #:test-flags
12005 #~(list "--asyncio-mode=auto"
12006 "--ignore=tests/benchmark/"
12007 "--ignore=tests/typing/test_typing.py"
12008 ;; Most tests hang or fail
12009 "--ignore=tests/test_cli.py"
12010 "--ignore=tests/worker/test_worker_serve.py"
12011 "-k"
12012 (string-append
12013 ;; PyPi sources lack examples module.
12014 "not test_gunicorn_"
12015 ;; Does not expect brotli and reordered headers.
12016 " and not test_raw_headers"
12017 ;; These look like buggy testcases.
12018 " and not test_zero_downtime"
12019 " and not test_non_default_uvloop_config_raises_warning"
12020 " and not test_listeners_triggered"
12021 " and not test_keep_alive_connection_context"
12022 " and not test_keep_alive_client_timeout"
12023 " and not test_conflicting_body_methods_overload"
12024 " and not test_unix_connection"
12025 ;; Unclear why they fail since core-updates merge.
12026 " and not test_missing_sni"
12027 " and not test_no_matching_cert"
12028 " and not test_wildcards"
12029 ;; These tests fail because subprotocols appear to be
12030 ;; parameterized as None
12031 " and not test_websocket_route_with_subprotocols"
12032 ;; AF_UNIX path too long
12033 " and not test_setup_and_teardown_unix"
12034 " and not test_configure_socket"
12035 ;; Freezes
12036 " and not test_server_run_with_repl"
12037 " and not test_server_run"
12038 " and not test_no_workers"))))
12039 (propagated-inputs
12040 (list python-aiofiles
12041 python-aioquic
12042 python-html5tagger
12043 python-httptools
12044 python-multidict
12045 python-sanic-routing
12046 python-tracerite
12047 python-typing-extensions
12048 python-ujson
12049 python-uvloop
12050 python-websockets))
12051 (native-inputs
12052 (list python-beautifulsoup4
12053 python-chardet
12054 python-cryptography
12055 python-docutils
12056 python-mypy
12057 python-pygments
12058 python-pytest
12059 python-pytest-asyncio
12060 python-pytest-benchmark
12061 python-pytest-sanic
12062 python-sanic-testing
12063 python-setuptools
12064 python-slotscheck
12065 python-towncrier
12066 python-types-ujson
12067 python-uvicorn
12068 python-wheel))
12069 (home-page "https://github.com/sanic-org/sanic/")
12070 (synopsis "Async Python web server/framework")
12071 (description
12072 "Sanic is a Python web server and web framework that's written to go
12073fast. It allows the usage of the @code{async/await} syntax added in Python
120743.5, which makes your code non-blocking and speedy.")
12075 (license license:expat)))
12076
12077(define-public python-sanic-bootstrap
12078 (package
12079 (inherit python-sanic)
12080 (name "python-sanic-bootstrap")
12081 (arguments (list #:tests? #f))
12082 (native-inputs (list python-setuptools python-wheel))))
12083
12084(define-public python-socketio
12085 (package
12086 (name "python-socketio")
12087 (version "5.12.1")
12088 (source
12089 (origin
12090 (method url-fetch)
12091 (uri (pypi-uri "python_socketio" version))
12092 (sha256
12093 (base32
12094 "175sd3fdld3s477i6b3v49yhf1alsbm1vaxzq44nqrqb8wgzz682"))))
12095 (build-system pyproject-build-system)
12096 (arguments
12097 (list #:test-flags
12098 '(list "--timeout=60"
12099 ;; These tests freeze.
12100 "--ignore-glob=tests/async/*")))
12101 (propagated-inputs
12102 (list python-bidict python-engineio python-msgpack))
12103 (native-inputs
12104 (list python-pytest
12105 python-pytest-asyncio
12106 python-pytest-timeout
12107 python-setuptools
12108 python-uvicorn
12109 python-wheel))
12110 (home-page "https://github.com/miguelgrinberg/python-socketio/")
12111 (synopsis "Python Socket.IO server")
12112 (description
12113 "This package provides a Python implementation of the @code{Socket.IO}
12114realtime client and server.")
12115 (license license:expat)))
12116
12117(define-public python-socks
12118 (package
12119 (name "python-socks")
12120 (version "2.7.2")
12121 (source
12122 (origin
12123 (method git-fetch)
12124 (uri (git-reference
12125 (url "https://github.com/romis2012/python-socks")
12126 (commit (string-append "v" version))))
12127 (file-name (git-file-name name version))
12128 (sha256
12129 (base32 "1alrfjkir69006qmr2ax3inrffk2bllpljwmprwczb44r0mya77m"))))
12130 (build-system pyproject-build-system)
12131 (propagated-inputs (list python-trio))
12132 (native-inputs
12133 (list python-anyio
12134 python-async-timeout
12135 python-flask
12136 python-pytest
12137 python-pytest-asyncio
12138 python-pytest-trio
12139 python-setuptools
12140 python-tiny-proxy
12141 python-trustme
12142 python-yarl))
12143 (home-page "https://github.com/romis2012/python-socks")
12144 (synopsis
12145 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
12146 (description
12147 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
12148 functionality.")
12149 (license license:asl2.0)))
12150
12151(define-public python-socksio
12152 (package
12153 (name "python-socksio")
12154 (version "1.0.0")
12155 (source
12156 (origin
12157 (method url-fetch)
12158 (uri (pypi-uri "socksio" version))
12159 (sha256
12160 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
12161 (build-system pyproject-build-system)
12162 (native-inputs
12163 (list python-flit-core python-pytest))
12164 (home-page "https://github.com/sethmlarson/socksio")
12165 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
12166 (description "The @code{socksio} Python module is a client-side sans-I/O
12167SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
12168@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
12169means the library itself does not handle the actual sending of the bytes
12170through the network, it only deals with the implementation details of the
12171SOCKS protocols. It can be paired with any I/O library.")
12172 (license license:expat)))
12173
12174(define-public python-simple-websocket
12175 (package
12176 (name "python-simple-websocket")
12177 (version "1.1.0")
12178 (source
12179 (origin
12180 (method url-fetch)
12181 (uri (pypi-uri "simple_websocket" version))
12182 (sha256
12183 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
12184 (build-system pyproject-build-system)
12185 (arguments
12186 ;; Requires Internet access to resolve example.com
12187 (list #:test-flags '(list "--ignore=tests/test_client.py")))
12188 (propagated-inputs (list python-wsproto))
12189 (native-inputs (list python-pytest
12190 python-setuptools))
12191 (home-page "https://github.com/miguelgrinberg/simple-websocket")
12192 (synopsis "Simple WebSocket server and client for Python")
12193 (description "This package provides a simple @code{WebSocket} server and
12194client for Python.")
12195 (license license:expat)))
12196
12197(define-public python-siosocks
12198 (package
12199 (name "python-siosocks")
12200 (version "0.3.0")
12201 (source
12202 (origin
12203 (method git-fetch)
12204 (uri (git-reference
12205 (url "https://github.com/pohmelie/siosocks")
12206 (commit (string-append "v" version))))
12207 (file-name (git-file-name name version))
12208 (sha256
12209 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
12210 (build-system pyproject-build-system)
12211 (native-inputs
12212 (list python-pytest
12213 python-pytest-asyncio
12214 python-pytest-trio
12215 python-setuptools))
12216 (propagated-inputs (list python-trio))
12217 (home-page "https://github.com/pohmelie/siosocks")
12218 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
12219 (description
12220 "This package provides a Python module and framework for sans-io socks proxy
12221client/server with couple io backends.
12222
12223Features:
12224@itemize
12225@item Only TCP connect (no BIND, no UDP)
12226@item Both client and server
12227@item SOCKS versions: 4, 4a, 5
12228@item SOCKSv5 auth: no auth, username/password
12229@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
12230@item One-shot socks server (@code{python -m siosocks})
12231@end itemize")
12232 (license license:expat)))
12233
12234(define-public python-tiny-proxy
12235 (package
12236 (name "python-tiny-proxy")
12237 (version "0.2.1")
12238 (source
12239 (origin
12240 (method url-fetch)
12241 (uri (pypi-uri "tiny_proxy" version))
12242 (sha256
12243 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
12244 (build-system pyproject-build-system)
12245 ;; There are only a handful of tests and they require the as yet
12246 ;; unpackaged httpx_socks.
12247 (arguments (list #:tests? #false))
12248 (propagated-inputs (list python-anyio))
12249 (native-inputs
12250 (list python-httpx
12251 python-pytest
12252 python-setuptools
12253 python-wheel))
12254 (home-page "https://github.com/romis2012/tiny-proxy")
12255 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
12256 (description "This package provides a simple proxy server (SOCKS4(a),
12257SOCKS5(h), HTTP tunnel).")
12258 (license license:asl2.0)))
12259
12260(define-public python-azure-nspkg
12261 (package
12262 (name "python-azure-nspkg")
12263 (version "3.0.2")
12264 (source
12265 (origin
12266 (method url-fetch)
12267 (uri (pypi-uri "azure-nspkg" version ".zip"))
12268 (sha256
12269 (base32
12270 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
12271 (build-system pyproject-build-system)
12272 (arguments (list #:tests? #f)) ;no tests in package
12273 (native-inputs (list unzip python-setuptools))
12274 (home-page "https://github.com/Azure/azure-sdk-for-python")
12275 (synopsis "Azure namespace internals")
12276 (description
12277 "This package is an internal Azure namespace package.")
12278 (license license:expat)))
12279
12280(define-public python-azure-storage-nspkg
12281 (package
12282 (name "python-azure-storage-nspkg")
12283 (version "3.1.0")
12284 (source
12285 (origin
12286 (method url-fetch)
12287 (uri (pypi-uri "azure-storage-nspkg" version))
12288 (sha256
12289 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
12290 (build-system pyproject-build-system)
12291 (arguments
12292 (list #:tests? #f)) ;no tests in PyPI archive
12293 (native-inputs (list python-setuptools))
12294 (propagated-inputs (list python-azure-nspkg))
12295 (home-page "https://github.com/Azure/azure-storage-python")
12296 (synopsis "Microsoft Azure Storage Namespace package")
12297 (description
12298 "This project provides a client library in Python that makes it easy to
12299communicate with Microsoft Azure Storage services.")
12300 (license license:expat)))
12301
12302(define-public python-azure-common
12303 (package
12304 (name "python-azure-common")
12305 (version "1.1.28")
12306 (source
12307 (origin
12308 (method url-fetch)
12309 (uri (pypi-uri "azure-common" version ".zip"))
12310 (sha256
12311 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
12312 (build-system pyproject-build-system)
12313 (arguments
12314 (list #:tests? #f)) ;no tests in PyPI archive
12315 (propagated-inputs (list python-azure-nspkg))
12316 (native-inputs (list python-setuptools unzip))
12317 (home-page "https://github.com/Azure/azure-sdk-for-python")
12318 (synopsis "Microsoft Azure Client library for Python")
12319 (description "This package provides the Microsoft Azure Client library for
12320Python.")
12321 (license license:expat)))
12322
12323(define-public python-azure-core
12324 (package
12325 (name "python-azure-core")
12326 (version "1.32.0")
12327 (source
12328 (origin
12329 (method url-fetch)
12330 (uri (pypi-uri "azure_core" version))
12331 (sha256
12332 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
12333 (build-system pyproject-build-system)
12334 (arguments
12335 (list
12336 #:test-flags
12337 `(list ;; This fails because devtools_testutils doesn't exist.
12338 "--ignore=tests/test_connection_string_parsing.py"
12339 ;; These all need network access.
12340 "--ignore=samples"
12341 "--ignore=tests/async_tests/test_streaming_async.py"
12342 "--ignore=tests/test_streaming.py"
12343 "-m" "not asyncio and not live_test_only"
12344 "-k" ,(string-append
12345 "not test_decompress_plain_no_header"
12346 " and not test_compress_plain_no_header"
12347 " and not test_decompress_compressed_no_header"
12348 " and not test_requests_socket_timeout"))
12349 #:phases
12350 #~(modify-phases %standard-phases
12351 (add-before 'check 'add-test-pythonpath
12352 (lambda* (#:key tests? #:allow-other-keys)
12353 (when tests?
12354 (setenv "PYTHONPATH"
12355 (string-append
12356 (getcwd) "/tests/testserver_tests/coretestserver:"
12357 (getenv "GUIX_PYTHONPATH")))))))))
12358 (propagated-inputs
12359 (list python-aiohttp
12360 python-requests
12361 python-six
12362 python-typing-extensions))
12363 (native-inputs
12364 (list python-flask
12365 python-pytest-8
12366 python-pytest-aiohttp
12367 python-pytest-asyncio
12368 python-pytest-trio
12369 python-setuptools
12370 python-wheel))
12371 (home-page "https://github.com/Azure/azure-sdk-for-python")
12372 (synopsis "Microsoft Azure Core library for Python")
12373 (description "This package provides the Microsoft Azure Core library for
12374Python.")
12375 (license license:expat)))
12376
12377(define-public python-azure-storage-blob
12378 (package
12379 (name "python-azure-storage-blob")
12380 (version "12.27.0")
12381 (source
12382 (origin
12383 (method url-fetch)
12384 (uri (pypi-uri "azure_storage_blob" version))
12385 (sha256
12386 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
12387 (build-system pyproject-build-system)
12388 (arguments
12389 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12390 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12391 ;; it hard to package in Guix.
12392 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12393 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12394 (list #:tests? #f))
12395 (native-inputs
12396 (list python-setuptools))
12397 (propagated-inputs
12398 (list python-azure-core
12399 python-cryptography
12400 python-isodate
12401 python-typing-extensions))
12402 (home-page "https://github.com/Azure/azure-sdk-for-python/")
12403 (synopsis "Microsoft Azure Blob Storage client library for Python")
12404 (description "This package provides the Microsoft Azure Blob Storage
12405Client Library for Python.")
12406 (license license:expat)))
12407
12408(define-public python-azure-storage-file-datalake
12409 (package
12410 (name "python-azure-storage-file-datalake")
12411 (version "12.22.0")
12412 (source
12413 (origin
12414 (method url-fetch)
12415 (uri (pypi-uri "azure_storage_file_datalake" version))
12416 (sha256
12417 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
12418 (build-system pyproject-build-system)
12419 (arguments
12420 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12421 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12422 ;; it hard to package in Guix.
12423 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12424 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12425 (list #:tests? #f))
12426 (native-inputs
12427 (list python-setuptools))
12428 (propagated-inputs
12429 (list python-azure-core
12430 python-azure-storage-blob
12431 python-isodate
12432 python-typing-extensions))
12433 (home-page "https://github.com/Azure/azure-sdk-for-python")
12434 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
12435 (description
12436 "This package provides the Microsoft Azure File @code{DataLake} Storage
12437Client Library for Python.")
12438 (license license:expat)))
12439
12440(define-public python-google-auth
12441 (package
12442 (name "python-google-auth")
12443 (version "2.48.0")
12444 (source
12445 (origin
12446 (method url-fetch)
12447 (uri (pypi-uri "google_auth" version))
12448 (sha256
12449 (base32 "1kj1r3vp2jk2wv1mc0a5lpdnsivsqciah68ajhyql86k1imp0zjg"))))
12450 (build-system pyproject-build-system)
12451 (arguments
12452 (list
12453 #:test-flags
12454 ;; This one test uses crypto.sign with an outdated calling convention.
12455 '(list "--ignore=tests/transport/test__mtls_helper.py")))
12456 (propagated-inputs
12457 (list python-aiohttp
12458 python-cryptography
12459 python-pyasn1-modules
12460 python-requests
12461 python-rsa
12462 python-urllib3))
12463 (native-inputs
12464 (list nss-certs-for-test
12465 python-aiohttp
12466 python-aioresponses
12467 python-flask
12468 python-freezegun
12469 python-grpcio
12470 python-oauth2client
12471 python-packaging
12472 python-pyjwt
12473 python-pyopenssl
12474 python-pytest
12475 python-pytest-asyncio
12476 python-pytest-localserver
12477 python-pyu2f
12478 python-requests
12479 python-responses
12480 python-rsa
12481 python-setuptools
12482 python-urllib3))
12483 (home-page "https://github.com/googleapis/google-auth-library-python")
12484 (synopsis "Google Authentication Library")
12485 (description "This library simplifies using Google's various
12486server-to-server authentication mechanisms to access Google APIs.")
12487 (license license:asl2.0)))
12488
12489(define-public python-google-resumable-media
12490 (package
12491 (name "python-google-resumable-media")
12492 (version "2.8.0")
12493 (source
12494 (origin
12495 (method git-fetch)
12496 (uri (git-reference
12497 (url
12498 "https://github.com/googleapis/google-resumable-media-python")
12499 (commit (string-append "v" version))))
12500 (file-name (git-file-name name version))
12501 (sha256
12502 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
12503 (build-system pyproject-build-system)
12504 (arguments
12505 (list
12506 #:test-flags
12507 #~(list
12508 ;; XXX: Missing test_utils.retry.
12509 "--ignore-glob=tests*/system/"
12510 ;; XXX: md5_hash is not mock.sentinel.md5_hash
12511 "-k" (string-join
12512 (list "not test_brotli"
12513 "test_constructor"
12514 "test_decompress")
12515 " and not "))))
12516 (propagated-inputs (list python-google-crc32c))
12517 (native-inputs
12518 (list python-google-auth
12519 python-mock
12520 python-pytest
12521 python-pytest-asyncio
12522 python-setuptools
12523 python-test-utils))
12524 (home-page "https://github.com/googleapis/google-resumable-media-python")
12525 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
12526 (description "This package provides utilities for Google Media Downloads
12527and Resumable Uploads.")
12528 (license license:asl2.0)))
12529
12530(define-public python-googleapis-common-protos
12531 (package
12532 (name "python-googleapis-common-protos")
12533 (version "1.66.0")
12534 (source
12535 (origin
12536 (method git-fetch)
12537 (uri (git-reference
12538 (url "https://github.com/googleapis/python-api-common-protos")
12539 (commit (string-append "v" version))))
12540 (file-name (git-file-name name version))
12541 (sha256
12542 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
12543 (build-system pyproject-build-system)
12544 (propagated-inputs (list python-protobuf))
12545 (native-inputs (list python-pytest python-setuptools))
12546 (home-page "https://github.com/googleapis/python-api-common-protos")
12547 (synopsis "Common protobufs used in Google APIs")
12548 (description
12549 "This package contains Python classes generated from the common protos in
12550the @code{googleapis/api-common-protos} repository.")
12551 (license license:asl2.0)))
12552
12553(define-public python-google-api-core
12554 (package
12555 (name "python-google-api-core")
12556 (version "2.29.0")
12557 (source
12558 (origin
12559 (method git-fetch)
12560 (uri (git-reference
12561 (url "https://github.com/googleapis/python-api-core")
12562 (commit (string-append "v" version))))
12563 (file-name (git-file-name name version))
12564 (sha256
12565 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
12566 (build-system pyproject-build-system)
12567 (arguments
12568 (list
12569 #:test-flags
12570 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
12571 ;; deprecated and scheduled for removal in a future version. Use
12572 ;; timezone-aware objects to represent datetimes in UTC:
12573 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
12574 #~(list "-W" "ignore::DeprecationWarning")))
12575 (propagated-inputs
12576 (list python-google-auth
12577 python-googleapis-common-protos
12578 python-protobuf
12579 python-proto-plus
12580 python-requests))
12581 (native-inputs
12582 (list python-mock
12583 python-pytest
12584 python-pytest-asyncio
12585 python-pytest-mock
12586 python-setuptools))
12587 (home-page "https://github.com/googleapis/python-api-core")
12588 (synopsis "Google API client core library")
12589 (description
12590 "This library defines common helpers used by all Google API clients.")
12591 (license license:asl2.0)))
12592
12593(define-public python-google-cloud-core
12594 (package
12595 (name "python-google-cloud-core")
12596 (version "2.5.0")
12597 (source
12598 (origin
12599 (method git-fetch)
12600 (uri (git-reference
12601 (url "https://github.com/googleapis/python-cloud-core")
12602 (commit (string-append "v" version))))
12603 (file-name (git-file-name name version))
12604 (sha256
12605 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
12606 (build-system pyproject-build-system)
12607 (arguments
12608 (list
12609 #:test-flags
12610 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
12611 ;; deprecated and scheduled for removal in a future version. Use
12612 ;; timezone-aware objects to represent datetimes in UTC:
12613 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
12614 #~(list "-W" "ignore::DeprecationWarning")))
12615 (propagated-inputs (list python-google-api-core python-google-auth))
12616 (native-inputs
12617 (list python-grpcio
12618 python-grpcio-status
12619 python-pytest
12620 python-setuptools))
12621 (home-page "https://github.com/googleapis/python-cloud-core")
12622 (synopsis "Google Cloud API client core library")
12623 (description
12624 "This library defines common helpers (e.g. base @code{Client} classes)
12625used by all of the @code{google-cloud-*} packages.")
12626 (license license:asl2.0)))
12627
12628(define-public python-google-cloud-storage
12629 (package
12630 (name "python-google-cloud-storage")
12631 (version "2.19.0")
12632 (source
12633 (origin
12634 (method git-fetch)
12635 (uri (git-reference
12636 (url "https://github.com/googleapis/python-storage")
12637 (commit (string-append "v" version))))
12638 (file-name (git-file-name name version))
12639 (sha256
12640 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
12641 (build-system pyproject-build-system)
12642 (arguments
12643 (list
12644 #:test-flags
12645 #~(list
12646 ;; XXX: Missing test_utils.retry.
12647 "--ignore=tests/system/"
12648 ;; Needs docker.
12649 "--ignore=tests/conformance/"
12650 ;; XXX: Deprecations.
12651 "-k" (string-join
12652 (list "not test_set_api_request_attr"
12653 "test_create_bucket_w_custom_endpoint"
12654 "test_ctor_w_api_endpoint_override"
12655 "test_ctor_w_custom_endpoint_use_auth"
12656 "test_list_buckets_w_custom_endpoint")
12657 " and not ")
12658 "tests")))
12659 (native-inputs
12660 (list python-googleapis-common-protos
12661 python-mock
12662 python-pytest
12663 python-test-utils
12664 python-setuptools))
12665 (propagated-inputs
12666 (list python-google-api-core
12667 python-google-auth
12668 python-google-cloud-core
12669 python-google-resumable-media
12670 python-protobuf
12671 python-requests))
12672 (home-page "https://github.com/googleapis/python-storage")
12673 (synopsis "Google Cloud Storage API client library")
12674 (description
12675 "Google Cloud Storage allows you to store data on Google infrastructure,
12676and it can be used to distribute large data objects to users via direct
12677download. This package provides a Google Cloud Storage API client library for
12678Python.")
12679 (license license:asl2.0)))
12680
12681(define-public python-smart-open
12682 (package
12683 (name "python-smart-open")
12684 (version "7.3.0")
12685 (source
12686 (origin
12687 (method git-fetch) ;no tests in PyPI archive
12688 (uri (git-reference
12689 (url "https://github.com/piskvorky/smart_open")
12690 (commit (string-append "v" version))))
12691 (file-name (git-file-name name version))
12692 (sha256
12693 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
12694 (build-system pyproject-build-system)
12695 (arguments
12696 (list
12697 #:test-flags
12698 #~(list "--ignore=ci_helpers/"
12699 "--ignore=integration-tests/"
12700 ;; FIXME: Enable when guix/guix#1436 is resolved.
12701 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
12702 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
12703 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
12704 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
12705 "--ignore=tests/test_gcs.py")))
12706 (propagated-inputs
12707 (list python-azure-common
12708 python-azure-core
12709 python-azure-storage-blob
12710 python-boto3
12711 ;; python-google-cloud-storage ;see guix/guix#1436
12712 python-paramiko
12713 python-requests
12714 python-wrapt
12715 python-zstandard))
12716 (native-inputs
12717 (list python-numpy
12718 python-moto
12719 python-pytest
12720 python-pytest-rerunfailures
12721 python-responses
12722 python-setuptools
12723 python-setuptools-scm
12724 python-wheel))
12725 (home-page "https://github.com/piskvorky/smart_open")
12726 (synopsis "Utilities for streaming large files")
12727 (description
12728 "This package provides utilities for streaming large files (S3, HDFS,
12729GCS, Azure Blob Storage, gzip, bz2, etc.)")
12730 (license license:expat)))
12731
12732(define-public python-smart-open-6
12733 (package
12734 (inherit python-smart-open)
12735 (name "python-smart-open")
12736 (version "6.4.0")
12737 (source
12738 (origin
12739 (method git-fetch)
12740 (uri (git-reference
12741 (url "https://github.com/piskvorky/smart_open")
12742 (commit (string-append "v" version))))
12743 (file-name (git-file-name name version))
12744 (sha256
12745 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
12746 (arguments
12747 (list
12748 ;; XXX: Tests need some older native inputs, disable for now.
12749 #:tests? #f))))
12750
12751(define-public python-w3lib
12752 (package
12753 (name "python-w3lib")
12754 (version "2.3.1")
12755 (source
12756 (origin
12757 (method url-fetch)
12758 (uri (pypi-uri "w3lib" version))
12759 (sha256
12760 (base32
12761 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
12762 (build-system pyproject-build-system)
12763 (native-inputs
12764 (list python-pytest python-setuptools python-wheel))
12765 (home-page "https://github.com/scrapy/w3lib")
12766 (synopsis "Python library of web-related functions")
12767 (description
12768 "This is a Python library of web-related functions, such as: remove
12769comments, or tags from HTML snippets, extract base url from HTML snippets,
12770translate entities on HTML strings, among other things.")
12771 (license license:bsd-3)))
12772
12773(define-public python-webcolors
12774 (package
12775 (name "python-webcolors")
12776 (version "24.11.1")
12777 (source
12778 (origin
12779 (method url-fetch)
12780 (uri (pypi-uri "webcolors" version))
12781 (sha256
12782 (base32 "1xl0vn4xa03vjwx6fj19q9kgb94g65gvdf3p0ivsy0i2ydldgczc"))))
12783 (build-system pyproject-build-system)
12784 (arguments
12785 (list
12786 #:phases
12787 '(modify-phases %standard-phases
12788 (add-after 'unpack 'patch-pyproject
12789 (lambda _
12790 ;; XXX Our version of python-pdm-backend does not recognize
12791 ;; "dependency-groups", but is fine with the bogus
12792 ;; "tool.whatever".
12793 (substitute* "pyproject.toml"
12794 (("\\[dependency-groups\\]") "[tool.whatever]")))))))
12795 (native-inputs
12796 (list python-pdm-backend python-pytest))
12797 (home-page "https://github.com/ubernostrum/webcolors")
12798 (synopsis "HTML/CSS color definitions library")
12799 (description "@code{python-webcolors} is a module for working with
12800HTML/CSS color definitions. Normalizing and converting between the following
12801formats is supported.
12802@itemize
12803@item Specification-defined color names
12804@item Six-digit hexadecimal
12805@item Three-digit hexadecimal
12806@item Integer rgb() triplet
12807@item Percentage rgb() triplet
12808@end itemize
12809Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
12810can be handled by the @code{colorsys} module in the Python standard library.")
12811 (license license:bsd-3)))
12812
12813(define-public python-woob
12814 ;; TODO: woob requires backends which are currently installed on the fly in
12815 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
12816 ;; them in the store instead. Many modules are included in the modules
12817 ;; directory in the source tree, but it is unclear how to install them.
12818 ;; Many modules require extra dependencies though, so maybe they should be
12819 ;; packaged independently of woob itself.
12820 (package
12821 (name "python-woob")
12822 (version "3.7")
12823 (source
12824 (origin
12825 (method git-fetch)
12826 (uri (git-reference
12827 (url "https://gitlab.com/woob/woob.git")
12828 (commit version)))
12829 (file-name (git-file-name name version))
12830 (sha256
12831 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
12832 (build-system pyproject-build-system)
12833 (arguments
12834 (list
12835 #:test-flags
12836 ;; Deselect tests that require DNS lookup.
12837 #~(list
12838 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
12839 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
12840 #:phases
12841 #~(modify-phases %standard-phases
12842 (add-before 'build 'relax-requirements
12843 (lambda _
12844 (substitute* "pyproject.toml"
12845 ;; packaging ~= 23.0
12846 (("\"packaging .*\",")
12847 "")
12848 ;; rich~=13.0
12849 (("\"rich .*\",")
12850 "\"rich\",")))))))
12851 (native-inputs
12852 (list nss-certs-for-test
12853 python-pytest
12854 python-setuptools))
12855 (propagated-inputs
12856 (list python-babel
12857 python-colorama
12858 python-cssselect
12859 python-dateutil
12860 python-feedparser
12861 python-html2text
12862 python-lxml
12863 python-packaging
12864 python-pillow
12865 python-prettytable
12866 python-pycountry
12867 python-pyyaml
12868 python-requests
12869 python-responses
12870 python-rich
12871 python-termcolor
12872 python-unidecode))
12873 (home-page "https://woob.tech/")
12874 (synopsis "Woob, Web Outside Of Browsers")
12875 (description
12876 "Woob is a collection of applications able to interact with
12877websites, without requiring the user to open them in a browser. It also
12878provides well-defined APIs to talk to websites lacking one.")
12879 (license license:lgpl3+)))
12880
12881(define-public python-flask-combo-jsonapi
12882 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
12883 (revision "0"))
12884 (package
12885 (name "python-flask-combo-jsonapi")
12886 (version (git-version "1.1.0" revision commit))
12887 (source
12888 (origin
12889 (method git-fetch)
12890 (uri (git-reference
12891 (url "https://github.com/AdCombo/flask-combo-jsonapi")
12892 (commit commit)))
12893 (file-name (git-file-name name version))
12894 (sha256
12895 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
12896 (build-system pyproject-build-system)
12897 (arguments
12898 (list
12899 #:test-flags
12900 #~(list
12901 "-k"
12902 (string-join
12903 (list
12904 ;; XXX: This tests a feature that doesn't make sense when dropping
12905 ;; marshmallow < 3 support.
12906 "not test_compute_schema_propagate_context"
12907 ;; The following tests fail for unknown reasons (see:
12908 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
12909 "test_get_list_with_simple_filter_relationship_custom_qs_api"
12910 "test_get_list_with_simple_filter_relationship_error")
12911 " and not "))
12912 #:phases
12913 #~(modify-phases %standard-phases
12914 (add-after 'unpack 'loosen-requirements
12915 (lambda _
12916 ;; Don't pin specific versions of dependencies.
12917 (substitute* "requirements.txt"
12918 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
12919 (string-append dep "\n"))
12920 (("^marshmallow_jsonapi[=<>].*")
12921 "marshmallow_jsonapi_minfork\n"))
12922 ;; Drop support for marshmallow < 3.
12923 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
12924 "flask_combo_jsonapi/schema.py")
12925 (("from marshmallow\\.base import SchemaABC")
12926 "from marshmallow import Schema")
12927 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
12928 "if isinstance(related_schema_cls, Schema):"))
12929 (substitute* "tests/test_sqlalchemy_data_layer.py"
12930 (("default=None")
12931 "dump_default=None")
12932 (("missing=")
12933 "load_default=")))))))
12934 (propagated-inputs
12935 (list python-flask
12936 python-marshmallow
12937 python-marshmallow-jsonapi
12938 python-simplejson
12939 python-sqlalchemy
12940 python-apispec
12941 python-simplejson
12942 python-six))
12943 (native-inputs
12944 (list python-pytest python-setuptools))
12945 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
12946 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
12947 (description
12948 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
12949APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
12950specification.
12951
12952It tries to combine the power of Flask-Restless with the flexibility of
12953Flask-RESTful to quickly build APIs that fit the complexity of existing
12954real-life projects with legacy data and diverse storage providers.")
12955 (license license:expat))))
12956
12957(define-public python-mwparserfromhell
12958 (package
12959 (name "python-mwparserfromhell")
12960 (version "0.7.2")
12961 (source
12962 (origin
12963 (method git-fetch)
12964 (uri (git-reference
12965 (url "https://github.com/earwig/mwparserfromhell")
12966 (commit (string-append "v" version))))
12967 (file-name (git-file-name name version))
12968 (sha256
12969 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
12970 (build-system pyproject-build-system)
12971 (native-inputs (list python-pytest python-setuptools))
12972 (home-page "https://github.com/earwig/mwparserfromhell")
12973 (synopsis "Python parser for MediaWiki wikicode")
12974 (description
12975 "The MediaWiki Parser From Hell is a python library package that provides
12976a parser for MediaWiki.
12977
12978It exposes parses as normal string objects with additional methods giving
12979access to the special Wikicode features it contains (hyperlinks, tags,
12980templates…). The parser doesn't interpolate strings at all, it remains at a
12981purely formal level.
12982
12983Full documentation may be found at
12984@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
12985 (license license:expat)))
12986
12987(define-public python-tweepy
12988 (package
12989 (name "python-tweepy")
12990 (version "4.16.0")
12991 (source
12992 (origin
12993 (method git-fetch)
12994 (uri
12995 (git-reference
12996 (url "https://github.com/tweepy/tweepy")
12997 (commit (string-append "v" version))))
12998 (file-name (git-file-name name version))
12999 (sha256
13000 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
13001 (build-system pyproject-build-system)
13002 (arguments
13003 ;; tests: 149 passed, 3 skipped, 1 warning
13004 (list #:test-backend #~'unittest
13005 #:test-flags #~(list "discover" "tests")))
13006 (native-inputs
13007 (list nss-certs-for-test
13008 python-flit-core
13009 python-urllib3-1.26
13010 python-vcrpy))
13011 (propagated-inputs
13012 (list python-aiohttp
13013 python-async-lru
13014 python-oauthlib
13015 python-requests
13016 python-requests-oauthlib))
13017 (home-page "https://www.tweepy.org/")
13018 (synopsis "Twitter library for Python")
13019 (description
13020 "This package provides @code{Tweepy}, an easy-to-use Python library for
13021accessing the Twitter API.")
13022 (license license:expat)))
13023
13024(define-public python-quart
13025 (package
13026 (name "python-quart")
13027 (version "0.19.9")
13028 (source
13029 (origin
13030 (method git-fetch) ; no tests in PyPI release
13031 (uri (git-reference
13032 (url "https://github.com/pallets/quart")
13033 (commit version)))
13034 (file-name (git-file-name name version))
13035 (sha256
13036 (base32 "1h5ifv8g9dc9m07vj4v7dfalam83v38545d845vvgys1gan1pscd"))))
13037 (build-system pyproject-build-system)
13038 (native-inputs
13039 (list python-poetry-core
13040 python-pytest
13041 python-pytest-asyncio))
13042 (propagated-inputs
13043 (list hypercorn
13044 python-aiofiles
13045 python-blinker
13046 python-click
13047 python-dotenv
13048 python-flask
13049 python-itsdangerous
13050 python-jinja2
13051 python-markupsafe
13052 python-toml
13053 python-werkzeug))
13054 (home-page "https://gitlab.com/pgjones/quart/")
13055 (synopsis "Python ASGI web microframework with the same API as Flask")
13056 (description
13057 "This package provides a Python ASGI web microframework with the same API
13058as Flask.")
13059 (license license:expat)))
13060
13061(define-public python-quart-trio
13062 (package
13063 (name "python-quart-trio")
13064 (version "0.12.0")
13065 (source
13066 (origin
13067 (method url-fetch)
13068 (uri (pypi-uri "quart_trio" version))
13069 (sha256
13070 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
13071 (build-system pyproject-build-system)
13072 (arguments
13073 (list
13074 #:phases
13075 #~(modify-phases %standard-phases
13076 (add-after 'unpack 'remove-coverage-pytest-options
13077 (lambda _
13078 (substitute* "pyproject.toml"
13079 (("--no-cov-on-fail") "")))))))
13080 (native-inputs
13081 (list python-pdm-backend
13082 python-pytest
13083 python-pytest-sugar
13084 python-pytest-trio))
13085 (propagated-inputs
13086 (list hypercorn
13087 python-quart
13088 python-trio))
13089 (home-page "https://github.com/pgjones/quart-trio")
13090 (synopsis "Extension for Quart to support the Trio event loop")
13091 (description
13092 "This package provides a Quart extension to provide Trio support. This
13093is an alternative to using the asyncio event loop present in the Python
13094standard library and supported by default in Quart.")
13095 (license license:expat)))
13096
13097(define-public python-ajsonrpc
13098 (package
13099 (name "python-ajsonrpc")
13100 (version "1.2.0")
13101 (source
13102 (origin
13103 (method git-fetch)
13104 (uri (git-reference
13105 (url "https://github.com/pavlov99/ajsonrpc")
13106 (commit version)))
13107 (file-name (git-file-name name version))
13108 (sha256
13109 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
13110 (build-system pyproject-build-system)
13111 (arguments
13112 (list
13113 #:phases
13114 #~(modify-phases %standard-phases
13115 (add-after 'unpack 'set-version
13116 (lambda _
13117 (substitute* "ajsonrpc/__init__.py"
13118 (("^__version__ = .*")
13119 (string-append "__version__ = \"" #$version "\"\n"))))))))
13120 (native-inputs
13121 (list python-pytest
13122 python-setuptools))
13123 (propagated-inputs
13124 (list python-quart
13125 python-sanic
13126 python-tornado))
13127 (home-page "https://github.com/pavlov99/ajsonrpc")
13128 (synopsis "Async JSON-RPC 2.0 protocol and server")
13129 (description
13130 "This package provides a Python JSON-RPC 2.0 protocol and server powered
13131by asyncio.")
13132 (license license:expat)))
13133
13134(define-public python-protego
13135 (package
13136 (name "python-protego")
13137 (version "0.4.0")
13138 (source
13139 (origin
13140 (method url-fetch)
13141 (uri (pypi-uri "protego" version))
13142 (sha256
13143 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
13144 (build-system pyproject-build-system)
13145 (native-inputs (list python-pytest python-setuptools python-wheel))
13146 (home-page "https://github.com/scrapy/protego")
13147 (synopsis "Python robots.txt parser with support for modern conventions")
13148 (description "Protego is a pure-Python @file{robots.txt} parser with support
13149for modern conventions.")
13150 (license license:bsd-3)))
13151
13152(define-public python-parsel
13153 (package
13154 (name "python-parsel")
13155 (version "1.10.0")
13156 (source
13157 (origin
13158 (method url-fetch)
13159 (uri (pypi-uri "parsel" version))
13160 (sha256
13161 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
13162 (build-system pyproject-build-system)
13163 (propagated-inputs
13164 (list python-cssselect
13165 python-jmespath
13166 python-lxml
13167 python-typing-extensions
13168 python-w3lib))
13169 (native-inputs
13170 (list python-psutil python-pytest python-setuptools python-wheel))
13171 (home-page "https://github.com/scrapy/parsel")
13172 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
13173 (description "Parsel is a library to extract and remove data from
13174HTML and XML using XPath and CSS selectors, optionally combined with
13175regular expressions.")
13176 (license license:bsd-3)))
13177
13178(define-public python-scrapy
13179 (package
13180 (name "python-scrapy")
13181 (version "2.13.3")
13182 (source
13183 (origin
13184 (method url-fetch)
13185 (uri (pypi-uri "scrapy" version))
13186 (sha256
13187 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
13188 (build-system pyproject-build-system)
13189 (arguments
13190 (list #:test-flags
13191 #~(list "--numprocesses" (number->string (parallel-job-count))
13192 "-k" (string-join
13193 ;; ConnectionRefusedError: [Errno 111] Connection
13194 ;; refused
13195 (list "not test_append"
13196 "test_append_active_mode"
13197 "test_overwrite"
13198 "test_overwrite_active_mode"
13199 "test_persist"
13200 ;; AssertionError
13201 "test_start_deprecated_super")
13202 " and not ")
13203 ;; Skip documentation testing.
13204 "--ignore=docs")
13205 #:phases
13206 #~(modify-phases %standard-phases
13207 (add-before 'check 'prepare-test-environment
13208 (lambda _
13209 (setenv "HOME" "/tmp"))))))
13210 (propagated-inputs
13211 (list python-cryptography
13212 python-cssselect
13213 python-defusedxml
13214 python-itemadapter
13215 python-itemloaders
13216 python-lxml
13217 python-packaging
13218 python-parsel
13219 python-protego
13220 python-pydispatcher
13221 python-pyopenssl
13222 python-pypydispatcher
13223 python-queuelib
13224 python-service-identity
13225 python-tldextract
13226 python-twisted
13227 python-w3lib
13228 python-zope-interface))
13229 (native-inputs
13230 (list nss-certs-for-test
13231 python-hatchling
13232 python-pexpect
13233 python-pytest
13234 python-pytest-xdist
13235 python-setuptools
13236 python-sybil
13237 python-testfixtures))
13238 (home-page "https://scrapy.org")
13239 (synopsis "High-level Web crawling and Web scraping framework")
13240 (description "Scrapy is a fast high-level web crawling and web
13241scraping framework, used to crawl websites and extract structured data
13242from their pages. It can be used for a wide range of purposes, from data
13243mining to monitoring and automated testing.")
13244 (license license:bsd-3)))
13245
13246(define-public python-jstyleson
13247 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
13248 (revision "0"))
13249 (package
13250 (name "python-jstyleson")
13251 (version (git-version "0.0.2" revision commit))
13252 (source
13253 (origin
13254 (method git-fetch)
13255 (uri (git-reference
13256 (url "https://github.com/linjackson78/jstyleson")
13257 (commit commit)))
13258 (file-name (git-file-name name version))
13259 (sha256
13260 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
13261 (build-system pyproject-build-system)
13262 (native-inputs (list python-pytest python-setuptools))
13263 (home-page "https://github.com/linjackson78/jstyleson")
13264 (synopsis "JSON parser supporting js-style comments")
13265 (description
13266 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
13267standard Python @code{json} library, it understands js-style comments.
13268Trailing comma is also supported.")
13269 (license license:expat))))
13270
13271(define-public python-html-text
13272 (package
13273 (name "python-html-text")
13274 (version "0.7.0")
13275 (source
13276 (origin
13277 (method url-fetch)
13278 (uri (pypi-uri "html_text" version))
13279 (sha256
13280 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
13281 (build-system pyproject-build-system)
13282 (native-inputs
13283 (list python-pytest
13284 python-setuptools
13285 python-wheel))
13286 (propagated-inputs
13287 (list python-lxml
13288 python-lxml-html-clean))
13289 (home-page "https://github.com/TeamHG-Memex/html-text")
13290 (synopsis "Extract text from HTML")
13291 (description "HTML to Text is a Python library for extract text from HTML.
13292Contrary to other solution such as LXML or Beautiful Soup, the text extracted
13293with @code{html_text} does not contain elements such as JavaScript or inline
13294styles not normally visible to users. It also normalizes white space
13295characters in a smarter, more visually pleasing style.")
13296 (license license:expat)))
13297
13298(define-public python-mf2py
13299 (package
13300 (name "python-mf2py")
13301 (version "2.0.1")
13302 (source
13303 (origin
13304 (method git-fetch)
13305 (uri (git-reference
13306 (url "https://github.com/microformats/mf2py")
13307 (commit (string-append "v" version))))
13308 (file-name (git-file-name name version))
13309 (sha256
13310 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
13311 (build-system pyproject-build-system)
13312 (native-inputs (list python-mock python-poetry-core python-pytest))
13313 (propagated-inputs
13314 (list python-beautifulsoup4 python-html5lib python-requests))
13315 (home-page "https://github.com/microformats/mf2py")
13316 (synopsis "Python Microformats2 parser")
13317 (description
13318 "This Python library provides a Microformats2 parser implementing the
13319full Microformats2 (mf2) specification, including backward compatibility with
13320Microformats1 (mf1).")
13321 (license license:expat)))
13322
13323(define-public python-extruct
13324 (package
13325 (name "python-extruct")
13326 (version "0.18.0")
13327 (source (origin
13328 (method git-fetch) ;for tests
13329 (uri (git-reference
13330 (url "https://github.com/scrapinghub/extruct")
13331 (commit (string-append "v" version))))
13332 (file-name (git-file-name name version))
13333 (sha256
13334 (base32
13335 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
13336 (build-system pyproject-build-system)
13337 (arguments
13338 (list
13339 #:test-flags
13340 ;; 67 passed, 3 deselected
13341 ;; XXX: 3 tests fail with errors in assertion.
13342 #~(list "-k" (string-append
13343 "not test_microformat"
13344 " and not test_microformat"
13345 " and not test_umicroformat"))))
13346 (native-inputs
13347 (list python-pytest
13348 python-setuptools
13349 python-wheel))
13350 (propagated-inputs
13351 (list python-html-text
13352 python-jstyleson
13353 python-lxml
13354 python-mf2py
13355 python-pyrdfa3
13356 python-rdflib
13357 python-w3lib))
13358 (home-page "https://github.com/scrapinghub/extruct")
13359 (synopsis "Extract embedded metadata from HTML markup")
13360 (description "@code{extruct} is a Python library for extracting embedded
13361metadata from HTML markup. Currently, extruct supports:
13362@itemize
13363@item W3C's HTML Microdata
13364@item embedded JSON-LD
13365@item Microformat via mf2py
13366@item Facebook's Open Graph
13367@item (experimental) RDFa via rdflib
13368@item Dublin Core Metadata (DC-HTML-2003)
13369@end itemize")
13370 (license license:bsd-3)))
13371
13372(define-public python-wadllib
13373 (package
13374 (name "python-wadllib")
13375 (version "2.0.0")
13376 (source
13377 (origin
13378 (method url-fetch)
13379 (uri (pypi-uri "wadllib" version))
13380 (sha256
13381 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
13382 (build-system pyproject-build-system)
13383 (arguments
13384 (list
13385 ;; XXX: Doctests are currently failing.
13386 #:tests? #f
13387 #:phases
13388 #~(modify-phases %standard-phases
13389 (replace 'check
13390 (lambda* (#:key tests? #:allow-other-keys)
13391 (if tests?
13392 (invoke "zope-testrunner" "--test-path=src")
13393 (format #t "test suite not run~%")))))))
13394 (native-inputs
13395 (list python-multipart python-setuptools python-zope-testrunner))
13396 (propagated-inputs (list python-lazr-uri))
13397 (home-page "https://launchpad.net/wadllib")
13398 (synopsis "Web Application Description Language (WADL) navigation library")
13399 (description "The @code{wadllib} Python library allows navigating HTTP
13400resources using Web Application Description Language (WADL) files as guides.")
13401 (license license:lgpl3)))
13402
13403(define-public python-zeep
13404 (package
13405 (name "python-zeep")
13406 (version "4.3.1")
13407 (source
13408 (origin
13409 (method url-fetch)
13410 (uri (pypi-uri "zeep" version))
13411 (sha256
13412 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
13413 (build-system pyproject-build-system)
13414 (arguments
13415 (list
13416 #:phases
13417 '(modify-phases %standard-phases
13418 (add-after 'unpack 'compatibility
13419 (lambda _
13420 ;; Relax requests-file requirement.
13421 (substitute* "pyproject.toml"
13422 (("\"requests-file.*\",")
13423 "\"requests-file\","))
13424 ;; httpx removed the "proxies" keyword. It's now either "mounts"
13425 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
13426 (substitute* "src/zeep/transports.py"
13427 (("proxies=") "proxy="))))
13428 ;; One test requires write access
13429 (add-before 'check 'set-HOME
13430 (lambda _ (setenv "HOME" (getcwd)))))))
13431 (propagated-inputs
13432 (list python-attrs
13433 python-isodate
13434 python-lxml
13435 python-platformdirs
13436 python-pytz
13437 python-requests
13438 python-requests-file
13439 python-requests-toolbelt))
13440 (native-inputs
13441 (list nss-certs-for-test
13442 python-freezegun
13443 python-pretend
13444 python-pytest
13445 python-pytest-asyncio
13446 python-pytest-httpx
13447 python-requests-mock
13448 python-setuptools
13449 python-wheel))
13450 (home-page "https://docs.python-zeep.org/en/stable/")
13451 (synopsis "Python SOAP client based on lxml / requests")
13452 (description "Zeep is a Python SOAP client. Highlights:
13453
13454@itemize
13455@item Build on top of @code{lxml} and @code{requests}.
13456@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
13457@item Support for WS-Addressing headers.
13458@item Support for WSSE (UserNameToken / x.509 signing).
13459@item Support for @code{asyncio} via @code{httpx}.
13460@item Experimental support for XOP messages.
13461@end itemize")
13462 (license license:expat)))
13463
13464(define-public python-http-client
13465 (package
13466 (name "python-http-client")
13467 (version "3.3.7")
13468 (source
13469 (origin
13470 (method git-fetch)
13471 (uri (git-reference
13472 (url "https://github.com/sendgrid/python-http-client")
13473 (commit version)))
13474 (file-name (git-file-name name version))
13475 (sha256
13476 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
13477 (build-system pyproject-build-system)
13478 (arguments
13479 (list
13480 #:test-backend #~'unittest
13481 #:phases
13482 #~(modify-phases %standard-phases
13483 (add-after 'unpack 'fix-tests
13484 (lambda _
13485 ;; The test expects the copyright to be updated each year.
13486 (substitute* "tests/test_daterange.py"
13487 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
13488 (native-inputs
13489 (list python-setuptools))
13490 (home-page "https://github.com/sendgrid/python-http-client")
13491 (synopsis "HTTP REST client for Python")
13492 (description
13493 "This package provides access to any RESTful or RESTful-like API.")
13494 (license license:expat)))
13495
13496(define-public python-sendgrid
13497 (package
13498 (name "python-sendgrid")
13499 (version "6.9.7")
13500 (source
13501 (origin
13502 (method git-fetch)
13503 (uri (git-reference
13504 (url "https://github.com/sendgrid/sendgrid-python")
13505 (commit version)))
13506 (file-name (git-file-name name version))
13507 (sha256
13508 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
13509 (build-system pyproject-build-system)
13510 (arguments
13511 (list
13512 #:test-flags
13513 #~(list "--ignore=test/integ"
13514 ;; Network access is required.
13515 "--ignore=live_test.py")))
13516 (native-inputs
13517 (list python-pytest
13518 python-setuptools))
13519 (propagated-inputs
13520 (list python-cryptography
13521 python-http-client
13522 python-flask
13523 python-pyyaml
13524 python-six ;hard dependency
13525 python-starkbank-ecdsa
13526 python-werkzeug))
13527 (home-page "https://github.com/sendgrid/sendgrid-python/")
13528 (synopsis "SendGrid API library for Python")
13529 (description
13530 "The @code{sendgrid} Python library allows access to the
13531SendGrid Web API v3. Version 3+ of the library provides full support for all
13532SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
13533 (license license:expat)))
13534
13535(define-public python-sse-starlette
13536 (package
13537 (name "python-sse-starlette")
13538 (version "3.1.2")
13539 (source
13540 (origin
13541 (method git-fetch)
13542 (uri (git-reference
13543 (url "https://github.com/sysid/sse-starlette")
13544 (commit (string-append "v" version))))
13545 (file-name (git-file-name name version))
13546 (sha256
13547 (base32 "0cs4218jc8fa9x362vdigdpz2nn1l4qav9yizj3psklvwiq2z1as"))))
13548 (build-system pyproject-build-system)
13549 (arguments
13550 (list
13551 #:test-flags
13552 #~(list
13553 ;; XXX: Server fails to start.
13554 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
13555 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
13556 ;; XXX: Missing test dependency.
13557 "--ignore=tests/integration/test_multiple_consumers.py")
13558 #:phases
13559 #~(modify-phases %standard-phases
13560 (add-after 'unpack 'relax-requirements
13561 (lambda _
13562 (substitute* "pyproject.toml"
13563 (("\"anyio>=.*\"")
13564 "\"anyio\"")))))))
13565 (propagated-inputs (list python-anyio python-starlette))
13566 (native-inputs
13567 (list python-asgi-lifespan
13568 python-async-timeout
13569 python-httpx
13570 python-portend
13571 python-pytest
13572 python-pytest-asyncio
13573 python-psutil
13574 python-setuptools
13575 python-tenacity
13576 python-uvicorn))
13577 (home-page "https://github.com/sysid/sse-starlette")
13578 (synopsis "SSE plugin for Starlette")
13579 (description
13580 "This package provides SSE plugin for Starlette.")
13581 (license license:bsd-3)))
13582
13583(define-public python-sseclient-py
13584 (package
13585 (name "python-sseclient-py")
13586 (version "1.9.0")
13587 (source
13588 (origin
13589 (method git-fetch)
13590 (uri (git-reference
13591 (url "https://github.com/mpetazzoni/sseclient")
13592 (commit (string-append "sseclient-py-" version))))
13593 (file-name (git-file-name name version))
13594 (sha256
13595 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
13596 (build-system pyproject-build-system)
13597 (native-inputs (list python-hatchling python-pytest))
13598 (arguments
13599 (list
13600 #:test-backend #~'unittest
13601 #:test-flags #~'("discover" "--verbose" "tests")))
13602 (home-page "https://github.com/mpetazzoni/sseclient")
13603 (synopsis "Pure-Python Server Side Events (SSE) client")
13604 (description
13605 "This package provides a Python client for SSE event sources that
13606seamlessly integrates with @code{urllib3} and @code{requests}.")
13607 (license license:asl2.0)))
13608
13609(define-public python-starlette
13610 (package
13611 (name "python-starlette")
13612 (version "0.49.1")
13613 (source (origin
13614 (method git-fetch)
13615 (uri (git-reference
13616 (url "https://github.com/encode/starlette")
13617 (commit version)))
13618 (file-name (git-file-name name version))
13619 (sha256
13620 (base32
13621 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
13622 (build-system pyproject-build-system)
13623 (propagated-inputs (list python-anyio
13624 python-typing-extensions
13625 ;; [all] extra dependencies:
13626 python-itsdangerous
13627 python-jinja2
13628 python-multipart
13629 python-pyyaml
13630 python-requests))
13631 (native-inputs (list python-hatchling
13632 python-httpx
13633 python-pytest
13634 python-typing-extensions))
13635 (home-page "https://github.com/encode/starlette")
13636 (synopsis "Little ASGI library")
13637 (description
13638 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
13639Interface) framework/toolkit for building async web services in Python.")
13640 (license license:bsd-3)))
13641
13642(define-public python-starsessions
13643 (package
13644 (name "python-starsessions")
13645 (version "1.3.0")
13646 (source (origin
13647 (method git-fetch)
13648 (uri (git-reference
13649 (url "https://github.com/alex-oleshkevich/starsessions")
13650 (commit (string-append "v" version))))
13651 (file-name (git-file-name name version))
13652 (sha256
13653 (base32
13654 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
13655 (build-system pyproject-build-system)
13656 (arguments
13657 (list
13658 #:test-flags
13659 ;; These tests require a running redis server
13660 '(list "--ignore=tests/backends/test_redis.py"
13661 ;; XXX: this failure indicates a real compatibility problem, but
13662 ;; it seems restricted to the tests only.
13663 ;; AttributeError: 'Cookies' object has no attribute
13664 ;; 'clear_session_cookies'
13665 "-k"
13666 (string-append "not test_session_clears_on_tab_close"
13667 ;; This fails because an error is not raised.
13668 " and not test_session_wants_secret_key"))
13669 #:phases
13670 '(modify-phases %standard-phases
13671 (add-after 'unpack 'compatibilitiy
13672 (lambda _
13673 ;; aioredis has been renamed
13674 (substitute* "starsessions/backends/redis.py"
13675 (("aioredis") "redis")))))))
13676 (propagated-inputs
13677 (list python-redis
13678 python-itsdangerous
13679 python-starlette))
13680 (native-inputs
13681 (list python-httpx
13682 python-poetry-core
13683 python-pytest
13684 python-pytest-asyncio
13685 python-requests))
13686 (home-page "https://github.com/alex-oleshkevich/starsessions")
13687 (synopsis "Pluggable session support for Starlette and FastAPI")
13688 (description
13689 "This package adds pluggable session backends and ships default
13690@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
13691and FastAPI.")
13692 (license license:expat)))
13693
13694(define-public python-whereismyip
13695 (package
13696 (name "python-whereismyip")
13697 (version "0.1.0")
13698 (source
13699 (origin
13700 (method url-fetch)
13701 (uri (pypi-uri "whereismyip" version))
13702 (sha256
13703 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
13704 (build-system pyproject-build-system)
13705 (arguments (list #:tests? #false)) ; There are no tests.
13706 (native-inputs (list python-setuptools))
13707 (home-page "https://pypi.org/project/whereismyip/")
13708 (synopsis "Queries multiple geolocation services until one succeeds")
13709 (description
13710 "This package provides a simple Python library that queries multiple geolocation
13711services until one succeeds.")
13712 (license license:gpl3)))
13713
13714(define-public python-whitenoise
13715 (package
13716 (name "python-whitenoise")
13717 (version "6.9.0")
13718 (source (origin
13719 (method git-fetch) ; PyPI missing test fails
13720 (uri (git-reference
13721 (url "https://github.com/evansd/whitenoise")
13722 (commit version)))
13723 (file-name (git-file-name name version))
13724 (sha256
13725 (base32
13726 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
13727 (build-system pyproject-build-system)
13728 (arguments
13729 (list
13730 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
13731 (native-inputs (list python-brotli
13732 python-django
13733 python-requests
13734 python-pytest
13735 python-setuptools
13736 python-wheel))
13737 (home-page "https://github.com/evansd/whitenoise")
13738 (synopsis "Static file serving for WSGI applications")
13739 (description
13740 "WhiteNoise allows your web app to serve its own static files, making it
13741a self-contained unit that can be deployed anywhere without relying on nginx,
13742Amazon S3 or any other external service.")
13743 (license license:expat)))
13744
13745(define-public python-suds
13746 (package
13747 (name "python-suds")
13748 (version "1.2.0")
13749 (source
13750 (origin
13751 (method url-fetch)
13752 (uri (pypi-uri "suds" version))
13753 (sha256
13754 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
13755 (build-system pyproject-build-system)
13756 (arguments
13757 (list #:phases
13758 #~(modify-phases %standard-phases
13759 ;; XXX: chirp expects suds instead of suds_community
13760 (add-after 'install 'add-custom-dist-info
13761 (lambda _
13762 (for-each
13763 (lambda (dir)
13764 (with-directory-excursion (dirname dir)
13765 (symlink
13766 (basename dir)
13767 (string-append "suds-" #$version ".dist-info"))))
13768 (find-files #$output
13769 (lambda (file stat)
13770 (string-suffix? ".dist-info" file))
13771 #:directories? #t)))))))
13772 (native-inputs
13773 (list python-pytest
13774 python-setuptools
13775 python-wheel))
13776 (home-page "https://github.com/suds-community/suds")
13777 (synopsis "Lightweight SOAP python client for consuming Web Services")
13778 (description
13779 "Suds is a lightweight SOAP-based web service client for Python.")
13780 (license license:lgpl3+)))
13781
13782(define-public python-fastapi
13783 (package
13784 (name "python-fastapi")
13785 (version "0.131.0")
13786 (source
13787 (origin
13788 (method url-fetch)
13789 (uri (pypi-uri "fastapi" version))
13790 (sha256
13791 (base32 "1zs80pz8p04akxxmyfihqgii1wjhhad6qx1cjfd8kqmya9g1acb5"))))
13792 (build-system pyproject-build-system)
13793 (arguments
13794 (list
13795 ;; tests: 1126 passed, 12 skipped, 2 deselected
13796 #:test-backend #~'custom
13797 #:test-flags
13798 #~(list
13799 ;; Cannot import 'scripts' with just 'pytest'.
13800 "-m" "pytest"
13801 ;; Needs strawberry and sqlmodel.
13802 "--ignore=tests/test_tutorial/"
13803 ;; Fails due to failure to capture stdout.
13804 "--ignore=tests/test_fastapi_cli.py")))
13805 (native-inputs
13806 (list python-anyio
13807 python-dirty-equals
13808 python-flask
13809 python-inline-snapshot
13810 python-pdm-backend
13811 ;; python-pwdlib
13812 python-pyjwt
13813 python-pytest
13814 python-sqlalchemy-2
13815 ;; python-sqlmodel
13816 python-types-orjson
13817 python-types-ujson))
13818 (propagated-inputs
13819 (list python-starlette
13820 python-pydantic
13821 python-typing-extensions
13822 python-annotated-doc
13823 ;; [optional]
13824 python-email-validator
13825 python-fastapi-cli
13826 python-httpx
13827 python-itsdangerous
13828 python-jinja2
13829 python-multipart
13830 python-orjson
13831 python-pydantic-extra-types
13832 python-pydantic-settings
13833 python-pyyaml
13834 python-ujson
13835 python-uvicorn))
13836 (home-page "https://github.com/fastapi/fastapi")
13837 (synopsis "Web framework based on type hints")
13838 (description "FastAPI provides a web API framework based on pydantic and
13839starlette.")
13840 (license license:expat)))
13841
13842(define-public python-fastapi-csrf-protect
13843 (package
13844 (name "python-fastapi-csrf-protect")
13845 (version "0.3.3")
13846 (source (origin
13847 (method git-fetch)
13848 (uri (git-reference
13849 (url "https://github.com/aekasitt/fastapi-csrf-protect")
13850 (commit (string-append "v" version))))
13851 (file-name (git-file-name name version))
13852 (sha256
13853 (base32
13854 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
13855 (build-system pyproject-build-system)
13856 (propagated-inputs
13857 (list python-fastapi python-itsdangerous
13858 python-pydantic))
13859 (native-inputs
13860 (list python-poetry-core
13861 python-pytest))
13862 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
13863 (synopsis "Cross-Site Request Forgery (XSRF) protection")
13864 (description
13865 "This package provides a stateless implementation of @dfn{Cross-Site
13866Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
13867pattern.")
13868 (license license:expat)))
13869
13870(define-public python-fastapi-pagination-minimal
13871 (package
13872 (name "python-fastapi-pagination-minimal")
13873 (version "0.15.6")
13874 (source (origin
13875 (method git-fetch)
13876 (uri (git-reference
13877 (url "https://github.com/uriyyo/fastapi-pagination")
13878 (commit version)))
13879 (file-name (git-file-name name version))
13880 (sha256
13881 (base32
13882 "1ndazaqi1na0lj6fi42d7mi9lmpxdak0wq0pd97fb3b23ml8rlg6"))))
13883 (build-system pyproject-build-system)
13884 ;; We run the tests in python-fastapi-pagination only.
13885 (arguments (list #:tests? #false))
13886 ;; These are the only required dependencies,
13887 ;; please add all optional dependencies to the
13888 ;; full python-fastapi-pagination below.
13889 (propagated-inputs (list python-fastapi python-pydantic))
13890 (native-inputs (list python-hatchling))
13891 (home-page "https://github.com/uriyyo/fastapi-pagination")
13892 (synopsis "FastAPI pagination library")
13893 (description "@code{fastapi-pagination} is a Python library designed to
13894simplify pagination in FastAPI applications. It provides a set of utility
13895functions and data models to help you paginate your database queries and
13896return paginated responses to your clients.")
13897 (license license:expat)))
13898
13899(define-public python-fastapi-pagination
13900 (package
13901 (inherit python-fastapi-pagination-minimal)
13902 (name "python-fastapi-pagination")
13903 (arguments
13904 (list
13905 #:test-flags
13906 #~(list "--asyncio-mode=auto"
13907 "--ignore=tests/ext"
13908 ;; Netwok access is required.
13909 "-k" (string-join
13910 (list "not test_optional_params[postgres-default]"
13911 "test_optional_params[postgres-limit-offset]"
13912 "test_optional_params[sqlite-default]"
13913 "test_optional_params[sqlite-limit-offset]")
13914 " and not "))
13915 #:phases
13916 '(modify-phases %standard-phases
13917 (add-after 'unpack 'patch-tests
13918 (lambda _
13919 ;; We don't have a package for python-cassandra or motor, but we
13920 ;; also don't need them as we only run the unit tests anyway.
13921 (substitute* "tests/conftest.py"
13922 (("from cassandra.*") "")
13923 (("from motor.*") "")))))))
13924 (propagated-inputs
13925 (modify-inputs (package-propagated-inputs
13926 python-fastapi-pagination-minimal)
13927 (prepend python-asyncpg
13928 python-databases
13929 python-django
13930 python-fastapi
13931 python-pydantic
13932 python-sqlalchemy
13933 (package
13934 (inherit python-tortoise-orm)
13935 (arguments
13936 (substitute-keyword-arguments (package-arguments
13937 python-tortoise-orm)
13938 ((#:phases phases '%standard-phases)
13939 `(modify-phases ,phases
13940 (delete 'sanity-check)))))
13941 (propagated-inputs
13942 (modify-inputs propagated-inputs
13943 (replace "python-aiosqlite" python-aiosqlite)))))))
13944 (native-inputs
13945 (list python-aiosqlite
13946 python-asgi-lifespan
13947 python-asyncpg
13948 python-dirty-equals
13949 python-faker
13950 python-hatchling
13951 python-httpx
13952 python-pytest
13953 python-pytest-asyncio
13954 python-sqlalchemy
13955 python-typing-extensions))
13956 (description
13957 (string-append (package-description python-fastapi-pagination-minimal)
13958 "
13959
13960This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
13961all available optional dependencies supported by mainline
13962@code{fastapi-pagination}."))))
13963
13964(define-public python-fastapi-cli
13965 (package
13966 (name "python-fastapi-cli")
13967 (version "0.0.7")
13968 (source
13969 (origin
13970 (method url-fetch)
13971 (uri (pypi-uri "fastapi_cli" version))
13972 (sha256
13973 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
13974 (build-system pyproject-build-system)
13975 ;; Tests require fastapi, which depends on this package.
13976 (arguments (list #:tests? #false))
13977 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
13978 (native-inputs
13979 (list python-inline-snapshot python-pdm-backend python-pytest))
13980 (home-page "https://pypi.org/project/fastapi-cli/")
13981 (synopsis
13982 "Run and manage FastAPI apps from the command line with FastAPI CLI")
13983 (description
13984 "FastAPI CLI is a command line program fastapi that you can use to serve
13985your FastAPI app, manage your FastAPI project, and more.")
13986 (license license:expat)))
13987
13988(define-public python-pyactiveresource
13989 (package
13990 (name "python-pyactiveresource")
13991 (version "2.2.2")
13992 (source
13993 (origin
13994 (method git-fetch)
13995 (uri (git-reference
13996 (url "https://github.com/Shopify/pyactiveresource")
13997 (commit (string-append "v" version))))
13998 (file-name (git-file-name name version))
13999 (sha256
14000 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
14001 (build-system pyproject-build-system)
14002 ;; XXX: The package is fine, but the tests started failing on [email protected].
14003 ;; The package is not actively maintained, consider removing it once leaf.
14004 (arguments (list #:tests? #f))
14005 (native-inputs
14006 (list python-dateutil python-pytest python-pyyaml python-setuptools))
14007 (propagated-inputs (list python-six))
14008 (home-page "https://github.com/Shopify/pyactiveresource/")
14009 (synopsis "ActiveResource for Python")
14010 (description
14011 "This package provides a Python port of the ActiveResource project.
14012
14013Active Resource attempts to provide a coherent wrapper object-relational
14014mapping for REST web services. It follows the same philosophy as Active
14015Record, in that one of its prime aims is to reduce the amount of code needed
14016to map to these resources. This is made possible by relying on a number of
14017code- and protocol-based conventions that make it easy for Active Resource to
14018infer complex relations and structures.")
14019 (license license:expat)))
14020
14021(define-public python-shopifyapi
14022 (package
14023 (name "python-shopifyapi")
14024 (version "12.7.0")
14025 (source
14026 (origin
14027 (method git-fetch)
14028 (uri (git-reference
14029 (url "https://github.com/Shopify/shopify_python_api")
14030 (commit (string-append "v" version))))
14031 (file-name (git-file-name name version))
14032 (sha256
14033 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
14034 (build-system pyproject-build-system)
14035 (arguments
14036 (list
14037 #:test-flags
14038 #~'("-k"
14039 ;; Disable a failing test.
14040 "not test_raises_if_aud_doesnt_match_api_key")))
14041 (native-inputs (list python-mock python-pytest python-setuptools))
14042 (propagated-inputs (list python-pyactiveresource python-pyjwt
14043 python-pyyaml python-six))
14044 (home-page "https://github.com/Shopify/shopify_python_api")
14045 (synopsis "Shopify API for Python")
14046 (description
14047 "This package provides the Shopify API for Python.
14048
14049The ShopifyAPI library allows Python developers to programmatically access the
14050admin section of stores using an ActiveResource-like interface similar the
14051ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
14052list, create, update, or delete resources (e.g. Order, Product, Collection).")
14053 (license license:expat)))
14054
14055(define-public python-pybadges
14056 (package
14057 (name "python-pybadges")
14058 (version "3.0.1")
14059 (source (origin
14060 (method git-fetch)
14061 (uri (git-reference
14062 (url "https://github.com/google/pybadges")
14063 (commit version)))
14064 (file-name (git-file-name name version))
14065 (sha256
14066 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
14067 (build-system pyproject-build-system)
14068 (arguments
14069 (list
14070 #:test-flags
14071 #~'("-k"
14072 ;; Disable network dependent tests.
14073 "not test_changes and not test_not_image_url and not test_http_url")))
14074 (propagated-inputs (list python-jinja2 python-requests))
14075 (native-inputs (list python-flask
14076 python-fonttools
14077 python-pillow
14078 python-pytest
14079 python-setuptools
14080 python-wheel
14081 python-xmldiff))
14082 (home-page "https://github.com/google/pybadges")
14083 (synopsis "Generate Github-style badges on the command-line")
14084 (description
14085 "This package provides @code{python-pybadges}: a library and command-line
14086tool for generating Github-style badges as SVG images.")
14087 (license license:asl2.0)))
14088
14089(define-public python-grid5000
14090 (package
14091 (name "python-grid5000")
14092 (version "1.2.4")
14093 (source (origin
14094 (method git-fetch)
14095 (uri (git-reference
14096 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
14097 (commit (string-append "v" version))))
14098 (file-name (git-file-name name version))
14099 (sha256
14100 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
14101 (build-system pyproject-build-system)
14102 (arguments
14103 (list #:tests? #f)) ; No tests.
14104 (native-inputs (list python-setuptools))
14105 (propagated-inputs (list python-requests python-ipython python-pyyaml))
14106 (home-page "https://pypi.org/project/python-grid5000/")
14107 (synopsis "Grid5000 python client")
14108 (description
14109 "python-grid5000 is a python package wrapping the Grid5000 REST API.
14110You can use it as a library in your python project or you can explore the
14111Grid5000 resources interactively using the embedded shell.")
14112 (license license:gpl3+)))
14113
14114(define-public python-enoslib
14115 (package
14116 (name "python-enoslib")
14117 (version "8.0.1")
14118 (source
14119 (origin
14120 (method git-fetch)
14121 (uri (git-reference
14122 (url "https://gitlab.inria.fr/discovery/enoslib")
14123 (commit (string-append "v" version))))
14124 (file-name (git-file-name name version))
14125 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
14126 (arguments
14127 (list
14128 #:test-flags
14129 #~(list "enoslib/tests/unit"
14130 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
14131 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
14132 #:phases
14133 #~(modify-phases %standard-phases
14134 (add-before 'check 'pre-check
14135 (lambda* (#:key tests? #:allow-other-keys)
14136 (when tests?
14137 ;; Otherwise Ansible fails to create its config directory.
14138 (setenv "HOME" "/tmp"))))
14139 ;; Disable the sanity check, which fails with the following error:
14140 ;;
14141 ;; ContextualVersionConflict(rich 12.4.1
14142 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
14143 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
14144 ;;
14145 ;; The optional jupyter dependency of rich isn't critical for
14146 ;; EnOSlib to work
14147 (delete 'sanity-check))))
14148 (build-system pyproject-build-system)
14149 (native-inputs
14150 (list python-ddt
14151 python-freezegun
14152 python-pytest
14153 python-setuptools
14154 python-wheel))
14155 (propagated-inputs
14156 (list ansible
14157 python-cryptography
14158 python-grid5000
14159 python-jsonschema
14160 python-netaddr
14161 python-packaging
14162 python-requests
14163 python-rich
14164 python-sshtunnel
14165 python-pytz))
14166 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
14167 (synopsis "Deploy distributed testbeds on a variety of platforms")
14168 (description
14169 "EnOSlib is a library to build experimental frameworks on various
14170scientific testbeds. It lets you deploy networks of machines on actual
14171hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
14172 (license license:gpl3+)))
14173
14174(define-public python-pynetbox
14175 (package
14176 (name "python-pynetbox")
14177 (version "7.4.1")
14178 (source (origin
14179 (method url-fetch)
14180 (uri (pypi-uri "pynetbox" version))
14181 (sha256
14182 (base32
14183 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
14184 (build-system pyproject-build-system)
14185 (arguments
14186 (list
14187 #:test-flags
14188 ;; Integration tests depend on docker.
14189 '(list "--ignore=tests/integration")))
14190 (propagated-inputs (list python-packaging python-requests))
14191 (native-inputs
14192 (list python-pytest
14193 python-setuptools
14194 python-setuptools-scm
14195 python-wheel))
14196 (home-page "https://github.com/netbox-community/pynetbox")
14197 (synopsis "NetBox API client library")
14198 (description "Python module to query and edit data stored in a
14199@url{https://netbox.dev,NetBox} instance.")
14200 (license license:asl2.0)))
14201
14202(define-public python-waybackpack
14203 (package
14204 (name "python-waybackpack")
14205 (version "0.6.4")
14206 (source
14207 (origin
14208 (method url-fetch)
14209 (uri (pypi-uri "waybackpack" version))
14210 (sha256
14211 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14212 (build-system pyproject-build-system)
14213 (arguments
14214 (list #:tests? #f)) ; would require network (and SSL certificates)
14215 (propagated-inputs (list python-requests))
14216 (native-inputs (list python-pytest python-setuptools python-wheel))
14217 (home-page "https://github.com/jsvine/waybackpack")
14218 (synopsis
14219 "Download the entire Wayback Machine archive for a given URL")
14220 (description
14221 "This package provides a library and a command-line tool that lets
14222you download the entire Wayback Machine archive for a given URL.")
14223 (license license:expat)))
14224
14225(define-public python-xyzservices
14226 (package
14227 (name "python-xyzservices")
14228 (version "2025.4.0")
14229 (source
14230 (origin
14231 (method url-fetch)
14232 (uri (pypi-uri "xyzservices" version))
14233 (sha256
14234 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14235 (build-system pyproject-build-system)
14236 (arguments
14237 (list
14238 #:test-flags #~(list "-m" "not request")))
14239 (native-inputs
14240 (list python-pytest
14241 python-mercantile
14242 python-requests
14243 python-setuptools
14244 python-setuptools-scm))
14245 (home-page "https://github.com/geopandas/xyzservices")
14246 (synopsis "Source of XYZ tiles providers")
14247 (description "@code{xyzservices} is a lightweight library providing a
14248repository of available XYZ services offering raster basemap tiles. The
14249repository is provided via Python API and as a compressed JSON file.")
14250 (license license:bsd-3)))
14251
14252(define-public s3cmd
14253 (package
14254 (name "s3cmd")
14255 (version "2.4.0")
14256 (source
14257 (origin
14258 (method git-fetch)
14259 (uri (git-reference
14260 (url "https://github.com/s3tools/s3cmd")
14261 (commit (string-append "v" version))))
14262 (file-name (git-file-name name version))
14263 (sha256
14264 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14265 (build-system pyproject-build-system)
14266 (arguments
14267 (list
14268 #:tests? #f ; XXX: Tests require network access.
14269 #:phases
14270 #~(modify-phases %standard-phases
14271 (add-after 'unpack 'hide-wrapping
14272 (lambda _
14273 (substitute* "S3/MultiPart.py"
14274 (("sys\\.argv\\[0\\]")
14275 "\"s3cmd\""))
14276 (substitute* "s3cmd"
14277 (("optparser\\.get_prog_name\\(\\)")
14278 "\"s3cmd\"")))))))
14279 (native-inputs (list python-setuptools))
14280 (inputs (list python-dateutil python-magic))
14281 (home-page "https://s3tools.org/s3cmd")
14282 (synopsis "Command line tool for S3-compatible storage services")
14283 (description
14284 "S3cmd is a command line tool for uploading, retrieving and managing data
14285in storage services that are compatible with the Amazon Simple Storage
14286Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14287GnuPG encryption, and more. It also supports management of Amazon's
14288CloudFront content delivery network.")
14289 (license license:gpl2+)))