projects/guix·blob perlssl · refs

14356 lines · 517.7 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015-2025 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Christopher Baines <[email protected]>
5;;; Copyright © 2017 Muriithi Frederick Muriuki <[email protected]>
6;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
7;;; Copyright © 2013, 2014, 2015, 2016, 2020, 2023 Andreas Enge <[email protected]>
8;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
9;;; Copyright © 2015-2025 Ricardo Wurmus <[email protected]>
10;;; Copyright © 2017, 2021 Roel Janssen <[email protected]>
11;;; Copyright © 2016, 2017, 2020 Julien Lepiller <[email protected]>
12;;; Copyright © 2016, 2017 Nikita <[email protected]>
13;;; Copyright © 2014, 2017, 2021 Eric Bavier <[email protected]>
14;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
15;;; Copyright © 2015 Cyril Roelandt <[email protected]>
16;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
17;;; Copyright © 2016, 2019, 2022, 2025 Hartmut Goebel <[email protected]>
18;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <[email protected]>
19;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
20;;; Copyright © 2015, 2016 Christine Lemmer-Webber <[email protected]>
21;;; Copyright © 2017 Adriano Peluso <[email protected]>
22;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
23;;; Copyright © 2016 David Craven <[email protected]>
24;;; Copyright © 2017 Oleg Pykhalov <[email protected]>
25;;; Copyright © 2015, 2016 David Thompson <[email protected]>
26;;; Copyright © 2017 Mark Meyer <[email protected]>
27;;; Copyright © 2018 Clément Lassieur <[email protected]>
28;;; Copyright © 2018 Tomáš Čech <[email protected]>
29;;; Copyright © 2018, 2019, 2021, 2024 Nicolas Goaziou <[email protected]>
30;;; Copyright © 2018 Mathieu Othacehe <[email protected]>
31;;; Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
32;;; Copyright © 2018 swedebugia <[email protected]>
33;;; Copyright © 2019 Vagrant Cascadian <[email protected]>
34;;; Copyright © 2019, 2023 Brendan Tildesley <[email protected]>
35;;; Copyright © 2019 Pierre Langlois <[email protected]>
36;;; Copyright © 2019, 2020 Tanguy Le Carrour <[email protected]>
37;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
38;;; Copyright © 2020 Josh Marshall <[email protected]>
39;;; Copyright © 2020 Evan Straw <[email protected]>
40;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
41;;; Copyright © 2020 Holger Peters <[email protected]>
42;;; Copyright © 2020 Noisytoot <[email protected]>
43;;; Copyright © 2020 Edouard Klein <[email protected]>
44;;; Copyright © 2020, 2021, 2022, 2023, 2025 Vinicius Monego <[email protected]>
45;;; Copyright © 2020 Konrad Hinsen <[email protected]>
46;;; Copyright © 2020, 2022, 2024 Giacomo Leidi <[email protected]>
47;;; Copyright © 2020 Raghav Gururajan <[email protected]>
48;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
49;;; Copyright © 2021 Greg Hogan <[email protected]>
50;;; Copyright © 2021 Maxime Devos <[email protected]>
51;;; Copyright © 2021 Pradana Aumars <[email protected]>
52;;; Copyright © 2021, 2022, 2024, 2026 Arun Isaac <[email protected]>
53;;; Copyright © 2021-2022, 2024-2025 jgart <[email protected]>
54;;; Copyright © 2021 Alice Brenon <[email protected]>
55;;; Copyright © 2021 Mekeor Melire <[email protected]>
56;;; Copyright © 2022 John Kehayias <[email protected]>
57;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email protected]>
58;;; Copyright © 2022, 2023, 2025 Felix Gruber <[email protected]>
59;;; Copyright © 2022 Peter Polidoro <[email protected]>
60;;; Copyright © 2022 Antero Mejr <[email protected]>
61;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
62;;; Copyright © 2022, 2025 Nicolas Graves <[email protected]>
63;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
64;;; Copyright © 2022 msimonin <[email protected]>
65;;; Copyright © 2022 Michael Rohleder <[email protected]>
66;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
67;;; Copyright © 2023 dan <[email protected]>
68;;; Copyright © 2023 John Kehayias <[email protected]>
69;;; Copyright © 2023 Juliana Sims <[email protected]>
70;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
71;;; Copyright © 2024 Fabio Natali <[email protected]>
72;;; Copyright © 2024 Steve George <[email protected]>
73;;; Copyright © 2024 Troy Figiel <[email protected]>
74;;; Copyright © 2024, 2025 Sharlatan Hellseher <[email protected]>
75;;; Copyright © 2024 normally_js <[email protected]>
76;;; Copyright © 2024 Markku Korkeala <[email protected]>
77;;; Copyright © 2024 Nguyễn Gia Phong <[email protected]>
78;;; Copyright © 2024 Zheng Junjie <[email protected]>
79;;; Copyright © 2024 Spencer King <[email protected]>
80;;; Copyright © 2024 Attila Lendvai <[email protected]>
81;;; Copyright © 2025 Daniel Ziltener <[email protected]>
82;;; Copyright © 2025 gemmaro <[email protected]>
83;;; Copyright © 2025 Sergio Pastor Pérez <[email protected]>
84;;; Copyright © 2025 Jake Forster <[email protected]>
85;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
86;;; Copyright © 2025 Hugo Buddelmeijer <[email protected]>
87;;; Copyright © 2025-2026 Artur Wroblewski <[email protected]>
88;;; Copyright © 2025, 2026 Allan Adair <[email protected]>
89;;; Copyright © 2025 Aaron Covrig <[email protected]>
90;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
91;;; Copyright © 2026 mst <[email protected]>
92;;;
93;;; This file is part of GNU Guix.
94;;;
95;;; GNU Guix is free software; you can redistribute it and/or modify it
96;;; under the terms of the GNU General Public License as published by
97;;; the Free Software Foundation; either version 3 of the License, or (at
98;;; your option) any later version.
99;;;
100;;; GNU Guix is distributed in the hope that it will be useful, but
101;;; WITHOUT ANY WARRANTY; without even the implied warranty of
102;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
103;;; GNU General Public License for more details.
104;;;
105;;; You should have received a copy of the GNU General Public License
106;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
107
108(define-module (gnu packages python-web)
109 #:use-module (gnu packages admin)
110 #:use-module (gnu packages base)
111 #:use-module (gnu packages bash)
112 #:use-module (gnu packages check)
113 #:use-module (gnu packages cmake)
114 #:use-module (gnu packages compression)
115 #:use-module (gnu packages curl)
116 #:use-module (gnu packages databases)
117 #:use-module (gnu packages django)
118 #:use-module (gnu packages dns)
119 #:use-module (gnu packages freedesktop)
120 #:use-module (gnu packages glib)
121 #:use-module (gnu packages gnupg)
122 #:use-module (gnu packages graphviz)
123 #:use-module (gnu packages groff)
124 #:use-module (gnu packages iso-codes)
125 #:use-module (gnu packages libevent)
126 #:use-module (gnu packages libffi)
127 #:use-module (gnu packages libidn)
128 #:use-module (gnu packages linux)
129 #:use-module (gnu packages lsof)
130 #:use-module (gnu packages node)
131 #:use-module (gnu packages nss)
132 #:use-module (gnu packages openstack)
133 #:use-module (gnu packages pcre)
134 #:use-module (gnu packages pkg-config)
135 #:use-module (gnu packages protobuf)
136 #:use-module (gnu packages python)
137 #:use-module (gnu packages python-build)
138 #:use-module (gnu packages python-check)
139 #:use-module (gnu packages python-compression)
140 #:use-module (gnu packages python-crypto)
141 #:use-module (gnu packages python-science)
142 #:use-module (gnu packages python-xyz)
143 #:use-module (gnu packages qt)
144 #:use-module (gnu packages rdf)
145 #:use-module (gnu packages rpc)
146 #:use-module (gnu packages rust)
147 #:use-module (gnu packages rust-apps)
148 #:use-module (gnu packages serialization)
149 #:use-module (gnu packages sphinx)
150 #:use-module (gnu packages texinfo)
151 #:use-module (gnu packages time)
152 #:use-module (gnu packages tls)
153 #:use-module (gnu packages version-control)
154 #:use-module (gnu packages web)
155 #:use-module (gnu packages xml)
156 #:use-module (gnu packages)
157 #:use-module (guix build-system cargo)
158 #:use-module (guix build-system copy)
159 #:use-module (guix build-system pyproject)
160 #:use-module (guix deprecation)
161 #:use-module (guix download)
162 #:use-module (guix gexp)
163 #:use-module (guix git-download)
164 #:use-module ((guix licenses) #:prefix license:)
165 #:use-module (guix packages)
166 #:use-module (guix utils)
167 #:use-module (srfi srfi-1))
168
169(define-public python-aioboto3
170 (package
171 (name "python-aioboto3")
172 (version "15.5.0")
173 (source
174 (origin
175 (method git-fetch)
176 (uri (git-reference
177 (url "https://github.com/terricain/aioboto3")
178 (commit (string-append "v" version))))
179 (file-name (git-file-name name version))
180 (sha256
181 (base32 "05644x17f9sl8mv9bp8l0rjcmw5x2ssyd5z1v3xmgcspk5qs6qn8"))))
182 (build-system pyproject-build-system)
183 (arguments
184 (list
185 #:tests? #f ;XXX: all tests faild
186 #:phases
187 #~(modify-phases %standard-phases
188 (add-after 'unpack 'relax-requirements
189 (lambda _
190 (substitute* "pyproject.toml"
191 (("aiobotocore\\[boto3\\]==2.25.1")
192 "aiobotocore >= 2.25.1")))))))
193 (native-inputs
194 (list python-setuptools
195 python-setuptools-scm))
196 (propagated-inputs
197 (list python-aiobotocore
198 python-aiofiles
199 ;; [optional]
200 python-boto3
201 python-cryptography))
202 (home-page "https://github.com/terricain/aioboto3")
203 (synopsis "Async boto3 wrapper")
204 (description
205 "This package is mostly just a wrapper combining the great work of boto3
206and aiobotocore.")
207 (license license:asl2.0)))
208
209(define-public python-aiocoap
210 (package
211 (name "python-aiocoap")
212 (version "0.4.14")
213 (source
214 (origin
215 (method git-fetch) ; tests miss data and module files in PyPI release
216 (uri (git-reference
217 (url "https://github.com/chrysn/aiocoap")
218 (commit version)))
219 (file-name (git-file-name name version))
220 (sha256
221 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
222 (build-system pyproject-build-system)
223 (arguments
224 (list
225 #:test-flags
226 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
227 ;; 8683, 0, 0): address already in use
228 #~(list "--ignore=tests/test_server.py"
229 "-k" (string-join
230 ;; TypeError: can only concatenate str (not "NoneType") to
231 ;; str
232 (list "not test_options"
233 "test_uri_parser"
234 "test_help" ; returned non-zero exit status 1.
235 "test_routing" ; address already in use
236 "test_tls")
237 " and not "))))
238 (native-inputs
239 (list openssl ;for tests/test_tls.py
240 python-pytest
241 python-setuptools
242 python-wheel))
243 (propagated-inputs
244 (list ;; python-cbor-diag
245 python-cbor2
246 python-cryptography
247 ;; python-dtlssocket
248 python-filelock
249 ;; python-ge25519
250 python-pygments
251 python-termcolor
252 python-websockets))
253 (home-page "https://github.com/chrysn/aiocoap")
254 (synopsis "Python CoAP library")
255 (description
256 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
257Constrained Application Protocol}, http://coap.space/}. It facilitates
258writing applications that talk to network enabled embedded
259@acronym{IoT,Internet of Things} devices.")
260 (license license:expat)))
261
262(define-public python-alpaca-py
263 (package
264 (name "python-alpaca-py")
265 (version "0.43.2")
266 (source
267 (origin
268 (method git-fetch)
269 (uri (git-reference
270 (url "https://github.com/alpacahq/alpaca-py")
271 (commit (string-append "v" version))))
272 (file-name (git-file-name name version))
273 (sha256
274 (base32 "0majn27r2s2z5nbqvkpmw04kswhj9xkmvmm0rkvb3fga9lwwivlb"))))
275 (build-system pyproject-build-system)
276 (native-inputs
277 (list python-poetry-core
278 python-poetry-dynamic-versioning
279 python-pytest
280 python-pytest-asyncio
281 python-requests-mock))
282 (propagated-inputs
283 (list python-msgpack
284 python-pandas
285 python-pydantic
286 python-requests
287 python-sseclient-py
288 python-websockets))
289 (home-page "https://alpaca.markets/sdks/python/")
290 (synopsis "Alpaca API official Python SDK")
291 (description
292 "Alpaca-py provides an interface to REST, WebSocket and SSE endpoints
293that allow interaction with the @url{https://alpaca.markets/, Alpaca} API.")
294 (license license:asl2.0)))
295
296(define-public python-anaconda-client
297 (package
298 (name "python-anaconda-client")
299 (version "1.13.1")
300 (source
301 (origin
302 (method git-fetch)
303 (uri (git-reference
304 (url "https://github.com/Anaconda-Platform/anaconda-client")
305 (commit version)))
306 (file-name (git-file-name name version))
307 (sha256
308 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
309 (build-system pyproject-build-system)
310 (arguments
311 (list
312 #:test-flags
313 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
314 "--deselect=tests/utils/test_conda.py::test_conda_vars")
315 #:phases
316 #~(modify-phases %standard-phases
317 (add-after 'unpack 'fix-pytest-config
318 (lambda _
319 (substitute* "setup.cfg"
320 (("addopts=.*") "addopts=\n")))))))
321 (native-inputs
322 (list python-freezegun
323 python-pytest
324 python-setuptools))
325 (propagated-inputs
326 (list python-anaconda-cli-base
327 python-conda-package-handling
328 python-conda-package-streaming
329 python-dateutil
330 python-defusedxml
331 python-nbformat
332 python-pillow
333 python-platformdirs
334 python-pytz
335 python-pyyaml
336 python-requests
337 python-requests-toolbelt
338 python-setuptools
339 python-tqdm
340 python-urllib3))
341 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
342 (synopsis "Anaconda Cloud command line client library")
343 (description
344 "Anaconda Cloud command line client library provides an interface to
345Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
346environments.")
347 (license license:bsd-3)))
348
349(define-public python-apprise
350 (package
351 (name "python-apprise")
352 (version "1.9.4")
353 (source
354 (origin
355 (method url-fetch)
356 (uri (pypi-uri "apprise" version))
357 (sha256
358 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
359 (build-system pyproject-build-system)
360 (arguments
361 (list
362 ;; These tests used to be ran with --numprocesses, but that seems to have
363 ;; made them non-deterministic.
364 #:test-flags
365 #~(list "--ignore=tests/test_plugin_macosx.py"
366 "-k" "not test_plugin_glib_send_raises_generic")))
367 (native-inputs
368 (list python-babel
369 python-pytest
370 python-pytest-mock
371 python-setuptools))
372 (propagated-inputs
373 (list python-certifi
374 python-click
375 python-markdown
376 python-pygobject
377 python-pyyaml
378 python-requests
379 python-requests-oauthlib))
380 (home-page "https://github.com/caronc/apprise")
381 (synopsis "Push notification library")
382 (description
383 "Apprise is a Python library that allows sending push notifications to a
384broad range of notification services, such as Telegram, Discord, Slack, Amazon
385SNS, Gotify, etc.")
386 (license license:bsd-2)))
387
388(define-public python-arxiv
389 (package
390 (name "python-arxiv")
391 (version "3.0.0")
392 (source
393 (origin
394 (method git-fetch)
395 (uri (git-reference
396 (url "https://github.com/lukasschwab/arxiv.py")
397 (commit version)))
398 (file-name (git-file-name name version))
399 (sha256
400 (base32 "18kn8q1lbql1w8jm5clla6za2zpijhs5hi2kpz41x5skps96lrd3"))))
401 (build-system pyproject-build-system)
402 (arguments
403 (list #:test-flags
404 #~(list "-k" ;to skip intenet connection tests
405 (string-append "not (TestAPIBugs "
406 "or TestClient "
407 "or TestResult "
408 "or TestDownload)"))))
409 (native-inputs
410 (list python-pytest
411 python-hatch-vcs
412 python-hatchling))
413 (propagated-inputs
414 (list python-feedparser
415 python-requests))
416 (home-page "https://github.com/lukasschwab/arxiv.py")
417 (synopsis "Python wrapper for the arXiv API")
418 (description "Python wrapper for the @code{arXiv} API.")
419 (license license:expat)))
420
421(define-public python-asyncudp
422 (package
423 (name "python-asyncudp")
424 (version "0.11.0")
425 (source
426 (origin
427 (method git-fetch)
428 (uri (git-reference
429 (url "https://github.com/eerimoq/asyncudp")
430 (commit version)))
431 (file-name (git-file-name name version))
432 (sha256
433 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
434 (build-system pyproject-build-system)
435 (native-inputs (list python-pytest python-setuptools))
436 (home-page (git-reference-url (origin-uri source)))
437 (synopsis "High level UDP sockets for asyncio")
438 (description
439 "This package provides a Python library offering high level UDP sockets
440for asyncio. Import it alongside asyncio and use its API to send and receive
441UDP packets.")
442 (license license:expat)))
443
444(define-public python-behave-web-api
445 (package
446 (name "python-behave-web-api")
447 (version "2.3.0")
448 (source
449 (origin
450 (method git-fetch)
451 (uri (git-reference
452 (url "https://github.com/jefersondaniel/behave-web-api")
453 (commit (string-append "v" version))))
454 (file-name (git-file-name name version))
455 (sha256
456 (base32 "1r8yx8gb5m599cpdqfvk6z9ax3qj26fpvczdr84z8jya0dxfch4p"))))
457 (build-system pyproject-build-system)
458 (native-inputs
459 (list python-pytest
460 python-setuptools))
461 (propagated-inputs
462 (list behave
463 python-requests))
464 (home-page "https://github.com/jefersondaniel/behave-web-api")
465 (synopsis "Provides testing for JSON APIs with Behave for Python")
466 (description "This package provides testing utility modules for testing
467JSON APIs with Behave.")
468 (license license:expat)))
469
470(define-public python-blacksheep
471 (package
472 (name "python-blacksheep")
473 (version "2.6.3")
474 (source
475 (origin
476 (method git-fetch)
477 (uri (git-reference
478 (url "https://github.com/Neoteroi/BlackSheep")
479 (commit (string-append "v" version))))
480 (file-name (git-file-name name version))
481 (sha256
482 (base32 "1k6yqsqnh6nnhi8z5v2yqpxs7qsk35zwd7gcr7cdh825f2vrl7js"))))
483 (build-system pyproject-build-system)
484 (arguments
485 (list
486 ;; tests: 1821 passed
487 ;;
488 ;; Run all unit tests, but do not run integration tests from `itests`
489 ;; directory.
490 #:test-flags
491 #~(list "tests")
492 #:phases
493 #~(modify-phases %standard-phases
494 (add-before 'build 'cythonize
495 (lambda _
496 (with-directory-excursion "blacksheep"
497 (for-each (lambda (file)
498 (invoke "cython" "-3" file "-I" "."))
499 (find-files "." ".*\\.pyx$"))))))))
500 (native-inputs
501 (list nss-certs-for-test
502 python-cython
503 python-defusedxml
504 python-flask
505 python-jinja2
506 python-pydantic
507 python-pyjwt
508 python-pytest
509 python-pytest-asyncio
510 python-setuptools
511 python-starlette))
512 (propagated-inputs
513 (list python-certifi
514 python-essentials
515 python-essentials-openapi
516 python-guardpost
517 python-httptools
518 python-rodi
519 python-itsdangerous))
520 (home-page "https://github.com/Neoteroi/BlackSheep")
521 (synopsis "Asynchronous framework to build event based web applications")
522 (description
523 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
524
525The framework offers
526@itemize
527@item A rich code API, based on dependency injection and inspired by Flask and
528ASP.NET Core.
529@item A typing-friendly codebase, which enables a comfortable development
530experience thanks to hints when coding with IDEs.
531@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
532and JSON.
533@item A cross-platform framework, using the most modern versions of Python.
534@item Good performance.
535@end itemize")
536 (license license:expat)))
537
538(define-public python-bleach
539 (package
540 (name "python-bleach")
541 (version "6.3.0")
542 (source
543 (origin
544 (method git-fetch)
545 (uri (git-reference
546 (url "https://github.com/mozilla/bleach")
547 (commit (string-append "v" version))))
548 (file-name (git-file-name name version))
549 (sha256
550 (base32 "02abk9ixn010sqpbdsd7nxms0gv4prwv6d3nplb8giq85lpn1kkb"))
551 (snippet
552 #~(begin
553 (use-modules (guix build utils))
554 (substitute* (find-files "." "\\.py$")
555 (("bleach\\._vendor\\.html5lib") "html5lib"))
556 (delete-file-recursively "bleach/_vendor/html5lib")))))
557 (build-system pyproject-build-system)
558 (arguments
559 (list
560 ;; tests: 448 passed, 1 deselected, 3 xfailed
561 #:test-flags
562 #~(list (string-append "--deselect=tests/test_clean.py::"
563 "test_self_closing_tags_self_close[wbr]"))
564 #:phases
565 #~(modify-phases %standard-phases
566 (add-after 'unpack 'relax-requirements
567 (lambda _
568 ;; "tinycss2>=1.1.0,<1.5"
569 ;; The 'sanity-check of python-nbclassic fails without this.
570 (substitute* "setup.py"
571 (("\"tinycss2.*") "")))))))
572 (native-inputs
573 (list python-pytest
574 python-setuptools))
575 (propagated-inputs
576 (list python-html5lib
577 python-tinycss2
578 python-webencodings))
579 (home-page "https://github.com/mozilla/bleach")
580 (synopsis "Whitelist-based HTML-sanitizing tool")
581 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
582 (license license:asl2.0)))
583
584(define-public python-cloudpathlib
585 (package
586 (name "python-cloudpathlib")
587 (version "0.23.0")
588 (source
589 (origin
590 (method git-fetch)
591 (uri (git-reference
592 (url "https://github.com/drivendataorg/cloudpathlib")
593 (commit (string-append "v" version))))
594 (file-name (git-file-name name version))
595 (sha256
596 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
597 (build-system pyproject-build-system)
598 (arguments
599 (list
600 ;; tests: 977 passed, 15 skipped, 8642 warnings
601 #:test-flags
602 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
603 ;; TODO: Package azure-identity (required for this file)
604 "--ignore=tests/test_azure_specific.py"
605 ;; TypeError: Retry.__init__() got an unexpected keyword
606 ;; argument 'timeout'
607 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")))
608 (native-inputs
609 (list ;; python-azure-identity
610 python-dotenv
611 python-flit-core
612 python-psutil
613 python-pydantic
614 python-pytest
615 python-pytest-cases
616 python-pytest-reportlog
617 python-pytest-xdist
618 python-shortuuid
619 python-tenacity))
620 (propagated-inputs
621 (list python-azure-storage-blob
622 python-azure-storage-file-datalake
623 python-boto3
624 python-google-cloud-storage
625 python-typing-extensions))
626 (home-page "https://github.com/drivendataorg/cloudpathlib")
627 (synopsis "Pathlib-style classes for cloud storage services")
628 (description
629 "This package provides a Python library with classes that mimic
630@code{pathlib.Path}'s interface for URIs from different cloud storage
631services.")
632 (license license:expat)))
633
634(define-public python-conda-package-handling
635 (package
636 (name "python-conda-package-handling")
637 (version "2.4.0")
638 (source
639 (origin
640 (method git-fetch)
641 (uri (git-reference
642 (url "https://github.com/conda/conda-package-handling/")
643 (commit version)))
644 (file-name (git-file-name name version))
645 (sha256
646 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
647 (build-system pyproject-build-system)
648 (native-inputs
649 (list python-bottle
650 python-mock
651 python-pytest-8
652 python-pytest-mock
653 python-setuptools))
654 (propagated-inputs
655 (list python-conda-package-streaming))
656 (home-page "https://conda.io")
657 (synopsis "Create and extract conda packages of various formats")
658 (description
659 "This library is an abstraction of Conda package handling and a tool for
660extracting, creating, and converting between formats.")
661 (license license:bsd-3)))
662
663(define-public python-conda-package-streaming
664 (package
665 (name "python-conda-package-streaming")
666 (version "0.12.0")
667 (source
668 (origin
669 (method url-fetch)
670 (uri (pypi-uri "conda_package_streaming" version))
671 (sha256
672 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
673 (build-system pyproject-build-system)
674 (arguments
675 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
676 (list #:tests? #f))
677 (native-inputs
678 (list python-flit-core))
679 (propagated-inputs
680 (list python-requests
681 python-zstandard))
682 (home-page "https://conda.github.io/conda-package-streaming/")
683 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
684 (description
685 "This package provides an efficient library to read from new and old format
686@code{.conda} and @code{.tar.bz2} conda packages.")
687 (license license:bsd-3)))
688
689(define-public python-dependency-groups
690 (package
691 (name "python-dependency-groups")
692 (version "1.3.1")
693 (source
694 (origin
695 (method url-fetch)
696 (uri (pypi-uri "dependency_groups" version))
697 (sha256
698 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
699 (build-system pyproject-build-system)
700 (propagated-inputs (list python-packaging python-tomli))
701 (native-inputs (list python-flit-core python-pytest))
702 (home-page "https://dependency-groups.readthedocs.io/")
703 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
704 (description
705 "This package provides a library which is able to parse dependency groups (PEP
706735), following includes, and provide that data as output.")
707 (license license:expat)))
708
709(define-public python-devpi-common
710 (package
711 (name "python-devpi-common")
712 (version "4.0.4")
713 (source
714 (origin
715 (method url-fetch)
716 (uri (pypi-uri "devpi_common" version))
717 (sha256
718 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
719 (build-system pyproject-build-system)
720 (propagated-inputs (list python-lazy python-packaging-legacy
721 python-requests))
722 (native-inputs
723 (list python-pytest
724 python-setuptools
725 python-wheel))
726 (home-page "https://github.com/devpi/devpi")
727 (synopsis
728 "Utilities jointly used by devpi-server, devpi-client and others")
729 (description
730 "This package provides utilities jointly used by devpi-server,
731devpi-client and others.")
732 (license license:expat)))
733
734(define-public python-devpi-client
735 (package
736 (name "python-devpi-client")
737 (version "7.2.0")
738 (source
739 (origin
740 (method url-fetch)
741 (uri (pypi-uri "devpi-client" version))
742 (sha256
743 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
744 (build-system pyproject-build-system)
745 (arguments
746 (list
747 #:test-flags
748 ;; This wants to use pip install
749 '(list "--ignore=testing/test_upload.py"
750 ;; These complain about finding distutils. It's not my fault,
751 ;; mate, setuptools is right there, but you won't pick it!
752 "--ignore=testing/test_list_remove.py"
753 "--ignore=testing/test_main.py"
754 "--ignore=testing/test_install.py"
755 "--ignore=testing/test_functional.py"
756 "--ignore=testing/test_test.py")
757 #:phases
758 '(modify-phases %standard-phases
759 (add-after 'unpack 'patch-tests
760 (lambda _
761 ;; Do not replace the directory name of the store item.
762 (substitute* "testing/conftest.py"
763 (("\"devpi-server\", \"devpi-init\"")
764 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
765 (add-before 'check 'set-HOME
766 ;; Some tests need this
767 (lambda _ (setenv "HOME" "/tmp"))))))
768 (propagated-inputs (list python-pypa-build
769 python-check-manifest
770 python-colorama
771 python-devpi-common
772 python-iniconfig
773 python-pkginfo
774 python-platformdirs
775 python-pluggy
776 python-pypitoken
777 python-tomli))
778 (native-inputs
779 (list python-devpi-server
780 python-pytest
781 python-setuptools
782 python-virtualenv))
783 (home-page "https://github.com/devpi/devpi")
784 (synopsis "Devpi upload/install/... commands for Python developers")
785 (description
786 "The devpi command line tool is typically used in conjunction with
787devpi-server. It allows uploading, testing and installing packages from devpi
788indexes.")
789 (license license:expat)))
790
791(define-public python-devpi-process
792 (package
793 (name "python-devpi-process")
794 (version "1.0.2")
795 (source
796 (origin
797 (method url-fetch)
798 (uri (pypi-uri "devpi_process" version))
799 (sha256
800 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
801 (build-system pyproject-build-system)
802 (arguments
803 (list
804 #:phases
805 '(modify-phases %standard-phases
806 (add-after 'unpack 'relax-requirements
807 (lambda _
808 ;; Our package is too old, sorry.
809 (substitute* "pyproject.toml"
810 (("typing-extensions>=4.12.2")
811 "typing-extensions>=4.10.0"))))
812 (add-after 'unpack 'patch-tool-locations
813 (lambda* (#:key inputs #:allow-other-keys)
814 (substitute* "src/devpi_process/__init__.py"
815 (("_exe\\(\"devpi-init\"\\)")
816 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
817 (("_exe\\(\"devpi-server\"\\)")
818 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
819 (("_exe\\(\"devpi\"\\)")
820 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
821 (propagated-inputs (list python-devpi-client python-devpi-server
822 python-typing-extensions))
823 (native-inputs
824 (list nss-certs-for-test
825 python-hatchling
826 python-hatch-vcs
827 python-httpx
828 python-pytest))
829 (home-page "https://github.com/devpi/devpi")
830 (synopsis "API to create and use a devpi server process")
831 (description
832 "This package provides a programmatic API to create and use a devpi
833server process.")
834 (license license:expat)))
835
836(define-public python-devpi-server
837 (package
838 (name "python-devpi-server")
839 (version "6.17.0")
840 (source
841 (origin
842 (method url-fetch)
843 (uri (pypi-uri "devpi_server" version))
844 (sha256
845 (base32 "13lybrw8j6zjxwvx6sk7bw6854hd2m18s1xcvl0q100j4n06p6ml"))))
846 (build-system pyproject-build-system)
847 (arguments
848 (list
849 #:test-flags
850 ;; These all fail with: "module 'py' has no attribute 'io'"
851 #~(list "--ignore=test_devpi_server/test_importexport.py"
852 "--ignore=test_devpi_server/test_main.py"
853 "--ignore=test_devpi_server/test_genconfig.py")
854 #:phases
855 #~(modify-phases %standard-phases
856 (add-after 'unpack 'relax-requirements
857 (lambda _
858 (substitute* "pyproject.toml"
859 ;; It straggles to check argon2 in passlib on any versions
860 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
861 ;; such extra feature 'argon2'",).
862 (("passlib\\[argon2\\]") "passlib")))))))
863 (propagated-inputs (list python-argon2-cffi
864 python-attrs
865 python-defusedxml
866 python-devpi-common
867 python-httpx
868 python-itsdangerous
869 python-lazy
870 python-legacy-cgi
871 python-passlib
872 python-platformdirs
873 python-pluggy
874 python-py
875 python-pyramid
876 python-repoze-lru
877 python-ruamel.yaml-0.16 ;FIXME: rename
878 python-strictyaml
879 python-waitress))
880 (native-inputs
881 (list python-execnet
882 python-pytest
883 python-pytest-asyncio
884 python-pytest-timeout
885 python-setuptools
886 python-webtest))
887 (home-page "https://devpi.net")
888 (synopsis "Pypi.org caching server")
889 (description "This package implements a reliable private and pypi.org
890caching server.")
891 (license license:expat)))
892
893(define-public python-dicomweb-client
894 (package
895 (name "python-dicomweb-client")
896 (version "0.60.0")
897 (source
898 (origin
899 (method git-fetch)
900 (uri (git-reference
901 (url "https://github.com/ImagingDataCommons/dicomweb-client")
902 (commit (string-append "v" version))))
903 (file-name (git-file-name name version))
904 (sha256
905 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
906 (build-system pyproject-build-system)
907 (arguments
908 (list
909 #:phases
910 #~(modify-phases %standard-phases
911 (add-after 'unpack 'remove-dynamic-versioning
912 (lambda _
913 (substitute* "pyproject.toml"
914 ;; Dynamic versioning via 'uv-dynamic-versioning' is
915 ;; not suitable for Guix.
916 (("dynamic = \\[\"version\"\\]")
917 (string-append "version = \""
918 #$version "\""))))))))
919 (native-inputs
920 (list python-hatchling
921 python-pytest
922 python-pytest-localserver))
923 (propagated-inputs
924 (list python-numpy
925 python-pillow
926 python-pydicom
927 python-requests
928 python-retrying))
929 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
930 (synopsis "Python client for DICOMweb RESTful services")
931 (description
932 "@code{dicomweb_client} provides client interfaces for DICOMweb RESTful
933services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
934DICOM objects over the web, respectively.")
935 (license license:expat)))
936
937(define-public python-docusign-esign
938 (package
939 (name "python-docusign-esign")
940 (version "5.0.0")
941 (source
942 (origin
943 (method url-fetch)
944 (uri (pypi-uri "docusign-esign" version))
945 (sha256
946 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
947 (build-system pyproject-build-system)
948 ;; Testing requires undocumented setup changes with network access to
949 ;; <demo.docusign.net>, and so testing is disabled here.
950 (arguments `(#:tests? #f))
951 (native-inputs
952 (list python-setuptools
953 python-wheel))
954 (propagated-inputs
955 (list python-certifi
956 python-dateutil
957 python-urllib3
958 python-pyjwt
959 python-cryptography))
960 (home-page "https://developers.docusign.com/")
961 (synopsis "DocuSign Python Client")
962 (description
963 "The Official DocuSign Python Client Library used to interact with the
964eSign REST API. Send, sign, and approve documents using this client.")
965 (license license:expat)))
966
967(define-public python-domain-connect
968 (package
969 (name "python-domain-connect")
970 (version "0.0.11")
971 (source
972 (origin
973 (method git-fetch) ;no tests in PyPI archive
974 (uri (git-reference
975 (url "https://github.com/Domain-Connect/domainconnect_python")
976 (commit (string-append "v" version))))
977 (file-name (git-file-name name version))
978 (sha256
979 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
980 (build-system pyproject-build-system)
981 (arguments
982 (list
983 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
984 ;; present in container.
985 #:tests? #f
986 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
987 (native-inputs
988 (list python-setuptools))
989 (propagated-inputs
990 (list python-cryptography
991 python-dnspython
992 python-future
993 python-publicsuffixlist))
994 (home-page "https://github.com/Domain-Connect/domainconnect_python")
995 (synopsis "Client library for Domain Connect protocol")
996 (description
997 "This package provides a Service Provider functionality in both Sync and
998Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
999 (license license:expat)))
1000
1001(define-public python-domain-connect-dyndns
1002 (package
1003 (name "python-domain-connect-dyndns")
1004 (version "0.0.9")
1005 (source
1006 (origin
1007 (method url-fetch)
1008 (uri (pypi-uri "domain-connect-dyndns" version))
1009 (sha256
1010 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
1011 (build-system pyproject-build-system)
1012 (arguments
1013 (list
1014 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
1015 ;; present in container.
1016 #:tests? #f
1017 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
1018 (native-inputs
1019 (list python-setuptools
1020 python-wheel))
1021 (propagated-inputs
1022 (list python-dnspython
1023 python-domain-connect
1024 python-requests
1025 python-validators))
1026 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
1027 (synopsis "Domain Connect Dynamic DNS in Python")
1028 ;; Project lacks meaningful description in README, see
1029 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
1030 (description
1031 "Python client library for Dynamic DNS using
1032@url{https://www.domainconnect.org/, Domain Connect} protocol.")
1033 (license license:expat)))
1034
1035(define-public python-dominate
1036 (package
1037 (name "python-dominate")
1038 (version "2.9.1")
1039 (source
1040 (origin
1041 (method git-fetch)
1042 (uri (git-reference
1043 (url "https://github.com/Knio/dominate")
1044 (commit version)))
1045 (file-name (git-file-name name version))
1046 (sha256
1047 (base32 "0kv5ly8w2026pwvgamfjxav1g58wmgim30nr9w9qfwcipfjxwn5c"))))
1048 (build-system pyproject-build-system)
1049 (native-inputs
1050 (list python-pytest
1051 python-setuptools))
1052 (home-page "https://github.com/Knio/dominate")
1053 (synopsis "Python library for creating and manipulating HTML documents")
1054 (description
1055 "Dominate is a Python library for creating and manipulating HTML
1056documents using an elegant DOM API.")
1057 (license license:lgpl3+)))
1058
1059(define-public python-dropbox
1060 (package
1061 (name "python-dropbox")
1062 (version "12.0.2")
1063 (source
1064 (origin
1065 (method git-fetch) ; no tests in PyPI release
1066 (uri (git-reference
1067 (url "https://github.com/dropbox/dropbox-sdk-python")
1068 (commit (string-append "v" version))))
1069 (file-name (git-file-name name version))
1070 (sha256
1071 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
1072 (build-system pyproject-build-system)
1073 (arguments
1074 (list
1075 #:test-flags
1076 #~(list "-k" (string-join
1077 ;; Network access is required.
1078 (list "not test_bad_auth"
1079 "test_app_auth"
1080 "test_bad_pins"
1081 "test_bad_pins_session"
1082 "test_downscope"
1083 "test_multi_auth"
1084 "test_path_root"
1085 "test_path_root_err"
1086 "test_refresh"
1087 "test_rpc"
1088 "test_team"
1089 "test_upload_download"
1090 "test_versioned_route")
1091 " and not "))
1092 #:phases
1093 #~(modify-phases %standard-phases
1094 (add-after 'unpack 'relax-requirements
1095 (lambda _
1096 (substitute* "setup.py"
1097 ;; 'stone>=2,<3.3.3',
1098 ((">=2,<3.3.3") ">=2,<3.4.0"))))
1099 (add-before 'check 'pre-check
1100 (lambda _
1101 ;; Otherwise tests setup erroring.
1102 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
1103 (setenv "LEGACY_USER_CLIENT_ID" "guix")
1104 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
1105 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
1106 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
1107 (setenv "SCOPED_USER_CLIENT_ID" "guix")
1108 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
1109 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
1110 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
1111 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
1112 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
1113 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
1114 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
1115 (native-inputs
1116 (list nss-certs-for-test
1117 python-mock
1118 python-pytest
1119 python-pytest-mock
1120 python-setuptools
1121 python-wheel))
1122 (propagated-inputs
1123 (list python-requests python-six python-stone))
1124 (home-page "https://www.dropbox.com/developers")
1125 (synopsis "Official Dropbox API Client")
1126 (description "This package provides a Python SDK for integrating with the
1127Dropbox API v2.")
1128 (license license:expat)))
1129
1130(define-public python-dukpy
1131 (package
1132 (name "python-dukpy")
1133 (version "0.5.1")
1134 (source
1135 (origin
1136 (method git-fetch)
1137 (uri (git-reference
1138 (url "https://github.com/amol-/dukpy")
1139 (commit version)))
1140 (file-name (git-file-name name version))
1141 (sha256
1142 (base32 "1qsqfgy12frrdikjf353bsvhln11jixc3qs9rc1zra55k0569036"))))
1143 (build-system pyproject-build-system)
1144 (arguments
1145 (list
1146 #:test-flags
1147 #~(list #$@(map (lambda (test)
1148 (string-append "--deselect=tests/test_installer.py"
1149 "::TestPackageInstaller::"
1150 test))
1151 ;; Network access is required.
1152 (list "test_install_command"
1153 "test_install_command_latest_ver"
1154 "test_install_command_substrate_error"
1155 "test_install_command_without_dest"
1156 "test_install_react"
1157 "test_install_scoped_package"
1158 "test_install_unexisting_package"
1159 "test_install_unexisting_version")))))
1160 (native-inputs
1161 (list python-mock
1162 python-pytest
1163 python-setuptools
1164 python-webassets))
1165 (home-page "https://github.com/amol-/dukpy")
1166 (synopsis "Simple JavaScript interpreter for Python")
1167 (description
1168 "DukPy is a simple JavaScript interpreter for Python built on top of
1169duktape engine without any external dependency. It comes with a bunch of
1170common transpilers built-in for convenience:
1171@itemize
1172@item CoffeeScript
1173@item BabelJS
1174@item TypeScript
1175@item JSX
1176@item LESS
1177@end itemize")
1178 (license license:expat)))
1179
1180(define-public python-essentials-openapi
1181 (package
1182 (name "python-essentials-openapi")
1183 (version "1.2.1")
1184 (source
1185 (origin
1186 (method git-fetch)
1187 (uri (git-reference
1188 (url "https://github.com/Neoteroi/essentials-openapi")
1189 (commit (string-append "v" version))))
1190 (file-name (git-file-name name version))
1191 (sha256
1192 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
1193 (build-system pyproject-build-system)
1194 (native-inputs
1195 (list python-flask
1196 python-hatchling
1197 python-pydantic
1198 python-pytest
1199 python-rich))
1200 (propagated-inputs
1201 (list python-essentials
1202 python-httpx
1203 python-jinja2
1204 python-markupsafe
1205 python-pyyaml))
1206 (home-page "https://github.com/Neoteroi/essentials-openapi/")
1207 (synopsis "Generator for OpenAPI Documentation")
1208 (description
1209 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
1210formats. Generator for other kinds of documents from OpenAPI Documentation
1211files.")
1212 (license license:expat)))
1213
1214(define-public python-eventlet
1215 (package
1216 (name "python-eventlet")
1217 (version "0.40.4")
1218 (source
1219 (origin
1220 (method url-fetch)
1221 (uri (pypi-uri "eventlet" version))
1222 (sha256
1223 (base32
1224 "0vzjrb7n3x7gdrxiw4dacdxvz0m8saaw9w7n1n9v865yn49gggk9"))))
1225 (build-system pyproject-build-system)
1226 (arguments
1227 (list
1228 #:test-flags
1229 '(list "-k"
1230 (string-append
1231 "not TestGetaddrinfo"
1232 " and not TestProxyResolver"
1233 " and not test_noraise_dns_tcp"
1234 " and not test_raise_dns_tcp"
1235 " and not test_hosts_no_network"
1236 " and not test_import_rdtypes_then_eventlet"
1237 " and not test_patcher_existing_locks"
1238 " and not test_dns_methods_are_green"))
1239 #:phases
1240 #~(modify-phases %standard-phases
1241 (add-after 'unpack 'avoid-OSError
1242 (lambda _
1243 ;; If eventlet tries to load greendns, an OSError is thrown when
1244 ;; getprotobyname is called. Thankfully there is an environment
1245 ;; variable to disable the greendns import, so use it. Note that
1246 ;; this error is propagated to child packages too, so enforce the
1247 ;; changed default.
1248 (substitute* "eventlet/green/socket.py"
1249 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
1250 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")")))))))
1251 (native-inputs
1252 (list python-hatchling
1253 python-hatch-vcs
1254 python-pytest))
1255 (propagated-inputs
1256 (list python-dnspython python-greenlet))
1257 (home-page "https://eventlet.net")
1258 (synopsis "Concurrent networking library for Python")
1259 (description
1260 "Eventlet is a concurrent networking library for Python that
1261allows you to change how you run your code, not how you write it.
1262It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1263Coroutines ensure that the developer uses a blocking style of programming
1264that is similar to threading, but provide the benefits of non-blocking I/O.
1265The event dispatch is implicit, which means you can easily use @code{Eventlet}
1266from the Python interpreter, or as a small part of a larger application.
1267
1268Note: In Guix, this package assumes the environment variable
1269@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
1270to anything else.")
1271 (license license:expat)))
1272
1273(define-public python-feedgen
1274 (package
1275 (name "python-feedgen")
1276 (version "1.0.0")
1277 (source
1278 (origin
1279 (method git-fetch)
1280 (uri (git-reference
1281 (url "https://github.com/lkiesow/python-feedgen")
1282 (commit (string-append "v" version))))
1283 (file-name (git-file-name name version))
1284 (sha256
1285 (base32
1286 "1ppwxp9yck29pk2p2dlrrad6rz16l9h4fhcajp9yb7ns94fm5v3l"))))
1287 (build-system pyproject-build-system)
1288 (propagated-inputs
1289 (list python-dateutil
1290 python-lxml))
1291 (native-inputs
1292 (list python-pytest
1293 python-setuptools))
1294 (home-page "https://feedgen.kiesow.be")
1295 (synopsis "Atom and RSS feed generator")
1296 (description
1297 "This module can be used to generate web feeds in both Atom and RSS
1298format. It also extensible and comes with an extension to produce podcasts.")
1299 ;; The README says that this package is released under both licenses, and
1300 ;; permits the user to choose whichever is more convenient to them.
1301 (license (list license:bsd-2
1302 license:lgpl3+))))
1303
1304(define-public python-flask-caching
1305 (package
1306 (name "python-flask-caching")
1307 (version "2.3.1")
1308 (source
1309 (origin
1310 (method url-fetch)
1311 (uri (pypi-uri "flask_caching" version))
1312 (sha256
1313 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
1314 (build-system pyproject-build-system)
1315 (arguments
1316 (list
1317 #:test-flags
1318 ;; Tests requiring running Redis or dated python-cache.
1319 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
1320 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
1321 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
1322 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
1323 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
1324 "-k" "not test_client_override_reflected_on_cachelib_methods")))
1325 (native-inputs
1326 (list python-pytest
1327 python-pytest-asyncio
1328 python-pytest-xprocess
1329 python-setuptools))
1330 (propagated-inputs
1331 (list python-cachelib
1332 python-flask))
1333 (home-page "https://github.com/pallets-eco/flask-caching")
1334 (synopsis "Caching extension for Flask")
1335 (description
1336 "This package provides a caching support to Flask applications, it's a
1337fort ok https://github.com/thadeusb/flask-cache.")
1338 (license license:bsd-3)))
1339
1340(define-public python-flask-paginate
1341 (package
1342 (name "python-flask-paginate")
1343 (version "2024.4.12")
1344 (source
1345 (origin
1346 (method git-fetch)
1347 (uri (git-reference
1348 (url "https://github.com/lixxu/flask-paginate")
1349 (commit (string-append "v" version))))
1350 (file-name (git-file-name name version))
1351 (sha256
1352 (base32 "1q4ajwk0pzc6934g07gdryjcwi6rd9iqcwv5g5s718dfx2bj1831"))))
1353 (arguments
1354 (list #:test-backend #~'custom
1355 #:test-flags #~(list "tests/tests.py")))
1356 (build-system pyproject-build-system)
1357 (native-inputs
1358 (list python-pytest
1359 python-setuptools))
1360 (propagated-inputs
1361 (list python-flask))
1362 (home-page "https://github.com/lixxu/flask-paginate")
1363 (synopsis "Simple paginate support for Flask")
1364 (description
1365 "Flask-paginate is a simple pagination extension for Flask which is
1366inspired by Ruby's will_paginate library. It supports several CSS frameworks.")
1367 (license license:bsd-3)))
1368
1369(define-public python-flask-limiter
1370 (package
1371 (name "python-flask-limiter")
1372 (version "4.1.1")
1373 (source
1374 (origin
1375 (method git-fetch)
1376 (uri (git-reference
1377 (url "https://github.com/alisaifee/flask-limiter")
1378 (commit version)))
1379 (file-name (git-file-name name version))
1380 (sha256
1381 (base32 "18n12iayzw6qqys26824j5lfbphfcammpmyrvys1k0rn4xcbifln"))))
1382 (build-system pyproject-build-system)
1383 (arguments
1384 (list
1385 ;; tests: 155 passed, 620 deselected
1386 #:test-flags
1387 #~(list "-k" (simple-format #f "not (~a)"
1388 (string-join
1389 (append
1390 ;; The test suite spawns storages in Docker.
1391 '("memcache" "reset_unsupported")
1392 '("mongo")
1393 '("redis" "clear_limits"
1394 "constructor_arguments_over_config"
1395 "custom_key_prefix" "fallback_to_memory"))
1396 " or ")))
1397 #:phases
1398 #~(modify-phases %standard-phases
1399 (add-before 'check 'adjust-tests
1400 (lambda _
1401 (substitute* "pytest.ini"
1402 ((".*--cov=.*") ""))
1403 (substitute* (find-files "tests" "\\.py$")
1404 (("import pymemcache.*") "")
1405 (("import pymongo.*") "")
1406 (("import redis.*") "")))))))
1407 (native-inputs (list python-flask-restful
1408 python-hatch-vcs
1409 python-hatchling
1410 python-hiro
1411 python-pytest
1412 python-pytest-check
1413 python-pytest-mock))
1414 (propagated-inputs (list python-flask
1415 python-limits
1416 python-ordered-set
1417 python-rich))
1418 (home-page "https://flask-limiter.readthedocs.org/")
1419 (synopsis "Rate limiting for Flask applications")
1420 (description
1421 "Flask-Limiter adds rate limiting to Flask applications.
1422Rate limits can be configured at different levels such as:
1423
1424@itemize
1425@item Application wide global limits per user
1426@item Default limits per route
1427@item By blueprints
1428@item By class-based views
1429@item By individual routes
1430@end itemize")
1431 (license license:expat)))
1432
1433(define-public python-gdown
1434 (package
1435 (name "python-gdown")
1436 (version "5.2.0")
1437 (source
1438 (origin
1439 (method url-fetch)
1440 (uri (pypi-uri "gdown" version))
1441 (sha256
1442 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
1443 (build-system pyproject-build-system)
1444 (arguments (list #:tests? #f)) ;network access is required
1445 (native-inputs
1446 (list python-hatch-fancy-pypi-readme
1447 python-hatch-vcs
1448 python-hatchling))
1449 (propagated-inputs
1450 (list python-beautifulsoup4
1451 python-filelock
1452 python-requests
1453 python-tqdm))
1454 (home-page "https://github.com/wkentaro/gdown")
1455 (synopsis "Google Drive Public File/Folder Downloader")
1456 (description
1457 "This package implements a functionality to download large files
1458recursively from Google Drive with option to filter them by file
1459formats (PDF/XML/CSV).")
1460 (license license:expat)))
1461
1462(define-public python-globus-sdk
1463 (package
1464 (name "python-globus-sdk")
1465 (version "4.4.0")
1466 (source
1467 (origin
1468 (method git-fetch)
1469 (uri (git-reference
1470 (url "https://github.com/globus/globus-sdk-python")
1471 (commit version)))
1472 (file-name (git-file-name name version))
1473 (sha256
1474 (base32 "1d0zw9dkpdhsf9zdg3nk6b55gqwzc3v2rj76nj7999hjmq8350vh"))))
1475 (build-system pyproject-build-system)
1476 (arguments
1477 (list
1478 #:phases
1479 #~(modify-phases %standard-phases
1480 (add-before 'check 'pre-check
1481 (lambda _ (setenv "HOME" "/tmp"))))))
1482 (native-inputs
1483 (list python-flaky
1484 python-pytest
1485 python-pytest-randomly
1486 python-responses
1487 python-setuptools))
1488 (propagated-inputs
1489 (list python-cryptography
1490 python-importlib-resources
1491 python-pyjwt
1492 python-requests))
1493 (home-page "https://github.com/globus/globus-sdk-python")
1494 (synopsis "Globus SDK for Python")
1495 (description
1496 "This package provides a SDK for convenient Pythonic interface to
1497@url{https://www.globus.org/, Globus} APIs.")
1498 (license license:asl2.0)))
1499
1500(define-public python-guardpost
1501 (package
1502 (name "python-guardpost")
1503 (version "1.0.4")
1504 (source
1505 (origin
1506 (method git-fetch)
1507 (uri (git-reference
1508 (url "https://github.com/Neoteroi/guardpost")
1509 (commit (string-append "v" version))))
1510 (file-name (git-file-name name version))
1511 (sha256
1512 (base32 "1xsakqn36g2h1s5rnbaf1lasx1jn4skqhmb8kdl1k4pgxp5sczyy"))))
1513 (build-system pyproject-build-system)
1514 (arguments
1515 (list
1516 ;; Possible timing issue, see:
1517 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
1518 #:test-flags '(list "--ignore=tests/test_jwts.py")))
1519 (native-inputs
1520 (list python-flask
1521 python-hatchling
1522 python-pytest
1523 python-pytest-asyncio))
1524 (propagated-inputs
1525 (list python-rodi
1526 ;; [optional]
1527 python-cryptography
1528 python-essentials
1529 python-pyjwt))
1530 (home-page "https://github.com/Neoteroi/GuardPost/")
1531 (synopsis
1532 "Authentication and authorization framework for Python applications")
1533 (description
1534 "GuardPost is a framework to handle authentication and
1535authorization in asynchronous Python applications.
1536
1537Its features include
1538
1539@itemize
1540@item Strategy to implement authentication.
1541@item Strategy to implement authorization.
1542@item Support for dependency injection
1543@item Built-in support for JSON Web Tokens (JWTs) authentication.
1544@end itemize")
1545 (license license:expat)))
1546
1547(define-public python-habanero
1548 (package
1549 (name "python-habanero")
1550 (version "2.3.0")
1551 (source
1552 (origin
1553 (method git-fetch)
1554 (uri (git-reference
1555 (url "https://github.com/sckott/habanero")
1556 (commit (string-append "v" version))))
1557 (file-name (git-file-name name version))
1558 (sha256
1559 (base32 "1a842izcc8l4wb8004v92zsq1h4yc7qc2wi9am6x0f7idlx993sw"))))
1560 (build-system pyproject-build-system)
1561 (arguments
1562 ;; Run only a small portion of unit tests without network access
1563 ;; requirement.
1564 (list #:test-flags #~(list "test/test-filters.py")))
1565 (native-inputs
1566 (list python-hatchling
1567 python-pytest))
1568 (propagated-inputs
1569 (list python-httpx
1570 python-packaging
1571 python-tqdm
1572 python-urllib3))
1573 (home-page "https://github.com/sckott/habanero")
1574 (synopsis "Low Level Client for Crossref Search API")
1575 (description
1576 "Low Level Client for
1577@url{https://api.crossref.org/swagger-ui/index.html, Crossref Search API}.")
1578 (license license:expat)))
1579
1580(define-public python-hookdns
1581 (package
1582 (name "python-hookdns")
1583 (version "2.0.0")
1584 (source
1585 (origin
1586 (method url-fetch)
1587 (uri (pypi-uri "hookdns" version))
1588 (sha256
1589 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
1590 (build-system pyproject-build-system)
1591 (arguments
1592 (list
1593 #:test-flags
1594 #~(list "-k" (string-join
1595 ;; Tests requiring networking.
1596 (list
1597 "not test_patch_contextmanager_with_another_hostname"
1598 "test_patch_contextmanager_with_another_hostname_ipv6"
1599 "test_patch_contextmanager_with_ipv4"
1600 "test_patch_contextmanager_with_name"
1601 "test_patch_contextmanager_with_public_fqdn_and_"
1602 "test_patch_contextmanager_with_unknown_hostname"
1603 "test_patch_decorator_with_another_hostname"
1604 "test_patch_decorator_with_another_hostname_ipv6"
1605 "test_patch_decorator_with_ipv4"
1606 "test_patch_decorator_with_name"
1607 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
1608 "test_patch_decorator_with_unknown_hostname"
1609 "test_real_getaddrinfo_with_name_ipv6"
1610 "test_real_getaddrinfo_with_public_fqdn_ipv4"
1611 "test_real_getaddrinfo_with_public_fqdn_ipv6"
1612 "test_real_gethostbyname_ex_with_public_fqdn"
1613 "test_real_gethostbyname_with_public_fqdn"
1614 "test_real_requests_ip"
1615 "test_real_requests_name"
1616 "test_real_requests_with_public_fqdn"
1617 "test_reentrant")
1618 " and not "))))
1619 (native-inputs
1620 (list python-pytest
1621 python-requests
1622 python-setuptools
1623 python-wheel))
1624 (home-page "https://github.com/cle-b/hookdns")
1625 (synopsis "DNS resolution customization library")
1626 (description
1627 "HookDNS implements functionality that allows for modifying name
1628resolution in a Python script without any changes to the hosts file or the use
1629of a fake DNS resolver.")
1630 (license license:asl2.0)))
1631
1632(define-public python-httpretty
1633 (package
1634 (name "python-httpretty")
1635 (version "1.1.4")
1636 (source
1637 (origin
1638 (method url-fetch)
1639 (uri (pypi-uri "httpretty" version))
1640 (sha256
1641 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
1642 (build-system pyproject-build-system)
1643 (arguments
1644 (list
1645 #:test-flags
1646 ;; Only run Unit tests.
1647 #~(list "--ignore=tests/bugfixes"
1648 "--ignore=tests/functional"
1649 "--ignore=tests/pyopenssl"
1650 "-k" (string-join
1651 ;; Tests pattern failing with one of these errors:
1652 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
1653 ;; has no attribute 'should'
1654 ;; AttributeError: 'function' object has no attribute
1655 ;; 'when'
1656 ;; AttributeError: 'AssertionBuilder' object has no
1657 ;; attribute 'should_not'
1658 (list "not fake_socket_passes_through"
1659 "fakesock_socket"
1660 "request_parse_body_when"
1661 "test_Entry_class_normalizes_headers"
1662 "test_has_request"
1663 "test_httpretty_should_raise_proper"
1664 "test_parse_request_line_connect"
1665 "test_request_parse_querystring"
1666 "test_request_string_representation"
1667 "test_request_stubs_internals")
1668 " and not "))))
1669 (native-inputs
1670 (list nss-certs-for-test
1671 python-freezegun
1672 python-mock
1673 python-pytest
1674 python-setuptools
1675 python-sure
1676 python-wheel))
1677 (home-page "https://httpretty.readthedocs.io")
1678 (synopsis "HTTP client mock for Python")
1679 (description
1680 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
1681@code{fakeweb}.")
1682 (license license:expat)))
1683
1684(define-public python-justhtml
1685 (package
1686 (name "python-justhtml")
1687 (version "1.13.0")
1688 (source
1689 (origin
1690 (method git-fetch)
1691 (uri (git-reference
1692 (url "https://github.com/emilstenstrom/justhtml")
1693 (commit (string-append "v" version))))
1694 (file-name (git-file-name name version))
1695 (sha256
1696 (base32 "1hy5w3lr08sj3pivs46nnlfsvrd9ynmicxcrjk4sxbpg7411lyj5"))))
1697 (build-system pyproject-build-system)
1698 (native-inputs
1699 (list python-hatchling))
1700 (home-page "https://github.com/emilstenstrom/justhtml")
1701 (synopsis "Pure Python HTML5 parser")
1702 (description
1703 "JustHTML is a pure Python HTML5 parser. It has a simple API and does
1704not require C extensions or system dependencies.")
1705 (license license:expat)))
1706
1707(define-public python-huggingface-hub
1708 (package
1709 (name "python-huggingface-hub")
1710 (version "0.31.4")
1711 (source
1712 (origin
1713 (method git-fetch)
1714 (uri (git-reference
1715 (url "https://github.com/huggingface/huggingface_hub")
1716 (commit (string-append "v" version))))
1717 (file-name (git-file-name name version))
1718 (sha256
1719 (base32 "1rjkrmvvyzxlbnbndrg4v9qq39grn46c26zrdjgpf114gci5pwap"))))
1720 (build-system pyproject-build-system)
1721 (arguments
1722 (list
1723 #:test-flags
1724 ;; We don't have sentence_transformers...
1725 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
1726 ;; ...nor do we have InquirerPy...
1727 "--ignore=tests/test_command_delete_cache.py"
1728 ;; ...or timm...
1729 "--ignore=contrib/timm/test_timm.py"
1730 ;; ...or spacy_huggingface_hub
1731 "--ignore=contrib/spacy/test_spacy.py"
1732 ;; These all require internet access
1733 "--ignore=tests/test_cache_no_symlinks.py"
1734 "--ignore=tests/test_cache_layout.py"
1735 "--ignore=tests/test_commit_scheduler.py"
1736 "--ignore=tests/test_file_download.py"
1737 "--ignore=tests/test_hf_api.py"
1738 "--ignore=tests/test_hf_file_system.py"
1739 "--ignore=tests/test_inference_api.py"
1740 "--ignore=tests/test_inference_async_client.py"
1741 "--ignore=tests/test_inference_client.py"
1742 "--ignore=tests/test_inference_text_generation.py"
1743 "--ignore=tests/test_login_utils.py"
1744 "--ignore=tests/test_offline_utils.py"
1745 "--ignore=tests/test_repocard.py"
1746 "--ignore=tests/test_repository.py"
1747 "--ignore=tests/test_snapshot_download.py"
1748 "--ignore=tests/test_utils_cache.py"
1749 "--ignore=tests/test_utils_git_credentials.py"
1750 "--ignore=tests/test_utils_http.py"
1751 "--ignore=tests/test_utils_pagination.py"
1752 "--ignore=tests/test_webhooks_server.py"
1753 "-k" (string-append
1754 "not test_push_to_hub"
1755 " and not test_from_pretrained_model_id_only"
1756 " and not test_from_pretrained_model_id_and_revision"
1757 ;; These all require internet access
1758 " and not test_auth"
1759 " and not test_oauth"
1760 " and not test_utils_sha"
1761 " and not test_inference_providers"
1762 " and not test_xet"))
1763 #:phases
1764 '(modify-phases %standard-phases
1765 (add-before 'check 'pre-check
1766 ;; Some tests need to write to HOME.
1767 (lambda _ (setenv "HOME" "/tmp"))))))
1768 (propagated-inputs
1769 (list python-filelock
1770 python-fsspec
1771 python-packaging
1772 python-pyyaml
1773 python-requests
1774 python-tqdm
1775 python-typing-extensions))
1776 (native-inputs
1777 (list python-aiohttp
1778 python-fastapi
1779 python-jedi
1780 python-jinja2
1781 python-numpy
1782 python-pillow
1783 python-pydantic
1784 python-pytest
1785 python-pytest-asyncio
1786 python-pytest-env
1787 python-pytest-mock
1788 python-pytest-rerunfailures
1789 python-pytest-vcr
1790 python-pytest-xdist
1791 python-setuptools
1792 python-types-requests
1793 python-types-toml
1794 python-types-urllib3
1795 python-typing-extensions
1796 python-urllib3
1797 python-wheel))
1798 (home-page "https://huggingface.co/docs/huggingface_hub/")
1799 (synopsis "Client library for accessing the huggingface.co hub")
1800 (description
1801 "This package provides a client library to download and publish models,
1802datasets and other repos on the @url{huggingface.co} hub.")
1803 (license license:asl2.0)))
1804
1805(define-public python-kubernetes
1806 (package
1807 (name "python-kubernetes")
1808 (version "35.0.0")
1809 (source
1810 (origin
1811 (method url-fetch)
1812 (uri (pypi-uri "kubernetes" version))
1813 (sha256
1814 (base32 "1vh9bzq175fzv9av3v37lcfh37yzss2d9vxrb0a84fa2ji2d601x"))))
1815 (build-system pyproject-build-system)
1816 (arguments
1817 (list
1818 #:test-flags
1819 #~(list
1820 ;; The following tests expect a local running Kubernetes cluster.
1821 "--ignore=kubernetes/e2e_test"
1822 "--ignore=kubernetes/dynamic")))
1823 (native-inputs
1824 (list python-pytest
1825 python-setuptools))
1826 (propagated-inputs
1827 (list python-certifi
1828 python-dateutil
1829 python-durationpy
1830 python-google-auth
1831 python-pyyaml
1832 python-requests
1833 python-requests-oauthlib
1834 python-six ;XXX: hard dependency
1835 python-urllib3
1836 python-websocket-client))
1837 (home-page "https://github.com/kubernetes-client/python")
1838 (synopsis "Python client for Kubernetes")
1839 (description
1840 "This package provides an official Python client library for
1841@url{http://kubernetes.io, Kubernetes}.")
1842 (license license:asl2.0)))
1843
1844(define-public python-lazr-restfulclient
1845 (package
1846 (name "python-lazr-restfulclient")
1847 (version "0.14.6")
1848 (source
1849 (origin
1850 (method url-fetch)
1851 (uri (pypi-uri "lazr.restfulclient" version))
1852 (sha256
1853 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
1854 (build-system pyproject-build-system)
1855 (arguments
1856 (list
1857 #:phases
1858 #~(modify-phases %standard-phases
1859 ;; Disable part of the test suite to avoid the lazr.authentication
1860 ;; requirement, which requires 'oauth', a Python 2 only library.
1861 (add-after 'unpack 'remove-some-checks
1862 (lambda _
1863 (with-directory-excursion "src/lazr/restfulclient/tests"
1864 (for-each delete-file '("test_oauth.py" "test_docs.py")))
1865 (substitute* "setup.py"
1866 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
1867 ""))))
1868 (replace 'check
1869 (lambda* (#:key tests? #:allow-other-keys)
1870 (if tests?
1871 (invoke "zope-testrunner" "--test-path=src")
1872 (format #t "test suite not run~%")))))))
1873 (native-inputs
1874 (list python-setuptools
1875 python-testtools
1876 python-wheel
1877 python-wsgi-intercept
1878 python-zope-testrunner))
1879 (propagated-inputs
1880 (list python-distro
1881 python-httplib2
1882 python-oauthlib
1883 python-pyparsing
1884 python-setuptools
1885 python-six
1886 python-wadllib))
1887 (home-page "https://launchpad.net/lazr.restfulclient")
1888 (synopsis "Web client Python library extending wadlib")
1889 (description "This package provides a programmable client library that
1890adds functionality on top of @code{wadlib}.")
1891 (license license:lgpl3+)))
1892
1893(define-public python-launchpadlib
1894 (package
1895 (name "python-launchpadlib")
1896 (version "2.1.0")
1897 (source
1898 (origin
1899 (method url-fetch)
1900 (uri (pypi-uri "launchpadlib" version))
1901 (sha256
1902 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
1903 (build-system pyproject-build-system)
1904 (arguments
1905 (list #:phases #~(modify-phases %standard-phases
1906 (add-before 'check 'set-home
1907 (lambda _
1908 ;; Tests require a writable home.
1909 (setenv "HOME" "/tmp"))))))
1910 (propagated-inputs
1911 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
1912 (native-inputs (list python-pytest python-testresources python-wadllib
1913 python-setuptools python-wheel))
1914 (home-page "https://documentation.ubuntu.com/launchpad")
1915 (synopsis "Python client library for Launchpad's web service")
1916 (description "@code{launchpadlib} is a Python library that allows
1917scripting Launchpad via its the web service API.")
1918 (license license:lgpl3+)))
1919
1920(define-public python-lazr-uri
1921 (package
1922 (name "python-lazr-uri")
1923 (version "1.0.7")
1924 (source
1925 (origin
1926 (method url-fetch)
1927 (uri (pypi-uri "lazr_uri" version))
1928 (sha256
1929 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
1930 (build-system pyproject-build-system)
1931 (arguments
1932 (list
1933 #:phases
1934 #~(modify-phases %standard-phases
1935 (replace 'check
1936 (lambda* (#:key tests? #:allow-other-keys)
1937 (if tests?
1938 (invoke "zope-testrunner" "--test-path=src")
1939 (format #t "test suite not run~%")))))))
1940 (native-inputs (list python-setuptools python-zope-testrunner))
1941 (home-page "https://launchpad.net/lazr.uri")
1942 (synopsis "Python URI manipulation library")
1943 (description "This Python package provides a self-contained, easily
1944reusable library for parsing, manipulating, and generating URIs.")
1945 (license license:lgpl3)))
1946
1947(define-public python-ldaptor
1948 (package
1949 (name "python-ldaptor")
1950 (version "21.2.0")
1951 (source
1952 (origin
1953 (method url-fetch)
1954 (uri (pypi-uri "ldaptor" version))
1955 (sha256
1956 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
1957 (build-system pyproject-build-system)
1958 (arguments
1959 (list
1960 #:test-flags
1961 #~(list "-m" "twisted.trial"
1962 (string-append "-j" (number->string (parallel-job-count)))
1963 "ldaptor")
1964 #:phases
1965 #~(modify-phases %standard-phases
1966 (add-after 'unpack 'python-3.12-patch
1967 (lambda _
1968 (substitute* "ldaptor/config.py"
1969 (("SafeConfigParser")
1970 "ConfigParser"))))
1971 (add-before 'check 'disable-failing-tests
1972 (lambda _
1973 ;; Testing with Twisted 22.4 results in infinite loop creating
1974 ;; temporary config files, see
1975 ;; <https://github.com/twisted/ldaptor/issues/238>.
1976 (delete-file "ldaptor/test/test_config.py")))
1977 (replace 'check
1978 (lambda* (#:key tests? test-flags #:allow-other-keys)
1979 (when tests?
1980 (apply invoke "python" test-flags)))))))
1981 (native-inputs
1982 (list python-setuptools
1983 python-wheel))
1984 (propagated-inputs
1985 (list python-passlib
1986 python-pyopenssl
1987 python-service-identity ; to pass sanity check, for Twisted[tls]
1988 python-pyparsing
1989 python-twisted
1990 python-zope-interface))
1991 (home-page "https://github.com/twisted/ldaptor")
1992 (synopsis "Pure-Python Twisted library for LDAP")
1993 (description
1994 "This package provides a Python Twisted library for LDAP, which key
1995feaatures are:
1996@itemize
1997@item LDAP client logic
1998@item separately-accessible LDAP and BER protocol message generation/parsing
1999@item ASCII-format LDAP filter generation and parsing
2000@item LDIF format data generation
2001@item Samba password changing logic
2002@end itemize")
2003 (license license:expat)))
2004
2005(define-public python-legacy-cgi
2006 (package
2007 (name "python-legacy-cgi")
2008 (version "2.6.1")
2009 (source
2010 (origin
2011 (method url-fetch)
2012 (uri (pypi-uri "legacy_cgi" version))
2013 (sha256
2014 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
2015 (build-system pyproject-build-system)
2016 (native-inputs (list python-poetry-core python-pytest))
2017 (home-page "https://github.com/jackrosenthal/legacy-cgi")
2018 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
2019 (description
2020 "This is a fork of the standard library modules @code{cgi} and
2021@code{cgitb}. They are slated to be removed from the Python standard library
2022in Python 3.13 by PEP-594.")
2023 (license license:psfl)))
2024
2025(define-public python-librouteros
2026 (package
2027 (name "python-librouteros")
2028 (version "4.0.0")
2029 (source
2030 (origin
2031 (method git-fetch)
2032 (uri (git-reference
2033 (url "https://github.com/luqasz/librouteros")
2034 (commit version)))
2035 (file-name (git-file-name name version))
2036 (sha256
2037 (base32 "0in952b2idb5j8v6sxfm21gqbr5i5776w5ir0hdsxjrl2f29305v"))))
2038 (build-system pyproject-build-system)
2039 (arguments
2040 (list
2041 #:build-backend "hatchling.build"
2042 #:test-flags
2043 #~(list "tests/unit")))
2044 (native-inputs
2045 (list python-hatchling
2046 python-pytest
2047 python-pytest-asyncio
2048 python-stamina))
2049 (home-page "https://github.com/luqasz/librouteros")
2050 (synopsis "Python implementation of MikroTik RouterOS API")
2051 (description
2052 "This package implements MikroTik's @code{RouterOS} API.")
2053 (license license:gpl2+)))
2054
2055(define-public python-opentelemetry-api
2056 (package
2057 (name "python-opentelemetry-api")
2058 (version "1.37.0")
2059 (source
2060 (origin
2061 (method url-fetch)
2062 (uri (pypi-uri "opentelemetry_api" version))
2063 (sha256
2064 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
2065 (build-system pyproject-build-system)
2066 (propagated-inputs (list python-importlib-metadata
2067 python-typing-extensions))
2068 (native-inputs (list python-hatchling
2069 python-opentelemetry-test-utils-bootstrap))
2070 (home-page "https://opentelemetry.io/docs/languages/python/")
2071 (synopsis "OpenTelemetry Python API")
2072 (description "@code{OpenTelemetry} Python API.")
2073 (license license:asl2.0)))
2074
2075(define-public python-opentelemetry-api-bootstrap
2076 (hidden-package
2077 (package/inherit python-opentelemetry-api
2078 (name "python-opentelemetry-api-bootstrap")
2079 (arguments
2080 (list
2081 #:tests? #f))
2082 (native-inputs (list python-hatchling)))))
2083
2084(define-public python-opentelemetry-sdk
2085 (package
2086 (name "python-opentelemetry-sdk")
2087 (version "1.37.0")
2088 (source
2089 (origin
2090 (method url-fetch)
2091 (uri (pypi-uri "opentelemetry_sdk" version))
2092 (sha256
2093 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
2094 (build-system pyproject-build-system)
2095 (propagated-inputs (list python-opentelemetry-api
2096 python-opentelemetry-semantic-conventions
2097 python-typing-extensions))
2098 (native-inputs (list python-hatchling
2099 python-opentelemetry-test-utils-bootstrap
2100 python-pytest))
2101 (home-page "https://opentelemetry.io/docs/languages/python/")
2102 (synopsis "OpenTelemetry Python SDK")
2103 (description "@code{OpenTelemetry} Python SDK.")
2104 (license license:asl2.0)))
2105
2106(define-public python-opentelemetry-sdk-bootstrap
2107 (hidden-package
2108 (package/inherit python-opentelemetry-sdk
2109 (name "python-opentelemetry-sdk-bootstrap")
2110 (arguments (list #:tests? #f))
2111 (propagated-inputs (list python-opentelemetry-api-bootstrap
2112 python-opentelemetry-semantic-conventions-bootstrap))
2113 (native-inputs (list python-hatchling)))))
2114
2115(define-public python-opentelemetry-semantic-conventions
2116 (package
2117 (name "python-opentelemetry-semantic-conventions")
2118 (version "0.58b0")
2119 (source
2120 (origin
2121 (method url-fetch)
2122 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
2123 (sha256
2124 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
2125 (build-system pyproject-build-system)
2126 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
2127 (native-inputs (list python-hatchling))
2128 (home-page "https://opentelemetry.io/docs/languages/python/")
2129 (synopsis "OpenTelemetry Semantic Conventions")
2130 (description "@code{OpenTelemetry} Semantic Conventions.")
2131 (license license:asl2.0)))
2132
2133(define-public python-opentelemetry-semantic-conventions-bootstrap
2134 (hidden-package
2135 (package/inherit python-opentelemetry-semantic-conventions
2136 (name "python-opentelemetry-semantic-conventions-bootstrap")
2137 (arguments
2138 (list
2139 #:tests? #f))
2140 (propagated-inputs (list python-opentelemetry-api-bootstrap
2141 python-typing-extensions)))))
2142
2143(define-public python-opentelemetry-test-utils
2144 (package
2145 (name "python-opentelemetry-test-utils")
2146 (version "0.58b0")
2147 (source
2148 (origin
2149 (method url-fetch)
2150 (uri (pypi-uri "opentelemetry_test_utils" version))
2151 (sha256
2152 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
2153 (build-system pyproject-build-system)
2154 (arguments (list #:tests? #f)) ; No tests in the wheel.
2155 (propagated-inputs
2156 (list python-asgiref
2157 python-opentelemetry-api
2158 python-opentelemetry-sdk))
2159 (native-inputs (list python-hatchling))
2160 (home-page "https://opentelemetry.io/docs/languages/python/")
2161 (synopsis "Test utilities for OpenTelemetry unit tests")
2162 (description "Test utilities for @code{OpenTelemetry} unit tests.")
2163 (license license:asl2.0)))
2164
2165(define-public python-opentelemetry-test-utils-bootstrap
2166 (hidden-package
2167 (package/inherit python-opentelemetry-test-utils
2168 (name "python-opentelemetry-test-utils-bootstrap")
2169 (propagated-inputs
2170 (list python-asgiref
2171 python-opentelemetry-api-bootstrap
2172 python-opentelemetry-sdk-bootstrap)))))
2173
2174(define-public python-pathy
2175 (package
2176 (name "python-pathy")
2177 (version "0.11.0")
2178 (source
2179 (origin
2180 (method url-fetch)
2181 (uri (pypi-uri "pathy" version))
2182 (sha256
2183 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
2184 (build-system pyproject-build-system)
2185 (native-inputs
2186 (list python-mock
2187 python-pytest
2188 python-setuptools))
2189 (propagated-inputs
2190 (list python-pathlib-abc-for-python-pathy
2191 python-smart-open-6
2192 python-typer))
2193 (home-page "https://github.com/justindujardin/pathy")
2194 (synopsis "Path interface for local and cloud bucket storage")
2195 (description "Pathy is a python package (with type annotations) for
2196working with Cloud Bucket storage providers using a @code{pathlib} interface.
2197It provides @code{pathlib.Path} subclasses for local and cloud bucket
2198storage.")
2199 (license license:asl2.0)))
2200
2201(define-public python-portend
2202 (package
2203 (name "python-portend")
2204 (version "3.2.1")
2205 (source
2206 (origin
2207 (method url-fetch)
2208 (uri (pypi-uri "portend" version))
2209 (sha256
2210 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
2211 (build-system pyproject-build-system)
2212 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
2213 ;; download dependencies.
2214 (arguments
2215 '(#:test-flags '("-k" "not project")))
2216 (native-inputs
2217 (list python-pytest
2218 python-setuptools
2219 python-setuptools-scm))
2220 (propagated-inputs
2221 (list python-tempora))
2222 (home-page "https://github.com/jaraco/portend")
2223 (synopsis "Monitor TCP ports for bound or unbound states")
2224 (description
2225 "@code{python-portend} can be used to monitor TCP ports for bound or
2226unbound states. For example, waiting for a port to be occupied or freed
2227within a set timeout. @code{python-portend} can also be used directly from
2228the command line.")
2229 (license license:expat)))
2230
2231(define-public python-prawcore
2232 (package
2233 (name "python-prawcore")
2234 (version "2.4.0")
2235 (source
2236 (origin
2237 (method git-fetch)
2238 (uri (git-reference
2239 (url "https://github.com/praw-dev/prawcore")
2240 (commit (string-append "v" version))))
2241 (file-name (git-file-name name version))
2242 (sha256
2243 (base32 "1y7gh7kk002b2h1ppkr1llb2gjfnby28zvx11j4ji0wm3r3rjh5l"))))
2244 (build-system pyproject-build-system)
2245 (arguments
2246 ;; XXX: These tests fail with an incomplete request response.
2247 (list #:test-flags
2248 #~'("-k" #$(string-append
2249 "not test_revoke__access_token_with_refresh_set"
2250 " and not test_revoke__access_token_without_refresh_set"
2251 " and not test_revoke__refresh_token_with_access_set"
2252 " and not test_refresh__with_scopes"
2253 " and not test_request__patch"))))
2254 (native-inputs
2255 (list python-betamax
2256 python-betamax-matchers
2257 python-betamax-serializers
2258 python-flit-core
2259 python-mock
2260 python-pytest
2261 python-testfixtures))
2262 (propagated-inputs
2263 (list python-requests))
2264 (synopsis "Core component of PRAW")
2265 (description "PRAWcore is a low-level communication layer used by PRAW.")
2266 (home-page "https://praw.readthedocs.io/en/latest/")
2267 (license license:bsd-2)))
2268
2269(define-public python-praw
2270 (package
2271 (name "python-praw")
2272 (version "7.8.1")
2273 (source
2274 (origin
2275 (method git-fetch)
2276 (uri (git-reference
2277 (url "https://github.com/praw-dev/praw")
2278 (commit (string-append "v" version))))
2279 (file-name (git-file-name name version))
2280 (sha256
2281 (base32 "05qq43l4334cq8r8k731qnb45nq12vvfdxwbr6q84a1hafp7n4cg"))))
2282 (build-system pyproject-build-system)
2283 (arguments
2284 (list #:test-flags
2285 #~(list "--ignore=tests/units/models"
2286 "--ignore=tests/integration/models"
2287 "--ignore=tests/unit/test_config.py"
2288 "--ignore=tests/integration/test_reddit.py")))
2289 (native-inputs
2290 (list python-betamax
2291 python-betamax-matchers
2292 python-flit-core
2293 python-pytest))
2294 (propagated-inputs
2295 (list python-prawcore python-update-checker python-websocket-client))
2296 (synopsis "Python Reddit API Wrapper")
2297 (description "PRAW is a Python package that allows for simple access to
2298Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
2299API rules.")
2300 (home-page "https://praw.readthedocs.io/en/latest/")
2301 (license license:bsd-2)))
2302
2303(define-public python-frozenlist
2304 (package
2305 (name "python-frozenlist")
2306 (version "1.8.0")
2307 (source
2308 (origin
2309 (method git-fetch)
2310 (uri (git-reference
2311 (url "https://github.com/aio-libs/frozenlist")
2312 (commit (string-append "v" version))))
2313 (file-name (git-file-name name version))
2314 (sha256
2315 (base32 "0r1kxf5b562zrn04nl912i6a8y1fyc891l1284v0zj9llb97limy"))))
2316 ;; XXX: Without "wheel", the 'install phase can't find the wheel.
2317 (outputs (list "out" "wheel"))
2318 (build-system pyproject-build-system)
2319 ;; The configuration contains explicit early calls to pytest_cov.
2320 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
2321 (native-inputs
2322 (list python-cython
2323 python-expandvars
2324 python-pytest
2325 python-setuptools
2326 python-tomli))
2327 (home-page "https://github.com/aio-libs/frozenlist")
2328 (synopsis "List-like data structure for Python")
2329 (description "@code{frozenlist.FrozenList} is a list-like structure which
2330implements @code{collections.abc.MutableSequence}. It can be made immutable
2331by calling @code{FrozenList.freeze}.")
2332 (license license:asl2.0)))
2333
2334(define-public python-aiobotocore
2335 (package
2336 (name "python-aiobotocore")
2337 (version "3.0.0")
2338 (source
2339 (origin
2340 (method url-fetch)
2341 (uri (pypi-uri "aiobotocore" version))
2342 (sha256
2343 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
2344 (build-system pyproject-build-system)
2345 (arguments
2346 ;; TODO: Tests need some setupt, see Makefile.
2347 (list #:tests? #f))
2348 (native-inputs
2349 (list python-setuptools))
2350 (propagated-inputs
2351 (list python-aiohttp
2352 python-aioitertools
2353 python-botocore
2354 python-dateutil
2355 python-jmespath
2356 python-multidict
2357 python-typing-extensions
2358 python-wrapt))
2359 (home-page "https://github.com/aio-libs/aiobotocore")
2360 (synopsis "Async client for AWS services using botocore and aiohttp")
2361 (description "This package provides an async client for Amazon services
2362using botocore and aiohttp/asyncio. This library is a mostly full featured
2363asynchronous version of botocore.")
2364 (license license:asl2.0)))
2365
2366(define-public python-aiohappyeyeballs
2367 (package
2368 (name "python-aiohappyeyeballs")
2369 (properties '((commit . "cc53cf8a1d31f7b460a0114214aac66956f0e2ed")
2370 (revision . "0")))
2371 (version (git-version "2.6.1"
2372 (assoc-ref properties 'revision)
2373 (assoc-ref properties 'commit)))
2374 (source
2375 (origin
2376 (method git-fetch)
2377 (uri (git-reference
2378 (url "https://github.com/aio-libs/aiohappyeyeballs")
2379 (commit (assoc-ref properties 'commit))))
2380 (file-name (git-file-name name version))
2381 (sha256
2382 (base32 "0nc723f4sxryg5h9z8paysmy9dnqw2jy4srxp9axrxkv9qrawa7n"))))
2383 (build-system pyproject-build-system)
2384 (native-inputs
2385 (list python-poetry-core
2386 python-pytest
2387 python-pytest-asyncio))
2388 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
2389 (synopsis "Happy Eyeballs for asyncio")
2390 (description "This library exists to allow connecting with Happy
2391Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
2392DNS name.")
2393 (license license:psfl)))
2394
2395(define-public python-aioitertools
2396 (package
2397 (name "python-aioitertools")
2398 (version "0.12.0")
2399 (source
2400 (origin
2401 (method url-fetch)
2402 (uri (pypi-uri "aioitertools" version))
2403 (sha256
2404 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
2405 (build-system pyproject-build-system)
2406 (arguments
2407 (list #:test-backend #~'custom
2408 #:test-flags #~(list "-m" "aioitertools.tests")))
2409 (native-inputs
2410 (list python-flit-core))
2411 (home-page "https://pypi.org/project/aioitertools/")
2412 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
2413 (description
2414 "This package provides an implementation of itertools, builtins, and more
2415for AsyncIO and mixed-type iterables.")
2416 (license license:expat)))
2417
2418(define-public python-aiosignal
2419 (package
2420 (name "python-aiosignal")
2421 (version "1.4.0")
2422 (source
2423 (origin
2424 (method url-fetch)
2425 (uri (pypi-uri "aiosignal" version))
2426 (sha256
2427 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
2428 (build-system pyproject-build-system)
2429 (arguments
2430 (list
2431 #:phases
2432 #~(modify-phases %standard-phases
2433 (add-after 'unpack 'avoid-pytest-cov-preload
2434 (lambda _
2435 (substitute* "pytest.ini"
2436 (("-p pytest_cov") "")))))))
2437 (native-inputs
2438 (list python-pytest
2439 python-pytest-asyncio
2440 python-setuptools))
2441 (propagated-inputs
2442 (list python-frozenlist))
2443 (home-page "https://github.com/aio-libs/aiosignal")
2444 (synopsis "Callback manager for Python @code{asyncio} projects")
2445 (description "This Python module provides @code{Signal}, an abstraction to
2446register asynchronous callbacks. The @code{Signal} abstraction can be used
2447for adding, removing and dropping callbacks.")
2448 (license license:asl2.0)))
2449
2450(define-public python-aiohttp
2451 (package
2452 (name "python-aiohttp")
2453 ;; TODO: Newer versions require zlib-ng:
2454 ;; <https://github.com/zlib-ng/zlib-ng>,
2455 ;; <https://github.com/pycompression/python-zlib-ng>.
2456 (version "3.11.18")
2457 (source
2458 (origin
2459 (method url-fetch)
2460 (uri (pypi-uri "aiohttp" version))
2461 (sha256
2462 (base32 "12jmkxkc5nnk6ma6m7rrs0w4vzswfc47ffxn5m0pwav1708nx1df"))
2463 (snippet
2464 #~(begin
2465 (use-modules ((guix build utils)))
2466 ;; TODO: Unbundle the llhttp sources.
2467 ;; (delete-file-recursively "vendor")
2468 (delete-file "aiohttp/_http_parser.c")
2469 (delete-file "aiohttp/_http_writer.c")))))
2470 (build-system pyproject-build-system)
2471 (arguments
2472 (list
2473 ;; tests: 3045 passed, 32 skipped, 29 xfailed, 2 subtests passed
2474 #:test-flags
2475 '(list
2476 "-o" "addopts=''" ; Avoid -p pytest_cov.
2477 "-m" "not dev_mode"
2478 "--numprocesses" (number->string (parallel-job-count))
2479 "--ignore=aiohttp/test_utils.py"
2480 ;; This tests requires the 'proxy.py' module, not yet packaged.
2481 "--ignore=tests/test_proxy_functional.py"
2482 ;; These tests need brotli.
2483 "--ignore=tests/test_web_sendfile_functional.py"
2484 "--ignore=tests/test_web_functional.py"
2485 ;; These tests need pytest_codspeed
2486 "--ignore-glob=tests/test_benchmarks*"
2487 ;; These tests need python_on_whales
2488 "--ignore=tests/autobahn/test_autobahn.py"
2489 "-k"
2490 ;; These tests fail for unknown reasons (see:
2491 ;; https://github.com/aio-libs/aiohttp/issues/7130)
2492 (string-append
2493 "not test_no_warnings "
2494 "and not test_default_loop "
2495 "and not test_ctor_global_loop "
2496 "and not test_set_loop_default_loop "
2497
2498 ;; Disable brotli tests, because we’re not providing that optional
2499 ;; library.
2500 "and not test_feed_eof_no_err_brotli "
2501
2502 ;; Disable the following tests as they require
2503 ;; networking.
2504 "and not TestDeflateBuffer "
2505 "and not test_client_session_timeout_zero "
2506 "and not test_empty_body "
2507 "and not test_mark_formdata_as_processed[pyloop] "
2508 "and not test_receive_runtime_err[pyloop] "
2509
2510 ;; assert 'gzip, deflate' == 'gzip, deflate, br'
2511 "and not test_headers[pyloop] "
2512 ;; ~/.. does not resolve
2513 "and not test_add_static_path_resolution"))
2514 #:phases
2515 '(modify-phases %standard-phases
2516 (add-after 'unpack 'fix-tests
2517 (lambda _
2518 ;; Make sure the timestamp of this file is > 1990, because a few
2519 ;; tests like test_static_file_if_modified_since_past_date depend
2520 ;; on it.
2521 (let ((late-90s (* 60 60 24 365 30)))
2522 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
2523 (add-before 'build 'cythonize
2524 (lambda _
2525 ;; Adapted from the Makefile.
2526 (with-directory-excursion "aiohttp"
2527 (for-each
2528 (lambda (file)
2529 (invoke "cython" "-3"
2530 file "-I" "."))
2531 (find-files "." "_.*\\.pyx$"))))))))
2532 (propagated-inputs
2533 (list python-aiohappyeyeballs
2534 python-aiosignal
2535 python-attrs
2536 python-frozenlist
2537 python-multidict
2538 python-propcache
2539 python-yarl))
2540 (native-inputs
2541 (list gunicorn-bootstrap
2542 python-cython
2543 python-freezegun
2544 python-isal
2545 python-pytest
2546 python-pytest-mock
2547 python-pytest-xdist
2548 python-re-assert
2549 python-setuptools))
2550 (home-page "https://github.com/aio-libs/aiohttp/")
2551 (synopsis "Async HTTP client/server framework (asyncio)")
2552 (description "@code{aiohttp} is an asynchronous HTTP client/server
2553framework.
2554
2555Its main features are:
2556@itemize
2557@item Supports both client and server side of HTTP protocol.
2558@item Supports both client and server Web-Sockets out-of-the-box without the
2559Callback Hell.
2560@item Web-server has middlewares and pluggable routing.
2561@end itemize")
2562 (license license:asl2.0)))
2563
2564(define-public python-aiohttp-oauthlib
2565 (package
2566 (name "python-aiohttp-oauthlib")
2567 (version "0.1.0")
2568 (source
2569 (origin
2570 (method url-fetch)
2571 (uri (pypi-uri "aiohttp-oauthlib" version))
2572 (sha256
2573 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
2574 (build-system pyproject-build-system)
2575 (arguments (list #:tests? #f)) ; none included
2576 (propagated-inputs (list python-aiohttp python-oauthlib))
2577 (native-inputs (list python-setuptools python-setuptools-scm))
2578 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
2579 (synopsis "OAuthlib authentication support for aiohttp")
2580 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
2581provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
2582 (license license:isc)))
2583
2584(define-public python-aiohttp-client-cache
2585 (package
2586 (name "python-aiohttp-client-cache")
2587 (version "0.14.3")
2588 (source
2589 (origin
2590 (method git-fetch)
2591 (uri (git-reference
2592 (url "https://github.com/requests-cache/aiohttp-client-cache")
2593 (commit (string-append "v" version))))
2594 (file-name (git-file-name name version))
2595 (sha256
2596 (base32
2597 "13xbmjjvcbzh3yh5z92mc0gwicwfjfq2av5jbqv09sbfzhggs92y"))))
2598 (build-system pyproject-build-system)
2599 (arguments
2600 (list
2601 #:test-flags #~(list "--ignore=test/integration/")))
2602 (native-inputs
2603 (list python-brotli
2604 python-faker
2605 python-hatchling
2606 python-pytest
2607 python-pytest-aiohttp
2608 python-pytest-asyncio
2609 python-types-aiofiles))
2610 (propagated-inputs
2611 (list python-aiohttp
2612 python-attrs
2613 python-itsdangerous
2614 python-url-normalize
2615 ;; [optional]
2616 python-aioboto3
2617 python-aiobotocore
2618 python-aiofiles
2619 python-aiosqlite
2620 python-pymongo
2621 python-redis))
2622 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
2623 (synopsis "Persistent cache for aiohttp requests")
2624 (description
2625 "This package is an asynchronous persistent caching library specifically
2626designed for @samp{aiohttp} requests in Python. With support for various
2627storage backends, it offers flexibility in how and where the cache is stored.
2628Please note that MongoDB and DynamoDB backends are not currently supported due
2629to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
2630 (license license:expat)))
2631
2632(define-public python-aiohttp-cors
2633 (package
2634 (name "python-aiohttp-cors")
2635 (version "0.8.1")
2636 (source
2637 (origin
2638 (method url-fetch)
2639 (uri (pypi-uri "aiohttp_cors" version))
2640 (sha256
2641 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
2642 (build-system pyproject-build-system)
2643 (arguments
2644 (list
2645 #:tests? #f)) ; network access is required to run tests
2646 (native-inputs
2647 (list python-setuptools
2648 python-wheel))
2649 (propagated-inputs
2650 (list python-aiohttp))
2651 (home-page "https://github.com/aio-libs/aiohttp-cors")
2652 (synopsis "CORS support for aiohttp")
2653 (description
2654 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
2655support for aiohttp asyncio-powered asynchronous HTTP server.")
2656 (license license:asl2.0)))
2657
2658(define-public python-aiohttp-retry
2659 (package
2660 (name "python-aiohttp-retry")
2661 (version "2.9.1")
2662 (source
2663 (origin
2664 (method git-fetch)
2665 (uri (git-reference
2666 (url "https://github.com/inyutin/aiohttp_retry")
2667 (commit (string-append "v" version))))
2668 (file-name (git-file-name name version))
2669 (sha256
2670 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
2671 (build-system pyproject-build-system)
2672 (native-inputs
2673 (list python-pytest
2674 python-pytest-aiohttp
2675 python-setuptools))
2676 (propagated-inputs
2677 (list python-aiohttp))
2678 (home-page "https://github.com/inyutin/aiohttp_retry")
2679 (synopsis "Simple retry client for aiohttp")
2680 (description
2681 "This package implements @code{RetryClient} for @code{aiohttp} to retry
2682connection to provided endpoint with timeouts logic or use:
2683
2684@itemize
2685@item @code{ExponentialRetry} with exponential backoff
2686@item @code{RandomRetry} for random backoff
2687@item @code{ListRetry} with backoff you predefine by list
2688@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
2689@item @code{JitterRetry} exponential retry with a bit of randomness
2690@end itemize")
2691 (license license:expat)))
2692
2693(define-public python-aiohttp-socks
2694 (package
2695 (name "python-aiohttp-socks")
2696 (version "0.10.1")
2697 (source
2698 (origin
2699 (method url-fetch)
2700 (uri (pypi-uri "aiohttp_socks" version))
2701 (sha256
2702 (base32
2703 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
2704 (build-system pyproject-build-system)
2705 (arguments (list #:tests? #false)) ;none included
2706 (propagated-inputs
2707 (list python-aiohttp python-socks))
2708 (native-inputs (list python-setuptools python-wheel))
2709 (home-page "https://github.com/romis2012/aiohttp-socks")
2710 (synopsis "SOCKS proxy connector for aiohttp")
2711 (description "This package provides a SOCKS proxy connector for
2712aiohttp. It supports SOCKS4(a) and SOCKS5.")
2713 (license license:asl2.0)))
2714
2715(define-public python-aiodns
2716 (package
2717 (name "python-aiodns")
2718 (version "3.5.0")
2719 (source
2720 (origin
2721 (method git-fetch)
2722 (uri (git-reference
2723 (url "https://github.com/saghul/aiodns")
2724 (commit (string-append "v" version))))
2725 (file-name (git-file-name name version))
2726 (sha256
2727 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
2728 (build-system pyproject-build-system)
2729 (arguments
2730 (list
2731 #:tests? #f)) ;tests require internet access
2732 (native-inputs
2733 (list python-pytest python-pytest-asyncio python-setuptools))
2734 (propagated-inputs (list python-pycares))
2735 (home-page "https://github.com/saghul/aiodns")
2736 (synopsis "Simple DNS resolver for asyncio")
2737 (description
2738 "@code{aiodns} provides a simple way for doing asynchronous DNS
2739resolutions with a synchronous looking interface by using
2740@url{https://github.com/saghul/pycares,pycares}.")
2741 (license license:expat)))
2742
2743(define-public python-aioquic
2744 (package
2745 (name "python-aioquic")
2746 (version "1.2.0")
2747 (source
2748 (origin
2749 (method url-fetch)
2750 (uri (pypi-uri "aioquic" version))
2751 (sha256
2752 (base32 "16bigrn5b46c7nmpzxhnlhh4y03hwc7dbd0mi5f8r53i7yxn64pr"))))
2753 (build-system pyproject-build-system)
2754 (arguments
2755 (list
2756 #:test-flags
2757 #~(list "-k" (string-join
2758 ;; AssertionError: AlertBadCertificate not raised
2759 (list "not test_verify_subject_no_subjaltname"
2760 ;; AttributeError: module
2761 ;; 'service_identity.cryptography' has no attribute
2762 ;; 'extract_patterns'
2763 "test_verify_subject_with_subjaltname"
2764 ;; AttributeError: module
2765 ;; 'service_identity.cryptography' has no attribute
2766 ;; 'extract_patterns'
2767 "test_verify_subject_with_subjaltname_ipaddress")
2768 " and not "))))
2769 (native-inputs
2770 (list nss-certs-for-test
2771 python-pytest
2772 python-setuptools
2773 python-wheel))
2774 (inputs
2775 (list openssl))
2776 (propagated-inputs
2777 (list python-certifi
2778 python-pylsqpack
2779 python-pyopenssl
2780 python-service-identity))
2781 (home-page "https://github.com/aiortc/aioquic")
2782 (synopsis "QUIC and HTTP3 implementation in Python")
2783 (description
2784 "@code{aioquic} is a library for the QUIC network protocol in Python.
2785It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
2786 (license license:bsd-3)))
2787
2788(define-public python-aiorpcx
2789 (package
2790 (name "python-aiorpcx")
2791 (version "0.25.0")
2792 (source
2793 (origin
2794 (method git-fetch)
2795 ;; PyPI misses the util.py file used for tests.
2796 (uri (git-reference
2797 (url "https://github.com/kyuupichan/aiorpcX")
2798 (commit version)))
2799 (file-name (git-file-name name version))
2800 (sha256
2801 (base32
2802 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
2803 (build-system pyproject-build-system)
2804 (arguments
2805 (list
2806 #:test-flags
2807 ;; This test opens a remote connection.
2808 #~(list "-k" "not test_create_connection_resolve_good")))
2809 (native-inputs (list python-pytest
2810 python-pytest-asyncio-0.26
2811 python-setuptools))
2812 (propagated-inputs
2813 (list python-attrs python-websockets))
2814 (home-page "https://github.com/kyuupichan/aiorpcX")
2815 (synopsis "Generic asyncio RPC implementation")
2816 (description
2817 "The aiorpcX library is a generic asyncio implementation of RPC suitable
2818for an application that is a client, server or both.
2819
2820The package includes a module with full coverage of JSON RPC versions 1.0 and
28212.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
2822comes with a SOCKS proxy client.")
2823 (license (list license:expat license:bsd-2))))
2824
2825(define-public python-aiostream
2826 (package
2827 (name "python-aiostream")
2828 (version "0.7.0")
2829 (source
2830 (origin
2831 (method git-fetch) ;no tests in PyPI archive
2832 (uri (git-reference
2833 (url "https://github.com/vxgmichel/aiostream")
2834 (commit (string-append "v" version))))
2835 (file-name (git-file-name name version))
2836 (sha256
2837 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
2838 (build-system pyproject-build-system)
2839 (native-inputs
2840 (list python-pytest python-pytest-asyncio python-setuptools))
2841 (propagated-inputs
2842 (list python-typing-extensions))
2843 (home-page "https://github.com/vxgmichel/aiostream")
2844 (synopsis "Generator-based operators for asynchronous iteration")
2845 (description "@code{aiostream} provides a collection of stream operators that can
2846be combined to create asynchronous pipelines of operations. It can be seen as an
2847asynchronous version of @code{itertools}, although some aspects are slightly
2848different. All the provided operators return a unified interface called a stream. A
2849stream is an enhanced asynchronous iterable.")
2850 (license license:gpl3)))
2851
2852(define-public python-asgiref
2853 (package
2854 (name "python-asgiref")
2855 (version "3.8.1")
2856 (source (origin
2857 (method url-fetch)
2858 (uri (pypi-uri "asgiref" version))
2859 (sha256
2860 (base32 "146mhkn3zp2bqf7j6r3chdlvfzgs5x1lrnqahsllgjdyl20bshy3"))))
2861 (build-system pyproject-build-system)
2862 (native-inputs
2863 (list python-pytest
2864 python-pytest-asyncio
2865 python-setuptools
2866 python-wheel))
2867 (home-page "https://github.com/django/asgiref/")
2868 (synopsis "ASGI specs, helper code, and adapters")
2869 (description
2870 "ASGI is a standard for Python asynchronous web apps and servers to
2871communicate with each other, and positioned as an asynchronous successor to
2872WSGI. This package includes libraries for implementing ASGI servers.")
2873 (license license:bsd-3)))
2874
2875(define-public python-asgi-csrf
2876 (package
2877 (name "python-asgi-csrf")
2878 (version "0.11")
2879 (source (origin
2880 (method git-fetch) ;for tests
2881 (uri (git-reference
2882 (url "https://github.com/simonw/asgi-csrf")
2883 (commit version)))
2884 (file-name (git-file-name name version))
2885 (sha256
2886 (base32
2887 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))))
2888 (build-system pyproject-build-system)
2889 (propagated-inputs (list python-itsdangerous python-multipart))
2890 (native-inputs (list python-asgi-lifespan
2891 python-httpx
2892 python-pytest
2893 python-pytest-asyncio
2894 python-starlette
2895 python-setuptools
2896 python-wheel))
2897 (home-page "https://github.com/simonw/asgi-csrf")
2898 (synopsis "ASGI middleware for protecting against CSRF attacks")
2899 (description "This Asynchronous Server Gateway Interface (ASGI)
2900middleware protects against Cross-site request forgery (CSRF) attacks.
2901It implements the Double Submit Cookie pattern, where a cookie is set
2902that is then compared to a @code{csrftoken} hidden form field or a
2903@code{x-csrftoken} HTTP header.")
2904 (license license:asl2.0)))
2905
2906(define-public python-asgi-lifespan
2907 (package
2908 (name "python-asgi-lifespan")
2909 (version "2.1.0")
2910 (source (origin
2911 (method git-fetch) ;for tests
2912 (uri (git-reference
2913 (url "https://github.com/florimondmanca/asgi-lifespan")
2914 (commit version)))
2915 (file-name (git-file-name name version))
2916 (sha256
2917 (base32
2918 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
2919 (build-system pyproject-build-system)
2920 (arguments
2921 (list
2922 #:test-flags
2923 '(list "-k"
2924 (string-append
2925 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
2926 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
2927 " or test_lifespan_manager[trio-None-BodyFailed-None]"
2928 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
2929 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
2930 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
2931 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
2932 " or test_lifespan_timeout[trio-slow_shutdown]"
2933 " or test_lifespan_not_supported[trio-http_only]"
2934 " or test_lifespan_not_supported[trio-http_no_assert]"
2935 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
2936 ")"))
2937 #:phases
2938 '(modify-phases %standard-phases
2939 (add-after 'unpack 'compatibility
2940 (lambda _
2941 ;; httpx version 0.28.0 removed the "app" shortcut.
2942 (substitute* "tests/test_manager.py"
2943 (("app=manager.app")
2944 "transport=httpx.ASGITransport(manager.app)")))))))
2945 (native-inputs (list python-httpx
2946 python-pytest
2947 python-pytest-asyncio
2948 python-pytest-trio
2949 python-starlette
2950 python-setuptools
2951 python-wheel))
2952 (propagated-inputs (list python-sniffio))
2953 (home-page "https://github.com/florimondmanca/asgi-lifespan")
2954 (synopsis "Programmatic startup/shutdown of ASGI apps")
2955 (description "Programmatically send startup/shutdown lifespan events
2956into Asynchronous Server Gateway Interface (ASGI) applications. When
2957used in combination with an ASGI-capable HTTP client such as HTTPX, this
2958allows mocking or testing ASGI applications without having to spin up an
2959ASGI server.")
2960 (license license:expat)))
2961
2962(define-public python-a2wsgi
2963 (package
2964 (name "python-a2wsgi")
2965 (version "1.10.7")
2966 (source (origin
2967 (method url-fetch)
2968 (uri (pypi-uri "a2wsgi" version))
2969 (sha256
2970 (base32
2971 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
2972 (build-system pyproject-build-system)
2973 (arguments
2974 (list
2975 #:test-flags
2976 #~(list "-k" (string-join
2977 (list "not test_starlette_stream_response"
2978 "test_starlette_base_http_middleware"
2979 "test_baize_stream_response"
2980 ;; Fails because of harmless whitespace differences.
2981 "test_wsgi_post")
2982 " and not "))
2983 #:build-backend "pdm.backend"))
2984 (native-inputs
2985 (list python-pdm-backend
2986 python-pytest
2987 ;; python-baize ; not packed yet
2988 python-httpx-bootstrap
2989 ;; Cycle: python-a2wsgi->python-uvicorn->
2990 ;; python-httpx->python-starlette->python-a2wsgi
2991 ;; python-starlette
2992 python-pytest-asyncio))
2993 (home-page "https://github.com/abersheeran/a2wsgi")
2994 (synopsis "Convert WSGI to ASGI or vice versa")
2995 (description
2996 "This program converts a WSGI program to an ASGI program or the other
2997way around. It depends only on the Python standard library.")
2998 (license license:asl2.0)))
2999
3000(define-public python-httpauth
3001 (package
3002 (name "python-httpauth")
3003 (version "0.4.1")
3004 (source (origin
3005 (method url-fetch)
3006 (uri (pypi-uri "httpauth" version))
3007 (sha256
3008 (base32
3009 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
3010 (build-system pyproject-build-system)
3011 (native-inputs (list python-pytest python-setuptools python-wheel))
3012 (home-page "https://github.com/jonashaag/httpauth")
3013 (synopsis "WSGI HTTP Digest Authentication middleware")
3014 (description "@code{python-httpauth} is WSGI middleware that secures some/all
3015routes using HTTP Digest Authentication.")
3016 (license license:bsd-2)))
3017
3018(define-public python-css-html-js-minify
3019 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
3020 (revision "0"))
3021 (package
3022 (name "python-css-html-js-minify")
3023 (version (git-version "2.5.5" revision commit))
3024 (source
3025 (origin
3026 (method git-fetch)
3027 (uri (git-reference
3028 (url "https://github.com/juancarlospaco/css-html-js-minify")
3029 (commit commit)))
3030 (file-name (git-file-name name version))
3031 (sha256
3032 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
3033 (build-system pyproject-build-system)
3034 (arguments
3035 (list
3036 #:phases
3037 #~(modify-phases %standard-phases
3038 (add-after 'unpack 'relax-requirements
3039 (lambda _
3040 (substitute* "setup.cfg"
3041 (("^tests_require.*") "")))))))
3042 (native-inputs (list python-pytest python-setuptools))
3043 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
3044 (synopsis "CSS/HTML/JS minifier")
3045 (description
3046 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
3047 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
3048 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
3049 ;; looks like the user can choose a license.
3050 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
3051
3052(define-public python-aws-sam-translator
3053 (package
3054 (name "python-aws-sam-translator")
3055 (version "1.107.0")
3056 (source
3057 (origin
3058 (method git-fetch) ; no tests in PyPI release
3059 (uri (git-reference
3060 (url "https://github.com/aws/serverless-application-model")
3061 (commit (string-append "v" version))))
3062 (file-name (git-file-name name version))
3063 (sha256
3064 (base32 "0bx9ha9k6zx6gl1hsgm6cpq4xrfn604v2g1d5dh2d5zq0463gwfq"))))
3065 (build-system pyproject-build-system)
3066 (arguments
3067 (list
3068 #:test-flags
3069 #~(list "--numprocesses" (number->string (parallel-job-count))
3070 "--ignore=tests/bin/test_public_interface.py"
3071 "tests")
3072 #:phases
3073 #~(modify-phases %standard-phases
3074 (add-before 'check 'pre-check
3075 (lambda _
3076 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
3077 (native-inputs
3078 (list python-pytest
3079 python-pytest-rerunfailures
3080 python-pytest-xdist
3081 python-parameterized
3082 python-pyyaml
3083 python-setuptools))
3084 (propagated-inputs
3085 (list python-boto3
3086 python-jsonschema
3087 python-pydantic
3088 python-typing-extensions))
3089 (home-page "https://github.com/aws/serverless-application-model")
3090 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
3091 (description
3092 "AWS SAM Translator is a library that transform @dfn{Serverless Application
3093Model} (SAM) templates into AWS CloudFormation templates.")
3094 (license license:asl2.0)))
3095
3096(define-public python-aws-xray-sdk
3097 (package
3098 (name "python-aws-xray-sdk")
3099 (version "2.14.0")
3100 (home-page "https://github.com/aws/aws-xray-sdk-python")
3101 (source (origin
3102 (method git-fetch)
3103 (uri (git-reference (url home-page) (commit version)))
3104 (file-name (git-file-name name version))
3105 (sha256
3106 (base32
3107 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
3108 (build-system pyproject-build-system)
3109 (arguments
3110 (list
3111 #:test-flags
3112 '(list ;; Tries to connect to external network resources
3113 "--ignore=tests/ext/aiohttp/test_client.py"
3114 "--ignore=tests/ext/httplib/test_httplib.py"
3115 "--ignore=tests/ext/httpx"
3116 "--ignore=tests/ext/requests/test_requests.py"
3117 ;; TODO: How to configure Django for these tests?
3118 "--ignore=tests/ext/django"
3119 ;; These tests require packages not yet in Guix.
3120 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
3121 "--ignore=tests/ext/aiohttp/test_middleware.py"
3122 "--ignore=tests/ext/pg8000/test_pg8000.py"
3123 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
3124 "--ignore=tests/ext/pymysql/test_pymysql.py"
3125 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
3126 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
3127 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
3128 "--ignore=tests/test_async_recorder.py"
3129 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
3130 "--ignore-glob=tests/ext/sqlalchemy*"
3131 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
3132 ;; FIXME: Why is this failing?
3133 "--ignore=tests/test_patcher.py"
3134 "--ignore=tests/test_lambda_context.py")
3135 #:phases
3136 '(modify-phases %standard-phases
3137 (add-before 'check 'pre-check
3138 (lambda _
3139 ;; Allow "import tests.utils" to work as expected.
3140 (setenv "PYTHONPATH" (getcwd)))))))
3141 (native-inputs
3142 (list ;; These are required for the test suite.
3143 python-aiohttp
3144 python-bottle
3145 python-flask
3146 python-flask-sqlalchemy
3147 python-httpx
3148 python-mock
3149 python-pymysql
3150 python-pytest
3151 python-pytest-asyncio-0.26
3152 python-pytest-benchmark
3153 python-setuptools
3154 python-sqlalchemy
3155 python-webtest))
3156 (propagated-inputs
3157 (list python-botocore
3158 python-jsonpickle
3159 python-requests
3160 python-wrapt))
3161 (synopsis "Profile applications on AWS X-Ray")
3162 (description
3163 "The AWS X-Ray SDK for Python enables Python developers to record and
3164emit information from within their applications to the AWS X-Ray service.")
3165 (license license:asl2.0)))
3166
3167(define-public python-publicsuffixlist
3168 (package
3169 (name "python-publicsuffixlist")
3170 (version "1.0.2.20250202")
3171 (source
3172 (origin
3173 (method url-fetch)
3174 (uri (pypi-uri "publicsuffixlist" version))
3175 (sha256
3176 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
3177 (build-system pyproject-build-system)
3178 (arguments (list #:test-backend #~'unittest))
3179 (native-inputs (list python-setuptools))
3180 (home-page "https://github.com/ko-zu/psl")
3181 (synopsis "Public suffix list for Python")
3182 (description
3183 "This package provides an implementation of
3184@url{https://publicsuffix.org/, Public Suffix List } as Python library.
3185
3186Features:
3187@itemize
3188@item supports IDN (unicode and punycoded)
3189@item shipped with built-in PSL and an updater script
3190@item written in Pure Python with no library dependencies
3191@end itemize")
3192 (license license:mpl2.0)))
3193
3194(define-public python-pycognito
3195 (package
3196 (name "python-pycognito")
3197 (version "2024.5.1")
3198 (source
3199 (origin
3200 (method url-fetch)
3201 (uri (pypi-uri "pycognito" version))
3202 (sha256
3203 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
3204 (build-system pyproject-build-system)
3205 (arguments
3206 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
3207 (list #:tests? #f))
3208 (native-inputs
3209 (list python-setuptools))
3210 (propagated-inputs
3211 (list python-boto3
3212 python-envs
3213 python-pyjwt
3214 python-requests))
3215 (home-page "https://github.com/pvizeli/pycognito")
3216 (synopsis "Python library for using AWS Cognito")
3217 (description
3218 "This package provides a Python class to integrate Boto3's Cognito
3219client so it is easy to login users, with @acronym{Secure Remote Password,
3220SRP} support.")
3221 (license license:asl2.0)))
3222
3223(define-public python-python3-saml
3224 (package
3225 (name "python-python3-saml")
3226 (version "1.16.0")
3227 (source
3228 (origin
3229 (method git-fetch)
3230 (uri (git-reference
3231 (url "https://github.com/SAML-Toolkits/python3-saml")
3232 (commit (string-append "v" version))))
3233 (file-name (git-file-name name version))
3234 (sha256
3235 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
3236 (build-system pyproject-build-system)
3237 (arguments
3238 (list
3239 ;; 214 tests pass, 50 fail; many fail because of required Internet
3240 ;; access or because of assumptions about the location of test files.
3241 #:tests? #false))
3242 (native-inputs
3243 (list python-freezegun
3244 python-poetry-core))
3245 (inputs
3246 (list xmlsec-openssl))
3247 (propagated-inputs
3248 (list python-isodate
3249 python-lxml
3250 python-xmlsec))
3251 (home-page "https://github.com/SAML-Toolkits/python3-saml")
3252 (synopsis "Saml Python toolkit")
3253 (description
3254 "The SAML Python Toolkit lets you add SAML support to your Python
3255software.")
3256 (license license:expat)))
3257
3258(define-public python-ovh
3259 (package
3260 (name "python-ovh")
3261 (version "1.1.0")
3262 (source (origin
3263 (method url-fetch)
3264 (uri (pypi-uri "ovh" version))
3265 (sha256
3266 (base32
3267 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
3268 (build-system pyproject-build-system)
3269 (arguments (list #:tests? #f)) ; XXX: tests require networking
3270 (propagated-inputs (list python-requests))
3271 (native-inputs (list python-setuptools))
3272 (home-page "https://api.ovh.com")
3273 (synopsis "Interact with OVHcloud APIs")
3274 (description "This package provides the official module to perform HTTP requests
3275to the OVHcloud APIs.")
3276 (license license:bsd-3)))
3277
3278(define-public python-cbor2
3279 (package
3280 (name "python-cbor2")
3281 (version "5.4.2.post1")
3282 (source
3283 (origin
3284 (method url-fetch)
3285 (uri (pypi-uri "cbor2" version))
3286 (sha256
3287 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
3288 (build-system pyproject-build-system)
3289 (native-inputs
3290 (list python-pytest python-setuptools python-setuptools-scm))
3291 (home-page "https://github.com/agronholm/cbor2")
3292 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
3293 (description "This Python library provides encoding and decoding for the
3294Concise Binary Object
3295Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
32968949}) serialization format. The specification is fully compatible with the
3297original RFC 7049. Among its features are:
3298@itemize
3299@item Simple API like the @code{json} or @code{pickle} modules.
3300@item Support many CBOR tags with stdlib objects.
3301@item Generic tag decoding.
3302@item Shared value references including cyclic references.
3303@item String references compact encoding with repeated strings replaced with
3304indices.
3305@item Optional C module backend tested on big- and little-endian architectures.
3306@item Extensible tagged value handling using tag_hook and object_hook on
3307decode and default on encode.
3308@end itemize")
3309 (license license:expat)))
3310
3311(define-public python-cfn-lint
3312 (package
3313 (name "python-cfn-lint")
3314 (version "1.38.1")
3315 (source
3316 (origin
3317 (method git-fetch)
3318 (uri (git-reference
3319 (url "https://github.com/aws-cloudformation/cfn-lint")
3320 (commit (string-append "v" version))))
3321 (file-name (git-file-name name version))
3322 (sha256
3323 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
3324 (build-system pyproject-build-system)
3325 (arguments
3326 (list
3327 ;; tests: 2136 passed, 11 deselected, 1 warning
3328 #:test-flags
3329 #~(list "--ignore=test/integration/"
3330 "-k" (string-join
3331 ;; Tests failing on doctest or comparing diff.
3332 (list "not test_build_graph"
3333 "test_good_template"
3334 "test_success_run"
3335 "test_update_docs"
3336 ;; ImportError: Missing optional dependencies sarif
3337 "test_sarif_formatter")
3338 " and not "))
3339 #:phases
3340 #~(modify-phases %standard-phases
3341 (add-after 'unpack 'remove-deprecated
3342 (lambda _
3343 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
3344 (("deprecated\": \"2025")
3345 "deprecated\": \"2125")))))))
3346 (native-inputs
3347 (list python-defusedxml
3348 python-pydot
3349 python-pytest
3350 python-setuptools))
3351 (propagated-inputs
3352 (list python-aws-sam-translator
3353 python-jsonpatch
3354 python-networkx
3355 python-pyyaml
3356 python-regex
3357 python-sympy
3358 python-typing-extensions
3359 ;; [optional]
3360 python-junit-xml))
3361 (home-page "https://github.com/aws-cloudformation/cfn-lint")
3362 (synopsis "Validate CloudFormation templates")
3363 (description
3364 "This package lets you validate CloudFormation YAML/JSON templates against
3365the CloudFormation spec and additional checks. Includes checking valid values
3366for resource properties and best practices.")
3367 (license license:expat)))
3368
3369(define-public python-pyzabbix
3370 (package
3371 (name "python-pyzabbix")
3372 (version "1.3.1")
3373 (source
3374 (origin
3375 (method git-fetch)
3376 (uri (git-reference
3377 (url "https://github.com/lukecyca/pyzabbix")
3378 (commit version)))
3379 (file-name (git-file-name name version))
3380 (sha256
3381 (base32 "1dbs3bz1mjlvlg46ikhg5j7agwni61ljlpiziknklv95yp29n86v"))))
3382 (build-system pyproject-build-system)
3383 (arguments
3384 (list #:test-flags #~(list "tests")))
3385 (native-inputs
3386 (list python-pytest
3387 python-requests-mock
3388 python-setuptools))
3389 (propagated-inputs
3390 (list python-packaging
3391 python-requests))
3392 (home-page "https://github.com/lukecyca/pyzabbix")
3393 (synopsis "Python interface to the Zabbix API")
3394 (description
3395 "@code{pyzabbix} is a Python module for working with the Zabbix API.")
3396 (license license:lgpl2.1+)))
3397
3398(define-public python-requests-cache
3399 (package
3400 (name "python-requests-cache")
3401 (version "1.2.1")
3402 (source
3403 (origin
3404 (method url-fetch)
3405 (uri (pypi-uri "requests_cache" version))
3406 (sha256
3407 (base32 "1l8i4l2pd26gbrlcdb5z056wvsqfr3vvbyqq2f8x1f65zn3ckav8"))))
3408 (build-system pyproject-build-system)
3409 (arguments
3410 (list
3411 #:test-flags
3412 #~(list "--numprocesses" (number->string (parallel-job-count))
3413 ;; These tests require access to external services, e.g. MongoDB
3414 ;; and Redis.
3415 "--ignore=tests/integration"
3416 ;; AttributeError: <class 'requests.adapters.HTTPAdapter'> does
3417 ;; not have the attribute 'get_connection_with_tls_context'
3418 "-k" "not test_mock_session")
3419 #:phases
3420 #~(modify-phases %standard-phases
3421 (add-before 'check 'pre-check
3422 (lambda _
3423 ;; PermissionError: [Errno 13] Permission denied:
3424 ;; '/homeless-shelter'
3425 (setenv "HOME" "/tmp"))))))
3426 (native-inputs
3427 (list python-poetry-core
3428 python-pytest
3429 python-pytest-rerunfailures
3430 python-pytest-xdist
3431 python-requests-mock
3432 python-responses
3433 python-rich
3434 python-tenacity
3435 python-time-machine
3436 python-timeout-decorator))
3437 (propagated-inputs
3438 (list python-attrs
3439 python-boto3
3440 python-bson
3441 python-cattrs
3442 python-itsdangerous
3443 python-orjson
3444 python-platformdirs
3445 python-pymongo
3446 python-pyyaml
3447 python-redis
3448 python-requests
3449 python-ujson
3450 python-url-normalize
3451 python-urllib3))
3452 (home-page "https://github.com/requests-cache/requests-cache")
3453 (synopsis "Persistent HTTP cache for Python requests")
3454 (description
3455 "This package provides a drop-in replacement for @code{requests.Session}
3456with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
3457responses as planin JSON/YAML file or save responses as plain JSON/YAML
3458files.")
3459 (license license:bsd-2)))
3460
3461(define-public python-requests-futures
3462 (package
3463 (name "python-requests-futures")
3464 (version "1.0.2")
3465 (source
3466 (origin
3467 (method url-fetch)
3468 (uri (pypi-uri "requests_futures" version))
3469 (sha256
3470 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
3471 (build-system pyproject-build-system)
3472 (native-inputs
3473 (list python-greenlet
3474 python-pytest
3475 python-pytest-httpbin
3476 python-setuptools
3477 python-werkzeug))
3478 (propagated-inputs (list python-requests))
3479 (home-page "https://github.com/ross/requests-futures")
3480 (synopsis "Asynchronous Python HTTP for Humans")
3481 (description
3482 "This package provides and add-on the Python Requests HTTP library to run
3483code asynchronously.")
3484 (license license:asl2.0)))
3485
3486(define-public python-requests-unixsocket
3487 (package
3488 (name "python-requests-unixsocket")
3489 (version "0.4.1")
3490 (source
3491 (origin
3492 (method git-fetch)
3493 (uri (git-reference
3494 (url "https://github.com/msabramo/requests-unixsocket")
3495 (commit (string-append "v" version))))
3496 (file-name (git-file-name name version))
3497 (sha256
3498 (base32 "1f0pi31xqzm3cdag4s4gpdj36x169jwc8ibqvcwqz6h9c0pklf3n"))))
3499 (build-system pyproject-build-system)
3500 (native-inputs
3501 (list python-pytest
3502 python-setuptools
3503 python-setuptools-scm
3504 python-waitress))
3505 (propagated-inputs
3506 (list python-requests))
3507 (home-page "https://github.com/msabramo/requests-unixsocket")
3508 (synopsis "Use requests to talk HTTP via a UNIX domain socket")
3509 (description
3510 "This package provides an extension to @code{requests} which let it talk
3511HTTP via a UNIX domain socket.")
3512 (license license:asl2.0)))
3513
3514(define-public python-s3path
3515 (package
3516 (name "python-s3path")
3517 (version "0.6.4")
3518 (source
3519 (origin
3520 (method url-fetch)
3521 (uri (pypi-uri "s3path" version))
3522 (sha256
3523 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
3524 (build-system pyproject-build-system)
3525 (arguments
3526 (list
3527 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
3528 #:tests? #f))
3529 (native-inputs
3530 (list python-setuptools
3531 python-wheel))
3532 (propagated-inputs
3533 (list python-boto3
3534 python-smart-open))
3535 (home-page "https://github.com/liormizr/s3path")
3536 (synopsis "Pathlib extension for AWS S3 Service")
3537 (description
3538 "S3Path provide a Python convenient File-System/Path like interface for
3539AWS S3 Service using boto3 S3 resource as a driver.")
3540 (license license:asl2.0)))
3541
3542(define-public python-falcon
3543 (package
3544 (name "python-falcon")
3545 (version "4.0.2")
3546 (source
3547 (origin
3548 ;; Use git, as there are some test files missing from the PyPI release,
3549 ;; such as 'examples' directory.
3550 (method git-fetch)
3551 (uri (git-reference
3552 (url "https://github.com/falconry/falcon")
3553 (commit version)))
3554 (file-name (git-file-name name version))
3555 (sha256
3556 (base32
3557 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
3558 (build-system pyproject-build-system)
3559 (arguments
3560 (list
3561 #:test-flags
3562 '(list "-k" "not slow"
3563 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
3564 #:phases
3565 '(modify-phases %standard-phases
3566 (add-before 'check 'pre-check
3567 (lambda _
3568 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
3569 (setenv "FALCON_TESTING_SESSION" "Y")
3570 (setenv "PYTHONASYNCIODEBUG" "1")
3571 (setenv "HOME" "/tmp"))))))
3572 (propagated-inputs
3573 (list python-mimeparse))
3574 (native-inputs
3575 (list python-aiofiles
3576 python-cbor2
3577 python-cython ;for faster binaries
3578 python-fakeredis
3579 python-httpx
3580 python-mujson
3581 python-msgpack
3582 python-orjson
3583 python-pecan
3584 python-pillow
3585 python-pytest
3586 python-pytest-asyncio
3587 python-pyyaml
3588 python-rapidjson
3589 python-requests
3590 python-setuptools
3591 python-testtools
3592 python-ujson
3593 python-websockets
3594 python-wheel))
3595 (home-page "https://falconframework.org")
3596 (synopsis "Web framework for building APIs and application backends")
3597 (description "Falcon is a web API framework for building microservices,
3598application backends and higher-level frameworks. Among its features are:
3599@itemize
3600@item Optimized and extensible code base
3601@item Routing via URI templates and REST-inspired resource
3602classes
3603@item Access to headers and bodies through request and response
3604classes
3605@item Request processing via middleware components and hooks
3606@item Idiomatic HTTP error responses
3607@item Straightforward exception handling
3608@item Unit testing support through WSGI helpers and mocks
3609@item Compatible with both CPython and PyPy
3610@item Cython support for better performance when used with CPython
3611@end itemize")
3612 (license license:asl2.0)))
3613
3614(define-public python-falcon-cors
3615 (package
3616 (name "python-falcon-cors")
3617 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
3618 (revision . "0")))
3619 (version (git-version "1.1.7"
3620 (assoc-ref properties 'revision)
3621 (assoc-ref properties 'commit)))
3622 (source
3623 (origin
3624 (method git-fetch)
3625 (uri (git-reference
3626 (url "https://github.com/lwcolton/falcon-cors")
3627 (commit (assoc-ref properties 'commit))))
3628 (file-name (git-file-name name version))
3629 (sha256
3630 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
3631 (build-system pyproject-build-system)
3632 (arguments
3633 (list
3634 ;; XXX: The last commit's tests are incompatible with the more recent
3635 ;; version of python-falcon.
3636 #:tests? #f))
3637 (native-inputs
3638 (list python-falcon python-mock python-pynose python-setuptools))
3639 (home-page "https://github.com/lwcolton/falcon-cors")
3640 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
3641 (description
3642 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
3643support for Falcon. It allows applying a specially crafted CORS object to the
3644incoming requests, enabling the ability to serve resources over a different
3645origin than that of the web application.")
3646 (license license:asl2.0)))
3647
3648(define-public python-furl
3649 (package
3650 (name "python-furl")
3651 (version "2.1.4")
3652 (source
3653 (origin
3654 (method url-fetch)
3655 (uri (pypi-uri "furl" version))
3656 (sha256
3657 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
3658 (build-system pyproject-build-system)
3659 (arguments
3660 (list #:test-flags
3661 #~(list "-k" (string-append "not test_hosts"
3662 " and not test_netloc"
3663 " and not test_odd_urls"))))
3664 (propagated-inputs
3665 (list python-orderedmultidict python-six))
3666 (native-inputs
3667 (list python-pytest python-setuptools python-wheel))
3668 (home-page "https://github.com/gruns/furl")
3669 (synopsis "URL manipulation in Python")
3670 (description "Furl provides an easy-to-use alternative to the
3671@code{urllib} and @code{urlparse} modules for manipulating URLs.")
3672 (license license:unlicense)))
3673
3674(define-public python-httplib2
3675 (package
3676 (name "python-httplib2")
3677 (version "0.31.2")
3678 (source
3679 (origin
3680 (method git-fetch)
3681 (uri (git-reference
3682 (url "https://github.com/httplib2/httplib2")
3683 (commit (string-append "v" version))))
3684 (file-name (git-file-name name version))
3685 (sha256
3686 (base32
3687 "0wdnf4rhw9ar8b15lzvif11ibnnpqkfif3alkhkfywy3ikk8nrxb"))))
3688 (build-system pyproject-build-system)
3689 (arguments
3690 (list
3691 #:phases
3692 #~(modify-phases %standard-phases
3693 (add-after 'unpack 'adjust-test-requirements
3694 (lambda _
3695 (substitute* "requirements-test.txt"
3696 (("==") ">=")))))))
3697 (propagated-inputs
3698 (list python-pyparsing
3699 python-pysocks))
3700 (native-inputs
3701 (list python-cryptography
3702 python-mock
3703 python-pytest
3704 python-pytest-randomly
3705 python-pytest-timeout
3706 python-setuptools))
3707 (home-page "https://github.com/httplib2/httplib2")
3708 (synopsis "Comprehensive HTTP client library")
3709 (description
3710 "A comprehensive HTTP client library supporting many features left out of
3711other HTTP libraries.")
3712 (license license:expat)))
3713
3714(define-public python-cheroot
3715 (package
3716 (name "python-cheroot")
3717 (version "11.1.2")
3718 (source
3719 (origin
3720 (method git-fetch)
3721 (uri (git-reference
3722 (url "https://github.com/cherrypy/cheroot")
3723 (commit (string-append "v" version))))
3724 (file-name (git-file-name name version))
3725 (sha256
3726 (base32 "02rhci01m5fcn8mqpvq3c35rs4n28gxlfvfw2if2f85rgwrji8y8"))))
3727 (build-system pyproject-build-system)
3728 (arguments
3729 (list
3730 #:phases
3731 #~(modify-phases %standard-phases
3732 (add-after 'unpack 'fix-pytest-config
3733 (lambda _
3734 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
3735 (delete-file "pytest.ini"))))))
3736 (native-inputs
3737 (list python-portend
3738 python-pyopenssl
3739 python-pypytools
3740 python-pytest
3741 python-pytest-mock
3742 python-requests
3743 python-requests-toolbelt
3744 python-requests-unixsocket2
3745 python-setuptools
3746 python-setuptools-scm
3747 python-trustme))
3748 (propagated-inputs
3749 (list python-jaraco-functools
3750 python-more-itertools))
3751 (home-page "https://cheroot.cherrypy.dev")
3752 (synopsis "Highly-optimized, pure-python HTTP server")
3753 (description
3754 "Cheroot is a high-performance, pure-Python HTTP server.")
3755 (license license:bsd-3)))
3756
3757(define-public python-cherrypy
3758 (package
3759 (name "python-cherrypy")
3760 (properties '((commit . "1f75bc9eed8e0e385f64f368bd69f58d96fb8c2b")
3761 (revision . "0")))
3762 (version (git-version "18.10.0"
3763 (assoc-ref properties 'revision)
3764 (assoc-ref properties 'commit)))
3765 (source
3766 (origin
3767 (method git-fetch)
3768 (uri (git-reference
3769 (url "https://github.com/cherrypy/cherrypy")
3770 (commit (assoc-ref properties 'commit))))
3771 (file-name (git-file-name name version))
3772 (sha256
3773 (base32 "1l01a4sbfm42s5xp6ngphgqf0yb65ksqbsb27kznvybblyaxfa9p"))))
3774 (build-system pyproject-build-system)
3775 (arguments
3776 (list
3777 #:test-flags
3778 #~(map
3779 (lambda (test)
3780 (string-append "--deselect=cherrypy/test/" test))
3781 (list
3782 ;; Requires bumping python-flaky.
3783 "test_bus.py::test_wait_publishes_periodically"
3784 "test_bus.py::test_block"
3785 "test_bus.py::test_start_with_callback"
3786 "test_refleaks.py::ReferenceTests::test_threadlocal_garbage"
3787 "test_session.py::SessionTest::test_0_Session"
3788 "test_session.py::SessionTest::test_2_File_Concurrency"
3789 ;; assert b'RamSession' == b'FileSession' or FileNotFoundError
3790 "test_session.py::SessionTest::test_3_Redirect"
3791 "test_session.py::SessionTest::test_4_File_deletion"))
3792 #:phases
3793 #~(modify-phases %standard-phases
3794 (add-after 'unpack 'fix-pytest-config
3795 (lambda _
3796 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
3797 (delete-file "pytest.ini")))
3798 (add-after 'unpack 'patch-pyproject
3799 (lambda _
3800 (substitute* "pyproject.toml"
3801 (("\"cherrypy.scaffold\",")
3802 (string-join
3803 (list "\"cherrypy.scaffold\""
3804 "\"cherrypy._private_api\""
3805 "\"cherrypy._private_api.compat\",")
3806 ",\n "))))))))
3807 (propagated-inputs
3808 (list python-cheroot
3809 python-filelock
3810 python-jaraco-collections
3811 python-more-itertools
3812 python-portend
3813 python-zc-lockfile))
3814 (native-inputs
3815 (list python-flaky
3816 python-objgraph
3817 python-path
3818 python-pytest
3819 python-pytest-forked
3820 python-pytest-services
3821 python-pytest-sugar
3822 python-requests-toolbelt
3823 python-setuptools
3824 python-setuptools-scm))
3825 (home-page "https://www.cherrypy.dev")
3826 (synopsis "Object-Oriented HTTP framework")
3827 (description
3828 "CherryPy is a pythonic, object-oriented web framework. It helps in
3829building web applications in the same way any other object-oriented Python
3830program would be built.")
3831 (license license:bsd-3)))
3832
3833(define-public python-parfive
3834 (package
3835 (name "python-parfive")
3836 (version "2.3.1")
3837 (source
3838 (origin
3839 (method git-fetch)
3840 (uri (git-reference
3841 (url "https://github.com/Cadair/parfive")
3842 (commit (string-append "v" version))))
3843 (file-name (git-file-name name version))
3844 (sha256
3845 (base32 "09kkh7kp9qy8m26zk6p7zc84yrc81pjgsi594kaa1v1n83mprl4b"))))
3846 (build-system pyproject-build-system)
3847 (arguments
3848 (list
3849 #:test-flags
3850 ;; Disable tests requiring network access.
3851 #~(list "-k" (string-join
3852 (list "not test_ftp"
3853 "test_ftp_http"
3854 "test_ftp_pasv_command"
3855 "test_problematic_http_urls")
3856 " and not "))))
3857 (native-inputs
3858 (list python-aiofiles
3859 python-pytest
3860 python-pytest-asyncio
3861 python-pytest-localserver
3862 python-pytest-socket
3863 python-setuptools
3864 python-setuptools-scm))
3865 (propagated-inputs
3866 (list python-aiohttp
3867 python-tqdm
3868 ;; [optional]
3869 python-aioftp))
3870 (home-page "https://parfive.readthedocs.io/")
3871 (synopsis "HTTP and FTP parallel file downloader")
3872 (description
3873 "This package provides CLI tool and Python library @code{parallel} file
3874downloader using asyncio. parfive can handle downloading multiple files in
3875parallel as well as downloading each file in a number of chunks.
3876
3877asciicast demo of parfive parfive works by creating a downloader object,
3878appending files to it and then running the download. parfive has a synchronous
3879API, but uses asyncio to parallelise downloading the files.")
3880 (license license:expat)))
3881
3882(define-public python-html2text
3883 (package
3884 (name "python-html2text")
3885 (version "2020.1.16")
3886 (source
3887 (origin
3888 (method url-fetch)
3889 (uri (pypi-uri "html2text" version))
3890 (sha256
3891 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
3892 (build-system pyproject-build-system)
3893 (native-inputs (list python-pytest python-setuptools python-wheel))
3894 (home-page "https://github.com/Alir3z4/html2text")
3895 (synopsis "Convert HTML into plain text")
3896 (description
3897 "html2text takes HTML and converts it into plain ASCII text
3898which is also valid markdown. html2text was originally written by Aaron
3899Swartz.")
3900 (license license:gpl3+)))
3901
3902(define-public python-jose
3903 (package
3904 (name "python-jose")
3905 (version "3.5.0")
3906 (home-page "https://github.com/mpdavis/python-jose")
3907 (source (origin
3908 (method git-fetch)
3909 (uri (git-reference (url home-page) (commit version)))
3910 (file-name (git-file-name name version))
3911 (sha256
3912 (base32
3913 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
3914 (build-system pyproject-build-system)
3915 (native-inputs
3916 (list python-pyasn1 python-pytest python-setuptools))
3917 (propagated-inputs
3918 (list python-cryptography python-ecdsa python-rsa))
3919 (synopsis "JOSE implementation in Python")
3920 (description
3921 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
3922- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
3923JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
3924content using a variety of algorithms.")
3925 (license license:expat)))
3926
3927(define-public python-joserfc
3928 (package
3929 (name "python-joserfc")
3930 (version "1.0.1")
3931 (source
3932 (origin
3933 (method url-fetch)
3934 (uri (pypi-uri "joserfc" version))
3935 (sha256
3936 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
3937 (build-system pyproject-build-system)
3938 (arguments
3939 (list
3940 #:test-flags
3941 ;; No module named 'Crypto'
3942 '(list "--ignore=tests/jwe/test_chacha20.py"
3943 ;; Deprecation warnings are not raised.
3944 "-k" (string-append "not test_guess_bytes_key"
3945 " and not test_guess_callable_key"
3946 " and not test_guess_str_key"))))
3947 (propagated-inputs (list python-cryptography))
3948 (native-inputs (list python-pytest python-setuptools python-wheel))
3949 (home-page "https://github.com/authlib/joserfc")
3950 (synopsis "Python library for JOSE RFCs")
3951 (description
3952 "This package provides a Python library for JOSE RFCs, including JWS,
3953JWE, JWK, JWA, and JWT.")
3954 (license license:bsd-3)))
3955
3956(define-public python-jwcrypto
3957 (package
3958 (name "python-jwcrypto")
3959 (version "1.5.6")
3960 (source
3961 (origin
3962 (method url-fetch)
3963 (uri (pypi-uri "jwcrypto" version))
3964 (sha256
3965 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
3966 (build-system pyproject-build-system)
3967 (native-inputs
3968 (list python-pytest
3969 python-setuptools))
3970 (propagated-inputs
3971 (list python-cryptography
3972 python-typing-extensions))
3973 (home-page "https://github.com/latchset/jwcrypto")
3974 (synopsis "Implementation of JOSE Web standards")
3975 (description
3976 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
3977Encryption} (JOSE) Web Standards.")
3978 (license license:lgpl3+)))
3979
3980(define-public python-pypitoken
3981 (package
3982 (name "python-pypitoken")
3983 (version "7.0.1")
3984 (source
3985 (origin
3986 (method url-fetch)
3987 (uri (pypi-uri "pypitoken" version))
3988 (sha256
3989 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
3990 (build-system pyproject-build-system)
3991 ;; There are no tests.
3992 (arguments (list #:tests? #false))
3993 (propagated-inputs (list python-jsonschema python-pymacaroons
3994 python-typing-extensions))
3995 (native-inputs (list python-poetry-core))
3996 (home-page "https://pypitoken.readthedocs.io/en/latest/")
3997 (synopsis "Manipulate PyPI API tokens")
3998 (description "This package lets you manipulate PyPI API tokens.")
3999 (license license:expat)))
4000
4001(define-public python-pyscss
4002 ;; XXX: no fresh release supporting Python 3.11, use the latest commit, see
4003 ;; <https://github.com/Kronuz/pyScss/issues/428>,
4004 ;; <https://github.com/Kronuz/pyScss/issues/431>.
4005 (let ((commit "73559d047706ccd4593cf6aa092de71f35164723")
4006 (revision "0"))
4007 (package
4008 (name "python-pyscss")
4009 (version (git-version "1.4.0" revision commit))
4010 (source
4011 (origin
4012 (method git-fetch) ; no tests in PyPI release
4013 (uri (git-reference
4014 (url "https://github.com/Kronuz/pyScss")
4015 (commit commit)))
4016 (file-name (git-file-name name version))
4017 (sha256
4018 (base32 "00msypxf5dm57gyfp3jxvjinigi4km84v33w83635pms9li2k3y7"))))
4019 (build-system pyproject-build-system)
4020 (native-inputs
4021 (list python-pytest-8
4022 python-setuptools))
4023 (inputs
4024 (list pcre))
4025 (propagated-inputs
4026 (list python-six)) ;hard dependency in scss/compiler.py
4027 (home-page "https://github.com/Kronuz/pyScss")
4028 (synopsis "Scss compiler for Python")
4029 (description
4030 "@code{pyScss} is a compiler for Sass, a superset language of
4031CSS3 that adds programming capabilities and some other syntactic sugar.")
4032 (license license:expat))))
4033
4034(define-public python-jsonpickle
4035 (package
4036 (name "python-jsonpickle")
4037 (version "4.0.0")
4038 (source (origin
4039 (method url-fetch)
4040 (uri (pypi-uri "jsonpickle" version))
4041 (sha256
4042 (base32
4043 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
4044 (build-system pyproject-build-system)
4045 (arguments
4046 (list
4047 #:test-flags '(list "tests")
4048 #:phases
4049 '(modify-phases %standard-phases
4050 (add-before 'check 'pre-check
4051 (lambda* (#:key inputs #:allow-other-keys)
4052 (setenv "TZ" "UTC")
4053 (setenv "TZDIR"
4054 (search-input-directory inputs "share/zoneinfo")))))))
4055 (native-inputs
4056 (list python-bson
4057 python-ecdsa
4058 python-feedparser
4059 python-pymongo
4060 python-pytest
4061 python-pytest-benchmark
4062 python-pytest-enabler
4063 python-setuptools
4064 python-setuptools-scm
4065 python-simplejson
4066 python-sqlalchemy
4067 python-ujson
4068 python-wheel
4069 tzdata-for-tests))
4070 (home-page "https://jsonpickle.github.io/")
4071 (synopsis "Serialize object graphs into JSON")
4072 (description
4073 "This package provides a Python library for serializing any arbitrary
4074object graph to and from JSON.")
4075 (license license:bsd-3)))
4076
4077(define-public python-mcp
4078 (package
4079 (name "python-mcp")
4080 (version "1.25.0")
4081 (source
4082 (origin
4083 (method url-fetch)
4084 (uri (pypi-uri "mcp" version))
4085 (sha256
4086 (base32 "00k87bl4jvnh7hrmicwb2m715fwccvvlanwf8cnlwdphxdhh6can"))))
4087 (build-system pyproject-build-system)
4088 (arguments
4089 (list
4090 ;; XXX: 186 failed, 648 passed, 94 skipped, 54 errors
4091 ;; A lot of tests fail for unclear reasons.
4092 #:tests? #f))
4093 (propagated-inputs (list python-httpx python-pydantic))
4094 (native-inputs
4095 (list python-hatchling
4096 python-httpx-sse
4097 python-jsonschema
4098 python-pydantic-settings
4099 python-pytest
4100 python-pytest-examples
4101 python-pytest-xdist
4102 python-sse-starlette
4103 python-starlette
4104 python-typer
4105 python-typing-inspection
4106 python-uvicorn))
4107 (home-page "https://modelcontextprotocol.io")
4108 (synopsis "Model Context Protocol SDK")
4109 (description
4110 "This package provides a Python Software Development Kit for the Model
4111Context Protocol (MCP).")
4112 (license license:expat)))
4113
4114(define-public python-mechanicalsoup
4115 (package
4116 (name "python-mechanicalsoup")
4117 (version "1.4.0")
4118 (source
4119 (origin
4120 (method url-fetch)
4121 (uri (pypi-uri "mechanicalsoup" version))
4122 (sha256
4123 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
4124 (build-system pyproject-build-system)
4125 (arguments
4126 (list
4127 #:test-flags
4128 ;; Unclear why test fails.
4129 #~(list "-k" "not test_select_form_associated_elements")
4130 ;; The following dependencies are not directly required, the developer
4131 ;; only pinned versions because of vulnerabilities. They also break
4132 ;; sanity-check because it checks for a python-certifi version which is
4133 ;; more recent than the one available in Guix.
4134 #:phases #~(modify-phases %standard-phases
4135 (add-after 'unpack 'relax-dependencies
4136 (lambda _
4137 (substitute* "requirements.txt"
4138 (("certifi.*") "")
4139 (("urllib3.*") "")))))))
4140 (propagated-inputs
4141 (list python-beautifulsoup4 python-lxml python-requests))
4142 (native-inputs
4143 (list python-pytest
4144 python-pytest-flake8
4145 python-pytest-httpbin
4146 python-pytest-mock
4147 python-requests-mock
4148 python-setuptools
4149 python-wheel))
4150 (home-page "https://mechanicalsoup.readthedocs.io/")
4151 (synopsis "Python library for automating website interaction")
4152 (description
4153 "MechanicalSoup is a Python library for automating interaction with
4154websites. It automatically stores and sends cookies, follows redirects, and can
4155follow links and submit forms. It doesn’t do JavaScript.")
4156 (license license:expat)))
4157
4158(define-public python-hypercorn
4159 (package
4160 (name "python-hypercorn")
4161 (version "0.18.0")
4162 (source
4163 (origin
4164 (method git-fetch)
4165 (uri (git-reference
4166 (url "https://github.com/pgjones/hypercorn")
4167 (commit version)))
4168 (file-name (git-file-name name version))
4169 (sha256
4170 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
4171 (build-system pyproject-build-system)
4172 (propagated-inputs
4173 (list python-aioquic
4174 python-h11
4175 python-h2
4176 python-priority
4177 python-pydata-sphinx-theme
4178 python-sphinxcontrib-mermaid
4179 python-tomli
4180 python-trio
4181 python-typing-extensions
4182 python-uvloop
4183 python-wsproto))
4184 (native-inputs
4185 (list nss-certs-for-test
4186 python-httpx
4187 python-pdm-backend
4188 python-pytest
4189 python-pytest-asyncio
4190 python-pytest-cov
4191 python-pytest-trio))
4192 (home-page "https://github.com/pgjones/hypercorn")
4193 (synopsis "ASGI Server based on Hyper libraries")
4194 (description
4195 "This package provides an ASGI (Asynchronous Server Gateway Interface)
4196Server based on Hyper libraries and inspired by @code{python-gunicorn}.")
4197 (license license:expat)))
4198
4199(define-public python-hyperframe
4200 (package
4201 (name "python-hyperframe")
4202 (version "6.1.0")
4203 (source
4204 (origin
4205 (method url-fetch)
4206 (uri (pypi-uri "hyperframe" version))
4207 (sha256
4208 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
4209 (build-system pyproject-build-system)
4210 (native-inputs
4211 (list python-pytest python-setuptools))
4212 (home-page "https://github.com/python-hyper/hyperframe")
4213 (synopsis "HTTP/2 framing layer for Python")
4214 (description
4215 "This library contains the HTTP/2 framing code used in the hyper project.
4216It provides a pure-Python codebase that is capable of decoding a binary stream
4217into HTTP/2 frames.")
4218 (license license:expat)))
4219
4220(define-public python-hpack
4221 (package
4222 (name "python-hpack")
4223 (version "4.1.0")
4224 (source
4225 (origin
4226 ;; PyPI tarball is missing some files necessary for the tests.
4227 (method git-fetch)
4228 (uri (git-reference
4229 (url "https://github.com/python-hyper/hpack")
4230 (commit (string-append "v" version))))
4231 (file-name (git-file-name name version))
4232 (sha256
4233 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
4234 (build-system pyproject-build-system)
4235 (native-inputs
4236 (list python-pytest python-setuptools))
4237 (home-page "https://hyper.rtfd.org")
4238 (synopsis "Pure-Python HPACK header compression")
4239 (description
4240 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
4241for use in Python programs that implement HTTP/2.")
4242 (license license:expat)))
4243
4244(define-public python-h11
4245 (package
4246 (name "python-h11")
4247 (version "0.16.0")
4248 (source
4249 (origin
4250 (method url-fetch)
4251 (uri (pypi-uri "h11" version))
4252 (sha256
4253 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
4254 (build-system pyproject-build-system)
4255 (native-inputs
4256 (list python-pytest python-setuptools))
4257 (home-page "https://github.com/python-hyper/h11")
4258 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
4259 (description
4260 "This is a little HTTP/1.1 library written from scratch in Python, heavily
4261inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
4262code whatsoever. This means you can hook h11 up to your favorite network API,
4263and that could be anything you want.")
4264 (license license:expat)))
4265
4266(define-public python-h2
4267 (package
4268 (name "python-h2")
4269 (version "4.1.0")
4270 (source
4271 (origin
4272 (method url-fetch)
4273 (uri (pypi-uri "h2" version))
4274 (sha256
4275 (base32 "1fraip114fm1ha5w37pdc0sk8dn9pb0ck267zrwwpap7zc4clfm8"))))
4276 (build-system pyproject-build-system)
4277 (arguments
4278 (list
4279 ;; AssertionError: assert '<RemoteSettingsChanged
4280 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
4281 ;; new_value=32768)}>' == '<RemoteSettingsChanged
4282 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
4283 ;; original_value=65536, new_value=32768)}>'
4284 #:test-flags
4285 #~(list "-k"
4286 (string-join
4287 (list "not test_remotesettingschanged_repr"
4288 ;; This test exceededs the Hypothesis deadline.
4289 #$@(if (target-riscv64?)
4290 #~("test_changing_max_frame_size")
4291 #~())
4292 "test_streamreset_repr"
4293 "test_settingsacknowledged_repr"
4294 "test_connectionterminated_repr[None-None]"
4295 "test_connectionterminated_repr[some"
4296 "test_remotesettingschanged_repr"
4297 "test_streamreset_repr"
4298 "test_settingsacknowledged_repr"
4299 "test_connectionterminated_repr[None-None]"
4300 "test_connectionterminated_repr[some")
4301 " and not "))))
4302 (native-inputs
4303 (list python-pytest
4304 python-setuptools
4305 python-wheel))
4306 (propagated-inputs
4307 (list python-hpack
4308 python-hyperframe))
4309 (home-page "https://github.com/python-hyper/h2")
4310 (synopsis "HTTP/2 State-Machine based protocol implementation")
4311 (description
4312 "This module contains a pure-Python implementation of a HTTP/2 protocol
4313stack. It does not provide a parsing layer, a network layer, or any rules
4314about concurrency. Instead, it's a purely in-memory solution, defined in
4315terms of data actions and HTTP/2 frames. This is one building block of a full
4316Python HTTP implementation.")
4317 (license license:expat)))
4318
4319(define-public python-slixmpp
4320 (package
4321 (name "python-slixmpp")
4322 (version "1.8.6") ; XXX: The latest version which does not require Rust
4323 (source
4324 (origin
4325 (method git-fetch)
4326 (uri (git-reference
4327 (url "https://codeberg.org/poezio/slixmpp")
4328 (commit (string-append "slix-" version))))
4329 (file-name (git-file-name name version))
4330 (sha256
4331 (base32 "0gpy6arwyk4lsx1hbcwbllxs6qbwn58adkp1rm1cfvfrjdv5kxx7"))))
4332 (build-system pyproject-build-system)
4333 (arguments
4334 (list
4335 #:phases
4336 #~(modify-phases %standard-phases
4337 (add-after 'unpack 'patch-setup.py
4338 (lambda _
4339 (substitute* "setup.py"
4340 (("'CC', 'cc'")
4341 "'CC', 'gcc'")))))))
4342 (native-inputs
4343 (list gnupg
4344 pkg-config
4345 python-cython
4346 python-setuptools
4347 python-wheel))
4348 (inputs
4349 (list libidn
4350 python)) ; We are building a Python extension.
4351 (propagated-inputs
4352 (list python-aiodns
4353 python-aiohttp
4354 python-cryptography
4355 python-defusedxml
4356 python-emoji
4357 python-pyasn1
4358 python-pyasn1-modules))
4359 (home-page "https://lab.louiz.org/poezio/slixmpp")
4360 (synopsis "XMPP library without threads")
4361 (description
4362 "Slixmpp is a XMPP library for Python 3.7+. It is a fork of SleekXMPP.
4363Its goal is to only rewrite the core of the library (the low level socket
4364handling, the timers, the events dispatching) in order to remove all
4365threads.")
4366 (license license:expat)))
4367
4368(define-public python-sockjs-tornado
4369 (package
4370 (name "python-sockjs-tornado")
4371 (version "1.0.6")
4372 (source
4373 (origin
4374 (method git-fetch)
4375 (uri (git-reference
4376 (url "https://github.com/mrjoes/sockjs-tornado/")
4377 (commit (string-append "v" version))))
4378 (file-name (git-file-name name version))
4379 (sha256
4380 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
4381 (build-system pyproject-build-system)
4382 (arguments
4383 (list
4384 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
4385 (native-inputs (list python-setuptools))
4386 (propagated-inputs (list python-tornado))
4387 (home-page "https://github.com/mrjoes/sockjs-tornado/")
4388 (synopsis
4389 "SockJS Python server implementation on top of the Tornado framework")
4390 (description
4391 "SockJS-tornado provides the server-side counterpart to a SockJS client
4392library, through the Tornado framework.
4393
4394SockJS provides a low-latency, full-duplex, cross-domain communication channel
4395between a web browser and web server.")
4396 (license license:expat)))
4397
4398(define-public python-flask-assets
4399 ;; The latest release still depends on the abandoned flask-script, whereas
4400 ;; at this later commit (already 2 years old at the time of this writing)
4401 ;; the dependency has been lifted.
4402 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
4403 (revision "1"))
4404 (package
4405 (name "python-flask-assets")
4406 (version (git-version "2.1.0" revision commit))
4407 (source
4408 (origin
4409 (method git-fetch)
4410 (uri (git-reference
4411 (url "https://github.com/miracle2k/flask-assets/")
4412 (commit commit)))
4413 (file-name (git-file-name name version))
4414 (sha256
4415 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
4416 (build-system pyproject-build-system)
4417 (propagated-inputs
4418 (list python-flask python-webassets))
4419 (native-inputs
4420 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
4421 (home-page "https://github.com/miracle2k/flask-assets")
4422 (synopsis "Asset management for Flask")
4423 (description "This package integrates @code{webassets} with Flask, adding
4424support for merging, minifying and compiling CSS and Javascript files.")
4425 (license license:bsd-2))))
4426
4427(define-public python-flask-babel
4428 (package
4429 (name "python-flask-babel")
4430 (version "4.0.0")
4431 (source
4432 (origin
4433 (method git-fetch) ;no tests in pypi release
4434 (uri (git-reference
4435 (url "https://github.com/python-babel/flask-babel")
4436 (commit (string-append "v" version))))
4437 (sha256
4438 (base32
4439 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
4440 (build-system pyproject-build-system)
4441 (native-inputs
4442 (list python-poetry-core
4443 python-pytest
4444 python-pytest-mock))
4445 (propagated-inputs
4446 (list python-babel
4447 python-flask
4448 python-jinja2
4449 python-pytz))
4450 (home-page "https://github.com/python-babel/flask-babel")
4451 (synopsis "Add i18n/l10n support to Flask applications")
4452 (description "This package implements internationalization and localization
4453support for Flask. This is based on the Python babel module as well as pytz -
4454both of which are installed automatically if you install this library.")
4455 (license license:bsd-3)))
4456
4457(define-public python-flask-cors
4458 (package
4459 (name "python-flask-cors")
4460 (version "6.0.2")
4461 (source
4462 (origin
4463 (method git-fetch) ;no tests in PyPI archive
4464 (uri (git-reference
4465 (url "https://github.com/CoryDolphin/flask-cors")
4466 (commit version)))
4467 (file-name (git-file-name name version))
4468 (sha256
4469 (base32 "02y740h951dscgkm7ghsss1bc0m8ymsfdpsimm1j0nkl0zjl6sgm"))))
4470 (build-system pyproject-build-system)
4471 (arguments
4472 (list
4473 #:phases
4474 #~(modify-phases %standard-phases
4475 (add-after 'unpack 'fix-version
4476 (lambda _
4477 ;; Otherwise sanity-check of dependents will fail.
4478 (substitute* "pyproject.toml"
4479 (("version = \"0\\.0\\.1\"" all)
4480 (string-append "version = \"" #$version "\""))))))))
4481 (native-inputs
4482 (list python-pytest
4483 python-setuptools))
4484 (propagated-inputs
4485 (list python-flask
4486 python-werkzeug))
4487 (home-page "https://flask-cors.readthedocs.io/en/latest/")
4488 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
4489 (description
4490 "This package provides a Flask extension for handling @acronym{CORS,Cross
4491Origin Resource Sharing}, making cross-origin AJAX possible.")
4492 (license license:expat)))
4493
4494(define-public python-flask-markdown
4495 (package
4496 (name "python-flask-markdown")
4497 (version "0.3")
4498 (source
4499 (origin
4500 (method git-fetch)
4501 (uri (git-reference
4502 (url "https://github.com/dcolish/flask-markdown")
4503 (commit version)))
4504 (file-name (git-file-name name version))
4505 (sha256
4506 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
4507 (build-system pyproject-build-system)
4508 (arguments
4509 (list
4510 #:tests? #f ;Tests seem to be incompatible with latest python
4511 #:phases
4512 #~(modify-phases %standard-phases
4513 (add-after 'unpack 'set-version
4514 (lambda _
4515 (substitute* "setup.py"
4516 (("dev")
4517 #$version)))))))
4518 (propagated-inputs (list python-markdown python-flask))
4519 (native-inputs (list python-pynose python-setuptools))
4520 (home-page "https://github.com/dcolish/flask-markdown")
4521 (synopsis "Small extension to help with using Markdown in Flask")
4522 (description
4523 "Flask-Markdown supports several extensions for Markdown and integrates
4524into Jinja2 by default.")
4525 (license license:bsd-3)))
4526
4527(define-public python-flask-session
4528 (package
4529 (name "python-flask-session")
4530 (version "0.8.0")
4531 (source
4532 (origin
4533 (method url-fetch)
4534 (uri (pypi-uri "flask_session" version))
4535 (sha256
4536 (base32
4537 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
4538 (build-system pyproject-build-system)
4539 (arguments
4540 '(#:tests? #f)) ; Tests require the various storage backends to be present
4541 (native-inputs (list python-flit-core))
4542 (propagated-inputs
4543 (list python-cachelib python-flask python-msgspec))
4544 (home-page "https://github.com/pallets-eco/flask-session")
4545 (synopsis "Adds server-side session support to your Flask application")
4546 (description
4547 "Flask-Session is an extension for Flask that adds support for
4548Server-side sessions, with a variety of different backends for session
4549storage.")
4550 (license license:bsd-3)))
4551
4552(define-public python-html5lib
4553 (package
4554 (name "python-html5lib")
4555 (version "1.1")
4556 (source
4557 (origin
4558 (method url-fetch)
4559 (uri (pypi-uri "html5lib" version))
4560 (sha256
4561 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
4562 (build-system pyproject-build-system)
4563 (arguments
4564 '(#:tests? #f)) ;tests depend on dated pytest-expect
4565 (native-inputs
4566 (list python-setuptools))
4567 (propagated-inputs
4568 (list python-six
4569 python-webencodings
4570 ;; Required by Calibre 5.
4571 python-chardet))
4572 (home-page "https://github.com/html5lib/html5lib-python")
4573 (synopsis "Python HTML parser based on the WHATWG HTML specification")
4574 (description
4575 "Html5lib is an HTML parser based on the WHATWG HTML specification
4576and written in Python.")
4577 (license license:expat)))
4578
4579(define-public python-html5-parser
4580 (package
4581 (name "python-html5-parser")
4582 (version "0.4.12")
4583 (source
4584 (origin
4585 (method git-fetch)
4586 (uri (git-reference
4587 (url "https://github.com/kovidgoyal/html5-parser")
4588 (commit (string-append "v" version))))
4589 (file-name (git-file-name name version))
4590 (sha256
4591 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
4592 (build-system pyproject-build-system)
4593 (arguments
4594 (list
4595 #:phases
4596 #~(modify-phases %standard-phases
4597 (add-before 'build 'set-configure-flags
4598 (lambda _
4599 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
4600 (native-inputs (list pkg-config python-setuptools))
4601 (inputs (list libxml2))
4602 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
4603 (home-page "https://html5-parser.readthedocs.io")
4604 (synopsis "Fast C-based HTML5 parsing for Python")
4605 (description
4606 "This package provides a fast implementation of the HTML5 parsing spec
4607for Python. Parsing is done in C using a variant of the gumbo parser. The
4608gumbo parse tree is then transformed into an lxml tree, also in C, yielding
4609parse times that can be a thirtieth of the html5lib parse times.")
4610 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
4611 ;; indicate ASL2.0, including the LICENSE file for the whole project.
4612 (license (list license:asl2.0 license:gpl3))))
4613
4614(define-public python-html5tagger
4615 (package
4616 (name "python-html5tagger")
4617 (version "1.3.0")
4618 (source (origin
4619 (method url-fetch)
4620 (uri (pypi-uri "html5tagger" version))
4621 (sha256
4622 (base32
4623 "1acd1a4f66gi4plqnsml7cf33qp83mxsnmnqpdwkpj7597xkvyl4"))))
4624 (build-system pyproject-build-system)
4625 (arguments
4626 (list #:tests? #f)) ;no tests in PyPI or Git
4627 (native-inputs
4628 (list python-setuptools python-setuptools-scm python-wheel))
4629 (home-page "https://github.com/sanic-org/html5tagger")
4630 (synopsis "Create HTML documents from Python")
4631 (description
4632 "@code{html5tagger} provides a simplified HTML5 syntax that can
4633be written directly in Python without templates.")
4634 (license license:unlicense)))
4635
4636(define-public python-minio
4637 (package
4638 (name "python-minio")
4639 (version "7.1.9")
4640 (source
4641 (origin
4642 (method git-fetch)
4643 (uri (git-reference
4644 (url "https://github.com/minio/minio-py")
4645 (commit version)))
4646 (file-name (git-file-name name version))
4647 (sha256
4648 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
4649 (build-system pyproject-build-system)
4650 (arguments
4651 (list
4652 #:test-flags
4653 ;; XXX: requires network access.
4654 #~(list "--ignore=tests/unit/credentials_test.py")))
4655 (native-inputs (list python-pytest python-setuptools))
4656 (propagated-inputs
4657 (list python-certifi python-dateutil python-pytz python-urllib3))
4658 (home-page "https://github.com/minio/minio-py")
4659 (synopsis "Programmatically access Amazon S3 from Python")
4660 (description
4661 "This package provides a Python library for interacting with any
4662Amazon S3 compatible object storage server.")
4663 (license license:asl2.0)))
4664
4665(define-public python-pycrdt
4666 (package
4667 (name "python-pycrdt")
4668 (version "0.13.0")
4669 (source
4670 (origin
4671 (method git-fetch)
4672 (uri (git-reference
4673 (url "https://github.com/y-crdt/pycrdt")
4674 (commit version)))
4675 (file-name (git-file-name name version))
4676 (sha256
4677 (base32 "18mnjbxdlra1w3jl42bf1jb25z9j3inh6s61qighqrvnylgxvxc1"))))
4678 (build-system pyproject-build-system)
4679 (arguments
4680 (list
4681 #:imported-modules `(,@%cargo-build-system-modules
4682 ,@%pyproject-build-system-modules)
4683 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4684 (guix build pyproject-build-system)
4685 (guix build utils))
4686 #:test-flags #~(list "--ignore=tests/test_types.py")
4687 #:phases
4688 #~(modify-phases %standard-phases
4689 (add-after 'unpack 'relax-requirements
4690 (lambda _
4691 (substitute* "pyproject.toml"
4692 (("requires = \\[\"maturin>=.*\"\\]")
4693 "requires = [\"maturin\"]"))))
4694 (add-after 'unpack 'prepare-cargo-build-system
4695 (lambda args
4696 (for-each
4697 (lambda (phase)
4698 (format #t "Running cargo phase: ~a~%" phase)
4699 (apply (assoc-ref cargo:%standard-phases phase)
4700 #:cargo-target #$(cargo-triplet)
4701 args))
4702 '(unpack-rust-crates
4703 configure
4704 check-for-pregenerated-files
4705 patch-cargo-checksums)))))))
4706 (propagated-inputs
4707 (list python-anyio
4708 python-typing-extensions))
4709 (inputs (cargo-inputs 'pycrdt))
4710 (native-inputs
4711 (append
4712 (list maturin
4713 python-pydantic
4714 python-pytest
4715 rust
4716 `(,rust "cargo"))
4717 (or (and=> (%current-target-system)
4718 (compose list make-rust-sysroot))
4719 '())))
4720 (home-page "https://github.com/y-crdt/pycrdt")
4721 (synopsis "Python CRDTs library ported from Yjs framework")
4722 (description
4723 "Conflict-free Replicated Data Types (CRDTs) allow creating shared
4724documents that can automatically merge changes made concurrently on different
4725copies of the data. When the data lives on different machines, they make it
4726possible to build distributed systems that work with local data, leaving the
4727synchronization and conflict resolution with remote data to the CRDT
4728algorithm, which ensures that all data replicas eventually converge to the
4729same state.
4730
4731This is a Python CRDT library that provides bindings for Yrs, the Rust port of
4732the Yjs framework.")
4733 (license license:expat)))
4734
4735(define-public python-pycrdt-store
4736 (package
4737 (name "python-pycrdt-store")
4738 (version "0.1.3")
4739 (source
4740 (origin
4741 (method git-fetch)
4742 (uri (git-reference
4743 (url "https://github.com/y-crdt/pycrdt-store")
4744 (commit version)))
4745 (file-name (git-file-name name version))
4746 (sha256
4747 (base32 "18yvv5lgxb4v0qlbi8bbkcm1666nxbkmhbx445sxpzab7027fl1a"))))
4748 (build-system pyproject-build-system)
4749 (propagated-inputs
4750 (list python-anyio
4751 python-pycrdt
4752 python-sqlite-anyio))
4753 (native-inputs
4754 (list python-hatchling
4755 python-pytest
4756 python-pytest-rerunfailures
4757 python-trio))
4758 (home-page "https://github.com/y-crdt/pycrdt-store")
4759 (synopsis "Persistent storage for pycrdt")
4760 (description
4761 "This package provides a persistent storage feature for
4762@code{python-pycrdt}.")
4763 (license license:expat)))
4764
4765(define-public python-pycrdt-websocket
4766 (package
4767 (name "python-pycrdt-websocket")
4768 (version "0.16.0")
4769 (source
4770 (origin
4771 (method git-fetch)
4772 (uri (git-reference
4773 (url "https://github.com/y-crdt/pycrdt-websocket")
4774 (commit version)))
4775 (file-name (git-file-name name version))
4776 (sha256
4777 (base32 "1bcxivdra0v5fwlz3hcz98vxi61884bfvcwifsdp3mji28iprv22"))))
4778 (build-system pyproject-build-system)
4779 (arguments
4780 (list
4781 ;; These tests require the unpackaged Yjs.
4782 #:test-flags #~(list "--deselect=tests/test_pycrdt_yjs.py")))
4783 (propagated-inputs
4784 (list python-anyio
4785 python-pycrdt
4786 python-pycrdt-store))
4787 (native-inputs
4788 (list nss-certs-for-test
4789 python-hatchling
4790 python-hypercorn
4791 python-httpx-ws
4792 python-pytest))
4793 (home-page "https://github.com/y-crdt/pycrdt-websocket")
4794 (synopsis "WebSocket connector for pycrdt")
4795 (description "This package provides an asynchronous @code{WebSocket}
4796connector for @code{python-pycrdt}.")
4797 (license license:expat)))
4798
4799(define-public python-pycurl
4800 (package
4801 (name "python-pycurl")
4802 (version "7.45.4")
4803 (source
4804 (origin
4805 (method git-fetch)
4806 (uri (git-reference
4807 (url "https://github.com/pycurl/pycurl")
4808 (commit (string-append
4809 "REL_" (string-replace-substring version "." "_")))))
4810 (file-name (git-file-name name version))
4811 (sha256
4812 (base32 "00cd1l0lsml0708hpv5k4qyhqfv0qphb0p317j9aci2wdspn1mpl"))))
4813 (build-system pyproject-build-system)
4814 (arguments
4815 '(#:test-flags
4816 ;; The test suite is not thread safe:
4817 ;; - some tests want to use the same port: address already in use
4818 ;; - some tests use signal.Signal, i.e. main-thread only
4819 (list "-k" (string-append
4820 ;; Disable hanginging tests
4821 "not test_multi_socket_select"
4822 ;; E assert None is not None
4823 ;; E+ where None =
4824 ;; <tests.multi_callback_test.MultiCallbackTest
4825 ;; testMethod=test_multi_socket_action>.timer_result
4826 " and not test_multi_socket_action"
4827 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
4828 ;; open shared object file: No such file or directory
4829 " and not test_libcurl_ssl_gnutls"
4830 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
4831 ;; open shared object file: No such file or directory
4832 " and not test_libcurl_ssl_nss"
4833 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
4834 ;; open shared object file: No such file or directory
4835 " and not test_libcurl_ssl_openssl"
4836 ;; Probably due to an expired CA
4837 " and not test_request_without_certinfo"
4838 ;; "A libcurl function was given a bad argument"
4839 " and not test_proxy_tlsauth"))
4840 #:phases (modify-phases %standard-phases
4841 (add-before 'build 'configure-tls-backend
4842 (lambda _
4843 ;; XXX: PycURL fails to automatically determine which
4844 ;; TLS backend to use when cURL is built with
4845 ;; --disable-static. See setup.py and
4846 ;; <https://github.com/pycurl/pycurl/pull/147>.
4847 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
4848 (native-inputs
4849 (list python-bottle
4850 python-flaky
4851 python-flask
4852 python-pytest
4853 python-setuptools
4854 python-wheel))
4855 (inputs
4856 (list curl gnutls))
4857 (home-page "http://pycurl.io/")
4858 (synopsis "Lightweight Python wrapper around libcurl")
4859 (description "Pycurl is a lightweight wrapper around libcurl. It provides
4860high-speed transfers via libcurl and frequently outperforms alternatives.")
4861
4862 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
4863 ;; under the terms of LGPLv2.1+ or Expat.
4864 (license (list license:lgpl2.1+ license:expat))))
4865
4866(define-public python-stamina
4867 (package
4868 (name "python-stamina")
4869 (version "25.2.0")
4870 (source
4871 (origin
4872 (method git-fetch)
4873 (uri (git-reference
4874 (url "https://github.com/hynek/stamina")
4875 (commit version)))
4876 (file-name (git-file-name name version))
4877 (sha256
4878 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
4879 (build-system pyproject-build-system)
4880 (native-inputs
4881 (list python-pytest
4882 python-anyio
4883 python-dirty-equals
4884 python-hatch-fancy-pypi-readme
4885 python-hatch-vcs
4886 python-hatchling
4887 python-structlog))
4888 (propagated-inputs
4889 (list python-tenacity
4890 python-typing-extensions))
4891 (home-page "https://github.com/hynek/stamina")
4892 (synopsis "Retries library for Python")
4893 (description
4894 "@code{stamina} is an opinionated wrapper around the
4895@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
4896 (license license:expat)))
4897
4898(define-public python-stripe
4899 (package
4900 (name "python-stripe")
4901 (version "13.2.0")
4902 (source
4903 (origin
4904 (method git-fetch)
4905 (uri (git-reference
4906 (url "https://github.com/stripe/stripe-python")
4907 (commit (string-append "v" version))))
4908 (file-name (git-file-name name version))
4909 (sha256
4910 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
4911 (build-system pyproject-build-system)
4912 (arguments
4913 '(#:tests? #f)) ;; tests require network
4914 (native-inputs
4915 (list python-flit-core))
4916 (propagated-inputs
4917 (list python-httpx
4918 python-requests))
4919 (home-page "https://github.com/stripe/stripe-python")
4920 (synopsis "Python bindings for the Stripe financial services' API")
4921 (description "This package provides access to the Stripe financial
4922services' API. It includes a pre-defined set of classes for API resources
4923that initialize themselves dynamically from API responses which makes it
4924compatible with a wide range of versions of the Stripe API.")
4925 (license license:expat)))
4926
4927(define-public python-stripe-12
4928 (hidden-package
4929 (package/inherit python-stripe
4930 (name "python-stripe")
4931 (version "12.5.1")
4932 (source
4933 (origin
4934 (inherit (package-source python-stripe))
4935 (uri (git-reference
4936 (url "https://github.com/stripe/stripe-python")
4937 (commit (string-append "v" version))))
4938 (file-name (git-file-name name version))
4939 (sha256 (base32
4940 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
4941 (native-inputs
4942 (list python-setuptools)))))
4943
4944(define-public python-tldextract
4945 (package
4946 (name "python-tldextract")
4947 (version "5.3.0")
4948 (source
4949 (origin
4950 (method url-fetch)
4951 (uri (pypi-uri "tldextract" version))
4952 (sha256
4953 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
4954 (build-system pyproject-build-system)
4955 (arguments
4956 (list
4957 #:phases
4958 #~(modify-phases %standard-phases
4959 (add-after 'unpack 'relax-requirements
4960 (lambda _
4961 (substitute* "pyproject.toml"
4962 (("\"requests-file.*\",")
4963 "\"requests-file\",")))))))
4964 (native-inputs
4965 (list nss-certs-for-test
4966 python-pytest
4967 python-pytest-mock
4968 python-responses
4969 python-setuptools
4970 python-setuptools-scm
4971 python-syrupy))
4972 (propagated-inputs
4973 (list python-filelock
4974 python-idna
4975 python-requests
4976 python-requests-file))
4977 (home-page "https://github.com/john-kurkowski/tldextract")
4978 (synopsis
4979 "Separate the TLD from the registered domain and subdomains of a URL")
4980 (description
4981 "TLDExtract accurately separates the TLD from the registered domain and
4982subdomains of a URL, using the Public Suffix List. By default, this includes
4983the public ICANN TLDs and their exceptions. It can optionally support the
4984Public Suffix List's private domains as well.")
4985 (license license:bsd-3)))
4986
4987(define-public python-tracerite
4988 (package
4989 (name "python-tracerite")
4990 (version "1.1.3")
4991 (source
4992 (origin
4993 (method url-fetch)
4994 (uri (pypi-uri "tracerite" version))
4995 (sha256
4996 (base32 "07mkg0sl0h335kj6yjvxki2c19gxhb7rkks1zgzh7aj0y83c17qi"))))
4997 (build-system pyproject-build-system)
4998 (arguments
4999 (list #:tests? #f)) ;no tests in PyPI or Git
5000 (native-inputs
5001 (list python-setuptools
5002 python-setuptools-scm))
5003 (propagated-inputs
5004 (list python-html5tagger))
5005 (home-page "https://github.com/sanic-org/tracerite")
5006 (synopsis "Human-readable HTML tracebacks")
5007 (description
5008 "@code{tracerite} converts Python tracebacks into useful error messages
5009in human-readable HTML format.")
5010 (license license:unlicense)))
5011
5012(define-public python-trio-websocket
5013 (package
5014 (name "python-trio-websocket")
5015 (version "0.12.2")
5016 (source
5017 (origin
5018 (method git-fetch)
5019 (uri (git-reference
5020 (url "https://github.com/HyperionGray/trio-websocket")
5021 (commit version)))
5022 (file-name (git-file-name name version))
5023 (sha256
5024 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
5025 (build-system pyproject-build-system)
5026 (native-inputs
5027 (list python-pytest
5028 python-pytest-trio
5029 python-setuptools
5030 python-trustme))
5031 (propagated-inputs
5032 (list python-outcome
5033 python-trio
5034 python-wsproto))
5035 (home-page "https://github.com/HyperionGray/trio-websocket")
5036 (synopsis "WebSocket library for Trio")
5037 (description "This library implements both server and client aspects of
5038the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
5039striving for safety, correctness, and ergonomics. It is based on the
5040@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
5041@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
5042the majority of the WebSocket protocol, including framing, codecs, and events.
5043This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
5044the Trio framework}.")
5045 (license license:expat)))
5046
5047(define-public python-txacme
5048 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
5049 ;; compatibility with twisted, use the latest commit from trunk branch.
5050 ;;
5051 ;;See: <https://github.com/twisted/txacme/issues/165>.
5052 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
5053 (revision "0"))
5054 (package
5055 (name "python-txacme")
5056 (version (git-version "0.9.3" revision commit))
5057 (source
5058 (origin
5059 (method git-fetch) ;no fresh release in PyPI
5060 (uri (git-reference
5061 (url "https://github.com/twisted/txacme")
5062 (commit commit)))
5063 (file-name (git-file-name name version))
5064 (sha256
5065 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
5066 (build-system pyproject-build-system)
5067 (arguments
5068 (list #:test-backend #~'custom
5069 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
5070 (native-inputs
5071 (list python-setuptools))
5072 (propagated-inputs
5073 (list python-acme
5074 python-attrs
5075 python-eliot
5076 python-josepy
5077 python-pem
5078 python-treq
5079 python-twisted
5080 python-txsni))
5081 (home-page "https://github.com/twisted/txacme")
5082 (synopsis "Twisted implexmentation of the ACME protocol")
5083 (description
5084 "ACME is Automatic Certificate Management Environment, a protocol that
5085allows clients and certificate authorities to automate verification and
5086certificate issuance. The ACME protocol is used by the free Let's Encrypt
5087Certificate Authority.
5088
5089txacme is an implementation of the protocol for Twisted, the event-driven
5090networking engine for Python.")
5091 (license license:expat))))
5092
5093(define-public python-txaio
5094 (package
5095 (name "python-txaio")
5096 (version "25.9.2")
5097 (source
5098 (origin
5099 (method url-fetch)
5100 (uri (pypi-uri "txaio" version))
5101 (sha256
5102 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
5103 (build-system pyproject-build-system)
5104 (native-inputs
5105 (list python-pytest
5106 python-setuptools))
5107 (home-page "https://github.com/crossbario/txaio")
5108 (synopsis "Compatibility layer between Python asyncio and Twisted")
5109 (description
5110 "Txaio provides a compatibility layer between the Python @code{asyncio}
5111 bsmodule and @code{Twisted}.")
5112 (license license:expat)))
5113
5114;; XXX: Potentially abandonware since 2017, consider to remove when nothing
5115;; depends on it or fails to build.
5116(define-public python-txamqp
5117 (package
5118 (name "python-txamqp")
5119 (version "0.8.2")
5120 (source
5121 (origin
5122 (method url-fetch)
5123 (uri (pypi-uri "txAMQP" version))
5124 (sha256
5125 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
5126 (build-system pyproject-build-system)
5127 (arguments
5128 (list #:tests? #f)) ;all tests failed
5129 (native-inputs
5130 (list python-setuptools))
5131 (propagated-inputs
5132 (list python-six python-twisted))
5133 (home-page "https://github.com/txamqp/txamqp")
5134 (synopsis "Communicate with AMQP peers and brokers using Twisted")
5135 (description
5136 "This package provides a Python library for communicating with AMQP peers
5137and brokers using the asynchronous networking framework Twisted. It contains
5138all the necessary code to connect, send and receive messages to/from an
5139AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
5140also includes support for using Thrift RPC over AMQP in Twisted
5141applications.")
5142 (license license:asl2.0)))
5143
5144(define-public python-txsni
5145 (package
5146 (name "python-txsni")
5147 (version "0.2.0")
5148 (source
5149 (origin
5150 (method git-fetch)
5151 (uri (git-reference
5152 (url "https://github.com/glyph/txsni")
5153 (commit (string-append "v" version))))
5154 (file-name (git-file-name name version))
5155 (sha256
5156 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
5157 (build-system pyproject-build-system)
5158 (arguments
5159 (list #:test-backend #~'custom
5160 #:test-flags #~(list "-m" "twisted.trial"
5161 "--temp-directory=/tmp/_trial_temp"
5162 "txsni")))
5163 (native-inputs
5164 (list python-setuptools))
5165 (propagated-inputs
5166 (list python-pyopenssl
5167 python-service-identity
5168 python-twisted))
5169 (home-page "https://github.com/glyph/txsni")
5170 (synopsis "Run TLS servers with Twisted")
5171 (description
5172 "This package provides an easy-to-use SNI endpoint for use with the
5173Twisted web framework.")
5174 (license license:expat)))
5175
5176(define-public python-txtorcon
5177 (package
5178 (name "python-txtorcon")
5179 (version "24.8.0")
5180 (source
5181 (origin
5182 (method url-fetch)
5183 (uri (pypi-uri "txtorcon" version))
5184 (sha256
5185 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
5186 (build-system pyproject-build-system)
5187 (native-inputs
5188 (list python-pytest
5189 python-setuptools
5190 python-wheel))
5191 (inputs
5192 (list lsof))
5193 (propagated-inputs
5194 (list python-automat
5195 python-idna
5196 python-incremental
5197 python-pyopenssl
5198 python-service-identity
5199 python-twisted
5200 python-zope-interface))
5201 (home-page "https://github.com/meejah/txtorcon")
5202 (synopsis "Twisted-based Tor controller client")
5203 (description
5204 "This package provides a Twisted-based Tor controller client,with
5205state-tracking and configuration abstractions.")
5206 (license license:expat)))
5207
5208(define-public python-url-normalize
5209 (package
5210 (name "python-url-normalize")
5211 (version "2.2.1")
5212 (source
5213 (origin
5214 (method git-fetch) ; no tests in PyPI release
5215 (uri (git-reference
5216 (url "https://github.com/niksite/url-normalize")
5217 (commit (string-append "v" version))))
5218 (file-name (git-file-name name version))
5219 (sha256
5220 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
5221 (build-system pyproject-build-system)
5222 (arguments
5223 (list
5224 #:test-flags #~(list "--ignore=tests/test_cli.py")))
5225 (native-inputs
5226 (list python-pytest python-pytest-socket python-setuptools))
5227 (propagated-inputs
5228 (list python-idna))
5229 (home-page "https://github.com/niksite/url-normalize")
5230 (synopsis "URL normalization for Python")
5231 (description
5232 "This package provides a URI Normalization function with following
5233features:
5234@itemize
5235@item take care of IDN domains
5236@item always provide the URI scheme in lowercase characters
5237@item always provide the host, if any, in lowercase characters
5238@item only perform percent-encoding where it is essential
5239@item always use uppercase A-through-F characters when percent-encoding
5240@item prevent dot-segments appearing in non-relative URI paths
5241@item for schemes that define a default authority, use an empty authority if
5242the default is desired
5243@item for schemes that define an empty path to be equivalent to a path of
5244@code{/}, use @code{/}
5245@item for schemes that define a port, use an empty port if the default is
5246desired
5247@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
5248@end itemize")
5249 (license license:expat)))
5250
5251(define-public python-waitress
5252 (package
5253 (name "python-waitress")
5254 (version "3.0.2")
5255 (source
5256 (origin
5257 (method url-fetch)
5258 (uri (pypi-uri "waitress" version))
5259 (sha256
5260 (base32
5261 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
5262 (build-system pyproject-build-system)
5263 (arguments
5264 (list
5265 ;; https://github.com/Pylons/waitress/issues/443
5266 #:test-flags #~(list "-k" "not test_service_port")))
5267 (native-inputs (list python-pytest python-setuptools))
5268 (home-page "https://github.com/Pylons/waitress")
5269 (synopsis "Waitress WSGI server")
5270 (description
5271 "Waitress is meant to be a production-quality pure-Python WSGI server
5272with very acceptable performance.")
5273 (license license:zpl2.1)))
5274
5275(define-public python-weasel
5276 (package
5277 (name "python-weasel")
5278 (version "1.0.0")
5279 (source
5280 (origin
5281 (method git-fetch)
5282 (uri (git-reference
5283 (url "https://github.com/explosion/weasel/")
5284 (commit (string-append "release-v" version))))
5285 (file-name (git-file-name name version))
5286 (sha256
5287 (base32 "1sxcxri9hl9rs1kvdrv81g6mlg7lifhq9xacskracz63v4nyh8na"))))
5288 (build-system pyproject-build-system)
5289 (arguments
5290 (list
5291 #:test-flags
5292 ;; This test raises an error, but not the one expected by pytest.
5293 #~(list (string-append "--deselect=weasel/tests/test_validation.py::"
5294 "test_project_config_interpolation[10_0]")
5295 ;; Network access is required.
5296 #$@(map (lambda (test) (string-append "--deselect="
5297 "weasel/tests/cli/"
5298 test))
5299 (list "test_cli.py::test_project_git_dir_asset"
5300 "test_cli.py::test_project_git_file_asset"
5301 "test_cli_app.py::test_project_assets")))))
5302 (native-inputs
5303 (list python-pytest
5304 python-setuptools))
5305 (propagated-inputs
5306 (list python-cloudpathlib
5307 python-confection
5308 python-httpx
5309 python-packaging
5310 python-pydantic
5311 python-smart-open
5312 python-srsly
5313 python-typer
5314 python-wasabi))
5315 (home-page "https://github.com/explosion/weasel/")
5316 (synopsis "Small and easy workflow system")
5317 (description
5318 "This package provides a minimalistic workflow system to manage and
5319share end-to-end workflows for different use cases and domains.")
5320 (license license:expat)))
5321
5322(define-public python-webencodings
5323 (package
5324 (name "python-webencodings")
5325 (version "0.5.1")
5326 (source
5327 (origin
5328 (method url-fetch)
5329 (uri (pypi-uri "webencodings" version))
5330 (sha256
5331 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
5332 (build-system pyproject-build-system)
5333 (arguments
5334 (list #:test-flags #~(list "webencodings/tests.py")))
5335 (native-inputs
5336 (list python-pytest python-setuptools))
5337 (home-page "https://github.com/SimonSapin/python-webencodings")
5338 (synopsis "Character encoding aliases for legacy web content")
5339 (description
5340 "In order to be compatible with legacy web content when interpreting
5341something like @code{Content-Type: text/html; charset=latin1}, tools need to
5342use a particular set of aliases for encoding labels as well as some overriding
5343rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
5344actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
5345BOM takes precedence over any other encoding declaration. The WHATWG
5346@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
5347details so that implementations do not have to reverse-engineer each other.
5348
5349This module implements the Encoding standard and has encoding labels and BOM
5350detection, but the actual implementation for encoders and decoders is
5351Python’s.")
5352 (license license:bsd-3)))
5353
5354(define-public python-omnipath
5355 (package
5356 (name "python-omnipath")
5357 (version "1.0.10")
5358 (source
5359 (origin
5360 (method git-fetch)
5361 (uri (git-reference
5362 (url "https://github.com/saezlab/omnipath/")
5363 (commit (string-append "v" version))))
5364 (file-name (git-file-name name version))
5365 (sha256
5366 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
5367 (build-system pyproject-build-system)
5368 (arguments
5369 (list
5370 #:test-flags '(list "-k"
5371 (string-append
5372 ;; These require internet access
5373 "not test_download_homologene"
5374 " and not test_complex_genes"))
5375 #:phases
5376 #~(modify-phases %standard-phases
5377 (add-after 'unpack 'set-home
5378 (lambda _
5379 (setenv "HOME" "/tmp"))))))
5380 (propagated-inputs (list python-attrs
5381 python-docrep
5382 python-inflect
5383 python-networkx
5384 python-packaging
5385 python-pandas
5386 python-requests
5387 python-tqdm
5388 python-typing-extensions
5389 python-urllib3
5390 python-wrapt))
5391 (native-inputs (list nss-certs-for-test
5392 python-bump2version
5393 python-hatchling
5394 python-pytest
5395 python-pytest-mock
5396 python-pytest-socket
5397 python-requests-mock))
5398 (home-page "https://omnipathdb.org/")
5399 (synopsis "Python client for the OmniPath web service")
5400 (description "This package provides a Python client for the OmniPath web
5401service.")
5402 (license license:expat)))
5403
5404(define-public python-openai
5405 (package
5406 (name "python-openai")
5407 (version "1.3.5")
5408 (source (origin
5409 (method git-fetch)
5410 (uri (git-reference
5411 (url "https://github.com/openai/openai-python")
5412 (commit (string-append "v" version))))
5413 (file-name (git-file-name name version))
5414 (sha256
5415 (base32
5416 "0k1rwhj7v22x5bnv9xbk9nj9grxqmmclh9538qqjadgqxfn5x74q"))))
5417 (build-system pyproject-build-system)
5418 (arguments
5419 (list
5420 #:test-flags
5421 ;; These require internet access and an openai API key.
5422 '(list "--ignore=openai/tests/asyncio/test_endpoints.py"
5423 "--ignore=openai/tests/test_endpoints.py"
5424 "--ignore-glob=tests/api_resources/*"
5425 ;; Needs respx
5426 "--ignore=tests/api_resources/audio/test_speech.py"
5427 "--ignore=tests/api_resources/test_files.py"
5428 "--ignore=tests/test_client.py"
5429 "-k" "not test_requestor_cycle_sessions\
5430 and not test_requestor_sets_request_id\
5431 and not test_file_cli\
5432 and not test_basic_async\
5433 and not test_async\
5434 and not test_datetime_with_alias\
5435 and not test_pydantic")
5436 #:phases
5437 '(modify-phases %standard-phases
5438 (add-after 'unpack 'relax-requirements
5439 (lambda _
5440 (substitute* "pyproject.toml"
5441 (("distro>=1.7.0") "distro>=1.6.0")
5442 (("anyio>=3.5.0, <4") "anyio"))))
5443 (add-after 'unpack 'httpx-compatibility
5444 (lambda _
5445 (substitute* "src/openai/_base_client.py"
5446 (("proxies=proxies,") "")
5447 (("self._proxies = proxies") "")
5448 (("proxies: ProxiesTypes . None,") "")))))))
5449 (propagated-inputs
5450 (list python-aiohttp
5451 python-distro
5452 python-httpx
5453 python-pydantic
5454 python-requests
5455 python-tqdm
5456 python-typing-extensions))
5457 (native-inputs (list nss-certs-for-test
5458 python-dirty-equals
5459 python-hatchling
5460 python-pytest python-pytest-asyncio
5461 python-pytest-mock python-setuptools python-wheel))
5462 (home-page "https://github.com/openai/openai-python")
5463 (synopsis "Python client library for the OpenAI API")
5464 (description "This package provides a Python client library for the
5465OpenAI API.")
5466 (license license:expat)))
5467
5468(define-public python-openapi-schema-validator
5469 (package
5470 (name "python-openapi-schema-validator")
5471 (version "0.6.2")
5472 (source
5473 (origin
5474 (method git-fetch) ;no tests in pypi release
5475 (uri (git-reference
5476 (url "https://github.com/p1c2u/openapi-schema-validator")
5477 (commit version)))
5478 (file-name (git-file-name name version))
5479 (sha256
5480 (base32
5481 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
5482 (build-system pyproject-build-system)
5483 (arguments
5484 (list
5485 #:test-flags
5486 ;; This one returns 5 instead of 4 elements
5487 '(list "-k" "not test_array_prefixitems_invalid")
5488 #:phases
5489 #~(modify-phases %standard-phases
5490 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
5491 (add-after 'unpack 'relax-requirements
5492 (lambda _
5493 (substitute* "pyproject.toml"
5494 (("jsonschema-specifications.*")
5495 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
5496 (native-inputs (list python-poetry-core python-pytest))
5497 (propagated-inputs
5498 (list python-isodate
5499 python-jsonschema
5500 python-rfc3339-validator
5501 python-strict-rfc3339))
5502 (home-page "https://github.com/p1c2u/openapi-schema-validator")
5503 (synopsis "OpenAPI schema validation library for Python")
5504 (description "Openapi-schema-validator is a Python library that validates
5505a schema against:
5506@itemize
5507@item OpenAPI Schema Specification v3.0 which is an extended subset of the
5508JSON Schema Specification Wright Draft 00.
5509@item OpenAPI Schema Specification v3.1 which is an extended superset of the
5510JSON Schema Specification Draft 2020-12.
5511@end itemize")
5512 (license license:bsd-3)))
5513
5514(define-public python-openapi-spec-validator
5515 (package
5516 (name "python-openapi-spec-validator")
5517 (version "0.7.1")
5518 (source
5519 (origin
5520 (method git-fetch) ;no tests in pypi release
5521 (uri (git-reference
5522 (url "https://github.com/p1c2u/openapi-spec-validator")
5523 (commit version)))
5524 (file-name (git-file-name name version))
5525 (sha256
5526 (base32
5527 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
5528 (build-system pyproject-build-system)
5529 (arguments
5530 (list
5531 ;; These tests attempt to fetch resources from the Internet
5532 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
5533 "-k" "not example")))
5534 (native-inputs
5535 (list python-poetry-core
5536 python-pytest))
5537 (propagated-inputs
5538 (list python-jsonschema
5539 python-jsonschema-path
5540 python-lazy-object-proxy
5541 python-openapi-schema-validator
5542 python-pyyaml
5543 python-requests
5544 python-setuptools))
5545 (home-page "https://github.com/p1c2u/openapi-spec-validator")
5546 (synopsis "OpenAPI spec validator")
5547 (description "OpenAPI Spec Validator is a Python library that validates an
5548OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
55493.0 and OpenAPI 3.1 specifications. The validator aims to check for full
5550compliance with the specification.")
5551 (license license:asl2.0)))
5552
5553(define-public python-openapi-core
5554 (package
5555 (name "python-openapi-core")
5556 (version "0.19.4")
5557 (source
5558 (origin
5559 (method git-fetch)
5560 (uri (git-reference
5561 (url "https://github.com/p1c2u/openapi-core")
5562 (commit version)))
5563 (file-name (git-file-name name version))
5564 (sha256
5565 (base32
5566 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
5567 (build-system pyproject-build-system)
5568 (arguments
5569 (list
5570 #:test-flags
5571 '(list "tests/unit"
5572 "-k" "not test_chars_valid")))
5573 (native-inputs (list python-django
5574 python-falcon
5575 python-flask
5576 python-mock
5577 python-poetry-core
5578 python-pytest
5579 python-pytest-asyncio
5580 python-responses))
5581 (propagated-inputs
5582 (list python-attrs
5583 python-aiohttp
5584 python-isodate
5585 python-jsonschema
5586 python-lazy-object-proxy
5587 python-more-itertools
5588 python-openapi-schema-validator
5589 python-openapi-spec-validator
5590 python-parse
5591 python-six
5592 python-werkzeug))
5593 (home-page "https://github.com/p1c2u/openapi-core")
5594 (synopsis "OpenAPI core library")
5595 (description "Openapi-core is a Python library that adds client-side and
5596server-side support for the OpenAPI Specification v3. It has features such
5597as:
5598@itemize
5599@item Validation of requests and responses
5600@item Schema casting and unmarshalling
5601@item Media type and parameters deserialization
5602@item Security providers (API keys, Cookie, Basic and Bearer HTTP
5603authentications)
5604@item Custom deserializers and formats
5605@item Integration with libraries and frameworks.
5606@end itemize")
5607 (license license:bsd-3)))
5608
5609(define-public python-openid
5610 (package
5611 (name "python-openid")
5612 (version "3.2.0")
5613 (source
5614 (origin
5615 (method url-fetch)
5616 (uri (pypi-uri "python3-openid" version))
5617 (sha256
5618 (base32
5619 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
5620 (build-system pyproject-build-system)
5621 (arguments
5622 `(#:phases
5623 (modify-phases %standard-phases
5624 (replace 'check
5625 (lambda* (#:key tests? #:allow-other-keys)
5626 (when tests?
5627 (invoke "python" "-m" "unittest" "openid.test.test_suite")))))))
5628 (propagated-inputs
5629 (list python-defusedxml))
5630 (native-inputs
5631 (list python-psycopg2 python-django python-setuptools python-wheel))
5632 (home-page "https://github.com/necaris/python3-openid")
5633 (synopsis "OpenID support for servers and consumers")
5634 (description "This library provides OpenID authentication for Python, both
5635for clients and servers.")
5636 (license license:asl2.0)))
5637
5638(define-public python-cssutils
5639 (package
5640 (name "python-cssutils")
5641 (version "2.11.1")
5642 (source
5643 (origin
5644 (method url-fetch)
5645 (uri (pypi-uri "cssutils" version))
5646 (sha256
5647 (base32
5648 "1qpq7xvzqp4cfcb8837rnd30x4hws3rkp33qpvmnxbxn2djsfqq5"))))
5649 (build-system pyproject-build-system)
5650 (arguments
5651 (list
5652 #:phases
5653 #~(modify-phases %standard-phases
5654 (replace 'check
5655 (lambda _
5656 (invoke "pytest" "-vv" "-k"
5657 (string-append "not encutils "
5658 "and not website.logging")))))))
5659 (native-inputs
5660 (list python-cssselect
5661 python-jaraco-test
5662 python-lxml
5663 python-pytest
5664 python-setuptools
5665 python-wheel))
5666 (propagated-inputs
5667 (list python-more-itertools))
5668 (home-page "https://github.com/jaraco/cssutils")
5669 (synopsis
5670 "CSS Cascading Style Sheets library for Python")
5671 (description
5672 "Cssutils is a Python package for parsing and building CSS
5673Cascading Style Sheets. Currently it provides a DOM only and no rendering
5674options.")
5675 (license license:lgpl3+)))
5676
5677(define-public python-css-parser
5678 (package
5679 (inherit python-cssutils)
5680 (name "python-css-parser")
5681 (version "1.0.10")
5682 (source
5683 (origin
5684 (method url-fetch)
5685 (uri (pypi-uri "css-parser" version))
5686 (sha256
5687 (base32 "0qs375slcwqd7slizh6hzkwxx7cdj36v8kwn0qrfji1kscm9f7mz"))))
5688 (home-page "https://github.com/ebook-utils/css-parser")
5689 (synopsis "Fork of cssutils modified for parsing ebooks")
5690 (description
5691 "Css-parser is a Python package for parsing and building CSS
5692Cascading Style Sheets. Currently it provides a DOM only and no rendering
5693options.
5694
5695It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
5696cssutils not receiving updates as of 1.0.2.")
5697 (license license:lgpl3+)))
5698
5699(define-public python-cssselect
5700 (package
5701 (name "python-cssselect")
5702 (version "1.2.0")
5703 (source (origin
5704 ;; The PyPI release does not contain tests.
5705 (method git-fetch)
5706 (uri (git-reference
5707 (url "https://github.com/scrapy/cssselect")
5708 (commit (string-append "v" version))))
5709 (file-name (git-file-name name version))
5710 (sha256
5711 (base32
5712 "1x4nrvb1p1byi1whmspik7lbh303akdlh762dayfxam3hycsh5kk"))))
5713 (build-system pyproject-build-system)
5714 (native-inputs
5715 (list python-lxml python-pytest python-setuptools python-wheel))
5716 (home-page "https://github.com/scrapy/cssselect")
5717 (synopsis "CSS3 selector parser and translator to XPath 1.0")
5718 (description
5719 "Cssselect ia a Python module that parses CSS3 Selectors and translates
5720them to XPath 1.0 expressions. Such expressions can be used in lxml or
5721another XPath engine to find the matching elements in an XML or HTML document.")
5722 (license license:bsd-3)))
5723
5724(define-public python-databricks-cli
5725 (package
5726 (name "python-databricks-cli")
5727 (version "0.18.0")
5728 (home-page "https://github.com/databricks/databricks-cli")
5729 (source (origin
5730 (method git-fetch)
5731 (uri (git-reference (url home-page) (commit version)))
5732 (file-name (git-file-name name version))
5733 (sha256
5734 (base32
5735 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
5736 (build-system pyproject-build-system)
5737 (arguments
5738 (list #:phases #~(modify-phases %standard-phases
5739 (replace 'check
5740 (lambda _
5741 (invoke "pytest" "tests" "-vv"))))))
5742 (native-inputs
5743 ;; For tests.
5744 (list python-decorator
5745 python-mock
5746 python-pytest
5747 python-requests-mock
5748 python-setuptools
5749 python-wheel))
5750 (propagated-inputs
5751 (list python-click
5752 python-oauthlib
5753 python-pyjwt
5754 python-requests
5755 python-six
5756 python-tabulate))
5757 (synopsis "Command line interface for Databricks")
5758 (description
5759 "The Databricks Command Line Interface is a tool which provides an easy
5760to use interface to the Databricks platform. The CLI is built on top of the
5761Databricks REST APIs.")
5762 (license license:asl2.0)))
5763
5764(define-public python-openid-cla
5765 ;; XXX: Last updated in 2015.
5766 (package
5767 (name "python-openid-cla")
5768 (version "1.2")
5769 (source
5770 (origin
5771 (method url-fetch)
5772 (uri (pypi-uri "python-openid-cla" version))
5773 (sha256
5774 (base32
5775 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
5776 (build-system pyproject-build-system)
5777 (arguments '(#:tests? #f)) ; No tests.
5778 (native-inputs (list python-setuptools python-wheel))
5779 (propagated-inputs (list python-openid python-six))
5780 (home-page "https://github.com/puiterwijk/python-openid-cla/")
5781 (synopsis "Implementation of the OpenID CLA extension for python-openid")
5782 (description "@code{openid-cla} is an implementation of the OpenID
5783contributor license agreement extension for python-openid.")
5784 (license license:bsd-3)))
5785
5786(define-public python-openid-teams
5787 ;; XXX: Last updated in 2018.
5788 (package
5789 (name "python-openid-teams")
5790 (version "1.1")
5791 (source
5792 (origin
5793 (method url-fetch)
5794 (uri (pypi-uri "python-openid-teams" version))
5795 (sha256
5796 (base32
5797 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
5798 (build-system pyproject-build-system)
5799 (arguments '(#:tests? #f)) ; No tests.
5800 (native-inputs (list python-setuptools python-wheel))
5801 (propagated-inputs (list python-openid python-six))
5802 (home-page "https://github.com/puiterwijk/python-openid-teams/")
5803 (synopsis "Implementation of the OpenID teams extension for python-openid")
5804 (description
5805 "@code{openid-teams} is an implementation of the OpenID
5806teams extension for python-openid.")
5807 (license license:bsd-3)))
5808
5809(define-public python-priority
5810 (package
5811 (name "python-priority")
5812 (version "2.0.0")
5813 (source
5814 (origin
5815 (method url-fetch)
5816 (uri (pypi-uri "priority" version))
5817 (sha256
5818 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
5819 (build-system pyproject-build-system)
5820 (native-inputs
5821 (list python-pytest python-setuptools python-wheel))
5822 (home-page "https://python-hyper.org/projects/priority/en/latest/")
5823 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
5824 (description
5825 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
5826set out in RFC 7540 Section 5.3 (Stream Priority).")
5827 (license license:expat)))
5828
5829(define-public python-weblate-language-data
5830 (package
5831 (name "python-weblate-language-data")
5832 (version "2025.8")
5833 (source
5834 (origin
5835 (method url-fetch)
5836 (uri (pypi-uri "weblate_language_data" version))
5837 (sha256
5838 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
5839 (build-system pyproject-build-system)
5840 (arguments (list #:tests? #f)) ;not tests, just data files
5841 (native-inputs
5842 (list python-setuptools))
5843 (propagated-inputs
5844 (list python-translate-toolkit))
5845 (home-page "https://github.com/WeblateOrg/language-data")
5846 (synopsis "Language definitions for Weblate")
5847 (description
5848 "This package provides language definitions used by
5849@url{https://weblate.org/, Weblate}i.")
5850 (license license:expat)))
5851
5852(define-public python-wikidata
5853 (package
5854 (name "python-wikidata")
5855 (version "0.8.1")
5856 (source
5857 (origin
5858 (method git-fetch)
5859 (uri (git-reference
5860 (url "https://github.com/dahlia/wikidata")
5861 (commit version)))
5862 (file-name (git-file-name name version))
5863 (sha256
5864 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
5865 (build-system pyproject-build-system)
5866 (native-inputs
5867 (list python-pytest python-setuptools))
5868 (home-page "https://github.com/dahlia/wikidata")
5869 (synopsis "Wikidata client library")
5870 (description
5871 "This package provides a Python interface to @url{https://www.wikidata.org/,
5872Wikidata}.")
5873 (license license:gpl3+)))
5874
5875(define-public python-wsproto
5876 (package
5877 (name "python-wsproto")
5878 (version "1.2.0")
5879 (source
5880 (origin
5881 (method url-fetch)
5882 (uri (pypi-uri "wsproto" version))
5883 (sha256
5884 (base32 "0rahm1j9danv1l6i6as80acwv16ycihxkhrvwjiqh9drxhk5ymmd"))))
5885 (build-system pyproject-build-system)
5886 (native-inputs
5887 (list python-pytest python-setuptools python-wheel))
5888 (propagated-inputs
5889 (list python-h11))
5890 (home-page "https://github.com/python-hyper/wsproto/")
5891 (synopsis "WebSockets state-machine based protocol implementation")
5892 (description
5893 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
5894stack. It's written from the ground up to be embeddable in whatever program you
5895choose to use, ensuring that you can communicate via WebSockets, as defined in
5896RFC6455, regardless of your programming paradigm.")
5897 (license license:expat)))
5898
5899(define-public hypercorn
5900 (package
5901 (name "hypercorn")
5902 (version "0.18.0")
5903 (source
5904 (origin
5905 (method git-fetch) ;PyPI does not have tests
5906 (uri (git-reference
5907 (url "https://github.com/pgjones/hypercorn")
5908 (commit version)))
5909 (file-name (git-file-name name version))
5910 (sha256
5911 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
5912 (build-system pyproject-build-system)
5913 ;; Propagate because Hypercorn also exposes functionality over a module.
5914 (propagated-inputs (list python-h11
5915 python-h2
5916 python-priority
5917 python-tomli
5918 python-wsproto))
5919 (native-inputs (list nss-certs-for-test
5920 python-httpx
5921 python-pdm-backend
5922 python-poetry-core
5923 python-pytest
5924 python-pytest-asyncio
5925 python-pytest-trio
5926 python-trio))
5927 (home-page "https://gitlab.com/pgjones/hypercorn/")
5928 (synopsis "ASGI Server based on Hyper libraries")
5929 (description
5930 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
5931wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
5932WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
5933can utilise asyncio, uvloop, or trio worker types.")
5934 (license license:expat)))
5935
5936(define-public python-querystring-parser
5937 (package
5938 (name "python-querystring-parser")
5939 (version "1.2.4")
5940 (source
5941 (origin
5942 (method git-fetch)
5943 (uri (git-reference
5944 (url "https://github.com/bernii/querystring-parser")
5945 (commit version)))
5946 (file-name (git-file-name name version))
5947 (sha256
5948 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
5949 (build-system pyproject-build-system)
5950 (arguments
5951 (list
5952 #:test-backend #~'custom
5953 #:test-flags #~(list "querystring_parser/tests.py")
5954 #:phases
5955 #~(modify-phases %standard-phases
5956 (add-after 'unpack 'fix-python-incompatibilities
5957 (lambda _
5958 (substitute* "querystring_parser/tests.py"
5959 ;; XXX FIXME: This test is broken with Python 3.7:
5960 ;; https://github.com/bernii/querystring-parser/issues/35
5961 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
5962 "True")
5963 ;; Removed in Python 3.12.
5964 (("assertEquals")
5965 "assertEqual")))))))
5966 (native-inputs (list python-setuptools))
5967 (propagated-inputs (list python-six))
5968 (home-page "https://github.com/bernii/querystring-parser")
5969 (synopsis "QueryString parser that correctly handles nested dictionaries")
5970 (description
5971 "This package provides a query string parser for Python and Django
5972projects that correctly creates nested dictionaries from sent form/querystring
5973data.")
5974 (license license:expat)))
5975
5976(define-public python-tornado
5977 (package
5978 (name "python-tornado")
5979 (version "6.4.2")
5980 (source
5981 (origin
5982 (method url-fetch)
5983 (uri (pypi-uri "tornado" version))
5984 (sha256
5985 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
5986 (build-system pyproject-build-system)
5987 (arguments
5988 (list
5989 #:test-flags
5990 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
5991 #~(list "--ignore=tornado/test/iostream_test.py")))
5992 (native-inputs
5993 (list python-certifi
5994 python-pytest
5995 python-setuptools))
5996 (home-page "https://www.tornadoweb.org/")
5997 (synopsis "Python web framework and asynchronous networking library")
5998 (description
5999 "Tornado is a Python web framework and asynchronous networking library,
6000originally developed at FriendFeed. By using non-blocking network I/O,
6001Tornado can scale to tens of thousands of open connections, making it ideal
6002for long polling, WebSockets, and other applications that require a long-lived
6003connection to each user.")
6004 (license license:asl2.0)))
6005
6006;; XXX: Deprecated on <2026-01-23>.
6007(define-deprecated-package python-tornado-6 python-tornado)
6008
6009(define-public python-tornado-http-auth
6010 (package
6011 (name "python-tornado-http-auth")
6012 (version "1.1.1")
6013 (source
6014 (origin
6015 (method git-fetch)
6016 (uri (git-reference
6017 (url "https://github.com/gvalkov/tornado-http-auth")
6018 (commit (string-append "v" version))))
6019 (file-name (git-file-name name version))
6020 (sha256
6021 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
6022 (build-system pyproject-build-system)
6023 ;; XXX: This version is incompatible with current tornado.testing.
6024 (arguments (list #:tests? #f))
6025 (native-inputs (list python-setuptools))
6026 (propagated-inputs (list python-tornado))
6027 (home-page "https://github.com/gvalkov/tornado-http-auth")
6028 (synopsis "Digest and basic authentication module for Tornado")
6029 (description
6030 "Provides support for adding authentication to services using the Tornado
6031web framework, either via the basic or digest authentication schemes.")
6032 (license license:asl2.0)))
6033
6034(define-public python-wsgi-intercept
6035 (package
6036 (name "python-wsgi-intercept")
6037 (version "1.13.1")
6038 (source (origin
6039 (method url-fetch)
6040 (uri (pypi-uri "wsgi_intercept" version))
6041 (sha256
6042 (base32
6043 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
6044 (build-system pyproject-build-system)
6045 (arguments
6046 (list
6047 ;; XXX: tests required internet access
6048 #:tests? #f))
6049 (propagated-inputs
6050 (list python-six))
6051 (native-inputs
6052 (list python-httplib2
6053 python-pytest
6054 python-requests
6055 python-setuptools
6056 python-urllib3
6057 python-wheel))
6058 (synopsis "Puts a WSGI application in place of a real URI for testing")
6059 (description "Wsgi_intercept installs a WSGI application in place of a real
6060URI for testing. Testing a WSGI application normally involves starting a
6061server at a local host and port, then pointing your test code to that address.
6062Instead, this library lets you intercept calls to any specific host/port
6063combination and redirect them into a WSGI application importable by your test
6064program. Thus, you can avoid spawning multiple processes or threads to test
6065your Web app.")
6066 (home-page "https://github.com/cdent/wsgi-intercept")
6067 (license license:expat)))
6068
6069(define-public python-webob
6070 (package
6071 (name "python-webob")
6072 (version "1.8.9")
6073 (source
6074 (origin
6075 (method url-fetch)
6076 (uri (pypi-uri "webob" version))
6077 (sha256
6078 (base32
6079 "12b5sl10yzzzz3g11kij3rdzk9y6583ywggc6h9nsxmnxpi7hq5d"))))
6080 (build-system pyproject-build-system)
6081 ;; tests: 2380 passed, 9 skipped, 1 xfailed, 12 warnings
6082 (native-inputs
6083 (list python-pytest
6084 python-setuptools))
6085 (home-page "https://webob.org/")
6086 (synopsis "WSGI request and response object")
6087 (description
6088 "WebOb provides wrappers around the WSGI request environment, and an
6089object to help create WSGI responses.")
6090 (license license:expat)))
6091
6092(define-public python-yewtube-search
6093 (package
6094 (name "python-yewtube-search")
6095 ;; Original repository for python-youtube-search package is archived, see:
6096 ;; <https://github.com/alexmercerind/youtube-search-python/issues/189>.
6097 ;; The most promising fork was
6098 ;; <https://github.com/ahmedayyad-dev/youtube-search-python-fork> which is
6099 ;; archived since <2026-04-04>. This is another fork with a different PyPI
6100 ;; name for python-yewtube.
6101 (version "1.6.7")
6102 (source
6103 (origin
6104 (method url-fetch)
6105 (uri (pypi-uri "yewtube_search_python" version))
6106 (sha256
6107 (base32 "0vjh4wrlqx4lv9qi6572jx2d0rsp6gkvaqf0f2ar4npdz0ldgl47"))))
6108 (build-system pyproject-build-system)
6109 (arguments (list #:tests? #f)) ;no tests in repository
6110 (native-inputs
6111 (list python-setuptools))
6112 (propagated-inputs
6113 (list python-httpx))
6114 (home-page "https://github.com/iamtalhaasghar/youtube-search-python")
6115 (synopsis "Search for YouTube videos, channels & playlists")
6116 (description
6117 "This package provides tools to search for @code{YouTube} videos,
6118channels and playlists; as well as getting video metadata from links. This
6119package does not rely on the @code{YouTube} Data API v3.")
6120 (license license:expat)))
6121
6122(define-public python-zc-lockfile
6123 (package
6124 (name "python-zc-lockfile")
6125 (version "4.0")
6126 (source
6127 (origin
6128 (method git-fetch)
6129 (uri (git-reference
6130 (url "https://github.com/zopefoundation/zc.lockfile")
6131 (commit version)))
6132 (file-name (git-file-name name version))
6133 (sha256
6134 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
6135 (build-system pyproject-build-system)
6136 (arguments
6137 (list
6138 #:phases
6139 #~(modify-phases %standard-phases
6140 (replace 'check
6141 (lambda* (#:key tests? #:allow-other-keys)
6142 (if tests?
6143 (invoke "zope-testrunner" "--test-path=src")
6144 (format #t "test suite not run~%")))))))
6145 (native-inputs (list python-zope-testing python-zope-testrunner
6146 python-setuptools))
6147 (home-page "https://github.com/zopefoundation/zc.lockfile")
6148 (synopsis "Interprocess locks using lock files")
6149 (description
6150 "This package provides an implementation of interprocess locks using lock
6151files. These locks can also be used to mediate access to other files.")
6152 (license license:zpl2.1)))
6153
6154(define-public python-zconfig
6155 (package
6156 (name "python-zconfig")
6157 (version "4.3")
6158 (source
6159 (origin
6160 (method git-fetch)
6161 (uri (git-reference
6162 (url "https://github.com/zopefoundation/ZConfig/")
6163 (commit version)))
6164 (file-name (git-file-name name version))
6165 (sha256
6166 (base32 "06c4vffk51fw03q87r31s81b0xbxg2qqvjfmcl2z4hg21fr088c2"))))
6167 (build-system pyproject-build-system)
6168 (arguments
6169 (list
6170 #:phases
6171 #~(modify-phases %standard-phases
6172 (replace 'check
6173 (lambda* (#:key tests? #:allow-other-keys)
6174 (if tests?
6175 (begin
6176 ;; This test assumes we still have setup.py in the
6177 ;; directory from which we import zconfig, which
6178 ;; does not work after installing the package.
6179 (delete-file-recursively
6180 "src/ZConfig/tests/test_readme.py")
6181 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
6182 (format #t "test suite not run~%")))))))
6183 (native-inputs (list python-docutils python-manuel python-zope-exceptions
6184 python-zope-testrunner python-setuptools))
6185 (home-page "https://github.com/zopefoundation/ZConfig/")
6186 (synopsis "Structured configuration library intended for general use")
6187 (description
6188 "@code{zconfig} is a configuration library intended for general use. It
6189supports a hierarchical schema-driven configuration model that allows a schema
6190to specify data conversion routines written in Python. Its model is very
6191different from the model supported by the @code{configparser} module found in
6192Python's standard library, and is more suitable to configuration-intensive
6193applications.")
6194 (license license:zpl2.1)))
6195
6196(define-public python-zodb
6197 (package
6198 (name "python-zodb")
6199 (version "6.0.1")
6200 (source
6201 (origin
6202 (method url-fetch)
6203 (uri (pypi-uri "zodb" version))
6204 (sha256
6205 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
6206 (build-system pyproject-build-system)
6207 (arguments
6208 (list
6209 #:phases
6210 #~(modify-phases %standard-phases
6211 (replace 'check
6212 (lambda* (#:key tests? #:allow-other-keys)
6213 (if tests?
6214 (begin
6215 ;; This test does not work after installing the
6216 ;; package, since it expects the ZODB source code
6217 ;; to reside in the src/ directory.
6218 (delete-file-recursively
6219 "src/ZODB/tests/testdocumentation.py")
6220 (invoke "zope-testrunner" "-vv" "--test-path=src"
6221 "--all"))
6222 (format #t "test suite not run~%")))))))
6223 (native-inputs
6224 (list python-manuel
6225 python-wheel
6226 python-zope-testing
6227 python-zope-testrunner))
6228 (propagated-inputs
6229 (list python-btrees
6230 python-persistent
6231 python-transaction
6232 python-zc-lockfile
6233 python-zconfig
6234 python-zodbpickle
6235 python-zope-interface))
6236 (home-page "http://zodb-docs.readthedocs.io")
6237 (synopsis "Object-oriented database for Python")
6238 (description
6239 "@code{ZODB} provides an object-oriented and @acronym{ACID,
6240Atomicity Consistency Isolation Durability} compliant database for Python with
6241a high degree of transparency. @code{ZODB} is an object-oriented database,
6242not an object-relational mapping. This comes with several advantaged:
6243
6244@itemize
6245@item no separate language for database operations
6246@item very little impact on your code to make objects persistent
6247@item no database mapper that partially hides the database.
6248@item almost no seam between code and database.
6249@end itemize")
6250 (license license:zpl2.1)))
6251
6252(define-public python-zodbpickle
6253 (package
6254 (name "python-zodbpickle")
6255 (version "3.2")
6256 (source
6257 (origin
6258 (method url-fetch)
6259 (uri (pypi-uri "zodbpickle" version))
6260 (sha256
6261 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
6262 (build-system pyproject-build-system)
6263 (arguments
6264 '(#:phases (modify-phases %standard-phases
6265 (replace 'check
6266 (lambda* (#:key tests? #:allow-other-keys)
6267 (if tests?
6268 (invoke "zope-testrunner" "-vv" "--test-path=src"
6269 "--all")
6270 (format #t "test suite not run~%")))))))
6271 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
6272 (home-page "https://github.com/zopefoundation/zodbpickle")
6273 (synopsis "Uniform pickling interface for @code{zodb}")
6274 (description
6275 "This package is a fork of the @code{pickle} module (and the
6276supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
6277support for the @code{noload} operations used by @code{zodb}.")
6278 (license (list license:psfl license:zpl2.1))))
6279
6280(define-public python-zope-dottedname
6281 (package
6282 (name "python-zope-dottedname")
6283 (version "7.0")
6284 (source
6285 (origin
6286 (method git-fetch)
6287 (uri (git-reference
6288 (url "https://github.com/zopefoundation/zope.dottedname")
6289 (commit version)))
6290 (file-name (git-file-name name version))
6291 (sha256
6292 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
6293 (build-system pyproject-build-system)
6294 (arguments
6295 (list #:test-backend #~'custom
6296 #:test-flags #~(list "src/zope/dottedname/tests.py")))
6297 (native-inputs (list python-setuptools))
6298 (home-page "https://zopedottedname.readthedocs.io")
6299 (synopsis "Resolver for Python dotted names")
6300 (description
6301 "This package provides a @code{resolve()} function that resolves strings
6302containing dotted names into the appropriate Python object.")
6303 (license license:zpl2.1)))
6304
6305(define-public python-zope-event
6306 (package
6307 (name "python-zope-event")
6308 (version "6.0")
6309 (source
6310 (origin
6311 (method git-fetch)
6312 (uri (git-reference
6313 (url "https://github.com/zopefoundation/zope.event")
6314 (commit version)))
6315 (file-name (git-file-name name version))
6316 (sha256
6317 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
6318 (build-system pyproject-build-system)
6319 (arguments
6320 (list
6321 #:test-flags
6322 #~(list "src/zope/event/tests.py")))
6323 (native-inputs (list python-pytest python-setuptools))
6324 (home-page "https://zopeevent.readthedocs.io/en/latest/")
6325 (synopsis "Event publishing system for Python")
6326 (description
6327 "Zope.event provides an event publishing API, intended for use by
6328applications which are unaware of any subscribers to their events. It is a
6329simple event-dispatching system on which more sophisticated event dispatching
6330systems can be built.")
6331 (license license:zpl2.1)))
6332
6333(define-public python-zope-interface
6334 (package
6335 (name "python-zope-interface")
6336 (version "7.2")
6337 (source
6338 (origin
6339 (method git-fetch)
6340 (uri (git-reference
6341 (url "https://github.com/zopefoundation/zope.interface")
6342 (commit version)))
6343 (file-name (git-file-name name version))
6344 (sha256
6345 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
6346 (build-system pyproject-build-system)
6347 (arguments
6348 ;; XXX: test suite can't find python-zope-testing
6349 (list #:tests? #f))
6350 (native-inputs (list python-setuptools))
6351 (home-page "https://zopeinterface.readthedocs.io")
6352 (synopsis "\"Design by contract\" methodology in Python")
6353 (description
6354 "Zope.interface provides an implementation of \"object interfaces\" for
6355Python. Interfaces are a mechanism for labeling objects as conforming to a
6356given API or contract.")
6357 (license license:zpl2.1)))
6358
6359(define-public python-zope-exceptions
6360 (package
6361 (name "python-zope-exceptions")
6362 (version "6.0")
6363 (source
6364 (origin
6365 (method git-fetch)
6366 (uri (git-reference
6367 (url "https://github.com/zopefoundation/zope.exceptions")
6368 (commit version)))
6369 (file-name (git-file-name name version))
6370 (sha256
6371 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
6372 (build-system pyproject-build-system)
6373 (arguments
6374 (list
6375 #:phases
6376 #~(modify-phases %standard-phases
6377 (replace 'check
6378 (lambda* (#:key tests? #:allow-other-keys)
6379 (if tests?
6380 (invoke "zope-testrunner" "--test-path=src")
6381 (format #t "test suite not run~%")))))))
6382 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
6383 (propagated-inputs (list python-zope-interface))
6384 (home-page "https://github.com/zopefoundation/zope.exceptions")
6385 (synopsis "Zope exceptions")
6386 (description
6387 "Zope.exceptions provides general-purpose exception types that have uses
6388outside of the Zope framework.")
6389 (license license:zpl2.1)))
6390
6391(define (python-zope-bootstrap-package orig)
6392 (package
6393 (inherit orig)
6394 (name (string-append (package-name orig) "-bootstrap"))
6395 (arguments
6396 (if (null? (package-arguments orig))
6397 (list
6398 #:tests? #f
6399 #:phases #~(modify-phases %standard-phases
6400 (delete 'sanity-check)))
6401 (substitute-keyword-arguments arguments
6402 ((#:tests? _ #f) #f)
6403 ((#:phases phases '%standard-phases)
6404 #~(modify-phases #$phases
6405 (delete 'sanity-check))))))
6406 (propagated-inputs `())
6407 (native-inputs (list python-setuptools))
6408 (properties `((hidden? . #t)))))
6409
6410(define-public python-zope-exceptions-bootstrap
6411 (python-zope-bootstrap-package python-zope-exceptions))
6412
6413(define-public python-zope-testing
6414 (package
6415 (name "python-zope-testing")
6416 (version "6.0")
6417 (source
6418 (origin
6419 (method git-fetch)
6420 (uri (git-reference
6421 (url "https://github.com/zopefoundation/zope.testing")
6422 (commit version)))
6423 (file-name (git-file-name name version))
6424 (sha256
6425 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
6426 (build-system pyproject-build-system)
6427 (arguments
6428 (list
6429 #:phases
6430 #~(modify-phases %standard-phases
6431 (replace 'check
6432 (lambda* (#:key tests? #:allow-other-keys)
6433 (if tests?
6434 (invoke "zope-testrunner" "--test-path=src")
6435 (format #t "test suite not run~%")))))))
6436 (native-inputs (list python-setuptools
6437 python-zope-interface
6438 python-zope-testrunner-bootstrap))
6439 (home-page "https://zopetesting.readthedocs.io/")
6440 (synopsis "Zope testing helpers")
6441 (description
6442 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
6443servers, regular expressions, and more.")
6444 (license license:zpl2.1)))
6445
6446(define-public python-zope-testrunner
6447 (package
6448 (name "python-zope-testrunner")
6449 (version "7.4")
6450 (source
6451 (origin
6452 (method git-fetch)
6453 (uri (git-reference
6454 (url "https://github.com/zopefoundation/zope.testrunner")
6455 (commit version)))
6456 (file-name (git-file-name name version))
6457 (sha256
6458 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
6459 (build-system pyproject-build-system)
6460 (arguments
6461 (list
6462 #:phases
6463 #~(modify-phases %standard-phases
6464 (add-after 'unpack 'remove-problematic-test
6465 (lambda _
6466 ;; This test contains invalid syntax, which breaks bytecode
6467 ;; compilation. For simplicity just remove it.
6468 (delete-file
6469 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
6470 (replace 'check
6471 (lambda* (#:key tests? #:allow-other-keys)
6472 (if tests?
6473 (invoke "zope-testrunner" "--test-path=src")
6474 (format #t "test suite not run~%")))))))
6475 (native-inputs (list python-setuptools python-zope-testing))
6476 (propagated-inputs (list python-zope-exceptions python-zope-interface))
6477 (home-page "https://zopetestrunner.readthedocs.io")
6478 (synopsis "Zope testrunner script")
6479 (description "This package provides a script for running Python tests.")
6480 (license license:zpl2.1)))
6481
6482(define-public python-zope-testrunner-bootstrap
6483 (package
6484 (inherit (python-zope-bootstrap-package python-zope-testrunner))
6485 (propagated-inputs
6486 (list python-six python-zope-exceptions-bootstrap))
6487 (properties `((hidden? . #t)))))
6488
6489(define-public python-zope-i18nmessageid
6490 (package
6491 (name "python-zope-i18nmessageid")
6492 (version "7.0")
6493 (source
6494 (origin
6495 (method git-fetch)
6496 (uri (git-reference
6497 (url "https://github.com/zopefoundation/zope.i18nmessageid")
6498 (commit version)))
6499 (file-name (git-file-name name version))
6500 (sha256
6501 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
6502 (build-system pyproject-build-system)
6503 (arguments
6504 (list
6505 #:phases
6506 #~(modify-phases %standard-phases
6507 (replace 'check
6508 (lambda* (#:key tests? #:allow-other-keys)
6509 (if tests?
6510 (invoke "zope-testrunner" "--test-path=src")
6511 (format #t "test suite not run~%")))))))
6512 (native-inputs (list python-setuptools python-zope-testrunner))
6513 (home-page "https://zopei18nmessageid.readthedocs.io")
6514 (synopsis "Message identifiers for internationalization")
6515 (description "Zope.i18nmessageid provides facilities for declaring
6516internationalized messages within program source text.")
6517 (license license:zpl2.1)))
6518
6519(define-public python-zope-schema
6520 (package
6521 (name "python-zope-schema")
6522 (version "7.0.1")
6523 (source
6524 (origin
6525 (method git-fetch)
6526 (uri (git-reference
6527 (url "https://github.com/zopefoundation/zope.schema")
6528 (commit version)))
6529 (file-name (git-file-name name version))
6530 (sha256
6531 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
6532 (build-system pyproject-build-system)
6533 (arguments
6534 (list
6535 #:phases
6536 #~(modify-phases %standard-phases
6537 (replace 'check
6538 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6539 (add-installed-pythonpath inputs outputs)
6540 (if tests?
6541 (invoke "zope-testrunner" "--test-path=src")
6542 (format #t "test suite not run.~%")))))))
6543 (propagated-inputs (list python-zope-event python-zope-interface))
6544 (native-inputs (list python-zope-i18nmessageid python-zope-testing
6545 python-zope-testrunner python-setuptools))
6546 (home-page "https://zopeschema.readthedocs.io")
6547 (synopsis "Zope data schemas")
6548 (description "Zope.scheme provides extensions to zope.interface for
6549defining data schemas.")
6550 (license license:zpl2.1)))
6551
6552(define-public python-zope-sqlalchemy
6553 (package
6554 (name "python-zope-sqlalchemy")
6555 (version "1.6")
6556 (source
6557 (origin
6558 (method git-fetch)
6559 (uri (git-reference
6560 (url "https://github.com/zopefoundation/zope.sqlalchemy")
6561 (commit version)))
6562 (file-name (git-file-name name version))
6563 (sha256
6564 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
6565 (build-system pyproject-build-system)
6566 (arguments
6567 (list
6568 #:phases
6569 #~(modify-phases %standard-phases
6570 (replace 'check
6571 (lambda* (#:key tests? #:allow-other-keys)
6572 (if tests?
6573 (invoke "zope-testrunner" "--test-path=src")
6574 (format #t "test suite not run~%")))))))
6575 (propagated-inputs (list python-sqlalchemy python-transaction
6576 python-zope-interface))
6577 (native-inputs (list python-zope-testing python-zope-testrunner
6578 python-setuptools))
6579 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
6580 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
6581 (description
6582 "The aim of this package is to unify the plethora of existing packages
6583integrating SQLAlchemy with Zope's transaction management. As such,it only
6584provides a data manager and makes no attempt to define a @i{zopeish} way to
6585configure engines.")
6586 (license license:zpl2.1)))
6587
6588(define-public python-zope-configuration
6589 (package
6590 (name "python-zope-configuration")
6591 (version "7.0")
6592 (source
6593 (origin
6594 (method git-fetch)
6595 (uri (git-reference
6596 (url "https://github.com/zopefoundation/zope.configuration")
6597 (commit version)))
6598 (file-name (git-file-name name version))
6599 (sha256
6600 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
6601 (build-system pyproject-build-system)
6602 (arguments
6603 (list
6604 #:phases
6605 #~(modify-phases %standard-phases
6606 (replace 'check
6607 (lambda* (#:key tests? #:allow-other-keys)
6608 (if tests?
6609 (invoke "zope-testrunner" "--test-path=src")
6610 (format #t "test suite not run~%")))))))
6611 (native-inputs (list python-manuel python-setuptools python-zope-testing
6612 python-zope-testrunner))
6613 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
6614 python-zope-schema))
6615 (home-page "https://zopeconfiguration.readthedocs.io")
6616 (synopsis "Zope Configuration Markup Language")
6617 (description "Zope.configuration implements ZCML, the Zope Configuration
6618Markup Language.")
6619 (license license:zpl2.1)))
6620
6621(define-public python-zope-configuration-bootstrap
6622 (python-zope-bootstrap-package python-zope-configuration))
6623
6624(define-public python-zope-copy
6625 (package
6626 (name "python-zope-copy")
6627 (version "6.0")
6628 (source
6629 (origin
6630 (method git-fetch)
6631 (uri (git-reference
6632 (url "https://github.com/zopefoundation/zope.copy")
6633 (commit version)))
6634 (file-name (git-file-name name version))
6635 (sha256
6636 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
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 (propagated-inputs (list python-zope-interface))
6648 (native-inputs
6649 (list python-zodbpickle
6650 python-zope-component-bootstrap
6651 python-zope-location-bootstrap
6652 python-zope-proxy
6653 python-zope-schema
6654 python-zope-testing
6655 python-zope-testrunner
6656 python-setuptools))
6657 (home-page "https://zopecopy.readthedocs.io")
6658 (synopsis "Pluggable object copying mechanism")
6659 (description
6660 "This package provides a pluggable mechanism for copying persistent objects.")
6661 (license license:zpl2.1)))
6662
6663(define-public python-zope-proxy
6664 (package
6665 (name "python-zope-proxy")
6666 (version "7.0")
6667 (source
6668 (origin
6669 (method git-fetch)
6670 (uri (git-reference
6671 (url "https://github.com/zopefoundation/zope.proxy")
6672 (commit version)))
6673 (file-name (git-file-name name version))
6674 (sha256
6675 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
6676 (build-system pyproject-build-system)
6677 (arguments
6678 (list
6679 #:phases
6680 #~(modify-phases %standard-phases
6681 (replace 'check
6682 (lambda* (#:key tests? #:allow-other-keys)
6683 (if tests?
6684 (invoke "zope-testrunner" "--test-path=src")
6685 (format #t "test suite not run~%")))))))
6686 (native-inputs
6687 (list python-zope-location-bootstrap
6688 python-zope-security-bootstrap
6689 python-zope-testrunner
6690 python-setuptools))
6691 (propagated-inputs (list python-zope-interface))
6692 (home-page "https://zopeproxy.readthedocs.io")
6693 (synopsis "Generic, transparent proxies")
6694 (description
6695 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
6696special objects which serve as mostly-transparent wrappers around another
6697object, intervening in the apparent behavior of the wrapped object only when
6698necessary to apply the policy (e.g., access checking, location brokering,
6699etc.) for which the proxy is responsible.")
6700 (license license:zpl2.1)))
6701
6702(define-public python-zope-proxy-bootstrap
6703 (python-zope-bootstrap-package python-zope-proxy))
6704
6705(define-public python-zope-hookable
6706 (package
6707 (name "python-zope-hookable")
6708 (version "7.0")
6709 (source
6710 (origin
6711 (method git-fetch)
6712 (uri (git-reference
6713 (url "https://github.com/zopefoundation/zope.hookable")
6714 (commit version)))
6715 (file-name (git-file-name name version))
6716 (sha256
6717 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
6718 (build-system pyproject-build-system)
6719 (arguments
6720 (list
6721 #:phases
6722 #~(modify-phases %standard-phases
6723 (replace 'check
6724 (lambda* (#:key tests? #:allow-other-keys)
6725 (if tests?
6726 (invoke "zope-testrunner" "--test-path=src")
6727 (format #t "test suite not run~%")))))))
6728 (native-inputs (list python-zope-testing python-zope-testrunner
6729 python-setuptools))
6730 (home-page "https://zopehookable.readthedocs.io")
6731 (synopsis "Zope hookable")
6732 (description
6733 "This package supports the efficient creation of hookable objects, which
6734are callable objects that are meant to be optionally replaced. The idea is
6735that you create a function that does some default thing and make i hookable.
6736Later, someone can modify what it does by calling its sethook method and
6737changing its implementation. All users of the function, including those that
6738imported it, will see the change.")
6739 (license license:zpl2.1)))
6740
6741(define-public python-zope-location
6742 (package
6743 (name "python-zope-location")
6744 (version "6.0")
6745 (source
6746 (origin
6747 (method git-fetch)
6748 (uri (git-reference
6749 (url "https://github.com/zopefoundation/zope.location")
6750 (commit version)))
6751 (file-name (git-file-name name version))
6752 (sha256
6753 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
6754 (build-system pyproject-build-system)
6755 (arguments
6756 (list
6757 #:phases
6758 #~(modify-phases %standard-phases
6759 (replace 'check
6760 (lambda* (#:key tests? #:allow-other-keys)
6761 (if tests?
6762 (invoke "zope-testrunner" "--test-path=src")
6763 (format #t "test suite not run~%")))))))
6764 (native-inputs (list python-zope-testrunner python-setuptools))
6765 (propagated-inputs (list python-zope-interface python-zope-proxy
6766 python-zope-schema))
6767 (home-page "https://zopelocation.readthedocs.io")
6768 (synopsis "Zope location library")
6769 (description
6770 "Zope.location implements the concept of \"locations\" in Zope3, which
6771are are special objects that have a structural location.")
6772 (license license:zpl2.1)))
6773
6774(define-public python-zope-location-bootstrap
6775 (python-zope-bootstrap-package python-zope-location))
6776
6777(define-public python-zope-security
6778 (package
6779 (name "python-zope-security")
6780 (version "7.3")
6781 (source
6782 (origin
6783 (method git-fetch)
6784 (uri (git-reference
6785 (url "https://github.com/zopefoundation/zope.security")
6786 (commit version)))
6787 (file-name (git-file-name name version))
6788 (sha256
6789 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
6790 (build-system pyproject-build-system)
6791 (arguments
6792 (list
6793 #:phases
6794 #~(modify-phases %standard-phases
6795 (replace 'check
6796 (lambda* (#:key tests? #:allow-other-keys)
6797 (if tests?
6798 (invoke "zope-testrunner" "--test-path=src")
6799 (format #t "test suite not run~%")))))))
6800 (propagated-inputs
6801 (list python-zope-component
6802 python-zope-i18nmessageid
6803 python-zope-interface
6804 python-zope-location
6805 python-zope-proxy
6806 python-zope-schema))
6807 (native-inputs
6808 (list python-btrees
6809 python-zope-component-bootstrap
6810 python-zope-configuration-bootstrap
6811 python-zope-location-bootstrap
6812 python-zope-testing
6813 python-zope-testrunner
6814 python-setuptools))
6815 (home-page "https://zopesecurity.readthedocs.io")
6816 (synopsis "Zope security framework")
6817 (description "Zope.security provides a generic mechanism to implement
6818security policies on Python objects.")
6819 (license license:zpl2.1)))
6820
6821(define-public python-zope-security-bootstrap
6822 (package
6823 (inherit (python-zope-bootstrap-package python-zope-security))
6824 (propagated-inputs
6825 (list python-zope-i18nmessageid
6826 python-zope-interface
6827 python-zope-proxy-bootstrap
6828 python-zope-schema))))
6829
6830(define-public python-zope-component
6831 (package
6832 (name "python-zope-component")
6833 (version "7.0")
6834 (source
6835 (origin
6836 (method git-fetch)
6837 (uri (git-reference
6838 (url "https://github.com/zopefoundation/zope.component")
6839 (commit version)))
6840 (file-name (git-file-name name version))
6841 (sha256
6842 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
6843 (build-system pyproject-build-system)
6844 (arguments
6845 (list
6846 #:phases
6847 #~(modify-phases %standard-phases
6848 (replace 'check
6849 (lambda* (#:key tests? #:allow-other-keys)
6850 (if tests?
6851 (invoke "zope-testrunner" "--test-path=src")
6852 (format #t "test suite not run~%")))))))
6853 (native-inputs
6854 (list python-persistent
6855 python-zope-configuration-bootstrap
6856 python-zope-i18nmessageid
6857 python-zope-location-bootstrap
6858 python-zope-proxy-bootstrap
6859 python-zope-security-bootstrap
6860 python-zope-testing
6861 python-zope-testrunner
6862 python-setuptools))
6863 (propagated-inputs
6864 (list python-zope-deferredimport python-zope-deprecation
6865 python-zope-event python-zope-hookable python-zope-interface))
6866 (home-page "https://zopecomponent.readthedocs.io")
6867 (synopsis "Zope Component Architecture")
6868 (description
6869 "Zope.component represents the core of the Zope Component Architecture.
6870Together with the zope.interface package, it provides facilities for defining,
6871registering and looking up components.")
6872 (license license:zpl2.1)))
6873
6874(define-public python-zope-component-bootstrap
6875 (python-zope-bootstrap-package python-zope-component))
6876
6877(define-public python-zope-deferredimport
6878 (package
6879 (name "python-zope-deferredimport")
6880 (version "6.0")
6881 (source
6882 (origin
6883 (method git-fetch)
6884 (uri (git-reference
6885 (url "https://github.com/zopefoundation/zope.deferredimport")
6886 (commit version)))
6887 (file-name (git-file-name name version))
6888 (sha256
6889 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
6890 (build-system pyproject-build-system)
6891 (arguments
6892 (list
6893 #:phases
6894 #~(modify-phases %standard-phases
6895 (replace 'check
6896 (lambda* (#:key tests? #:allow-other-keys)
6897 (if tests?
6898 (invoke "zope-testrunner" "--test-path=src")
6899 (format #t "test suite not run~%")))))))
6900 (propagated-inputs (list python-zope-proxy))
6901 (native-inputs (list python-zope-testrunner python-setuptools))
6902 (home-page "https://zopedeferredimport.readthedocs.io")
6903 (synopsis "Defer imports until used by code")
6904 (description
6905 "Often, especially for package modules, you want to import names for
6906convenience, but not actually perform the imports until necessary. The
6907@code{zope.deferredimport} package provided facilities for defining names in
6908modules that will be imported from somewhere else when used. You can also cause
6909deprecation warnings to be issued when a variable is used.")
6910 (license license:zpl2.1)))
6911
6912(define-public python-ndg-httpsclient
6913 (package
6914 (name "python-ndg-httpsclient")
6915 (version "0.5.1")
6916 (source
6917 (origin
6918 (method git-fetch)
6919 (uri (git-reference
6920 (url "https://github.com/cedadev/ndg_httpsclient/")
6921 (commit version)))
6922 (file-name (git-file-name name version))
6923 (sha256
6924 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
6925 (build-system pyproject-build-system)
6926 (arguments
6927 (list
6928 #:tests? #f)) ;Tests appear to require networking.
6929 (native-inputs (list python-setuptools))
6930 (propagated-inputs (list python-pyasn1 python-pyopenssl))
6931 (synopsis "HTTPS support for Python's httplib and urllib2")
6932 (description
6933 "This is a HTTPS client implementation for httplib and urllib2 based on
6934PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
6935the default provided with Python and, importantly, enables full verification
6936of the SSL peer.")
6937 (home-page "https://github.com/cedadev/ndg_httpsclient/")
6938 (license license:bsd-3)))
6939
6940(define-public python-netaddr
6941 (package
6942 (name "python-netaddr")
6943 (version "1.3.0")
6944 (source
6945 (origin
6946 (method url-fetch)
6947 (uri (pypi-uri "netaddr" version))
6948 (sha256
6949 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
6950 (build-system pyproject-build-system)
6951 (native-inputs (list python-poetry-core
6952 python-pytest
6953 python-setuptools
6954 python-wheel))
6955 (home-page "https://netaddr.readthedocs.io")
6956 (synopsis "Pythonic manipulation of network addresses")
6957 (description
6958 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
6959and MAC network addresses.")
6960 (license license:bsd-3)))
6961
6962(define-public python-nh3
6963 (package
6964 (name "python-nh3")
6965 (version "0.2.20")
6966 (source
6967 (origin
6968 (method url-fetch)
6969 (uri (pypi-uri "nh3" version))
6970 (sha256
6971 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
6972 (build-system pyproject-build-system)
6973 (arguments
6974 (list
6975 #:imported-modules `(,@%cargo-build-system-modules
6976 ,@%pyproject-build-system-modules)
6977 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
6978 (guix build pyproject-build-system)
6979 (guix build utils))
6980 #:phases
6981 #~(modify-phases %standard-phases
6982 (add-after 'unpack 'prepare-cargo-build-system
6983 (lambda args
6984 (for-each
6985 (lambda (phase)
6986 (format #t "Running cargo phase: ~a~%" phase)
6987 (apply (assoc-ref cargo:%standard-phases phase)
6988 #:cargo-target #$(cargo-triplet)
6989 args))
6990 '(unpack-rust-crates
6991 configure
6992 check-for-pregenerated-files
6993 patch-cargo-checksums)))))))
6994 (native-inputs
6995 (append
6996 (list maturin python-pytest rust `(,rust "cargo"))
6997 (or (and=> (%current-target-system)
6998 (compose list make-rust-sysroot))
6999 '())))
7000 (inputs (cargo-inputs 'python-nh3))
7001 (home-page "https://nh3.readthedocs.io")
7002 (synopsis "Python bindings to Ammonia HTML sanitization library")
7003 (description "This package provides Python bindings to Ammonia HTML
7004sanitizer Rust crate.")
7005 (license license:expat)))
7006
7007(define-public python-noiseprotocol
7008 (package
7009 (name "python-noiseprotocol")
7010 (version "0.3.1")
7011 (source
7012 (origin
7013 (method git-fetch)
7014 (uri (git-reference
7015 (url "https://github.com/plizonczyk/noiseprotocol")
7016 (commit (string-append "v" version))))
7017 (file-name (git-file-name name version))
7018 (sha256
7019 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
7020 (build-system pyproject-build-system)
7021 (propagated-inputs (list python-cryptography))
7022 (native-inputs (list python-setuptools python-pytest))
7023 (home-page "https://github.com/plizonczyk/noiseprotocol")
7024 (synopsis "Implementation of Noise Protocol Framework")
7025 (description
7026 "This package provides an implementation of Noise Protocol Framework.")
7027 (license license:expat)))
7028
7029(define-public python-webrtcvad-wheels
7030 (package
7031 (name "python-webrtcvad-wheels")
7032 (version "2.0.14")
7033 (source
7034 (origin
7035 (method git-fetch)
7036 (uri (git-reference
7037 (url "https://github.com/daanzu/py-webrtcvad-wheels")
7038 (commit (string-append "v" version))))
7039 (file-name (git-file-name name version))
7040 (sha256
7041 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
7042 (build-system pyproject-build-system)
7043 (native-inputs (list python-psutil python-pytest python-setuptools))
7044 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
7045 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
7046 (description
7047 "This package provides a Python interface to the Google
7048@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
7049 (license license:expat)))
7050
7051(define-public python-websocket-client
7052 (package
7053 (name "python-websocket-client")
7054 (version "1.8.0")
7055 (source
7056 (origin
7057 (method url-fetch)
7058 (uri (pypi-uri "websocket_client" version))
7059 (sha256
7060 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
7061 (build-system pyproject-build-system)
7062 (arguments
7063 (list
7064 #:test-flags
7065 ;; This test requires networking.
7066 '(list "-k" "not testConnect")))
7067 (native-inputs
7068 (list python-pysocks
7069 python-pytest
7070 python-setuptools
7071 python-websockets
7072 python-wheel))
7073 (home-page "https://github.com/websocket-client/websocket-client")
7074 (synopsis "WebSocket client for Python")
7075 (description "The Websocket-client module provides the low level APIs for
7076WebSocket usage in Python programs.")
7077 (license license:lgpl2.1+)))
7078
7079(define-public python-websocket-client-0.59
7080 (package
7081 (inherit python-websocket-client)
7082 (version "0.59.0")
7083 (source
7084 (origin
7085 (method url-fetch)
7086 (uri (pypi-uri "websocket-client" version))
7087 (sha256
7088 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
7089 (native-inputs
7090 (modify-inputs native-inputs
7091 (append python-six)))))
7092
7093(define-public python-purl
7094 (package
7095 (name "python-purl")
7096 (version "1.6")
7097 (source
7098 (origin
7099 (method git-fetch)
7100 (uri (git-reference
7101 (url "https://github.com/codeinthehole/purl")
7102 (commit version)))
7103 (file-name (git-file-name name version))
7104 (sha256
7105 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
7106 (build-system pyproject-build-system)
7107 (arguments
7108 (list
7109 #:test-flags #~(list "--pyargs" "./tests")))
7110 (native-inputs (list python-pytest python-setuptools))
7111 (propagated-inputs (list python-six))
7112 (home-page "https://github.com/codeinthehole/purl")
7113 (synopsis "Python package for URL manipulation")
7114 (description "Purl is a Python package for handling URLs.")
7115 (license license:expat)))
7116
7117(define-public python-apiron
7118 (package
7119 (name "python-apiron")
7120 (version "5.1.0")
7121 (source
7122 (origin
7123 (method url-fetch)
7124 (uri (pypi-uri "apiron" version))
7125 (sha256
7126 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
7127 (build-system pyproject-build-system)
7128 (arguments
7129 (list #:test-flags '(list "-k" "not test_call")))
7130 (propagated-inputs
7131 (list python-requests))
7132 (native-inputs
7133 (list python-pytest
7134 python-setuptools
7135 python-wheel))
7136 (home-page "https://github.com/ithaka/apiron")
7137 (synopsis "Python wrapper for interacting with RESTful APIs")
7138 (description
7139 "@code{apiron} provides a declarative, structured configuration of
7140services and endpoints with a unified interface for interacting with RESTful
7141APIs.")
7142 (license license:expat)))
7143
7144(define-public python-beren
7145 (package
7146 (name "python-beren")
7147 (version "0.7.0")
7148 (source
7149 (origin
7150 (method git-fetch)
7151 (uri (git-reference
7152 (url "https://github.com/teffalump/beren")
7153 (commit (string-append "v" version))))
7154 (file-name (git-file-name name version))
7155 (sha256
7156 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
7157 (build-system pyproject-build-system)
7158 (arguments
7159 ;; The test tries to open a connection to a remote server.
7160 `(#:tests? #f))
7161 (native-inputs (list python-setuptools))
7162 (propagated-inputs (list python-apiron))
7163 (home-page "https://github.com/teffalump/beren")
7164 (synopsis "REST client for Orthanc DICOM servers")
7165 (description
7166 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
7167 (license license:gpl3+)))
7168
7169(define-public python-requests
7170 (package
7171 (name "python-requests")
7172 (version "2.32.5")
7173 (source (origin
7174 (method url-fetch)
7175 (uri (pypi-uri "requests" version))
7176 (sha256
7177 (base32
7178 "1kypqz701x9s7j4shm1pdnzy4pzx9lmvhwgan0yqa071asn0pfnv"))))
7179 (build-system pyproject-build-system)
7180 (arguments
7181 (list #:test-flags
7182 ;; These require internet access
7183 '(list "--ignore=tests/test_requests.py"
7184 "-k" (string-append "not test_use_proxy_from_environment"
7185 " and not requests.sessions.Session"
7186 " and not requests.models.PreparedRequest"
7187 " and not requests.api.request")
7188 "tests/")))
7189 (propagated-inputs
7190 (list python-certifi
7191 python-charset-normalizer
7192 python-idna
7193 python-urllib3))
7194 (native-inputs
7195 (list python-pytest
7196 python-pytest-mock
7197 python-setuptools))
7198 (home-page "https://requests.readthedocs.io/")
7199 (synopsis "Python HTTP library")
7200 (description
7201 "Requests is a Python HTTP client library. It aims to be easier to use
7202than Python’s urllib2 library.")
7203 (license license:asl2.0)))
7204
7205(define-public python-requests-kerberos
7206 (package
7207 (name "python-requests-kerberos")
7208 (version "0.14.0")
7209 ;; No tests in the PyPI tarball.
7210 (source
7211 (origin
7212 (method git-fetch)
7213 (uri (git-reference
7214 (url "https://github.com/requests/requests-kerberos")
7215 (commit (string-append "v" version))))
7216 (file-name (git-file-name name version))
7217 (sha256
7218 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
7219 (build-system pyproject-build-system)
7220 (propagated-inputs (list python-cryptography
7221 python-pyspnego
7222 python-requests))
7223 (native-inputs (list python-pytest python-pytest-mock python-setuptools
7224 python-wheel))
7225 (home-page "https://github.com/requests/requests-kerberos")
7226 (synopsis "Kerberos authentication handler for python-requests")
7227 (description "This package provides a Kerberos authentication handler for
7228python-requests.")
7229 (license license:isc)))
7230
7231(define-public python-requests-unixsocket2
7232 (package
7233 (name "python-requests-unixsocket2")
7234 (version "1.0.1")
7235 (source
7236 (origin
7237 (method git-fetch)
7238 (uri (git-reference
7239 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
7240 (commit (string-append "v" version))))
7241 (sha256
7242 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
7243 (build-system pyproject-build-system)
7244 (native-inputs
7245 (list nss-certs-for-test
7246 python-hatchling
7247 python-pytest
7248 python-waitress))
7249 (propagated-inputs
7250 (list python-requests
7251 python-urllib3))
7252 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
7253 (synopsis "Talk HTTP via a UNIX domain socket")
7254 (description
7255 "This Python package lets you use the @code{requests} library to talk
7256HTTP via a UNIX domain socket.")
7257 (license license:asl2.0)))
7258
7259(define-public python-requests-ntlm
7260 (package
7261 (name "python-requests-ntlm")
7262 (version "1.3.0")
7263 (source
7264 (origin
7265 (method git-fetch)
7266 (uri (git-reference
7267 (url "https://github.com/requests/requests-ntlm")
7268 (commit (string-append "v" version))))
7269 (file-name (git-file-name name version))
7270 (sha256
7271 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
7272 (build-system pyproject-build-system)
7273 (arguments
7274 (list
7275 #:test-flags
7276 ;; XXX: Connection refused.
7277 #~(list "-k" (string-join
7278 (list "not test_ntlm_http_with_cbt"
7279 "test_ntlm_http_without_cbt"
7280 "test_ntlm_https_with_cbt"
7281 "test_ntlm_https_without_cbt")
7282 " and not "))
7283 #:phases
7284 #~(modify-phases %standard-phases
7285 (add-before 'check 'spawn-test-server
7286 (lambda _
7287 ;; Taken from .github/workflows/ci.yml.
7288 (spawn "python"
7289 (list "python" "-m" "tests.test_server")))))))
7290 (propagated-inputs
7291 (list python-cryptography python-pyspnego python-requests))
7292 (native-inputs (list python-flask python-pytest python-setuptools))
7293 (home-page "https://github.com/requests/requests-ntlm")
7294 (synopsis "NTLM authentication support for Requests")
7295 (description
7296 "This package allows for HTTP NTLM authentication using the requests
7297library.")
7298 (license license:isc)))
7299
7300(define-public python-requests-mock
7301 (package
7302 (name "python-requests-mock")
7303 (version "1.12.1")
7304 (source
7305 (origin
7306 (method url-fetch)
7307 (uri (pypi-uri "requests-mock" version))
7308 (sha256
7309 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
7310 (build-system pyproject-build-system)
7311 (native-inputs
7312 (list python-purl
7313 python-pytest
7314 python-requests-futures
7315 python-setuptools
7316 python-setuptools-scm
7317 python-testtools))
7318 (propagated-inputs
7319 (list python-requests))
7320 (home-page "https://requests-mock.readthedocs.org/")
7321 (synopsis "Mock out responses from the requests package")
7322 (description
7323 "This module provides a building block to stub out the HTTP requests
7324portions of your testing code.")
7325 (license license:asl2.0)))
7326
7327(define-public python-requests-toolbelt
7328 (package
7329 (name "python-requests-toolbelt")
7330 (version "1.0.0")
7331 (source
7332 (origin
7333 (method url-fetch)
7334 (uri (pypi-uri "requests-toolbelt" version))
7335 (sha256
7336 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
7337 (build-system pyproject-build-system)
7338 (arguments
7339 (list
7340 #:test-flags
7341 ;; Requiring networking or fail due not valid certs: AttributeError:
7342 ;; 'MockHTTPResponse' object has no attribute 'close'
7343 #~(list "-k" (string-append "not test_dump_all"
7344 " and not test_dump_response"
7345 " and not test_prepared_request_override_base"
7346 " and not test_prepared_request_with_base"
7347 " and not test_request_override_base"
7348 " and not test_request_with_base"))))
7349 (native-inputs
7350 (list python-betamax
7351 python-mock
7352 python-pyopenssl
7353 python-pytest
7354 python-setuptools
7355 python-trustme
7356 python-wheel))
7357 (propagated-inputs
7358 (list python-requests))
7359 (synopsis "Extensions to python-requests")
7360 (description "This is a toolbelt of useful classes and functions to be used
7361with python-requests.")
7362 (home-page "https://github.com/requests/toolbelt/")
7363 (license license:asl2.0)))
7364
7365(define-public python-requests-ftp
7366 (package
7367 (name "python-requests-ftp")
7368 (version "0.3.1")
7369 (source
7370 (origin
7371 (method git-fetch)
7372 (uri (git-reference
7373 (url "https://github.com/Lukasa/requests-ftp")
7374 (commit (string-append "v" version))))
7375 (file-name (git-file-name name version))
7376 (sha256
7377 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
7378 (build-system pyproject-build-system)
7379 (arguments
7380 ;; XXX: No connection adapters found.
7381 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
7382 (native-inputs
7383 (list python-pyftpdlib python-pytest python-setuptools python-six))
7384 (propagated-inputs (list python-requests))
7385 (home-page "https://github.com/Lukasa/requests-ftp")
7386 (synopsis "FTP Transport Adapter for Requests")
7387 (description "Requests-FTP is an implementation of a simple FTP transport
7388adapter for use with the Requests library.")
7389 (license license:asl2.0)))
7390
7391(define-public python-aioftp
7392 (package
7393 (name "python-aioftp")
7394 (version "0.27.2")
7395 (source
7396 (origin
7397 (method git-fetch)
7398 (uri (git-reference
7399 (url "https://github.com/aio-libs/aioftp")
7400 (commit version)))
7401 (file-name (git-file-name name version))
7402 (sha256
7403 (base32 "1lshyac5zk1w4x7ygkim3726f8gbkvpvlyiqkn9cs6qjxhxn5bxc"))))
7404 (build-system pyproject-build-system)
7405 (arguments
7406 (list
7407 #:phases
7408 #~(modify-phases %standard-phases
7409 (add-after 'unpack 'use-default-asyncio
7410 ;; async_timeout is deprecated, upstream recommends to use
7411 ;; asyncio, available since Python 3.11.
7412 (lambda _
7413 (substitute* "tests/conftest.py"
7414 (("async_timeout") "asyncio")))))))
7415 (native-inputs
7416 (list python-pytest
7417 python-pytest-mock
7418 python-pytest-asyncio
7419 python-setuptools
7420 python-siosocks
7421 python-trustme))
7422 (home-page "https://aioftp.readthedocs.io/")
7423 (synopsis "FTP client/server for asyncio in Python")
7424 (description
7425 "FTP client and server for asyncio (Python 3) Library implementing FTP
7426protocol, both client and server for Python asyncio module.
7427
7428 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
7429 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
7430 REST, LIST (as fallback).
7431
7432 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
7433 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
7434 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
7435 (license license:asl2.0)))
7436
7437(define-public python-mohawk
7438 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
7439 (revision "0"))
7440 (package
7441 (name "python-mohawk")
7442 (version (git-version "1.1.0" revision commit))
7443 (source
7444 (origin
7445 (method git-fetch)
7446 (uri (git-reference
7447 (url "https://github.com/kumar303/mohawk")
7448 (commit commit)))
7449 (file-name (git-file-name name version))
7450 (sha256
7451 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
7452 (patches
7453 (search-patches "python-mohawk-pytest.patch"))))
7454 (build-system pyproject-build-system)
7455 (arguments
7456 (list #:test-flags #~(list "mohawk/tests.py")))
7457 (native-inputs (list python-pytest python-setuptools))
7458 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
7459 ;python-six is removed?
7460 (home-page "https://github.com/kumar303/mohawk")
7461 (synopsis "Library for Hawk HTTP authorization")
7462 (description
7463 "Mohawk is an alternate Python implementation of the Hawk HTTP
7464authorization scheme.")
7465 (license license:bsd-3))))
7466
7467(define-public python-msal
7468 (package
7469 (name "python-msal")
7470 (version "1.34.0")
7471 (home-page
7472 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
7473 (source
7474 (origin
7475 (method git-fetch)
7476 (uri (git-reference
7477 (url home-page)
7478 (commit version)))
7479 (file-name (git-file-name name version))
7480 (sha256
7481 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
7482 (patches (search-patches "python-msal-requests.patch"))))
7483 (build-system pyproject-build-system)
7484 (arguments
7485 (list
7486 #:test-flags
7487 #~(list
7488 "--ignore=tests/test_benchmark.py"
7489 ;; XXX: Ignoring cryptography version scheme tests.
7490 "-k"
7491 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
7492 ;; XXX: These tests try to access the network.
7493 "--ignore=tests/test_application.py"
7494 "--ignore=tests/test_ccs.py"
7495 ;; XXX: These tests assume they are run on Windows.
7496 "--ignore=tests/test_mi.py")
7497 #:phases
7498 #~(modify-phases %standard-phases
7499 (add-after 'unpack 'set-cryptography-version
7500 (lambda _
7501 (substitute* "tests/test_cryptography.py"
7502 (("^latest_cryptography_version = @version@")
7503 (format #f "latest_cryptography_version = ~s"
7504 #$(package-version
7505 (this-package-input "python-cryptography")))))))
7506 (add-before 'check 'configure-tests
7507 (lambda* (#:key tests? #:allow-other-keys)
7508 (when tests?
7509 (setenv "TRAVIS_TAG" "1")))))))
7510 (native-inputs
7511 (list nss-certs-for-test python-mock python-pytest python-setuptools))
7512 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
7513 (synopsis "Microsoft Authentication Library (MSAL) for Python")
7514 (description
7515 "The Microsoft Authentication Library for Python enables applications to
7516integrate with the Microsoft identity platform. It allows you to sign in
7517users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
7518Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
7519Microsoft Graph or your own APIs registered with the Microsoft identity
7520platform. It is built using industry standard OAuth2 and OpenID Connect
7521protocols.")
7522 (license license:expat)))
7523
7524(define-public oauth2ms
7525 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
7526 (revision "0"))
7527 (package
7528 (name "oauth2ms")
7529 (version (git-version "0.0.0" revision commit))
7530 (source (origin
7531 (method git-fetch)
7532 (uri (git-reference
7533 (url "https://github.com/harishkrupo/oauth2ms")
7534 (commit commit)))
7535 (file-name (git-file-name name version))
7536 (sha256
7537 (base32
7538 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
7539 (build-system copy-build-system)
7540 (arguments
7541 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
7542 ("." #$(string-append "share/doc/" name "-"
7543 version "/")
7544 #:include-regexp ("\\.org$")))
7545 #:phases #~(modify-phases %standard-phases
7546 (add-after 'install 'wrap-pythonpath
7547 (lambda* (#:key inputs outputs #:allow-other-keys)
7548 (let ((path (getenv "GUIX_PYTHONPATH")))
7549 (wrap-program (string-append #$output
7550 "/bin/oauth2ms")
7551 `("GUIX_PYTHONPATH" ":" prefix
7552 (,path)))))))))
7553 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
7554 (home-page "https://github.com/harishkrupo/oauth2ms")
7555 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
7556 (description
7557 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
7558endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
7559used as authentication in IMAP mail servers.")
7560 (license license:asl2.0))))
7561
7562(define-public python-oauthlib
7563 (package
7564 (name "python-oauthlib")
7565 (version "3.3.1")
7566 (source
7567 (origin
7568 (method git-fetch)
7569 (uri (git-reference
7570 (url "https://github.com/oauthlib/oauthlib")
7571 (commit (string-append "v" version))))
7572 (file-name (git-file-name name version))
7573 (sha256
7574 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
7575 (build-system pyproject-build-system)
7576 (native-inputs (list python-pytest python-mock python-setuptools))
7577 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
7578 (home-page "https://github.com/oauthlib/oauthlib")
7579 (synopsis "OAuth implementation for Python")
7580 (description
7581 "Oauthlib is a generic, spec-compliant, thorough implementation of the
7582OAuth request-signing logic.")
7583 (license license:bsd-3)))
7584
7585(define-public python-urllib3
7586 (package
7587 (name "python-urllib3")
7588 (version "2.5.0")
7589 (source
7590 (origin
7591 (method url-fetch)
7592 (uri (pypi-uri "urllib3" version))
7593 (sha256
7594 (base32
7595 "0q17z6zlpyjv9ax5c3d30qwp9fwhz2sc4gbb7yyd86g4qwrpgi1z"))))
7596 (build-system pyproject-build-system)
7597 (arguments `(#:tests? #f))
7598 (native-inputs
7599 (list python-hatch-vcs
7600 python-hatchling
7601 python-setuptools-scm))
7602 (propagated-inputs
7603 (append
7604 ;; These 5 inputs are used to build urrlib3[secure]
7605 (list python-certifi)
7606 (if (member (%current-system)
7607 (package-transitive-supported-systems python-cryptography))
7608 (list python-cryptography)
7609 '())
7610 (list python-idna)
7611 (if (member (%current-system)
7612 (package-transitive-supported-systems python-pyopenssl))
7613 (list python-pyopenssl)
7614 '())
7615 (list python-pysocks)))
7616 (home-page "https://urllib3.readthedocs.io/")
7617 (synopsis "HTTP library with thread-safe connection pooling")
7618 (description
7619 "Urllib3 supports features left out of urllib and urllib2 libraries. It
7620can reuse the same socket connection for multiple requests, it can POST files,
7621supports url redirection and retries, and also gzip and deflate decoding.")
7622 (license license:expat)))
7623
7624(define-public python-urllib3-1.26
7625 (package
7626 (inherit python-urllib3)
7627 (version "1.26.17")
7628 (source
7629 (origin
7630 (method url-fetch)
7631 (uri (pypi-uri "urllib3" version))
7632 (sha256
7633 (base32
7634 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
7635 (native-inputs
7636 (list python-setuptools
7637 python-wheel))))
7638
7639(define-public python-awscrt
7640 (package
7641 (name "python-awscrt")
7642 (version "0.26.1")
7643 (source
7644 (origin
7645 (method url-fetch)
7646 (uri (pypi-uri "awscrt" version))
7647 (sha256
7648 (base32 "0plkc0i0gc6z8fqnyy8kbg43sv3jnv8shcavcz0wb134riykmmm8"))))
7649 (build-system pyproject-build-system)
7650 (arguments
7651 (list
7652 #:test-backend #~'unittest
7653 #:test-flags #~(list "discover" "--verbose")
7654 #:phases
7655 #~(modify-phases %standard-phases
7656 (add-after 'unpack 'disable-broken-tests
7657 (lambda _
7658 ;; Disable broken tests. These tests fail because the
7659 ;; certificate bundle at the default location does not exist.
7660 (substitute* "test/test_auth.py"
7661 (("def test_default_provider")
7662 "def _test_default_provider"))
7663 (substitute* "test/test_http_client.py"
7664 (("def test_h2_client")
7665 "def _test_h2_client"))
7666 (substitute* "test/test_s3.py"
7667 (("def test_sanity")
7668 "def _test_sanity")
7669 (("def test_sanity_secure")
7670 "def _test_sanity_secure")
7671 (("def test_wait_shutdown")
7672 "def _test_wait_shutdown"))))
7673 (add-after 'unpack 'override-cert-bundle-location
7674 (lambda* (#:key inputs #:allow-other-keys)
7675 (let ((bundle (search-input-file inputs
7676 "/etc/ssl/certs/ca-certificates.crt")))
7677 (setenv "SSL_CERT_FILE" bundle)
7678 (substitute* "awscrt/io.py"
7679 (("( +)opt = TlsContextOptions\\(\\)" m indent)
7680 (string-append m "\n"
7681 indent "import os\n"
7682 indent "\
7683opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n")))
7684 (substitute* "test/appexit_http.py"
7685 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
7686 (string-append m indent
7687 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
7688 bundle "')\n")))
7689 (substitute* "test/test_io.py"
7690 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
7691 (string-append m indent
7692 "opt.override_default_trust_store_from_path(None, '"
7693 bundle "')\n"))))))
7694 (add-after 'unpack 'use-system-libraries
7695 (lambda _
7696 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
7697 (inputs (list openssl))
7698 (native-inputs (list cmake-minimal
7699 nss-certs-for-test
7700 python-boto3
7701 python-setuptools
7702 python-websockets))
7703 (home-page "https://github.com/awslabs/aws-crt-python")
7704 (synopsis "Common runtime for AWS Python projects")
7705 (description
7706 "This package provides a common runtime for AWS Python projects.")
7707 (license license:asl2.0)))
7708
7709(define-public awscli
7710 (package
7711 ;; Note: updating awscli typically requires updating botocore as well.
7712 (name "awscli")
7713 (version "1.43.11")
7714 (source
7715 (origin
7716 (method git-fetch)
7717 (uri (git-reference
7718 (url "https://github.com/aws/aws-cli")
7719 (commit version)))
7720 (file-name (git-file-name name version))
7721 (sha256
7722 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
7723 (build-system pyproject-build-system)
7724 (arguments
7725 (list
7726 ;; tests: 2715 passed, 32 warnings
7727 #:test-flags
7728 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7729 ;; Complete test suite is huge and compute hungry, run just unit
7730 ;; tests.
7731 "--ignore=tests/dependencies"
7732 "--ignore=tests/functional"
7733 "--ignore=tests/integration"
7734 ;; TypeError: 'Mock' object is not subscriptable.
7735 "-k" "not test_no_groff_or_mandoc_exists")
7736 #:phases
7737 #~(modify-phases %standard-phases
7738 (add-after 'unpack 'fix-reference-to-groff
7739 (lambda _
7740 ;; XXX: Consider to use wrap-program instead, it tries to parse
7741 ;; the PATH.
7742 (substitute* "awscli/help.py"
7743 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
7744 (("raise ExecutableNotFoundError\\('groff'\\)") "")
7745 (("cmdline = \\['groff'")
7746 (format #f "cmdline = ['~a/bin/groff'"
7747 #$(this-package-input "groff-minimal"))))))
7748 (add-before 'check 'set-environment
7749 (lambda _
7750 ;; PermissionError: [Errno 13] Permission denied:
7751 ;; '/homeless-shelter'
7752 (setenv "HOME" "/tmp"))))))
7753 (native-inputs
7754 (list python-pytest
7755 python-pytest-xdist
7756 python-setuptools
7757 python-wheel))
7758 (inputs
7759 (list groff-minimal
7760 python-botocore
7761 python-colorama
7762 python-docutils-0.19
7763 python-pyyaml
7764 python-rsa-for-awscli-1
7765 python-s3transfer))
7766 (home-page "https://aws.amazon.com/cli/")
7767 (synopsis "Command line client for AWS")
7768 (description
7769 "AWS CLI provides a unified command line interface to the Amazon Web
7770Services (AWS) API.")
7771 (license license:asl2.0)))
7772
7773(define-public awscli-2
7774 (package
7775 (inherit awscli)
7776 ;; Note: updating awscli-2 typically requires updating python-awscrt.
7777 (name "awscli")
7778 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
7779 ;; any fresh one compatible with current state of dependencies in Guix.
7780 (version "2.28.0")
7781 (source
7782 (origin
7783 (method git-fetch)
7784 (uri (git-reference
7785 (url "https://github.com/aws/aws-cli")
7786 (commit version)))
7787 (file-name (git-file-name name version))
7788 (sha256
7789 (base32
7790 "1a1jzvdm434x46yh7ir11lw0nzc64ns4qvxhp5wfra3rh5ykf36j"))))
7791 (build-system pyproject-build-system)
7792 (arguments
7793 (list
7794 ;; When updating and checking locally be very patient as build phase may
7795 ;; hang for 6-8 minutes but eventually passes through.
7796 ;;
7797 ;; tests: 4189 passed, 1 skipped, 2 warnings
7798 #:test-flags
7799 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7800 ;; Full test suite contains more than 70k tests; ignore network
7801 ;; dependent, slow and compute intense tests, keep just unit
7802 ;; tests.
7803 "--ignore=tests/backends"
7804 "--ignore=tests/dependencies"
7805 "--ignore=tests/functional"
7806 "--ignore=tests/integration"
7807 "--ignore=tests/unit/botocore"
7808 ;; Flaky, something to do with PATH disappearing from os.environ?
7809 ;; Passes when run on its own, so maybe something else is
7810 ;; modifying this during the test run.
7811 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
7812 ;; TypeError: 'Mock' object is not subscriptable
7813 "-k" "not test_no_groff_or_mandoc_exists")
7814 #:phases
7815 #~(modify-phases %standard-phases
7816 (add-after 'unpack 'ignore-deprecations
7817 (lambda _
7818 (substitute* "pyproject.toml"
7819 (("\"error::") "\"ignore::"))))
7820 (add-after 'unpack 'fix-reference-to-groff
7821 (lambda* (#:key inputs #:allow-other-keys)
7822 (substitute* "awscli/help.py"
7823 (("if self._exists_on_path\\('groff'\\):") "if True:")
7824 (("cmdline = \\['groff'")
7825 (string-append "cmdline = ['"
7826 (search-input-file inputs "bin/groff")
7827 "'")))))
7828 (add-before 'check 'pre-check
7829 (lambda _ (setenv "HOME" "/tmp"))))))
7830 (inputs
7831 (list groff
7832 ;; less
7833 nss-certs-for-test
7834 python-awscrt
7835 python-colorama
7836 python-dateutil
7837 python-distro
7838 python-docutils
7839 python-jmespath
7840 python-prompt-toolkit
7841 python-ruamel.yaml
7842 python-ruamel.yaml.clib
7843 python-urllib3))
7844 (native-inputs
7845 (list python-flit-core
7846 python-pytest
7847 python-pytest-xdist))))
7848
7849(define-public python-wsgiproxy2
7850 (package
7851 (name "python-wsgiproxy2")
7852 (version "0.5.1")
7853 (source
7854 (origin
7855 (method git-fetch)
7856 (uri (git-reference
7857 (url "https://github.com/gawel/WSGIProxy2/")
7858 (commit version)))
7859 (file-name (git-file-name name version))
7860 (sha256
7861 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
7862 (build-system pyproject-build-system)
7863 (arguments (list #:test-backend #~'unittest))
7864 (native-inputs (list python-webtest python-setuptools))
7865 (propagated-inputs (list python-requests python-six python-urllib3
7866 python-webob))
7867 (home-page "https://github.com/gawel/WSGIProxy2/")
7868 (synopsis "WSGI Proxy with various http client backends")
7869 (description
7870 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
7871function calls into HTTP requests. It also includes code to sign requests and
7872pass private data, and to spawn subprocesses to handle requests.")
7873 (license license:expat)))
7874
7875(define-public python-pastedeploy
7876 (package
7877 (name "python-pastedeploy")
7878 (version "3.1.0")
7879 (source
7880 (origin
7881 (method url-fetch)
7882 (uri (pypi-uri "PasteDeploy" version))
7883 (sha256
7884 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
7885 (build-system pyproject-build-system)
7886 (native-inputs (list python-pytest python-setuptools))
7887 (home-page "https://pylonsproject.org/")
7888 (synopsis "Load, configure, and compose WSGI applications and servers")
7889 (description
7890 "This tool provides code to load WSGI applications and servers from URIs;
7891these URIs can refer to Python Eggs for INI-style configuration files. Paste
7892Script provides commands to serve applications based on this configuration
7893file.")
7894 (license license:expat)))
7895
7896(define-public python-webtest
7897 (package
7898 (name "python-webtest")
7899 (version "3.0.6")
7900 (source
7901 (origin
7902 (method url-fetch)
7903 (uri (pypi-uri "webtest" version))
7904 (sha256
7905 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
7906 (build-system pyproject-build-system)
7907 (arguments
7908 ;; Tests require python-pyquery, which creates a circular dependency.
7909 `(#:tests? #f))
7910 (native-inputs
7911 (list python-setuptools))
7912 (propagated-inputs
7913 (list python-beautifulsoup4
7914 python-waitress
7915 python-webob))
7916 (home-page "https://docs.pylonsproject.org/projects/webtest/")
7917 (synopsis "Helper to test WSGI applications")
7918 (description
7919 "Webtest allows you to test your Python web applications without
7920starting an HTTP server. It supports anything that supports the minimum of
7921WSGI.")
7922 (license license:expat)))
7923
7924(define-public python-flask
7925 (package
7926 (name "python-flask")
7927 (version "3.1.0")
7928 (source
7929 (origin
7930 (method url-fetch)
7931 (uri (pypi-uri "flask" version))
7932 (sha256
7933 (base32 "1b1nb250jxrjplbs21wnwq69250vs3iz2pdhs7cwi5y8hi8kr1sz"))))
7934 (build-system pyproject-build-system)
7935 (native-inputs
7936 (list python-flit-core
7937 python-pytest))
7938 (propagated-inputs
7939 (list python-asgiref ;async extra
7940 python-click
7941 python-blinker
7942 python-itsdangerous
7943 python-jinja2
7944 python-werkzeug))
7945 (home-page "https://palletsprojects.com/p/flask/")
7946 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
7947 (description "Flask is a micro web framework based on the Werkzeug toolkit
7948and Jinja2 template engine. It is called a micro framework because it does not
7949presume or force a developer to use a particular tool or library.")
7950 (license license:bsd-3)))
7951
7952(define-public python-flask-compress
7953 (package
7954 (name "python-flask-compress")
7955 (version "1.18")
7956 (source (origin
7957 (method url-fetch)
7958 (uri (pypi-uri "flask_compress" version))
7959 (sha256
7960 (base32
7961 "0fj1r0ixsjls7z3a2zzamxppjz4qcf8q4jcmn74gsk9kisyy3fpx"))))
7962 (build-system pyproject-build-system)
7963 (native-inputs
7964 (list python-flask-caching
7965 python-pytest
7966 python-setuptools
7967 python-setuptools-scm))
7968 (propagated-inputs
7969 (list python-brotli
7970 python-flask
7971 python-pyzstd))
7972 (home-page "https://github.com/colour-science/flask-compress")
7973 (synopsis "Compress responses in a Flask app")
7974 (description
7975 "This package lets you compress Flask application responses and static
7976files with gzip, deflate or brotli. Flask-Compress both adds the various
7977headers required for a compressed response and compresses the response data.")
7978 (license license:expat)))
7979
7980(define-public python-flask-seasurf
7981 (package
7982 (name "python-flask-seasurf")
7983 (version "2.0.0")
7984 (source (origin
7985 (method url-fetch)
7986 (uri (pypi-uri "Flask-SeaSurf" version))
7987 (sha256
7988 (base32
7989 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
7990 (build-system pyproject-build-system)
7991 (arguments
7992 (list #:tests? #false)) ;there are none
7993 (propagated-inputs (list python-flask))
7994 (native-inputs (list python-setuptools python-wheel))
7995 (home-page "https://github.com/maxcountryman/flask-seasurf/")
7996 (synopsis "CSRF extension for Flask")
7997 (description "SeaSurf is a Flask extension for preventing cross-site
7998request forgery (CSRF). CSRF attacks are problematic because the mechanism
7999they use is relatively easy to exploit. This extension attempts to aid you in
8000securing your application from such attacks. This extension is based on the
8001Django middleware.")
8002 (license license:bsd-3)))
8003
8004(define-public python-flask-wtf
8005 (package
8006 (name "python-flask-wtf")
8007 (version "1.2.2")
8008 (source
8009 (origin
8010 (method url-fetch)
8011 (uri (pypi-uri "Flask-WTF" version))
8012 (sha256
8013 (base32
8014 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
8015 (build-system pyproject-build-system)
8016 (propagated-inputs
8017 (list python-flask python-flask python-itsdangerous python-wtforms))
8018 (native-inputs
8019 (list python-hatchling python-pytest))
8020 (home-page "https://github.com/lepture/flask-wtf")
8021 (synopsis "Simple integration of Flask and WTForms")
8022 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
8023upload, and reCAPTCHA.")
8024 (license license:bsd-3)))
8025
8026(define-public python-flask-multistatic
8027 (package
8028 (name "python-flask-multistatic")
8029 (version "1.0")
8030 (source
8031 (origin
8032 (method url-fetch)
8033 (uri (pypi-uri "flask-multistatic" version))
8034 (sha256
8035 (base32
8036 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
8037 (build-system pyproject-build-system)
8038 (arguments (list #:tests? #f)) ; No tests upstream.
8039 (native-inputs (list python-setuptools))
8040 (propagated-inputs (list python-flask))
8041 (home-page "https://pagure.io/flask-multistatic")
8042 (synopsis "Flask plugin to allow overriding static files")
8043 (description "@code{flask-multistatic} is a flask plugin that adds support
8044for overriding static files.")
8045 (license license:gpl3+)))
8046
8047(define-public python-responses
8048 (package
8049 (name "python-responses")
8050 (version "0.25.3")
8051 (source (origin
8052 (method url-fetch)
8053 (uri (pypi-uri "responses" version))
8054 (sha256
8055 (base32
8056 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
8057 (build-system pyproject-build-system)
8058 (native-inputs
8059 (list python-pytest
8060 python-pytest-asyncio
8061 python-pytest-httpserver
8062 python-setuptools
8063 python-tomli
8064 python-tomli-w
8065 python-wheel))
8066 (propagated-inputs
8067 (list python-requests
8068 python-pyyaml
8069 python-urllib3))
8070 (home-page "https://github.com/getsentry/responses")
8071 (synopsis "Utility for mocking out the `requests` Python library")
8072 (description "A utility library for mocking out the `requests` Python
8073library.")
8074 (license license:asl2.0)))
8075
8076(define-public python-grequests
8077 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
8078 (revision "0"))
8079 (package
8080 (name "python-grequests")
8081 (version (git-version "0.7.0" revision commit))
8082 (source
8083 (origin
8084 (method git-fetch)
8085 (uri (git-reference
8086 (url "https://github.com/kennethreitz/grequests")
8087 (commit commit)))
8088 (file-name (git-file-name name version))
8089 (sha256
8090 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
8091 (build-system pyproject-build-system)
8092 (arguments
8093 (list
8094 ;; XXX: Most failing tests seem to be caused by network access,
8095 ;; but there is no easy/flag way to disable tests selectively.
8096 #:tests? #f
8097 #:test-backend #~'unittest
8098 #:test-flags #~(list "tests.py")))
8099 (propagated-inputs (list python-gevent python-requests))
8100 (native-inputs (list python-setuptools))
8101 (home-page "https://github.com/kennethreitz/grequests")
8102 (synopsis "Python library for asynchronous HTTP requests")
8103 (description
8104 "GRequests is a Python library that allows you to use @code{Requests}
8105with @code{Gevent} to make asynchronous HTTP Requests easily.")
8106 (license license:bsd-2))))
8107
8108(define-public python-gwebsockets
8109 (package
8110 (name "python-gwebsockets")
8111 (version "0.7")
8112 (source
8113 (origin
8114 (method git-fetch)
8115 (uri (git-reference
8116 (url "https://github.com/sugarlabs/gwebsockets")
8117 (commit (string-append "v" version))))
8118 (file-name (git-file-name name version))
8119 (sha256
8120 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
8121 (build-system pyproject-build-system)
8122 (arguments (list #:tests? #f)) ; No tests upstream.
8123 (native-inputs (list python-setuptools))
8124 (propagated-inputs (list python-pygobject))
8125 (home-page "https://github.com/sugarlabs/gwebsockets")
8126 (synopsis "GLib based websockets server")
8127 (description
8128 "This package provides a websocket server written in Python. It uses GIO
8129for network communication and hence it easily integrates with the GLib
8130mainloop.")
8131 (license license:asl2.0)))
8132
8133(define-public python-dpkt
8134 (package
8135 (name "python-dpkt")
8136 (version "1.9.8")
8137 (source
8138 (origin
8139 (method git-fetch)
8140 (uri (git-reference
8141 (url "https://github.com/kbandla/dpkt")
8142 (commit (string-append "v" version))))
8143 (file-name (git-file-name name version))
8144 (sha256
8145 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
8146 (build-system pyproject-build-system)
8147 (arguments
8148 (list
8149 #:test-flags
8150 #~(list "--pyargs" "dpkt")))
8151 (native-inputs (list python-pytest python-setuptools))
8152 (home-page "https://github.com/kbandla/dpkt")
8153 (synopsis "Packet generator and parser for TCP/IP protocols")
8154 (description
8155 "The dpkt module is a fast, simple packet generator and parser for the
8156basic TCP/IP protocols.")
8157 (license license:bsd-3)))
8158
8159(define-public python-geventhttpclient
8160 (package
8161 (name "python-geventhttpclient")
8162 (version "2.3.9")
8163 (source (origin
8164 (method git-fetch)
8165 (uri (git-reference
8166 (url "https://github.com/geventhttpclient/geventhttpclient")
8167 (commit version)
8168 (recursive? #true)))
8169 (file-name (git-file-name name version))
8170 (sha256
8171 (base32
8172 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
8173 (build-system pyproject-build-system)
8174 (arguments
8175 (list
8176 #:test-flags
8177 ;; Disable network tests.
8178 '(list "-k"
8179 (string-append "not test_client_simple"
8180 " and not test_client_ssl"
8181 " and not test_client_with_default_headers"
8182 " and not test_client_without_leading_slash"
8183 " and not test_download"
8184 " and not test_fail_invalid_ca_certificate"
8185 " and not test_httpbin_multipart"
8186 " and not test_multi_queries_greenlet_safe"
8187 " and not test_no_form_encode_header"
8188 " and not test_no_form_encoded_header"
8189 " and not test_request_with_headers"
8190 " and not test_response_context_manager"
8191 " and not test_urllib_request"))))
8192 (native-inputs (list nss-certs-for-test
8193 python-dpkt python-pytest python-requests
8194 python-setuptools python-wheel))
8195 (propagated-inputs (list python-brotli python-certifi python-gevent
8196 python-urllib3))
8197 (home-page "https://github.com/geventhttpclient/geventhttpclient")
8198 (synopsis "HTTP client library for gevent")
8199 (description "@code{python-geventhttpclient} is a high performance,
8200concurrent HTTP client library for python using @code{gevent}.")
8201 (license license:expat)))
8202
8203(define-public python-gevent-websocket
8204 (package
8205 (name "python-gevent-websocket")
8206 (version "0.10.1")
8207 (source
8208 (origin
8209 (method url-fetch)
8210 (uri (pypi-uri "gevent-websocket" version))
8211 (sha256
8212 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
8213 (build-system pyproject-build-system)
8214 (arguments
8215 (list #:tests? #f)) ; no tests in PyPI or git
8216 (native-inputs
8217 (list python-setuptools
8218 python-wheel))
8219 (propagated-inputs
8220 (list python-gevent))
8221 (home-page "https://gitlab.com/noppo/gevent-websocket")
8222 (synopsis "Websocket handler for the gevent pywsgi server")
8223 (description
8224 "Websocket handler for the gevent pywsgi server, a Python network
8225library.
8226
8227Features include:
8228@itemize
8229@item integration on both socket level or using an abstract interface
8230@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
8231Protocol, WAMP}
8232@item easily extendible using a simple WebSocket protocol plugin API
8233@end itemize")
8234 (license license:asl2.0)))
8235
8236(define-public python-requests-oauthlib
8237 (package
8238 (name "python-requests-oauthlib")
8239 (version "2.0.0")
8240 (source
8241 (origin
8242 (method git-fetch)
8243 (uri (git-reference (url
8244 "https://github.com/requests/requests-oauthlib")
8245 (commit (string-append "v" version))))
8246 (file-name (git-file-name name version))
8247 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
8248 (build-system pyproject-build-system)
8249 (arguments
8250 (list
8251 #:test-flags
8252 #~(list
8253 "--ignore=tests/test_core.py" ; requires network access.
8254 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
8255 "-k" "not test_fetch_access_token"))) ; flaky tests.
8256 (native-inputs
8257 (list python-requests-mock python-pytest python-setuptools))
8258 (propagated-inputs
8259 (list python-oauthlib python-requests))
8260 (home-page "https://github.com/requests/requests-oauthlib")
8261 (synopsis "OAuthlib authentication support for Requests")
8262 (description
8263 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
8264provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
8265 (license license:isc)))
8266
8267(define-public python-cachecontrol
8268 (package
8269 (name "python-cachecontrol")
8270 (version "0.14.1")
8271 (source
8272 (origin
8273 (method git-fetch)
8274 (uri (git-reference
8275 (url "https://github.com/ionrock/cachecontrol")
8276 (commit (string-append "v" version))))
8277 (file-name (git-file-name name version))
8278 (sha256
8279 (base32
8280 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
8281 (build-system pyproject-build-system)
8282 (propagated-inputs
8283 (list python-filelock python-msgpack python-requests))
8284 (native-inputs
8285 (list python-cherrypy python-flit-core python-pytest))
8286 (home-page "https://github.com/ionrock/cachecontrol")
8287 (synopsis "The httplib2 caching algorithms for use with requests")
8288 (description "CacheControl is a port of the caching algorithms in
8289@code{httplib2} for use with @code{requests} session objects.")
8290 (license license:asl2.0)))
8291
8292(define-public python-betamax
8293 (package
8294 (name "python-betamax")
8295 (version "0.9.0")
8296 (source
8297 (origin
8298 (method url-fetch)
8299 (uri (pypi-uri "betamax" version))
8300 (sha256
8301 (base32
8302 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
8303 (build-system pyproject-build-system)
8304 (arguments
8305 (list
8306 #:test-flags
8307 #~(list "-k" (string-join
8308 ;; Tests require network access to http://httpbin.org/get.
8309 (list "not test_creates_new_cassettes"
8310 "test_placeholders_work"
8311 "test_post_start_hook"
8312 "test_pre_stop_hook"
8313 "test_preplayback_hook"
8314 "test_prerecord_hook"
8315 "test_prerecord_ignoring_hook"
8316 "test_records_new_events_with_existing_cassette"
8317 "test_records_new_interaction"
8318 "test_records_new_interactions"
8319 "test_replaces_old_interactions"
8320 "test_replays_response_from_cassette"
8321 "test_requests_with_json_body"
8322 "test_saves_content_as_gzip"
8323 "test_unicode_is_saved_properly")
8324 " and not "))))
8325 (native-inputs
8326 (list nss-certs-for-test
8327 python-pytest
8328 python-setuptools))
8329 (propagated-inputs
8330 (list python-requests))
8331 (home-page "https://github.com/sigmavirus24/betamax")
8332 (synopsis "Record HTTP interactions with python-requests")
8333 (description
8334 "Betamax will record your test suite's HTTP interactions and replay them
8335during future tests. It is designed to work with python-requests.")
8336 (license license:expat)))
8337
8338(define-public python-betamax-matchers
8339 (package
8340 (name "python-betamax-matchers")
8341 (version "0.4.0")
8342 (source
8343 (origin
8344 (method git-fetch)
8345 (uri (git-reference
8346 (url "https://github.com/sigmavirus24/betamax_matchers")
8347 (commit version)))
8348 (file-name (git-file-name name version))
8349 (sha256
8350 (base32 "0lyg3r91hwfvavyi5k6sddcla37igigycfv1mx40c32byqwl6pq5"))))
8351 (build-system pyproject-build-system)
8352 (native-inputs (list python-pytest python-setuptools))
8353 (propagated-inputs (list python-betamax python-requests-toolbelt))
8354 (home-page "https://github.com/sigmavirus24/betamax_matchers")
8355 (synopsis "VCR imitation for python-requests")
8356 (description "@code{betamax-matchers} provides a set of Matchers for
8357Betamax.")
8358 (license license:asl2.0)))
8359
8360(define-public python-betamax-serializers
8361 (package
8362 (name "python-betamax-serializers")
8363 (version "0.2.1")
8364 (source
8365 (origin
8366 (method git-fetch)
8367 (uri (git-reference
8368 (url "https://gitlab.com/betamax/serializers")
8369 (commit version)))
8370 (file-name (git-file-name name version))
8371 (sha256
8372 (base32 "1p2l5w3vwvjacs2ndahgcjq55qb53i37p8mz1zh85pjxyszdyw2l"))))
8373 (build-system pyproject-build-system)
8374 (arguments (list #:tests? #f)) ; No tests.
8375 (native-inputs (list python-setuptools))
8376 (propagated-inputs (list python-betamax python-pyyaml))
8377 (synopsis "Set of third-party serializers for Betamax")
8378 (description
8379 "Betamax-Serializers are an experimental set of Serializers for Betamax
8380that may possibly end up in the main package.")
8381 (home-page "https://gitlab.com/betamax/serializers")
8382 (license license:asl2.0)))
8383
8384(define-public python-s3fs
8385 (package
8386 (name "python-s3fs")
8387 (version "2026.1.0")
8388 (source
8389 (origin
8390 (method url-fetch)
8391 (uri (pypi-uri "s3fs" version))
8392 (sha256
8393 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
8394 (build-system pyproject-build-system)
8395 ;; TODO: Many tests fail with "No such file or directory" raised by the
8396 ;; HTTP client.
8397 (arguments (list #:tests? #false))
8398 (native-inputs
8399 (list python-setuptools))
8400 (propagated-inputs
8401 (list python-aiobotocore
8402 python-aiohttp
8403 python-fsspec))
8404 (home-page "https://github.com/fsspec/s3fs/")
8405 (synopsis "Convenient filesystem interface over S3")
8406 (description "This package provides a convenient filesystem interface over
8407S3.")
8408 (license license:bsd-3)))
8409
8410(define-public python-s3transfer
8411 (package
8412 (name "python-s3transfer")
8413 (version "0.16.0")
8414 (source
8415 (origin
8416 (method url-fetch)
8417 (uri (pypi-uri "s3transfer" version))
8418 (sha256
8419 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
8420 (build-system pyproject-build-system)
8421 (arguments
8422 (list
8423 ;; tests: 630 passed, 51 skipped
8424 #:test-flags
8425 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8426 ;; Tests require networking.
8427 "--ignore" "tests/integration")))
8428 (native-inputs
8429 (list python-pytest
8430 python-pytest-xdist
8431 python-setuptools))
8432 (propagated-inputs
8433 (list python-botocore))
8434 (home-page "https://github.com/boto/s3transfer")
8435 (synopsis "Amazon S3 Transfer Manager")
8436 (description
8437 "S3transfer is a Python library for managing Amazon S3 transfers.")
8438 (license license:asl2.0)))
8439
8440(define-public python-flask-restful
8441 (package
8442 (name "python-flask-restful")
8443 (version "0.3.10")
8444 (source
8445 (origin
8446 (method url-fetch)
8447 (uri (pypi-uri "Flask-RESTful" version))
8448 (sha256
8449 (base32
8450 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
8451 (build-system pyproject-build-system)
8452 (arguments
8453 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
8454 (list #:tests? #f))
8455 (propagated-inputs
8456 (list python-aniso8601 python-flask python-pytz))
8457 (native-inputs
8458 (list python-blinker
8459 python-mock
8460 python-pytest
8461 python-setuptools
8462 python-wheel))
8463 (home-page "https://github.com/flask-restful/flask-restful/")
8464 (synopsis "Flask module for creating REST APIs")
8465 (description
8466 "This package contains a Flask module for creating REST APIs.")
8467 (license license:bsd-3)))
8468
8469(define-public python-flask-sqlalchemy
8470 (package
8471 (name "python-flask-sqlalchemy")
8472 ;; Released version fails tests in Python 3.12.
8473 (properties '((commit . "168cb4b7b50fe5176307a10d873781bfafc6eeda")
8474 (revision . "0")))
8475 (version (git-version "3.1.1"
8476 (assoc-ref properties 'revision)
8477 (assoc-ref properties 'commit)))
8478 (source
8479 (origin
8480 (method git-fetch)
8481 (uri (git-reference
8482 (url "https://github.com/pallets-eco/flask-sqlalchemy")
8483 (commit (assoc-ref properties 'commit))))
8484 (file-name (git-file-name name version))
8485 (sha256
8486 (base32
8487 "0xw8v1540m21x9crpgb0i3rxyhh1d24ldg354vndw9cif74ls5p6"))))
8488 (build-system pyproject-build-system)
8489 (arguments
8490 (list
8491 #:test-flags
8492 #~(list "-k" (string-append "not test_explicit_table[db2]"
8493 " and not test_explicit_table[db4]")
8494 "-W" "ignore::DeprecationWarning")))
8495 (native-inputs
8496 (list python-flit-core
8497 python-pytest))
8498 (propagated-inputs
8499 (list python-flask
8500 python-sqlalchemy-2))
8501 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
8502 (synopsis "Module adding SQLAlchemy support to your Flask application")
8503 (description
8504 "This package adds SQLAlchemy support to your Flask application.")
8505 (license license:bsd-3)))
8506
8507(define-public python-flask-restful-swagger
8508 (package
8509 (name "python-flask-restful-swagger")
8510 (version "0.20.1")
8511 ;; XXX: Unbundle minified javascript.
8512 (source
8513 (origin
8514 (method git-fetch)
8515 (uri (git-reference
8516 (url "https://github.com/rantav/flask-restful-swagger")
8517 (commit version)))
8518 (file-name (git-file-name name version))
8519 (sha256
8520 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
8521 (build-system pyproject-build-system)
8522 (arguments (list #:tests? #f)) ; No tests.
8523 (native-inputs (list python-setuptools))
8524 (propagated-inputs (list python-flask-restful python-six))
8525 (home-page "https://github.com/rantav/flask-restful-swagger")
8526 (synopsis "Extract Swagger specs from Flask-Restful projects")
8527 (description "This package lets you extract Swagger API documentation
8528specs from your Flask-Restful projects.")
8529 (license license:expat)))
8530
8531(define-public python-htmlmin
8532 (package
8533 (name "python-htmlmin")
8534 (version "0.1.12")
8535 (source
8536 (origin
8537 (method url-fetch)
8538 (uri (pypi-uri "htmlmin" version))
8539 (sha256
8540 (base32
8541 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
8542 (build-system pyproject-build-system)
8543 (arguments
8544 (list #:tests? #f)) ; no tests
8545 (native-inputs (list python-setuptools))
8546 (home-page "https://htmlmin.readthedocs.org/en/latest/")
8547 (synopsis "HTML minifier")
8548 (description "@code{htmlmin} is an HTML minifier that just works.
8549It comes with safe defaults and easily configurable options.")
8550 (license license:bsd-3)))
8551
8552;; XXX: Forked renamed and updated version.
8553(define-public python-htmlmin2
8554 (package/inherit python-htmlmin
8555 (name "python-htmlmin2")
8556 (version "0.1.13")
8557 (source
8558 (origin
8559 (method git-fetch)
8560 (uri (git-reference
8561 (url "https://github.com/wilhelmer/htmlmin")
8562 (commit (string-append "v" version))))
8563 (file-name (git-file-name name version))
8564 (sha256
8565 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
8566 (build-system pyproject-build-system)
8567 (arguments (list #:test-backend #~'unittest))
8568 (native-inputs (list python-setuptools))
8569 (home-page "https://github.com/wilhelmer/htmlmin")
8570 (description
8571 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
8572defaults and easily configurable options. This variant is an updated fork of
8573the original @code{python-htmlmin}.")
8574 (license license:bsd-3)))
8575
8576(define-public python-flask-htmlmin
8577 (package
8578 (name "python-flask-htmlmin")
8579 (version "3.0.0")
8580 (source
8581 (origin
8582 (method git-fetch)
8583 (uri (git-reference
8584 (url "https://github.com/hamidfzm/Flask-HTMLmin")
8585 (commit (string-append "v" version))))
8586 (file-name (git-file-name name version))
8587 (sha256
8588 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
8589 (build-system pyproject-build-system)
8590 (native-inputs (list python-pytest python-setuptools))
8591 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
8592 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
8593 (synopsis "HTML response minifier for Flask")
8594 (description
8595 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
8596 (license license:bsd-3)))
8597
8598(define-public python-jsmin
8599 (package
8600 (name "python-jsmin")
8601 (version "3.0.1")
8602 (source
8603 (origin
8604 (method url-fetch)
8605 (uri (pypi-uri "jsmin" version))
8606 (sha256
8607 (base32
8608 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
8609 (build-system pyproject-build-system)
8610 (arguments (list #:test-backend #~'unittest))
8611 (native-inputs
8612 (list python-setuptools))
8613 (home-page "https://github.com/tikitu/jsmin/")
8614 (synopsis "Python JavaScript minifier")
8615 (description
8616 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
8617on the command line.")
8618 (license license:expat)))
8619
8620(define-public python-flask-login
8621 (let ((commit "c8bba84b9ba6768e878317fc46c54bd13fa1ac07")
8622 (revision "0"))
8623 (package
8624 (name "python-flask-login")
8625 (version (git-version "0.6.3" revision commit))
8626 (source
8627 (origin
8628 (method git-fetch)
8629 (uri (git-reference
8630 (url "https://github.com/maxcountryman/flask-login")
8631 (commit commit)))
8632 (file-name (git-file-name name version))
8633 (sha256
8634 (base32 "0q0ga1zwm06kvpnsf50ckmsc77959i1spx7z2y3jkbwaa4klsyli"))))
8635 (build-system pyproject-build-system)
8636 (propagated-inputs
8637 (list python-flask))
8638 (native-inputs
8639 ;; For tests.
8640 (list python-blinker
8641 python-flit-core
8642 python-mock
8643 python-pytest
8644 python-semantic-version
8645 python-werkzeug))
8646 (home-page "https://github.com/maxcountryman/flask-login")
8647 (synopsis "User session management for Flask")
8648 (description
8649 "@code{Flask-Login} provides user session management for Flask. It
8650handles the common tasks of logging in, logging out, and remembering your
8651users' sessions over extended periods of time.")
8652 (license license:expat))))
8653
8654(define-public python-oauth2client
8655 (package
8656 (name "python-oauth2client")
8657 (version "4.1.3")
8658 (source
8659 (origin
8660 (method git-fetch)
8661 (uri (git-reference
8662 (url "https://github.com/google/oauth2client/")
8663 (commit (string-append "v" version))))
8664 (file-name (git-file-name name version))
8665 (sha256
8666 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
8667 (build-system pyproject-build-system)
8668 (arguments
8669 (list #:tests? #f))
8670 (native-inputs
8671 (list python-setuptools))
8672 (propagated-inputs
8673 (list python-httplib2
8674 python-pyasn1
8675 python-pyasn1-modules
8676 python-pyparsing
8677 python-rsa
8678 python-six))
8679 (home-page "https://github.com/google/oauth2client/")
8680 (synopsis "OAuth 2.0 client library")
8681 (description "@code{python-oauth2client} provides an OAuth 2.0 client
8682library for Python")
8683 (license license:asl2.0)))
8684
8685(define-public python-authlib
8686 (package
8687 (name "python-authlib")
8688 (version "1.5.1")
8689 (source
8690 (origin
8691 (method url-fetch)
8692 (uri (pypi-uri "authlib" version))
8693 (sha256
8694 (base32 "0blpvz2v2r8yvsgm1yr3n61mhwxvh1b0kyf2rp0i4wv6n3n8bg2w"))))
8695 (build-system pyproject-build-system)
8696 ;; No tests target.
8697 (arguments (list #:tests? #false))
8698 (propagated-inputs
8699 (list python-cryptography
8700 python-django
8701 python-flask
8702 python-httpx
8703 python-requests
8704 python-sqlalchemy-2
8705 python-starlette
8706 python-werkzeug))
8707 (native-inputs (list python-pytest python-setuptools python-wheel))
8708 (home-page "https://pypi.org/project/Authlib/1")
8709 (synopsis "Build OAuth and OpenID Connect servers and clients")
8710 (description
8711 "This is a Python library for building OAuth and OpenID Connect servers
8712and clients.")
8713 (license license:bsd-3)))
8714
8715(define-public python-flask-oidc
8716 (package
8717 (name "python-flask-oidc")
8718 (version "2.3.1")
8719 (source
8720 (origin
8721 (method url-fetch)
8722 (uri (pypi-uri "flask_oidc" version))
8723 (sha256
8724 (base32
8725 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
8726 (build-system pyproject-build-system)
8727 (propagated-inputs
8728 (list python-authlib
8729 python-blinker
8730 python-flask
8731 python-requests
8732 python-responses))
8733 (native-inputs
8734 (list python-pytest python-poetry-core))
8735 (home-page "https://github.com/puiterwijk/flask-oidc")
8736 (synopsis "OpenID Connect extension for Flask")
8737 (description "@code{python-flask-oidc} provides an OpenID Connect extension
8738for Flask.")
8739 (license license:bsd-2)))
8740
8741(define-public python-webassets
8742 (package
8743 (name "python-webassets")
8744 (version "3.0.0")
8745 (source
8746 (origin
8747 (method git-fetch)
8748 (uri (git-reference
8749 (url "https://github.com/miracle2k/webassets")
8750 (commit version)))
8751 (file-name (git-file-name name version))
8752 (sha256
8753 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
8754 (build-system pyproject-build-system)
8755 (propagated-inputs (list python-pyyaml python-zope-dottedname))
8756 (native-inputs (list python-hatchling python-pytest))
8757 (home-page "https://github.com/miracle2k/webassets")
8758 (synopsis "Media asset management")
8759 (description
8760 "This package provides utilities to merge, minify and compress Javascript
8761and CSS files,supporting a variety of different filters, including YUI, jsmin,
8762jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
8763 (license license:bsd-2)))
8764
8765(define-public python-cssmin
8766 (package
8767 (name "python-cssmin")
8768 (version "0.2.0")
8769 (source
8770 (origin
8771 (method git-fetch)
8772 (uri (git-reference
8773 (url "https://github.com/zacharyvoase/cssmin")
8774 (commit (string-append "v" version))))
8775 (file-name (git-file-name name version))
8776 (sha256
8777 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
8778 (build-system pyproject-build-system)
8779 (arguments (list #:tests? #f)) ; No tests.
8780 (native-inputs (list python-setuptools))
8781 (home-page "https://github.com/zacharyvoase/cssmin")
8782 (synopsis "Python port of the YUI CSS Compressor")
8783 (description "Python port of the YUI CSS Compressor.")
8784 (license (list license:expat license:bsd-3))))
8785
8786(define-public python-elastic-transport
8787 (package
8788 (name "python-elastic-transport")
8789 (version "9.1.0")
8790 (source
8791 (origin
8792 (method url-fetch)
8793 (uri (pypi-uri "elastic_transport" version))
8794 (sha256
8795 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
8796 (build-system pyproject-build-system)
8797 (arguments
8798 (list
8799 #:test-flags
8800 ;; Deselect failing tests (mostly due to network not reachable)
8801 #~(list "-k"
8802 (string-append
8803 "not .badssl.com"
8804 " and not test_assert_fingerprint_in_cert_chain_failure"))))
8805 (propagated-inputs (list python-certifi python-urllib3))
8806 (native-inputs (list nss-certs-for-test
8807 python-aiohttp
8808 ;; python-furo
8809 python-httpx
8810 python-opentelemetry-api
8811 python-opentelemetry-sdk
8812 python-orjson
8813 python-pytest
8814 python-pytest-asyncio-0.26
8815 ;; python-pytest-cov
8816 python-pytest-httpbin
8817 python-pytest-httpserver
8818 python-pytest-mock
8819 python-requests
8820 python-respx ;test
8821 python-setuptools
8822 ;; python-sphinx
8823 ;; python-sphinx-autodoc-typehints
8824 python-trustme
8825 python-wheel))
8826 (home-page "https://github.com/elastic/elastic-transport-python")
8827 (synopsis "Common library for Python Elastic client libraries")
8828 (description
8829 "This library was lifted from @code{elasticsearch-py} and then transformed to
8830be used across all Elastic services rather than only Elasticsearch. It
8831provides transport classes and utilities shared among Python Elastic client
8832libraries.")
8833 ;; Apache-2.0 in setup.py and LICENSE file.
8834 (license license:asl2.0)))
8835
8836(define-public python-elasticsearch
8837 (package
8838 (name "python-elasticsearch")
8839 (version "9.1.1")
8840 (source
8841 (origin
8842 (method git-fetch) ; no tests in PyPI release
8843 (uri (git-reference
8844 (url "https://github.com/elastic/elasticsearch-py")
8845 (commit (string-append "v" version))))
8846 (file-name (git-file-name name version))
8847 (sha256
8848 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
8849 (build-system pyproject-build-system)
8850 (native-inputs
8851 (list nss-certs-for-test
8852 python-aiohttp
8853 python-dateutil
8854 python-mock
8855 python-orjson
8856 python-pytest
8857 python-pytest-asyncio
8858 python-pytz
8859 python-pyyaml
8860 python-requests
8861 python-hatchling))
8862 (propagated-inputs
8863 (list python-certifi
8864 python-elastic-transport))
8865 (home-page "https://github.com/elastic/elasticsearch-py")
8866 (synopsis "Low-level client for Elasticsearch")
8867 (description "Official low-level client for Elasticsearch. Its goal is to
8868provide common ground for all Elasticsearch-related code in Python; because of
8869this it tries to be opinion-free and very extendable.")
8870 ;; Apache-2.0 in setup.py and LICENSE file.
8871 (license license:asl2.0)))
8872
8873(define-public python-engineio
8874 (package
8875 (name "python-engineio")
8876 (version "4.12.2")
8877 (source
8878 (origin
8879 (method url-fetch)
8880 (uri (pypi-uri "python_engineio" version))
8881 (sha256
8882 (base32
8883 "1ynyf3n29biwkm6nwzzwzhr4m19lsir1x5azxq2nl7xyw7zi5rz7"))))
8884 (build-system pyproject-build-system)
8885 (arguments
8886 (list
8887 #:test-flags
8888 #~(list "-k"
8889 "not test_static_file_routing and not test_static_files")))
8890 (native-inputs
8891 (list python-pytest
8892 python-pytest-asyncio
8893 python-setuptools
8894 python-tornado))
8895 (propagated-inputs
8896 (list python-aiohttp
8897 python-requests
8898 python-simple-websocket
8899 python-websocket-client))
8900 (home-page "https://github.com/miguelgrinberg/python-engineio/")
8901 (synopsis "Engine.IO server")
8902 (description "This package provides a Python implementation of the
8903@code{Engine.IO} realtime client and server.")
8904 (license license:expat)))
8905
8906(define-public python-ephemeral-port-reserve
8907 (package
8908 (name "python-ephemeral-port-reserve")
8909 (version "1.1.4")
8910 (source
8911 (origin
8912 (method git-fetch) ;no tests in PyPI archive
8913 (uri (git-reference
8914 (url "https://github.com/Yelp/ephemeral-port-reserve")
8915 (commit (string-append "v" version))))
8916 (file-name (git-file-name name version))
8917 (sha256
8918 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
8919 (build-system pyproject-build-system)
8920 (native-inputs
8921 (list python-pytest
8922 python-setuptools
8923 python-wheel))
8924 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
8925 (synopsis "Find an unused port, reliably")
8926 (description
8927 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
8928it.")
8929 (license license:expat)))
8930
8931(define-public python-flask-migrate
8932 (package
8933 (name "python-flask-migrate")
8934 (version "4.1.0")
8935 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
8936 (source (origin
8937 (method git-fetch)
8938 (uri (git-reference (url home-page)
8939 (commit (string-append "v" version))))
8940 (file-name (git-file-name name version))
8941 (sha256
8942 (base32
8943 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
8944 (build-system pyproject-build-system)
8945 (propagated-inputs
8946 (list python-flask python-alembic python-flask-sqlalchemy))
8947 (native-inputs
8948 (list python-pytest python-setuptools python-wheel))
8949 (synopsis "SQLAlchemy database migrations for Flask programs using
8950Alembic")
8951 (description "This package contains SQLAlchemy database migration tools
8952for Flask programs that are using @code{python-alembic}.")
8953 (license license:expat)))
8954
8955(define-public python-genshi
8956 (package
8957 (name "python-genshi")
8958 (version "0.7.10")
8959 (source
8960 (origin
8961 (method git-fetch)
8962 (uri (git-reference
8963 (url "https://github.com/edgewall/genshi")
8964 (commit version)))
8965 (file-name (git-file-name name version))
8966 (sha256
8967 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
8968 (build-system pyproject-build-system)
8969 (arguments (list #:test-backend #~'unittest))
8970 (native-inputs (list python-setuptools))
8971 (propagated-inputs (list python-six))
8972 (home-page "https://genshi.edgewall.org/")
8973 (synopsis "Toolkit for generation of output for the web")
8974 (description "Genshi is a Python library that provides an integrated set
8975of components for parsing, generating, and processing HTML, XML or other
8976textual content for output generation on the web.")
8977 (license license:bsd-3)))
8978
8979(define-public python-flask-principal
8980 (package
8981 (name "python-flask-principal")
8982 (version "0.4.0")
8983 (source
8984 (origin
8985 (method git-fetch)
8986 (uri (git-reference
8987 (url "https://github.com/pallets-eco/flask-principal")
8988 (commit version)))
8989 (file-name (git-file-name name version))
8990 (sha256
8991 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
8992 (build-system pyproject-build-system)
8993 (propagated-inputs (list python-blinker))
8994 (native-inputs (list python-flask python-pynose python-setuptools))
8995 (home-page "https://github.com/pallets-eco/flask-principal")
8996 (synopsis "Identity management for Flask")
8997 (description
8998 "@code{flask_principal} is a identity management library for Flask. It
8999supports managing both authentication and authorization data in a thread-local
9000variable.")
9001 (license license:expat)))
9002
9003(define-public python-flask-httpauth
9004 (package
9005 (name "python-flask-httpauth")
9006 (version "4.8.0")
9007 (source
9008 (origin
9009 (method url-fetch)
9010 (uri (pypi-uri "Flask-HTTPAuth" version))
9011 (sha256
9012 (base32
9013 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
9014 (build-system pyproject-build-system)
9015 (propagated-inputs (list python-flask))
9016 (native-inputs
9017 (list nss-certs-for-test
9018 python-pytest
9019 python-setuptools
9020 python-wheel))
9021 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
9022 (synopsis "Basic and Digest HTTP authentication for Flask routes")
9023 (description "@code{flask_httpauth} provides Basic and Digest HTTP
9024authentication for Flask routes.")
9025 (license license:expat)))
9026
9027(define-public python-uritemplate
9028 (package
9029 (name "python-uritemplate")
9030 (version "4.2.0")
9031 (source
9032 (origin
9033 (method url-fetch)
9034 (uri (pypi-uri "uritemplate" version))
9035 (sha256
9036 (base32
9037 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
9038 (build-system pyproject-build-system)
9039 (native-inputs (list python-pytest python-setuptools))
9040 (home-page "https://uritemplate.readthedocs.io/")
9041 (synopsis "Library to deal with URI Templates")
9042 (description "@code{uritemplate} provides Python library to deal with URI
9043Templates.")
9044 ;; The software is made available under the terms of *either* of the
9045 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
9046 ;; are made under *both* licenses (excerpt from the LICENSE file).
9047 (license (list license:bsd-2 license:asl2.0))))
9048
9049(define-public python-uritemplate-3
9050 (package
9051 (inherit python-uritemplate)
9052 (name "python-uritemplate")
9053 (version "3.0.1")
9054 (source (origin
9055 (method url-fetch)
9056 (uri (pypi-uri "uritemplate" version))
9057 (sha256
9058 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
9059
9060(define-public python-publicsuffix2
9061 (package
9062 (name "python-publicsuffix2")
9063 (version "2.2019-12-21")
9064 (source
9065 (origin
9066 (method git-fetch)
9067 (uri (git-reference
9068 (url "https://github.com/pombredanne/python-publicsuffix2")
9069 (commit (string-append "release-" version))))
9070 (file-name (git-file-name name version))
9071 (sha256
9072 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
9073 (build-system pyproject-build-system)
9074 (arguments
9075 (list
9076 #:tests? #f ;the test suite requires network access
9077 #:phases
9078 #~(modify-phases %standard-phases
9079 (add-after 'unpack 'ignore-maintainer-inputs
9080 (lambda _
9081 ;; Comment out a demand for python-requests, which is used only by
9082 ;; the unused ‘update_psl’ helper command.
9083 (substitute* "setup.py"
9084 (("'requests " match)
9085 (format #f "# ~a" match))))))))
9086 (native-inputs (list python-setuptools))
9087 (home-page "https://github.com/pombredanne/python-publicsuffix2")
9088 (synopsis
9089 "Get a public suffix for a domain name using the Public Suffix List")
9090 (description
9091 "Get a public suffix for a domain name using the Public Suffix List.
9092Forked from and using the same API as the publicsuffix package.")
9093 (license (list license:expat license:mpl2.0))))
9094
9095(define-public python-werkzeug
9096 (package
9097 (name "python-werkzeug")
9098 (version "3.1.3")
9099 (source
9100 (origin
9101 (method url-fetch)
9102 (uri (pypi-uri "werkzeug" version))
9103 (sha256
9104 (base32
9105 "0ij7si3aa3ykac7k7fz481h4majqqwn2iqwhjxkji4y18plkqwk0"))))
9106 (build-system pyproject-build-system)
9107 (arguments
9108 (list
9109 #:test-flags
9110 ;; Test requiring networking setup.
9111 #~(list "--ignore=tests/test_serving.py"
9112 "--deselect=tests/test_debug.py::test_basic"
9113 "--deselect=tests/test_exceptions.py::test_response_body"
9114 "--deselect=tests/middleware/test_http_proxy.py::test_http_proxy")))
9115 (native-inputs
9116 (list python-flit-core
9117 python-pytest
9118 python-watchdog
9119 python-ephemeral-port-reserve
9120 python-pytest-timeout
9121 python-pytest-xprocess))
9122 (propagated-inputs
9123 (list python-markupsafe
9124 python-requests))
9125 (home-page "https://palletsprojects.com/p/werkzeug/")
9126 (synopsis "Utilities for WSGI applications")
9127 (description "One of the most advanced WSGI utility modules. It includes a
9128powerful debugger, full-featured request and response objects, HTTP utilities to
9129handle entity tags, cache control headers, HTTP dates, cookie handling, file
9130uploads, a powerful URL routing system and a bunch of community-contributed
9131addon modules.")
9132 (license license:x11)))
9133
9134(define-public python-werkzeug-1.0
9135 (package
9136 (inherit python-werkzeug)
9137 (version "1.0.1")
9138 (source (origin
9139 (method url-fetch)
9140 (uri (pypi-uri "Werkzeug" version))
9141 (sha256
9142 (base32
9143 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
9144 (patches (search-patches "python-werkzeug-tests.patch"))))
9145 (arguments
9146 (list
9147 #:phases
9148 '(modify-phases %standard-phases
9149 (add-after 'unpack 'ignore-warnings
9150 (lambda _
9151 (substitute* "setup.cfg"
9152 ((" error.*") "")))))))
9153 (propagated-inputs
9154 (list python-requests))
9155 (native-inputs
9156 (list python-pytest python-pytest-timeout python-setuptools
9157 python-wheel))))
9158
9159(define-public python-bottle
9160 (package
9161 (name "python-bottle")
9162 (version "0.13.4")
9163 (source
9164 (origin
9165 (method url-fetch)
9166 (uri (pypi-uri "bottle" version))
9167 (sha256
9168 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
9169 (build-system pyproject-build-system)
9170 (native-inputs (list python-pytest python-setuptools))
9171 (home-page "https://bottlepy.org/")
9172 (synopsis "WSGI framework for small web-applications")
9173 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
9174 (license license:expat)))
9175
9176(define-public python-wtforms
9177 (package
9178 (name "python-wtforms")
9179 (version "3.2.2")
9180 (source
9181 (origin
9182 (method url-fetch)
9183 (uri (pypi-uri "wtforms" version))
9184 (sha256
9185 (base32 "14qbayp2gfmahaqn5migwyz2h1cq3gcdr4q2vd75vwvhhqzwf03v"))))
9186 (build-system pyproject-build-system)
9187 (native-inputs
9188 (list python-babel
9189 python-email-validator
9190 python-hatchling
9191 python-pytest
9192 python-setuptools))
9193 (propagated-inputs (list python-markupsafe))
9194 (home-page "https://wtforms.readthedocs.io/")
9195 (synopsis
9196 "Form validation and rendering library for Python web development")
9197 (description
9198 "WTForms is a flexible forms validation and rendering library
9199for Python web development. It is very similar to the web form API
9200available in Django, but is a standalone package.")
9201 (license license:bsd-3)))
9202
9203(define-public python-wtforms-sqlalchemy
9204 (package
9205 (name "python-wtforms-sqlalchemy")
9206 (version "0.4.1")
9207 (source
9208 (origin
9209 (method url-fetch)
9210 (uri (pypi-uri "WTForms-SQLAlchemy" version))
9211 (sha256
9212 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
9213 (build-system pyproject-build-system)
9214 (native-inputs (list python-pytest python-setuptools python-wheel))
9215 (propagated-inputs (list python-sqlalchemy python-wtforms))
9216 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
9217 (synopsis "SQLAlchemy tools for WTForms")
9218 (description
9219 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
9220package from WTForms. The package has been renamed to
9221@code{wtforms_sqlalchemy} but otherwise should function the same as
9222@code{wtforms.ext.sqlalchemy} did.")
9223 (license license:bsd-3)))
9224
9225(define-public python-urlgrabber
9226 (package
9227 (name "python-urlgrabber")
9228 (version "4.1.0")
9229 (source
9230 (origin
9231 (method url-fetch)
9232 (uri (pypi-uri "urlgrabber" version))
9233 (sha256
9234 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
9235 (build-system pyproject-build-system)
9236 (arguments
9237 (list
9238 #:tests? #f ; Most tests require network access.
9239 #:phases
9240 #~(modify-phases %standard-phases
9241 (replace 'check
9242 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
9243 (when tests?
9244 (invoke "python" "test/runtests.py")))))))
9245 (native-inputs (list python-setuptools))
9246 (propagated-inputs
9247 (list python-pycurl python-setuptools python-six))
9248 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
9249 (synopsis "High-level cross protocol url-grabber")
9250 (description
9251 "@code{urlgrabber} is a library that unifies access to files available on
9252the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
9253supports features like HTTP keep-alive, reget, throttling and more.")
9254 (license license:lgpl2.1+)))
9255
9256(define-public python-pycares
9257 (package
9258 (name "python-pycares")
9259 (version "4.11.0")
9260 (source
9261 (origin
9262 (method git-fetch)
9263 (uri (git-reference
9264 (url "https://github.com/saghul/pycares")
9265 (commit (string-append "v" version))))
9266 (file-name (git-file-name name version))
9267 (sha256
9268 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
9269 (snippet #~(begin
9270 (rmdir "deps/c-ares")))))
9271 (build-system pyproject-build-system)
9272 (arguments
9273 (list
9274 ;; XXX: Half of the tests require internet access
9275 ;; There is currently no markers to avoid running them.
9276 #:tests? #f
9277 #:phases
9278 #~(modify-phases %standard-phases
9279 (add-after 'unpack 'configure-system-lib
9280 (lambda _
9281 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
9282 (native-inputs (list python-pytest python-setuptools))
9283 (inputs (list c-ares))
9284 (propagated-inputs (list python-cffi))
9285 (home-page "https://github.com/saghul/pycares")
9286 (synopsis "Python interface for @code{c-ares}")
9287 (description
9288 "@code{pycares} is a Python module which provides an interface to
9289@code{c-ares}, a C library that performs DNS requests and name resolutions
9290asynchronously.")
9291 (license license:expat)))
9292
9293(define-public python-yarl
9294 (package
9295 (name "python-yarl")
9296 (version "1.18.3")
9297 (source
9298 (origin
9299 (method url-fetch)
9300 (uri (pypi-uri "yarl" version))
9301 (sha256
9302 (base32
9303 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
9304 (build-system pyproject-build-system)
9305 (arguments
9306 (list
9307 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
9308 #:phases
9309 '(modify-phases %standard-phases
9310 (add-after 'unpack 'avoid-pytest-cov-preload
9311 (lambda _
9312 (substitute* "pytest.ini"
9313 (("-p pytest_cov") ""))))
9314 (add-after 'unpack 'patch-build-system
9315 (lambda _
9316 ;; XXX: I don't know how to tell it to build the extensions in
9317 ;; place.
9318 (substitute* "packaging/pep517_backend/_backend.py"
9319 (("build_inplace=False") "build_inplace=True")))))))
9320 (native-inputs
9321 (list python-cython
9322 python-expandvars
9323 python-pytest
9324 python-pytest-xdist
9325 python-setuptools
9326 python-tomli))
9327 (propagated-inputs
9328 (list python-packaging python-idna python-multidict python-propcache))
9329 (home-page "https://github.com/aio-libs/yarl/")
9330 (synopsis "Yet another URL library")
9331 (description "@code{yarl} module provides handy @code{URL} class
9332for URL parsing and changing.")
9333 (license license:asl2.0)))
9334
9335(define-public python-canvasapi
9336 (package
9337 (name "python-canvasapi")
9338 (version "3.4.0")
9339 (source (origin
9340 (method git-fetch)
9341 (uri (git-reference
9342 (url "https://github.com/ucfopen/canvasapi")
9343 (commit (string-append "v" version))))
9344 (file-name (git-file-name name version))
9345 (sha256
9346 (base32
9347 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
9348 (build-system pyproject-build-system)
9349 (propagated-inputs (list python-arrow python-pytz python-requests))
9350 (native-inputs (list python-pytest
9351 python-requests-mock
9352 python-setuptools
9353 python-urllib3))
9354 (home-page "https://github.com/ucfopen/canvasapi")
9355 (synopsis "API wrapper for the Canvas LMS")
9356 (description
9357 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
9358The library enables developers to programmatically manage Canvas courses,
9359users, gradebooks, and more.")
9360 (license license:expat)))
9361
9362(define-public python-google
9363 (package
9364 (name "python-google")
9365 (version "3.0.0")
9366 (source
9367 (origin
9368 (method url-fetch)
9369 (uri (pypi-uri "google" version))
9370 (sha256
9371 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
9372 (build-system pyproject-build-system)
9373 (arguments (list #:tests? #f)) ;There are no tests.
9374 (native-inputs (list python-setuptools))
9375 (propagated-inputs (list python-beautifulsoup4))
9376 (home-page "https://breakingcode.wordpress.com/")
9377 (synopsis "Python bindings to the Google search engine")
9378 (description
9379 "This package provides Python bindings for using the Google search
9380engine. Its module is called @code{googlesearch}.")
9381 (license license:bsd-3)))
9382
9383(define-public python-google-api-client
9384 (package
9385 (name "python-google-api-client")
9386 (version "2.187.0")
9387 (source
9388 (origin
9389 (method git-fetch)
9390 (uri (git-reference
9391 (url "https://github.com/google/google-api-python-client")
9392 (commit (string-append "v" version))))
9393 (file-name (git-file-name name version))
9394 (sha256
9395 (base32 "09vq5d32avri0gl8c7nn5dv2xds1jzjms7vqk3gn66nm2m37x8mv"))))
9396 (build-system pyproject-build-system)
9397 (arguments
9398 (list
9399 #:test-flags
9400 #~(list
9401 "-k"
9402 (string-join
9403 (list
9404 ;; XXX: Deprecated behavior.
9405 "not test_client_options_universe_configured_with_mtls"
9406 "test_universe_env_var_configured_with_mtls"
9407 ;; XXX: Requires CA certificates.
9408 "test_credentials_and_credentials_file_mutually_exclusive")
9409 " and not ")
9410 "tests")))
9411 (native-inputs
9412 (list python-parameterized
9413 python-pytest
9414 python-setuptools))
9415 (propagated-inputs
9416 (list python-google-api-core
9417 python-google-auth
9418 python-google-auth-httplib2
9419 python-httplib2
9420 python-pyparsing
9421 python-uritemplate-3))
9422 (home-page "https://github.com/google/google-api-python-client")
9423 (synopsis "Core Python library for accessing Google APIs")
9424 (description "Python client library for Google's discovery based APIs")
9425 (license license:asl2.0)))
9426
9427(define-public python-google-auth-httplib2
9428 (package
9429 (name "python-google-auth-httplib2")
9430 (version "0.2.0")
9431 (source (origin
9432 (method url-fetch)
9433 (uri (pypi-uri "google-auth-httplib2" version))
9434 (sha256
9435 (base32 "018fckshilc6z2qpj1pclh8haanbq3lr85w6p4g4z5wgyjnppaiq"))))
9436 (build-system pyproject-build-system)
9437 (propagated-inputs
9438 (list python-google-auth python-httplib2))
9439 (native-inputs
9440 (list python-pytest
9441 python-pyparsing
9442 python-pytest-localserver
9443 python-flask
9444 python-setuptools))
9445 (home-page
9446 "https://github.com/GoogleCloudPlatform/google-auth-library-python-httplib2")
9447 (synopsis "Google Authentication Library: httplib2 transport")
9448 (description "This package provides a Google Authentication Library plugin
9449for httplib2 transport.")
9450 (license license:asl2.0)))
9451
9452(define-public python-google-auth-oauthlib
9453 (package
9454 (name "python-google-auth-oauthlib")
9455 (version "1.2.4")
9456 (home-page
9457 "https://github.com/GoogleCloudPlatform/\
9458google-auth-library-python-oauthlib")
9459 (source
9460 (origin
9461 (method git-fetch)
9462 (uri (git-reference
9463 (url home-page)
9464 (commit (string-append "v" version))))
9465 (file-name (git-file-name name version))
9466 (sha256
9467 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
9468 (build-system pyproject-build-system)
9469 (propagated-inputs (list python-google-auth python-requests-oauthlib))
9470 (native-inputs
9471 (list python-click python-mock python-pytest python-setuptools))
9472 (synopsis "Google Authentication Library: oauthlib")
9473 (description "This package provides a Google Authentication Library plugin
9474with oauthlib.")
9475 (license license:asl2.0)))
9476
9477(define-public whoogle-search
9478 (package
9479 (name "whoogle-search")
9480 (version "0.8.4")
9481 (source (origin
9482 (method url-fetch)
9483 (uri (pypi-uri "whoogle-search" version))
9484 (sha256
9485 (base32
9486 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
9487 (build-system pyproject-build-system)
9488 (arguments
9489 (list
9490 ;; The tests need network access
9491 #:tests? #f))
9492 (propagated-inputs
9493 (list python-beautifulsoup4
9494 python-brotli
9495 python-cryptography
9496 python-cssutils
9497 python-defusedxml
9498 python-flask
9499 python-dotenv
9500 python-requests
9501 python-stem
9502 python-validators
9503 python-waitress))
9504 (native-inputs (list python-setuptools python-wheel))
9505 (home-page "https://github.com/benbusby/whoogle-search")
9506 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
9507 (description
9508 "Get Google results, but without any ads, javascript, AMP links,
9509cookies, or IP address tracking. Quick and simple to implement as a primary
9510search engine replacement on both desktop and mobile.")
9511 (license license:expat)))
9512
9513(define-public python-hawkauthlib
9514 (package
9515 (name "python-hawkauthlib")
9516 (version "2.0.0")
9517 (source
9518 (origin
9519 (method git-fetch)
9520 (uri (git-reference
9521 (url "https://github.com/mozilla-services/hawkauthlib")
9522 (commit (string-append "v" version))))
9523 (file-name (git-file-name name version))
9524 (sha256
9525 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
9526 (build-system pyproject-build-system)
9527 (arguments
9528 (list
9529 #:test-backend #~'unittest
9530 #:phases
9531 #~(modify-phases %standard-phases
9532 (add-after 'unpack 'fix-python-incompatibilities
9533 (lambda _
9534 (substitute* (find-files "hawkauthlib/tests" "\\.py$")
9535 (("assertEquals") "assertEqual")))))))
9536 (native-inputs (list python-setuptools))
9537 (propagated-inputs (list python-requests python-webob))
9538 (home-page "https://github.com/mozilla-services/hawkauthlib")
9539 (synopsis "Hawk Access Authentication protocol")
9540 (description
9541 "This is a low-level Python library for implementing Hawk Access
9542Authentication, a simple HTTP request-signing scheme.")
9543 (license license:mpl2.0)))
9544
9545(define-public python-pybrowserid
9546 (package
9547 (name "python-pybrowserid")
9548 (version "0.14.0")
9549 (source
9550 (origin
9551 (method git-fetch)
9552 (uri (git-reference
9553 (url "https://github.com/mozilla/PyBrowserID")
9554 (commit version)))
9555 (file-name (git-file-name name version))
9556 (sha256
9557 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
9558 (build-system pyproject-build-system)
9559 (arguments
9560 (list
9561 #:test-backend #~'unittest
9562 #:phases
9563 #~(modify-phases %standard-phases
9564 (add-after 'unpack 'python-3.12-compatibility
9565 (lambda _
9566 (substitute* (find-files "browserid/tests" "\\.py")
9567 (("assertEquals") "assertEqual")))))))
9568 (propagated-inputs (list python-requests))
9569 (native-inputs (list python-mock python-setuptools))
9570 (home-page "https://github.com/mozilla/PyBrowserID")
9571 (synopsis "Python library for the BrowserID protocol")
9572 (description
9573 "This is a Python client library for the BrowserID protocol that
9574underlies Mozilla Persona.")
9575 (license license:mpl2.0)))
9576
9577(define-public python-pyfxa
9578 (package
9579 (name "python-pyfxa")
9580 (version "0.8.1")
9581 (source
9582 (origin
9583 (method git-fetch)
9584 (uri (git-reference
9585 (url "https://github.com/mozilla/PyFxA")
9586 (commit (string-append "v" version))))
9587 (file-name (git-file-name name version))
9588 (sha256
9589 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
9590 (build-system pyproject-build-system)
9591 (arguments
9592 (list
9593 ;; These tests require network access
9594 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
9595 (propagated-inputs
9596 (list python-cryptography
9597 python-pyjwt
9598 python-parameterized
9599 python-hawkauthlib
9600 python-requests))
9601 (native-inputs
9602 (list python-grequests
9603 python-hatchling
9604 python-mock
9605 python-pytest
9606 python-responses))
9607 (home-page "https://github.com/mozilla/PyFxA")
9608 (synopsis "Firefox Accounts client library for Python")
9609 (description
9610 "This is a Python library for interacting with the Firefox Accounts
9611ecosystem.")
9612 (license license:mpl2.0)))
9613
9614(define-public python-hyperlink
9615 (package
9616 (name "python-hyperlink")
9617 (version "21.0.0")
9618 (source
9619 (origin
9620 (method url-fetch)
9621 (uri (pypi-uri "hyperlink" version))
9622 (sha256
9623 (base32
9624 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
9625 (build-system pyproject-build-system)
9626 (arguments
9627 (list #:phases
9628 #~(modify-phases %standard-phases
9629 (add-before 'check 'pretend-to-be-CI
9630 (lambda _
9631 ;; Pretend to be a CI system to skip flaky tests.
9632 (setenv "CI" "true"))))))
9633 (native-inputs
9634 (list python-pytest python-setuptools python-wheel))
9635 (propagated-inputs
9636 (list python-idna))
9637 (home-page "https://github.com/python-hyper/hyperlink")
9638 (synopsis "Python module to create immutable URLs according to spec")
9639 (description "This package provides a Python module to create immutable, and
9640correct URLs for Python according to RFCs 3986 and 3987.")
9641 (license license:expat)))
9642
9643(define-public python-treq
9644 (package
9645 (name "python-treq")
9646 (version "24.9.1")
9647 (source
9648 (origin
9649 (method url-fetch)
9650 (uri (pypi-uri "treq" version))
9651 (sha256
9652 (base32
9653 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
9654 (build-system pyproject-build-system)
9655 (native-inputs
9656 (list python-httpbin
9657 python-pytest
9658 python-service-identity
9659 python-setuptools
9660 python-wheel))
9661 (propagated-inputs
9662 (list python-attrs
9663 python-hyperlink
9664 python-incremental
9665 python-requests
9666 python-twisted
9667 python-typing-extensions))
9668 (home-page "https://github.com/twisted/treq")
9669 (synopsis "Requests-like API built on top of twisted.web's Agent")
9670 (description "This package provides an HTTP library inspired by
9671@code{requests} but written on top of Twisted's @code{Agents}. It offers a
9672high level API for making HTTP requests when using Twisted.")
9673 (license license:expat)))
9674
9675(define-public python-autobahn
9676 (package
9677 (name "python-autobahn")
9678 (version "25.11.1")
9679 (source
9680 (origin
9681 (method url-fetch)
9682 (uri (pypi-uri "autobahn" version))
9683 (sha256
9684 (base32
9685 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
9686 (build-system pyproject-build-system)
9687 (arguments
9688 (list
9689 ;; The tests fail to run:
9690 ;; https://github.com/crossbario/autobahn-python/issues/1117
9691 #:tests? #f
9692 #:phases #~(modify-phases %standard-phases
9693 (add-after 'unpack 'relax-zope-interface
9694 (lambda _
9695 ;; python-zope-interface is a world rebuild package
9696 ;; and our one-digit lower minor version seems to be
9697 ;; fine.
9698 (substitute* "setup.py"
9699 (("zope.interface>=5.2.0")
9700 "zope.interface>=5.1.0"))))
9701 (add-after 'unpack 'strip-xbr
9702 (lambda _
9703 ;; Strip new XBR feature which isn't available in Guix.
9704 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
9705 (native-inputs (list python-setuptools python-wheel))
9706 (propagated-inputs (list python-cbor2
9707 python-cryptography
9708 python-hyperlink
9709 python-msgpack
9710 python-py-ubjson
9711 python-twisted
9712 python-txaio
9713 python-ujson))
9714 (home-page "https://github.com/crossbario/autobahn-python/")
9715 (synopsis "Web Application Messaging Protocol implementation")
9716 (description "This package provides an implementation of the @dfn{Web Application
9717Messaging Protocol} (WAMP). WAMP connects components in distributed
9718applications using Publish and Subscribe (PubSub) and routed Remote Procedure
9719Calls (rRPC). It is ideal for distributed, multi-client and server applications
9720such as IoT applications or multi-user database-driven business applications.")
9721 (license license:expat)))
9722
9723(define-public python-ws4py
9724 (package
9725 (name "python-ws4py")
9726 (version "0.6.0")
9727 (source
9728 (origin
9729 (method git-fetch)
9730 (uri (git-reference
9731 (url "https://github.com/Lawouach/WebSocket-for-Python")
9732 (commit version)))
9733 (file-name (git-file-name name version))
9734 (sha256
9735 (base32
9736 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
9737 (build-system pyproject-build-system)
9738 (arguments
9739 (list
9740 #:phases
9741 #~(modify-phases %standard-phases
9742 (add-after 'unpack 'remove-cherrypy-support
9743 (lambda _
9744 (delete-file "ws4py/server/cherrypyserver.py")
9745 (delete-file "test/test_cherrypy.py"))))))
9746 (native-inputs (list python-setuptools python-pytest))
9747 (propagated-inputs
9748 (list python-gevent python-tornado))
9749 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
9750 (synopsis "WebSocket client and server library")
9751 (description
9752 "This package provides a WebSocket client and server library for Python.")
9753 (license license:bsd-3)))
9754
9755(define-public python-slowapi
9756 (package
9757 (name "python-slowapi")
9758 (version "0.1.9")
9759 (source
9760 (origin
9761 (method git-fetch)
9762 (uri (git-reference
9763 (url "https://github.com/laurents/slowapi")
9764 (commit (string-append "v" version))))
9765 (file-name (git-file-name name version))
9766 (sha256
9767 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
9768 (build-system pyproject-build-system)
9769 (arguments
9770 (list
9771 #:test-flags
9772 ;; These tests fail because the timestamp contains more decimal points
9773 ;; than expected, so a simple equality comparison fails.
9774 '(list "-k" (string-append "not test_headers_no_breach"
9775 " and not test_headers_breach"))))
9776 (propagated-inputs (list python-limits python-redis))
9777 (native-inputs
9778 (list python-fastapi
9779 python-hiro
9780 python-mock
9781 python-poetry-core
9782 python-pytest))
9783 (home-page "https://github.com/laurents/slowapi")
9784 (synopsis "Rate limiting extension for Starlette and Fastapi")
9785 (description
9786 "This package provides a rate limiting extension for Starlette and
9787Fastapi.")
9788 (license license:expat)))
9789
9790(define-public python-slugify
9791 (package
9792 (name "python-slugify")
9793 (version "8.0.4")
9794 (source
9795 (origin
9796 (method git-fetch)
9797 (uri (git-reference
9798 (url "https://github.com/un33k/python-slugify")
9799 (commit (string-append "v" version))))
9800 (file-name (git-file-name name version))
9801 (sha256
9802 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
9803 (build-system pyproject-build-system)
9804 (arguments (list #:test-backend #~'unittest))
9805 (native-inputs (list python-setuptools))
9806 (propagated-inputs (list python-unidecode python-text-unidecode))
9807 (home-page "https://github.com/un33k/python-slugify")
9808 (synopsis "Python Slugify application that handles Unicode")
9809 (description "This package provides a @command{slufigy} command and
9810library to create slugs from unicode strings while keeping it DRY.")
9811 (license license:expat)))
9812
9813(define-public python-branca
9814 (package
9815 (name "python-branca")
9816 (version "0.7.2")
9817 (source
9818 (origin
9819 (method git-fetch) ; no tests in PyPI
9820 (uri (git-reference
9821 (url "https://github.com/python-visualization/branca")
9822 (commit (string-append "v" version))))
9823 (file-name (git-file-name name version))
9824 (sha256
9825 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
9826 (build-system pyproject-build-system)
9827 (arguments
9828 ;; This file requires Selenium.
9829 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
9830 ;; This test passes but is very slow.
9831 "-k" "not test_color_brewer_extendability")))
9832 (propagated-inputs (list python-jinja2))
9833 (native-inputs
9834 (list python-numpy
9835 python-pytest
9836 python-setuptools
9837 python-setuptools-scm
9838 python-wheel))
9839 (home-page "https://github.com/python-visualization/branca")
9840 (synopsis "Generate complex HTML+JS pages with Python")
9841 (description "This library is a spinoff from @code{folium} that would host
9842the non-map-specific features. It can be used to generate HTML + JS.")
9843 (license license:expat)))
9844
9845(define-public python-tinycss2
9846 (package
9847 (name "python-tinycss2")
9848 (version "1.5.1")
9849 (source
9850 (origin
9851 (method git-fetch)
9852 (uri (git-reference
9853 (url "https://github.com/Kozea/tinycss2")
9854 (commit (string-append "v" version))
9855 (recursive? #true)))
9856 (file-name (git-file-name name version))
9857 (sha256
9858 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
9859 (build-system pyproject-build-system)
9860 (native-inputs
9861 (list python-flit
9862 python-pytest))
9863 (propagated-inputs
9864 (list python-webencodings))
9865 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
9866 (synopsis "Low-level CSS parser for Python")
9867 (description "@code{tinycss2} can parse strings, return Python objects
9868representing tokens and blocks, and generate CSS strings corresponding to
9869these objects.
9870
9871Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
9872grammar of CSS but doesn’t know specific rules, properties or values supported
9873in various CSS modules.")
9874 (license license:bsd-3)))
9875
9876(define-public python-tinyhtml5
9877 (package
9878 (name "python-tinyhtml5")
9879 (version "2.1.0")
9880 (source
9881 (origin
9882 (method git-fetch)
9883 (uri (git-reference
9884 (url "https://github.com/CourtBouillon/tinyhtml5")
9885 (commit version)))
9886 (file-name (git-file-name name version))
9887 (sha256
9888 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
9889 (build-system pyproject-build-system)
9890 (propagated-inputs
9891 (list python-webencodings))
9892 (native-inputs
9893 (list python-flit-core
9894 python-pytest))
9895 (home-page "https://github.com/CourtBouillon/tinyhtml5")
9896 (synopsis "Small HTML parser based on the WHATWG HTML specification")
9897 (description "This Python module is a HTML5 parser that transforms a
9898possibly malformed HTML document into an ElementTree tree. This module is a
9899simplified fork of html5lib.")
9900 (license license:expat)))
9901
9902(define-public python-cssselect2
9903 (package
9904 (name "python-cssselect2")
9905 (version "0.9.0")
9906 (source
9907 (origin
9908 (method git-fetch)
9909 (uri (git-reference
9910 (url "https://github.com/Kozea/cssselect2")
9911 (commit version)))
9912 (file-name (git-file-name name version))
9913 (sha256
9914 (base32 "1drvb83siq9s6dygyhab6kzk2v2ib6cv51ls42p4jrxs9q8cdiw0"))))
9915 (build-system pyproject-build-system)
9916 (propagated-inputs
9917 (list python-tinycss2))
9918 (native-inputs
9919 (list python-flit-core
9920 python-pytest))
9921 (home-page "https://doc.courtbouillon.org/cssselect2/stable/")
9922 (synopsis "CSS selectors for Python ElementTree")
9923 (description "@code{cssselect2} is a straightforward implementation of
9924CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
9925ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
9926
9927Unlike the Python package @code{cssselect}, it does not translate selectors to
9928XPath and therefore does not have all the correctness corner cases that are
9929hard or impossible to fix in cssselect.")
9930 (license license:bsd-3)))
9931
9932(define-public python-uvloop
9933 (package
9934 (name "python-uvloop")
9935 (version "0.21.0")
9936 (source
9937 (origin
9938 (method url-fetch)
9939 (uri (pypi-uri "uvloop" version))
9940 (sha256
9941 (base32 "1qq46ym3ymzfn4j6fnykfmr1f4qnb7x7p15dlw37hi38v87jpw9v"))
9942 (modules '((guix build utils)))
9943 (snippet
9944 '(begin (delete-file-recursively "vendor")
9945 (delete-file "uvloop/loop.c")))))
9946 (build-system pyproject-build-system)
9947 (arguments
9948 (list
9949 #:test-flags
9950 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
9951 ;; to get a meaningful idea about where.
9952 #~(list "--timeout=300"
9953 "--timeout-method=thread"
9954 "-k" (string-join
9955 (list
9956 ;; Timeout, because SIGINT cannot be sent to child.
9957 "not test_signals_sigint_pycode_continue"
9958 "test_signals_sigint_pycode_stop"
9959 "test_signals_sigint_uvcode"
9960 "test_signals_sigint_uvcode_two_loop_runs"
9961 ;; This test is racy and prone to get stuck on
9962 ;; various platforms, possibly a aiohttp issue:
9963 ;; https://github.com/MagicStack/uvloop/issues/412
9964 "test_remote_shutdown_receives_trailing_data"
9965 ;; It looks like pytest is preventing
9966 ;; custom stdout/stderr redirection,
9967 ;; even with -s.
9968 "test_process_streams_redirect"
9969 ;; FileNotFoundError: [Errno 2] No such file or
9970 ;; directory
9971 "test_process_env_2"
9972 ;; socket.gaierror: [Errno -2] Name or service not known
9973 "test_getaddrinfo_21"
9974 #$@(if (target-riscv64?)
9975 `("test_renegotiation")
9976 `()))
9977 " and not "))
9978 #:phases
9979 #~(modify-phases %standard-phases
9980 (add-after 'unpack 'preparations
9981 (lambda _
9982 ;; Use packaged libuv.
9983 (substitute* "setup.py" (("self.use_system_libuv = False")
9984 "self.use_system_libuv = True"))
9985 ;; Replace hardcoded shell command.
9986 (substitute* "uvloop/loop.pyx"
9987 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))))
9988 #$@(if (target-riscv64?)
9989 `((add-after 'unpack 'adjust-test-timeouts
9990 (lambda _
9991 (substitute* '("tests/test_tcp.py"
9992 "tests/test_unix.py")
9993 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
9994 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
9995 '())
9996 (add-before 'check 'pre-check
9997 (lambda* (#:key tests? #:allow-other-keys)
9998 (when tests?
9999 ;; Remove Python module, which conflicts with the installed
10000 ;; version, but lacks the built C module.
10001 (delete-file-recursively "uvloop")))))))
10002 (native-inputs
10003 (list python-aiohttp
10004 python-cython
10005 python-psutil
10006 python-pyopenssl
10007 python-pytest
10008 python-pytest-timeout
10009 python-setuptools
10010 python-wheel))
10011 (inputs
10012 (list libuv))
10013 (home-page "https://github.com/MagicStack/uvloop")
10014 (synopsis "Fast implementation of asyncio event loop on top of libuv")
10015 (description
10016 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
10017event loop. It is implemented in Cython and uses libuv under the hood.")
10018 (license license:expat)))
10019
10020(define-public gunicorn
10021 (package
10022 (name "gunicorn")
10023 (version "25.3.0")
10024 (source
10025 (origin
10026 (method url-fetch)
10027 (uri (pypi-uri "gunicorn" version))
10028 (sha256
10029 (base32
10030 "12g85w735s4dszjfidi4vh786rfxsa5rd60il0fcvxknkwpinkpp"))))
10031 (outputs '("out" "doc"))
10032 (build-system pyproject-build-system)
10033 (arguments
10034 `(#:test-flags
10035 ;; Disable the geventlet tests because eventlet uses dnspython, which
10036 ;; does not work in the build container due to lack of /etc/resolv.conf
10037 '("--ignore=tests/workers/test_geventlet.py")
10038 #:phases (modify-phases %standard-phases
10039 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
10040 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
10041 ;; size. Override it to only add the essential entries.
10042 (replace 'wrap
10043 (lambda* (#:key native-inputs inputs outputs
10044 #:allow-other-keys)
10045 (let* ((out (assoc-ref outputs "out"))
10046 (python (assoc-ref (or native-inputs inputs)
10047 "python"))
10048 (sitedir (string-append "/lib/python"
10049 (python-version python)
10050 "/site-packages")))
10051 (wrap-program (string-append out "/bin/gunicorn")
10052 `("PYTHONPATH" ":" prefix
10053 ,(map (lambda (output)
10054 (string-append output sitedir))
10055 (list python out))))))))))
10056 (inputs (list bash-minimal))
10057 (native-inputs
10058 (list binutils ;for ctypes.util.find_library()
10059 python-eventlet
10060 python-gevent
10061 python-h2
10062 python-httpx
10063 python-pytest
10064 python-pytest-asyncio
10065 python-setuptools
10066 python-uvloop))
10067 (propagated-inputs
10068 (list python-packaging
10069 python-setuptools
10070 python-wheel))
10071 (home-page "https://gunicorn.org/")
10072 (synopsis "Python WSGI HTTP Server for UNIX")
10073 (description
10074 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
10075Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
10076Unicorn project. The Gunicorn server is broadly compatible with
10077various web frameworks, simply implemented, light on server resources,
10078and fairly speedy.")
10079 (license license:expat)))
10080
10081;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
10082;; its tests
10083(define-public gunicorn-bootstrap
10084 (package
10085 (inherit gunicorn)
10086 (name "gunicorn")
10087 (arguments `(#:tests? #f))
10088 (properties '((hidden? . #t)))
10089 (native-inputs `())))
10090
10091(define-public python-httptools
10092 (package
10093 (name "python-httptools")
10094 (version "0.7.1")
10095 (source
10096 (origin
10097 ;; PyPI tarball comes with a vendored http-parser and no tests.
10098 (method git-fetch)
10099 (uri (git-reference
10100 (url "https://github.com/MagicStack/httptools")
10101 (commit (string-append "v" version))))
10102 (file-name (git-file-name name version))
10103 (sha256
10104 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
10105 (modules '((guix build utils)))
10106 (snippet
10107 #~(begin (delete-file-recursively "vendor")))))
10108 (build-system pyproject-build-system)
10109 (arguments
10110 (list
10111 #:test-flags
10112 ;; XXX: AssertionError: HttpParserError not raised.
10113 #~(list "-k" "not test_parser_response_leninent_headers_1")
10114 #:phases
10115 #~(modify-phases %standard-phases
10116 (add-after 'unpack 'configure-build-ext
10117 (lambda _
10118 (with-output-to-file "setup.cfg"
10119 (lambda ()
10120 (display "\
10121[build_ext]
10122use_system_llhttp = true
10123use_system_http_parser = true
10124cython_always = true"))))))))
10125 (native-inputs
10126 (list python-cython
10127 python-pytest
10128 python-setuptools))
10129 (inputs
10130 (list http-parser
10131 llhttp))
10132 (home-page "https://github.com/MagicStack/httptools")
10133 (synopsis "Collection of framework independent HTTP protocol utils")
10134 (description
10135 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
10136 (license license:expat)))
10137
10138(define-public python-uvicorn
10139 (package
10140 (name "python-uvicorn")
10141 (version "0.40.0")
10142 (source
10143 (origin
10144 (method git-fetch)
10145 (uri (git-reference
10146 (url "https://github.com/encode/uvicorn")
10147 (commit version)))
10148 (file-name (git-file-name name version))
10149 (sha256
10150 (base32 "0laplrb2sf9jxv4prhrsqf8kpynipqml2idqq4fr7ikij8qsz6b2"))))
10151 (build-system pyproject-build-system)
10152 (arguments
10153 (list
10154 #:test-flags
10155 #~(list "-o" "asyncio_mode=auto"
10156 ;; After tests have been passed successfully some sockets leave
10157 ;; unclosed, causing Pytest to raise warning on teardown.
10158 "-W" "ignore::ResourceWarning"
10159 "-W" "ignore::pytest.PytestUnraisableExceptionWarning"
10160 ;; For some reason tests stacked in infinity re-invocation loop:
10161 ;; AssertionError where is_alive =
10162 ;; <uvicorn.supervisors.multiprocess.Process object at
10163 ;; 0x7ffff39b6110>.is_alive.
10164 ;; Maybe this <https://github.com/encode/uvicorn/issues/2466>.
10165 "--ignore=tests/supervisors/test_multiprocess.py"
10166
10167 #$@(cond
10168 ((or (target-aarch64?)
10169 (target-riscv64?))
10170 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
10171 (#t '())))))
10172 (native-inputs
10173 (list nss-certs-for-test
10174 python-a2wsgi
10175 python-hatchling
10176 python-httpx-bootstrap
10177 python-pytest
10178 python-pytest-asyncio
10179 python-pytest-mock
10180 python-pytest-xdist
10181 python-requests
10182 python-trustme
10183 python-wsproto))
10184 (propagated-inputs
10185 (list python-a2wsgi
10186 python-click
10187 python-dotenv
10188 python-h11
10189 python-httptools
10190 python-pyyaml
10191 python-uvloop
10192 python-watchfiles
10193 python-websockets))
10194 (home-page "https://github.com/encode/uvicorn")
10195 (synopsis "Fast ASGI server implementation")
10196 (description
10197 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
10198and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
10199for HTTP/2 is planned.")
10200 (license license:bsd-3)))
10201
10202(define-public python-translation-finder
10203 (package
10204 (name "python-translation-finder")
10205 (version "2.22")
10206 (source
10207 (origin
10208 (method url-fetch)
10209 (uri (pypi-uri "translation_finder" version))
10210 (sha256
10211 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
10212 (build-system pyproject-build-system)
10213 (arguments
10214 (list
10215 #:test-flags
10216 ;; AssertionError: 31 != 30 : Mismatched count of results
10217 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
10218 (native-inputs
10219 (list python-pytest
10220 python-setuptools))
10221 (propagated-inputs
10222 (list python-charset-normalizer
10223 python-ruamel.yaml
10224 python-weblate-language-data))
10225 (home-page "https://weblate.org/")
10226 (synopsis "Translation file finder for Weblate")
10227 (description "This package provides a function to find translation file in
10228the source code of a project. It supports many translation file formats and
10229is part of the Weblate translation platform.")
10230 (license license:gpl3+)))
10231
10232(define-public python-gitlab
10233 (package
10234 (name "python-gitlab")
10235 (version "7.0.0")
10236 (source
10237 (origin
10238 (method git-fetch)
10239 (uri (git-reference
10240 (url "https://github.com/python-gitlab/python-gitlab")
10241 (commit (string-append "v" version))))
10242 (file-name (git-file-name name version))
10243 (sha256
10244 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
10245 (build-system pyproject-build-system)
10246 (arguments
10247 (list
10248 #:test-flags
10249 #~(list "--ignore=tests/unit/test_graphql.py"
10250 ;; XXX: Missing helper script.
10251 "-k" "not test_data_from_helper" "tests/unit")))
10252 (native-inputs
10253 (list python-anyio
10254 python-pytest
10255 python-responses
10256 python-setuptools))
10257 (propagated-inputs (list python-requests python-requests-toolbelt))
10258 (home-page "https://github.com/python-gitlab/python-gitlab")
10259 (synopsis "Interact with GitLab API")
10260 (description "This package provides an extended library for interacting
10261with GitLab instances through their API.")
10262 (license license:lgpl3+)))
10263
10264(define-public python-path-and-address
10265 (package
10266 (name "python-path-and-address")
10267 (version "2.0.1")
10268 (source
10269 (origin
10270 (method git-fetch)
10271 (uri (git-reference
10272 (url "https://github.com/joeyespo/path-and-address")
10273 (commit (string-append "v" version))))
10274 (file-name (git-file-name name version))
10275 (sha256
10276 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
10277 (build-system pyproject-build-system)
10278 (native-inputs
10279 (list python-pytest python-setuptools))
10280 (home-page "https://github.com/joeyespo/path-and-address")
10281 (synopsis "Functions for command-line server tools used by humans")
10282 (description "Path-and-address resolves ambiguities of command-line
10283interfaces, inferring which argument is the path, and which is the address.")
10284 (license license:expat)))
10285
10286;; XXX: This project missed maintainer upstream, see
10287;; <https://github.com/joeyespo/grip/issues/387>.
10288;; Consider to remove if it keeps failing to build.
10289(define-public grip
10290 (package
10291 (name "grip")
10292 (version "4.6.1")
10293 (source
10294 (origin
10295 (method git-fetch)
10296 (uri (git-reference
10297 (url "https://github.com/joeyespo/grip")
10298 (commit (string-append "v" version))))
10299 (file-name (git-file-name name version))
10300 (sha256
10301 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
10302 (build-system pyproject-build-system)
10303 (arguments
10304 (list
10305 #:test-flags
10306 ;; All tests fail requiring network access, ignore the whole file.
10307 #~(list "--ignore=tests/test_github.py")
10308 #:phases
10309 #~(modify-phases %standard-phases
10310 ;; This fixes the removal of `charset` attribute of requests from
10311 ;; Werkzeug 2.3.0.
10312 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
10313 (add-after 'unpack 'fix-response-encoding
10314 (lambda _
10315 (substitute* "grip/app.py"
10316 (("response.charset")
10317 "getattr(response, 'charset', 'utf-8')")))))))
10318 (native-inputs
10319 (list nss-certs-for-test
10320 python-pytest
10321 python-responses
10322 python-setuptools
10323 python-wheel))
10324 (propagated-inputs
10325 (list python-docopt
10326 python-flask
10327 python-markdown
10328 python-path-and-address
10329 python-pygments
10330 python-requests))
10331 (home-page "https://github.com/joeyespo/grip")
10332 (synopsis "Preview Markdown files using the GitHub API")
10333 (description
10334 "Grip is a command-line server application written in Python that uses
10335the GitHub Markdown API to render a local Markdown file. The styles and
10336rendering come directly from GitHub, so you'll know exactly how it will
10337appear. Changes you make to the file will be instantly reflected in the
10338browser without requiring a page refresh.")
10339 (license license:expat)))
10340
10341(define-public python-port-for
10342 (package
10343 (name "python-port-for")
10344 (version "0.7.4")
10345 (source
10346 (origin
10347 (method url-fetch)
10348 (uri (pypi-uri "port_for" version))
10349 (sha256
10350 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
10351 (build-system pyproject-build-system)
10352 (propagated-inputs
10353 (list python-urllib3))
10354 (native-inputs
10355 (list python-pytest python-setuptools python-wheel))
10356 (home-page "https://github.com/kmike/port-for/")
10357 (synopsis "TCP localhost port finder and association manager")
10358 (description
10359 "This package provides a utility that helps with local TCP ports
10360management. It can find an unused TCP localhost port and remember the
10361association.")
10362 (license license:expat)))
10363
10364(define-public python-livereload
10365 (package
10366 (name "python-livereload")
10367 (version "2.7.1")
10368 (source
10369 (origin
10370 (method git-fetch)
10371 (uri (git-reference
10372 (url "https://github.com/lepture/python-livereload")
10373 (commit (string-append "v" version))))
10374 (file-name (git-file-name name version))
10375 (sha256
10376 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
10377 (build-system pyproject-build-system)
10378 (arguments (list #:test-backend #~'unittest))
10379 (native-inputs (list python-django python-setuptools))
10380 (propagated-inputs (list python-tornado))
10381 (home-page "https://github.com/lepture/python-livereload")
10382 (synopsis "Python LiveReload")
10383 (description
10384 "Python LiveReload provides a command line utility, @command{livereload},
10385for starting a web server in a directory. It can trigger arbitrary commands
10386and serve updated contents upon changes to the directory.")
10387 (license license:bsd-3)))
10388
10389(define-public python-vf-1
10390 (package
10391 (name "python-vf-1")
10392 (version "1.0.0")
10393 (source
10394 (origin
10395 (method git-fetch)
10396 (uri (git-reference
10397 (url "https://git.sr.ht/~solderpunk/VF-1")
10398 (commit (string-append "v" version))))
10399 (file-name (git-file-name name version))
10400 (sha256
10401 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
10402 (build-system pyproject-build-system)
10403 (arguments (list #:tests? #f)) ; No tests.
10404 (native-inputs (list python-setuptools))
10405 (home-page "https://git.sr.ht/~solderpunk/VF-1")
10406 (synopsis "Command line gopher client")
10407 (description "@code{VF-1} is a command line gopher client with
10408@acronym{TLS, Transport Layer Security} support.")
10409 (license license:bsd-2)))
10410
10411(define-public python-httpcore
10412 (package
10413 (name "python-httpcore")
10414 (version "1.0.9")
10415 (source
10416 (origin
10417 ;; PyPI tarball does not contain tests.
10418 (method git-fetch)
10419 (uri (git-reference
10420 (url "https://github.com/encode/httpcore")
10421 (commit version)))
10422 (file-name (git-file-name name version))
10423 (sha256
10424 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
10425 (build-system pyproject-build-system)
10426 (native-inputs
10427 (list nss-certs-for-test
10428 python-hatch-fancy-pypi-readme
10429 python-hatchling
10430 python-pytest
10431 python-pytest-asyncio
10432 python-pytest-httpbin
10433 python-pytest-trio
10434 python-uvicorn
10435 python-trustme))
10436 (propagated-inputs
10437 (list python-anyio
10438 python-certifi
10439 python-h11
10440 python-h2
10441 python-sniffio
10442 python-socksio
10443 python-trio
10444 python-trio-typing))
10445 (home-page "https://github.com/encode/httpcore")
10446 (synopsis "Minimal, low-level HTTP client")
10447 (description
10448 "HTTP Core provides a minimal and low-level HTTP client, which does one
10449thing only: send HTTP requests.
10450
10451Some things HTTP Core does do:
10452
10453@itemize
10454@item Sending HTTP requests.
10455@item Provides both sync and async interfaces.
10456@item Supports HTTP/1.1 and HTTP/2.
10457@item Async backend support for asyncio and trio.
10458@item Automatic connection pooling.
10459@item HTTP(S) proxy support.
10460@end itemize")
10461 (license license:bsd-3)))
10462
10463;;; Variant used to break a cycle between python-httpx and python-uvicorn.
10464(define-public python-httpcore-bootstrap
10465 (hidden-package
10466 (package/inherit python-httpcore
10467 (name "python-httpcore-bootstrap")
10468 (arguments (list #:tests? #f))
10469 (native-inputs (list python-hatchling
10470 python-hatch-fancy-pypi-readme)))))
10471
10472(define-public python-httpx
10473 (package
10474 (name "python-httpx")
10475 (version "0.28.1")
10476 (source
10477 (origin
10478 ;; PyPI tarball does not contain tests.
10479 (method git-fetch)
10480 (uri (git-reference
10481 (url "https://github.com/encode/httpx")
10482 (commit version)))
10483 (file-name (git-file-name name version))
10484 (sha256
10485 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
10486 (build-system pyproject-build-system)
10487 (arguments
10488 (list
10489 ;; 1401 passed, 1 skipped, 5 deselected
10490 #:test-flags
10491 #~(list "-o" "asyncio_mode=auto"
10492 ;; CLI tests are broken.
10493 "--ignore=tests/test_main.py"
10494 "-k" (string-join
10495 ;; These tests try to open an outgoing connection.
10496 (list "not test_async_proxy_close"
10497 "test_sync_proxy_clos"
10498 "test_write_timeout")
10499 " and not "))))
10500 (native-inputs
10501 (list nss-certs-for-test
10502 python-chardet
10503 python-cryptography
10504 python-hatch-fancy-pypi-readme
10505 python-hatchling
10506 python-pytest
10507 python-pytest-asyncio
10508 python-pytest-trio
10509 python-setuptools
10510 python-trio
10511 python-trustme
10512 python-uvicorn))
10513 (propagated-inputs
10514 (list python-anyio
10515 python-certifi
10516 python-httpcore
10517 python-idna
10518 ;; [brotli]
10519 python-brotli
10520 ;; [http2]
10521 python-h2
10522 ;; [socks]
10523 python-socksio
10524 ;; [zstd]
10525 python-zstandard
10526 ;; For trio, see:
10527 ;; <https://github.com/python-trio/trio/issues/2802>.
10528 python-sniffio))
10529 (home-page "https://www.python-httpx.org/")
10530 (synopsis "HTTP client for Python")
10531 (description
10532 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
10533and async APIs, and support for both HTTP/1.1 and HTTP/2.
10534
10535HTTPX builds on the well-established usability of requests, and gives you:
10536
10537@itemize
10538@item A broadly requests-compatible API.
10539@item Standard synchronous interface, but with async support if you need it.
10540@item HTTP/1.1 and HTTP/2 support.
10541@item Ability to make requests directly to WSGI applications or ASGI applications.
10542@item Strict timeouts everywhere.
10543@item Fully type annotated.
10544@item 99% test coverage.
10545@end itemize
10546
10547Plus all the standard features of requests:
10548
10549@itemize
10550@item International Domains and URLs
10551@item Keep-Alive & Connection Pooling
10552@item Sessions with Cookie Persistence
10553@item Browser-style SSL Verification
10554@item Basic/Digest Authentication
10555@item Elegant Key/Value Cookies
10556@item Automatic Decompression
10557@item Automatic Content Decoding
10558@item Unicode Response Bodies
10559@item Multipart File Uploads
10560@item HTTP(S) Proxy Support
10561@item Connection Timeouts
10562@item Streaming Downloads
10563@item .netrc Support
10564@item Chunked Requests
10565@end itemize")
10566 (license license:bsd-3)))
10567
10568;;; Variant used to break a cycle with python-uvicorn.
10569(define-public python-httpx-bootstrap
10570 (hidden-package
10571 (package/inherit python-httpx
10572 (name "python-httpx-bootstrap")
10573 (arguments (list #:tests? #f))
10574 (native-inputs
10575 (list python-hatchling
10576 python-hatch-fancy-pypi-readme))
10577 (propagated-inputs
10578 (modify-inputs propagated-inputs
10579 (replace "python-httpcore" python-httpcore-bootstrap))))))
10580
10581(define-public python-httpx-sse
10582 (package
10583 (name "python-httpx-sse")
10584 (version "0.4.3")
10585 (source
10586 (origin
10587 (method git-fetch)
10588 (uri (git-reference
10589 (url "https://github.com/florimondmanca/httpx-sse")
10590 (commit version)))
10591 (file-name (git-file-name name version))
10592 (sha256
10593 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
10594 (build-system pyproject-build-system)
10595 (native-inputs
10596 (list python-pytest
10597 python-pytest-asyncio
10598 python-setuptools
10599 python-setuptools-scm
10600 python-sse-starlette))
10601 (propagated-inputs (list python-httpx))
10602 (home-page "https://github.com/florimondmanca/httpx-sse")
10603 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
10604 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
10605 (license license:expat)))
10606
10607(define-public python-httpx-ws
10608 (package
10609 (name "python-httpx-ws")
10610 (version "0.9.0")
10611 (source
10612 (origin
10613 (method git-fetch)
10614 (uri (git-reference
10615 (url "https://github.com/frankie567/httpx-ws")
10616 (commit (string-append "v" version))))
10617 (file-name (git-file-name name version))
10618 (sha256
10619 (base32 "1hin6fndvfnx3mjgy30x0ghgjalikxavyj24klcknnly9sqzg83v"))))
10620 (build-system pyproject-build-system)
10621 (propagated-inputs
10622 (list python-anyio
10623 python-httpcore
10624 python-httpx
10625 python-wsproto))
10626 (native-inputs
10627 (list nss-certs-for-test
10628 python-hatch-regex-commit
10629 python-hatchling
10630 python-pytest
10631 python-pytest-cov
10632 python-starlette
10633 python-uvicorn))
10634 (home-page "https://github.com/frankie567/httpx-ws")
10635 (synopsis "WebSockets support for HTTPX")
10636 (description "This package provides @code{WebSockets} support for HTTPX.")
10637 (license license:expat)))
10638
10639(define-public python-wsgiprox
10640 (package
10641 (name "python-wsgiprox")
10642 (version "1.5.2")
10643 (source
10644 (origin
10645 (method url-fetch)
10646 (uri (pypi-uri "wsgiprox" version))
10647 (sha256
10648 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
10649 (build-system pyproject-build-system)
10650 (arguments
10651 ;; The test suite hangs (see:
10652 ;; https://github.com/webrecorder/wsgiprox/issues/6).
10653 (list
10654 #:tests? #f
10655 #:phases
10656 #~(modify-phases %standard-phases
10657 (add-after 'unpack 'fix-pytest-argument
10658 (lambda _
10659 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
10660 (substitute* "setup.py"
10661 (("--doctest-module")
10662 "--doctest-modules")))))))
10663 (propagated-inputs
10664 (list python-certauth python-gevent python-websocket-client))
10665 (native-inputs
10666 (list python-mock python-waitress python-setuptools))
10667 (home-page "https://github.com/webrecorder/wsgiprox")
10668 (synopsis "HTTP/S proxy with WebSockets over WSGI")
10669 (description
10670 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
10671middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
10672The library accepts HTTP and HTTPS proxy connections, and routes them to a
10673designated prefix.")
10674 (license license:asl2.0)))
10675
10676(define-public python-warcio
10677 ;; The PyPI release is missing some test support files (see:
10678 ;; https://github.com/webrecorder/warcio/issues/132).
10679 (package
10680 (name "python-warcio")
10681 (version "1.8.1")
10682 (source
10683 (origin
10684 (method git-fetch)
10685 (uri (git-reference
10686 (url "https://github.com/webrecorder/warcio")
10687 (commit (string-append "v" version))))
10688 (file-name (git-file-name name version))
10689 (sha256
10690 (base32
10691 "19wwg7zmx33c942dbahdkng1byiwr4c9cd1ayrsh13f818n17zps"))))
10692 (build-system pyproject-build-system)
10693 (arguments
10694 (list
10695 #:test-flags ; These tests fail due to networking requirements.
10696 '(list "-k" (format #f "not ~a"
10697 (string-join
10698 '("test_post_chunked"
10699 "test_remote"
10700 "test_capture_http_proxy"
10701 "test_capture_https_proxy"
10702 "test_capture_https_proxy_same_session")
10703 " and not "))
10704 ; The following test requires the hookdns package.
10705 "--ignore=test/test_capture_http_proxy.py")))
10706 (native-inputs
10707 (list python-httpbin
10708 python-pytest
10709 python-requests
10710 python-setuptools
10711 python-wsgiprox))
10712 (home-page "https://github.com/webrecorder/warcio")
10713 (synopsis "Streaming web archival archive (WARC) library")
10714 (description "warcio is a Python library to read and write the WARC format
10715commonly used in Web archives. It is designed for fast, low-level access to
10716web archival content, oriented around a stream of WARC records rather than
10717files.")
10718 (license license:asl2.0)))
10719
10720(define-public python-websockets
10721 (package
10722 (name "python-websockets")
10723 (version "13.1")
10724 (source
10725 (origin
10726 (method git-fetch)
10727 (uri (git-reference
10728 (url "https://github.com/aaugustin/websockets")
10729 (commit version)))
10730 (file-name (git-file-name name version))
10731 (sha256
10732 (base32
10733 "1dx3rf6fmg4ir9cfcn1fil446qz879cwrjq2rcz5zvl71xkw6hb3"))))
10734 (build-system pyproject-build-system)
10735 (arguments
10736 (list #:test-backend #~'unittest
10737 #:phases
10738 #~(modify-phases %standard-phases
10739 (add-before 'check 'extend-test-timeout
10740 (lambda _
10741 ;; Some architectures need an even longer timeout. Make it
10742 ;; long enough that it should never fail due to timeout.
10743 #$@(if (target-riscv64?)
10744 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
10745 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
10746 (native-inputs
10747 (list python-setuptools
10748 python-wheel))
10749 (home-page "https://github.com/aaugustin/websockets")
10750 (synopsis
10751 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
10752 (description
10753 "@code{websockets} is a library for building WebSocket servers and clients
10754in Python with a focus on correctness and simplicity.
10755
10756Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
10757it provides an elegant coroutine-based API.")
10758 (license license:bsd-3)))
10759
10760(define-public selenium-manager
10761 (package
10762 (name "selenium-manager")
10763 (version "4.34.2")
10764 (source
10765 (origin
10766 (method git-fetch)
10767 (uri (git-reference
10768 (url "https://github.com/SeleniumHQ/selenium")
10769 (commit (string-append "selenium-" version "-python"))))
10770 (file-name (git-file-name name version))
10771 (sha256
10772 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
10773 (build-system cargo-build-system)
10774 (arguments
10775 (list
10776 ;; XXX: Almost all tests require either browsers or network access.
10777 #:tests? #f
10778 #:install-source? #f ; Most likely intended as a leaf.
10779 #:phases
10780 #~(modify-phases %standard-phases
10781 (add-after 'unpack 'chdir
10782 (lambda _
10783 (chdir "rust"))))))
10784 (native-inputs (list pkg-config))
10785 (inputs (cons* (list zstd "lib") xz
10786 (cargo-inputs 'selenium-manager)))
10787 (home-page "https://www.selenium.dev")
10788 (synopsis "CLI tool to manager the browser test infrastructure")
10789 (description
10790 "Selenium simplifies web browser automation. It specifically provides
10791infrastructure for the W3C WebDriver specification — a platform and
10792language-neutral coding interface compatible with all major web browsers.
10793
10794Selenium Manager is a CLI tool that automatically manages the browser/driver
10795infrastructure required by Selenium.")
10796 (license license:asl2.0)))
10797
10798(define-public python-selenium
10799 (package/inherit selenium-manager
10800 (name "python-selenium")
10801 (build-system pyproject-build-system)
10802 (arguments
10803 (list
10804 ;; XXX: Disable failing tests.
10805 #:test-flags
10806 #~(list "--ignore-glob=test/selenium/webdriver/*"
10807 ;; Probably requires those.
10808 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
10809 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
10810 ;; XXX: SSL certificates access.
10811 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
10812 "-k" "not test_missing_cdp_devtools_version_falls_back")
10813 #:phases
10814 #~(modify-phases %standard-phases
10815 (add-after 'unpack 'chdir
10816 (lambda _
10817 (chdir "py")))
10818 (add-after 'chdir 'inject-selenium-manager-binary
10819 (lambda* (#:key inputs #:allow-other-keys)
10820 (substitute* "selenium/webdriver/common/selenium_manager.py"
10821 (("compiled_path = Path.*")
10822 (format #f "return Path(~s)~%"
10823 (search-input-file inputs "bin/selenium-manager"))))
10824 (substitute* "pyproject.toml"
10825 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
10826 "")
10827 (("target = \"selenium\\.webdriver\\.common.*\"")
10828 ""))))
10829 (add-after 'chdir 'relax-requirements
10830 (lambda _
10831 (substitute* "pyproject.toml"
10832 (("\"(typing_extensions|trio)~=.*\"," _ target)
10833 (format #f "~s," target))))))))
10834 (propagated-inputs (list python-certifi
10835 python-trio
10836 python-trio-websocket
10837 python-typing-extensions
10838 python-urllib3
10839 python-websocket-client))
10840 (inputs (list selenium-manager))
10841 (native-inputs (list python-filetype
10842 python-pytest
10843 python-pytest-mock
10844 python-pytest-trio
10845 python-setuptools
10846 python-setuptools-rust))
10847 (synopsis "Python bindings for Selenium")
10848 (description
10849 "Selenium enables web browser automation. It specifically provides
10850infrastructure for the W3C WebDriver specification — a platform and
10851language-neutral coding interface compatible with all major web browsers.")))
10852
10853(define-public python-rapidjson
10854 (package
10855 (name "python-rapidjson")
10856 (version "1.23")
10857 (source
10858 (origin
10859 (method git-fetch)
10860 (uri (git-reference
10861 (url "https://github.com/python-rapidjson/python-rapidjson")
10862 (commit (string-append "v" version))))
10863 (file-name (git-file-name name version))
10864 (sha256
10865 (base32 "0ajf919gg3qmi68jb0m6v80al2n65cn2ac36qz46s0h6zh92cl86"))
10866 (modules '((guix build utils)))
10867 (snippet
10868 '(delete-file-recursively "rapidjson"))))
10869 (build-system pyproject-build-system)
10870 (arguments
10871 (list
10872 #:test-flags '(list "tests")
10873 #:phases
10874 #~(modify-phases %standard-phases
10875 ;; We cannot seem to use #:configure-flags with the
10876 ;; pyproject-build-system to override rj_include_dir.
10877 (add-after 'unpack 'override-rapidjson-sources
10878 (lambda _
10879 (substitute* "setup.py"
10880 (("^rj_include_dir =.*")
10881 (string-append "rj_include_dir = '"
10882 #$(this-package-native-input "rapidjson")
10883 "/include/rapidjson" "'"))
10884 (("if not os.path.isdir.*") "if False:")))))))
10885 (native-inputs
10886 (list rapidjson python-pytest python-pytz python-setuptools))
10887 (home-page "https://github.com/python-rapidjson/python-rapidjson")
10888 (synopsis "Python wrapper around rapidjson")
10889 (description "This package provides a python wrapper around rapidjson.")
10890 (license license:expat)))
10891
10892(define-public python-venusian
10893 (package
10894 (name "python-venusian")
10895 (version "3.1.1")
10896 (source
10897 (origin
10898 (method url-fetch)
10899 (uri (pypi-uri "venusian" version))
10900 (sha256
10901 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
10902 (build-system pyproject-build-system)
10903 (native-inputs
10904 (list python-pytest
10905 python-setuptools))
10906 (home-page "https://docs.pylonsproject.org/projects/venusian")
10907 (synopsis "Library for deferring decorator actions")
10908 (description
10909 "Venusian is a library which allows framework authors to defer decorator
10910actions. Instead of taking actions when a function (or class) decorator is
10911executed at import time, you can defer the action usually taken by the
10912decorator until a separate scan phase.")
10913 (license license:repoze)))
10914
10915(define-public python-zope-deprecation
10916 (package
10917 (name "python-zope-deprecation")
10918 (version "6.0")
10919 (source (origin
10920 (method url-fetch)
10921 (uri (pypi-uri "zope_deprecation" version))
10922 (sha256
10923 (base32
10924 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
10925 (build-system pyproject-build-system)
10926 (arguments
10927 (list #:tests? #f)) ;no tests in PyPI
10928 (native-inputs
10929 (list python-setuptools))
10930 (home-page "https://zopedeprecation.readthedocs.io/")
10931 (synopsis "Function for marking deprecations")
10932 (description "The @code{zope.deprecation} module provides a function for
10933marking modules, classes, functions, methods and properties as deprecated,
10934displaying warnings when usaged in application code.")
10935 (license license:zpl2.1)))
10936
10937(define-public python-translationstring
10938 (package
10939 (name "python-translationstring")
10940 (version "1.4")
10941 (source (origin
10942 (method url-fetch)
10943 (uri (pypi-uri "translationstring" version))
10944 (sha256
10945 (base32
10946 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
10947 (build-system pyproject-build-system)
10948 (native-inputs
10949 (list python-pytest
10950 python-setuptools))
10951 (home-page "https://docs.pylonsproject.org/projects/translationstring")
10952 (synopsis "Internationalization tooling for the Pylons project")
10953 (description "This package provides a library used by various Pylons
10954project packages for internationalization (i18n) duties related to
10955translation.")
10956 (license license:repoze)))
10957
10958(define-public python-plaster
10959 (package
10960 (name "python-plaster")
10961 (version "1.1.2")
10962 (source (origin
10963 (method url-fetch)
10964 (uri (pypi-uri "plaster" version))
10965 (sha256
10966 (base32
10967 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
10968 (build-system pyproject-build-system)
10969 (native-inputs
10970 (list python-pytest
10971 python-setuptools))
10972 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
10973 (synopsis "Configuration loader for multiple config file formats")
10974 (description
10975 "Plaster is a loader interface around multiple config file formats. It
10976exists to define a common API for applications to use when they wish to load
10977configuration. The library itself does not aim to handle anything except a
10978basic API that applications may use to find and load configuration settings.
10979Any specific constraints should be implemented in a pluggable loader which can
10980be registered via an entrypoint.")
10981 (license license:repoze)))
10982
10983(define-public python-plaster-pastedeploy
10984 (package
10985 (name "python-plaster-pastedeploy")
10986 (version "1.0.1")
10987 (source (origin
10988 (method url-fetch)
10989 (uri (pypi-uri "plaster_pastedeploy" version))
10990 (sha256
10991 (base32
10992 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
10993 (build-system pyproject-build-system)
10994 (native-inputs
10995 (list python-pytest
10996 python-setuptools))
10997 (propagated-inputs
10998 (list python-plaster python-pastedeploy))
10999 (home-page "https://github.com/Pylons/plaster_pastedeploy")
11000 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
11001 (description
11002 "This plugin for @code{python-plaster} adds support for PasteDeploy
11003syntax, it provides a plaster @code{Loader} object that can parse ini files
11004according to the standard set by PasteDeploy")
11005 (license license:expat)))
11006
11007(define-public python-hupper
11008 (package
11009 (name "python-hupper")
11010 (version "1.12.1")
11011 (source
11012 (origin
11013 (method url-fetch)
11014 (uri (pypi-uri "hupper" version))
11015 (sha256
11016 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
11017 (build-system pyproject-build-system)
11018 (arguments
11019 (list
11020 ;; RuntimeError: timeout waiting for change to
11021 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
11022 #:test-flags #~(list "--ignore=tests/test_it.py")))
11023 (native-inputs
11024 (list python-pytest python-setuptools python-wheel))
11025 (propagated-inputs
11026 (list python-watchdog))
11027 (home-page "https://readthedocs.org/projects/hupper")
11028 (synopsis "Integrated process monitor tracking changes to imported Python files")
11029 (description
11030 "Hupper is an integrated process monitor that will track changes to any
11031imported Python files in sys.modules as well as custom paths. When files are
11032changed the process is restarted.")
11033 (license license:expat)))
11034
11035(define-public python-pyowm
11036 (package
11037 (name "python-pyowm")
11038 (version "3.3.0")
11039 (source
11040 (origin
11041 (method git-fetch)
11042 (uri (git-reference
11043 (url "https://github.com/csparpa/pyowm")
11044 (commit version)))
11045 (file-name (git-file-name name version))
11046 (sha256
11047 (base32
11048 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
11049 (build-system pyproject-build-system)
11050 (arguments (list #:test-flags #~(list "tests/unit")))
11051 (native-inputs (list python-pytest python-setuptools python-wheel))
11052 (propagated-inputs
11053 (list python-geojson-for-pyowm
11054 python-pysocks
11055 python-requests))
11056 (home-page "https://github.com/csparpa/pyowm")
11057 (synopsis "Python wrapper around OpenWeatherMap web APIs")
11058 (description
11059 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
11060 (license license:expat)))
11061
11062(define-public python-pyramid
11063 (package
11064 (name "python-pyramid")
11065 (version "2.0.2")
11066 (source (origin
11067 (method url-fetch)
11068 (uri (pypi-uri "pyramid" version))
11069 (sha256
11070 (base32
11071 "1phqdz068hl3zda263qkjp5am8fmvmpcxp3nrhsna8g472kkh89p"))))
11072 (build-system pyproject-build-system)
11073 (propagated-inputs
11074 (list python-hupper
11075 python-plaster
11076 python-plaster-pastedeploy
11077 python-setuptools
11078 python-translationstring
11079 python-venusian
11080 python-webob
11081 python-zope-component
11082 python-zope-deprecation
11083 python-zope-interface))
11084 (native-inputs (list python-pytest python-webtest python-wheel))
11085 (home-page "https://trypyramid.com/")
11086 (synopsis "Python web-framework suitable for small and large sites")
11087 (description
11088 "Pyramid makes it easy to write web applications. From minimal
11089request/response web apps to larger, grown applications.")
11090 (license license:repoze)))
11091
11092(define-public python-pyramid-chameleon
11093 ;; PyPI lacks a fresh release, use the latest commit associated with
11094 ;; unrleased version, see:
11095 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
11096 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
11097 (revision "0"))
11098 (package
11099 (name "python-pyramid-chameleon")
11100 (version (git-version "0.4.dev0" revision commit))
11101 (source
11102 (origin
11103 (method git-fetch)
11104 (uri (git-reference
11105 (url "https://github.com/Pylons/pyramid_chameleon")
11106 (commit commit)))
11107 (file-name (git-file-name name version))
11108 (sha256
11109 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
11110 (build-system pyproject-build-system)
11111 (native-inputs
11112 (list python-pytest
11113 python-setuptools))
11114 (propagated-inputs
11115 (list python-chameleon
11116 python-pyramid))
11117 (home-page "https://github.com/Pylons/pyramid_chameleon")
11118 (synopsis "Chameleon template compiler for pyramid")
11119 (description
11120 "These package provides bindings for the Chameleon templating system
11121 for the Pyramid web framework.")
11122 (license license:repoze))))
11123
11124(define-public python-pyramid-debugtoolbar
11125 (package
11126 (name "python-pyramid-debugtoolbar")
11127 (version "4.12.1")
11128 (source
11129 (origin
11130 (method url-fetch)
11131 (uri (pypi-uri "pyramid_debugtoolbar" version))
11132 (sha256
11133 (base32 "0gdlc7vcga4vzma53h5csnhh4gwfmv3w8v9y5fhwqpy8979qis3i"))))
11134 (build-system pyproject-build-system)
11135 (arguments
11136 (list
11137 #:test-flags
11138 ;; Large diff assertion not equal faileurs.
11139 #~(list #$@(map (lambda (test)
11140 (string-append "--deselect=tests"
11141 "/test_panels/test_sqla.py::" test))
11142 (list "TestSimpleSelect::test_panel"
11143 "TestTransactionCommit::test_panel"
11144 "TestTransactionRollback::test_panel")))))
11145 (native-inputs
11146 (list python-pytest
11147 python-setuptools
11148 python-webtest))
11149 (propagated-inputs
11150 (list python-pyramid
11151 python-pyramid-chameleon
11152 python-pyramid-jinja2
11153 python-pyramid-mako
11154 ;; python-selenium ; see: guix/guix#3478
11155 python-sqlalchemy
11156 python-waitress))
11157 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
11158 (synopsis "Pyramid debug toolbar")
11159 (description
11160 "This package provides an interactive HTML debugger for Pyramid application
11161development.")
11162 (license license:bsd-3)))
11163
11164(define-public python-pyramid-jinja2
11165 (package
11166 (name "python-pyramid-jinja2")
11167 (version "2.10.1")
11168 (source
11169 (origin
11170 (method url-fetch)
11171 (uri (pypi-uri "pyramid_jinja2" version))
11172 (sha256
11173 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
11174 (build-system pyproject-build-system)
11175 (arguments
11176 (list
11177 #:test-flags
11178 ;; Two tests failed with assertion not equal.
11179 #~(list "-k" "not test_it_relative_to_package and not test_options")))
11180 (native-inputs
11181 (list python-pytest
11182 python-setuptools
11183 python-webtest))
11184 (propagated-inputs
11185 (list python-jinja2
11186 python-markupsafe
11187 python-pyramid
11188 python-zope-deprecation))
11189 (home-page "https://github.com/Pylons/pyramid_jinja2")
11190 (synopsis "Jinja2 template bindings for the Pyramid web framework")
11191 (description "This package provides Jinja2 template bindings for the
11192Pyramid web framework.")
11193 (license license:repoze)))
11194
11195(define-public python-pyramid-mako
11196 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
11197 ;; master, us the latest commit for now.
11198 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
11199 (revision "0"))
11200 (package
11201 (name "python-pyramid-mako")
11202 (version (git-version "1.1.0" revision commit))
11203 (source
11204 (origin
11205 (method git-fetch)
11206 (uri (git-reference
11207 (url "https://github.com/Pylons/pyramid_mako")
11208 (commit commit)))
11209 (file-name (git-file-name name version))
11210 (sha256
11211 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
11212 (build-system pyproject-build-system)
11213 (native-inputs
11214 (list python-pytest
11215 python-setuptools))
11216 (propagated-inputs
11217 (list python-mako
11218 python-pyramid))
11219 (home-page "https://github.com/Pylons/pyramid_mako")
11220 (synopsis "Mako template bindings for the Pyramid web framework")
11221 (description
11222 "This package provides Mako template bindings for the Pyramid web
11223framework.")
11224 (license license:repoze))))
11225
11226(define-public python-pyramid-retry
11227 (package
11228 (name "python-pyramid-retry")
11229 (version "2.1.1")
11230 (source
11231 (origin
11232 (method url-fetch)
11233 (uri (pypi-uri "pyramid_retry" version))
11234 (sha256
11235 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
11236 (build-system pyproject-build-system)
11237 (native-inputs
11238 (list python-pytest
11239 python-setuptools
11240 python-webtest))
11241 (propagated-inputs
11242 (list python-pyramid
11243 python-zope-interface))
11244 (home-page "https://github.com/Pylons/pyramid_retry")
11245 (synopsis "Pyramid execution policy supporting retrying failed requests")
11246 (description
11247 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
11248and can retry them a configurable number of times under certain \"retryable\"
11249error conditions before indicating a failure to the client.")
11250 (license license:expat)))
11251
11252(define-public python-pyramid-tm
11253 (package
11254 (name "python-pyramid-tm")
11255 (version "2.6")
11256 (source
11257 (origin
11258 (method url-fetch)
11259 (uri (pypi-uri "pyramid_tm" version))
11260 (sha256
11261 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
11262 (build-system pyproject-build-system)
11263 (native-inputs
11264 (list python-pytest
11265 python-setuptools
11266 python-webtest))
11267 (propagated-inputs
11268 (list python-pyramid
11269 python-transaction))
11270 (home-page "https://github.com/Pylons/pyramid_tm")
11271 (synopsis "Centralized transaction management for Pyramid")
11272 (description
11273 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
11274active @url{https://pypi.org/project/transaction/, transaction} as provided by
11275the Python transaction package.")
11276 (license license:repoze)))
11277
11278(define-public python-random-user-agent
11279 (package
11280 (name "python-random-user-agent")
11281 (version "1.0.1")
11282 (source
11283 (origin
11284 (method url-fetch)
11285 (uri (pypi-uri "random_user_agent" version))
11286 (sha256
11287 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
11288 (build-system pyproject-build-system)
11289 (arguments (list #:tests? #f)) ; No tests.
11290 (native-inputs (list python-setuptools))
11291 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
11292 (synopsis "List of user agents")
11293 (description
11294 "This package provides a list of user agents, from a collection of more
11295than 326,000 known user-agents. Users can pick a random one, or select one
11296based on filters.")
11297 (license license:expat)))
11298
11299(define-public python-rangehttpserver
11300 (package
11301 (name "python-rangehttpserver")
11302 (version "1.4.0")
11303 (source
11304 (origin
11305 (method git-fetch)
11306 (uri (git-reference
11307 (url "https://github.com/danvk/RangeHTTPServer")
11308 (commit version)))
11309 (file-name (git-file-name name version))
11310 (sha256
11311 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
11312 (build-system pyproject-build-system)
11313 (native-inputs
11314 (list python-pytest
11315 python-requests
11316 python-setuptools))
11317 (home-page "https://github.com/danvk/RangeHTTPServer")
11318 (synopsis "SimpleHTTPServer with support for range requests")
11319 (description
11320 "This tool provides a simple HTTP server with support for Range
11321requests.")
11322 (license license:asl2.0)))
11323
11324(define-public python-flask-restx
11325 (package
11326 (name "python-flask-restx")
11327 (version "1.3.0")
11328 (source
11329 (origin
11330 (method git-fetch) ;no tests in PyPI archive
11331 (uri (git-reference
11332 (url "https://github.com/python-restx/flask-restx")
11333 (commit version)))
11334 (file-name (git-file-name name version))
11335 (sha256
11336 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
11337 (build-system pyproject-build-system)
11338 (arguments
11339 (list
11340 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
11341 #:test-flags
11342 #~(list "--benchmark-skip"
11343 ;; ValueError: http://www.google.com is not a valid URL. Domain
11344 ;; does not exists.
11345 "--deselect=tests/test_inputs.py::URLTest::test_check"
11346 "-k" (string-join
11347 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
11348 (list "not test_rfc822_value"
11349 "test_iso8601_value"
11350 ;; assert 404 == 2000
11351 "test_specs_endpoint_host_and_subdomain"
11352 ;; ValueError: [email protected] is not a valid email
11353 "test_valid_value_check")
11354 " and not "))))
11355 (native-inputs
11356 (list python-blinker
11357 python-faker
11358 python-pytest
11359 python-pytest-benchmark
11360 python-pytest-flask
11361 python-pytest-mock
11362 python-setuptools))
11363 (propagated-inputs
11364 (list python-aniso8601
11365 python-flask
11366 python-importlib-resources
11367 python-jsonschema
11368 python-pytz
11369 python-werkzeug))
11370 (home-page "https://github.com/python-restx/flask-restx")
11371 (synopsis
11372 "Framework for fast, easy and documented API development with Flask")
11373 (description
11374 "Flask-RESTX is an extension for Flask that adds support for quickly building
11375REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
11376 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
11377decorators and tools to describe your API and expose its documentation properly using
11378Swagger.")
11379 (license license:bsd-3)))
11380
11381(define-deprecated-package python-flask-restplus
11382 python-flask-restx)
11383
11384(define-public python-flask-socketio
11385 (package
11386 (name "python-flask-socketio")
11387 (version "5.5.1")
11388 (source
11389 (origin
11390 (method url-fetch)
11391 (uri (pypi-uri "flask_socketio" version))
11392 (sha256
11393 (base32
11394 "1i0yqn39b4v4r2whppx47sg7iicvqzssd1clx7cclk07l52cjinr"))))
11395 (build-system pyproject-build-system)
11396 (propagated-inputs
11397 (list python-flask python-socketio))
11398 (native-inputs
11399 (list python-pytest python-redis python-setuptools python-wheel))
11400 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
11401 (synopsis "Socket.IO integration for Flask applications")
11402 (description "Socket.IO integration for Flask applications")
11403 (license license:expat)))
11404
11405(define-public python-manuel
11406 (package
11407 (name "python-manuel")
11408 (version "1.13.0")
11409 (source
11410 (origin
11411 (method url-fetch)
11412 (uri (pypi-uri "manuel" version))
11413 (sha256
11414 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
11415 (build-system pyproject-build-system)
11416 (arguments
11417 (list
11418 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
11419 #:tests? #f))
11420 (propagated-inputs
11421 (list python-setuptools)) ;install requires
11422 (home-page "https://pypi.org/project/manuel/")
11423 (synopsis "Build tested documentation")
11424 (description
11425 "Manuel lets you mix and match traditional doctests with custom test syntax.")
11426 (license license:asl2.0)))
11427
11428(define-public python-marshmallow-jsonapi
11429 (package
11430 (name "python-marshmallow-jsonapi")
11431 (version "0.26.0")
11432 (source
11433 (origin
11434 (method git-fetch)
11435 (uri (git-reference
11436 ;; XXX: Deprecated upstream: This repository has been archived
11437 ;; by the owner on Jun 6, 2024. It is now read-only.
11438 ;; Using a maintained fork. The pypi name of this fork
11439 ;; is marshmallow-jsonapi-minfork.
11440 (url "https://github.com/tadams42/marshmallow-jsonapi")
11441 (commit version)))
11442 (file-name (git-file-name name version))
11443 (sha256
11444 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
11445 (build-system pyproject-build-system)
11446 (native-inputs
11447 (list python-faker
11448 python-flask
11449 python-pytest
11450 python-setuptools))
11451 (propagated-inputs (list python-marshmallow))
11452 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
11453 (synopsis "JSON:API 1.0 formatting with Marshmallow")
11454 (description
11455 "The marshmallow-jsonapi package provides a simple way to produce
11456@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
11457framework. It includes optional utilities to integrate with Flask. This is a
11458forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
11459 (license license:expat)))
11460
11461(define-public python-pecan
11462 (package
11463 (name "python-pecan")
11464 (version "1.8.0")
11465 (source
11466 (origin
11467 (method git-fetch)
11468 (uri (git-reference
11469 (url "https://github.com/pecan/pecan")
11470 (commit version)))
11471 (file-name (git-file-name name version))
11472 (sha256
11473 (base32 "0w693jpnjy358992f3jrrlf31knkqn0jvz2jx0iz7ziikprc61p8"))))
11474 (build-system pyproject-build-system)
11475 (arguments
11476 (list
11477 #:test-flags '(list "--pyargs" "pecan")))
11478 (native-inputs
11479 (list gunicorn
11480 python-genshi
11481 python-jinja2
11482 python-pytest
11483 python-sqlalchemy-2
11484 python-webtest))
11485 (propagated-inputs
11486 (list python-mako
11487 python-webob))
11488 (home-page "http://github.com/pecan/pecan")
11489 (synopsis "WSGI object-dispatching web framework")
11490 (description "This package provides a WSGI object-dispatching web
11491framework, designed to be lean and fast, with few dependencies.")
11492 (license license:bsd-3)))
11493
11494(define-public python-persistent
11495 (package
11496 (name "python-persistent")
11497 (version "6.1.1")
11498 (source
11499 (origin
11500 (method git-fetch)
11501 (uri (git-reference
11502 (url "https://github.com/zopefoundation/persistent/")
11503 (commit version)))
11504 (file-name (git-file-name name version))
11505 (sha256
11506 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
11507 (build-system pyproject-build-system)
11508 (arguments
11509 (list
11510 #:phases
11511 #~(modify-phases %standard-phases
11512 (replace 'check
11513 (lambda* (#:key tests? #:allow-other-keys)
11514 (if tests?
11515 (invoke "zope-testrunner" "--test-path=src"
11516 ;; XXX: Ignore doc tests.
11517 "!persistent.tests.test_docs")
11518 (format #t "test suite not run~%")))))))
11519 (propagated-inputs
11520 (list python-cffi
11521 python-zope-deferredimport
11522 python-zope-interface
11523 python-zope-testrunner))
11524 (native-inputs
11525 (list python-manuel python-zope-testrunner python-setuptools))
11526 (home-page "https://github.com/zopefoundation/persistent/")
11527 (synopsis "Translucent persistent objects")
11528 (description
11529 "This package contains a generic persistence implementation for Python.
11530It forms the core protocol for making objects interact \"transparently\" with
11531a database such as the ZODB.")
11532 (license license:zpl2.1)))
11533
11534(define-public python-btrees
11535 (package
11536 (name "python-btrees")
11537 (version "6.1")
11538 (source
11539 (origin
11540 (method git-fetch)
11541 (uri (git-reference
11542 (url "https://github.com/zopefoundation/BTrees")
11543 (commit version)))
11544 (file-name (git-file-name name version))
11545 (sha256
11546 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
11547 (build-system pyproject-build-system)
11548 (arguments
11549 (list
11550 #:phases
11551 #~(modify-phases %standard-phases
11552 (replace 'check
11553 (lambda* (#:key tests? #:allow-other-keys)
11554 (if tests?
11555 (invoke "zope-testrunner" "--test-path=src")
11556 (format #t "test suite not run~%")))))))
11557 (propagated-inputs (list python-persistent python-zope-interface))
11558 (native-inputs (list python-persistent python-transaction
11559 python-zope-testrunner python-setuptools))
11560 (home-page "https://github.com/zopefoundation/BTrees")
11561 (synopsis "Scalable persistent object containers")
11562 (description
11563 "This package contains a set of persistent object containers built around a
11564modified BTree data structure. The trees are optimized for use inside ZODB's
11565\"optimistic concurrency\" paradigm, and include explicit resolution of
11566conflicts detected by that mechanism.")
11567 (license license:zpl2.1)))
11568
11569(define-public python-transaction
11570 (package
11571 (name "python-transaction")
11572 (version "5.0")
11573 (source
11574 (origin
11575 (method url-fetch)
11576 (uri (pypi-uri "transaction" version))
11577 (sha256
11578 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
11579 (build-system pyproject-build-system)
11580 (native-inputs
11581 (list python-pytest
11582 python-setuptools))
11583 (propagated-inputs
11584 (list python-zope-interface))
11585 (home-page "https://github.com/zopefoundation/transaction")
11586 (synopsis "Transaction management for Python")
11587 (description "This package contains a generic transaction implementation
11588for Python. It is mainly used by the ZODB.")
11589 (license license:zpl2.1)))
11590
11591(define-public python-truststore
11592 (package
11593 (name "python-truststore")
11594 (version "0.10.4")
11595 (source
11596 (origin
11597 (method url-fetch)
11598 (uri (pypi-uri "truststore" version))
11599 (sha256
11600 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
11601 (build-system pyproject-build-system)
11602 (arguments
11603 (list #:tests? #f)) ;all tests require Internet access
11604 (native-inputs
11605 (list python-flit-core))
11606 (home-page "https://github.com/sethmlarson/truststore")
11607 (synopsis "Verify certificates using native system trust stores")
11608 (description
11609 "Truststore is a library which exposes native system certificate stores (ie
11610\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
11611Python applications no longer need to rely on certifi as a root certificate
11612store.")
11613 (license license:expat)))
11614
11615(define-public python-robot-detection
11616 (package
11617 (name "python-robot-detection")
11618 (version "0.4.0")
11619 (source
11620 (origin
11621 (method git-fetch)
11622 (uri (git-reference
11623 (url "https://github.com/rory/robot-detection")
11624 (commit (string-append "v" version))))
11625 (file-name (git-file-name name version))
11626 (sha256
11627 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
11628 (build-system pyproject-build-system)
11629 (arguments (list #:test-backend #~'unittest))
11630 (native-inputs (list python-setuptools))
11631 (propagated-inputs (list python-six))
11632 (home-page "https://github.com/rory/robot-detection")
11633 (synopsis "Detect web crawlers")
11634 (description
11635 "@code{robot_detection} is a python module to detect if a given HTTP User
11636Agent is a web crawler. It uses the list of registered robots from
11637@url{http://www.robotstxt.org}.")
11638 (license license:gpl3+)))
11639
11640(define-public python-robotframework-requests
11641 (package
11642 (name "python-robotframework-requests")
11643 (version "0.9.7")
11644 (source
11645 (origin
11646 (method git-fetch) ; no tests in PyPI release
11647 (uri (git-reference
11648 (url "https://github.com/MarketSquare/robotframework-requests")
11649 (commit (string-append "v" version))))
11650 (file-name (git-file-name name version))
11651 (sha256
11652 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
11653 (build-system pyproject-build-system)
11654 (native-inputs
11655 (list python-pytest
11656 python-setuptools
11657 python-wheel))
11658 (propagated-inputs
11659 (list python-requests
11660 python-robotframework))
11661 (home-page "https://github.com/MarketSquare/robotframework-requests")
11662 (synopsis "Robot Framework keyword library wrapper around requests")
11663 (description
11664 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
11665Framework} library aimed to provide HTTP API testing functionalities by
11666wrapping the @code{requests} Python library.")
11667 (license license:expat)))
11668
11669(define-public python-pysolr
11670 (package
11671 (name "python-pysolr")
11672 (version "3.10.0")
11673 (source
11674 (origin
11675 (method url-fetch)
11676 (uri (pypi-uri "pysolr" version))
11677 (sha256
11678 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
11679 (build-system pyproject-build-system)
11680 (arguments
11681 '(#:tests? #f)) ; Tests require network access.
11682 (native-inputs
11683 (list python-setuptools
11684 python-setuptools-scm
11685 python-wheel))
11686 (propagated-inputs
11687 (list python-requests))
11688 (home-page "https://github.com/django-haystack/pysolr/")
11689 (synopsis "Lightweight python wrapper for Apache Solr")
11690 (description
11691 "This module provides an interface that queries the Apache Solr server
11692using a pure Python implementation.")
11693 (license license:bsd-3)))
11694
11695(define-public python-pyjsparser
11696 ;; XXX: This project is potentially abandonware, consider to remove in next
11697 ;; refresh cycle, see:
11698 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
11699 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
11700 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
11701 (package
11702 (name "python-pyjsparser")
11703 (version "2.7.1")
11704 (source
11705 (origin
11706 (method url-fetch)
11707 (uri (pypi-uri "pyjsparser" version))
11708 (sha256
11709 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
11710 (build-system pyproject-build-system)
11711 (arguments
11712 '(#:tests? #f)) ;no tests in PyPI
11713 (native-inputs (list python-setuptools))
11714 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
11715 (synopsis "Fast JavaScript parser")
11716 (description
11717 "This package provides a fast JavaScript parser (based on esprima.js)")
11718 (license license:expat)))
11719
11720(define-public python-js2py
11721 (package
11722 (name "python-js2py")
11723 (properties '((commit . "2e017b86e2f18a6c8a842293b1687f2ce7baa12e")
11724 (revision . "0")))
11725 (version (git-version "0.74"
11726 (assoc-ref properties 'revision)
11727 (assoc-ref properties 'commit)))
11728 (source
11729 (origin
11730 (method git-fetch)
11731 (uri (git-reference
11732 (url "https://github.com/PiotrDabkowski/Js2Py")
11733 (commit (assoc-ref properties 'commit))))
11734 (file-name (git-file-name name version))
11735 (sha256
11736 (base32 "0rsac03shkm0yxq91hzxdvhb96wy168bxdw8azi25bvlm8s3l27p"))
11737 (patches
11738 (list
11739 (origin
11740 (method url-fetch)
11741 (uri (string-append "https://github.com/PiotrDabkowski/Js2Py/commit"
11742 "/fd7df4a91fb08060914c7b1d9e94583d18f3371b"
11743 ".patch"))
11744 (file-name (string-append name "-" version "-pull-327.patch"))
11745 (sha256
11746 (base32 "14v89v8qqrsq0d63xbilkvx19l1rk59mlrbxvd4sj138lk7160ki")))))))
11747 (build-system pyproject-build-system)
11748 (arguments
11749 (list #:tests? #f)) ; tests require Node
11750 (native-inputs
11751 (list python-setuptools))
11752 (propagated-inputs
11753 (list python-pyjsparser
11754 python-six
11755 python-tzlocal))
11756 (home-page "https://github.com/PiotrDabkowski/Js2Py")
11757 (synopsis "JavaScript to Python translator")
11758 (description
11759 "This package provides a JavaScript to Python translator and a JavaScript
11760interpreter written in pure Python.")
11761 (license license:expat)))
11762
11763(define-public python-http-ece
11764 (package
11765 (name "python-http-ece")
11766 (version "1.2.1")
11767 (source
11768 (origin
11769 (method git-fetch)
11770 (uri (git-reference
11771 (url "https://github.com/web-push-libs/encrypted-content-encoding")
11772 (commit (string-append "v" version))))
11773 (file-name (git-file-name name version))
11774 (sha256
11775 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
11776 (build-system pyproject-build-system)
11777 (arguments
11778 `(#:phases
11779 (modify-phases %standard-phases
11780 (add-after 'unpack 'change-directory
11781 (lambda _ (chdir "python") #t)))))
11782 (native-inputs
11783 (list python-pytest python-setuptools))
11784 (propagated-inputs
11785 (list python-cryptography))
11786 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
11787 (synopsis "Encrypted Content Encoding for HTTP")
11788 (description
11789 "This package provides a simple implementation of Encrypted Content
11790Encoding for HTTP.")
11791 (license license:expat)))
11792
11793(define-public python-cloud-init
11794 (package
11795 (name "python-cloud-init")
11796 (version "24.2")
11797 (source
11798 (origin
11799 (method git-fetch)
11800 (uri (git-reference
11801 (url "https://github.com/canonical/cloud-init")
11802 (commit version)))
11803 (file-name (git-file-name name version))
11804 (sha256
11805 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
11806 (build-system pyproject-build-system)
11807 (arguments
11808 (list
11809 #:test-flags
11810 '(list
11811 ;; This requires usermod
11812 "--ignore=tests/unittests/distros/test_create_users.py"
11813 ;; This writes to /var
11814 "--ignore=tests/unittests/net/test_dhcp.py"
11815 "-k"
11816 (string-append
11817 ;; This test messes with PATH, so it cannot find mkdir
11818 "not test_path_env_gets_set_from_main"
11819 " and not test_apt_configure_sources_list_"
11820 ;; These all fail because /bin/sh doesn't exist. We cannot patch
11821 ;; this because the generated scripts must use /bin/sh as they are
11822 ;; supposed to be run on minimal systems.
11823 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
11824 " and not test_handler_runs_bootcmd_script_with_error"
11825 " and not test_subp_combined_stderr_stdout"
11826 " and not test_handle_part"))
11827 #:phases
11828 #~(modify-phases %standard-phases
11829 (add-after 'unpack 'patch-references
11830 (lambda _
11831 (substitute* "tests/unittests/cmd/test_clean.py"
11832 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
11833 (add-after 'install 'move-files
11834 (lambda* (#:key inputs outputs #:allow-other-keys)
11835 (for-each (lambda (dir)
11836 (let ((source (string-append (site-packages inputs outputs) "/" dir))
11837 (target (string-append #$output "/" (basename dir))))
11838 (copy-recursively source target)
11839 (delete-file-recursively source)))
11840 (list "etc" "lib" "usr/lib" "usr/share")))))))
11841 (propagated-inputs
11842 (list python-configobj
11843 python-jinja2
11844 python-jsonpatch
11845 python-jsonschema
11846 python-netifaces
11847 python-oauthlib
11848 python-pyserial
11849 python-pyyaml
11850 python-responses))
11851 (native-inputs
11852 (list procps ;for ps when running tests
11853 python-pytest
11854 python-pytest-mock
11855 python-passlib
11856 python-setuptools
11857 python-wheel))
11858 (home-page "https://github.com/canonical/cloud-init")
11859 (synopsis "Cloud instance initialization tools")
11860 (description
11861 "Cloud-init is the multi-distribution method for cross-platform cloud
11862instance initialization. It is supported across all major public cloud
11863providers, provisioning systems for private cloud infrastructure, and
11864bare-metal installations.")
11865 ;; Either license can be chosen
11866 (license (list license:asl2.0 license:gpl3))))
11867
11868(define-public python-cloudscraper
11869 (package
11870 (name "python-cloudscraper")
11871 (version "3.0.0")
11872 (source
11873 (origin
11874 (method git-fetch)
11875 (uri (git-reference
11876 (url "https://github.com/VeNoMouS/cloudscraper")
11877 (commit version)))
11878 (file-name (git-file-name name version))
11879 (sha256
11880 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
11881 (modules '((guix build utils)))
11882 (snippet
11883 '(with-directory-excursion "cloudscraper"
11884 (for-each delete-file
11885 '("captcha/9kw.py" "captcha/anticaptcha.py"))
11886 (substitute* "__init__.py"
11887 ;; Perhaps it's a joke, but don't promote proprietary software.
11888 (("([Th]is feature is not available) in the .*'" _ prefix)
11889 (string-append prefix ".'")))))))
11890 (build-system pyproject-build-system)
11891 (arguments
11892 (list
11893 #:test-flags
11894 #~(list "-k" "not test_403_handling")
11895 #:phases
11896 #~(modify-phases %standard-phases
11897 (add-after 'unpack 'relax-requirements
11898 (lambda _
11899 ;; XXX: Relax brotli dependency.
11900 (substitute* "pyproject.toml"
11901 (("\"brotli>=.*\"")
11902 "\"brotli\""))
11903 ;; XXX: Dependencies, that have not yet been packaged
11904 ;; and cause an import error when included.
11905 (delete-file "cloudscraper/interpreters/v8.py")))
11906 (add-after 'unpack 'fix-references
11907 (lambda _
11908 (substitute* "cloudscraper/interpreters/nodejs.py"
11909 (("'node'")
11910 (string-append "'" (which "node") "'"))))))))
11911 (inputs (list node-lts))
11912 (propagated-inputs
11913 (list python-pycryptodome
11914 python-brotli
11915 python-js2py
11916 python-polling2
11917 python-requests
11918 python-requests-toolbelt
11919 python-responses
11920 python-pyparsing
11921 python-websocket-client))
11922 (native-inputs (list python-pytest python-setuptools))
11923 (home-page "https://github.com/venomous/cloudscraper")
11924 (synopsis "Cloudflare anti-bot bypass")
11925 (description
11926 "This module acts as a webbrowser solving Cloudflare's Javascript
11927challenges.")
11928 (license license:expat)))
11929
11930(define-public python-imap-tools
11931 (package
11932 (name "python-imap-tools")
11933 (version "1.9.0")
11934 (source
11935 (origin
11936 (method git-fetch) ; no tests in PyPI release
11937 (uri (git-reference
11938 (url "https://github.com/ikvk/imap_tools")
11939 (commit (string-append "v" version))))
11940 (file-name (git-file-name name version))
11941 (sha256
11942 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
11943 (arguments
11944 (list
11945 #:test-flags
11946 ;; Tests require a network connection
11947 #~(list "-k" (string-append "not test_action"
11948 " and not test_attributes"
11949 " and not test_connection"
11950 " and not test_folders"
11951 " and not test_idle"
11952 " and not test_live"))))
11953 (build-system pyproject-build-system)
11954 (native-inputs
11955 (list python-pytest python-setuptools python-wheel))
11956 (home-page "https://github.com/ikvk/imap_tools")
11957 (synopsis "Work with email and mailbox by IMAP")
11958 (description
11959 "This Python library provides tools to deal with email and mailboxes
11960over IMAP:
11961
11962@itemize
11963@item Parsed email message attributes
11964@item Query builder for searching emails
11965@item Work with emails in folders (copy, delete, flag, move, seen)
11966@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
11967@end itemize")
11968 (license license:asl2.0)))
11969
11970(define-public python-giturlparse
11971 (package
11972 (name "python-giturlparse")
11973 (version "0.12.0")
11974 (source
11975 (origin
11976 (method git-fetch)
11977 (uri (git-reference
11978 (url "https://github.com/nephila/giturlparse")
11979 (commit version)))
11980 (file-name (git-file-name name version))
11981 (sha256
11982 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
11983 (build-system pyproject-build-system)
11984 (native-inputs (list python-pytest python-setuptools))
11985 (home-page "https://github.com/nephila/giturlparse")
11986 (synopsis "Git URL parsing module")
11987 (description
11988 "This package provides a git URL parsing module which supports parsing
11989and rewriting of remote git URLs from various hosting providers.")
11990 (license license:asl2.0)))
11991
11992(define-public python-hstspreload
11993 (package
11994 (name "python-hstspreload")
11995 (version "2025.1.1")
11996 (source
11997 (origin
11998 (method git-fetch)
11999 (uri (git-reference
12000 (url "https://github.com/sethmlarson/hstspreload")
12001 (commit version)))
12002 (file-name (git-file-name name version))
12003 (sha256
12004 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
12005 (build-system pyproject-build-system)
12006 (arguments (list #:tests? #f)) ; tests require external resources.
12007 (native-inputs (list python-setuptools))
12008 (home-page "https://github.com/sethmlarson/hstspreload")
12009 (synopsis "Chromium HSTS Preload list as a Python package")
12010 (description
12011 "@code{python-hstspreload} contains Chromium HSTS Preload list
12012as a Python package.")
12013 (license license:bsd-3)))
12014
12015(define-public python-sanic-routing
12016 (package
12017 (name "python-sanic-routing")
12018 (version "23.12.0")
12019 (source
12020 (origin
12021 (method url-fetch)
12022 (uri (pypi-uri "sanic-routing" version))
12023 (sha256
12024 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
12025 (build-system pyproject-build-system)
12026 (arguments
12027 ;; PyPi sources does not contain tests, recursive dependency on
12028 ;; python-sanic.
12029 (list #:tests? #f))
12030 (native-inputs (list python-setuptools python-wheel))
12031 (home-page "https://github.com/sanic-org/sanic-routing/")
12032 (synopsis "Routing component for Sanic")
12033 (description "Internal package for @code{python-sanic}, which provides
12034the @code{BasicRouter}.")
12035 (license license:expat)))
12036
12037(define-public python-sanic-testing
12038 (package
12039 (name "python-sanic-testing")
12040 (version "23.12.0")
12041 (source
12042 (origin
12043 (method url-fetch)
12044 (uri (pypi-uri "sanic-testing" version))
12045 (sha256
12046 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
12047 (build-system pyproject-build-system)
12048 (arguments
12049 ;; PyPi sources does not contain tests, recursive dependency on
12050 ;; python-sanic.
12051 (list #:tests? #f))
12052 (propagated-inputs (list python-httpx python-sanic-bootstrap))
12053 (native-inputs (list python-setuptools python-wheel))
12054 (home-page "https://github.com/sanic-org/sanic-testing/")
12055 (synopsis "Test clients for Sanic")
12056 (description "Internal package for @code{python-sanic}, which is
12057meant to be the core testing utility and clients for testing Sanic
12058applications.")
12059 (license license:expat)))
12060
12061(define-public python-sanic
12062 (package
12063 (name "python-sanic")
12064 (version "25.3.0")
12065 (source
12066 (origin
12067 (method url-fetch)
12068 (uri (pypi-uri "sanic" version))
12069 (sha256
12070 (base32 "1fv9wgsj54scbr7qhmwdgc4zqnqpwacpakcfxhsg10gc04h54pbp"))
12071 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
12072 (modules '((guix build utils)))
12073 (snippet #~(substitute* "setup.py"
12074 (("setuptools>=[0-9.]*")
12075 "setuptools")))))
12076 (build-system pyproject-build-system)
12077 (arguments
12078 (list
12079 #:test-flags
12080 #~(list "--asyncio-mode=auto"
12081 "--ignore=tests/benchmark/"
12082 "--ignore=tests/typing/test_typing.py"
12083 ;; Most tests hang or fail
12084 "--ignore=tests/test_cli.py"
12085 "--ignore=tests/worker/test_worker_serve.py"
12086 "-k"
12087 (string-append
12088 ;; PyPi sources lack examples module.
12089 "not test_gunicorn_"
12090 ;; Does not expect brotli and reordered headers.
12091 " and not test_raw_headers"
12092 ;; These look like buggy testcases.
12093 " and not test_zero_downtime"
12094 " and not test_non_default_uvloop_config_raises_warning"
12095 " and not test_listeners_triggered"
12096 " and not test_keep_alive_connection_context"
12097 " and not test_keep_alive_client_timeout"
12098 " and not test_conflicting_body_methods_overload"
12099 " and not test_unix_connection"
12100 ;; Unclear why they fail since core-updates merge.
12101 " and not test_missing_sni"
12102 " and not test_no_matching_cert"
12103 " and not test_wildcards"
12104 ;; These tests fail because subprotocols appear to be
12105 ;; parameterized as None
12106 " and not test_websocket_route_with_subprotocols"
12107 ;; AF_UNIX path too long
12108 " and not test_setup_and_teardown_unix"
12109 " and not test_configure_socket"
12110 ;; Freezes
12111 " and not test_server_run_with_repl"
12112 " and not test_server_run"
12113 " and not test_no_workers"))))
12114 (propagated-inputs
12115 (list python-aiofiles
12116 python-aioquic
12117 python-html5tagger
12118 python-httptools
12119 python-multidict
12120 python-sanic-routing
12121 python-tracerite
12122 python-typing-extensions
12123 python-ujson
12124 python-uvloop
12125 python-websockets))
12126 (native-inputs
12127 (list python-beautifulsoup4
12128 python-chardet
12129 python-cryptography
12130 python-docutils
12131 python-mypy
12132 python-pygments
12133 python-pytest
12134 python-pytest-asyncio
12135 python-pytest-benchmark
12136 python-pytest-sanic
12137 python-sanic-testing
12138 python-setuptools
12139 python-slotscheck
12140 python-towncrier
12141 python-types-ujson
12142 python-uvicorn
12143 python-wheel))
12144 (home-page "https://github.com/sanic-org/sanic/")
12145 (synopsis "Async Python web server/framework")
12146 (description
12147 "Sanic is a Python web server and web framework that's written to go
12148fast. It allows the usage of the @code{async/await} syntax added in Python
121493.5, which makes your code non-blocking and speedy.")
12150 (license license:expat)))
12151
12152(define-public python-sanic-bootstrap
12153 (package
12154 (inherit python-sanic)
12155 (name "python-sanic-bootstrap")
12156 (arguments (list #:tests? #f))
12157 (native-inputs (list python-setuptools python-wheel))))
12158
12159(define-public python-socketio
12160 (package
12161 (name "python-socketio")
12162 (version "5.12.1")
12163 (source
12164 (origin
12165 (method url-fetch)
12166 (uri (pypi-uri "python_socketio" version))
12167 (sha256
12168 (base32
12169 "175sd3fdld3s477i6b3v49yhf1alsbm1vaxzq44nqrqb8wgzz682"))))
12170 (build-system pyproject-build-system)
12171 (arguments
12172 (list #:test-flags
12173 '(list "--timeout=60"
12174 ;; These tests freeze.
12175 "--ignore-glob=tests/async/*")))
12176 (propagated-inputs
12177 (list python-bidict python-engineio python-msgpack))
12178 (native-inputs
12179 (list python-pytest
12180 python-pytest-asyncio
12181 python-pytest-timeout
12182 python-setuptools
12183 python-uvicorn
12184 python-wheel))
12185 (home-page "https://github.com/miguelgrinberg/python-socketio/")
12186 (synopsis "Python Socket.IO server")
12187 (description
12188 "This package provides a Python implementation of the @code{Socket.IO}
12189realtime client and server.")
12190 (license license:expat)))
12191
12192(define-public python-socks
12193 (package
12194 (name "python-socks")
12195 (version "2.8.1")
12196 (source
12197 (origin
12198 (method git-fetch)
12199 (uri (git-reference
12200 (url "https://github.com/romis2012/python-socks")
12201 (commit (string-append "v" version))))
12202 (file-name (git-file-name name version))
12203 (sha256
12204 (base32 "1x95i9w3izivdgz6hadh5kiil12i4ljk4ashgh3g0rjv2rw33vhj"))))
12205 (build-system pyproject-build-system)
12206 (propagated-inputs (list python-trio))
12207 (native-inputs
12208 (list python-anyio
12209 python-flask
12210 python-pytest
12211 python-pytest-asyncio
12212 python-pytest-trio
12213 python-setuptools
12214 python-tiny-proxy
12215 python-trustme
12216 python-yarl))
12217 (home-page "https://github.com/romis2012/python-socks")
12218 (synopsis
12219 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
12220 (description
12221 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
12222 functionality.")
12223 (license license:asl2.0)))
12224
12225(define-public python-socksio
12226 (package
12227 (name "python-socksio")
12228 (version "1.0.0")
12229 (source
12230 (origin
12231 (method url-fetch)
12232 (uri (pypi-uri "socksio" version))
12233 (sha256
12234 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
12235 (build-system pyproject-build-system)
12236 (native-inputs
12237 (list python-flit-core python-pytest))
12238 (home-page "https://github.com/sethmlarson/socksio")
12239 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
12240 (description "The @code{socksio} Python module is a client-side sans-I/O
12241SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
12242@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
12243means the library itself does not handle the actual sending of the bytes
12244through the network, it only deals with the implementation details of the
12245SOCKS protocols. It can be paired with any I/O library.")
12246 (license license:expat)))
12247
12248(define-public python-simple-websocket
12249 (package
12250 (name "python-simple-websocket")
12251 (version "1.1.0")
12252 (source
12253 (origin
12254 (method url-fetch)
12255 (uri (pypi-uri "simple_websocket" version))
12256 (sha256
12257 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
12258 (build-system pyproject-build-system)
12259 (arguments
12260 ;; Requires Internet access to resolve example.com
12261 (list #:test-flags '(list "--ignore=tests/test_client.py")))
12262 (propagated-inputs (list python-wsproto))
12263 (native-inputs (list python-pytest
12264 python-setuptools))
12265 (home-page "https://github.com/miguelgrinberg/simple-websocket")
12266 (synopsis "Simple WebSocket server and client for Python")
12267 (description "This package provides a simple @code{WebSocket} server and
12268client for Python.")
12269 (license license:expat)))
12270
12271(define-public python-siosocks
12272 (package
12273 (name "python-siosocks")
12274 (version "0.3.0")
12275 (source
12276 (origin
12277 (method git-fetch)
12278 (uri (git-reference
12279 (url "https://github.com/pohmelie/siosocks")
12280 (commit (string-append "v" version))))
12281 (file-name (git-file-name name version))
12282 (sha256
12283 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
12284 (build-system pyproject-build-system)
12285 (native-inputs
12286 (list python-pytest
12287 python-pytest-asyncio
12288 python-pytest-trio
12289 python-setuptools))
12290 (propagated-inputs (list python-trio))
12291 (home-page "https://github.com/pohmelie/siosocks")
12292 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
12293 (description
12294 "This package provides a Python module and framework for sans-io socks proxy
12295client/server with couple io backends.
12296
12297Features:
12298@itemize
12299@item Only TCP connect (no BIND, no UDP)
12300@item Both client and server
12301@item SOCKS versions: 4, 4a, 5
12302@item SOCKSv5 auth: no auth, username/password
12303@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
12304@item One-shot socks server (@code{python -m siosocks})
12305@end itemize")
12306 (license license:expat)))
12307
12308(define-public python-tiny-proxy
12309 (package
12310 (name "python-tiny-proxy")
12311 (version "0.2.1")
12312 (source
12313 (origin
12314 (method url-fetch)
12315 (uri (pypi-uri "tiny_proxy" version))
12316 (sha256
12317 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
12318 (build-system pyproject-build-system)
12319 ;; There are only a handful of tests and they require the as yet
12320 ;; unpackaged httpx_socks.
12321 (arguments (list #:tests? #false))
12322 (propagated-inputs (list python-anyio))
12323 (native-inputs
12324 (list python-httpx
12325 python-pytest
12326 python-setuptools
12327 python-wheel))
12328 (home-page "https://github.com/romis2012/tiny-proxy")
12329 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
12330 (description "This package provides a simple proxy server (SOCKS4(a),
12331SOCKS5(h), HTTP tunnel).")
12332 (license license:asl2.0)))
12333
12334(define-public python-azure-nspkg
12335 (package
12336 (name "python-azure-nspkg")
12337 (version "3.0.2")
12338 (source
12339 (origin
12340 (method url-fetch)
12341 (uri (pypi-uri "azure-nspkg" version ".zip"))
12342 (sha256
12343 (base32
12344 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
12345 (build-system pyproject-build-system)
12346 (arguments (list #:tests? #f)) ;no tests in package
12347 (native-inputs (list unzip python-setuptools))
12348 (home-page "https://github.com/Azure/azure-sdk-for-python")
12349 (synopsis "Azure namespace internals")
12350 (description
12351 "This package is an internal Azure namespace package.")
12352 (license license:expat)))
12353
12354(define-public python-azure-storage-nspkg
12355 (package
12356 (name "python-azure-storage-nspkg")
12357 (version "3.1.0")
12358 (source
12359 (origin
12360 (method url-fetch)
12361 (uri (pypi-uri "azure-storage-nspkg" version))
12362 (sha256
12363 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
12364 (build-system pyproject-build-system)
12365 (arguments
12366 (list #:tests? #f)) ;no tests in PyPI archive
12367 (native-inputs (list python-setuptools))
12368 (propagated-inputs (list python-azure-nspkg))
12369 (home-page "https://github.com/Azure/azure-storage-python")
12370 (synopsis "Microsoft Azure Storage Namespace package")
12371 (description
12372 "This project provides a client library in Python that makes it easy to
12373communicate with Microsoft Azure Storage services.")
12374 (license license:expat)))
12375
12376(define-public python-azure-common
12377 (package
12378 (name "python-azure-common")
12379 (version "1.1.28")
12380 (source
12381 (origin
12382 (method url-fetch)
12383 (uri (pypi-uri "azure-common" version ".zip"))
12384 (sha256
12385 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
12386 (build-system pyproject-build-system)
12387 (arguments
12388 (list #:tests? #f)) ;no tests in PyPI archive
12389 (propagated-inputs (list python-azure-nspkg))
12390 (native-inputs (list python-setuptools unzip))
12391 (home-page "https://github.com/Azure/azure-sdk-for-python")
12392 (synopsis "Microsoft Azure Client library for Python")
12393 (description "This package provides the Microsoft Azure Client library for
12394Python.")
12395 (license license:expat)))
12396
12397(define-public python-azure-core
12398 (package
12399 (name "python-azure-core")
12400 (version "1.32.0")
12401 (source
12402 (origin
12403 (method url-fetch)
12404 (uri (pypi-uri "azure_core" version))
12405 (sha256
12406 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
12407 (build-system pyproject-build-system)
12408 (arguments
12409 (list
12410 #:test-flags
12411 `(list ;; This fails because devtools_testutils doesn't exist.
12412 "--ignore=tests/test_connection_string_parsing.py"
12413 ;; These all need network access.
12414 "--ignore=samples"
12415 "--ignore=tests/async_tests/test_streaming_async.py"
12416 "--ignore=tests/test_streaming.py"
12417 "-m" "not asyncio and not live_test_only"
12418 "-k" ,(string-append
12419 "not test_decompress_plain_no_header"
12420 " and not test_compress_plain_no_header"
12421 " and not test_decompress_compressed_no_header"
12422 " and not test_requests_socket_timeout"))
12423 #:phases
12424 #~(modify-phases %standard-phases
12425 (add-before 'check 'add-test-pythonpath
12426 (lambda* (#:key tests? #:allow-other-keys)
12427 (when tests?
12428 (setenv "PYTHONPATH"
12429 (string-append
12430 (getcwd) "/tests/testserver_tests/coretestserver:"
12431 (getenv "GUIX_PYTHONPATH")))))))))
12432 (propagated-inputs
12433 (list python-aiohttp
12434 python-requests
12435 python-six
12436 python-typing-extensions))
12437 (native-inputs
12438 (list python-flask
12439 python-pytest-8
12440 python-pytest-aiohttp
12441 python-pytest-asyncio
12442 python-pytest-trio
12443 python-setuptools
12444 python-wheel))
12445 (home-page "https://github.com/Azure/azure-sdk-for-python")
12446 (synopsis "Microsoft Azure Core library for Python")
12447 (description "This package provides the Microsoft Azure Core library for
12448Python.")
12449 (license license:expat)))
12450
12451(define-public python-azure-storage-blob
12452 (package
12453 (name "python-azure-storage-blob")
12454 (version "12.27.0")
12455 (source
12456 (origin
12457 (method url-fetch)
12458 (uri (pypi-uri "azure_storage_blob" version))
12459 (sha256
12460 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
12461 (build-system pyproject-build-system)
12462 (arguments
12463 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12464 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12465 ;; it hard to package in Guix.
12466 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12467 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12468 (list #:tests? #f))
12469 (native-inputs
12470 (list python-setuptools))
12471 (propagated-inputs
12472 (list python-azure-core
12473 python-cryptography
12474 python-isodate
12475 python-typing-extensions))
12476 (home-page "https://github.com/Azure/azure-sdk-for-python/")
12477 (synopsis "Microsoft Azure Blob Storage client library for Python")
12478 (description "This package provides the Microsoft Azure Blob Storage
12479Client Library for Python.")
12480 (license license:expat)))
12481
12482(define-public python-azure-storage-file-datalake
12483 (package
12484 (name "python-azure-storage-file-datalake")
12485 (version "12.22.0")
12486 (source
12487 (origin
12488 (method url-fetch)
12489 (uri (pypi-uri "azure_storage_file_datalake" version))
12490 (sha256
12491 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
12492 (build-system pyproject-build-system)
12493 (arguments
12494 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12495 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12496 ;; it hard to package in Guix.
12497 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12498 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12499 (list #:tests? #f))
12500 (native-inputs
12501 (list python-setuptools))
12502 (propagated-inputs
12503 (list python-azure-core
12504 python-azure-storage-blob
12505 python-isodate
12506 python-typing-extensions))
12507 (home-page "https://github.com/Azure/azure-sdk-for-python")
12508 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
12509 (description
12510 "This package provides the Microsoft Azure File @code{DataLake} Storage
12511Client Library for Python.")
12512 (license license:expat)))
12513
12514(define-public python-google-auth
12515 (package
12516 (name "python-google-auth")
12517 (version "2.48.0")
12518 (source
12519 (origin
12520 (method url-fetch)
12521 (uri (pypi-uri "google_auth" version))
12522 (sha256
12523 (base32 "1kj1r3vp2jk2wv1mc0a5lpdnsivsqciah68ajhyql86k1imp0zjg"))))
12524 (build-system pyproject-build-system)
12525 (arguments
12526 (list
12527 #:test-flags
12528 ;; This one test uses crypto.sign with an outdated calling convention.
12529 '(list "--ignore=tests/transport/test__mtls_helper.py")))
12530 (propagated-inputs
12531 (list python-aiohttp
12532 python-cryptography
12533 python-pyasn1-modules
12534 python-requests
12535 python-rsa
12536 python-urllib3))
12537 (native-inputs
12538 (list nss-certs-for-test
12539 python-aiohttp
12540 python-aioresponses
12541 python-flask
12542 python-freezegun
12543 python-grpcio
12544 python-oauth2client
12545 python-packaging
12546 python-pyjwt
12547 python-pyopenssl
12548 python-pytest
12549 python-pytest-asyncio
12550 python-pytest-localserver
12551 python-pyu2f
12552 python-requests
12553 python-responses
12554 python-rsa
12555 python-setuptools
12556 python-urllib3))
12557 (home-page "https://github.com/googleapis/google-auth-library-python")
12558 (synopsis "Google Authentication Library")
12559 (description "This library simplifies using Google's various
12560server-to-server authentication mechanisms to access Google APIs.")
12561 (license license:asl2.0)))
12562
12563(define-public python-google-resumable-media
12564 (package
12565 (name "python-google-resumable-media")
12566 (version "2.8.0")
12567 (source
12568 (origin
12569 (method git-fetch)
12570 (uri (git-reference
12571 (url
12572 "https://github.com/googleapis/google-resumable-media-python")
12573 (commit (string-append "v" version))))
12574 (file-name (git-file-name name version))
12575 (sha256
12576 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
12577 (build-system pyproject-build-system)
12578 (arguments
12579 (list
12580 #:test-flags
12581 #~(list
12582 ;; XXX: Missing test_utils.retry.
12583 "--ignore-glob=tests*/system/"
12584 ;; XXX: md5_hash is not mock.sentinel.md5_hash
12585 "-k" (string-join
12586 (list "not test_brotli"
12587 "test_constructor"
12588 "test_decompress")
12589 " and not "))))
12590 (propagated-inputs (list python-google-crc32c))
12591 (native-inputs
12592 (list python-google-auth
12593 python-mock
12594 python-pytest
12595 python-pytest-asyncio
12596 python-setuptools
12597 python-test-utils))
12598 (home-page "https://github.com/googleapis/google-resumable-media-python")
12599 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
12600 (description "This package provides utilities for Google Media Downloads
12601and Resumable Uploads.")
12602 (license license:asl2.0)))
12603
12604(define-public python-googleapis-common-protos
12605 (package
12606 (name "python-googleapis-common-protos")
12607 (version "1.66.0")
12608 (source
12609 (origin
12610 (method git-fetch)
12611 (uri (git-reference
12612 (url "https://github.com/googleapis/python-api-common-protos")
12613 (commit (string-append "v" version))))
12614 (file-name (git-file-name name version))
12615 (sha256
12616 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
12617 (build-system pyproject-build-system)
12618 (propagated-inputs (list python-protobuf))
12619 (native-inputs (list python-pytest python-setuptools))
12620 (home-page "https://github.com/googleapis/python-api-common-protos")
12621 (synopsis "Common protobufs used in Google APIs")
12622 (description
12623 "This package contains Python classes generated from the common protos in
12624the @code{googleapis/api-common-protos} repository.")
12625 (license license:asl2.0)))
12626
12627(define-public python-google-api-core
12628 (package
12629 (name "python-google-api-core")
12630 (version "2.29.0")
12631 (source
12632 (origin
12633 (method git-fetch)
12634 (uri (git-reference
12635 (url "https://github.com/googleapis/python-api-core")
12636 (commit (string-append "v" version))))
12637 (file-name (git-file-name name version))
12638 (sha256
12639 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
12640 (build-system pyproject-build-system)
12641 (arguments
12642 (list
12643 #:test-flags
12644 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
12645 ;; deprecated and scheduled for removal in a future version. Use
12646 ;; timezone-aware objects to represent datetimes in UTC:
12647 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
12648 #~(list "-W" "ignore::DeprecationWarning")))
12649 (propagated-inputs
12650 (list python-google-auth
12651 python-googleapis-common-protos
12652 python-protobuf
12653 python-proto-plus
12654 python-requests))
12655 (native-inputs
12656 (list python-mock
12657 python-pytest
12658 python-pytest-asyncio
12659 python-pytest-mock
12660 python-setuptools))
12661 (home-page "https://github.com/googleapis/python-api-core")
12662 (synopsis "Google API client core library")
12663 (description
12664 "This library defines common helpers used by all Google API clients.")
12665 (license license:asl2.0)))
12666
12667(define-public python-google-cloud-core
12668 (package
12669 (name "python-google-cloud-core")
12670 (version "2.5.0")
12671 (source
12672 (origin
12673 (method git-fetch)
12674 (uri (git-reference
12675 (url "https://github.com/googleapis/python-cloud-core")
12676 (commit (string-append "v" version))))
12677 (file-name (git-file-name name version))
12678 (sha256
12679 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
12680 (build-system pyproject-build-system)
12681 (arguments
12682 (list
12683 #:test-flags
12684 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
12685 ;; deprecated and scheduled for removal in a future version. Use
12686 ;; timezone-aware objects to represent datetimes in UTC:
12687 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
12688 #~(list "-W" "ignore::DeprecationWarning")))
12689 (propagated-inputs (list python-google-api-core python-google-auth))
12690 (native-inputs
12691 (list python-grpcio
12692 python-grpcio-status
12693 python-pytest
12694 python-setuptools))
12695 (home-page "https://github.com/googleapis/python-cloud-core")
12696 (synopsis "Google Cloud API client core library")
12697 (description
12698 "This library defines common helpers (e.g. base @code{Client} classes)
12699used by all of the @code{google-cloud-*} packages.")
12700 (license license:asl2.0)))
12701
12702(define-public python-google-cloud-storage
12703 (package
12704 (name "python-google-cloud-storage")
12705 (version "2.19.0")
12706 (source
12707 (origin
12708 (method git-fetch)
12709 (uri (git-reference
12710 (url "https://github.com/googleapis/python-storage")
12711 (commit (string-append "v" version))))
12712 (file-name (git-file-name name version))
12713 (sha256
12714 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
12715 (build-system pyproject-build-system)
12716 (arguments
12717 (list
12718 #:test-flags
12719 #~(list
12720 ;; XXX: Missing test_utils.retry.
12721 "--ignore=tests/system/"
12722 ;; Needs docker.
12723 "--ignore=tests/conformance/"
12724 ;; XXX: Deprecations.
12725 "-k" (string-join
12726 (list "not test_set_api_request_attr"
12727 "test_create_bucket_w_custom_endpoint"
12728 "test_ctor_w_api_endpoint_override"
12729 "test_ctor_w_custom_endpoint_use_auth"
12730 "test_list_buckets_w_custom_endpoint")
12731 " and not ")
12732 "tests")))
12733 (native-inputs
12734 (list python-googleapis-common-protos
12735 python-mock
12736 python-pytest
12737 python-test-utils
12738 python-setuptools))
12739 (propagated-inputs
12740 (list python-google-api-core
12741 python-google-auth
12742 python-google-cloud-core
12743 python-google-resumable-media
12744 python-protobuf
12745 python-requests))
12746 (home-page "https://github.com/googleapis/python-storage")
12747 (synopsis "Google Cloud Storage API client library")
12748 (description
12749 "Google Cloud Storage allows you to store data on Google infrastructure,
12750and it can be used to distribute large data objects to users via direct
12751download. This package provides a Google Cloud Storage API client library for
12752Python.")
12753 (license license:asl2.0)))
12754
12755(define-public python-smart-open
12756 (package
12757 (name "python-smart-open")
12758 (version "7.3.0")
12759 (source
12760 (origin
12761 (method git-fetch) ;no tests in PyPI archive
12762 (uri (git-reference
12763 (url "https://github.com/piskvorky/smart_open")
12764 (commit (string-append "v" version))))
12765 (file-name (git-file-name name version))
12766 (sha256
12767 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
12768 (build-system pyproject-build-system)
12769 (arguments
12770 (list
12771 #:test-flags
12772 #~(list "--ignore=ci_helpers/"
12773 "--ignore=integration-tests/"
12774 ;; FIXME: Enable when guix/guix#1436 is resolved.
12775 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
12776 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
12777 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
12778 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
12779 "--ignore=tests/test_gcs.py")))
12780 (propagated-inputs
12781 (list python-azure-common
12782 python-azure-core
12783 python-azure-storage-blob
12784 python-boto3
12785 ;; python-google-cloud-storage ;see guix/guix#1436
12786 python-paramiko
12787 python-requests
12788 python-wrapt
12789 python-zstandard))
12790 (native-inputs
12791 (list python-numpy
12792 python-moto
12793 python-pytest
12794 python-pytest-rerunfailures
12795 python-responses
12796 python-setuptools
12797 python-setuptools-scm
12798 python-wheel))
12799 (home-page "https://github.com/piskvorky/smart_open")
12800 (synopsis "Utilities for streaming large files")
12801 (description
12802 "This package provides utilities for streaming large files (S3, HDFS,
12803GCS, Azure Blob Storage, gzip, bz2, etc.)")
12804 (license license:expat)))
12805
12806(define-public python-smart-open-6
12807 (package
12808 (inherit python-smart-open)
12809 (name "python-smart-open")
12810 (version "6.4.0")
12811 (source
12812 (origin
12813 (method git-fetch)
12814 (uri (git-reference
12815 (url "https://github.com/piskvorky/smart_open")
12816 (commit (string-append "v" version))))
12817 (file-name (git-file-name name version))
12818 (sha256
12819 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
12820 (arguments
12821 (list
12822 ;; XXX: Tests need some older native inputs, disable for now.
12823 #:tests? #f))))
12824
12825(define-public python-w3lib
12826 (package
12827 (name "python-w3lib")
12828 (version "2.3.1")
12829 (source
12830 (origin
12831 (method url-fetch)
12832 (uri (pypi-uri "w3lib" version))
12833 (sha256
12834 (base32
12835 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
12836 (build-system pyproject-build-system)
12837 (native-inputs
12838 (list python-pytest python-setuptools python-wheel))
12839 (home-page "https://github.com/scrapy/w3lib")
12840 (synopsis "Python library of web-related functions")
12841 (description
12842 "This is a Python library of web-related functions, such as: remove
12843comments, or tags from HTML snippets, extract base url from HTML snippets,
12844translate entities on HTML strings, among other things.")
12845 (license license:bsd-3)))
12846
12847(define-public python-webcolors
12848 (package
12849 (name "python-webcolors")
12850 (version "24.11.1")
12851 (source
12852 (origin
12853 (method url-fetch)
12854 (uri (pypi-uri "webcolors" version))
12855 (sha256
12856 (base32 "1xl0vn4xa03vjwx6fj19q9kgb94g65gvdf3p0ivsy0i2ydldgczc"))))
12857 (build-system pyproject-build-system)
12858 (arguments
12859 (list
12860 #:phases
12861 '(modify-phases %standard-phases
12862 (add-after 'unpack 'patch-pyproject
12863 (lambda _
12864 ;; XXX Our version of python-pdm-backend does not recognize
12865 ;; "dependency-groups", but is fine with the bogus
12866 ;; "tool.whatever".
12867 (substitute* "pyproject.toml"
12868 (("\\[dependency-groups\\]") "[tool.whatever]")))))))
12869 (native-inputs
12870 (list python-pdm-backend python-pytest))
12871 (home-page "https://github.com/ubernostrum/webcolors")
12872 (synopsis "HTML/CSS color definitions library")
12873 (description "@code{python-webcolors} is a module for working with
12874HTML/CSS color definitions. Normalizing and converting between the following
12875formats is supported.
12876@itemize
12877@item Specification-defined color names
12878@item Six-digit hexadecimal
12879@item Three-digit hexadecimal
12880@item Integer rgb() triplet
12881@item Percentage rgb() triplet
12882@end itemize
12883Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
12884can be handled by the @code{colorsys} module in the Python standard library.")
12885 (license license:bsd-3)))
12886
12887(define-public python-woob
12888 ;; TODO: woob requires backends which are currently installed on the fly in
12889 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
12890 ;; them in the store instead. Many modules are included in the modules
12891 ;; directory in the source tree, but it is unclear how to install them.
12892 ;; Many modules require extra dependencies though, so maybe they should be
12893 ;; packaged independently of woob itself.
12894 (package
12895 (name "python-woob")
12896 (version "3.7")
12897 (source
12898 (origin
12899 (method git-fetch)
12900 (uri (git-reference
12901 (url "https://gitlab.com/woob/woob.git")
12902 (commit version)))
12903 (file-name (git-file-name name version))
12904 (sha256
12905 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
12906 (build-system pyproject-build-system)
12907 (arguments
12908 (list
12909 #:test-flags
12910 ;; Deselect tests that require DNS lookup.
12911 #~(list
12912 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
12913 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
12914 #:phases
12915 #~(modify-phases %standard-phases
12916 (add-before 'build 'relax-requirements
12917 (lambda _
12918 (substitute* "pyproject.toml"
12919 ;; packaging ~= 23.0
12920 (("\"packaging .*\",")
12921 "")
12922 ;; rich~=13.0
12923 (("\"rich .*\",")
12924 "\"rich\",")))))))
12925 (native-inputs
12926 (list nss-certs-for-test
12927 python-pytest
12928 python-setuptools))
12929 (propagated-inputs
12930 (list python-babel
12931 python-colorama
12932 python-cssselect
12933 python-dateutil
12934 python-feedparser
12935 python-html2text
12936 python-lxml
12937 python-packaging
12938 python-pillow
12939 python-prettytable
12940 python-pycountry
12941 python-pyyaml
12942 python-requests
12943 python-responses
12944 python-rich
12945 python-termcolor
12946 python-unidecode))
12947 (home-page "https://woob.tech/")
12948 (synopsis "Woob, Web Outside Of Browsers")
12949 (description
12950 "Woob is a collection of applications able to interact with
12951websites, without requiring the user to open them in a browser. It also
12952provides well-defined APIs to talk to websites lacking one.")
12953 (license license:lgpl3+)))
12954
12955(define-public python-flask-combo-jsonapi
12956 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
12957 (revision "0"))
12958 (package
12959 (name "python-flask-combo-jsonapi")
12960 (version (git-version "1.1.0" revision commit))
12961 (source
12962 (origin
12963 (method git-fetch)
12964 (uri (git-reference
12965 (url "https://github.com/AdCombo/flask-combo-jsonapi")
12966 (commit commit)))
12967 (file-name (git-file-name name version))
12968 (sha256
12969 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
12970 (build-system pyproject-build-system)
12971 (arguments
12972 (list
12973 #:test-flags
12974 #~(list
12975 "-k"
12976 (string-join
12977 (list
12978 ;; XXX: This tests a feature that doesn't make sense when dropping
12979 ;; marshmallow < 3 support.
12980 "not test_compute_schema_propagate_context"
12981 ;; The following tests fail for unknown reasons (see:
12982 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
12983 "test_get_list_with_simple_filter_relationship_custom_qs_api"
12984 "test_get_list_with_simple_filter_relationship_error")
12985 " and not "))
12986 #:phases
12987 #~(modify-phases %standard-phases
12988 (add-after 'unpack 'loosen-requirements
12989 (lambda _
12990 ;; Don't pin specific versions of dependencies.
12991 (substitute* "requirements.txt"
12992 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
12993 (string-append dep "\n"))
12994 (("^marshmallow_jsonapi[=<>].*")
12995 "marshmallow_jsonapi_minfork\n"))
12996 ;; Drop support for marshmallow < 3.
12997 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
12998 "flask_combo_jsonapi/schema.py")
12999 (("from marshmallow\\.base import SchemaABC")
13000 "from marshmallow import Schema")
13001 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
13002 "if isinstance(related_schema_cls, Schema):"))
13003 (substitute* "tests/test_sqlalchemy_data_layer.py"
13004 (("default=None")
13005 "dump_default=None")
13006 (("missing=")
13007 "load_default=")))))))
13008 (propagated-inputs
13009 (list python-flask
13010 python-marshmallow
13011 python-marshmallow-jsonapi
13012 python-simplejson
13013 python-sqlalchemy
13014 python-apispec
13015 python-simplejson
13016 python-six))
13017 (native-inputs
13018 (list python-pytest python-setuptools))
13019 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
13020 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
13021 (description
13022 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
13023APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
13024specification.
13025
13026It tries to combine the power of Flask-Restless with the flexibility of
13027Flask-RESTful to quickly build APIs that fit the complexity of existing
13028real-life projects with legacy data and diverse storage providers.")
13029 (license license:expat))))
13030
13031(define-public python-mwparserfromhell
13032 (package
13033 (name "python-mwparserfromhell")
13034 (version "0.7.2")
13035 (source
13036 (origin
13037 (method git-fetch)
13038 (uri (git-reference
13039 (url "https://github.com/earwig/mwparserfromhell")
13040 (commit (string-append "v" version))))
13041 (file-name (git-file-name name version))
13042 (sha256
13043 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
13044 (build-system pyproject-build-system)
13045 (native-inputs (list python-pytest python-setuptools))
13046 (home-page "https://github.com/earwig/mwparserfromhell")
13047 (synopsis "Python parser for MediaWiki wikicode")
13048 (description
13049 "The MediaWiki Parser From Hell is a python library package that provides
13050a parser for MediaWiki.
13051
13052It exposes parses as normal string objects with additional methods giving
13053access to the special Wikicode features it contains (hyperlinks, tags,
13054templates…). The parser doesn't interpolate strings at all, it remains at a
13055purely formal level.
13056
13057Full documentation may be found at
13058@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
13059 (license license:expat)))
13060
13061(define-public python-tweepy
13062 (package
13063 (name "python-tweepy")
13064 (version "4.16.0")
13065 (source
13066 (origin
13067 (method git-fetch)
13068 (uri
13069 (git-reference
13070 (url "https://github.com/tweepy/tweepy")
13071 (commit (string-append "v" version))))
13072 (file-name (git-file-name name version))
13073 (sha256
13074 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
13075 (build-system pyproject-build-system)
13076 (arguments
13077 ;; tests: 149 passed, 3 skipped, 1 warning
13078 (list #:test-backend #~'unittest
13079 #:test-flags #~(list "discover" "tests")))
13080 (native-inputs
13081 (list nss-certs-for-test
13082 python-flit-core
13083 python-urllib3-1.26
13084 python-vcrpy))
13085 (propagated-inputs
13086 (list python-aiohttp
13087 python-async-lru
13088 python-oauthlib
13089 python-requests
13090 python-requests-oauthlib))
13091 (home-page "https://www.tweepy.org/")
13092 (synopsis "Twitter library for Python")
13093 (description
13094 "This package provides @code{Tweepy}, an easy-to-use Python library for
13095accessing the Twitter API.")
13096 (license license:expat)))
13097
13098(define-public python-quart
13099 (package
13100 (name "python-quart")
13101 (version "0.19.9")
13102 (source
13103 (origin
13104 (method git-fetch) ; no tests in PyPI release
13105 (uri (git-reference
13106 (url "https://github.com/pallets/quart")
13107 (commit version)))
13108 (file-name (git-file-name name version))
13109 (sha256
13110 (base32 "1h5ifv8g9dc9m07vj4v7dfalam83v38545d845vvgys1gan1pscd"))))
13111 (build-system pyproject-build-system)
13112 (native-inputs
13113 (list python-poetry-core
13114 python-pytest
13115 python-pytest-asyncio))
13116 (propagated-inputs
13117 (list hypercorn
13118 python-aiofiles
13119 python-blinker
13120 python-click
13121 python-dotenv
13122 python-flask
13123 python-itsdangerous
13124 python-jinja2
13125 python-markupsafe
13126 python-toml
13127 python-werkzeug))
13128 (home-page "https://gitlab.com/pgjones/quart/")
13129 (synopsis "Python ASGI web microframework with the same API as Flask")
13130 (description
13131 "This package provides a Python ASGI web microframework with the same API
13132as Flask.")
13133 (license license:expat)))
13134
13135(define-public python-quart-trio
13136 (package
13137 (name "python-quart-trio")
13138 (version "0.12.0")
13139 (source
13140 (origin
13141 (method url-fetch)
13142 (uri (pypi-uri "quart_trio" version))
13143 (sha256
13144 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
13145 (build-system pyproject-build-system)
13146 (arguments
13147 (list
13148 #:phases
13149 #~(modify-phases %standard-phases
13150 (add-after 'unpack 'remove-coverage-pytest-options
13151 (lambda _
13152 (substitute* "pyproject.toml"
13153 (("--no-cov-on-fail") "")))))))
13154 (native-inputs
13155 (list python-pdm-backend
13156 python-pytest
13157 python-pytest-sugar
13158 python-pytest-trio))
13159 (propagated-inputs
13160 (list hypercorn
13161 python-quart
13162 python-trio))
13163 (home-page "https://github.com/pgjones/quart-trio")
13164 (synopsis "Extension for Quart to support the Trio event loop")
13165 (description
13166 "This package provides a Quart extension to provide Trio support. This
13167is an alternative to using the asyncio event loop present in the Python
13168standard library and supported by default in Quart.")
13169 (license license:expat)))
13170
13171(define-public python-ajsonrpc
13172 (package
13173 (name "python-ajsonrpc")
13174 (version "1.2.0")
13175 (source
13176 (origin
13177 (method git-fetch)
13178 (uri (git-reference
13179 (url "https://github.com/pavlov99/ajsonrpc")
13180 (commit version)))
13181 (file-name (git-file-name name version))
13182 (sha256
13183 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
13184 (build-system pyproject-build-system)
13185 (arguments
13186 (list
13187 #:phases
13188 #~(modify-phases %standard-phases
13189 (add-after 'unpack 'set-version
13190 (lambda _
13191 (substitute* "ajsonrpc/__init__.py"
13192 (("^__version__ = .*")
13193 (string-append "__version__ = \"" #$version "\"\n"))))))))
13194 (native-inputs
13195 (list python-pytest
13196 python-setuptools))
13197 (propagated-inputs
13198 (list python-quart
13199 python-sanic
13200 python-tornado))
13201 (home-page "https://github.com/pavlov99/ajsonrpc")
13202 (synopsis "Async JSON-RPC 2.0 protocol and server")
13203 (description
13204 "This package provides a Python JSON-RPC 2.0 protocol and server powered
13205by asyncio.")
13206 (license license:expat)))
13207
13208(define-public python-protego
13209 (package
13210 (name "python-protego")
13211 (version "0.4.0")
13212 (source
13213 (origin
13214 (method url-fetch)
13215 (uri (pypi-uri "protego" version))
13216 (sha256
13217 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
13218 (build-system pyproject-build-system)
13219 (native-inputs (list python-pytest python-setuptools python-wheel))
13220 (home-page "https://github.com/scrapy/protego")
13221 (synopsis "Python robots.txt parser with support for modern conventions")
13222 (description "Protego is a pure-Python @file{robots.txt} parser with support
13223for modern conventions.")
13224 (license license:bsd-3)))
13225
13226(define-public python-parsel
13227 (package
13228 (name "python-parsel")
13229 (version "1.10.0")
13230 (source
13231 (origin
13232 (method url-fetch)
13233 (uri (pypi-uri "parsel" version))
13234 (sha256
13235 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
13236 (build-system pyproject-build-system)
13237 (propagated-inputs
13238 (list python-cssselect
13239 python-jmespath
13240 python-lxml
13241 python-typing-extensions
13242 python-w3lib))
13243 (native-inputs
13244 (list python-psutil python-pytest python-setuptools python-wheel))
13245 (home-page "https://github.com/scrapy/parsel")
13246 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
13247 (description "Parsel is a library to extract and remove data from
13248HTML and XML using XPath and CSS selectors, optionally combined with
13249regular expressions.")
13250 (license license:bsd-3)))
13251
13252(define-public python-scrapy
13253 (package
13254 (name "python-scrapy")
13255 (version "2.13.3")
13256 (source
13257 (origin
13258 (method url-fetch)
13259 (uri (pypi-uri "scrapy" version))
13260 (sha256
13261 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
13262 (build-system pyproject-build-system)
13263 (arguments
13264 (list #:test-flags
13265 #~(list "--numprocesses" (number->string (parallel-job-count))
13266 "-k" (string-join
13267 ;; ConnectionRefusedError: [Errno 111] Connection
13268 ;; refused
13269 (list "not test_append"
13270 "test_append_active_mode"
13271 "test_overwrite"
13272 "test_overwrite_active_mode"
13273 "test_persist"
13274 ;; AssertionError
13275 "test_start_deprecated_super")
13276 " and not ")
13277 ;; Skip documentation testing.
13278 "--ignore=docs")
13279 #:phases
13280 #~(modify-phases %standard-phases
13281 (add-before 'check 'prepare-test-environment
13282 (lambda _
13283 (setenv "HOME" "/tmp"))))))
13284 (propagated-inputs
13285 (list python-cryptography
13286 python-cssselect
13287 python-defusedxml
13288 python-itemadapter
13289 python-itemloaders
13290 python-lxml
13291 python-packaging
13292 python-parsel
13293 python-protego
13294 python-pydispatcher
13295 python-pyopenssl
13296 python-pypydispatcher
13297 python-queuelib
13298 python-service-identity
13299 python-tldextract
13300 python-twisted
13301 python-w3lib
13302 python-zope-interface))
13303 (native-inputs
13304 (list nss-certs-for-test
13305 python-hatchling
13306 python-pexpect
13307 python-pytest
13308 python-pytest-xdist
13309 python-setuptools
13310 python-sybil
13311 python-testfixtures))
13312 (home-page "https://scrapy.org")
13313 (synopsis "High-level Web crawling and Web scraping framework")
13314 (description "Scrapy is a fast high-level web crawling and web
13315scraping framework, used to crawl websites and extract structured data
13316from their pages. It can be used for a wide range of purposes, from data
13317mining to monitoring and automated testing.")
13318 (license license:bsd-3)))
13319
13320(define-public python-jstyleson
13321 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
13322 (revision "0"))
13323 (package
13324 (name "python-jstyleson")
13325 (version (git-version "0.0.2" revision commit))
13326 (source
13327 (origin
13328 (method git-fetch)
13329 (uri (git-reference
13330 (url "https://github.com/linjackson78/jstyleson")
13331 (commit commit)))
13332 (file-name (git-file-name name version))
13333 (sha256
13334 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
13335 (build-system pyproject-build-system)
13336 (native-inputs (list python-pytest python-setuptools))
13337 (home-page "https://github.com/linjackson78/jstyleson")
13338 (synopsis "JSON parser supporting js-style comments")
13339 (description
13340 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
13341standard Python @code{json} library, it understands js-style comments.
13342Trailing comma is also supported.")
13343 (license license:expat))))
13344
13345(define-public python-html-text
13346 (package
13347 (name "python-html-text")
13348 (version "0.7.0")
13349 (source
13350 (origin
13351 (method url-fetch)
13352 (uri (pypi-uri "html_text" version))
13353 (sha256
13354 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
13355 (build-system pyproject-build-system)
13356 (native-inputs
13357 (list python-pytest
13358 python-setuptools
13359 python-wheel))
13360 (propagated-inputs
13361 (list python-lxml
13362 python-lxml-html-clean))
13363 (home-page "https://github.com/TeamHG-Memex/html-text")
13364 (synopsis "Extract text from HTML")
13365 (description "HTML to Text is a Python library for extract text from HTML.
13366Contrary to other solution such as LXML or Beautiful Soup, the text extracted
13367with @code{html_text} does not contain elements such as JavaScript or inline
13368styles not normally visible to users. It also normalizes white space
13369characters in a smarter, more visually pleasing style.")
13370 (license license:expat)))
13371
13372(define-public python-mf2py
13373 (package
13374 (name "python-mf2py")
13375 (version "2.0.1")
13376 (source
13377 (origin
13378 (method git-fetch)
13379 (uri (git-reference
13380 (url "https://github.com/microformats/mf2py")
13381 (commit (string-append "v" version))))
13382 (file-name (git-file-name name version))
13383 (sha256
13384 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
13385 (build-system pyproject-build-system)
13386 (native-inputs (list python-mock python-poetry-core python-pytest))
13387 (propagated-inputs
13388 (list python-beautifulsoup4 python-html5lib python-requests))
13389 (home-page "https://github.com/microformats/mf2py")
13390 (synopsis "Python Microformats2 parser")
13391 (description
13392 "This Python library provides a Microformats2 parser implementing the
13393full Microformats2 (mf2) specification, including backward compatibility with
13394Microformats1 (mf1).")
13395 (license license:expat)))
13396
13397(define-public python-extruct
13398 (package
13399 (name "python-extruct")
13400 (version "0.18.0")
13401 (source (origin
13402 (method git-fetch) ;for tests
13403 (uri (git-reference
13404 (url "https://github.com/scrapinghub/extruct")
13405 (commit (string-append "v" version))))
13406 (file-name (git-file-name name version))
13407 (sha256
13408 (base32
13409 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
13410 (build-system pyproject-build-system)
13411 (arguments
13412 (list
13413 #:test-flags
13414 ;; 67 passed, 3 deselected
13415 ;; XXX: 3 tests fail with errors in assertion.
13416 #~(list "-k" (string-append
13417 "not test_microformat"
13418 " and not test_microformat"
13419 " and not test_umicroformat"))))
13420 (native-inputs
13421 (list python-pytest
13422 python-setuptools
13423 python-wheel))
13424 (propagated-inputs
13425 (list python-html-text
13426 python-jstyleson
13427 python-lxml
13428 python-mf2py
13429 python-pyrdfa3
13430 python-rdflib
13431 python-w3lib))
13432 (home-page "https://github.com/scrapinghub/extruct")
13433 (synopsis "Extract embedded metadata from HTML markup")
13434 (description "@code{extruct} is a Python library for extracting embedded
13435metadata from HTML markup. Currently, extruct supports:
13436@itemize
13437@item W3C's HTML Microdata
13438@item embedded JSON-LD
13439@item Microformat via mf2py
13440@item Facebook's Open Graph
13441@item (experimental) RDFa via rdflib
13442@item Dublin Core Metadata (DC-HTML-2003)
13443@end itemize")
13444 (license license:bsd-3)))
13445
13446(define-public python-wadllib
13447 (package
13448 (name "python-wadllib")
13449 (version "2.0.0")
13450 (source
13451 (origin
13452 (method url-fetch)
13453 (uri (pypi-uri "wadllib" version))
13454 (sha256
13455 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
13456 (build-system pyproject-build-system)
13457 (arguments
13458 (list
13459 ;; XXX: Doctests are currently failing.
13460 #:tests? #f
13461 #:phases
13462 #~(modify-phases %standard-phases
13463 (replace 'check
13464 (lambda* (#:key tests? #:allow-other-keys)
13465 (if tests?
13466 (invoke "zope-testrunner" "--test-path=src")
13467 (format #t "test suite not run~%")))))))
13468 (native-inputs
13469 (list python-multipart python-setuptools python-zope-testrunner))
13470 (propagated-inputs (list python-lazr-uri))
13471 (home-page "https://launchpad.net/wadllib")
13472 (synopsis "Web Application Description Language (WADL) navigation library")
13473 (description "The @code{wadllib} Python library allows navigating HTTP
13474resources using Web Application Description Language (WADL) files as guides.")
13475 (license license:lgpl3)))
13476
13477(define-public python-zeep
13478 (package
13479 (name "python-zeep")
13480 (version "4.3.1")
13481 (source
13482 (origin
13483 (method url-fetch)
13484 (uri (pypi-uri "zeep" version))
13485 (sha256
13486 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
13487 (build-system pyproject-build-system)
13488 (arguments
13489 (list
13490 #:phases
13491 '(modify-phases %standard-phases
13492 (add-after 'unpack 'compatibility
13493 (lambda _
13494 ;; Relax requests-file requirement.
13495 (substitute* "pyproject.toml"
13496 (("\"requests-file.*\",")
13497 "\"requests-file\","))
13498 ;; httpx removed the "proxies" keyword. It's now either "mounts"
13499 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
13500 (substitute* "src/zeep/transports.py"
13501 (("proxies=") "proxy="))))
13502 ;; One test requires write access
13503 (add-before 'check 'set-HOME
13504 (lambda _ (setenv "HOME" (getcwd)))))))
13505 (propagated-inputs
13506 (list python-attrs
13507 python-isodate
13508 python-lxml
13509 python-platformdirs
13510 python-pytz
13511 python-requests
13512 python-requests-file
13513 python-requests-toolbelt))
13514 (native-inputs
13515 (list nss-certs-for-test
13516 python-freezegun
13517 python-pretend
13518 python-pytest
13519 python-pytest-asyncio
13520 python-pytest-httpx
13521 python-requests-mock
13522 python-setuptools
13523 python-wheel))
13524 (home-page "https://docs.python-zeep.org/en/stable/")
13525 (synopsis "Python SOAP client based on lxml / requests")
13526 (description "Zeep is a Python SOAP client. Highlights:
13527
13528@itemize
13529@item Build on top of @code{lxml} and @code{requests}.
13530@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
13531@item Support for WS-Addressing headers.
13532@item Support for WSSE (UserNameToken / x.509 signing).
13533@item Support for @code{asyncio} via @code{httpx}.
13534@item Experimental support for XOP messages.
13535@end itemize")
13536 (license license:expat)))
13537
13538(define-public python-http-client
13539 (package
13540 (name "python-http-client")
13541 (version "3.3.7")
13542 (source
13543 (origin
13544 (method git-fetch)
13545 (uri (git-reference
13546 (url "https://github.com/sendgrid/python-http-client")
13547 (commit version)))
13548 (file-name (git-file-name name version))
13549 (sha256
13550 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
13551 (build-system pyproject-build-system)
13552 (arguments
13553 (list
13554 #:test-backend #~'unittest
13555 #:phases
13556 #~(modify-phases %standard-phases
13557 (add-after 'unpack 'fix-tests
13558 (lambda _
13559 ;; The test expects the copyright to be updated each year.
13560 (substitute* "tests/test_daterange.py"
13561 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
13562 (native-inputs
13563 (list python-setuptools))
13564 (home-page "https://github.com/sendgrid/python-http-client")
13565 (synopsis "HTTP REST client for Python")
13566 (description
13567 "This package provides access to any RESTful or RESTful-like API.")
13568 (license license:expat)))
13569
13570(define-public python-sendgrid
13571 (package
13572 (name "python-sendgrid")
13573 (version "6.9.7")
13574 (source
13575 (origin
13576 (method git-fetch)
13577 (uri (git-reference
13578 (url "https://github.com/sendgrid/sendgrid-python")
13579 (commit version)))
13580 (file-name (git-file-name name version))
13581 (sha256
13582 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
13583 (build-system pyproject-build-system)
13584 (arguments
13585 (list
13586 #:test-flags
13587 #~(list "--ignore=test/integ"
13588 ;; Network access is required.
13589 "--ignore=live_test.py")))
13590 (native-inputs
13591 (list python-pytest
13592 python-setuptools))
13593 (propagated-inputs
13594 (list python-cryptography
13595 python-http-client
13596 python-flask
13597 python-pyyaml
13598 python-six ;hard dependency
13599 python-starkbank-ecdsa
13600 python-werkzeug))
13601 (home-page "https://github.com/sendgrid/sendgrid-python/")
13602 (synopsis "SendGrid API library for Python")
13603 (description
13604 "The @code{sendgrid} Python library allows access to the
13605SendGrid Web API v3. Version 3+ of the library provides full support for all
13606SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
13607 (license license:expat)))
13608
13609(define-public python-sse-starlette
13610 (package
13611 (name "python-sse-starlette")
13612 (version "3.4.4")
13613 (source
13614 (origin
13615 (method git-fetch)
13616 (uri (git-reference
13617 (url "https://github.com/sysid/sse-starlette")
13618 (commit (string-append "v" version))))
13619 (file-name (git-file-name name version))
13620 (sha256
13621 (base32 "0jzy3mjszl7fr524cggyf8k97x6jpykvmxldmm2ckmrqjpyj8jmz"))))
13622 (build-system pyproject-build-system)
13623 (arguments
13624 (list
13625 #:test-flags
13626 #~(list
13627 ;; XXX: Server fails to start.
13628 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
13629 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
13630 ;; XXX: Missing test dependency - testcontainers, Docker is required.
13631 "--ignore=tests/integration/test_multiple_consumers.py")))
13632 (native-inputs
13633 (list python-asgi-lifespan
13634 python-httpx
13635 python-portend
13636 python-pytest
13637 python-pytest-asyncio
13638 python-psutil
13639 python-setuptools
13640 python-tenacity
13641 python-uvicorn))
13642 (propagated-inputs
13643 (list python-anyio
13644 python-starlette))
13645 (home-page "https://github.com/sysid/sse-starlette")
13646 (synopsis "SSE plugin for Starlette")
13647 (description
13648 "This package provides SSE plugin for Starlette.")
13649 (license license:bsd-3)))
13650
13651(define-public python-sseclient-py
13652 (package
13653 (name "python-sseclient-py")
13654 (version "1.9.0")
13655 (source
13656 (origin
13657 (method git-fetch)
13658 (uri (git-reference
13659 (url "https://github.com/mpetazzoni/sseclient")
13660 (commit (string-append "sseclient-py-" version))))
13661 (file-name (git-file-name name version))
13662 (sha256
13663 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
13664 (build-system pyproject-build-system)
13665 (native-inputs (list python-hatchling python-pytest))
13666 (arguments
13667 (list
13668 #:test-backend #~'unittest
13669 #:test-flags #~'("discover" "--verbose" "tests")))
13670 (home-page "https://github.com/mpetazzoni/sseclient")
13671 (synopsis "Pure-Python Server Side Events (SSE) client")
13672 (description
13673 "This package provides a Python client for SSE event sources that
13674seamlessly integrates with @code{urllib3} and @code{requests}.")
13675 (license license:asl2.0)))
13676
13677(define-public python-starlette
13678 (package
13679 (name "python-starlette")
13680 (version "0.49.1")
13681 (source (origin
13682 (method git-fetch)
13683 (uri (git-reference
13684 (url "https://github.com/encode/starlette")
13685 (commit version)))
13686 (file-name (git-file-name name version))
13687 (sha256
13688 (base32
13689 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
13690 (build-system pyproject-build-system)
13691 (propagated-inputs (list python-anyio
13692 python-typing-extensions
13693 ;; [all] extra dependencies:
13694 python-itsdangerous
13695 python-jinja2
13696 python-multipart
13697 python-pyyaml
13698 python-requests))
13699 (native-inputs (list python-hatchling
13700 python-httpx
13701 python-pytest
13702 python-typing-extensions))
13703 (home-page "https://github.com/encode/starlette")
13704 (synopsis "Little ASGI library")
13705 (description
13706 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
13707Interface) framework/toolkit for building async web services in Python.")
13708 (license license:bsd-3)))
13709
13710(define-public python-starsessions
13711 (package
13712 (name "python-starsessions")
13713 (version "1.3.0")
13714 (source (origin
13715 (method git-fetch)
13716 (uri (git-reference
13717 (url "https://github.com/alex-oleshkevich/starsessions")
13718 (commit (string-append "v" version))))
13719 (file-name (git-file-name name version))
13720 (sha256
13721 (base32
13722 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
13723 (build-system pyproject-build-system)
13724 (arguments
13725 (list
13726 #:test-flags
13727 ;; These tests require a running redis server
13728 '(list "--ignore=tests/backends/test_redis.py"
13729 ;; XXX: this failure indicates a real compatibility problem, but
13730 ;; it seems restricted to the tests only.
13731 ;; AttributeError: 'Cookies' object has no attribute
13732 ;; 'clear_session_cookies'
13733 "-k"
13734 (string-append "not test_session_clears_on_tab_close"
13735 ;; This fails because an error is not raised.
13736 " and not test_session_wants_secret_key"))
13737 #:phases
13738 '(modify-phases %standard-phases
13739 (add-after 'unpack 'compatibilitiy
13740 (lambda _
13741 ;; aioredis has been renamed
13742 (substitute* "starsessions/backends/redis.py"
13743 (("aioredis") "redis")))))))
13744 (propagated-inputs
13745 (list python-redis
13746 python-itsdangerous
13747 python-starlette))
13748 (native-inputs
13749 (list python-httpx
13750 python-poetry-core
13751 python-pytest
13752 python-pytest-asyncio
13753 python-requests))
13754 (home-page "https://github.com/alex-oleshkevich/starsessions")
13755 (synopsis "Pluggable session support for Starlette and FastAPI")
13756 (description
13757 "This package adds pluggable session backends and ships default
13758@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
13759and FastAPI.")
13760 (license license:expat)))
13761
13762(define-public python-whereismyip
13763 (package
13764 (name "python-whereismyip")
13765 (version "0.1.0")
13766 (source
13767 (origin
13768 (method url-fetch)
13769 (uri (pypi-uri "whereismyip" version))
13770 (sha256
13771 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
13772 (build-system pyproject-build-system)
13773 (arguments (list #:tests? #false)) ; There are no tests.
13774 (native-inputs (list python-setuptools))
13775 (home-page "https://pypi.org/project/whereismyip/")
13776 (synopsis "Queries multiple geolocation services until one succeeds")
13777 (description
13778 "This package provides a simple Python library that queries multiple geolocation
13779services until one succeeds.")
13780 (license license:gpl3)))
13781
13782(define-public python-whitenoise
13783 (package
13784 (name "python-whitenoise")
13785 (version "6.9.0")
13786 (source (origin
13787 (method git-fetch) ; PyPI missing test fails
13788 (uri (git-reference
13789 (url "https://github.com/evansd/whitenoise")
13790 (commit version)))
13791 (file-name (git-file-name name version))
13792 (sha256
13793 (base32
13794 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
13795 (build-system pyproject-build-system)
13796 (arguments
13797 (list
13798 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
13799 (native-inputs (list python-brotli
13800 python-django
13801 python-requests
13802 python-pytest
13803 python-setuptools
13804 python-wheel))
13805 (home-page "https://github.com/evansd/whitenoise")
13806 (synopsis "Static file serving for WSGI applications")
13807 (description
13808 "WhiteNoise allows your web app to serve its own static files, making it
13809a self-contained unit that can be deployed anywhere without relying on nginx,
13810Amazon S3 or any other external service.")
13811 (license license:expat)))
13812
13813(define-public python-suds
13814 (package
13815 (name "python-suds")
13816 (version "1.2.0")
13817 (source
13818 (origin
13819 (method url-fetch)
13820 (uri (pypi-uri "suds" version))
13821 (sha256
13822 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
13823 (build-system pyproject-build-system)
13824 (arguments
13825 (list #:phases
13826 #~(modify-phases %standard-phases
13827 ;; XXX: chirp expects suds instead of suds_community
13828 (add-after 'install 'add-custom-dist-info
13829 (lambda _
13830 (for-each
13831 (lambda (dir)
13832 (with-directory-excursion (dirname dir)
13833 (symlink
13834 (basename dir)
13835 (string-append "suds-" #$version ".dist-info"))))
13836 (find-files #$output
13837 (lambda (file stat)
13838 (string-suffix? ".dist-info" file))
13839 #:directories? #t)))))))
13840 (native-inputs
13841 (list python-pytest
13842 python-setuptools
13843 python-wheel))
13844 (home-page "https://github.com/suds-community/suds")
13845 (synopsis "Lightweight SOAP python client for consuming Web Services")
13846 (description
13847 "Suds is a lightweight SOAP-based web service client for Python.")
13848 (license license:lgpl3+)))
13849
13850(define-public python-fastapi
13851 (package
13852 (name "python-fastapi")
13853 (version "0.131.0")
13854 (source
13855 (origin
13856 (method url-fetch)
13857 (uri (pypi-uri "fastapi" version))
13858 (sha256
13859 (base32 "1zs80pz8p04akxxmyfihqgii1wjhhad6qx1cjfd8kqmya9g1acb5"))))
13860 (build-system pyproject-build-system)
13861 (arguments
13862 (list
13863 ;; tests: 1126 passed, 12 skipped, 2 deselected
13864 #:test-backend #~'custom
13865 #:test-flags
13866 #~(list
13867 ;; Cannot import 'scripts' with just 'pytest'.
13868 "-m" "pytest"
13869 ;; Needs strawberry and sqlmodel.
13870 "--ignore=tests/test_tutorial/"
13871 ;; Fails due to failure to capture stdout.
13872 "--ignore=tests/test_fastapi_cli.py")))
13873 (native-inputs
13874 (list python-anyio
13875 python-dirty-equals
13876 python-flask
13877 python-inline-snapshot
13878 python-pdm-backend
13879 ;; python-pwdlib
13880 python-pyjwt
13881 python-pytest
13882 python-sqlalchemy-2
13883 ;; python-sqlmodel
13884 python-types-orjson
13885 python-types-ujson))
13886 (propagated-inputs
13887 (list python-starlette
13888 python-pydantic
13889 python-typing-extensions
13890 python-annotated-doc
13891 ;; [optional]
13892 python-email-validator
13893 python-fastapi-cli
13894 python-httpx
13895 python-itsdangerous
13896 python-jinja2
13897 python-multipart
13898 python-orjson
13899 python-pydantic-extra-types
13900 python-pydantic-settings
13901 python-pyyaml
13902 python-ujson
13903 python-uvicorn))
13904 (home-page "https://github.com/fastapi/fastapi")
13905 (synopsis "Web framework based on type hints")
13906 (description "FastAPI provides a web API framework based on pydantic and
13907starlette.")
13908 (license license:expat)))
13909
13910(define-public python-fastapi-csrf-protect
13911 (package
13912 (name "python-fastapi-csrf-protect")
13913 (version "0.3.3")
13914 (source (origin
13915 (method git-fetch)
13916 (uri (git-reference
13917 (url "https://github.com/aekasitt/fastapi-csrf-protect")
13918 (commit (string-append "v" version))))
13919 (file-name (git-file-name name version))
13920 (sha256
13921 (base32
13922 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
13923 (build-system pyproject-build-system)
13924 (propagated-inputs
13925 (list python-fastapi python-itsdangerous
13926 python-pydantic))
13927 (native-inputs
13928 (list python-poetry-core
13929 python-pytest))
13930 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
13931 (synopsis "Cross-Site Request Forgery (XSRF) protection")
13932 (description
13933 "This package provides a stateless implementation of @dfn{Cross-Site
13934Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
13935pattern.")
13936 (license license:expat)))
13937
13938(define-public python-fastapi-pagination-minimal
13939 (package
13940 (name "python-fastapi-pagination-minimal")
13941 (version "0.15.6")
13942 (source (origin
13943 (method git-fetch)
13944 (uri (git-reference
13945 (url "https://github.com/uriyyo/fastapi-pagination")
13946 (commit version)))
13947 (file-name (git-file-name name version))
13948 (sha256
13949 (base32
13950 "1ndazaqi1na0lj6fi42d7mi9lmpxdak0wq0pd97fb3b23ml8rlg6"))))
13951 (build-system pyproject-build-system)
13952 ;; We run the tests in python-fastapi-pagination only.
13953 (arguments (list #:tests? #false))
13954 ;; These are the only required dependencies,
13955 ;; please add all optional dependencies to the
13956 ;; full python-fastapi-pagination below.
13957 (propagated-inputs (list python-fastapi python-pydantic))
13958 (native-inputs (list python-hatchling))
13959 (home-page "https://github.com/uriyyo/fastapi-pagination")
13960 (synopsis "FastAPI pagination library")
13961 (description "@code{fastapi-pagination} is a Python library designed to
13962simplify pagination in FastAPI applications. It provides a set of utility
13963functions and data models to help you paginate your database queries and
13964return paginated responses to your clients.")
13965 (license license:expat)))
13966
13967(define-public python-fastapi-pagination
13968 (package
13969 (inherit python-fastapi-pagination-minimal)
13970 (name "python-fastapi-pagination")
13971 (arguments
13972 (list
13973 #:test-flags
13974 #~(list "--asyncio-mode=auto"
13975 "--ignore=tests/ext"
13976 ;; Netwok access is required.
13977 "-k" (string-join
13978 (list "not test_optional_params[postgres-default]"
13979 "test_optional_params[postgres-limit-offset]"
13980 "test_optional_params[sqlite-default]"
13981 "test_optional_params[sqlite-limit-offset]")
13982 " and not "))
13983 #:phases
13984 '(modify-phases %standard-phases
13985 (add-after 'unpack 'patch-tests
13986 (lambda _
13987 ;; We don't have a package for python-cassandra or motor, but we
13988 ;; also don't need them as we only run the unit tests anyway.
13989 (substitute* "tests/conftest.py"
13990 (("from cassandra.*") "")
13991 (("from motor.*") "")))))))
13992 (propagated-inputs
13993 (modify-inputs (package-propagated-inputs
13994 python-fastapi-pagination-minimal)
13995 (prepend python-asyncpg
13996 python-databases
13997 python-django
13998 python-fastapi
13999 python-pydantic
14000 python-sqlalchemy
14001 (package
14002 (inherit python-tortoise-orm)
14003 (arguments
14004 (substitute-keyword-arguments (package-arguments
14005 python-tortoise-orm)
14006 ((#:phases phases '%standard-phases)
14007 `(modify-phases ,phases
14008 (delete 'sanity-check)))))
14009 (propagated-inputs
14010 (modify-inputs propagated-inputs
14011 (replace "python-aiosqlite" python-aiosqlite)))))))
14012 (native-inputs
14013 (list python-aiosqlite
14014 python-asgi-lifespan
14015 python-asyncpg
14016 python-dirty-equals
14017 python-faker
14018 python-hatchling
14019 python-httpx
14020 python-pytest
14021 python-pytest-asyncio
14022 python-sqlalchemy
14023 python-typing-extensions))
14024 (description
14025 (string-append (package-description python-fastapi-pagination-minimal)
14026 "
14027
14028This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
14029all available optional dependencies supported by mainline
14030@code{fastapi-pagination}."))))
14031
14032(define-public python-fastapi-cli
14033 (package
14034 (name "python-fastapi-cli")
14035 (version "0.0.7")
14036 (source
14037 (origin
14038 (method url-fetch)
14039 (uri (pypi-uri "fastapi_cli" version))
14040 (sha256
14041 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
14042 (build-system pyproject-build-system)
14043 ;; Tests require fastapi, which depends on this package.
14044 (arguments (list #:tests? #false))
14045 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
14046 (native-inputs
14047 (list python-inline-snapshot python-pdm-backend python-pytest))
14048 (home-page "https://pypi.org/project/fastapi-cli/")
14049 (synopsis
14050 "Run and manage FastAPI apps from the command line with FastAPI CLI")
14051 (description
14052 "FastAPI CLI is a command line program fastapi that you can use to serve
14053your FastAPI app, manage your FastAPI project, and more.")
14054 (license license:expat)))
14055
14056(define-public python-pyactiveresource
14057 (package
14058 (name "python-pyactiveresource")
14059 (version "2.2.2")
14060 (source
14061 (origin
14062 (method git-fetch)
14063 (uri (git-reference
14064 (url "https://github.com/Shopify/pyactiveresource")
14065 (commit (string-append "v" version))))
14066 (file-name (git-file-name name version))
14067 (sha256
14068 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
14069 (build-system pyproject-build-system)
14070 ;; XXX: The package is fine, but the tests started failing on [email protected].
14071 ;; The package is not actively maintained, consider removing it once leaf.
14072 (arguments (list #:tests? #f))
14073 (native-inputs
14074 (list python-dateutil python-pytest python-pyyaml python-setuptools))
14075 (propagated-inputs (list python-six))
14076 (home-page "https://github.com/Shopify/pyactiveresource/")
14077 (synopsis "ActiveResource for Python")
14078 (description
14079 "This package provides a Python port of the ActiveResource project.
14080
14081Active Resource attempts to provide a coherent wrapper object-relational
14082mapping for REST web services. It follows the same philosophy as Active
14083Record, in that one of its prime aims is to reduce the amount of code needed
14084to map to these resources. This is made possible by relying on a number of
14085code- and protocol-based conventions that make it easy for Active Resource to
14086infer complex relations and structures.")
14087 (license license:expat)))
14088
14089(define-public python-shopifyapi
14090 (package
14091 (name "python-shopifyapi")
14092 (version "12.7.0")
14093 (source
14094 (origin
14095 (method git-fetch)
14096 (uri (git-reference
14097 (url "https://github.com/Shopify/shopify_python_api")
14098 (commit (string-append "v" version))))
14099 (file-name (git-file-name name version))
14100 (sha256
14101 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
14102 (build-system pyproject-build-system)
14103 (arguments
14104 (list
14105 #:test-flags
14106 #~'("-k"
14107 ;; Disable a failing test.
14108 "not test_raises_if_aud_doesnt_match_api_key")))
14109 (native-inputs (list python-mock python-pytest python-setuptools))
14110 (propagated-inputs (list python-pyactiveresource python-pyjwt
14111 python-pyyaml python-six))
14112 (home-page "https://github.com/Shopify/shopify_python_api")
14113 (synopsis "Shopify API for Python")
14114 (description
14115 "This package provides the Shopify API for Python.
14116
14117The ShopifyAPI library allows Python developers to programmatically access the
14118admin section of stores using an ActiveResource-like interface similar the
14119ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
14120list, create, update, or delete resources (e.g. Order, Product, Collection).")
14121 (license license:expat)))
14122
14123(define-public python-pybadges
14124 (package
14125 (name "python-pybadges")
14126 (version "3.0.1")
14127 (source (origin
14128 (method git-fetch)
14129 (uri (git-reference
14130 (url "https://github.com/google/pybadges")
14131 (commit version)))
14132 (file-name (git-file-name name version))
14133 (sha256
14134 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
14135 (build-system pyproject-build-system)
14136 (arguments
14137 (list
14138 #:test-flags
14139 #~'("-k"
14140 ;; Disable network dependent tests.
14141 "not test_changes and not test_not_image_url and not test_http_url")))
14142 (propagated-inputs (list python-jinja2 python-requests python-setuptools))
14143 (native-inputs (list python-flask
14144 python-fonttools
14145 python-pillow
14146 python-pytest
14147 python-wheel
14148 python-xmldiff))
14149 (home-page "https://github.com/google/pybadges")
14150 (synopsis "Generate Github-style badges on the command-line")
14151 (description
14152 "This package provides @code{python-pybadges}: a library and command-line
14153tool for generating Github-style badges as SVG images.")
14154 (license license:asl2.0)))
14155
14156(define-public python-grid5000
14157 (package
14158 (name "python-grid5000")
14159 (version "1.2.4")
14160 (source (origin
14161 (method git-fetch)
14162 (uri (git-reference
14163 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
14164 (commit (string-append "v" version))))
14165 (file-name (git-file-name name version))
14166 (sha256
14167 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
14168 (build-system pyproject-build-system)
14169 (arguments
14170 (list #:tests? #f)) ; No tests.
14171 (native-inputs (list python-setuptools))
14172 (propagated-inputs (list python-requests python-ipython python-pyyaml))
14173 (home-page "https://pypi.org/project/python-grid5000/")
14174 (synopsis "Grid5000 python client")
14175 (description
14176 "python-grid5000 is a python package wrapping the Grid5000 REST API.
14177You can use it as a library in your python project or you can explore the
14178Grid5000 resources interactively using the embedded shell.")
14179 (license license:gpl3+)))
14180
14181(define-public python-enoslib
14182 (package
14183 (name "python-enoslib")
14184 (version "8.0.1")
14185 (source
14186 (origin
14187 (method git-fetch)
14188 (uri (git-reference
14189 (url "https://gitlab.inria.fr/discovery/enoslib")
14190 (commit (string-append "v" version))))
14191 (file-name (git-file-name name version))
14192 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
14193 (arguments
14194 (list
14195 #:test-flags
14196 #~(list "enoslib/tests/unit"
14197 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
14198 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
14199 #:phases
14200 #~(modify-phases %standard-phases
14201 (add-before 'check 'pre-check
14202 (lambda* (#:key tests? #:allow-other-keys)
14203 (when tests?
14204 ;; Otherwise Ansible fails to create its config directory.
14205 (setenv "HOME" "/tmp"))))
14206 ;; Disable the sanity check, which fails with the following error:
14207 ;;
14208 ;; ContextualVersionConflict(rich 12.4.1
14209 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
14210 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
14211 ;;
14212 ;; The optional jupyter dependency of rich isn't critical for
14213 ;; EnOSlib to work
14214 (delete 'sanity-check))))
14215 (build-system pyproject-build-system)
14216 (native-inputs
14217 (list python-ddt
14218 python-freezegun
14219 python-pytest
14220 python-setuptools
14221 python-wheel))
14222 (propagated-inputs
14223 (list ansible
14224 python-cryptography
14225 python-grid5000
14226 python-jsonschema
14227 python-netaddr
14228 python-packaging
14229 python-requests
14230 python-rich
14231 python-sshtunnel
14232 python-pytz))
14233 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
14234 (synopsis "Deploy distributed testbeds on a variety of platforms")
14235 (description
14236 "EnOSlib is a library to build experimental frameworks on various
14237scientific testbeds. It lets you deploy networks of machines on actual
14238hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
14239 (license license:gpl3+)))
14240
14241(define-public python-pynetbox
14242 (package
14243 (name "python-pynetbox")
14244 (version "7.4.1")
14245 (source (origin
14246 (method url-fetch)
14247 (uri (pypi-uri "pynetbox" version))
14248 (sha256
14249 (base32
14250 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
14251 (build-system pyproject-build-system)
14252 (arguments
14253 (list
14254 #:test-flags
14255 ;; Integration tests depend on docker.
14256 '(list "--ignore=tests/integration")))
14257 (propagated-inputs (list python-packaging python-requests))
14258 (native-inputs
14259 (list python-pytest
14260 python-setuptools
14261 python-setuptools-scm
14262 python-wheel))
14263 (home-page "https://github.com/netbox-community/pynetbox")
14264 (synopsis "NetBox API client library")
14265 (description "Python module to query and edit data stored in a
14266@url{https://netbox.dev,NetBox} instance.")
14267 (license license:asl2.0)))
14268
14269(define-public python-waybackpack
14270 (package
14271 (name "python-waybackpack")
14272 (version "0.6.4")
14273 (source
14274 (origin
14275 (method url-fetch)
14276 (uri (pypi-uri "waybackpack" version))
14277 (sha256
14278 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14279 (build-system pyproject-build-system)
14280 (arguments
14281 (list #:tests? #f)) ; would require network (and SSL certificates)
14282 (propagated-inputs (list python-requests))
14283 (native-inputs (list python-pytest python-setuptools python-wheel))
14284 (home-page "https://github.com/jsvine/waybackpack")
14285 (synopsis
14286 "Download the entire Wayback Machine archive for a given URL")
14287 (description
14288 "This package provides a library and a command-line tool that lets
14289you download the entire Wayback Machine archive for a given URL.")
14290 (license license:expat)))
14291
14292(define-public python-xyzservices
14293 (package
14294 (name "python-xyzservices")
14295 (version "2025.4.0")
14296 (source
14297 (origin
14298 (method url-fetch)
14299 (uri (pypi-uri "xyzservices" version))
14300 (sha256
14301 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14302 (build-system pyproject-build-system)
14303 (arguments
14304 (list
14305 #:test-flags #~(list "-m" "not request")))
14306 (native-inputs
14307 (list python-pytest
14308 python-mercantile
14309 python-requests
14310 python-setuptools
14311 python-setuptools-scm))
14312 (home-page "https://github.com/geopandas/xyzservices")
14313 (synopsis "Source of XYZ tiles providers")
14314 (description "@code{xyzservices} is a lightweight library providing a
14315repository of available XYZ services offering raster basemap tiles. The
14316repository is provided via Python API and as a compressed JSON file.")
14317 (license license:bsd-3)))
14318
14319(define-public s3cmd
14320 (package
14321 (name "s3cmd")
14322 (version "2.4.0")
14323 (source
14324 (origin
14325 (method git-fetch)
14326 (uri (git-reference
14327 (url "https://github.com/s3tools/s3cmd")
14328 (commit (string-append "v" version))))
14329 (file-name (git-file-name name version))
14330 (sha256
14331 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14332 (build-system pyproject-build-system)
14333 (arguments
14334 (list
14335 #:tests? #f ; XXX: Tests require network access.
14336 #:phases
14337 #~(modify-phases %standard-phases
14338 (add-after 'unpack 'hide-wrapping
14339 (lambda _
14340 (substitute* "S3/MultiPart.py"
14341 (("sys\\.argv\\[0\\]")
14342 "\"s3cmd\""))
14343 (substitute* "s3cmd"
14344 (("optparser\\.get_prog_name\\(\\)")
14345 "\"s3cmd\"")))))))
14346 (native-inputs (list python-setuptools))
14347 (inputs (list python-dateutil python-magic))
14348 (home-page "https://s3tools.org/s3cmd")
14349 (synopsis "Command line tool for S3-compatible storage services")
14350 (description
14351 "S3cmd is a command line tool for uploading, retrieving and managing data
14352in storage services that are compatible with the Amazon Simple Storage
14353Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14354GnuPG encryption, and more. It also supports management of Amazon's
14355CloudFront content delivery network.")
14356 (license license:gpl2+)))