projects/guix·blob nckx-patch-1 · refs

14080 lines · 508.4 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015-2025 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Christopher Baines <[email protected]>
5;;; Copyright © 2017 Muriithi Frederick Muriuki <[email protected]>
6;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
7;;; Copyright © 2013, 2014, 2015, 2016, 2020, 2023 Andreas Enge <[email protected]>
8;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
9;;; Copyright © 2015-2025 Ricardo Wurmus <[email protected]>
10;;; Copyright © 2017, 2021 Roel Janssen <[email protected]>
11;;; Copyright © 2016, 2017, 2020 Julien Lepiller <[email protected]>
12;;; Copyright © 2016, 2017 Nikita <[email protected]>
13;;; Copyright © 2014, 2017, 2021 Eric Bavier <[email protected]>
14;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
15;;; Copyright © 2015 Cyril Roelandt <[email protected]>
16;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
17;;; Copyright © 2016, 2019, 2022, 2025 Hartmut Goebel <[email protected]>
18;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <[email protected]>
19;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
20;;; Copyright © 2015, 2016 Christine Lemmer-Webber <[email protected]>
21;;; Copyright © 2017 Adriano Peluso <[email protected]>
22;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
23;;; Copyright © 2016 David Craven <[email protected]>
24;;; Copyright © 2017 Oleg Pykhalov <[email protected]>
25;;; Copyright © 2015, 2016 David Thompson <[email protected]>
26;;; Copyright © 2017 Mark Meyer <[email protected]>
27;;; Copyright © 2018 Clément Lassieur <[email protected]>
28;;; Copyright © 2018 Tomáš Čech <[email protected]>
29;;; Copyright © 2018, 2019, 2021, 2024 Nicolas Goaziou <[email protected]>
30;;; Copyright © 2018 Mathieu Othacehe <[email protected]>
31;;; Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
32;;; Copyright © 2018 swedebugia <[email protected]>
33;;; Copyright © 2019 Vagrant Cascadian <[email protected]>
34;;; Copyright © 2019, 2023 Brendan Tildesley <[email protected]>
35;;; Copyright © 2019 Pierre Langlois <[email protected]>
36;;; Copyright © 2019, 2020 Tanguy Le Carrour <[email protected]>
37;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
38;;; Copyright © 2020 Josh Marshall <[email protected]>
39;;; Copyright © 2020 Evan Straw <[email protected]>
40;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
41;;; Copyright © 2020 Holger Peters <[email protected]>
42;;; Copyright © 2020 Noisytoot <[email protected]>
43;;; Copyright © 2020 Edouard Klein <[email protected]>
44;;; Copyright © 2020, 2021, 2022, 2023, 2025 Vinicius Monego <[email protected]>
45;;; Copyright © 2020 Konrad Hinsen <[email protected]>
46;;; Copyright © 2020, 2022, 2024 Giacomo Leidi <[email protected]>
47;;; Copyright © 2020 Raghav Gururajan <[email protected]>
48;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
49;;; Copyright © 2021 Greg Hogan <[email protected]>
50;;; Copyright © 2021 Maxime Devos <[email protected]>
51;;; Copyright © 2021 Pradana Aumars <[email protected]>
52;;; Copyright © 2021, 2022, 2024, 2026 Arun Isaac <[email protected]>
53;;; Copyright © 2021-2022, 2024-2025 jgart <[email protected]>
54;;; Copyright © 2021 Alice Brenon <[email protected]>
55;;; Copyright © 2021 Mekeor Melire <[email protected]>
56;;; Copyright © 2022 John Kehayias <[email protected]>
57;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email protected]>
58;;; Copyright © 2022, 2023, 2025 Felix Gruber <[email protected]>
59;;; Copyright © 2022 Peter Polidoro <[email protected]>
60;;; Copyright © 2022 Antero Mejr <[email protected]>
61;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
62;;; Copyright © 2022, 2025 Nicolas Graves <[email protected]>
63;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
64;;; Copyright © 2022 msimonin <[email protected]>
65;;; Copyright © 2022 Michael Rohleder <[email protected]>
66;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
67;;; Copyright © 2023 dan <[email protected]>
68;;; Copyright © 2023 John Kehayias <[email protected]>
69;;; Copyright © 2023 Juliana Sims <[email protected]>
70;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
71;;; Copyright © 2024 Fabio Natali <[email protected]>
72;;; Copyright © 2024 Steve George <[email protected]>
73;;; Copyright © 2024 Troy Figiel <[email protected]>
74;;; Copyright © 2024, 2025 Sharlatan Hellseher <[email protected]>
75;;; Copyright © 2024 normally_js <[email protected]>
76;;; Copyright © 2024 Markku Korkeala <[email protected]>
77;;; Copyright © 2024 Nguyễn Gia Phong <[email protected]>
78;;; Copyright © 2024 Zheng Junjie <[email protected]>
79;;; Copyright © 2024 Spencer King <[email protected]>
80;;; Copyright © 2024 Attila Lendvai <[email protected]>
81;;; Copyright © 2025 Daniel Ziltener <[email protected]>
82;;; Copyright © 2025 gemmaro <[email protected]>
83;;; Copyright © 2025 Sergio Pastor Pérez <[email protected]>
84;;; Copyright © 2025 Jake Forster <[email protected]>
85;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
86;;; Copyright © 2025 Hugo Buddelmeijer <[email protected]>
87;;; Copyright © 2025-2026 Artur Wroblewski <[email protected]>
88;;; Copyright © 2025, 2026 Allan Adair <[email protected]>
89;;; Copyright © 2025 Aaron Covrig <[email protected]>
90;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
91;;; Copyright © 2026 mst <[email protected]>
92;;;
93;;; This file is part of GNU Guix.
94;;;
95;;; GNU Guix is free software; you can redistribute it and/or modify it
96;;; under the terms of the GNU General Public License as published by
97;;; the Free Software Foundation; either version 3 of the License, or (at
98;;; your option) any later version.
99;;;
100;;; GNU Guix is distributed in the hope that it will be useful, but
101;;; WITHOUT ANY WARRANTY; without even the implied warranty of
102;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
103;;; GNU General Public License for more details.
104;;;
105;;; You should have received a copy of the GNU General Public License
106;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
107
108(define-module (gnu packages python-web)
109 #:use-module ((guix licenses) #:prefix license:)
110 #:use-module (guix build-system cargo)
111 #:use-module (guix build-system copy)
112 #:use-module (guix build-system pyproject)
113 #:use-module (guix build-system python)
114 #:use-module (guix deprecation)
115 #:use-module (guix download)
116 #:use-module (guix gexp)
117 #:use-module (guix git-download)
118 #:use-module (guix packages)
119 #:use-module (guix utils)
120 #:use-module (gnu packages admin)
121 #:use-module (gnu packages adns)
122 #:use-module (gnu packages base)
123 #:use-module (gnu packages bash)
124 #:use-module (gnu packages nss)
125 #:use-module (gnu packages check)
126 #:use-module (gnu packages cmake)
127 #:use-module (gnu packages compression)
128 #:use-module (gnu packages curl)
129 #:use-module (gnu packages databases)
130 #:use-module (gnu packages django)
131 #:use-module (gnu packages freedesktop)
132 #:use-module (gnu packages glib)
133 #:use-module (gnu packages gnupg)
134 #:use-module (gnu packages graphviz)
135 #:use-module (gnu packages groff)
136 #:use-module (gnu packages iso-codes)
137 #:use-module (gnu packages libevent)
138 #:use-module (gnu packages libffi)
139 #:use-module (gnu packages libidn)
140 #:use-module (gnu packages linux)
141 #:use-module (gnu packages lsof)
142 #:use-module (gnu packages node)
143 #:use-module (gnu packages openstack)
144 #:use-module (gnu packages pcre)
145 #:use-module (gnu packages pkg-config)
146 #:use-module (gnu packages protobuf)
147 #:use-module (gnu packages python)
148 #:use-module (gnu packages python-build)
149 #:use-module (gnu packages python-check)
150 #:use-module (gnu packages python-compression)
151 #:use-module (gnu packages python-crypto)
152 #:use-module (gnu packages python-science)
153 #:use-module (gnu packages python-xyz)
154 #:use-module (gnu packages qt)
155 #:use-module (gnu packages rdf)
156 #:use-module (gnu packages rpc)
157 #:use-module (gnu packages rust)
158 #:use-module (gnu packages rust-apps)
159 #:use-module (gnu packages serialization)
160 #:use-module (gnu packages sphinx)
161 #:use-module (gnu packages texinfo)
162 #:use-module (gnu packages time)
163 #:use-module (gnu packages tls)
164 #:use-module (gnu packages version-control)
165 #:use-module (gnu packages web)
166 #:use-module (gnu packages xml)
167 #:use-module (gnu packages)
168 #:use-module (srfi srfi-1))
169
170(define-public python-aiocoap
171 (package
172 (name "python-aiocoap")
173 (version "0.4.14")
174 (source
175 (origin
176 (method git-fetch) ; tests miss data and module files in PyPI release
177 (uri (git-reference
178 (url "https://github.com/chrysn/aiocoap")
179 (commit version)))
180 (file-name (git-file-name name version))
181 (sha256
182 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
183 (build-system pyproject-build-system)
184 (arguments
185 (list
186 #:test-flags
187 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
188 ;; 8683, 0, 0): address already in use
189 #~(list "--ignore=tests/test_server.py"
190 "-k" (string-join
191 ;; TypeError: can only concatenate str (not "NoneType") to
192 ;; str
193 (list "not test_options"
194 "test_uri_parser"
195 "test_help" ; returned non-zero exit status 1.
196 "test_routing" ; address already in use
197 "test_tls")
198 " and not "))))
199 (native-inputs
200 (list openssl ;for tests/test_tls.py
201 python-pytest
202 python-setuptools
203 python-wheel))
204 (propagated-inputs
205 (list ;; python-cbor-diag
206 python-cbor2
207 python-cryptography
208 ;; python-dtlssocket
209 python-filelock
210 ;; python-ge25519
211 python-pygments
212 python-termcolor
213 python-websockets))
214 (home-page "https://github.com/chrysn/aiocoap")
215 (synopsis "Python CoAP library")
216 (description
217 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
218Constrained Application Protocol}, http://coap.space/}. It facilitates
219writing applications that talk to network enabled embedded
220@acronym{IoT,Internet of Things} devices.")
221 (license license:expat)))
222
223(define-public python-alpaca-py
224 (package
225 (name "python-alpaca-py")
226 (version "0.43.2")
227 (source
228 (origin
229 (method git-fetch)
230 (uri (git-reference
231 (url "https://github.com/alpacahq/alpaca-py")
232 (commit (string-append "v" version))))
233 (file-name (git-file-name name version))
234 (sha256
235 (base32 "0majn27r2s2z5nbqvkpmw04kswhj9xkmvmm0rkvb3fga9lwwivlb"))))
236 (build-system pyproject-build-system)
237 (arguments
238 (list
239 #:phases
240 #~(modify-phases %standard-phases
241 (add-before 'build 'set-version
242 (lambda _
243 (setenv "POETRY_DYNAMIC_VERSIONING_BYPASS"
244 #$(version-major+minor+point version)))))))
245 (native-inputs
246 (list python-poetry-core
247 python-poetry-dynamic-versioning
248 python-pytest
249 python-pytest-asyncio
250 python-requests-mock))
251 (propagated-inputs
252 (list python-msgpack
253 python-pandas
254 python-pydantic
255 python-requests
256 python-sseclient-py
257 python-websockets))
258 (home-page "https://alpaca.markets/sdks/python/")
259 (synopsis "Alpaca API official Python SDK")
260 (description
261 "Alpaca-py provides an interface to REST, WebSocket and SSE endpoints
262that allow interaction with the @url{https://alpaca.markets/, Alpaca} API.")
263 (license license:asl2.0)))
264
265(define-public python-anaconda-client
266 (package
267 (name "python-anaconda-client")
268 (version "1.13.1")
269 (source
270 (origin
271 (method git-fetch)
272 (uri (git-reference
273 (url "https://github.com/Anaconda-Platform/anaconda-client")
274 (commit version)))
275 (file-name (git-file-name name version))
276 (sha256
277 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
278 (build-system pyproject-build-system)
279 (arguments
280 (list
281 #:test-flags
282 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
283 "--deselect=tests/utils/test_conda.py::test_conda_vars")
284 #:phases
285 #~(modify-phases %standard-phases
286 (add-after 'unpack 'fix-pytest-config
287 (lambda _
288 (substitute* "setup.cfg"
289 (("addopts=.*") "addopts=\n")))))))
290 (native-inputs
291 (list python-freezegun
292 python-pytest
293 python-setuptools))
294 (propagated-inputs
295 (list python-anaconda-cli-base
296 python-conda-package-handling
297 python-conda-package-streaming
298 python-dateutil
299 python-defusedxml
300 python-nbformat
301 python-pillow
302 python-platformdirs
303 python-pytz
304 python-pyyaml
305 python-requests
306 python-requests-toolbelt
307 python-setuptools
308 python-tqdm
309 python-urllib3))
310 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
311 (synopsis "Anaconda Cloud command line client library")
312 (description
313 "Anaconda Cloud command line client library provides an interface to
314Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
315environments.")
316 (license license:bsd-3)))
317
318(define-public python-apprise
319 (package
320 (name "python-apprise")
321 (version "1.9.4")
322 (source
323 (origin
324 (method url-fetch)
325 (uri (pypi-uri "apprise" version))
326 (sha256
327 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
328 (build-system pyproject-build-system)
329 (arguments
330 (list
331 ;; These tests used to be ran with --numprocesses, but that seems to have
332 ;; made them non-deterministic.
333 #:test-flags
334 #~(list "--ignore=tests/test_plugin_macosx.py"
335 "-k" "not test_plugin_glib_send_raises_generic")))
336 (native-inputs
337 (list python-babel
338 python-pytest
339 python-pytest-mock
340 python-setuptools))
341 (propagated-inputs
342 (list python-certifi
343 python-click
344 python-markdown
345 python-pygobject
346 python-pyyaml
347 python-requests
348 python-requests-oauthlib))
349 (home-page "https://github.com/caronc/apprise")
350 (synopsis "Push notification library")
351 (description
352 "Apprise is a Python library that allows sending push notifications to a
353broad range of notification services, such as Telegram, Discord, Slack, Amazon
354SNS, Gotify, etc.")
355 (license license:bsd-2)))
356
357(define-public python-asyncudp
358 (package
359 (name "python-asyncudp")
360 (version "0.11.0")
361 (source
362 (origin
363 (method git-fetch)
364 (uri (git-reference
365 (url "https://github.com/eerimoq/asyncudp")
366 (commit version)))
367 (file-name (git-file-name name version))
368 (sha256
369 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
370 (build-system pyproject-build-system)
371 (native-inputs (list python-pytest python-setuptools))
372 (home-page (git-reference-url (origin-uri source)))
373 (synopsis "High level UDP sockets for asyncio")
374 (description
375 "This package provides a Python library offering high level UDP sockets
376for asyncio. Import it alongside asyncio and use its API to send and receive
377UDP packets.")
378 (license license:expat)))
379
380(define-public python-behave-web-api
381 (package
382 (name "python-behave-web-api")
383 (version "2.3.0")
384 (source
385 (origin
386 (method git-fetch)
387 (uri (git-reference
388 (url "https://github.com/jefersondaniel/behave-web-api")
389 (commit (string-append "v" version))))
390 (file-name (git-file-name name version))
391 (sha256
392 (base32 "1r8yx8gb5m599cpdqfvk6z9ax3qj26fpvczdr84z8jya0dxfch4p"))))
393 (build-system pyproject-build-system)
394 (native-inputs
395 (list python-pytest
396 python-setuptools))
397 (propagated-inputs
398 (list behave
399 python-requests))
400 (home-page "https://github.com/jefersondaniel/behave-web-api")
401 (synopsis "Provides testing for JSON APIs with Behave for Python")
402 (description "This package provides testing utility modules for testing
403JSON APIs with Behave.")
404 (license license:expat)))
405
406(define-public python-blacksheep
407 (package
408 (name "python-blacksheep")
409 (version "2.4.6")
410 (source
411 (origin
412 (method git-fetch)
413 (uri (git-reference
414 (url "https://github.com/Neoteroi/BlackSheep")
415 (commit (string-append "v" version))))
416 (file-name (git-file-name name version))
417 (sha256
418 (base32 "120q6hrhfjxdsqav8h5z8yqfi0iiacwxbkryjk7kb20ic2879vqh"))))
419 (build-system pyproject-build-system)
420 (arguments
421 (list
422 ;; tests: 1821 passed
423 ;;
424 ;; Run all unit tests, but do not run integration tests from `itests`
425 ;; directory.
426 #:test-flags
427 #~(list "tests")
428 #:phases
429 #~(modify-phases %standard-phases
430 (add-before 'build 'cythonize
431 (lambda _
432 (with-directory-excursion "blacksheep"
433 (for-each (lambda (file)
434 (invoke "cython" "-3" file "-I" "."))
435 (find-files "." ".*\\.pyx$"))))))))
436 (native-inputs
437 (list nss-certs-for-test
438 python-cython
439 python-flask
440 python-jinja2
441 python-pydantic
442 python-pyjwt
443 python-pytest
444 python-pytest-asyncio
445 python-setuptools))
446 (propagated-inputs
447 (list python-certifi
448 python-essentials
449 python-essentials-openapi
450 python-guardpost
451 python-httptools
452 python-rodi
453 python-itsdangerous))
454 (home-page "https://github.com/Neoteroi/BlackSheep")
455 (synopsis "Asynchronous framework to build event based web applications")
456 (description
457 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
458
459The framework offers
460@itemize
461@item A rich code API, based on dependency injection and inspired by Flask and
462ASP.NET Core.
463@item A typing-friendly codebase, which enables a comfortable development
464experience thanks to hints when coding with IDEs.
465@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
466and JSON.
467@item A cross-platform framework, using the most modern versions of Python.
468@item Good performance.
469@end itemize")
470 (license license:expat)))
471
472(define-public python-bleach
473 (package
474 (name "python-bleach")
475 (version "6.3.0")
476 (source
477 (origin
478 (method git-fetch)
479 (uri (git-reference
480 (url "https://github.com/mozilla/bleach")
481 (commit (string-append "v" version))))
482 (file-name (git-file-name name version))
483 (sha256
484 (base32 "02abk9ixn010sqpbdsd7nxms0gv4prwv6d3nplb8giq85lpn1kkb"))
485 (snippet
486 #~(begin
487 (use-modules (guix build utils))
488 (substitute* (find-files "." "\\.py$")
489 (("bleach\\._vendor\\.html5lib") "html5lib"))
490 (delete-file-recursively "bleach/_vendor/html5lib")))))
491 (build-system pyproject-build-system)
492 (arguments
493 (list
494 ;; tests: 448 passed, 1 deselected, 3 xfailed
495 #:test-flags
496 #~(list (string-append "--deselect=tests/test_clean.py::"
497 "test_self_closing_tags_self_close[wbr]"))
498 #:phases
499 #~(modify-phases %standard-phases
500 (add-after 'unpack 'relax-requirements
501 (lambda _
502 ;; "tinycss2>=1.1.0,<1.5"
503 ;; The 'sanity-check of python-nbclassic fails without this.
504 (substitute* "setup.py"
505 (("\"tinycss2.*") "")))))))
506 (native-inputs
507 (list python-pytest
508 python-setuptools))
509 (propagated-inputs
510 (list python-html5lib
511 python-tinycss2
512 python-webencodings))
513 (home-page "https://github.com/mozilla/bleach")
514 (synopsis "Whitelist-based HTML-sanitizing tool")
515 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
516 (license license:asl2.0)))
517
518(define-public python-cloudpathlib
519 (package
520 (name "python-cloudpathlib")
521 (version "0.23.0")
522 (source
523 (origin
524 (method git-fetch)
525 (uri (git-reference
526 (url "https://github.com/drivendataorg/cloudpathlib")
527 (commit (string-append "v" version))))
528 (file-name (git-file-name name version))
529 (sha256
530 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
531 (build-system pyproject-build-system)
532 (arguments
533 (list
534 ;; tests: 977 passed, 15 skipped, 8642 warnings
535 #:test-flags
536 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
537 ;; TODO: Package azure-identity (required for this file)
538 "--ignore=tests/test_azure_specific.py"
539 ;; TypeError: Retry.__init__() got an unexpected keyword
540 ;; argument 'timeout'
541 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")
542 #:phases
543 #~(modify-phases %standard-phases
544 (add-after 'unpack 'fix-pytest-config
545 (lambda _
546 (substitute* "pyproject.toml"
547 (("addopts =.*") "")))))))
548 (native-inputs
549 (list ;; python-azure-identity
550 python-dotenv
551 python-flit-core
552 python-psutil
553 python-pydantic
554 python-pytest
555 python-pytest-cases
556 python-pytest-xdist
557 python-shortuuid
558 python-tenacity))
559 (propagated-inputs
560 (list python-azure-storage-blob
561 python-azure-storage-file-datalake
562 python-boto3
563 python-google-cloud-storage
564 python-typing-extensions))
565 (home-page "https://github.com/drivendataorg/cloudpathlib")
566 (synopsis "Pathlib-style classes for cloud storage services")
567 (description
568 "This package provides a Python library with classes that mimic
569@code{pathlib.Path}'s interface for URIs from different cloud storage
570services.")
571 (license license:expat)))
572
573(define-public python-conda-package-handling
574 (package
575 (name "python-conda-package-handling")
576 (version "2.4.0")
577 (source
578 (origin
579 (method git-fetch)
580 (uri (git-reference
581 (url "https://github.com/conda/conda-package-handling/")
582 (commit version)))
583 (file-name (git-file-name name version))
584 (sha256
585 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
586 (build-system pyproject-build-system)
587 (native-inputs
588 (list python-bottle
589 python-mock
590 python-pytest-8
591 python-pytest-cov
592 python-pytest-mock
593 python-setuptools))
594 (propagated-inputs
595 (list python-conda-package-streaming))
596 (home-page "https://conda.io")
597 (synopsis "Create and extract conda packages of various formats")
598 (description
599 "This library is an abstraction of Conda package handling and a tool for
600extracting, creating, and converting between formats.")
601 (license license:bsd-3)))
602
603(define-public python-conda-package-streaming
604 (package
605 (name "python-conda-package-streaming")
606 (version "0.12.0")
607 (source
608 (origin
609 (method url-fetch)
610 (uri (pypi-uri "conda_package_streaming" version))
611 (sha256
612 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
613 (build-system pyproject-build-system)
614 (arguments
615 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
616 (list #:tests? #f))
617 (native-inputs
618 (list python-flit-core))
619 (propagated-inputs
620 (list python-requests
621 python-zstandard))
622 (home-page "https://conda.github.io/conda-package-streaming/")
623 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
624 (description
625 "This package provides an efficient library to read from new and old format
626@code{.conda} and @code{.tar.bz2} conda packages.")
627 (license license:bsd-3)))
628
629(define-public python-dependency-groups
630 (package
631 (name "python-dependency-groups")
632 (version "1.3.1")
633 (source
634 (origin
635 (method url-fetch)
636 (uri (pypi-uri "dependency_groups" version))
637 (sha256
638 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
639 (build-system pyproject-build-system)
640 (propagated-inputs (list python-packaging python-tomli))
641 (native-inputs (list python-flit-core python-pytest))
642 (home-page "https://dependency-groups.readthedocs.io/")
643 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
644 (description
645 "This package provides a library which is able to parse dependency groups (PEP
646735), following includes, and provide that data as output.")
647 (license license:expat)))
648
649(define-public python-devpi-common
650 (package
651 (name "python-devpi-common")
652 (version "4.0.4")
653 (source
654 (origin
655 (method url-fetch)
656 (uri (pypi-uri "devpi_common" version))
657 (sha256
658 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
659 (build-system pyproject-build-system)
660 (propagated-inputs (list python-lazy python-packaging-legacy
661 python-requests))
662 (native-inputs
663 (list python-pytest
664 python-setuptools
665 python-wheel))
666 (home-page "https://github.com/devpi/devpi")
667 (synopsis
668 "Utilities jointly used by devpi-server, devpi-client and others")
669 (description
670 "This package provides utilities jointly used by devpi-server,
671devpi-client and others.")
672 (license license:expat)))
673
674(define-public python-devpi-client
675 (package
676 (name "python-devpi-client")
677 (version "7.2.0")
678 (source
679 (origin
680 (method url-fetch)
681 (uri (pypi-uri "devpi-client" version))
682 (sha256
683 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
684 (build-system pyproject-build-system)
685 (arguments
686 (list
687 #:test-flags
688 ;; This wants to use pip install
689 '(list "--ignore=testing/test_upload.py"
690 ;; These complain about finding distutils. It's not my fault,
691 ;; mate, setuptools is right there, but you won't pick it!
692 "--ignore=testing/test_list_remove.py"
693 "--ignore=testing/test_main.py"
694 "--ignore=testing/test_install.py"
695 "--ignore=testing/test_functional.py"
696 "--ignore=testing/test_test.py")
697 #:phases
698 '(modify-phases %standard-phases
699 (add-after 'unpack 'patch-tests
700 (lambda _
701 ;; Do not replace the directory name of the store item.
702 (substitute* "testing/conftest.py"
703 (("\"devpi-server\", \"devpi-init\"")
704 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
705 (add-before 'check 'set-HOME
706 ;; Some tests need this
707 (lambda _ (setenv "HOME" "/tmp"))))))
708 (propagated-inputs (list python-pypa-build
709 python-check-manifest
710 python-colorama
711 python-devpi-common
712 python-iniconfig
713 python-pkginfo
714 python-platformdirs
715 python-pluggy
716 python-pypitoken
717 python-tomli))
718 (native-inputs
719 (list python-devpi-server
720 python-pytest
721 python-setuptools
722 python-virtualenv))
723 (home-page "https://github.com/devpi/devpi")
724 (synopsis "Devpi upload/install/... commands for Python developers")
725 (description
726 "The devpi command line tool is typically used in conjunction with
727devpi-server. It allows uploading, testing and installing packages from devpi
728indexes.")
729 (license license:expat)))
730
731(define-public python-devpi-process
732 (package
733 (name "python-devpi-process")
734 (version "1.0.2")
735 (source
736 (origin
737 (method url-fetch)
738 (uri (pypi-uri "devpi_process" version))
739 (sha256
740 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
741 (build-system pyproject-build-system)
742 (arguments
743 (list
744 #:phases
745 '(modify-phases %standard-phases
746 (add-after 'unpack 'relax-requirements
747 (lambda _
748 ;; Our package is too old, sorry.
749 (substitute* "pyproject.toml"
750 (("typing-extensions>=4.12.2")
751 "typing-extensions>=4.10.0"))))
752 (add-after 'unpack 'patch-tool-locations
753 (lambda* (#:key inputs #:allow-other-keys)
754 (substitute* "src/devpi_process/__init__.py"
755 (("_exe\\(\"devpi-init\"\\)")
756 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
757 (("_exe\\(\"devpi-server\"\\)")
758 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
759 (("_exe\\(\"devpi\"\\)")
760 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
761 (propagated-inputs (list python-devpi-client python-devpi-server
762 python-typing-extensions))
763 (native-inputs
764 (list nss-certs-for-test
765 python-hatchling
766 python-hatch-vcs
767 python-httpx
768 python-pytest
769 python-pytest-cov))
770 (home-page "https://github.com/devpi/devpi")
771 (synopsis "API to create and use a devpi server process")
772 (description
773 "This package provides a programmatic API to create and use a devpi
774server process.")
775 (license license:expat)))
776
777(define-public python-devpi-server
778 (package
779 (name "python-devpi-server")
780 (version "6.17.0")
781 (source
782 (origin
783 (method url-fetch)
784 (uri (pypi-uri "devpi_server" version))
785 (sha256
786 (base32 "13lybrw8j6zjxwvx6sk7bw6854hd2m18s1xcvl0q100j4n06p6ml"))))
787 (build-system pyproject-build-system)
788 (arguments
789 (list
790 #:test-flags
791 ;; These all fail with: "module 'py' has no attribute 'io'"
792 #~(list "--ignore=test_devpi_server/test_importexport.py"
793 "--ignore=test_devpi_server/test_main.py"
794 "--ignore=test_devpi_server/test_genconfig.py")
795 #:phases
796 #~(modify-phases %standard-phases
797 (add-after 'unpack 'relax-requirements
798 (lambda _
799 (substitute* "pyproject.toml"
800 ;; It straggles to check argon2 in passlib on any versions
801 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
802 ;; such extra feature 'argon2'",).
803 (("passlib\\[argon2\\]") "passlib")))))))
804 (propagated-inputs (list python-argon2-cffi
805 python-attrs
806 python-defusedxml
807 python-devpi-common
808 python-httpx
809 python-itsdangerous
810 python-lazy
811 python-legacy-cgi
812 python-passlib
813 python-platformdirs
814 python-pluggy
815 python-py
816 python-pyramid
817 python-repoze-lru
818 python-ruamel.yaml-0.16 ;FIXME: rename
819 python-strictyaml
820 python-waitress))
821 (native-inputs
822 (list python-execnet
823 python-pytest
824 python-pytest-asyncio
825 python-pytest-timeout
826 python-setuptools
827 python-webtest))
828 (home-page "https://devpi.net")
829 (synopsis "Pypi.org caching server")
830 (description "This package implements a reliable private and pypi.org
831caching server.")
832 (license license:expat)))
833
834(define-public python-dicomweb-client
835 (package
836 (name "python-dicomweb-client")
837 (version "0.60.0")
838 (source
839 (origin
840 (method git-fetch)
841 (uri (git-reference
842 (url "https://github.com/ImagingDataCommons/dicomweb-client")
843 (commit (string-append "v" version))))
844 (file-name (git-file-name name version))
845 (sha256
846 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
847 (build-system pyproject-build-system)
848 (arguments
849 (list
850 #:phases
851 #~(modify-phases %standard-phases
852 (add-after 'unpack 'remove-dynamic-versioning
853 (lambda _
854 (substitute* "pyproject.toml"
855 ;; Dynamic versioning via 'uv-dynamic-versioning' is
856 ;; not suitable for Guix.
857 (("dynamic = \\[\"version\"\\]")
858 (string-append "version = \""
859 #$version "\""))))))))
860 (native-inputs
861 (list python-hatchling
862 python-pytest
863 python-pytest-localserver))
864 (propagated-inputs
865 (list python-numpy
866 python-pillow
867 python-pydicom
868 python-requests
869 python-retrying))
870 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
871 (synopsis "Python client for DICOMweb RESTful services")
872 (description
873 "@code{dicomweb_client} provides client intefaces for DICOMweb RESTful
874services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
875DICOM objects over the web, respectively.")
876 (license license:expat)))
877
878(define-public python-docusign-esign
879 (package
880 (name "python-docusign-esign")
881 (version "5.0.0")
882 (source
883 (origin
884 (method url-fetch)
885 (uri (pypi-uri "docusign-esign" version))
886 (sha256
887 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
888 (build-system pyproject-build-system)
889 ;; Testing requires undocumented setup changes with network access to
890 ;; <demo.docusign.net>, and so testing is disabled here.
891 (arguments `(#:tests? #f))
892 (native-inputs
893 (list python-setuptools
894 python-wheel))
895 (propagated-inputs
896 (list python-certifi
897 python-dateutil
898 python-urllib3
899 python-pyjwt
900 python-cryptography))
901 (home-page "https://developers.docusign.com/")
902 (synopsis "DocuSign Python Client")
903 (description
904 "The Official DocuSign Python Client Library used to interact with the
905eSign REST API. Send, sign, and approve documents using this client.")
906 (license license:expat)))
907
908(define-public python-domain-connect
909 (package
910 (name "python-domain-connect")
911 (version "0.0.11")
912 (source
913 (origin
914 (method git-fetch) ;no tests in PyPI archive
915 (uri (git-reference
916 (url "https://github.com/Domain-Connect/domainconnect_python")
917 (commit (string-append "v" version))))
918 (file-name (git-file-name name version))
919 (sha256
920 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
921 (build-system pyproject-build-system)
922 (arguments
923 (list
924 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
925 ;; present in container.
926 #:tests? #f
927 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
928 (native-inputs
929 (list python-setuptools))
930 (propagated-inputs
931 (list python-cryptography
932 python-dnspython
933 python-future
934 python-publicsuffixlist))
935 (home-page "https://github.com/Domain-Connect/domainconnect_python")
936 (synopsis "Client library for Domain Connect protocol")
937 (description
938 "This package provides a Service Provider functionality in both Sync and
939Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
940 (license license:expat)))
941
942(define-public python-domain-connect-dyndns
943 (package
944 (name "python-domain-connect-dyndns")
945 (version "0.0.9")
946 (source
947 (origin
948 (method url-fetch)
949 (uri (pypi-uri "domain-connect-dyndns" version))
950 (sha256
951 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
952 (build-system pyproject-build-system)
953 (arguments
954 (list
955 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
956 ;; present in container.
957 #:tests? #f
958 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
959 (native-inputs
960 (list python-setuptools
961 python-wheel))
962 (propagated-inputs
963 (list python-dnspython
964 python-domain-connect
965 python-requests
966 python-validators))
967 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
968 (synopsis "Domain Connect Dynamic DNS in Python")
969 ;; Project lacks meaningful description in README, see
970 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
971 (description
972 "Python client library for Dynamic DNS using
973@url{https://www.domainconnect.org/, Domain Connect} protocol.")
974 (license license:expat)))
975
976(define-public python-dropbox
977 (package
978 (name "python-dropbox")
979 (version "12.0.2")
980 (source
981 (origin
982 (method git-fetch) ; no tests in PyPI release
983 (uri (git-reference
984 (url "https://github.com/dropbox/dropbox-sdk-python")
985 (commit (string-append "v" version))))
986 (file-name (git-file-name name version))
987 (sha256
988 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
989 (build-system pyproject-build-system)
990 (arguments
991 (list
992 #:test-flags
993 #~(list "-k" (string-join
994 ;; Network access is required.
995 (list "not test_bad_auth"
996 "test_app_auth"
997 "test_bad_pins"
998 "test_bad_pins_session"
999 "test_downscope"
1000 "test_multi_auth"
1001 "test_path_root"
1002 "test_path_root_err"
1003 "test_refresh"
1004 "test_rpc"
1005 "test_team"
1006 "test_upload_download"
1007 "test_versioned_route")
1008 " and not "))
1009 #:phases
1010 #~(modify-phases %standard-phases
1011 (add-after 'unpack 'relax-requirements
1012 (lambda _
1013 (substitute* "setup.py"
1014 ;; 'stone>=2,<3.3.3',
1015 ((">=2,<3.3.3") ">=2,<3.4.0"))))
1016 (add-before 'check 'pre-check
1017 (lambda _
1018 ;; Otherwise tests setup erroring.
1019 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
1020 (setenv "LEGACY_USER_CLIENT_ID" "guix")
1021 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
1022 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
1023 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
1024 (setenv "SCOPED_USER_CLIENT_ID" "guix")
1025 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
1026 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
1027 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
1028 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
1029 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
1030 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
1031 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
1032 (native-inputs
1033 (list nss-certs-for-test
1034 python-mock
1035 python-pytest
1036 python-pytest-mock
1037 python-setuptools
1038 python-wheel))
1039 (propagated-inputs
1040 (list python-requests python-six python-stone))
1041 (home-page "https://www.dropbox.com/developers")
1042 (synopsis "Official Dropbox API Client")
1043 (description "This package provides a Python SDK for integrating with the
1044Dropbox API v2.")
1045 (license license:expat)))
1046
1047(define-public python-essentials-openapi
1048 (package
1049 (name "python-essentials-openapi")
1050 (version "1.2.1")
1051 (source
1052 (origin
1053 (method git-fetch)
1054 (uri (git-reference
1055 (url "https://github.com/Neoteroi/essentials-openapi")
1056 (commit (string-append "v" version))))
1057 (file-name (git-file-name name version))
1058 (sha256
1059 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
1060 (build-system pyproject-build-system)
1061 (native-inputs
1062 (list python-flask
1063 python-hatchling
1064 python-pydantic
1065 python-pytest
1066 python-rich))
1067 (propagated-inputs
1068 (list python-essentials
1069 python-httpx
1070 python-jinja2
1071 python-markupsafe
1072 python-pyyaml))
1073 (home-page "https://github.com/Neoteroi/essentials-openapi/")
1074 (synopsis "Generator for OpenAPI Documentation")
1075 (description
1076 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
1077formats. Generator for other kinds of documents from OpenAPI Documentation
1078files.")
1079 (license license:expat)))
1080
1081(define-public python-eventlet
1082 (package
1083 (name "python-eventlet")
1084 (version "0.40.2")
1085 (source
1086 (origin
1087 (method url-fetch)
1088 (uri (pypi-uri "eventlet" version))
1089 (sha256
1090 (base32
1091 "1c6qr1cnam79wxm1sh5y04061iyy3shs02yd0mlh47bngwknqqs2"))))
1092 (build-system pyproject-build-system)
1093 (arguments
1094 (list
1095 #:test-flags
1096 '(list "-k"
1097 (string-append
1098 "not TestGetaddrinfo"
1099 " and not TestProxyResolver"
1100 " and not test_noraise_dns_tcp"
1101 " and not test_raise_dns_tcp"
1102 " and not test_hosts_no_network"
1103 " and not test_import_rdtypes_then_eventlet"
1104 " and not test_patcher_existing_locks"
1105 " and not test_dns_methods_are_green"))
1106 #:phases
1107 #~(modify-phases %standard-phases
1108 (add-after 'unpack 'avoid-OSError
1109 (lambda _
1110 ;; If eventlet tries to load greendns, an OSError is thrown when
1111 ;; getprotobyname is called. Thankfully there is an environment
1112 ;; variable to disable the greendns import, so use it. Note that
1113 ;; this error is propagated to child packages too, so enforce the
1114 ;; changed default.
1115 (substitute* "eventlet/green/socket.py"
1116 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
1117 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")")))))))
1118 (native-inputs
1119 (list python-pypa-build
1120 python-hatch-vcs
1121 python-hatchling
1122 python-pytest))
1123 (propagated-inputs
1124 (list python-dnspython python-greenlet))
1125 (home-page "https://eventlet.net")
1126 (synopsis "Concurrent networking library for Python")
1127 (description
1128 "Eventlet is a concurrent networking library for Python that
1129allows you to change how you run your code, not how you write it.
1130It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1131Coroutines ensure that the developer uses a blocking style of programming
1132that is similar to threading, but provide the benefits of non-blocking I/O.
1133The event dispatch is implicit, which means you can easily use @code{Eventlet}
1134from the Python interpreter, or as a small part of a larger application.
1135
1136Note: In Guix, this package assumes the environment variable
1137@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
1138to anything else.")
1139 (license license:expat)))
1140
1141(define-public python-feedgen
1142 (package
1143 (name "python-feedgen")
1144 (version "1.0.0")
1145 (source
1146 (origin
1147 (method git-fetch)
1148 (uri (git-reference
1149 (url "https://github.com/lkiesow/python-feedgen")
1150 (commit (string-append "v" version))))
1151 (file-name (git-file-name name version))
1152 (sha256
1153 (base32
1154 "1ppwxp9yck29pk2p2dlrrad6rz16l9h4fhcajp9yb7ns94fm5v3l"))))
1155 (build-system pyproject-build-system)
1156 (propagated-inputs
1157 (list python-dateutil
1158 python-lxml))
1159 (native-inputs
1160 (list python-pytest
1161 python-setuptools))
1162 (home-page "https://feedgen.kiesow.be")
1163 (synopsis "Atom and RSS feed generator")
1164 (description
1165 "This module can be used to generate web feeds in both Atom and RSS
1166format. It also extensible and comes with an extension to produce podcasts.")
1167 ;; The README says that this package is released under both licenses, and
1168 ;; permits the user to choose whichever is more convenient to them.
1169 (license (list license:bsd-2
1170 license:lgpl3+))))
1171
1172(define-public python-flask-caching
1173 (package
1174 (name "python-flask-caching")
1175 (version "2.3.1")
1176 (source
1177 (origin
1178 (method url-fetch)
1179 (uri (pypi-uri "flask_caching" version))
1180 (sha256
1181 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
1182 (build-system pyproject-build-system)
1183 (arguments
1184 (list
1185 #:test-flags
1186 ;; Tests requiring running Redis or dated python-cache.
1187 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
1188 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
1189 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
1190 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
1191 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
1192 "-k" "not test_client_override_reflected_on_cachelib_methods")))
1193 (native-inputs
1194 (list python-pytest
1195 python-pytest-asyncio
1196 python-pytest-xprocess
1197 python-setuptools))
1198 (propagated-inputs
1199 (list python-cachelib
1200 python-flask))
1201 (home-page "https://github.com/pallets-eco/flask-caching")
1202 (synopsis "Caching extension for Flask")
1203 (description
1204 "This package provides a caching support to Flask applications, it's a
1205fort ok https://github.com/thadeusb/flask-cache.")
1206 (license license:bsd-3)))
1207
1208(define-public python-flask-paginate
1209 (package
1210 (name "python-flask-paginate")
1211 (version "2024.4.12")
1212 (source
1213 (origin
1214 (method git-fetch)
1215 (uri (git-reference
1216 (url "https://github.com/lixxu/flask-paginate")
1217 (commit (string-append "v" version))))
1218 (file-name (git-file-name name version))
1219 (sha256
1220 (base32 "1q4ajwk0pzc6934g07gdryjcwi6rd9iqcwv5g5s718dfx2bj1831"))))
1221 (arguments
1222 (list #:test-backend #~'custom
1223 #:test-flags #~(list "tests/tests.py")))
1224 (build-system pyproject-build-system)
1225 (native-inputs
1226 (list python-pytest
1227 python-setuptools))
1228 (propagated-inputs
1229 (list python-flask))
1230 (home-page "https://github.com/lixxu/flask-paginate")
1231 (synopsis "Simple paginate support for Flask")
1232 (description
1233 "Flask-paginate is a simple pagination extension for Flask which is
1234inspired by Ruby's will_paginate library. It supports several CSS frameworks.")
1235 (license license:bsd-3)))
1236
1237(define-public python-flask-limiter
1238 (package
1239 (name "python-flask-limiter")
1240 (version "4.1.1")
1241 (source
1242 (origin
1243 (method git-fetch)
1244 (uri (git-reference
1245 (url "https://github.com/alisaifee/flask-limiter")
1246 (commit version)))
1247 (file-name (git-file-name name version))
1248 (sha256
1249 (base32 "18n12iayzw6qqys26824j5lfbphfcammpmyrvys1k0rn4xcbifln"))))
1250 (build-system pyproject-build-system)
1251 (arguments
1252 (list
1253 ;; tests: 155 passed, 620 deselected
1254 #:test-flags
1255 #~(list "-k" (simple-format #f "not (~a)"
1256 (string-join
1257 (append
1258 ;; The test suite spawns storages in Docker.
1259 '("memcache" "reset_unsupported")
1260 '("mongo")
1261 '("redis" "clear_limits"
1262 "constructor_arguments_over_config"
1263 "custom_key_prefix" "fallback_to_memory"))
1264 " or ")))
1265 #:phases
1266 #~(modify-phases %standard-phases
1267 (add-before 'check 'adjust-tests
1268 (lambda _
1269 (substitute* "pytest.ini"
1270 ((".*--cov=.*") ""))
1271 (substitute* (find-files "tests" "\\.py$")
1272 (("import pymemcache.*") "")
1273 (("import pymongo.*") "")
1274 (("import redis.*") "")))))))
1275 (native-inputs (list python-flask-restful
1276 python-hatch-vcs
1277 python-hatchling
1278 python-hiro
1279 python-pytest
1280 python-pytest-check
1281 python-pytest-mock))
1282 (propagated-inputs (list python-flask
1283 python-limits
1284 python-ordered-set
1285 python-rich))
1286 (home-page "https://flask-limiter.readthedocs.org/")
1287 (synopsis "Rate limiting for Flask applications")
1288 (description
1289 "Flask-Limiter adds rate limiting to Flask applications.
1290Rate limits can be configured at different levels such as:
1291
1292@itemize
1293@item Application wide global limits per user
1294@item Default limits per route
1295@item By blueprints
1296@item By class-based views
1297@item By individual routes
1298@end itemize")
1299 (license license:expat)))
1300
1301(define-public python-gdown
1302 (package
1303 (name "python-gdown")
1304 (version "5.2.0")
1305 (source
1306 (origin
1307 (method url-fetch)
1308 (uri (pypi-uri "gdown" version))
1309 (sha256
1310 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
1311 (build-system pyproject-build-system)
1312 (arguments (list #:tests? #f)) ;network access is required
1313 (native-inputs
1314 (list python-hatch-fancy-pypi-readme
1315 python-hatch-vcs
1316 python-hatchling))
1317 (propagated-inputs
1318 (list python-beautifulsoup4
1319 python-filelock
1320 python-requests
1321 python-tqdm))
1322 (home-page "https://github.com/wkentaro/gdown")
1323 (synopsis "Google Drive Public File/Folder Downloader")
1324 (description
1325 "This package implements a functionality to download large files
1326recursivly from Google Drive with option to filter them by file
1327formats (PDF/XML/CSV).")
1328 (license license:expat)))
1329
1330(define-public python-globus-sdk
1331 (package
1332 (name "python-globus-sdk")
1333 (version "4.4.0")
1334 (source
1335 (origin
1336 (method git-fetch)
1337 (uri (git-reference
1338 (url "https://github.com/globus/globus-sdk-python")
1339 (commit version)))
1340 (file-name (git-file-name name version))
1341 (sha256
1342 (base32 "1d0zw9dkpdhsf9zdg3nk6b55gqwzc3v2rj76nj7999hjmq8350vh"))))
1343 (build-system pyproject-build-system)
1344 (arguments
1345 (list
1346 #:phases
1347 #~(modify-phases %standard-phases
1348 (add-before 'check 'pre-check
1349 (lambda _ (setenv "HOME" "/tmp"))))))
1350 (native-inputs
1351 (list python-flaky
1352 python-pytest
1353 python-pytest-randomly
1354 python-responses
1355 python-setuptools))
1356 (propagated-inputs
1357 (list python-cryptography
1358 python-importlib-resources
1359 python-pyjwt
1360 python-requests))
1361 (home-page "https://github.com/globus/globus-sdk-python")
1362 (synopsis "Globus SDK for Python")
1363 (description
1364 "This package provides a SDK for convenient Pythonic interface to
1365@url{https://www.globus.org/, Globus} APIs.")
1366 (license license:asl2.0)))
1367
1368(define-public python-guardpost
1369 (package
1370 (name "python-guardpost")
1371 (version "1.0.4")
1372 (source
1373 (origin
1374 (method git-fetch)
1375 (uri (git-reference
1376 (url "https://github.com/Neoteroi/guardpost")
1377 (commit (string-append "v" version))))
1378 (file-name (git-file-name name version))
1379 (sha256
1380 (base32 "1xsakqn36g2h1s5rnbaf1lasx1jn4skqhmb8kdl1k4pgxp5sczyy"))))
1381 (build-system pyproject-build-system)
1382 (arguments
1383 (list
1384 ;; Possible timing issue, see:
1385 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
1386 #:test-flags '(list "--ignore=tests/test_jwts.py")))
1387 (native-inputs
1388 (list python-flask
1389 python-hatchling
1390 python-pytest
1391 python-pytest-asyncio))
1392 (propagated-inputs
1393 (list python-rodi
1394 ;; [optional]
1395 python-cryptography
1396 python-essentials
1397 python-pyjwt))
1398 (home-page "https://github.com/Neoteroi/GuardPost/")
1399 (synopsis
1400 "Authentication and authorization framework for Python applications")
1401 (description
1402 "GuardPost is a framework to handle authentication and
1403authorization in asynchronous Python applications.
1404
1405Its features include
1406
1407@itemize
1408@item Strategy to implement authentication.
1409@item Strategy to implement authorization.
1410@item Support for dependency injection
1411@item Built-in support for JSON Web Tokens (JWTs) authentication.
1412@end itemize")
1413 (license license:expat)))
1414
1415(define-public python-hookdns
1416 (package
1417 (name "python-hookdns")
1418 (version "2.0.0")
1419 (source
1420 (origin
1421 (method url-fetch)
1422 (uri (pypi-uri "hookdns" version))
1423 (sha256
1424 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
1425 (build-system pyproject-build-system)
1426 (arguments
1427 (list
1428 #:test-flags
1429 #~(list "-k" (string-join
1430 ;; Tests requiring networking.
1431 (list
1432 "not test_patch_contextmanager_with_another_hostname"
1433 "test_patch_contextmanager_with_another_hostname_ipv6"
1434 "test_patch_contextmanager_with_ipv4"
1435 "test_patch_contextmanager_with_name"
1436 "test_patch_contextmanager_with_public_fqdn_and_"
1437 "test_patch_contextmanager_with_unknown_hostname"
1438 "test_patch_decorator_with_another_hostname"
1439 "test_patch_decorator_with_another_hostname_ipv6"
1440 "test_patch_decorator_with_ipv4"
1441 "test_patch_decorator_with_name"
1442 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
1443 "test_patch_decorator_with_unknown_hostname"
1444 "test_real_getaddrinfo_with_name_ipv6"
1445 "test_real_getaddrinfo_with_public_fqdn_ipv4"
1446 "test_real_getaddrinfo_with_public_fqdn_ipv6"
1447 "test_real_gethostbyname_ex_with_public_fqdn"
1448 "test_real_gethostbyname_with_public_fqdn"
1449 "test_real_requests_ip"
1450 "test_real_requests_name"
1451 "test_real_requests_with_public_fqdn"
1452 "test_reentrant")
1453 " and not "))))
1454 (native-inputs
1455 (list python-pytest
1456 python-requests
1457 python-setuptools
1458 python-wheel))
1459 (home-page "https://github.com/cle-b/hookdns")
1460 (synopsis "DNS resolution customization library")
1461 (description
1462 "HookDNS implements functionality that allows for modifying name
1463resolution in a Python script without any changes to the hosts file or the use
1464of a fake DNS resolver.")
1465 (license license:asl2.0)))
1466
1467(define-public python-httpretty
1468 (package
1469 (name "python-httpretty")
1470 (version "1.1.4")
1471 (source
1472 (origin
1473 (method url-fetch)
1474 (uri (pypi-uri "httpretty" version))
1475 (sha256
1476 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
1477 (build-system pyproject-build-system)
1478 (arguments
1479 (list
1480 #:test-flags
1481 ;; Only run Unit tests.
1482 #~(list "--ignore=tests/bugfixes"
1483 "--ignore=tests/functional"
1484 "--ignore=tests/pyopenssl"
1485 "-k" (string-join
1486 ;; Tests pattern failing with one of these errors:
1487 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
1488 ;; has no attribute 'should'
1489 ;; AttributeError: 'function' object has no attribute
1490 ;; 'when'
1491 ;; AttributeError: 'AssertionBuilder' object has no
1492 ;; attribute 'should_not'
1493 (list "not fake_socket_passes_through"
1494 "fakesock_socket"
1495 "request_parse_body_when"
1496 "test_Entry_class_normalizes_headers"
1497 "test_has_request"
1498 "test_httpretty_should_raise_proper"
1499 "test_parse_request_line_connect"
1500 "test_request_parse_querystring"
1501 "test_request_string_representation"
1502 "test_request_stubs_internals")
1503 " and not "))))
1504 (native-inputs
1505 (list nss-certs-for-test
1506 python-freezegun
1507 python-mock
1508 python-pytest
1509 python-setuptools
1510 python-sure
1511 python-wheel))
1512 (home-page "https://httpretty.readthedocs.io")
1513 (synopsis "HTTP client mock for Python")
1514 (description
1515 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
1516@code{fakeweb}.")
1517 (license license:expat)))
1518
1519(define-public python-justhtml
1520 (package
1521 (name "python-justhtml")
1522 (version "1.13.0")
1523 (source
1524 (origin
1525 (method git-fetch)
1526 (uri (git-reference
1527 (url "https://github.com/emilstenstrom/justhtml")
1528 (commit (string-append "v" version))))
1529 (file-name (git-file-name name version))
1530 (sha256
1531 (base32 "1hy5w3lr08sj3pivs46nnlfsvrd9ynmicxcrjk4sxbpg7411lyj5"))))
1532 (build-system pyproject-build-system)
1533 (native-inputs
1534 (list python-hatchling))
1535 (home-page "https://github.com/emilstenstrom/justhtml")
1536 (synopsis "Pure Python HTML5 parser")
1537 (description
1538 "JustHTML is a pure Python HTML5 parser. It has a simple API and does
1539not require C extensions or system dependencies.")
1540 (license license:expat)))
1541
1542(define-public python-huggingface-hub
1543 (package
1544 (name "python-huggingface-hub")
1545 (version "0.31.4")
1546 (source
1547 (origin
1548 (method git-fetch)
1549 (uri (git-reference
1550 (url "https://github.com/huggingface/huggingface_hub")
1551 (commit (string-append "v" version))))
1552 (file-name (git-file-name name version))
1553 (sha256
1554 (base32 "1rjkrmvvyzxlbnbndrg4v9qq39grn46c26zrdjgpf114gci5pwap"))))
1555 (build-system pyproject-build-system)
1556 (arguments
1557 (list
1558 #:test-flags
1559 ;; We don't have sentence_transformers...
1560 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
1561 ;; ...nor do we have InquirerPy...
1562 "--ignore=tests/test_command_delete_cache.py"
1563 ;; ...or timm...
1564 "--ignore=contrib/timm/test_timm.py"
1565 ;; ...or spacy_huggingface_hub
1566 "--ignore=contrib/spacy/test_spacy.py"
1567 ;; These all require internet access
1568 "--ignore=tests/test_cache_no_symlinks.py"
1569 "--ignore=tests/test_cache_layout.py"
1570 "--ignore=tests/test_commit_scheduler.py"
1571 "--ignore=tests/test_file_download.py"
1572 "--ignore=tests/test_hf_api.py"
1573 "--ignore=tests/test_hf_file_system.py"
1574 "--ignore=tests/test_inference_api.py"
1575 "--ignore=tests/test_inference_async_client.py"
1576 "--ignore=tests/test_inference_client.py"
1577 "--ignore=tests/test_inference_text_generation.py"
1578 "--ignore=tests/test_login_utils.py"
1579 "--ignore=tests/test_offline_utils.py"
1580 "--ignore=tests/test_repocard.py"
1581 "--ignore=tests/test_repository.py"
1582 "--ignore=tests/test_snapshot_download.py"
1583 "--ignore=tests/test_utils_cache.py"
1584 "--ignore=tests/test_utils_git_credentials.py"
1585 "--ignore=tests/test_utils_http.py"
1586 "--ignore=tests/test_utils_pagination.py"
1587 "--ignore=tests/test_webhooks_server.py"
1588 "-k" (string-append
1589 "not test_push_to_hub"
1590 " and not test_from_pretrained_model_id_only"
1591 " and not test_from_pretrained_model_id_and_revision"
1592 ;; These all require internet access
1593 " and not test_auth"
1594 " and not test_oauth"
1595 " and not test_utils_sha"
1596 " and not test_inference_providers"
1597 " and not test_xet"))
1598 #:phases
1599 '(modify-phases %standard-phases
1600 (add-before 'check 'pre-check
1601 ;; Some tests need to write to HOME.
1602 (lambda _ (setenv "HOME" "/tmp"))))))
1603 (propagated-inputs
1604 (list python-filelock
1605 python-fsspec
1606 python-packaging
1607 python-pyyaml
1608 python-requests
1609 python-tqdm
1610 python-typing-extensions))
1611 (native-inputs
1612 (list python-aiohttp
1613 python-fastapi
1614 python-jedi
1615 python-jinja2
1616 python-numpy
1617 python-pillow
1618 python-pydantic
1619 python-pytest
1620 python-pytest-asyncio
1621 python-pytest-cov
1622 python-pytest-env
1623 python-pytest-mock
1624 python-pytest-rerunfailures
1625 python-pytest-vcr
1626 python-pytest-xdist
1627 python-setuptools
1628 python-types-requests
1629 python-types-toml
1630 python-types-urllib3
1631 python-typing-extensions
1632 python-urllib3
1633 python-wheel))
1634 (home-page "https://huggingface.co/docs/huggingface_hub/")
1635 (synopsis "Client library for accessing the huggingface.co hub")
1636 (description
1637 "This package provides a client library to download and publish models,
1638datasets and other repos on the @url{huggingface.co} hub.")
1639 (license license:asl2.0)))
1640
1641(define-public python-kubernetes
1642 (package
1643 (name "python-kubernetes")
1644 (version "35.0.0")
1645 (source
1646 (origin
1647 (method url-fetch)
1648 (uri (pypi-uri "kubernetes" version))
1649 (sha256
1650 (base32 "1vh9bzq175fzv9av3v37lcfh37yzss2d9vxrb0a84fa2ji2d601x"))))
1651 (build-system pyproject-build-system)
1652 (arguments
1653 (list
1654 #:test-flags
1655 #~(list
1656 ;; The following tests expect a local running Kubernetes cluster.
1657 "--ignore=kubernetes/e2e_test"
1658 "--ignore=kubernetes/dynamic")))
1659 (native-inputs
1660 (list python-pytest
1661 python-setuptools))
1662 (propagated-inputs
1663 (list python-certifi
1664 python-dateutil
1665 python-durationpy
1666 python-google-auth
1667 python-pyyaml
1668 python-requests
1669 python-requests-oauthlib
1670 python-six ;XXX: hard dependency
1671 python-urllib3
1672 python-websocket-client))
1673 (home-page "https://github.com/kubernetes-client/python")
1674 (synopsis "Python client for Kubernetes")
1675 (description
1676 "This package provides an official Python client library for
1677@url{http://kubernetes.io, Kubernetes}.")
1678 (license license:asl2.0)))
1679
1680(define-public python-lazr-restfulclient
1681 (package
1682 (name "python-lazr-restfulclient")
1683 (version "0.14.6")
1684 (source
1685 (origin
1686 (method url-fetch)
1687 (uri (pypi-uri "lazr.restfulclient" version))
1688 (sha256
1689 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
1690 (build-system pyproject-build-system)
1691 (arguments
1692 (list
1693 #:phases
1694 #~(modify-phases %standard-phases
1695 ;; Disable part of the test suite to avoid the lazr.authentication
1696 ;; requirement, which requires 'oauth', a Python 2 only library.
1697 (add-after 'unpack 'remove-some-checks
1698 (lambda _
1699 (with-directory-excursion "src/lazr/restfulclient/tests"
1700 (for-each delete-file '("test_oauth.py" "test_docs.py")))
1701 (substitute* "setup.py"
1702 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
1703 ""))))
1704 (replace 'check
1705 (lambda* (#:key tests? #:allow-other-keys)
1706 (if tests?
1707 (invoke "zope-testrunner" "--test-path=src")
1708 (format #t "test suite not run~%")))))))
1709 (native-inputs
1710 (list python-setuptools
1711 python-testtools
1712 python-wheel
1713 python-wsgi-intercept
1714 python-zope-testrunner))
1715 (propagated-inputs
1716 (list python-distro
1717 python-httplib2
1718 python-oauthlib
1719 python-pyparsing
1720 python-setuptools
1721 python-six
1722 python-wadllib))
1723 (home-page "https://launchpad.net/lazr.restfulclient")
1724 (synopsis "Web client Python library extending wadlib")
1725 (description "This package provides a programmable client library that
1726adds functionality on top of @code{wadlib}.")
1727 (license license:lgpl3+)))
1728
1729(define-public python-launchpadlib
1730 (package
1731 (name "python-launchpadlib")
1732 (version "2.1.0")
1733 (source
1734 (origin
1735 (method url-fetch)
1736 (uri (pypi-uri "launchpadlib" version))
1737 (sha256
1738 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
1739 (build-system pyproject-build-system)
1740 (arguments
1741 (list #:phases #~(modify-phases %standard-phases
1742 (add-before 'check 'set-home
1743 (lambda _
1744 ;; Tests require a writable home.
1745 (setenv "HOME" "/tmp"))))))
1746 (propagated-inputs
1747 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
1748 (native-inputs (list python-pytest python-testresources python-wadllib
1749 python-setuptools python-wheel))
1750 (home-page "https://documentation.ubuntu.com/launchpad")
1751 (synopsis "Python client library for Launchpad's web service")
1752 (description "@code{launchpadlib} is a Python library that allows
1753scripting Launchpad via its the web service API.")
1754 (license license:lgpl3+)))
1755
1756(define-public python-lazr-uri
1757 (package
1758 (name "python-lazr-uri")
1759 (version "1.0.7")
1760 (source
1761 (origin
1762 (method url-fetch)
1763 (uri (pypi-uri "lazr_uri" version))
1764 (sha256
1765 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
1766 (build-system pyproject-build-system)
1767 (arguments
1768 (list
1769 #:phases
1770 #~(modify-phases %standard-phases
1771 (replace 'check
1772 (lambda* (#:key tests? #:allow-other-keys)
1773 (if tests?
1774 (invoke "zope-testrunner" "--test-path=src")
1775 (format #t "test suite not run~%")))))))
1776 (native-inputs (list python-setuptools python-zope-testrunner))
1777 (home-page "https://launchpad.net/lazr.uri")
1778 (synopsis "Python URI manipulation library")
1779 (description "This Python package provides a self-contained, easily
1780reusable library for parsing, manipulating, and generating URIs.")
1781 (license license:lgpl3)))
1782
1783(define-public python-ldaptor
1784 (package
1785 (name "python-ldaptor")
1786 (version "21.2.0")
1787 (source
1788 (origin
1789 (method url-fetch)
1790 (uri (pypi-uri "ldaptor" version))
1791 (sha256
1792 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
1793 (build-system pyproject-build-system)
1794 (arguments
1795 (list
1796 #:test-flags
1797 #~(list "-m" "twisted.trial"
1798 (string-append "-j" (number->string (parallel-job-count)))
1799 "ldaptor")
1800 #:phases
1801 #~(modify-phases %standard-phases
1802 (add-before 'check 'disable-failing-tests
1803 (lambda _
1804 ;; Testing with Twisted 22.4 results in infinite loop creating
1805 ;; temporary config files, see
1806 ;; <https://github.com/twisted/ldaptor/issues/238>.
1807 (delete-file "ldaptor/test/test_config.py")))
1808 (replace 'check
1809 (lambda* (#:key tests? test-flags #:allow-other-keys)
1810 (when tests?
1811 (apply invoke "python" test-flags)))))))
1812 (native-inputs
1813 (list python-setuptools
1814 python-wheel))
1815 (propagated-inputs
1816 (list python-passlib
1817 python-pyopenssl
1818 python-service-identity ; to pass sanity check, for Twisted[tls]
1819 python-pyparsing
1820 python-twisted
1821 python-zope-interface))
1822 (home-page "https://github.com/twisted/ldaptor")
1823 (synopsis "Pure-Python Twisted library for LDAP")
1824 (description
1825 "This package provides a Python Twisted library for LDAP, which key
1826feaatures are:
1827@itemize
1828@item LDAP client logic
1829@item separately-accessible LDAP and BER protocol message generation/parsing
1830@item ASCII-format LDAP filter generation and parsing
1831@item LDIF format data generation
1832@item Samba password changing logic
1833@end itemize")
1834 (license license:expat)))
1835
1836(define-public python-legacy-cgi
1837 (package
1838 (name "python-legacy-cgi")
1839 (version "2.6.1")
1840 (source
1841 (origin
1842 (method url-fetch)
1843 (uri (pypi-uri "legacy_cgi" version))
1844 (sha256
1845 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
1846 (build-system pyproject-build-system)
1847 (native-inputs (list python-poetry-core python-pytest))
1848 (home-page "https://github.com/jackrosenthal/legacy-cgi")
1849 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
1850 (description
1851 "This is a fork of the standard library modules @code{cgi} and
1852@code{cgitb}. They are slated to be removed from the Python standard library
1853in Python 3.13 by PEP-594.")
1854 (license license:psfl)))
1855
1856(define-public python-librouteros
1857 (package
1858 (name "python-librouteros")
1859 (version "4.0.0")
1860 (source
1861 (origin
1862 (method git-fetch)
1863 (uri (git-reference
1864 (url "https://github.com/luqasz/librouteros")
1865 (commit version)))
1866 (file-name (git-file-name name version))
1867 (sha256
1868 (base32 "0in952b2idb5j8v6sxfm21gqbr5i5776w5ir0hdsxjrl2f29305v"))))
1869 (build-system pyproject-build-system)
1870 (arguments
1871 (list
1872 #:build-backend "hatchling.build"
1873 #:test-flags
1874 #~(list "tests/unit")))
1875 (native-inputs
1876 (list python-hatchling
1877 python-pytest
1878 python-pytest-asyncio
1879 python-stamina))
1880 (home-page "https://github.com/luqasz/librouteros")
1881 (synopsis "Python implementation of MikroTik RouterOS API")
1882 (description
1883 "This package implements MikroTik's @code{RouterOS} API.")
1884 (license license:gpl2+)))
1885
1886(define-public python-opentelemetry-api
1887 (package
1888 (name "python-opentelemetry-api")
1889 (version "1.37.0")
1890 (source
1891 (origin
1892 (method url-fetch)
1893 (uri (pypi-uri "opentelemetry_api" version))
1894 (sha256
1895 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
1896 (build-system pyproject-build-system)
1897 (propagated-inputs (list python-importlib-metadata
1898 python-typing-extensions))
1899 (native-inputs (list python-hatchling
1900 python-opentelemetry-test-utils-bootstrap))
1901 (home-page "https://opentelemetry.io/docs/languages/python/")
1902 (synopsis "OpenTelemetry Python API")
1903 (description "@code{OpenTelemetry} Python API.")
1904 (license license:asl2.0)))
1905
1906(define-public python-opentelemetry-api-bootstrap
1907 (hidden-package
1908 (package/inherit python-opentelemetry-api
1909 (name "python-opentelemetry-api-bootstrap")
1910 (arguments
1911 (list
1912 #:tests? #f))
1913 (native-inputs (list python-hatchling)))))
1914
1915(define-public python-opentelemetry-sdk
1916 (package
1917 (name "python-opentelemetry-sdk")
1918 (version "1.37.0")
1919 (source
1920 (origin
1921 (method url-fetch)
1922 (uri (pypi-uri "opentelemetry_sdk" version))
1923 (sha256
1924 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
1925 (build-system pyproject-build-system)
1926 (propagated-inputs (list python-opentelemetry-api
1927 python-opentelemetry-semantic-conventions
1928 python-typing-extensions))
1929 (native-inputs (list python-hatchling
1930 python-opentelemetry-test-utils-bootstrap
1931 python-pytest))
1932 (home-page "https://opentelemetry.io/docs/languages/python/")
1933 (synopsis "OpenTelemetry Python SDK")
1934 (description "@code{OpenTelemetry} Python SDK.")
1935 (license license:asl2.0)))
1936
1937(define-public python-opentelemetry-sdk-bootstrap
1938 (hidden-package
1939 (package/inherit python-opentelemetry-sdk
1940 (name "python-opentelemetry-sdk-bootstrap")
1941 (arguments (list #:tests? #f))
1942 (propagated-inputs (list python-opentelemetry-api-bootstrap
1943 python-opentelemetry-semantic-conventions-bootstrap))
1944 (native-inputs (list python-hatchling)))))
1945
1946(define-public python-opentelemetry-semantic-conventions
1947 (package
1948 (name "python-opentelemetry-semantic-conventions")
1949 (version "0.58b0")
1950 (source
1951 (origin
1952 (method url-fetch)
1953 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
1954 (sha256
1955 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
1956 (build-system pyproject-build-system)
1957 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
1958 (native-inputs (list python-hatchling))
1959 (home-page "https://opentelemetry.io/docs/languages/python/")
1960 (synopsis "OpenTelemetry Semantic Conventions")
1961 (description "@code{OpenTelemetry} Semantic Conventions.")
1962 (license license:asl2.0)))
1963
1964(define-public python-opentelemetry-semantic-conventions-bootstrap
1965 (hidden-package
1966 (package/inherit python-opentelemetry-semantic-conventions
1967 (name "python-opentelemetry-semantic-conventions-bootstrap")
1968 (arguments
1969 (list
1970 #:tests? #f))
1971 (propagated-inputs (list python-opentelemetry-api-bootstrap
1972 python-typing-extensions)))))
1973
1974(define-public python-opentelemetry-test-utils
1975 (package
1976 (name "python-opentelemetry-test-utils")
1977 (version "0.58b0")
1978 (source
1979 (origin
1980 (method url-fetch)
1981 (uri (pypi-uri "opentelemetry_test_utils" version))
1982 (sha256
1983 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
1984 (build-system pyproject-build-system)
1985 (propagated-inputs (list python-asgiref python-opentelemetry-api
1986 python-opentelemetry-sdk))
1987 (native-inputs (list python-hatchling))
1988 (home-page "https://opentelemetry.io/docs/languages/python/")
1989 (synopsis "Test utilities for OpenTelemetry unit tests")
1990 (description "Test utilities for @code{OpenTelemetry} unit tests.")
1991 (license license:asl2.0)))
1992
1993(define-public python-opentelemetry-test-utils-bootstrap
1994 (hidden-package
1995 (package/inherit python-opentelemetry-test-utils
1996 (name "python-opentelemetry-test-utils-bootstrap")
1997 (arguments
1998 (list
1999 #:tests? #f))
2000 (propagated-inputs (list python-asgiref
2001 python-opentelemetry-api-bootstrap
2002 python-opentelemetry-sdk-bootstrap))
2003 (native-inputs (list python-hatchling)))))
2004
2005(define-public python-pathy
2006 (package
2007 (name "python-pathy")
2008 (version "0.11.0")
2009 (source
2010 (origin
2011 (method url-fetch)
2012 (uri (pypi-uri "pathy" version))
2013 (sha256
2014 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
2015 (build-system pyproject-build-system)
2016 (native-inputs
2017 (list python-mock
2018 python-pytest
2019 python-setuptools))
2020 (propagated-inputs
2021 (list python-pathlib-abc-for-python-pathy
2022 python-smart-open-6
2023 python-typer))
2024 (home-page "https://github.com/justindujardin/pathy")
2025 (synopsis "Path interface for local and cloud bucket storage")
2026 (description "Pathy is a python package (with type annotations) for
2027working with Cloud Bucket storage providers using a @code{pathlib} interface.
2028It provides @code{pathlib.Path} subclasses for local and cloud bucket
2029storage.")
2030 (license license:asl2.0)))
2031
2032(define-public python-portend
2033 (package
2034 (name "python-portend")
2035 (version "3.2.1")
2036 (source
2037 (origin
2038 (method url-fetch)
2039 (uri (pypi-uri "portend" version))
2040 (sha256
2041 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
2042 (build-system pyproject-build-system)
2043 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
2044 ;; download dependencies.
2045 (arguments
2046 '(#:test-flags '("-k" "not project")))
2047 (native-inputs
2048 (list python-pytest
2049 python-setuptools
2050 python-setuptools-scm))
2051 (propagated-inputs
2052 (list python-tempora))
2053 (home-page "https://github.com/jaraco/portend")
2054 (synopsis "Monitor TCP ports for bound or unbound states")
2055 (description
2056 "@code{python-portend} can be used to monitor TCP ports for bound or
2057unbound states. For example, waiting for a port to be occupied or freed
2058within a set timeout. @code{python-portend} can also be used directly from
2059the command line.")
2060 (license license:expat)))
2061
2062(define-public python-prawcore
2063 (package
2064 (name "python-prawcore")
2065 (version "2.4.0")
2066 (source
2067 (origin
2068 (method git-fetch)
2069 (uri (git-reference
2070 (url "https://github.com/praw-dev/prawcore")
2071 (commit (string-append "v" version))))
2072 (file-name (git-file-name name version))
2073 (sha256
2074 (base32 "1y7gh7kk002b2h1ppkr1llb2gjfnby28zvx11j4ji0wm3r3rjh5l"))))
2075 (build-system pyproject-build-system)
2076 (arguments
2077 ;; XXX: These tests fail with an incomplete request response.
2078 (list #:test-flags
2079 #~'("-k" #$(string-append
2080 "not test_revoke__access_token_with_refresh_set"
2081 " and not test_revoke__access_token_without_refresh_set"
2082 " and not test_revoke__refresh_token_with_access_set"
2083 " and not test_refresh__with_scopes"
2084 " and not test_request__patch"))))
2085 (native-inputs
2086 (list python-betamax
2087 python-betamax-matchers
2088 python-betamax-serializers
2089 python-flit-core
2090 python-mock
2091 python-pytest
2092 python-testfixtures))
2093 (propagated-inputs
2094 (list python-requests))
2095 (synopsis "Core component of PRAW")
2096 (description "PRAWcore is a low-level communication layer used by PRAW.")
2097 (home-page "https://praw.readthedocs.io/en/latest/")
2098 (license license:bsd-2)))
2099
2100(define-public python-praw
2101 (package
2102 (name "python-praw")
2103 (version "7.8.1")
2104 (source
2105 (origin
2106 (method git-fetch)
2107 (uri (git-reference
2108 (url "https://github.com/praw-dev/praw")
2109 (commit (string-append "v" version))))
2110 (file-name (git-file-name name version))
2111 (sha256
2112 (base32 "05qq43l4334cq8r8k731qnb45nq12vvfdxwbr6q84a1hafp7n4cg"))))
2113 (build-system pyproject-build-system)
2114 (arguments
2115 (list #:test-flags
2116 #~(list "--ignore=tests/units/models"
2117 "--ignore=tests/integration/models"
2118 "--ignore=tests/unit/test_config.py"
2119 "--ignore=tests/integration/test_reddit.py")))
2120 (native-inputs
2121 (list python-betamax
2122 python-betamax-matchers
2123 python-flit-core
2124 python-pytest))
2125 (propagated-inputs
2126 (list python-prawcore python-update-checker python-websocket-client))
2127 (synopsis "Python Reddit API Wrapper")
2128 (description "PRAW is a Python package that allows for simple access to
2129Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
2130API rules.")
2131 (home-page "https://praw.readthedocs.io/en/latest/")
2132 (license license:bsd-2)))
2133
2134(define-public python-frozenlist
2135 (package
2136 (name "python-frozenlist")
2137 (version "1.8.0")
2138 (source
2139 (origin
2140 (method git-fetch)
2141 (uri (git-reference
2142 (url "https://github.com/aio-libs/frozenlist")
2143 (commit (string-append "v" version))))
2144 (file-name (git-file-name name version))
2145 (sha256
2146 (base32 "0r1kxf5b562zrn04nl912i6a8y1fyc891l1284v0zj9llb97limy"))))
2147 ;; XXX: Without "wheel", the 'install phase can't find the wheel.
2148 (outputs (list "out" "wheel"))
2149 (build-system pyproject-build-system)
2150 ;; The configuration contains explicit calls to pytest_cov.
2151 (arguments (list #:test-flags #~(list "-c" "/dev/null")))
2152 (native-inputs
2153 (list python-cython
2154 python-expandvars
2155 python-pytest
2156 python-setuptools
2157 python-tomli))
2158 (home-page "https://github.com/aio-libs/frozenlist")
2159 (synopsis "List-like data structure for Python")
2160 (description "@code{frozenlist.FrozenList} is a list-like structure which
2161implements @code{collections.abc.MutableSequence}. It can be made immutable
2162by calling @code{FrozenList.freeze}.")
2163 (license license:asl2.0)))
2164
2165(define-public python-aiobotocore
2166 (package
2167 (name "python-aiobotocore")
2168 (version "3.0.0")
2169 (source
2170 (origin
2171 (method url-fetch)
2172 (uri (pypi-uri "aiobotocore" version))
2173 (sha256
2174 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
2175 (build-system pyproject-build-system)
2176 (arguments
2177 ;; TODO: Tests need some setupt, see Makefile.
2178 (list #:tests? #f))
2179 (native-inputs
2180 (list python-setuptools))
2181 (propagated-inputs
2182 (list python-aiohttp
2183 python-aioitertools
2184 python-botocore
2185 python-dateutil
2186 python-jmespath
2187 python-multidict
2188 python-typing-extensions
2189 python-wrapt))
2190 (home-page "https://github.com/aio-libs/aiobotocore")
2191 (synopsis "Async client for AWS services using botocore and aiohttp")
2192 (description "This package provides an async client for Amazon services
2193using botocore and aiohttp/asyncio. This library is a mostly full featured
2194asynchronous version of botocore.")
2195 (license license:asl2.0)))
2196
2197(define-public python-aiohappyeyeballs
2198 (package
2199 (name "python-aiohappyeyeballs")
2200 (version "2.6.1")
2201 (source
2202 (origin
2203 (method url-fetch)
2204 (uri (pypi-uri "aiohappyeyeballs" version))
2205 (sha256
2206 (base32 "0n1mjip846fprc34ik6if9m8xisva2m0ygyzvz53r013648x1yf3"))))
2207 (build-system pyproject-build-system)
2208 (native-inputs
2209 (list python-poetry-core
2210 python-pytest
2211 python-pytest-asyncio-0.26
2212 python-pytest-cov))
2213 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
2214 (synopsis "Happy Eyeballs for asyncio")
2215 (description "This library exists to allow connecting with Happy
2216Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
2217DNS name.")
2218 (license license:psfl)))
2219
2220(define-public python-aioitertools
2221 (package
2222 (name "python-aioitertools")
2223 (version "0.12.0")
2224 (source
2225 (origin
2226 (method url-fetch)
2227 (uri (pypi-uri "aioitertools" version))
2228 (sha256
2229 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
2230 (build-system pyproject-build-system)
2231 (arguments
2232 (list #:test-backend #~'custom
2233 #:test-flags #~(list "-m" "aioitertools.tests")))
2234 (native-inputs
2235 (list python-flit-core))
2236 (home-page "https://pypi.org/project/aioitertools/")
2237 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
2238 (description
2239 "This package provides an implementation of itertools, builtins, and more
2240for AsyncIO and mixed-type iterables.")
2241 (license license:expat)))
2242
2243(define-public python-aiosignal
2244 (package
2245 (name "python-aiosignal")
2246 (version "1.4.0")
2247 (source
2248 (origin
2249 (method url-fetch)
2250 (uri (pypi-uri "aiosignal" version))
2251 (sha256
2252 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
2253 (build-system pyproject-build-system)
2254 (native-inputs
2255 (list python-pytest
2256 python-pytest-asyncio
2257 python-pytest-cov
2258 python-setuptools
2259 python-wheel))
2260 (propagated-inputs
2261 (list python-frozenlist))
2262 (home-page "https://github.com/aio-libs/aiosignal")
2263 (synopsis "Callback manager for Python @code{asyncio} projects")
2264 (description "This Python module provides @code{Signal}, an abstraction to
2265register asynchronous callbacks. The @code{Signal} abstraction can be used
2266for adding, removing and dropping callbacks.")
2267 (license license:asl2.0)))
2268
2269(define-public python-aiohttp
2270 (package
2271 (name "python-aiohttp")
2272 ;; TODO: Newer versions require zlib-ng:
2273 ;; <https://github.com/zlib-ng/zlib-ng>,
2274 ;; <https://github.com/pycompression/python-zlib-ng>.
2275 (version "3.11.18")
2276 (source
2277 (origin
2278 (method url-fetch)
2279 (uri (pypi-uri "aiohttp" version))
2280 (sha256
2281 (base32 "12jmkxkc5nnk6ma6m7rrs0w4vzswfc47ffxn5m0pwav1708nx1df"))
2282 (snippet
2283 #~(begin
2284 (use-modules ((guix build utils)))
2285 ;; TODO: Unbundle the llhttp sources.
2286 ;; (delete-file-recursively "vendor")
2287 (delete-file "aiohttp/_http_parser.c")
2288 (delete-file "aiohttp/_http_writer.c")))))
2289 (build-system pyproject-build-system)
2290 (arguments
2291 (list
2292 ;; tests: 3045 passed, 32 skipped, 29 xfailed, 2 subtests passed
2293 #:test-flags
2294 '(list
2295 "--numprocesses" (number->string (parallel-job-count))
2296 ;; This tests requires the 'proxy.py' module, not yet packaged.
2297 "--ignore=tests/test_proxy_functional.py"
2298 ;; These tests need brotli.
2299 "--ignore=tests/test_web_sendfile_functional.py"
2300 "--ignore=tests/test_web_functional.py"
2301 ;; These tests need pytest_codspeed
2302 "--ignore-glob=tests/test_benchmarks*"
2303 ;; These tests need python_on_whales
2304 "--ignore=tests/autobahn/test_autobahn.py"
2305 "-k"
2306 ;; These tests fail for unknown reasons (see:
2307 ;; https://github.com/aio-libs/aiohttp/issues/7130)
2308 (string-append
2309 "not test_no_warnings "
2310 "and not test_default_loop "
2311 "and not test_ctor_global_loop "
2312 "and not test_set_loop_default_loop "
2313
2314 ;; Disable brotli tests, because we’re not providing that optional
2315 ;; library.
2316 "and not test_feed_eof_no_err_brotli "
2317
2318 ;; Disable the following tests as they require
2319 ;; networking.
2320 "and not TestDeflateBuffer "
2321 "and not test_client_session_timeout_zero "
2322 "and not test_empty_body "
2323 "and not test_mark_formdata_as_processed[pyloop] "
2324 "and not test_receive_runtime_err[pyloop] "
2325
2326 ;; assert 'gzip, deflate' == 'gzip, deflate, br'
2327 "and not test_headers[pyloop] "
2328 ;; ~/.. does not resolve
2329 "and not test_add_static_path_resolution"))
2330 #:phases
2331 '(modify-phases %standard-phases
2332 (add-after 'unpack 'fix-pytest-config
2333 (lambda _
2334 (substitute* "setup.cfg"
2335 (("--numprocesses=auto") "")
2336 (("-p pytest_cov") "")
2337 (("--cov.*") ""))))
2338 (add-after 'unpack 'fix-tests
2339 (lambda _
2340 ;; Make sure the timestamp of this file is > 1990, because a few
2341 ;; tests like test_static_file_if_modified_since_past_date depend
2342 ;; on it.
2343 (let ((late-90s (* 60 60 24 365 30)))
2344 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
2345 (add-before 'build 'cythonize
2346 (lambda _
2347 ;; Adapted from the Makefile.
2348 (with-directory-excursion "aiohttp"
2349 (for-each
2350 (lambda (file)
2351 (invoke "cython" "-3"
2352 file "-I" "."))
2353 (find-files "." "_.*\\.pyx$"))))))))
2354 (propagated-inputs
2355 (list python-aiohappyeyeballs
2356 python-aiosignal
2357 python-attrs
2358 python-frozenlist
2359 python-multidict
2360 python-propcache
2361 python-yarl))
2362 (native-inputs
2363 (list gunicorn-bootstrap
2364 python-cython
2365 python-freezegun
2366 python-isal
2367 python-pytest
2368 python-pytest-mock
2369 python-pytest-xdist
2370 python-re-assert
2371 python-setuptools))
2372 (home-page "https://github.com/aio-libs/aiohttp/")
2373 (synopsis "Async HTTP client/server framework (asyncio)")
2374 (description "@code{aiohttp} is an asynchronous HTTP client/server
2375framework.
2376
2377Its main features are:
2378@itemize
2379@item Supports both client and server side of HTTP protocol.
2380@item Supports both client and server Web-Sockets out-of-the-box without the
2381Callback Hell.
2382@item Web-server has middlewares and pluggable routing.
2383@end itemize")
2384 (license license:asl2.0)))
2385
2386(define-public python-aiohttp-oauthlib
2387 (package
2388 (name "python-aiohttp-oauthlib")
2389 (version "0.1.0")
2390 (source
2391 (origin
2392 (method url-fetch)
2393 (uri (pypi-uri "aiohttp-oauthlib" version))
2394 (sha256
2395 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
2396 (build-system pyproject-build-system)
2397 (arguments (list #:tests? #f)) ; none included
2398 (propagated-inputs (list python-aiohttp python-oauthlib))
2399 (native-inputs (list python-setuptools python-setuptools-scm))
2400 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
2401 (synopsis "OAuthlib authentication support for aiohttp")
2402 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
2403provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
2404 (license license:isc)))
2405
2406(define-public python-aiohttp-client-cache
2407 (package
2408 (name "python-aiohttp-client-cache")
2409 (version "0.14.2")
2410 (source
2411 (origin
2412 (method git-fetch)
2413 (uri (git-reference
2414 (url "https://github.com/requests-cache/aiohttp-client-cache")
2415 (commit (string-append "v" version))))
2416 (file-name (git-file-name name version))
2417 (sha256
2418 (base32
2419 "17qa2sh63wa7b9ma40y2b6k9sjscc5vfwlmf46sv36l1mz9rmd4y"))))
2420 (build-system pyproject-build-system)
2421 (arguments
2422 (list
2423 #:test-flags
2424 ;; Run unit tests only which not require networking or additional setup.
2425 #~(list "--ignore=test/integration")))
2426 (native-inputs
2427 (list python-hatchling
2428 ;; TODO: Missing packages: pytest-clarity,
2429 ;; nox-poetry, types-aiofiles.
2430 python-async-timeout
2431 python-brotli
2432 python-faker
2433 python-pytest
2434 python-pytest-aiohttp
2435 python-pytest-asyncio
2436 python-pytest-xdist))
2437 (propagated-inputs
2438 (list python-aiofiles
2439 python-aiohttp
2440 python-aiosqlite
2441 python-attrs
2442 python-itsdangerous
2443 python-redis
2444 python-url-normalize))
2445 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
2446 (synopsis "Persistent cache for aiohttp requests")
2447 (description
2448 "This package is an asynchronous persistent caching library specifically
2449designed for @samp{aiohttp} requests in Python. With support for various
2450storage backends, it offers flexibility in how and where the cache is stored.
2451Please note that MongoDB and DynamoDB backends are not currently supported due
2452to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
2453 (license license:expat)))
2454
2455(define-public python-aiohttp-cors
2456 (package
2457 (name "python-aiohttp-cors")
2458 (version "0.8.1")
2459 (source
2460 (origin
2461 (method url-fetch)
2462 (uri (pypi-uri "aiohttp_cors" version))
2463 (sha256
2464 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
2465 (build-system pyproject-build-system)
2466 (arguments
2467 (list
2468 #:tests? #f)) ; network access is required to run tests
2469 (native-inputs
2470 (list python-setuptools
2471 python-wheel))
2472 (propagated-inputs
2473 (list python-aiohttp))
2474 (home-page "https://github.com/aio-libs/aiohttp-cors")
2475 (synopsis "CORS support for aiohttp")
2476 (description
2477 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
2478support for aiohttp asyncio-powered asynchronous HTTP server.")
2479 (license license:asl2.0)))
2480
2481(define-public python-aiohttp-retry
2482 (package
2483 (name "python-aiohttp-retry")
2484 (version "2.9.1")
2485 (source
2486 (origin
2487 (method git-fetch)
2488 (uri (git-reference
2489 (url "https://github.com/inyutin/aiohttp_retry")
2490 (commit (string-append "v" version))))
2491 (file-name (git-file-name name version))
2492 (sha256
2493 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
2494 (build-system pyproject-build-system)
2495 (native-inputs
2496 (list python-pytest
2497 python-pytest-aiohttp
2498 python-setuptools))
2499 (propagated-inputs
2500 (list python-aiohttp))
2501 (home-page "https://github.com/inyutin/aiohttp_retry")
2502 (synopsis "Simple retry client for aiohttp")
2503 (description
2504 "This package implements @code{RetryClient} for @code{aiohttp} to retry
2505connection to provided endpoint with timeouts logic or use:
2506
2507@itemize
2508@item @code{ExponentialRetry} with exponential backoff
2509@item @code{RandomRetry} for random backoff
2510@item @code{ListRetry} with backoff you predefine by list
2511@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
2512@item @code{JitterRetry} exponential retry with a bit of randomness
2513@end itemize")
2514 (license license:expat)))
2515
2516(define-public python-aiohttp-socks
2517 (package
2518 (name "python-aiohttp-socks")
2519 (version "0.10.1")
2520 (source
2521 (origin
2522 (method url-fetch)
2523 (uri (pypi-uri "aiohttp_socks" version))
2524 (sha256
2525 (base32
2526 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
2527 (build-system pyproject-build-system)
2528 (arguments (list #:tests? #false)) ;none included
2529 (propagated-inputs
2530 (list python-aiohttp python-socks))
2531 (native-inputs (list python-setuptools python-wheel))
2532 (home-page "https://github.com/romis2012/aiohttp-socks")
2533 (synopsis "SOCKS proxy connector for aiohttp")
2534 (description "This package provides a SOCKS proxy connector for
2535aiohttp. It supports SOCKS4(a) and SOCKS5.")
2536 (license license:asl2.0)))
2537
2538(define-public python-aiodns
2539 (package
2540 (name "python-aiodns")
2541 (version "3.5.0")
2542 (source
2543 (origin
2544 (method git-fetch)
2545 (uri (git-reference
2546 (url "https://github.com/saghul/aiodns")
2547 (commit (string-append "v" version))))
2548 (file-name (git-file-name name version))
2549 (sha256
2550 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
2551 (build-system pyproject-build-system)
2552 (arguments
2553 (list
2554 #:tests? #f)) ;tests require internet access
2555 (native-inputs
2556 (list python-pytest
2557 python-pytest-cov
2558 python-pytest-asyncio
2559 python-setuptools))
2560 (propagated-inputs (list python-pycares))
2561 (home-page "https://github.com/saghul/aiodns")
2562 (synopsis "Simple DNS resolver for asyncio")
2563 (description
2564 "@code{aiodns} provides a simple way for doing asynchronous DNS
2565resolutions with a synchronous looking interface by using
2566@url{https://github.com/saghul/pycares,pycares}.")
2567 (license license:expat)))
2568
2569(define-public python-aioquic
2570 (package
2571 (name "python-aioquic")
2572 (version "1.2.0")
2573 (source
2574 (origin
2575 (method url-fetch)
2576 (uri (pypi-uri "aioquic" version))
2577 (sha256
2578 (base32 "16bigrn5b46c7nmpzxhnlhh4y03hwc7dbd0mi5f8r53i7yxn64pr"))))
2579 (build-system pyproject-build-system)
2580 (arguments
2581 (list
2582 #:test-flags
2583 #~(list "-k" (string-join
2584 ;; AssertionError: AlertBadCertificate not raised
2585 (list "not test_verify_subject_no_subjaltname"
2586 ;; AttributeError: module
2587 ;; 'service_identity.cryptography' has no attribute
2588 ;; 'extract_patterns'
2589 "test_verify_subject_with_subjaltname"
2590 ;; AttributeError: module
2591 ;; 'service_identity.cryptography' has no attribute
2592 ;; 'extract_patterns'
2593 "test_verify_subject_with_subjaltname_ipaddress")
2594 " and not "))))
2595 (native-inputs
2596 (list nss-certs-for-test
2597 python-pytest
2598 python-setuptools
2599 python-wheel))
2600 (inputs
2601 (list openssl))
2602 (propagated-inputs
2603 (list python-certifi
2604 python-pylsqpack
2605 python-pyopenssl
2606 python-service-identity))
2607 (home-page "https://github.com/aiortc/aioquic")
2608 (synopsis "QUIC and HTTP3 implementation in Python")
2609 (description
2610 "@code{aioquic} is a library for the QUIC network protocol in Python.
2611It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
2612 (license license:bsd-3)))
2613
2614(define-public python-aiorpcx
2615 (package
2616 (name "python-aiorpcx")
2617 (version "0.25.0")
2618 (source
2619 (origin
2620 (method git-fetch)
2621 ;; PyPI misses the util.py file used for tests.
2622 (uri (git-reference
2623 (url "https://github.com/kyuupichan/aiorpcX")
2624 (commit version)))
2625 (file-name (git-file-name name version))
2626 (sha256
2627 (base32
2628 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
2629 (build-system pyproject-build-system)
2630 (arguments
2631 (list
2632 #:test-flags
2633 ;; This test opens a remote connection.
2634 #~(list "-k" "not test_create_connection_resolve_good")))
2635 (native-inputs (list python-pytest
2636 python-pytest-asyncio-0.26
2637 python-setuptools))
2638 (propagated-inputs
2639 (list python-attrs python-websockets))
2640 (home-page "https://github.com/kyuupichan/aiorpcX")
2641 (synopsis "Generic asyncio RPC implementation")
2642 (description
2643 "The aiorpcX library is a generic asyncio implementation of RPC suitable
2644for an application that is a client, server or both.
2645
2646The package includes a module with full coverage of JSON RPC versions 1.0 and
26472.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
2648comes with a SOCKS proxy client.")
2649 (license (list license:expat license:bsd-2))))
2650
2651(define-public python-aiostream
2652 (package
2653 (name "python-aiostream")
2654 (version "0.7.0")
2655 (source
2656 (origin
2657 (method git-fetch) ;no tests in PyPI archvie
2658 (uri (git-reference
2659 (url "https://github.com/vxgmichel/aiostream")
2660 (commit (string-append "v" version))))
2661 (file-name (git-file-name name version))
2662 (sha256
2663 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
2664 (build-system pyproject-build-system)
2665 (native-inputs
2666 (list python-pytest
2667 python-pytest-cov
2668 python-pytest-asyncio
2669 python-setuptools))
2670 (propagated-inputs
2671 (list python-typing-extensions))
2672 (home-page "https://github.com/vxgmichel/aiostream")
2673 (synopsis "Generator-based operators for asynchronous iteration")
2674 (description "@code{aiostream} provides a collection of stream operators that can
2675be combined to create asynchronous pipelines of operations. It can be seen as an
2676asynchronous version of @code{itertools}, although some aspects are slightly
2677different. All the provided operators return a unified interface called a stream. A
2678stream is an enhanced asynchronous iterable.")
2679 (license license:gpl3)))
2680
2681(define-public python-asgiref
2682 (package
2683 (name "python-asgiref")
2684 (version "3.8.1")
2685 (source (origin
2686 (method url-fetch)
2687 (uri (pypi-uri "asgiref" version))
2688 (sha256
2689 (base32 "146mhkn3zp2bqf7j6r3chdlvfzgs5x1lrnqahsllgjdyl20bshy3"))))
2690 (build-system pyproject-build-system)
2691 (native-inputs
2692 (list python-pytest
2693 python-pytest-asyncio
2694 python-setuptools
2695 python-wheel))
2696 (home-page "https://github.com/django/asgiref/")
2697 (synopsis "ASGI specs, helper code, and adapters")
2698 (description
2699 "ASGI is a standard for Python asynchronous web apps and servers to
2700communicate with each other, and positioned as an asynchronous successor to
2701WSGI. This package includes libraries for implementing ASGI servers.")
2702 (license license:bsd-3)))
2703
2704(define-public python-asgi-csrf
2705 (package
2706 (name "python-asgi-csrf")
2707 (version "0.11")
2708 (source (origin
2709 (method git-fetch) ;for tests
2710 (uri (git-reference
2711 (url "https://github.com/simonw/asgi-csrf")
2712 (commit version)))
2713 (file-name (git-file-name name version))
2714 (sha256
2715 (base32
2716 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))))
2717 (build-system pyproject-build-system)
2718 (propagated-inputs (list python-itsdangerous python-multipart))
2719 (native-inputs (list python-asgi-lifespan
2720 python-httpx
2721 python-pytest
2722 python-pytest-asyncio
2723 python-starlette
2724 python-setuptools
2725 python-wheel))
2726 (home-page "https://github.com/simonw/asgi-csrf")
2727 (synopsis "ASGI middleware for protecting against CSRF attacks")
2728 (description "This Asynchronous Server Gateway Interface (ASGI)
2729middleware protects against Cross-site request forgery (CSRF) attacks.
2730It implements the Double Submit Cookie pattern, where a cookie is set
2731that is then compared to a @code{csrftoken} hidden form field or a
2732@code{x-csrftoken} HTTP header.")
2733 (license license:asl2.0)))
2734
2735(define-public python-asgi-lifespan
2736 (package
2737 (name "python-asgi-lifespan")
2738 (version "2.1.0")
2739 (source (origin
2740 (method git-fetch) ;for tests
2741 (uri (git-reference
2742 (url "https://github.com/florimondmanca/asgi-lifespan")
2743 (commit version)))
2744 (file-name (git-file-name name version))
2745 (sha256
2746 (base32
2747 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
2748 (build-system pyproject-build-system)
2749 (arguments
2750 (list
2751 #:test-flags
2752 '(list "-c" "/dev/null" ;ignore coverage-related options
2753 "-k"
2754 (string-append
2755 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
2756 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
2757 " or test_lifespan_manager[trio-None-BodyFailed-None]"
2758 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
2759 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
2760 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
2761 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
2762 " or test_lifespan_timeout[trio-slow_shutdown]"
2763 " or test_lifespan_not_supported[trio-http_only]"
2764 " or test_lifespan_not_supported[trio-http_no_assert]"
2765 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
2766 ")"))
2767 #:phases
2768 '(modify-phases %standard-phases
2769 (add-after 'unpack 'compatibility
2770 (lambda _
2771 ;; httpx version 0.28.0 removed the "app" shortcut.
2772 (substitute* "tests/test_manager.py"
2773 (("app=manager.app")
2774 "transport=httpx.ASGITransport(manager.app)")))))))
2775 (native-inputs (list python-httpx
2776 python-pytest
2777 python-pytest-asyncio
2778 python-pytest-trio
2779 python-starlette
2780 python-setuptools
2781 python-wheel))
2782 (propagated-inputs (list python-sniffio))
2783 (home-page "https://github.com/florimondmanca/asgi-lifespan")
2784 (synopsis "Programmatic startup/shutdown of ASGI apps")
2785 (description "Programmatically send startup/shutdown lifespan events
2786into Asynchronous Server Gateway Interface (ASGI) applications. When
2787used in combination with an ASGI-capable HTTP client such as HTTPX, this
2788allows mocking or testing ASGI applications without having to spin up an
2789ASGI server.")
2790 (license license:expat)))
2791
2792(define-public python-a2wsgi
2793 (package
2794 (name "python-a2wsgi")
2795 (version "1.10.7")
2796 (source (origin
2797 (method url-fetch)
2798 (uri (pypi-uri "a2wsgi" version))
2799 (sha256
2800 (base32
2801 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
2802 (build-system pyproject-build-system)
2803 (arguments
2804 (list
2805 #:test-flags
2806 #~(list "-k" (string-join
2807 (list "not test_starlette_stream_response"
2808 "test_starlette_base_http_middleware"
2809 "test_baize_stream_response"
2810 ;; Fails because of harmless whitespace differences.
2811 "test_wsgi_post")
2812 " and not "))
2813 #:build-backend "pdm.backend"))
2814 (native-inputs
2815 (list python-pdm-backend
2816 python-pytest
2817 ;; python-baize ; not packed yet
2818 python-httpx-bootstrap
2819 ;; Cycle: python-a2wsgi->python-uvicorn->
2820 ;; python-httpx->python-starlette->python-a2wsgi
2821 ;; python-starlette
2822 python-pytest-asyncio))
2823 (home-page "https://github.com/abersheeran/a2wsgi")
2824 (synopsis "Convert WSGI to ASGI or vice versa")
2825 (description
2826 "This program converts a WSGI program to an ASGI program or the other
2827way around. It depends only on the Python standard library.")
2828 (license license:asl2.0)))
2829
2830(define-public python-httpauth
2831 (package
2832 (name "python-httpauth")
2833 (version "0.4.1")
2834 (source (origin
2835 (method url-fetch)
2836 (uri (pypi-uri "httpauth" version))
2837 (sha256
2838 (base32
2839 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
2840 (build-system pyproject-build-system)
2841 (native-inputs (list python-pytest python-setuptools python-wheel))
2842 (home-page "https://github.com/jonashaag/httpauth")
2843 (synopsis "WSGI HTTP Digest Authentication middleware")
2844 (description "@code{python-httpauth} is WSGI middleware that secures some/all
2845routes using HTTP Digest Authentication.")
2846 (license license:bsd-2)))
2847
2848(define-public python-css-html-js-minify
2849 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
2850 (revision "0"))
2851 (package
2852 (name "python-css-html-js-minify")
2853 (version (git-version "2.5.5" revision commit))
2854 (source
2855 (origin
2856 (method git-fetch)
2857 (uri (git-reference
2858 (url "https://github.com/juancarlospaco/css-html-js-minify")
2859 (commit commit)))
2860 (file-name (git-file-name name version))
2861 (sha256
2862 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
2863 (build-system pyproject-build-system)
2864 (arguments
2865 (list
2866 #:phases
2867 #~(modify-phases %standard-phases
2868 (add-after 'unpack 'relax-requirements
2869 (lambda _
2870 (substitute* "setup.cfg"
2871 (("^tests_require.*") "")))))))
2872 (native-inputs (list python-pytest python-setuptools))
2873 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
2874 (synopsis "CSS/HTML/JS minifier")
2875 (description
2876 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
2877 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
2878 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
2879 ;; looks like the user can choose a license.
2880 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
2881
2882(define-public python-aws-sam-translator
2883 (package
2884 (name "python-aws-sam-translator")
2885 (version "1.107.0")
2886 (source
2887 (origin
2888 (method git-fetch) ; no tests in PyPI release
2889 (uri (git-reference
2890 (url "https://github.com/aws/serverless-application-model")
2891 (commit (string-append "v" version))))
2892 (file-name (git-file-name name version))
2893 (sha256
2894 (base32 "0bx9ha9k6zx6gl1hsgm6cpq4xrfn604v2g1d5dh2d5zq0463gwfq"))))
2895 (build-system pyproject-build-system)
2896 (arguments
2897 (list
2898 #:test-flags
2899 #~(list "--numprocesses" (number->string (parallel-job-count))
2900 "--ignore=tests/bin/test_public_interface.py"
2901 "tests")
2902 #:phases
2903 #~(modify-phases %standard-phases
2904 (add-after 'unpack 'fix-pytest-config
2905 (lambda _
2906 ;; Drop test coverage requirements.
2907 (substitute* "pytest.ini"
2908 ((".*addopts.*") ""))))
2909 (add-before 'check 'pre-check
2910 (lambda _
2911 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
2912 (native-inputs
2913 (list python-pytest
2914 python-pytest-xdist
2915 python-parameterized
2916 python-pyyaml
2917 python-setuptools))
2918 (propagated-inputs
2919 (list python-boto3
2920 python-jsonschema
2921 python-pydantic
2922 python-typing-extensions))
2923 (home-page "https://github.com/aws/serverless-application-model")
2924 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
2925 (description
2926 "AWS SAM Translator is a library that transform @dfn{Serverless Application
2927Model} (SAM) templates into AWS CloudFormation templates.")
2928 (license license:asl2.0)))
2929
2930(define-public python-aws-xray-sdk
2931 (package
2932 (name "python-aws-xray-sdk")
2933 (version "2.14.0")
2934 (home-page "https://github.com/aws/aws-xray-sdk-python")
2935 (source (origin
2936 (method git-fetch)
2937 (uri (git-reference (url home-page) (commit version)))
2938 (file-name (git-file-name name version))
2939 (sha256
2940 (base32
2941 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
2942 (build-system pyproject-build-system)
2943 (arguments
2944 (list
2945 #:test-flags
2946 '(list ;; Tries to connect to external network resources
2947 "--ignore=tests/ext/aiohttp/test_client.py"
2948 "--ignore=tests/ext/httplib/test_httplib.py"
2949 "--ignore=tests/ext/httpx"
2950 "--ignore=tests/ext/requests/test_requests.py"
2951 ;; TODO: How to configure Django for these tests?
2952 "--ignore=tests/ext/django"
2953 ;; These tests require packages not yet in Guix.
2954 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
2955 "--ignore=tests/ext/aiohttp/test_middleware.py"
2956 "--ignore=tests/ext/pg8000/test_pg8000.py"
2957 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
2958 "--ignore=tests/ext/pymysql/test_pymysql.py"
2959 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
2960 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
2961 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
2962 "--ignore=tests/test_async_recorder.py"
2963 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
2964 "--ignore-glob=tests/ext/sqlalchemy*"
2965 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
2966 ;; FIXME: Why is this failing?
2967 "--ignore=tests/test_patcher.py"
2968 "--ignore=tests/test_lambda_context.py")
2969 #:phases
2970 '(modify-phases %standard-phases
2971 (add-before 'check 'pre-check
2972 (lambda _
2973 ;; Allow "import tests.utils" to work as expected.
2974 (setenv "PYTHONPATH" (getcwd)))))))
2975 (native-inputs
2976 (list ;; These are required for the test suite.
2977 python-aiohttp
2978 python-bottle
2979 python-flask
2980 python-flask-sqlalchemy
2981 python-httpx
2982 python-mock
2983 python-pymysql
2984 python-pytest
2985 python-pytest-asyncio-0.26
2986 python-pytest-benchmark
2987 python-setuptools
2988 python-sqlalchemy
2989 python-webtest))
2990 (propagated-inputs
2991 (list python-botocore
2992 python-jsonpickle
2993 python-requests
2994 python-wrapt))
2995 (synopsis "Profile applications on AWS X-Ray")
2996 (description
2997 "The AWS X-Ray SDK for Python enables Python developers to record and
2998emit information from within their applications to the AWS X-Ray service.")
2999 (license license:asl2.0)))
3000
3001(define-public python-publicsuffixlist
3002 (package
3003 (name "python-publicsuffixlist")
3004 (version "1.0.2.20250202")
3005 (source
3006 (origin
3007 (method url-fetch)
3008 (uri (pypi-uri "publicsuffixlist" version))
3009 (sha256
3010 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
3011 (build-system pyproject-build-system)
3012 (arguments (list #:test-backend #~'unittest))
3013 (native-inputs (list python-setuptools))
3014 (home-page "https://github.com/ko-zu/psl")
3015 (synopsis "Public suffix list for Python")
3016 (description
3017 "This package provides an implementation of
3018@url{https://publicsuffix.org/, Public Suffix List } as Python library.
3019
3020Features:
3021@itemize
3022@item supports IDN (unicode and punycoded)
3023@item shipped with built-in PSL and an updater script
3024@item written in Pure Python with no library dependencies
3025@end itemize")
3026 (license license:mpl2.0)))
3027
3028(define-public python-pycognito
3029 (package
3030 (name "python-pycognito")
3031 (version "2024.5.1")
3032 (source
3033 (origin
3034 (method url-fetch)
3035 (uri (pypi-uri "pycognito" version))
3036 (sha256
3037 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
3038 (build-system pyproject-build-system)
3039 (arguments
3040 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
3041 (list #:tests? #f))
3042 (native-inputs
3043 (list python-setuptools))
3044 (propagated-inputs
3045 (list python-boto3
3046 python-envs
3047 python-pyjwt
3048 python-requests))
3049 (home-page "https://github.com/pvizeli/pycognito")
3050 (synopsis "Python library for using AWS Cognito")
3051 (description
3052 "This package provides a Python class to integrate Boto3's Cognito
3053client so it is easy to login users, with @acronym{Secure Remote Password,
3054SRP} support.")
3055 (license license:asl2.0)))
3056
3057(define-public python-python3-saml
3058 (package
3059 (name "python-python3-saml")
3060 (version "1.16.0")
3061 (source
3062 (origin
3063 (method git-fetch)
3064 (uri (git-reference
3065 (url "https://github.com/SAML-Toolkits/python3-saml")
3066 (commit (string-append "v" version))))
3067 (file-name (git-file-name name version))
3068 (sha256
3069 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
3070 (build-system pyproject-build-system)
3071 (arguments
3072 (list
3073 ;; 214 tests pass, 50 fail; many fail because of required Internet
3074 ;; access or because of assumptions about the location of test files.
3075 #:tests? #false))
3076 (native-inputs
3077 (list python-freezegun
3078 python-poetry-core))
3079 (inputs
3080 (list xmlsec-openssl))
3081 (propagated-inputs
3082 (list python-isodate
3083 python-lxml
3084 python-xmlsec))
3085 (home-page "https://github.com/SAML-Toolkits/python3-saml")
3086 (synopsis "Saml Python toolkit")
3087 (description
3088 "The SAML Python Toolkit lets you add SAML support to your Python
3089software.")
3090 (license license:expat)))
3091
3092(define-public python-ovh
3093 (package
3094 (name "python-ovh")
3095 (version "1.1.0")
3096 (source (origin
3097 (method url-fetch)
3098 (uri (pypi-uri "ovh" version))
3099 (sha256
3100 (base32
3101 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
3102 (build-system pyproject-build-system)
3103 (arguments (list #:tests? #f)) ; XXX: tests require networking
3104 (propagated-inputs (list python-requests))
3105 (native-inputs (list python-setuptools))
3106 (home-page "https://api.ovh.com")
3107 (synopsis "Interact with OVHcloud APIs")
3108 (description "This package provides the official module to perform HTTP requests
3109to the OVHcloud APIs.")
3110 (license license:bsd-3)))
3111
3112(define-public python-cbor2
3113 (package
3114 (name "python-cbor2")
3115 (version "5.4.2.post1")
3116 (source
3117 (origin
3118 (method url-fetch)
3119 (uri (pypi-uri "cbor2" version))
3120 (sha256
3121 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
3122 (build-system pyproject-build-system)
3123 (native-inputs
3124 (list python-pytest
3125 python-pytest-cov
3126 python-setuptools
3127 python-setuptools-scm
3128 python-wheel))
3129 (home-page "https://github.com/agronholm/cbor2")
3130 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
3131 (description "This Python library provides encoding and decoding for the
3132Concise Binary Object
3133Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
31348949}) serialization format. The specification is fully compatible with the
3135original RFC 7049. Among its features are:
3136@itemize
3137@item Simple API like the @code{json} or @code{pickle} modules.
3138@item Support many CBOR tags with stdlib objects.
3139@item Generic tag decoding.
3140@item Shared value references including cyclic references.
3141@item String references compact encoding with repeated strings replaced with
3142indices.
3143@item Optional C module backend tested on big- and little-endian architectures.
3144@item Extensible tagged value handling using tag_hook and object_hook on
3145decode and default on encode.
3146@end itemize")
3147 (license license:expat)))
3148
3149(define-public python-cfn-lint
3150 (package
3151 (name "python-cfn-lint")
3152 (version "1.38.1")
3153 (source
3154 (origin
3155 (method git-fetch)
3156 (uri (git-reference
3157 (url "https://github.com/aws-cloudformation/cfn-lint")
3158 (commit (string-append "v" version))))
3159 (file-name (git-file-name name version))
3160 (sha256
3161 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
3162 (build-system pyproject-build-system)
3163 (arguments
3164 (list
3165 ;; tests: 2136 passed, 11 deselected, 1 warning
3166 #:test-flags
3167 #~(list "--ignore=test/integration/"
3168 "-k" (string-join
3169 ;; Tests failing on doctest or comparing diff.
3170 (list "not test_build_graph"
3171 "test_good_template"
3172 "test_success_run"
3173 "test_update_docs"
3174 ;; ImportError: Missing optional dependencies sarif
3175 "test_sarif_formatter")
3176 " and not "))
3177 #:phases
3178 #~(modify-phases %standard-phases
3179 (add-after 'unpack 'remove-deprecated
3180 (lambda _
3181 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
3182 (("deprecated\": \"2025")
3183 "deprecated\": \"2125")))))))
3184 (native-inputs
3185 (list python-defusedxml
3186 python-pydot
3187 python-pytest
3188 python-setuptools))
3189 (propagated-inputs
3190 (list python-aws-sam-translator
3191 python-jsonpatch
3192 python-networkx
3193 python-pyyaml
3194 python-regex
3195 python-sympy
3196 python-typing-extensions
3197 ;; [optional]
3198 python-junit-xml))
3199 (home-page "https://github.com/aws-cloudformation/cfn-lint")
3200 (synopsis "Validate CloudFormation templates")
3201 (description
3202 "This package lets you validate CloudFormation YAML/JSON templates against
3203the CloudFormation spec and additional checks. Includes checking valid values
3204for resource properties and best practices.")
3205 (license license:expat)))
3206
3207(define-public python-pyzabbix
3208 (package
3209 (name "python-pyzabbix")
3210 (version "1.3.1")
3211 (source
3212 (origin
3213 (method git-fetch)
3214 (uri (git-reference
3215 (url "https://github.com/lukecyca/pyzabbix")
3216 (commit version)))
3217 (file-name (git-file-name name version))
3218 (sha256
3219 (base32 "1dbs3bz1mjlvlg46ikhg5j7agwni61ljlpiziknklv95yp29n86v"))))
3220 (build-system pyproject-build-system)
3221 (arguments
3222 (list #:test-flags #~(list "tests")))
3223 (native-inputs
3224 (list python-pytest
3225 python-requests-mock
3226 python-setuptools))
3227 (propagated-inputs
3228 (list python-packaging
3229 python-requests))
3230 (home-page "https://github.com/lukecyca/pyzabbix")
3231 (synopsis "Python interface to the Zabbix API")
3232 (description
3233 "@code{pyzabbix} is a Python module for working with the Zabbix API.")
3234 (license license:lgpl2.1+)))
3235
3236(define-public python-requests-cache
3237 (package
3238 (name "python-requests-cache")
3239 (version "1.2.1")
3240 (source
3241 (origin
3242 (method url-fetch)
3243 (uri (pypi-uri "requests_cache" version))
3244 (sha256
3245 (base32 "1l8i4l2pd26gbrlcdb5z056wvsqfr3vvbyqq2f8x1f65zn3ckav8"))))
3246 (build-system pyproject-build-system)
3247 (arguments
3248 (list
3249 #:test-flags
3250 #~(list "--numprocesses" (number->string (parallel-job-count))
3251 ;; These tests require access to external services, e.g. MongoDB
3252 ;; and Redis.
3253 "--ignore=tests/integration"
3254 ;; AttributeError: <class 'requests.adapters.HTTPAdapter'> does
3255 ;; not have the attribute 'get_connection_with_tls_context'
3256 "-k" "not test_mock_session")
3257 #:phases
3258 #~(modify-phases %standard-phases
3259 (add-before 'check 'pre-check
3260 (lambda _
3261 ;; PermissionError: [Errno 13] Permission denied:
3262 ;; '/homeless-shelter'
3263 (setenv "HOME" "/tmp"))))))
3264 (native-inputs
3265 (list python-poetry-core
3266 python-pytest
3267 python-pytest-rerunfailures
3268 python-pytest-xdist
3269 python-requests-mock
3270 python-responses
3271 python-rich
3272 python-tenacity
3273 python-time-machine
3274 python-timeout-decorator))
3275 (propagated-inputs
3276 (list python-attrs
3277 python-boto3
3278 python-bson
3279 python-cattrs
3280 python-itsdangerous
3281 python-orjson
3282 python-platformdirs
3283 python-pymongo
3284 python-pyyaml
3285 python-redis
3286 python-requests
3287 python-ujson
3288 python-url-normalize
3289 python-urllib3))
3290 (home-page "https://github.com/requests-cache/requests-cache")
3291 (synopsis "Persistent HTTP cache for Python requests")
3292 (description
3293 "This package provides a drop-in replacement for @code{requests.Session}
3294with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
3295responses as planin JSON/YAML file or save responses as plain JSON/YAML
3296files.")
3297 (license license:bsd-2)))
3298
3299(define-public python-requests-futures
3300 (package
3301 (name "python-requests-futures")
3302 (version "1.0.2")
3303 (source
3304 (origin
3305 (method url-fetch)
3306 (uri (pypi-uri "requests_futures" version))
3307 (sha256
3308 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
3309 (build-system pyproject-build-system)
3310 (native-inputs
3311 (list python-greenlet
3312 python-pytest
3313 python-pytest-httpbin
3314 python-setuptools
3315 python-werkzeug))
3316 (propagated-inputs (list python-requests))
3317 (home-page "https://github.com/ross/requests-futures")
3318 (synopsis "Asynchronous Python HTTP for Humans")
3319 (description
3320 "This package provides and add-on the Python Requests HTTP library to run
3321code asynchronously.")
3322 (license license:asl2.0)))
3323
3324(define-public python-s3path
3325 (package
3326 (name "python-s3path")
3327 (version "0.6.4")
3328 (source
3329 (origin
3330 (method url-fetch)
3331 (uri (pypi-uri "s3path" version))
3332 (sha256
3333 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
3334 (build-system pyproject-build-system)
3335 (arguments
3336 (list
3337 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
3338 #:tests? #f))
3339 (native-inputs
3340 (list python-setuptools
3341 python-wheel))
3342 (propagated-inputs
3343 (list python-boto3
3344 python-smart-open))
3345 (home-page "https://github.com/liormizr/s3path")
3346 (synopsis "Pathlib extension for AWS S3 Service")
3347 (description
3348 "S3Path provide a Python convenient File-System/Path like interface for
3349AWS S3 Service using boto3 S3 resource as a driver.")
3350 (license license:asl2.0)))
3351
3352(define-public python-falcon
3353 (package
3354 (name "python-falcon")
3355 (version "4.0.2")
3356 (source
3357 (origin
3358 ;; Use git, as there are some test files missing from the PyPI release,
3359 ;; such as 'examples' directory.
3360 (method git-fetch)
3361 (uri (git-reference
3362 (url "https://github.com/falconry/falcon")
3363 (commit version)))
3364 (file-name (git-file-name name version))
3365 (sha256
3366 (base32
3367 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
3368 (build-system pyproject-build-system)
3369 (arguments
3370 (list
3371 #:test-flags
3372 '(list "-k" "not slow"
3373 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
3374 #:phases
3375 '(modify-phases %standard-phases
3376 (add-before 'check 'pre-check
3377 (lambda _
3378 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
3379 (setenv "FALCON_TESTING_SESSION" "Y")
3380 (setenv "PYTHONASYNCIODEBUG" "1")
3381 (setenv "HOME" "/tmp"))))))
3382 (propagated-inputs
3383 (list python-mimeparse))
3384 (native-inputs
3385 (list python-aiofiles
3386 python-cbor2
3387 python-cython ;for faster binaries
3388 python-fakeredis
3389 python-httpx
3390 python-mujson
3391 python-msgpack
3392 python-orjson
3393 python-pecan
3394 python-pillow
3395 python-pytest
3396 python-pytest-asyncio
3397 python-pytest-runner
3398 python-pyyaml
3399 python-rapidjson
3400 python-requests
3401 python-setuptools
3402 python-testtools
3403 python-ujson
3404 python-websockets
3405 python-wheel))
3406 (home-page "https://falconframework.org")
3407 (synopsis "Web framework for building APIs and application backends")
3408 (description "Falcon is a web API framework for building microservices,
3409application backends and higher-level frameworks. Among its features are:
3410@itemize
3411@item Optimized and extensible code base
3412@item Routing via URI templates and REST-inspired resource
3413classes
3414@item Access to headers and bodies through request and response
3415classes
3416@item Request processing via middleware components and hooks
3417@item Idiomatic HTTP error responses
3418@item Straightforward exception handling
3419@item Unit testing support through WSGI helpers and mocks
3420@item Compatible with both CPython and PyPy
3421@item Cython support for better performance when used with CPython
3422@end itemize")
3423 (license license:asl2.0)))
3424
3425(define-public python-falcon-cors
3426 (package
3427 (name "python-falcon-cors")
3428 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
3429 (revision . "0")))
3430 (version (git-version "1.1.7"
3431 (assoc-ref properties 'revision)
3432 (assoc-ref properties 'commit)))
3433 (source
3434 (origin
3435 (method git-fetch)
3436 (uri (git-reference
3437 (url "https://github.com/lwcolton/falcon-cors")
3438 (commit (assoc-ref properties 'commit))))
3439 (file-name (git-file-name name version))
3440 (sha256
3441 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
3442 (build-system pyproject-build-system)
3443 (arguments
3444 (list
3445 ;; XXX: The last commit's tests are uncompatible with the more recent
3446 ;; version of python-falcon.
3447 #:tests? #f))
3448 (native-inputs
3449 (list python-falcon python-mock python-pynose python-setuptools))
3450 (home-page "https://github.com/lwcolton/falcon-cors")
3451 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
3452 (description
3453 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
3454support for Falcon. It allows applying a specially crafted CORS object to the
3455incoming requests, enabling the ability to serve resources over a different
3456origin than that of the web application.")
3457 (license license:asl2.0)))
3458
3459(define-public python-furl
3460 (package
3461 (name "python-furl")
3462 (version "2.1.4")
3463 (source
3464 (origin
3465 (method url-fetch)
3466 (uri (pypi-uri "furl" version))
3467 (sha256
3468 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
3469 (build-system pyproject-build-system)
3470 (arguments
3471 (list #:test-flags
3472 #~(list "-k" (string-append "not test_hosts"
3473 " and not test_netloc"
3474 " and not test_odd_urls"))))
3475 (propagated-inputs
3476 (list python-orderedmultidict python-six))
3477 (native-inputs
3478 (list python-pytest python-setuptools python-wheel))
3479 (home-page "https://github.com/gruns/furl")
3480 (synopsis "URL manipulation in Python")
3481 (description "Furl provides an easy-to-use alternative to the
3482@code{urllib} and @code{urlparse} modules for manipulating URLs.")
3483 (license license:unlicense)))
3484
3485(define-public python-httplib2
3486 (package
3487 (name "python-httplib2")
3488 (version "0.22.0")
3489 (source
3490 (origin
3491 ;; Tests not included in the release tarball.
3492 (method git-fetch)
3493 (uri (git-reference
3494 (url "https://github.com/httplib2/httplib2")
3495 (commit (string-append "v" version))))
3496 (file-name (git-file-name name version))
3497 (sha256
3498 (base32
3499 "1zkp3glv0iha7p68p5m0sb8mrrammkdc0mx32517xry52s4iva7g"))))
3500 (build-system pyproject-build-system)
3501 (arguments
3502 (list
3503 #:phases
3504 #~(modify-phases %standard-phases
3505 (add-after 'unpack 'adjust-test-requirements
3506 (lambda _
3507 (substitute* "requirements-test.txt"
3508 (("==") ">=")))))))
3509 (native-inputs
3510 (list python-cryptography
3511 python-future
3512 python-mock
3513 python-pyparsing
3514 python-pytest
3515 python-pytest-cov
3516 python-pytest-randomly
3517 python-pytest-timeout
3518 python-setuptools))
3519 (home-page "https://github.com/httplib2/httplib2")
3520 (synopsis "Comprehensive HTTP client library")
3521 (description
3522 "A comprehensive HTTP client library supporting many features left out of
3523other HTTP libraries.")
3524 (license license:expat)))
3525
3526(define-public python-cheroot
3527 (package
3528 (name "python-cheroot")
3529 (version "10.0.1")
3530 (source
3531 (origin
3532 (method url-fetch)
3533 (uri (pypi-uri "cheroot" version))
3534 (sha256
3535 (base32
3536 "0h0p3fnpa4dxi589s7ljlzb6p3mhqdivb3pc2f36pljqfrwjzf70"))))
3537 (build-system pyproject-build-system)
3538 (arguments
3539 (list
3540 #:test-flags
3541 #~(list "--cov=cheroot"
3542 ;; Tests are flaky in parallel invocation.
3543 ;; "--numprocesses=auto"
3544 "--doctest-modules"
3545 "--showlocals"
3546 "-k" (string-append
3547 ;; Disable test requiring networking.
3548 "not test_tls_client_auth"
3549 ;; TypeError: HTTPConnection.request() got an unexpected keyword
3550 ;; argument 'chunked'
3551 " and not test_peercreds_unix_sock"
3552 " and not test_peercreds_unix_sock_with_lookup"))
3553 #:phases
3554 #~(modify-phases %standard-phases
3555 (replace 'check
3556 (lambda* (#:key tests? test-flags #:allow-other-keys)
3557 (when tests?
3558 (with-directory-excursion "/tmp"
3559 (apply invoke "pytest" "-v"
3560 (append test-flags (list #$output))))))))))
3561 (propagated-inputs
3562 (list python-jaraco-functools python-more-itertools))
3563 (native-inputs
3564 (list python-jaraco-text
3565 python-portend
3566 python-pyopenssl
3567 python-pypytools
3568 python-pytest-cov
3569 python-pytest-mock
3570 python-requests
3571 python-requests-toolbelt
3572 python-requests-unixsocket2
3573 python-setuptools
3574 python-setuptools-scm
3575 python-trustme
3576 python-wheel))
3577 (home-page "https://cheroot.cherrypy.dev")
3578 (synopsis "Highly-optimized, pure-python HTTP server")
3579 (description
3580 "Cheroot is a high-performance, pure-Python HTTP server.")
3581 (license license:bsd-3)))
3582
3583(define-public python-cherrypy
3584 (package
3585 (name "python-cherrypy")
3586 (version "18.10.0")
3587 (source
3588 (origin
3589 (method git-fetch)
3590 (uri (git-reference
3591 (url "https://github.com/cherrypy/cherrypy")
3592 (commit (string-append "v" version))))
3593 (file-name (git-file-name name version))
3594 (sha256
3595 (base32 "1mhs64z75mj3rk4rgxc3xm1yksaj253rj9czhk4632blz5yi0kbn"))))
3596 (build-system pyproject-build-system)
3597 (arguments
3598 (list
3599 #:test-flags
3600 #~(map
3601 (lambda (test)
3602 (string-append "--deselect=cherrypy/test/" test))
3603 (list
3604 ;; XXX: Unraisable exceptions.
3605 "test_config_server.py::ServerConfigTests::testMaxRequestSize"
3606 "test_core.py::CoreRequestHandlingTest::testRanges"
3607 "test_core.py::CoreRequestHandlingTest::testRedirect"
3608 "test_encoding.py::EncodingTests::\
3609test_multipart_decoding_bigger_maxrambytes"
3610 "test_encoding.py::EncodingTests::\
3611test_test_http.py::HTTPTests::test_post_filename_with_special_characters"
3612 "test_http.py::HTTPTests::test_post_multipart"
3613 "test_http.py::HTTPTests::test_post_filename_with_special_characters"
3614 "test_mime.py::SafeMultipartHandlingTest::test_Flash_Upload"
3615 "test_tutorials.py::TutorialTest::test09Files"))))
3616 (propagated-inputs
3617 (list python-cheroot
3618 python-jaraco-collections
3619 python-more-itertools
3620 python-portend
3621 python-zc-lockfile))
3622 (native-inputs
3623 (list python-objgraph
3624 python-path
3625 python-pytest
3626 python-pytest-cov
3627 python-pytest-forked
3628 python-pytest-services
3629 python-pytest-sugar
3630 python-requests-toolbelt
3631 python-setuptools))
3632 (home-page "https://www.cherrypy.dev")
3633 (synopsis "Object-Oriented HTTP framework")
3634 (description
3635 "CherryPy is a pythonic, object-oriented web framework. It helps in
3636building web applications in the same way any other object-oriented Python
3637program would be built.")
3638 (license license:bsd-3)))
3639
3640(define-public httpie
3641 (package
3642 (name "httpie")
3643 (version "3.2.4")
3644 (source
3645 (origin
3646 (method git-fetch)
3647 (uri (git-reference
3648 (url "https://github.com/httpie/cli")
3649 (commit version)))
3650 (file-name (git-file-name name version))
3651 (sha256
3652 (base32 "0ii11xfqkbawg1v8dlli4fqq5k3yc2v65z3j7k3p4gng998s94mr"))))
3653 (build-system pyproject-build-system)
3654 (arguments
3655 (list
3656 #:phases
3657 #~(modify-phases %standard-phases
3658 (add-before 'build 'remove-unnecessary-dependencies
3659 ;; Remove pip and setuptools dependencies so sanity-check.py passes.
3660 (lambda _
3661 (substitute* "setup.cfg"
3662 (("(pip|setuptools)") "")))))
3663 ;; tests: 951 passed, 23 skipped, 6 deselected, 4 xfailed, 122 warnings
3664 #:test-flags
3665 ;; test_plugins_cli.py communicates through subprocesses
3666 ;; mocking stdin, which does not work in the build container.
3667 ;; test_ssl.py cannot find the SSL certificates.
3668 ;; test_binary.py fails for an unknown reason.
3669 #~(list "--ignore=tests/test_plugins_cli.py"
3670 "--ignore=tests/test_ssl.py"
3671 "--ignore=tests/test_binary.py"
3672 ;; Assertion failed to compare Unicode characters.
3673 (string-append
3674 "--deselect=tests/test_encoding.py"
3675 "::test_terminal_output_request_charset_detection")
3676 (string-append
3677 "--deselect=tests/test_encoding.py"
3678 "::test_terminal_output_response_charset_detection"))))
3679 (native-inputs (list python-pytest
3680 python-pytest-httpbin
3681 python-pytest-mock
3682 python-responses
3683 python-setuptools
3684 python-werkzeug))
3685 (propagated-inputs
3686 (list python-charset-normalizer
3687 python-defusedxml
3688 python-multidict
3689 python-pygments
3690 python-requests
3691 python-requests-toolbelt
3692 python-rich))
3693 (home-page "https://httpie.io")
3694 (synopsis "Modern, user-friendly command-line HTTP client for the API era")
3695 (description
3696 "A command line HTTP client with an intuitive UI, JSON support,
3697syntax highlighting, wget-like downloads, plugins, and more. It consists of
3698a single http command designed for painless debugging and interaction with
3699HTTP servers, RESTful APIs, and web services.")
3700 ;; CVE-2019-10751 was fixed in 1.0.3.
3701 (properties `((lint-hidden-cve "CVE-2019-10751")))
3702 (license license:bsd-3)))
3703
3704(define-public python-parfive
3705 (package
3706 (name "python-parfive")
3707 (version "2.2.0")
3708 (source
3709 (origin
3710 (method url-fetch)
3711 (uri (pypi-uri "parfive" version))
3712 (sha256
3713 (base32 "16rf02jhjr9lij8s2gqmvs01vx8kiv9f2535dnnziqwqv14d21yy"))))
3714 (build-system pyproject-build-system)
3715 (arguments
3716 (list
3717 #:test-flags
3718 ;; Disable tests requiring network access.
3719 #~(list "-k" (string-join
3720 (list "not test_ftp"
3721 "test_ftp_pasv_command"
3722 "test_ftp_http")
3723 " and not "))))
3724 (native-inputs
3725 (list python-pytest
3726 python-pytest-asyncio
3727 python-pytest-cov
3728 python-pytest-localserver
3729 python-pytest-socket
3730 python-setuptools
3731 python-setuptools-scm
3732 python-wheel))
3733 (propagated-inputs
3734 (list python-aiofiles
3735 python-aioftp
3736 python-aiohttp
3737 python-tqdm))
3738 (home-page "https://parfive.readthedocs.io/")
3739 (synopsis "HTTP and FTP parallel file downloader")
3740 (description
3741 "This package provides CLI tool and Python library @code{parallel} file
3742downloader using asyncio. parfive can handle downloading multiple files in
3743parallel as well as downloading each file in a number of chunks.
3744
3745asciicast demo of parfive parfive works by creating a downloader object,
3746appending files to it and then running the download. parfive has a synchronous
3747API, but uses asyncio to parallelise downloading the files.")
3748 (license license:expat)))
3749
3750(define-public python-html2text
3751 (package
3752 (name "python-html2text")
3753 (version "2020.1.16")
3754 (source
3755 (origin
3756 (method url-fetch)
3757 (uri (pypi-uri "html2text" version))
3758 (sha256
3759 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
3760 (build-system pyproject-build-system)
3761 (native-inputs (list python-pytest python-setuptools python-wheel))
3762 (home-page "https://github.com/Alir3z4/html2text")
3763 (synopsis "Convert HTML into plain text")
3764 (description
3765 "html2text takes HTML and converts it into plain ASCII text
3766which is also valid markdown. html2text was originally written by Aaron
3767Swartz.")
3768 (license license:gpl3+)))
3769
3770(define-public python-jose
3771 (package
3772 (name "python-jose")
3773 (version "3.5.0")
3774 (home-page "https://github.com/mpdavis/python-jose")
3775 (source (origin
3776 (method git-fetch)
3777 (uri (git-reference (url home-page) (commit version)))
3778 (file-name (git-file-name name version))
3779 (sha256
3780 (base32
3781 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
3782 (build-system pyproject-build-system)
3783 (native-inputs
3784 (list python-pyasn1 python-pytest python-setuptools))
3785 (propagated-inputs
3786 (list python-cryptography python-ecdsa python-rsa))
3787 (synopsis "JOSE implementation in Python")
3788 (description
3789 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
3790- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
3791JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
3792content using a variety of algorithms.")
3793 (license license:expat)))
3794
3795(define-public python-joserfc
3796 (package
3797 (name "python-joserfc")
3798 (version "1.0.1")
3799 (source
3800 (origin
3801 (method url-fetch)
3802 (uri (pypi-uri "joserfc" version))
3803 (sha256
3804 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
3805 (build-system pyproject-build-system)
3806 (arguments
3807 (list
3808 #:test-flags
3809 ;; No module named 'Crypto'
3810 '(list "--ignore=tests/jwe/test_chacha20.py"
3811 ;; Deprecation warnings are not raised.
3812 "-k" (string-append "not test_guess_bytes_key"
3813 " and not test_guess_callable_key"
3814 " and not test_guess_str_key"))))
3815 (propagated-inputs (list python-cryptography))
3816 (native-inputs (list python-pytest python-setuptools python-wheel))
3817 (home-page "https://github.com/authlib/joserfc")
3818 (synopsis "Python library for JOSE RFCs")
3819 (description
3820 "This package provides a Python library for JOSE RFCs, including JWS,
3821JWE, JWK, JWA, and JWT.")
3822 (license license:bsd-3)))
3823
3824(define-public python-jwcrypto
3825 (package
3826 (name "python-jwcrypto")
3827 (version "1.5.6")
3828 (source
3829 (origin
3830 (method url-fetch)
3831 (uri (pypi-uri "jwcrypto" version))
3832 (sha256
3833 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
3834 (build-system pyproject-build-system)
3835 (native-inputs
3836 (list python-pytest
3837 python-setuptools))
3838 (propagated-inputs
3839 (list python-cryptography
3840 python-typing-extensions))
3841 (home-page "https://github.com/latchset/jwcrypto")
3842 (synopsis "Implementation of JOSE Web standards")
3843 (description
3844 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
3845Encryption} (JOSE) Web Standards.")
3846 (license license:lgpl3+)))
3847
3848(define-public python-pypitoken
3849 (package
3850 (name "python-pypitoken")
3851 (version "7.0.1")
3852 (source
3853 (origin
3854 (method url-fetch)
3855 (uri (pypi-uri "pypitoken" version))
3856 (sha256
3857 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
3858 (build-system pyproject-build-system)
3859 ;; There are no tests.
3860 (arguments (list #:tests? #false))
3861 (propagated-inputs (list python-jsonschema python-pymacaroons
3862 python-typing-extensions))
3863 (native-inputs (list python-poetry-core))
3864 (home-page "https://pypitoken.readthedocs.io/en/latest/")
3865 (synopsis "Manipulate PyPI API tokens")
3866 (description "This package lets you manipulate PyPI API tokens.")
3867 (license license:expat)))
3868
3869(define-public python-pyscss
3870 ;; XXX: no fresh release supporting Python 3.11, use the latest commit, see
3871 ;; <https://github.com/Kronuz/pyScss/issues/428>,
3872 ;; <https://github.com/Kronuz/pyScss/issues/431>.
3873 (let ((commit "73559d047706ccd4593cf6aa092de71f35164723")
3874 (revision "0"))
3875 (package
3876 (name "python-pyscss")
3877 (version (git-version "1.4.0" revision commit))
3878 (source
3879 (origin
3880 (method git-fetch) ; no tests in PyPI release
3881 (uri (git-reference
3882 (url "https://github.com/Kronuz/pyScss")
3883 (commit commit)))
3884 (file-name (git-file-name name version))
3885 (sha256
3886 (base32 "00msypxf5dm57gyfp3jxvjinigi4km84v33w83635pms9li2k3y7"))))
3887 (build-system pyproject-build-system)
3888 (native-inputs
3889 (list python-pytest-8
3890 python-setuptools))
3891 (inputs
3892 (list pcre))
3893 (propagated-inputs
3894 (list python-six)) ;hard dependency in scss/compiler.py
3895 (home-page "https://github.com/Kronuz/pyScss")
3896 (synopsis "Scss compiler for Python")
3897 (description
3898 "@code{pyScss} is a compiler for Sass, a superset language of
3899CSS3 that adds programming capabilities and some other syntactic sugar.")
3900 (license license:expat))))
3901
3902(define-public python-jsonpickle
3903 (package
3904 (name "python-jsonpickle")
3905 (version "4.0.0")
3906 (source (origin
3907 (method url-fetch)
3908 (uri (pypi-uri "jsonpickle" version))
3909 (sha256
3910 (base32
3911 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
3912 (build-system pyproject-build-system)
3913 (arguments
3914 (list
3915 #:test-flags
3916 ;; Prevent running the flake8 and black pytest plugins, which only tests
3917 ;; style and frequently causes harmless failures.
3918 '(list "-o" "addopts=''" "tests")
3919 #:phases
3920 '(modify-phases %standard-phases
3921 (add-before 'check 'pre-check
3922 (lambda* (#:key inputs #:allow-other-keys)
3923 (setenv "TZ" "UTC")
3924 (setenv "TZDIR"
3925 (search-input-directory inputs "share/zoneinfo")))))))
3926 (native-inputs
3927 (list python-bson
3928 python-ecdsa
3929 python-feedparser
3930 python-pymongo
3931 python-pytest
3932 python-pytest-benchmark
3933 python-pytest-cov
3934 python-pytest-enabler
3935 python-setuptools
3936 python-setuptools-scm
3937 python-simplejson
3938 python-sqlalchemy
3939 python-ujson
3940 python-wheel
3941 tzdata-for-tests))
3942 (home-page "https://jsonpickle.github.io/")
3943 (synopsis "Serialize object graphs into JSON")
3944 (description
3945 "This package provides a Python library for serializing any arbitrary
3946object graph to and from JSON.")
3947 (license license:bsd-3)))
3948
3949(define-public python-mcp
3950 (package
3951 (name "python-mcp")
3952 (version "1.25.0")
3953 (source
3954 (origin
3955 (method url-fetch)
3956 (uri (pypi-uri "mcp" version))
3957 (sha256
3958 (base32 "00k87bl4jvnh7hrmicwb2m715fwccvvlanwf8cnlwdphxdhh6can"))))
3959 (build-system pyproject-build-system)
3960 (arguments
3961 (list
3962 ;; XXX: 186 failed, 648 passed, 94 skipped, 54 errors
3963 ;; A lot of tests fail for unclear reasons.
3964 #:tests? #f))
3965 (propagated-inputs (list python-httpx python-pydantic))
3966 (native-inputs
3967 (list python-hatchling
3968 python-httpx-sse
3969 python-jsonschema
3970 python-pydantic-settings
3971 python-pytest
3972 python-pytest-examples
3973 python-pytest-xdist
3974 python-sse-starlette
3975 python-starlette
3976 python-typer
3977 python-typing-inspection
3978 python-uvicorn))
3979 (home-page "https://modelcontextprotocol.io")
3980 (synopsis "Model Context Protocol SDK")
3981 (description
3982 "This package provides a Python Software Development Kit for the Model
3983Context Protocol (MCP).")
3984 (license license:expat)))
3985
3986(define-public python-mechanicalsoup
3987 (package
3988 (name "python-mechanicalsoup")
3989 (version "1.4.0")
3990 (source
3991 (origin
3992 (method url-fetch)
3993 (uri (pypi-uri "mechanicalsoup" version))
3994 (sha256
3995 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
3996 (build-system pyproject-build-system)
3997 (arguments
3998 (list
3999 #:test-flags
4000 ;; Unclear why test fails.
4001 #~(list "-k" "not test_select_form_associated_elements")
4002 ;; The following dependencies are not directly required, the developer
4003 ;; only pinned versions because of vulnerabilities. They also break
4004 ;; sanity-check because it checks for a python-certifi version which is
4005 ;; more recent than the one available in Guix.
4006 #:phases #~(modify-phases %standard-phases
4007 (add-after 'unpack 'relax-dependencies
4008 (lambda _
4009 (substitute* "requirements.txt"
4010 (("certifi.*") "")
4011 (("urllib3.*") "")))))))
4012 (propagated-inputs
4013 (list python-beautifulsoup4 python-lxml python-requests))
4014 (native-inputs
4015 (list python-pytest
4016 python-pytest-cov
4017 python-pytest-flake8
4018 python-pytest-httpbin
4019 python-pytest-mock
4020 python-requests-mock
4021 python-setuptools
4022 python-wheel))
4023 (home-page "https://mechanicalsoup.readthedocs.io/")
4024 (synopsis "Python library for automating website interaction")
4025 (description
4026 "MechanicalSoup is a Python library for automating interaction with
4027websites. It automatically stores and sends cookies, follows redirects, and can
4028follow links and submit forms. It doesn’t do JavaScript.")
4029 (license license:expat)))
4030
4031(define-public python-hyperframe
4032 (package
4033 (name "python-hyperframe")
4034 (version "6.1.0")
4035 (source
4036 (origin
4037 (method url-fetch)
4038 (uri (pypi-uri "hyperframe" version))
4039 (sha256
4040 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
4041 (build-system pyproject-build-system)
4042 (native-inputs
4043 (list python-pytest python-setuptools))
4044 (home-page "https://github.com/python-hyper/hyperframe")
4045 (synopsis "HTTP/2 framing layer for Python")
4046 (description
4047 "This library contains the HTTP/2 framing code used in the hyper project.
4048It provides a pure-Python codebase that is capable of decoding a binary stream
4049into HTTP/2 frames.")
4050 (license license:expat)))
4051
4052(define-public python-hpack
4053 (package
4054 (name "python-hpack")
4055 (version "4.1.0")
4056 (source
4057 (origin
4058 ;; PyPI tarball is missing some files necessary for the tests.
4059 (method git-fetch)
4060 (uri (git-reference
4061 (url "https://github.com/python-hyper/hpack")
4062 (commit (string-append "v" version))))
4063 (file-name (git-file-name name version))
4064 (sha256
4065 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
4066 (build-system pyproject-build-system)
4067 (native-inputs
4068 (list python-pytest python-setuptools))
4069 (home-page "https://hyper.rtfd.org")
4070 (synopsis "Pure-Python HPACK header compression")
4071 (description
4072 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
4073for use in Python programs that implement HTTP/2.")
4074 (license license:expat)))
4075
4076(define-public python-h11
4077 (package
4078 (name "python-h11")
4079 (version "0.16.0")
4080 (source
4081 (origin
4082 (method url-fetch)
4083 (uri (pypi-uri "h11" version))
4084 (sha256
4085 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
4086 (build-system pyproject-build-system)
4087 (native-inputs
4088 (list python-pytest python-setuptools))
4089 (home-page "https://github.com/python-hyper/h11")
4090 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
4091 (description
4092 "This is a little HTTP/1.1 library written from scratch in Python, heavily
4093inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
4094code whatsoever. This means you can hook h11 up to your favorite network API,
4095and that could be anything you want.")
4096 (license license:expat)))
4097
4098(define-public python-h2
4099 (package
4100 (name "python-h2")
4101 (version "4.1.0")
4102 (source
4103 (origin
4104 (method url-fetch)
4105 (uri (pypi-uri "h2" version))
4106 (sha256
4107 (base32 "1fraip114fm1ha5w37pdc0sk8dn9pb0ck267zrwwpap7zc4clfm8"))))
4108 (build-system pyproject-build-system)
4109 (arguments
4110 (list
4111 ;; AssertionError: assert '<RemoteSettingsChanged
4112 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
4113 ;; new_value=32768)}>' == '<RemoteSettingsChanged
4114 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
4115 ;; original_value=65536, new_value=32768)}>'
4116 #:test-flags
4117 #~(list "-k"
4118 (string-join
4119 (list "not test_remotesettingschanged_repr"
4120 ;; This test exceededs the Hypothesis deadline.
4121 #$@(if (target-riscv64?)
4122 #~("test_changing_max_frame_size")
4123 #~())
4124 "test_streamreset_repr"
4125 "test_settingsacknowledged_repr"
4126 "test_connectionterminated_repr[None-None]"
4127 "test_connectionterminated_repr[some"
4128 "test_remotesettingschanged_repr"
4129 "test_streamreset_repr"
4130 "test_settingsacknowledged_repr"
4131 "test_connectionterminated_repr[None-None]"
4132 "test_connectionterminated_repr[some")
4133 " and not "))))
4134 (native-inputs
4135 (list python-pytest
4136 python-setuptools
4137 python-wheel))
4138 (propagated-inputs
4139 (list python-hpack
4140 python-hyperframe))
4141 (home-page "https://github.com/python-hyper/h2")
4142 (synopsis "HTTP/2 State-Machine based protocol implementation")
4143 (description
4144 "This module contains a pure-Python implementation of a HTTP/2 protocol
4145stack. It does not provide a parsing layer, a network layer, or any rules
4146about concurrency. Instead, it's a purely in-memory solution, defined in
4147terms of data actions and HTTP/2 frames. This is one building block of a full
4148Python HTTP implementation.")
4149 (license license:expat)))
4150
4151(define-public python-slixmpp
4152 (package
4153 (name "python-slixmpp")
4154 (version "1.8.6") ; XXX: The latest version which does not requrie Rust
4155 (source
4156 (origin
4157 (method git-fetch)
4158 (uri (git-reference
4159 (url "https://codeberg.org/poezio/slixmpp")
4160 (commit (string-append "slix-" version))))
4161 (file-name (git-file-name name version))
4162 (sha256
4163 (base32 "0gpy6arwyk4lsx1hbcwbllxs6qbwn58adkp1rm1cfvfrjdv5kxx7"))))
4164 (build-system pyproject-build-system)
4165 (arguments
4166 (list
4167 #:phases
4168 #~(modify-phases %standard-phases
4169 (add-after 'unpack 'patch-setup.py
4170 (lambda _
4171 (substitute* "setup.py"
4172 (("'CC', 'cc'")
4173 "'CC', 'gcc'")))))))
4174 (native-inputs
4175 (list gnupg
4176 pkg-config
4177 python-cython
4178 python-setuptools
4179 python-wheel))
4180 (inputs
4181 (list libidn
4182 python)) ; We are building a Python extension.
4183 (propagated-inputs
4184 (list python-aiodns
4185 python-aiohttp
4186 python-cryptography
4187 python-defusedxml
4188 python-emoji
4189 python-pyasn1
4190 python-pyasn1-modules))
4191 (home-page "https://lab.louiz.org/poezio/slixmpp")
4192 (synopsis "XMPP library without threads")
4193 (description
4194 "Slixmpp is a XMPP library for Python 3.7+. It is a fork of SleekXMPP.
4195Its goal is to only rewrite the core of the library (the low level socket
4196handling, the timers, the events dispatching) in order to remove all
4197threads.")
4198 (license license:expat)))
4199
4200(define-public python-sockjs-tornado
4201 (package
4202 (name "python-sockjs-tornado")
4203 (version "1.0.6")
4204 (source
4205 (origin
4206 (method git-fetch)
4207 (uri (git-reference
4208 (url "https://github.com/mrjoes/sockjs-tornado/")
4209 (commit (string-append "v" version))))
4210 (file-name (git-file-name name version))
4211 (sha256
4212 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
4213 (build-system pyproject-build-system)
4214 (arguments
4215 (list
4216 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
4217 (native-inputs (list python-setuptools))
4218 (propagated-inputs (list python-tornado))
4219 (home-page "https://github.com/mrjoes/sockjs-tornado/")
4220 (synopsis
4221 "SockJS Python server implementation on top of the Tornado framework")
4222 (description
4223 "SockJS-tornado provides the server-side counterpart to a SockJS client
4224library, through the Tornado framework.
4225
4226SockJS provides a low-latency, full-duplex, cross-domain communication channel
4227between a web browser and web server.")
4228 (license license:expat)))
4229
4230(define-public python-flask-assets
4231 ;; The latest release still depends on the abandoned flask-script, whereas
4232 ;; at this later commit (already 2 years old at the time of this writing)
4233 ;; the dependency has been lifted.
4234 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
4235 (revision "1"))
4236 (package
4237 (name "python-flask-assets")
4238 (version (git-version "2.1.0" revision commit))
4239 (source
4240 (origin
4241 (method git-fetch)
4242 (uri (git-reference
4243 (url "https://github.com/miracle2k/flask-assets/")
4244 (commit commit)))
4245 (file-name (git-file-name name version))
4246 (sha256
4247 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
4248 (build-system pyproject-build-system)
4249 (propagated-inputs
4250 (list python-flask python-webassets))
4251 (native-inputs
4252 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
4253 (home-page "https://github.com/miracle2k/flask-assets")
4254 (synopsis "Asset management for Flask")
4255 (description "This package integrates @code{webassets} with Flask, adding
4256support for merging, minifying and compiling CSS and Javascript files.")
4257 (license license:bsd-2))))
4258
4259(define-public python-flask-babel
4260 (package
4261 (name "python-flask-babel")
4262 (version "4.0.0")
4263 (source
4264 (origin
4265 (method git-fetch) ;no tests in pypi release
4266 (uri (git-reference
4267 (url "https://github.com/python-babel/flask-babel")
4268 (commit (string-append "v" version))))
4269 (sha256
4270 (base32
4271 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
4272 (build-system pyproject-build-system)
4273 (native-inputs
4274 (list python-poetry-core
4275 python-pytest
4276 python-pytest-cov
4277 python-pytest-mock))
4278 (propagated-inputs
4279 (list python-babel
4280 python-flask
4281 python-jinja2
4282 python-pytz))
4283 (home-page "https://github.com/python-babel/flask-babel")
4284 (synopsis "Add i18n/l10n support to Flask applications")
4285 (description "This package implements internationalization and localization
4286support for Flask. This is based on the Python babel module as well as pytz -
4287both of which are installed automatically if you install this library.")
4288 (license license:bsd-3)))
4289
4290(define-public python-flask-cors
4291 (package
4292 (name "python-flask-cors")
4293 (version "6.0.2")
4294 (source
4295 (origin
4296 (method git-fetch) ;no tests in PyPI archive
4297 (uri (git-reference
4298 (url "https://github.com/CoryDolphin/flask-cors")
4299 (commit version)))
4300 (file-name (git-file-name name version))
4301 (sha256
4302 (base32 "02y740h951dscgkm7ghsss1bc0m8ymsfdpsimm1j0nkl0zjl6sgm"))))
4303 (build-system pyproject-build-system)
4304 (arguments
4305 (list
4306 #:phases
4307 #~(modify-phases %standard-phases
4308 (add-after 'unpack 'fix-version
4309 (lambda _
4310 ;; Otherwise sanity-check of dependents will fail.
4311 (substitute* "pyproject.toml"
4312 (("version = \"0\\.0\\.1\"" all)
4313 (string-append "version = \"" #$version "\""))))))))
4314 (native-inputs
4315 (list python-pytest
4316 python-setuptools))
4317 (propagated-inputs
4318 (list python-flask
4319 python-werkzeug))
4320 (home-page "https://flask-cors.readthedocs.io/en/latest/")
4321 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
4322 (description
4323 "This package provides a Flask extension for handling @acronym{CORS,Cross
4324Origin Resource Sharing}, making cross-origin AJAX possible.")
4325 (license license:expat)))
4326
4327(define-public python-flask-markdown
4328 (package
4329 (name "python-flask-markdown")
4330 (version "0.3")
4331 (source
4332 (origin
4333 (method git-fetch)
4334 (uri (git-reference
4335 (url "https://github.com/dcolish/flask-markdown")
4336 (commit version)))
4337 (file-name (git-file-name name version))
4338 (sha256
4339 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
4340 (build-system pyproject-build-system)
4341 (arguments
4342 (list
4343 #:tests? #f ;Tests seem to be incompatible with latest python
4344 #:phases
4345 #~(modify-phases %standard-phases
4346 (add-after 'unpack 'set-version
4347 (lambda _
4348 (substitute* "setup.py"
4349 (("dev")
4350 #$version)))))))
4351 (propagated-inputs (list python-markdown python-flask))
4352 (native-inputs (list python-pynose python-setuptools))
4353 (home-page "https://github.com/dcolish/flask-markdown")
4354 (synopsis "Small extension to help with using Markdown in Flask")
4355 (description
4356 "Flask-Markdown supports several extensions for Markdown and integrates
4357into Jinja2 by default.")
4358 (license license:bsd-3)))
4359
4360(define-public python-flask-session
4361 (package
4362 (name "python-flask-session")
4363 (version "0.8.0")
4364 (source
4365 (origin
4366 (method url-fetch)
4367 (uri (pypi-uri "flask_session" version))
4368 (sha256
4369 (base32
4370 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
4371 (build-system pyproject-build-system)
4372 (arguments
4373 '(#:tests? #f)) ; Tests require the various storage backends to be present
4374 (native-inputs (list python-flit-core))
4375 (propagated-inputs
4376 (list python-cachelib python-flask python-msgspec))
4377 (home-page "https://github.com/pallets-eco/flask-session")
4378 (synopsis "Adds server-side session support to your Flask application")
4379 (description
4380 "Flask-Session is an extension for Flask that adds support for
4381Server-side sessions, with a variety of different backends for session
4382storage.")
4383 (license license:bsd-3)))
4384
4385(define-public python-html5lib
4386 (package
4387 (name "python-html5lib")
4388 (version "1.1")
4389 (source
4390 (origin
4391 (method url-fetch)
4392 (uri (pypi-uri "html5lib" version))
4393 (sha256
4394 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
4395 (build-system pyproject-build-system)
4396 (arguments
4397 '(#:tests? #f)) ;tests depent on dated pytest-expect
4398 (native-inputs
4399 (list python-setuptools))
4400 (propagated-inputs
4401 (list python-six
4402 python-webencodings
4403 ;; Required by Calibre 5.
4404 python-chardet))
4405 (home-page "https://github.com/html5lib/html5lib-python")
4406 (synopsis "Python HTML parser based on the WHATWG HTML specification")
4407 (description
4408 "Html5lib is an HTML parser based on the WHATWG HTML specification
4409and written in Python.")
4410 (license license:expat)))
4411
4412(define-public python-html5-parser
4413 (package
4414 (name "python-html5-parser")
4415 (version "0.4.12")
4416 (source
4417 (origin
4418 (method git-fetch)
4419 (uri (git-reference
4420 (url "https://github.com/kovidgoyal/html5-parser")
4421 (commit (string-append "v" version))))
4422 (file-name (git-file-name name version))
4423 (sha256
4424 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
4425 (build-system pyproject-build-system)
4426 (arguments
4427 (list
4428 #:phases
4429 #~(modify-phases %standard-phases
4430 (add-before 'build 'set-configure-flags
4431 (lambda _
4432 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
4433 (native-inputs (list pkg-config python-setuptools))
4434 (inputs (list libxml2))
4435 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
4436 (home-page "https://html5-parser.readthedocs.io")
4437 (synopsis "Fast C-based HTML5 parsing for Python")
4438 (description
4439 "This package provides a fast implementation of the HTML5 parsing spec
4440for Python. Parsing is done in C using a variant of the gumbo parser. The
4441gumbo parse tree is then transformed into an lxml tree, also in C, yielding
4442parse times that can be a thirtieth of the html5lib parse times.")
4443 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
4444 ;; indicate ASL2.0, including the LICENSE file for the whole project.
4445 (license (list license:asl2.0 license:gpl3))))
4446
4447(define-public python-html5tagger
4448 (package
4449 (name "python-html5tagger")
4450 (version "1.3.0")
4451 (source (origin
4452 (method url-fetch)
4453 (uri (pypi-uri "html5tagger" version))
4454 (sha256
4455 (base32
4456 "1acd1a4f66gi4plqnsml7cf33qp83mxsnmnqpdwkpj7597xkvyl4"))))
4457 (build-system pyproject-build-system)
4458 (arguments
4459 (list #:tests? #f)) ;no tests in PyPI or Git
4460 (native-inputs
4461 (list python-setuptools python-setuptools-scm python-wheel))
4462 (home-page "https://github.com/sanic-org/html5tagger")
4463 (synopsis "Create HTML documents from Python")
4464 (description
4465 "@code{html5tagger} provides a simplified HTML5 syntax that can
4466be written directly in Python without templates.")
4467 (license license:unlicense)))
4468
4469(define-public python-minio
4470 (package
4471 (name "python-minio")
4472 (version "7.1.9")
4473 (source
4474 (origin
4475 (method git-fetch)
4476 (uri (git-reference
4477 (url "https://github.com/minio/minio-py")
4478 (commit version)))
4479 (file-name (git-file-name name version))
4480 (sha256
4481 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
4482 (build-system pyproject-build-system)
4483 (arguments
4484 (list
4485 #:test-flags
4486 ;; XXX: requires network access.
4487 #~(list "--ignore=tests/unit/credentials_test.py")))
4488 (native-inputs (list python-pytest python-setuptools))
4489 (propagated-inputs
4490 (list python-certifi python-dateutil python-pytz python-urllib3))
4491 (home-page "https://github.com/minio/minio-py")
4492 (synopsis "Programmatically access Amazon S3 from Python")
4493 (description
4494 "This package provides a Python library for interacting with any
4495Amazon S3 compatible object storage server.")
4496 (license license:asl2.0)))
4497
4498(define-public python-pycurl
4499 (package
4500 (name "python-pycurl")
4501 (version "7.45.4")
4502 (source
4503 (origin
4504 (method git-fetch)
4505 (uri (git-reference
4506 (url "https://github.com/pycurl/pycurl")
4507 (commit (string-append
4508 "REL_" (string-replace-substring version "." "_")))))
4509 (file-name (git-file-name name version))
4510 (sha256
4511 (base32 "00cd1l0lsml0708hpv5k4qyhqfv0qphb0p317j9aci2wdspn1mpl"))))
4512 (build-system pyproject-build-system)
4513 (arguments
4514 '(#:test-flags
4515 ;; The test suite is not thread safe:
4516 ;; - some tests want to use the same port: address already in use
4517 ;; - some tests use signal.Signal, i.e. main-thread only
4518 (list "-k" (string-append
4519 ;; Disable hanginging tests
4520 "not test_multi_socket_select"
4521 ;; E assert None is not None
4522 ;; E+ where None =
4523 ;; <tests.multi_callback_test.MultiCallbackTest
4524 ;; testMethod=test_multi_socket_action>.timer_result
4525 " and not test_multi_socket_action"
4526 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
4527 ;; open shared object file: No such file or directory
4528 " and not test_libcurl_ssl_gnutls"
4529 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
4530 ;; open shared object file: No such file or directory
4531 " and not test_libcurl_ssl_nss"
4532 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
4533 ;; open shared object file: No such file or directory
4534 " and not test_libcurl_ssl_openssl"
4535 ;; Probably due to an expired CA
4536 " and not test_request_without_certinfo"
4537 ;; "A libcurl function was given a bad argument"
4538 " and not test_proxy_tlsauth"))
4539 #:phases (modify-phases %standard-phases
4540 (add-before 'build 'configure-tls-backend
4541 (lambda _
4542 ;; XXX: PycURL fails to automatically determine which
4543 ;; TLS backend to use when cURL is built with
4544 ;; --disable-static. See setup.py and
4545 ;; <https://github.com/pycurl/pycurl/pull/147>.
4546 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
4547 (native-inputs
4548 (list python-bottle
4549 python-flaky
4550 python-flask
4551 python-pytest
4552 python-setuptools
4553 python-wheel))
4554 (inputs
4555 (list curl gnutls))
4556 (home-page "http://pycurl.io/")
4557 (synopsis "Lightweight Python wrapper around libcurl")
4558 (description "Pycurl is a lightweight wrapper around libcurl. It provides
4559high-speed transfers via libcurl and frequently outperforms alternatives.")
4560
4561 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
4562 ;; under the terms of LGPLv2.1+ or Expat.
4563 (license (list license:lgpl2.1+ license:expat))))
4564
4565(define-public python-stamina
4566 (package
4567 (name "python-stamina")
4568 (version "25.2.0")
4569 (source
4570 (origin
4571 (method git-fetch)
4572 (uri (git-reference
4573 (url "https://github.com/hynek/stamina")
4574 (commit version)))
4575 (file-name (git-file-name name version))
4576 (sha256
4577 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
4578 (build-system pyproject-build-system)
4579 (native-inputs
4580 (list python-pytest
4581 python-anyio
4582 python-dirty-equals
4583 python-hatch-fancy-pypi-readme
4584 python-hatch-vcs
4585 python-hatchling
4586 python-structlog))
4587 (propagated-inputs
4588 (list python-tenacity
4589 python-typing-extensions))
4590 (home-page "https://github.com/hynek/stamina")
4591 (synopsis "Retries library for Python")
4592 (description
4593 "@code{stamina} is an opinionated wrapper around the
4594@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
4595 (license license:expat)))
4596
4597(define-public python-stripe
4598 (package
4599 (name "python-stripe")
4600 (version "13.2.0")
4601 (source
4602 (origin
4603 (method git-fetch)
4604 (uri (git-reference
4605 (url "https://github.com/stripe/stripe-python")
4606 (commit (string-append "v" version))))
4607 (file-name (git-file-name name version))
4608 (sha256
4609 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
4610 (build-system pyproject-build-system)
4611 (arguments
4612 '(#:tests? #f)) ;; tests require network
4613 (native-inputs
4614 (list python-flit-core))
4615 (propagated-inputs
4616 (list python-httpx
4617 python-requests))
4618 (home-page "https://github.com/stripe/stripe-python")
4619 (synopsis "Python bindings for the Stripe financial services' API")
4620 (description "This package provides access to the Stripe financial
4621services' API. It includes a pre-defined set of classes for API resources
4622that initialize themselves dynamically from API responses which makes it
4623compatible with a wide range of versions of the Stripe API.")
4624 (license license:expat)))
4625
4626(define-public python-stripe-12
4627 (hidden-package
4628 (package/inherit python-stripe
4629 (name "python-stripe")
4630 (version "12.5.1")
4631 (source
4632 (origin
4633 (inherit (package-source python-stripe))
4634 (uri (git-reference
4635 (url "https://github.com/stripe/stripe-python")
4636 (commit (string-append "v" version))))
4637 (file-name (git-file-name name version))
4638 (sha256 (base32
4639 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
4640 (native-inputs
4641 (list python-setuptools)))))
4642
4643(define-public python-tldextract
4644 (package
4645 (name "python-tldextract")
4646 (version "5.3.0")
4647 (source
4648 (origin
4649 (method url-fetch)
4650 (uri (pypi-uri "tldextract" version))
4651 (sha256
4652 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
4653 (build-system pyproject-build-system)
4654 (arguments
4655 (list
4656 #:phases
4657 #~(modify-phases %standard-phases
4658 (add-after 'unpack 'relax-requirements
4659 (lambda _
4660 (substitute* "pyproject.toml"
4661 (("\"requests-file.*\",")
4662 "\"requests-file\",")))))))
4663 (native-inputs
4664 (list nss-certs-for-test
4665 python-pytest
4666 python-pytest-mock
4667 python-responses
4668 python-setuptools
4669 python-setuptools-scm
4670 python-syrupy))
4671 (propagated-inputs
4672 (list python-filelock
4673 python-idna
4674 python-requests
4675 python-requests-file))
4676 (home-page "https://github.com/john-kurkowski/tldextract")
4677 (synopsis
4678 "Separate the TLD from the registered domain and subdomains of a URL")
4679 (description
4680 "TLDExtract accurately separates the TLD from the registered domain and
4681subdomains of a URL, using the Public Suffix List. By default, this includes
4682the public ICANN TLDs and their exceptions. It can optionally support the
4683Public Suffix List's private domains as well.")
4684 (license license:bsd-3)))
4685
4686(define-public python-tracerite
4687 (package
4688 (name "python-tracerite")
4689 (version "1.1.3")
4690 (source
4691 (origin
4692 (method url-fetch)
4693 (uri (pypi-uri "tracerite" version))
4694 (sha256
4695 (base32 "07mkg0sl0h335kj6yjvxki2c19gxhb7rkks1zgzh7aj0y83c17qi"))))
4696 (build-system pyproject-build-system)
4697 (arguments
4698 (list #:tests? #f)) ;no tests in PyPI or Git
4699 (native-inputs
4700 (list python-setuptools
4701 python-setuptools-scm))
4702 (propagated-inputs
4703 (list python-html5tagger))
4704 (home-page "https://github.com/sanic-org/tracerite")
4705 (synopsis "Human-readable HTML tracebacks")
4706 (description
4707 "@code{tracerite} converts Python tracebacks into useful error messages
4708in human-readable HTML format.")
4709 (license license:unlicense)))
4710
4711(define-public python-trio-websocket
4712 (package
4713 (name "python-trio-websocket")
4714 (version "0.12.2")
4715 (source
4716 (origin
4717 (method git-fetch)
4718 (uri (git-reference
4719 (url "https://github.com/HyperionGray/trio-websocket")
4720 (commit version)))
4721 (file-name (git-file-name name version))
4722 (sha256
4723 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
4724 (build-system pyproject-build-system)
4725 (native-inputs
4726 (list python-pytest
4727 python-pytest-trio
4728 python-setuptools
4729 python-trustme))
4730 (propagated-inputs
4731 (list python-outcome
4732 python-trio
4733 python-wsproto))
4734 (home-page "https://github.com/HyperionGray/trio-websocket")
4735 (synopsis "WebSocket library for Trio")
4736 (description "This library implements both server and client aspects of
4737the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
4738striving for safety, correctness, and ergonomics. It is based on the
4739@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
4740@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
4741the majority of the WebSocket protocol, including framing, codecs, and events.
4742This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
4743the Trio framework}.")
4744 (license license:expat)))
4745
4746(define-public python-txacme
4747 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
4748 ;; compatibility wit twisted, use the latest commit from trunk branch.
4749 ;;
4750 ;;See: <https://github.com/twisted/txacme/issues/165>.
4751 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
4752 (revision "0"))
4753 (package
4754 (name "python-txacme")
4755 (version (git-version "0.9.3" revision commit))
4756 (source
4757 (origin
4758 (method git-fetch) ;no fresh release in PyPI
4759 (uri (git-reference
4760 (url "https://github.com/twisted/txacme")
4761 (commit commit)))
4762 (file-name (git-file-name name version))
4763 (sha256
4764 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
4765 (build-system pyproject-build-system)
4766 (arguments
4767 (list #:test-backend #~'custom
4768 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
4769 (native-inputs
4770 (list python-setuptools))
4771 (propagated-inputs
4772 (list python-acme
4773 python-attrs
4774 python-eliot
4775 python-josepy
4776 python-pem
4777 python-treq
4778 python-twisted
4779 python-txsni))
4780 (home-page "https://github.com/twisted/txacme")
4781 (synopsis "Twisted implexmentation of the ACME protocol")
4782 (description
4783 "ACME is Automatic Certificate Management Environment, a protocol that
4784allows clients and certificate authorities to automate verification and
4785certificate issuance. The ACME protocol is used by the free Let's Encrypt
4786Certificate Authority.
4787
4788txacme is an implementation of the protocol for Twisted, the event-driven
4789networking engine for Python.")
4790 (license license:expat))))
4791
4792(define-public python-txaio
4793 (package
4794 (name "python-txaio")
4795 (version "25.9.2")
4796 (source
4797 (origin
4798 (method url-fetch)
4799 (uri (pypi-uri "txaio" version))
4800 (sha256
4801 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
4802 (build-system pyproject-build-system)
4803 (native-inputs
4804 (list python-pytest
4805 python-setuptools))
4806 (home-page "https://github.com/crossbario/txaio")
4807 (synopsis "Compatibility layer between Python asyncio and Twisted")
4808 (description
4809 "Txaio provides a compatibility layer between the Python @code{asyncio}
4810 bsmodule and @code{Twisted}.")
4811 (license license:expat)))
4812
4813;; XXX: Potentially abandonware since 2017, consider to remove when nothing
4814;; depends on it or fails to build.
4815(define-public python-txamqp
4816 (package
4817 (name "python-txamqp")
4818 (version "0.8.2")
4819 (source
4820 (origin
4821 (method url-fetch)
4822 (uri (pypi-uri "txAMQP" version))
4823 (sha256
4824 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
4825 (build-system pyproject-build-system)
4826 (arguments
4827 (list #:tests? #f)) ;all tests failed
4828 (native-inputs
4829 (list python-setuptools))
4830 (propagated-inputs
4831 (list python-six python-twisted))
4832 (home-page "https://github.com/txamqp/txamqp")
4833 (synopsis "Communicate with AMQP peers and brokers using Twisted")
4834 (description
4835 "This package provides a Python library for communicating with AMQP peers
4836and brokers using the asynchronous networking framework Twisted. It contains
4837all the necessary code to connect, send and receive messages to/from an
4838AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
4839also includes support for using Thrift RPC over AMQP in Twisted
4840applications.")
4841 (license license:asl2.0)))
4842
4843(define-public python-txsni
4844 (package
4845 (name "python-txsni")
4846 (version "0.2.0")
4847 (source
4848 (origin
4849 (method git-fetch)
4850 (uri (git-reference
4851 (url "https://github.com/glyph/txsni")
4852 (commit (string-append "v" version))))
4853 (file-name (git-file-name name version))
4854 (sha256
4855 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
4856 (build-system pyproject-build-system)
4857 (arguments
4858 (list #:test-backend #~'custom
4859 #:test-flags #~(list "-m" "twisted.trial"
4860 "--temp-directory=/tmp/_trial_temp"
4861 "txsni")))
4862 (native-inputs
4863 (list python-setuptools))
4864 (propagated-inputs
4865 (list python-pyopenssl
4866 python-service-identity
4867 python-twisted))
4868 (home-page "https://github.com/glyph/txsni")
4869 (synopsis "Run TLS servers with Twisted")
4870 (description
4871 "This package provides an easy-to-use SNI endpoint for use with the
4872Twisted web framework.")
4873 (license license:expat)))
4874
4875(define-public python-txtorcon
4876 (package
4877 (name "python-txtorcon")
4878 (version "24.8.0")
4879 (source
4880 (origin
4881 (method url-fetch)
4882 (uri (pypi-uri "txtorcon" version))
4883 (sha256
4884 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
4885 (build-system pyproject-build-system)
4886 (native-inputs
4887 (list python-pytest
4888 python-setuptools
4889 python-wheel))
4890 (inputs
4891 (list lsof))
4892 (propagated-inputs
4893 (list python-automat
4894 python-idna
4895 python-incremental
4896 python-pyopenssl
4897 python-service-identity
4898 python-twisted
4899 python-zope-interface))
4900 (home-page "https://github.com/meejah/txtorcon")
4901 (synopsis "Twisted-based Tor controller client")
4902 (description
4903 "This package provides a Twisted-based Tor controller client,with
4904state-tracking and configuration abstractions.")
4905 (license license:expat)))
4906
4907(define-public python-url-normalize
4908 (package
4909 (name "python-url-normalize")
4910 (version "2.2.1")
4911 (source
4912 (origin
4913 (method git-fetch) ; no tests in PyPI release
4914 (uri (git-reference
4915 (url "https://github.com/niksite/url-normalize")
4916 (commit (string-append "v" version))))
4917 (file-name (git-file-name name version))
4918 (sha256
4919 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
4920 (build-system pyproject-build-system)
4921 (arguments
4922 (list
4923 #:test-flags #~(list "--ignore=tests/test_cli.py")))
4924 (native-inputs
4925 (list python-pytest
4926 python-pytest-cov
4927 python-pytest-socket
4928 python-setuptools))
4929 (propagated-inputs
4930 (list python-idna))
4931 (home-page "https://github.com/niksite/url-normalize")
4932 (synopsis "URL normalization for Python")
4933 (description
4934 "This package provides a URI Normalization function with following
4935features:
4936@itemize
4937@item take care of IDN domains
4938@item always provide the URI scheme in lowercase characters
4939@item always provide the host, if any, in lowercase characters
4940@item only perform percent-encoding where it is essential
4941@item always use uppercase A-through-F characters when percent-encoding
4942@item prevent dot-segments appearing in non-relative URI paths
4943@item for schemes that define a default authority, use an empty authority if
4944the default is desired
4945@item for schemes that define an empty path to be equivalent to a path of
4946@code{/}, use @code{/}
4947@item for schemes that define a port, use an empty port if the default is
4948desired
4949@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
4950@end itemize")
4951 (license license:expat)))
4952
4953(define-public python-waitress
4954 (package
4955 (name "python-waitress")
4956 (version "3.0.2")
4957 (source
4958 (origin
4959 (method url-fetch)
4960 (uri (pypi-uri "waitress" version))
4961 (sha256
4962 (base32
4963 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
4964 (build-system pyproject-build-system)
4965 (arguments
4966 ;; https://github.com/Pylons/waitress/issues/443
4967 (list #:test-flags #~(list "-k" "not test_service_port")))
4968 (native-inputs
4969 (list python-pytest
4970 python-pytest-cov
4971 python-setuptools))
4972 (home-page "https://github.com/Pylons/waitress")
4973 (synopsis "Waitress WSGI server")
4974 (description
4975 "Waitress is meant to be a production-quality pure-Python WSGI server
4976with very acceptable performance.")
4977 (license license:zpl2.1)))
4978
4979(define-public python-weasel
4980 (package
4981 (name "python-weasel")
4982 (version "0.4.1")
4983 (source
4984 (origin
4985 (method url-fetch)
4986 (uri (pypi-uri "weasel" version))
4987 (sha256
4988 (base32 "1aas113r29y6yxrmdlsw80rj8w4kgw1jhfjw9rsgc4rf0w7j3g5a"))))
4989 (build-system pyproject-build-system)
4990 (arguments
4991 (list
4992 #:test-flags
4993 ;; Network access is required.
4994 #~(list #$@(map (lambda (test) (string-append "--deselect="
4995 "weasel/tests/cli/"
4996 test))
4997 (list "test_cli.py::test_project_git_dir_asset"
4998 "test_cli.py::test_project_git_file_asset"
4999 "test_cli_app.py::test_project_assets")))))
5000 (native-inputs
5001 (list python-pytest
5002 python-setuptools))
5003 (propagated-inputs
5004 (list python-cloudpathlib
5005 python-confection
5006 python-packaging
5007 python-pydantic
5008 python-requests
5009 python-smart-open
5010 python-srsly
5011 python-typer
5012 python-wasabi))
5013 (home-page "https://github.com/explosion/weasel/")
5014 (synopsis "Small and easy workflow system")
5015 (description
5016 "This package provides a minimalistic workflow system to manage and
5017share end-to-end workflows for different use cases and domains.")
5018 (license license:expat)))
5019
5020(define-public python-webencodings
5021 (package
5022 (name "python-webencodings")
5023 (version "0.5.1")
5024 (source
5025 (origin
5026 (method url-fetch)
5027 (uri (pypi-uri "webencodings" version))
5028 (sha256
5029 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
5030 (build-system pyproject-build-system)
5031 (arguments
5032 (list #:test-flags #~(list "webencodings/tests.py")))
5033 (native-inputs
5034 (list python-pytest python-setuptools))
5035 (home-page "https://github.com/SimonSapin/python-webencodings")
5036 (synopsis "Character encoding aliases for legacy web content")
5037 (description
5038 "In order to be compatible with legacy web content when interpreting
5039something like @code{Content-Type: text/html; charset=latin1}, tools need to
5040use a particular set of aliases for encoding labels as well as some overriding
5041rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
5042actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
5043BOM takes precedence over any other encoding declaration. The WHATWG
5044@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
5045details so that implementations do not have to reverse-engineer each other.
5046
5047This module implements the Encoding standard and has encoding labels and BOM
5048detection, but the actual implementation for encoders and decoders is
5049Python’s.")
5050 (license license:bsd-3)))
5051
5052(define-public python-omnipath
5053 (package
5054 (name "python-omnipath")
5055 (version "1.0.10")
5056 (source
5057 (origin
5058 (method git-fetch)
5059 (uri (git-reference
5060 (url "https://github.com/saezlab/omnipath/")
5061 (commit (string-append "v" version))))
5062 (file-name (git-file-name name version))
5063 (sha256
5064 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
5065 (build-system pyproject-build-system)
5066 (arguments
5067 (list
5068 #:test-flags '(list "-k"
5069 (string-append
5070 ;; These require internet access
5071 "not test_download_homologene"
5072 " and not test_complex_genes"))
5073 #:phases
5074 #~(modify-phases %standard-phases
5075 (add-after 'unpack 'set-home
5076 (lambda _
5077 (setenv "HOME" "/tmp"))))))
5078 (propagated-inputs (list python-attrs
5079 python-docrep
5080 python-inflect
5081 python-networkx
5082 python-packaging
5083 python-pandas
5084 python-requests
5085 python-tqdm
5086 python-typing-extensions
5087 python-urllib3
5088 python-wrapt))
5089 (native-inputs (list nss-certs-for-test
5090 python-bump2version
5091 python-hatchling
5092 python-pytest
5093 python-pytest-mock
5094 python-pytest-socket
5095 python-requests-mock))
5096 (home-page "https://omnipathdb.org/")
5097 (synopsis "Python client for the OmniPath web service")
5098 (description "This package provides a Python client for the OmniPath web
5099service.")
5100 (license license:expat)))
5101
5102(define-public python-openai
5103 (package
5104 (name "python-openai")
5105 (version "1.3.5")
5106 (source (origin
5107 (method git-fetch)
5108 (uri (git-reference
5109 (url "https://github.com/openai/openai-python")
5110 (commit (string-append "v" version))))
5111 (file-name (git-file-name name version))
5112 (sha256
5113 (base32
5114 "0k1rwhj7v22x5bnv9xbk9nj9grxqmmclh9538qqjadgqxfn5x74q"))))
5115 (build-system pyproject-build-system)
5116 (arguments
5117 (list
5118 #:test-flags
5119 ;; These require internet access and an openai API key.
5120 '(list "--ignore=openai/tests/asyncio/test_endpoints.py"
5121 "--ignore=openai/tests/test_endpoints.py"
5122 "--ignore-glob=tests/api_resources/*"
5123 ;; Needs respx
5124 "--ignore=tests/api_resources/audio/test_speech.py"
5125 "--ignore=tests/api_resources/test_files.py"
5126 "--ignore=tests/test_client.py"
5127 "-k" "not test_requestor_cycle_sessions\
5128 and not test_requestor_sets_request_id\
5129 and not test_file_cli\
5130 and not test_basic_async\
5131 and not test_async\
5132 and not test_datetime_with_alias\
5133 and not test_pydantic")
5134 #:phases
5135 '(modify-phases %standard-phases
5136 (add-after 'unpack 'relax-requirements
5137 (lambda _
5138 (substitute* "pyproject.toml"
5139 (("distro>=1.7.0") "distro>=1.6.0")
5140 (("anyio>=3.5.0, <4") "anyio"))))
5141 (add-after 'unpack 'httpx-compatibility
5142 (lambda _
5143 (substitute* "src/openai/_base_client.py"
5144 (("proxies=proxies,") "")
5145 (("self._proxies = proxies") "")
5146 (("proxies: ProxiesTypes . None,") "")))))))
5147 (propagated-inputs
5148 (list python-aiohttp
5149 python-distro
5150 python-httpx
5151 python-pydantic
5152 python-requests
5153 python-tqdm
5154 python-typing-extensions))
5155 (native-inputs (list nss-certs-for-test
5156 python-dirty-equals
5157 python-hatchling
5158 python-pytest python-pytest-asyncio
5159 python-pytest-mock python-setuptools python-wheel))
5160 (home-page "https://github.com/openai/openai-python")
5161 (synopsis "Python client library for the OpenAI API")
5162 (description "This package provides a Python client library for the
5163OpenAI API.")
5164 (license license:expat)))
5165
5166(define-public python-openapi-schema-validator
5167 (package
5168 (name "python-openapi-schema-validator")
5169 (version "0.6.2")
5170 (source
5171 (origin
5172 (method git-fetch) ;no tests in pypi release
5173 (uri (git-reference
5174 (url "https://github.com/p1c2u/openapi-schema-validator")
5175 (commit version)))
5176 (file-name (git-file-name name version))
5177 (sha256
5178 (base32
5179 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
5180 (build-system pyproject-build-system)
5181 (arguments
5182 (list
5183 #:test-flags
5184 ;; This one returns 5 instead of 4 elements
5185 '(list "-k" "not test_array_prefixitems_invalid")
5186 #:phases
5187 #~(modify-phases %standard-phases
5188 (add-after 'unpack 'remove-coverage-pytest-options
5189 (lambda _
5190 (substitute* "pyproject.toml"
5191 (("^--cov.*") ""))))
5192 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
5193 (add-after 'unpack 'relax-requirements
5194 (lambda _
5195 (substitute* "pyproject.toml"
5196 (("jsonschema-specifications.*")
5197 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
5198 (native-inputs (list python-poetry-core python-pytest))
5199 (propagated-inputs
5200 (list python-isodate
5201 python-jsonschema
5202 python-rfc3339-validator
5203 python-strict-rfc3339))
5204 (home-page "https://github.com/p1c2u/openapi-schema-validator")
5205 (synopsis "OpenAPI schema validation library for Python")
5206 (description "Openapi-schema-validator is a Python library that validates
5207a schema against:
5208@itemize
5209@item OpenAPI Schema Specification v3.0 which is an extended subset of the
5210JSON Schema Specification Wright Draft 00.
5211@item OpenAPI Schema Specification v3.1 which is an extended superset of the
5212JSON Schema Specification Draft 2020-12.
5213@end itemize")
5214 (license license:bsd-3)))
5215
5216(define-public python-openapi-spec-validator
5217 (package
5218 (name "python-openapi-spec-validator")
5219 (version "0.7.1")
5220 (source
5221 (origin
5222 (method git-fetch) ;no tests in pypi release
5223 (uri (git-reference
5224 (url "https://github.com/p1c2u/openapi-spec-validator")
5225 (commit version)))
5226 (file-name (git-file-name name version))
5227 (sha256
5228 (base32
5229 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
5230 (build-system pyproject-build-system)
5231 (arguments
5232 (list
5233 ;; These tests attempt to fetch resources from the Internet
5234 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
5235 "-k" "not example")
5236 #:phases
5237 #~(modify-phases %standard-phases
5238 (add-after 'unpack 'remove-coverage-pytest-options
5239 (lambda _
5240 (substitute* "pyproject.toml"
5241 (("^--cov.*") "")))))))
5242 (native-inputs
5243 (list python-poetry-core
5244 python-pytest))
5245 (propagated-inputs
5246 (list python-jsonschema
5247 python-jsonschema-path
5248 python-lazy-object-proxy
5249 python-openapi-schema-validator
5250 python-pyyaml
5251 python-requests
5252 python-setuptools))
5253 (home-page "https://github.com/p1c2u/openapi-spec-validator")
5254 (synopsis "OpenAPI spec validator")
5255 (description "OpenAPI Spec Validator is a Python library that validates an
5256OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
52573.0 and OpenAPI 3.1 specifications. The validator aims to check for full
5258compliance with the specification.")
5259 (license license:asl2.0)))
5260
5261(define-public python-openapi-core
5262 (package
5263 (name "python-openapi-core")
5264 (version "0.19.4")
5265 (source
5266 (origin
5267 (method git-fetch)
5268 (uri (git-reference
5269 (url "https://github.com/p1c2u/openapi-core")
5270 (commit version)))
5271 (file-name (git-file-name name version))
5272 (sha256
5273 (base32
5274 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
5275 (build-system pyproject-build-system)
5276 (arguments
5277 (list
5278 #:test-flags
5279 '(list "tests/unit"
5280 ;; Ignore Pytest configuration in setup.cfg that adds
5281 ;; unwanted flake8 and coverage options.
5282 "-c" "/dev/null"
5283 "-k" "not test_chars_valid")))
5284 (native-inputs (list python-django
5285 python-falcon
5286 python-flask
5287 python-mock
5288 python-poetry-core
5289 python-pytest
5290 python-responses))
5291 (propagated-inputs
5292 (list python-attrs
5293 python-aiohttp
5294 python-isodate
5295 python-jsonschema
5296 python-lazy-object-proxy
5297 python-more-itertools
5298 python-openapi-schema-validator
5299 python-openapi-spec-validator
5300 python-parse
5301 python-six
5302 python-werkzeug))
5303 (home-page "https://github.com/p1c2u/openapi-core")
5304 (synopsis "OpenAPI core library")
5305 (description "Openapi-core is a Python library that adds client-side and
5306server-side support for the OpenAPI Specification v3. It has features such
5307as:
5308@itemize
5309@item Validation of requests and responses
5310@item Schema casting and unmarshalling
5311@item Media type and parameters deserialization
5312@item Security providers (API keys, Cookie, Basic and Bearer HTTP
5313authentications)
5314@item Custom deserializers and formats
5315@item Integration with libraries and frameworks.
5316@end itemize")
5317 (license license:bsd-3)))
5318
5319(define-public python-openid
5320 (package
5321 (name "python-openid")
5322 (version "3.2.0")
5323 (source
5324 (origin
5325 (method url-fetch)
5326 (uri (pypi-uri "python3-openid" version))
5327 (sha256
5328 (base32
5329 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
5330 (build-system pyproject-build-system)
5331 (arguments
5332 `(#:phases
5333 (modify-phases %standard-phases
5334 (replace 'check
5335 (lambda* (#:key tests? #:allow-other-keys)
5336 (when tests?
5337 (invoke "python" "-m" "unittest" "openid.test.test_suite")))))))
5338 (propagated-inputs
5339 (list python-defusedxml))
5340 (native-inputs
5341 (list python-psycopg2 python-django python-setuptools python-wheel))
5342 (home-page "https://github.com/necaris/python3-openid")
5343 (synopsis "OpenID support for servers and consumers")
5344 (description "This library provides OpenID authentication for Python, both
5345for clients and servers.")
5346 (license license:asl2.0)))
5347
5348(define-public python-cssutils
5349 (package
5350 (name "python-cssutils")
5351 (version "2.11.1")
5352 (source
5353 (origin
5354 (method url-fetch)
5355 (uri (pypi-uri "cssutils" version))
5356 (sha256
5357 (base32
5358 "1qpq7xvzqp4cfcb8837rnd30x4hws3rkp33qpvmnxbxn2djsfqq5"))))
5359 (build-system pyproject-build-system)
5360 (arguments
5361 (list
5362 #:phases
5363 #~(modify-phases %standard-phases
5364 (replace 'check
5365 (lambda _
5366 (invoke "pytest" "-vv" "-k"
5367 (string-append "not encutils "
5368 "and not website.logging")))))))
5369 (native-inputs
5370 (list python-cssselect
5371 python-jaraco-test
5372 python-lxml
5373 python-pytest
5374 python-setuptools
5375 python-wheel))
5376 (propagated-inputs
5377 (list python-more-itertools))
5378 (home-page "https://github.com/jaraco/cssutils")
5379 (synopsis
5380 "CSS Cascading Style Sheets library for Python")
5381 (description
5382 "Cssutils is a Python package for parsing and building CSS
5383Cascading Style Sheets. Currently it provides a DOM only and no rendering
5384options.")
5385 (license license:lgpl3+)))
5386
5387(define-public python-css-parser
5388 (package
5389 (inherit python-cssutils)
5390 (name "python-css-parser")
5391 (version "1.0.10")
5392 (source
5393 (origin
5394 (method url-fetch)
5395 (uri (pypi-uri "css-parser" version))
5396 (sha256
5397 (base32 "0qs375slcwqd7slizh6hzkwxx7cdj36v8kwn0qrfji1kscm9f7mz"))))
5398 (home-page "https://github.com/ebook-utils/css-parser")
5399 (synopsis "Fork of cssutils modified for parsing ebooks")
5400 (description
5401 "Css-parser is a Python package for parsing and building CSS
5402Cascading Style Sheets. Currently it provides a DOM only and no rendering
5403options.
5404
5405It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
5406cssutils not receiving updates as of 1.0.2.")
5407 (license license:lgpl3+)))
5408
5409(define-public python-cssselect
5410 (package
5411 (name "python-cssselect")
5412 (version "1.2.0")
5413 (source (origin
5414 ;; The PyPI release does not contain tests.
5415 (method git-fetch)
5416 (uri (git-reference
5417 (url "https://github.com/scrapy/cssselect")
5418 (commit (string-append "v" version))))
5419 (file-name (git-file-name name version))
5420 (sha256
5421 (base32
5422 "1x4nrvb1p1byi1whmspik7lbh303akdlh762dayfxam3hycsh5kk"))))
5423 (build-system pyproject-build-system)
5424 (native-inputs
5425 (list python-lxml python-pytest python-setuptools python-wheel))
5426 (home-page "https://github.com/scrapy/cssselect")
5427 (synopsis "CSS3 selector parser and translator to XPath 1.0")
5428 (description
5429 "Cssselect ia a Python module that parses CSS3 Selectors and translates
5430them to XPath 1.0 expressions. Such expressions can be used in lxml or
5431another XPath engine to find the matching elements in an XML or HTML document.")
5432 (license license:bsd-3)))
5433
5434(define-public python-databricks-cli
5435 (package
5436 (name "python-databricks-cli")
5437 (version "0.18.0")
5438 (home-page "https://github.com/databricks/databricks-cli")
5439 (source (origin
5440 (method git-fetch)
5441 (uri (git-reference (url home-page) (commit version)))
5442 (file-name (git-file-name name version))
5443 (sha256
5444 (base32
5445 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
5446 (build-system pyproject-build-system)
5447 (arguments
5448 (list #:phases #~(modify-phases %standard-phases
5449 (replace 'check
5450 (lambda _
5451 (invoke "pytest" "tests" "-vv"))))))
5452 (native-inputs
5453 ;; For tests.
5454 (list python-decorator
5455 python-mock
5456 python-pytest
5457 python-requests-mock
5458 python-setuptools
5459 python-wheel))
5460 (propagated-inputs
5461 (list python-click
5462 python-oauthlib
5463 python-pyjwt
5464 python-requests
5465 python-six
5466 python-tabulate))
5467 (synopsis "Command line interface for Databricks")
5468 (description
5469 "The Databricks Command Line Interface is a tool which provides an easy
5470to use interface to the Databricks platform. The CLI is built on top of the
5471Databricks REST APIs.")
5472 (license license:asl2.0)))
5473
5474(define-public python-openid-cla
5475 ;; XXX: Last updated in 2015.
5476 (package
5477 (name "python-openid-cla")
5478 (version "1.2")
5479 (source
5480 (origin
5481 (method url-fetch)
5482 (uri (pypi-uri "python-openid-cla" version))
5483 (sha256
5484 (base32
5485 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
5486 (build-system pyproject-build-system)
5487 (arguments '(#:tests? #f)) ; No tests.
5488 (native-inputs (list python-setuptools python-wheel))
5489 (propagated-inputs (list python-openid python-six))
5490 (home-page "https://github.com/puiterwijk/python-openid-cla/")
5491 (synopsis "Implementation of the OpenID CLA extension for python-openid")
5492 (description "@code{openid-cla} is an implementation of the OpenID
5493contributor license agreement extension for python-openid.")
5494 (license license:bsd-3)))
5495
5496(define-public python-openid-teams
5497 ;; XXX: Last updated in 2018.
5498 (package
5499 (name "python-openid-teams")
5500 (version "1.1")
5501 (source
5502 (origin
5503 (method url-fetch)
5504 (uri (pypi-uri "python-openid-teams" version))
5505 (sha256
5506 (base32
5507 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
5508 (build-system pyproject-build-system)
5509 (arguments '(#:tests? #f)) ; No tests.
5510 (native-inputs (list python-setuptools python-wheel))
5511 (propagated-inputs (list python-openid python-six))
5512 (home-page "https://github.com/puiterwijk/python-openid-teams/")
5513 (synopsis "Implementation of the OpenID teams extension for python-openid")
5514 (description
5515 "@code{openid-teams} is an implementation of the OpenID
5516teams extension for python-openid.")
5517 (license license:bsd-3)))
5518
5519(define-public python-priority
5520 (package
5521 (name "python-priority")
5522 (version "2.0.0")
5523 (source
5524 (origin
5525 (method url-fetch)
5526 (uri (pypi-uri "priority" version))
5527 (sha256
5528 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
5529 (build-system pyproject-build-system)
5530 (native-inputs
5531 (list python-pytest python-setuptools python-wheel))
5532 (home-page "https://python-hyper.org/projects/priority/en/latest/")
5533 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
5534 (description
5535 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
5536set out in RFC 7540 Section 5.3 (Stream Priority).")
5537 (license license:expat)))
5538
5539(define-public python-weblate-language-data
5540 (package
5541 (name "python-weblate-language-data")
5542 (version "2025.8")
5543 (source
5544 (origin
5545 (method url-fetch)
5546 (uri (pypi-uri "weblate_language_data" version))
5547 (sha256
5548 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
5549 (build-system pyproject-build-system)
5550 (arguments (list #:tests? #f)) ;not tests, just data files
5551 (native-inputs
5552 (list python-setuptools))
5553 (propagated-inputs
5554 (list python-translate-toolkit))
5555 (home-page "https://github.com/WeblateOrg/language-data")
5556 (synopsis "Language definitions for Weblate")
5557 (description
5558 "This package provides language definitions used by
5559@url{https://weblate.org/, Weblate}i.")
5560 (license license:expat)))
5561
5562(define-public python-wikidata
5563 (package
5564 (name "python-wikidata")
5565 (version "0.8.1")
5566 (source
5567 (origin
5568 (method git-fetch)
5569 (uri (git-reference
5570 (url "https://github.com/dahlia/wikidata")
5571 (commit version)))
5572 (file-name (git-file-name name version))
5573 (sha256
5574 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
5575 (build-system pyproject-build-system)
5576 (native-inputs
5577 (list python-pytest python-setuptools))
5578 (home-page "https://github.com/dahlia/wikidata")
5579 (synopsis "Wikidata client library")
5580 (description
5581 "This package provides a Python interface to @url{https://www.wikidata.org/,
5582Wikidata}.")
5583 (license license:gpl3+)))
5584
5585(define-public python-wsproto
5586 (package
5587 (name "python-wsproto")
5588 (version "1.2.0")
5589 (source
5590 (origin
5591 (method url-fetch)
5592 (uri (pypi-uri "wsproto" version))
5593 (sha256
5594 (base32 "0rahm1j9danv1l6i6as80acwv16ycihxkhrvwjiqh9drxhk5ymmd"))))
5595 (build-system pyproject-build-system)
5596 (native-inputs
5597 (list python-pytest python-setuptools python-wheel))
5598 (propagated-inputs
5599 (list python-h11))
5600 (home-page "https://github.com/python-hyper/wsproto/")
5601 (synopsis "WebSockets state-machine based protocol implementation")
5602 (description
5603 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
5604stack. It's written from the ground up to be embeddable in whatever program you
5605choose to use, ensuring that you can communicate via WebSockets, as defined in
5606RFC6455, regardless of your programming paradigm.")
5607 (license license:expat)))
5608
5609(define-public hypercorn
5610 (package
5611 (name "hypercorn")
5612 (version "0.18.0")
5613 (source
5614 (origin
5615 (method git-fetch) ;PyPI does not have tests
5616 (uri (git-reference
5617 (url "https://github.com/pgjones/hypercorn")
5618 (commit version)))
5619 (file-name (git-file-name name version))
5620 (sha256
5621 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
5622 (build-system pyproject-build-system)
5623 ;; Propagate because Hypercorn also exposes functionality over a module.
5624 (propagated-inputs (list python-h11
5625 python-h2
5626 python-priority
5627 python-tomli
5628 python-wsproto))
5629 (native-inputs (list nss-certs-for-test
5630 python-httpx
5631 python-pdm-backend
5632 python-poetry-core
5633 python-pytest
5634 python-pytest-asyncio
5635 python-pytest-cov
5636 python-pytest-trio
5637 python-trio))
5638 (home-page "https://gitlab.com/pgjones/hypercorn/")
5639 (synopsis "ASGI Server based on Hyper libraries")
5640 (description
5641 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
5642wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
5643WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
5644can utilise asyncio, uvloop, or trio worker types.")
5645 (license license:expat)))
5646
5647(define-public python-querystring-parser
5648 (package
5649 (name "python-querystring-parser")
5650 (version "1.2.4")
5651 (source
5652 (origin
5653 (method git-fetch)
5654 (uri (git-reference
5655 (url "https://github.com/bernii/querystring-parser")
5656 (commit version)))
5657 (file-name (git-file-name name version))
5658 (sha256
5659 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
5660 (build-system pyproject-build-system)
5661 (arguments
5662 (list
5663 #:phases
5664 #~(modify-phases %standard-phases
5665 (replace 'check
5666 (lambda _
5667 ;; XXX FIXME: This test is broken with Python 3.7:
5668 ;; https://github.com/bernii/querystring-parser/issues/35
5669 (substitute* "querystring_parser/tests.py"
5670 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
5671 "True"))
5672 (invoke "python" "querystring_parser/tests.py"))))))
5673 (native-inputs (list python-setuptools))
5674 (propagated-inputs (list python-six))
5675 (home-page "https://github.com/bernii/querystring-parser")
5676 (synopsis "QueryString parser that correctly handles nested dictionaries")
5677 (description
5678 "This package provides a query string parser for Python and Django
5679projects that correctly creates nested dictionaries from sent form/querystring
5680data.")
5681 (license license:expat)))
5682
5683(define-public python-tornado
5684 (package
5685 (name "python-tornado")
5686 (version "6.4.2")
5687 (source
5688 (origin
5689 (method url-fetch)
5690 (uri (pypi-uri "tornado" version))
5691 (sha256
5692 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
5693 (build-system pyproject-build-system)
5694 (arguments
5695 (list
5696 #:test-flags
5697 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
5698 #~(list "--ignore=tornado/test/iostream_test.py")))
5699 (native-inputs
5700 (list python-certifi
5701 python-pytest
5702 python-setuptools))
5703 (home-page "https://www.tornadoweb.org/")
5704 (synopsis "Python web framework and asynchronous networking library")
5705 (description
5706 "Tornado is a Python web framework and asynchronous networking library,
5707originally developed at FriendFeed. By using non-blocking network I/O,
5708Tornado can scale to tens of thousands of open connections, making it ideal
5709for long polling, WebSockets, and other applications that require a long-lived
5710connection to each user.")
5711 (license license:asl2.0)))
5712
5713(define-public python-tornado-5
5714 (package
5715 (inherit python-tornado)
5716 (version "5.1.1")
5717 (source
5718 (origin
5719 (method url-fetch)
5720 (uri (pypi-uri "tornado" version))
5721 (sha256
5722 (base32
5723 "02clqk2116jbnq8lnaqmdw3p52nqrd9ib59r4xz2ll43fpcmhlaf"))))
5724 (build-system pyproject-build-system)
5725 (arguments
5726 (list
5727 #:phases
5728 '(modify-phases %standard-phases
5729 (add-after 'unpack 'fix-collections
5730 (lambda _
5731 (substitute* "tornado/httputil.py"
5732 (("collections.MutableMapping")
5733 "collections.abc.MutableMapping"))))
5734 (replace 'check
5735 (lambda* (#:key tests? #:allow-other-keys)
5736 (when tests?
5737 (substitute* "tornado/test/runtests.py"
5738 (("\"error\", category=DeprecationWarning")
5739 "\"ignore\", category=DeprecationWarning")
5740 ;; Disable tests that use SSL.
5741 (("'tornado.test.simple_httpclient_test',") "")
5742 (("'tornado.test.iostream_test',") "")
5743 (("'tornado.test.httpserver_test',") "")
5744 ;; Some timeouts are triggered in these two modules
5745 (("'tornado.test.queues_test',") "")
5746 (("'tornado.test.locks_test',") ""))
5747 ;; Skip all network tests
5748 (setenv "NO_NETWORK" "1")
5749 ;; Skip timing-relevant tests
5750 (setenv "TRAVIS" "1")
5751 (invoke "python" "-m" "tornado.test.runtests"
5752 "--verbose=yes")))))))
5753 (native-inputs
5754 (list python-certifi
5755 python-setuptools))))
5756
5757;; XXX: Deprecated on <2026-01-23>.
5758(define-deprecated-package python-tornado-6 python-tornado)
5759
5760(define-public python-tornado-http-auth
5761 (package
5762 (name "python-tornado-http-auth")
5763 (version "1.1.1")
5764 (source
5765 (origin
5766 (method git-fetch)
5767 (uri (git-reference
5768 (url "https://github.com/gvalkov/tornado-http-auth")
5769 (commit (string-append "v" version))))
5770 (file-name (git-file-name name version))
5771 (sha256
5772 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
5773 (build-system pyproject-build-system)
5774 ;; XXX: This version is incompatible with current tornado.testing.
5775 (arguments (list #:tests? #f))
5776 (native-inputs (list python-setuptools))
5777 (propagated-inputs (list python-tornado))
5778 (home-page "https://github.com/gvalkov/tornado-http-auth")
5779 (synopsis "Digest and basic authentication module for Tornado")
5780 (description
5781 "Provides support for adding authentication to services using the Tornado
5782web framework, either via the basic or digest authentication schemes.")
5783 (license license:asl2.0)))
5784
5785(define-public python-wsgi-intercept
5786 (package
5787 (name "python-wsgi-intercept")
5788 (version "1.13.1")
5789 (source (origin
5790 (method url-fetch)
5791 (uri (pypi-uri "wsgi_intercept" version))
5792 (sha256
5793 (base32
5794 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
5795 (build-system pyproject-build-system)
5796 (arguments
5797 (list
5798 ;; XXX: tests required internet access
5799 #:tests? #f))
5800 (propagated-inputs
5801 (list python-six))
5802 (native-inputs
5803 (list python-httplib2
5804 python-pytest
5805 python-requests
5806 python-setuptools
5807 python-urllib3
5808 python-wheel))
5809 (synopsis "Puts a WSGI application in place of a real URI for testing")
5810 (description "Wsgi_intercept installs a WSGI application in place of a real
5811URI for testing. Testing a WSGI application normally involves starting a
5812server at a local host and port, then pointing your test code to that address.
5813Instead, this library lets you intercept calls to any specific host/port
5814combination and redirect them into a WSGI application importable by your test
5815program. Thus, you can avoid spawning multiple processes or threads to test
5816your Web app.")
5817 (home-page "https://github.com/cdent/wsgi-intercept")
5818 (license license:expat)))
5819
5820(define-public python-webob
5821 (package
5822 (name "python-webob")
5823 (version "1.8.9")
5824 (source
5825 (origin
5826 (method url-fetch)
5827 (uri (pypi-uri "webob" version))
5828 (sha256
5829 (base32
5830 "12b5sl10yzzzz3g11kij3rdzk9y6583ywggc6h9nsxmnxpi7hq5d"))))
5831 (build-system pyproject-build-system)
5832 ;; tests: 2380 passed, 9 skipped, 1 xfailed, 12 warnings
5833 (native-inputs
5834 (list python-pytest
5835 python-setuptools))
5836 (home-page "https://webob.org/")
5837 (synopsis "WSGI request and response object")
5838 (description
5839 "WebOb provides wrappers around the WSGI request environment, and an
5840object to help create WSGI responses.")
5841 (license license:expat)))
5842
5843(define-public python-zc-lockfile
5844 (package
5845 (name "python-zc-lockfile")
5846 (version "4.0")
5847 (source
5848 (origin
5849 (method git-fetch)
5850 (uri (git-reference
5851 (url "https://github.com/zopefoundation/zc.lockfile")
5852 (commit version)))
5853 (file-name (git-file-name name version))
5854 (sha256
5855 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
5856 (build-system pyproject-build-system)
5857 (arguments
5858 (list
5859 #:phases
5860 #~(modify-phases %standard-phases
5861 (replace 'check
5862 (lambda* (#:key tests? #:allow-other-keys)
5863 (if tests?
5864 (invoke "zope-testrunner" "--test-path=src")
5865 (format #t "test suite not run~%")))))))
5866 (native-inputs (list python-zope-testing python-zope-testrunner
5867 python-setuptools))
5868 (home-page "https://github.com/zopefoundation/zc.lockfile")
5869 (synopsis "Interprocess locks using lock files")
5870 (description
5871 "This package provides an implementation of interprocess locks using lock
5872files. These locks can also be used to mediate access to other files.")
5873 (license license:zpl2.1)))
5874
5875(define-public python-zconfig
5876 (package
5877 (name "python-zconfig")
5878 (version "4.0")
5879 (source
5880 (origin
5881 (method git-fetch)
5882 (uri (git-reference
5883 (url "https://github.com/zopefoundation/ZConfig/")
5884 (commit version)))
5885 (file-name (git-file-name name version))
5886 (sha256
5887 (base32 "1x502hyfijh6fc8n85cm046c44spwfmwcn2lnxa1axg8n0n5rsbp"))))
5888 (build-system pyproject-build-system)
5889 (arguments
5890 (list
5891 #:phases
5892 #~(modify-phases %standard-phases
5893 (replace 'check
5894 (lambda* (#:key tests? #:allow-other-keys)
5895 (if tests?
5896 (begin
5897 ;; This test assumes we still have setup.py in the
5898 ;; directory from which we import zconfig, which
5899 ;; does not work after installing the package.
5900 (delete-file-recursively
5901 "src/ZConfig/tests/test_readme.py")
5902 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
5903 (format #t "test suite not run~%")))))))
5904 (native-inputs (list python-docutils python-manuel python-zope-exceptions
5905 python-zope-testrunner python-setuptools))
5906 (home-page "https://github.com/zopefoundation/ZConfig/")
5907 (synopsis "Structured configuration library intended for general use")
5908 (description
5909 "@code{zconfig} is a configuration library intended for general use. It
5910supports a hierarchical schema-driven configuration model that allows a schema
5911to specify data conversion routines written in Python. Its model is very
5912different from the model supported by the @code{configparser} module found in
5913Python's standard library, and is more suitable to configuration-intensive
5914applications.")
5915 (license license:zpl2.1)))
5916
5917(define-public python-zodb
5918 (package
5919 (name "python-zodb")
5920 (version "6.0.1")
5921 (source
5922 (origin
5923 (method url-fetch)
5924 (uri (pypi-uri "zodb" version))
5925 (sha256
5926 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
5927 (build-system pyproject-build-system)
5928 (arguments
5929 (list
5930 #:phases
5931 #~(modify-phases %standard-phases
5932 (replace 'check
5933 (lambda* (#:key tests? #:allow-other-keys)
5934 (if tests?
5935 (begin
5936 ;; This test does not work after installing the
5937 ;; package, since it expects the ZODB source code
5938 ;; to reside in the src/ directory.
5939 (delete-file-recursively
5940 "src/ZODB/tests/testdocumentation.py")
5941 (invoke "zope-testrunner" "-vv" "--test-path=src"
5942 "--all"))
5943 (format #t "test suite not run~%")))))))
5944 (native-inputs
5945 (list python-manuel
5946 python-wheel
5947 python-zope-testing
5948 python-zope-testrunner))
5949 (propagated-inputs
5950 (list python-btrees
5951 python-persistent
5952 python-transaction
5953 python-zc-lockfile
5954 python-zconfig
5955 python-zodbpickle
5956 python-zope-interface))
5957 (home-page "http://zodb-docs.readthedocs.io")
5958 (synopsis "Object-oriented database for Python")
5959 (description
5960 "@code{ZODB} provides an object-oriented and @acronym{ACID,
5961Atomicity Consistency Isolation Durability} compliant database for Python with
5962a high degree of transparency. @code{ZODB} is an object-oriented database,
5963not an object-relational mapping. This comes with several advantaged:
5964
5965@itemize
5966@item no separate language for database operations
5967@item very little impact on your code to make objects persistent
5968@item no database mapper that partially hides the database.
5969@item almost no seam between code and database.
5970@end itemize")
5971 (license license:zpl2.1)))
5972
5973(define-public python-zodbpickle
5974 (package
5975 (name "python-zodbpickle")
5976 (version "3.2")
5977 (source
5978 (origin
5979 (method url-fetch)
5980 (uri (pypi-uri "zodbpickle" version))
5981 (sha256
5982 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
5983 (build-system pyproject-build-system)
5984 (arguments
5985 '(#:phases (modify-phases %standard-phases
5986 (replace 'check
5987 (lambda* (#:key tests? #:allow-other-keys)
5988 (if tests?
5989 (invoke "zope-testrunner" "-vv" "--test-path=src"
5990 "--all")
5991 (format #t "test suite not run~%")))))))
5992 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
5993 (home-page "https://github.com/zopefoundation/zodbpickle")
5994 (synopsis "Uniform pickling interface for @code{zodb}")
5995 (description
5996 "This package is a fork of the @code{pickle} module (and the
5997supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
5998support for the @code{noload} operations used by @code{zodb}.")
5999 (license (list license:psfl license:zpl2.1))))
6000
6001(define-public python-zope-dottedname
6002 (package
6003 (name "python-zope-dottedname")
6004 (version "7.0")
6005 (source
6006 (origin
6007 (method git-fetch)
6008 (uri (git-reference
6009 (url "https://github.com/zopefoundation/zope.dottedname")
6010 (commit version)))
6011 (file-name (git-file-name name version))
6012 (sha256
6013 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
6014 (build-system pyproject-build-system)
6015 (arguments
6016 (list #:test-backend #~'custom
6017 #:test-flags #~(list "src/zope/dottedname/tests.py")))
6018 (native-inputs (list python-setuptools))
6019 (home-page "https://zopedottedname.readthedocs.io")
6020 (synopsis "Resolver for Python dotted names")
6021 (description
6022 "This package provides a @code{resolve()} function that resolves strings
6023containing dotted names into the appropriate Python object.")
6024 (license license:zpl2.1)))
6025
6026(define-public python-zope-event
6027 (package
6028 (name "python-zope-event")
6029 (version "6.0")
6030 (source
6031 (origin
6032 (method git-fetch)
6033 (uri (git-reference
6034 (url "https://github.com/zopefoundation/zope.event")
6035 (commit version)))
6036 (file-name (git-file-name name version))
6037 (sha256
6038 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
6039 (build-system pyproject-build-system)
6040 (arguments
6041 (list
6042 #:test-flags
6043 #~(list "src/zope/event/tests.py")))
6044 (native-inputs (list python-pytest python-setuptools))
6045 (home-page "https://zopeevent.readthedocs.io/en/latest/")
6046 (synopsis "Event publishing system for Python")
6047 (description
6048 "Zope.event provides an event publishing API, intended for use by
6049applications which are unaware of any subscribers to their events. It is a
6050simple event-dispatching system on which more sophisticated event dispatching
6051systems can be built.")
6052 (license license:zpl2.1)))
6053
6054(define-public python-zope-interface
6055 (package
6056 (name "python-zope-interface")
6057 (version "7.2")
6058 (source
6059 (origin
6060 (method git-fetch)
6061 (uri (git-reference
6062 (url "https://github.com/zopefoundation/zope.interface")
6063 (commit version)))
6064 (file-name (git-file-name name version))
6065 (sha256
6066 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
6067 (build-system pyproject-build-system)
6068 (arguments
6069 ;; XXX: test suite can't find python-zope-testing
6070 (list #:tests? #f))
6071 (native-inputs (list python-setuptools))
6072 (home-page "https://zopeinterface.readthedocs.io")
6073 (synopsis "\"Design by contract\" methodology in Python")
6074 (description
6075 "Zope.interface provides an implementation of \"object interfaces\" for
6076Python. Interfaces are a mechanism for labeling objects as conforming to a
6077given API or contract.")
6078 (license license:zpl2.1)))
6079
6080(define-public python-zope-exceptions
6081 (package
6082 (name "python-zope-exceptions")
6083 (version "6.0")
6084 (source
6085 (origin
6086 (method git-fetch)
6087 (uri (git-reference
6088 (url "https://github.com/zopefoundation/zope.exceptions")
6089 (commit version)))
6090 (file-name (git-file-name name version))
6091 (sha256
6092 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
6093 (build-system pyproject-build-system)
6094 (arguments
6095 (list
6096 #:phases
6097 #~(modify-phases %standard-phases
6098 (replace 'check
6099 (lambda* (#:key tests? #:allow-other-keys)
6100 (if tests?
6101 (invoke "zope-testrunner" "--test-path=src")
6102 (format #t "test suite not run~%")))))))
6103 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
6104 (propagated-inputs (list python-zope-interface))
6105 (home-page "https://github.com/zopefoundation/zope.exceptions")
6106 (synopsis "Zope exceptions")
6107 (description
6108 "Zope.exceptions provides general-purpose exception types that have uses
6109outside of the Zope framework.")
6110 (license license:zpl2.1)))
6111
6112(define (python-zope-bootstrap-package orig)
6113 (package
6114 (inherit orig)
6115 (name (string-append (package-name orig) "-bootstrap"))
6116 (arguments
6117 (if (null? (package-arguments orig))
6118 (list
6119 #:tests? #f
6120 #:phases #~(modify-phases %standard-phases
6121 (delete 'sanity-check)))
6122 (substitute-keyword-arguments arguments
6123 ((#:tests? _ #f) #f)
6124 ((#:phases phases '%standard-phases)
6125 #~(modify-phases #$phases
6126 (delete 'sanity-check))))))
6127 (propagated-inputs `())
6128 (native-inputs (list python-setuptools))
6129 (properties `((hidden? . #t)))))
6130
6131(define-public python-zope-exceptions-bootstrap
6132 (python-zope-bootstrap-package python-zope-exceptions))
6133
6134(define-public python-zope-testing
6135 (package
6136 (name "python-zope-testing")
6137 (version "6.0")
6138 (source
6139 (origin
6140 (method git-fetch)
6141 (uri (git-reference
6142 (url "https://github.com/zopefoundation/zope.testing")
6143 (commit version)))
6144 (file-name (git-file-name name version))
6145 (sha256
6146 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
6147 (build-system pyproject-build-system)
6148 (arguments
6149 (list
6150 #:phases
6151 #~(modify-phases %standard-phases
6152 (replace 'check
6153 (lambda* (#:key tests? #:allow-other-keys)
6154 (if tests?
6155 (invoke "zope-testrunner" "--test-path=src")
6156 (format #t "test suite not run~%")))))))
6157 (native-inputs (list python-setuptools
6158 python-zope-interface
6159 python-zope-testrunner-bootstrap))
6160 (home-page "https://zopetesting.readthedocs.io/")
6161 (synopsis "Zope testing helpers")
6162 (description
6163 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
6164servers, regular expressions, and more.")
6165 (license license:zpl2.1)))
6166
6167(define-public python-zope-testrunner
6168 (package
6169 (name "python-zope-testrunner")
6170 (version "7.4")
6171 (source
6172 (origin
6173 (method git-fetch)
6174 (uri (git-reference
6175 (url "https://github.com/zopefoundation/zope.testrunner")
6176 (commit version)))
6177 (file-name (git-file-name name version))
6178 (sha256
6179 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
6180 (build-system pyproject-build-system)
6181 (arguments
6182 (list
6183 #:phases
6184 #~(modify-phases %standard-phases
6185 (add-after 'unpack 'remove-problematic-test
6186 (lambda _
6187 ;; This test contains invalid syntax, which breaks bytecode
6188 ;; compilation. For simplicity just remove it.
6189 (delete-file
6190 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
6191 (replace 'check
6192 (lambda* (#:key tests? #:allow-other-keys)
6193 (if tests?
6194 (invoke "zope-testrunner" "--test-path=src")
6195 (format #t "test suite not run~%")))))))
6196 (native-inputs (list python-setuptools python-zope-testing))
6197 (propagated-inputs (list python-zope-exceptions python-zope-interface))
6198 (home-page "https://zopetestrunner.readthedocs.io")
6199 (synopsis "Zope testrunner script")
6200 (description "This package provides a script for running Python tests.")
6201 (license license:zpl2.1)))
6202
6203(define-public python-zope-testrunner-bootstrap
6204 (package
6205 (inherit (python-zope-bootstrap-package python-zope-testrunner))
6206 (propagated-inputs
6207 (list python-six python-zope-exceptions-bootstrap))
6208 (properties `((hidden? . #t)))))
6209
6210(define-public python-zope-i18nmessageid
6211 (package
6212 (name "python-zope-i18nmessageid")
6213 (version "7.0")
6214 (source
6215 (origin
6216 (method git-fetch)
6217 (uri (git-reference
6218 (url "https://github.com/zopefoundation/zope.i18nmessageid")
6219 (commit version)))
6220 (file-name (git-file-name name version))
6221 (sha256
6222 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
6223 (build-system pyproject-build-system)
6224 (arguments
6225 (list
6226 #:phases
6227 #~(modify-phases %standard-phases
6228 (replace 'check
6229 (lambda* (#:key tests? #:allow-other-keys)
6230 (if tests?
6231 (invoke "zope-testrunner" "--test-path=src")
6232 (format #t "test suite not run~%")))))))
6233 (native-inputs (list python-setuptools python-zope-testrunner))
6234 (home-page "https://zopei18nmessageid.readthedocs.io")
6235 (synopsis "Message identifiers for internationalization")
6236 (description "Zope.i18nmessageid provides facilities for declaring
6237internationalized messages within program source text.")
6238 (license license:zpl2.1)))
6239
6240(define-public python-zope-schema
6241 (package
6242 (name "python-zope-schema")
6243 (version "7.0.1")
6244 (source
6245 (origin
6246 (method git-fetch)
6247 (uri (git-reference
6248 (url "https://github.com/zopefoundation/zope.schema")
6249 (commit version)))
6250 (file-name (git-file-name name version))
6251 (sha256
6252 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
6253 (build-system pyproject-build-system)
6254 (arguments
6255 (list
6256 #:phases
6257 #~(modify-phases %standard-phases
6258 (replace 'check
6259 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6260 (add-installed-pythonpath inputs outputs)
6261 (if tests?
6262 (invoke "zope-testrunner" "--test-path=src")
6263 (format #t "test suite not run.~%")))))))
6264 (propagated-inputs (list python-zope-event python-zope-interface))
6265 (native-inputs (list python-zope-i18nmessageid python-zope-testing
6266 python-zope-testrunner python-setuptools))
6267 (home-page "https://zopeschema.readthedocs.io")
6268 (synopsis "Zope data schemas")
6269 (description "Zope.scheme provides extensions to zope.interface for
6270defining data schemas.")
6271 (license license:zpl2.1)))
6272
6273(define-public python-zope-sqlalchemy
6274 (package
6275 (name "python-zope-sqlalchemy")
6276 (version "1.6")
6277 (source
6278 (origin
6279 (method git-fetch)
6280 (uri (git-reference
6281 (url "https://github.com/zopefoundation/zope.sqlalchemy")
6282 (commit version)))
6283 (file-name (git-file-name name version))
6284 (sha256
6285 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
6286 (build-system pyproject-build-system)
6287 (arguments
6288 (list
6289 #:phases
6290 #~(modify-phases %standard-phases
6291 (replace 'check
6292 (lambda* (#:key tests? #:allow-other-keys)
6293 (if tests?
6294 (invoke "zope-testrunner" "--test-path=src")
6295 (format #t "test suite not run~%")))))))
6296 (propagated-inputs (list python-sqlalchemy python-transaction
6297 python-zope-interface))
6298 (native-inputs (list python-zope-testing python-zope-testrunner
6299 python-setuptools))
6300 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
6301 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
6302 (description
6303 "The aim of this package is to unify the plethora of existing packages
6304integrating SQLAlchemy with Zope's transaction management. As such,it only
6305provides a data manager and makes no attempt to define a @i{zopeish} way to
6306configure engines.")
6307 (license license:zpl2.1)))
6308
6309(define-public python-zope-configuration
6310 (package
6311 (name "python-zope-configuration")
6312 (version "7.0")
6313 (source
6314 (origin
6315 (method git-fetch)
6316 (uri (git-reference
6317 (url "https://github.com/zopefoundation/zope.configuration")
6318 (commit version)))
6319 (file-name (git-file-name name version))
6320 (sha256
6321 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
6322 (build-system pyproject-build-system)
6323 (arguments
6324 (list
6325 #:phases
6326 #~(modify-phases %standard-phases
6327 (replace 'check
6328 (lambda* (#:key tests? #:allow-other-keys)
6329 (if tests?
6330 (invoke "zope-testrunner" "--test-path=src")
6331 (format #t "test suite not run~%")))))))
6332 (native-inputs (list python-manuel python-setuptools python-zope-testing
6333 python-zope-testrunner))
6334 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
6335 python-zope-schema))
6336 (home-page "https://zopeconfiguration.readthedocs.io")
6337 (synopsis "Zope Configuration Markup Language")
6338 (description "Zope.configuration implements ZCML, the Zope Configuration
6339Markup Language.")
6340 (license license:zpl2.1)))
6341
6342(define-public python-zope-configuration-bootstrap
6343 (python-zope-bootstrap-package python-zope-configuration))
6344
6345(define-public python-zope-copy
6346 (package
6347 (name "python-zope-copy")
6348 (version "6.0")
6349 (source
6350 (origin
6351 (method git-fetch)
6352 (uri (git-reference
6353 (url "https://github.com/zopefoundation/zope.copy")
6354 (commit version)))
6355 (file-name (git-file-name name version))
6356 (sha256
6357 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
6358 (build-system pyproject-build-system)
6359 (arguments
6360 (list
6361 #:phases
6362 #~(modify-phases %standard-phases
6363 (replace 'check
6364 (lambda* (#:key tests? #:allow-other-keys)
6365 (if tests?
6366 (invoke "zope-testrunner" "--test-path=src")
6367 (format #t "test suite not run~%")))))))
6368 (propagated-inputs (list python-zope-interface))
6369 (native-inputs
6370 (list python-zodbpickle
6371 python-zope-component-bootstrap
6372 python-zope-location-bootstrap
6373 python-zope-proxy
6374 python-zope-schema
6375 python-zope-testing
6376 python-zope-testrunner
6377 python-setuptools))
6378 (home-page "https://zopecopy.readthedocs.io")
6379 (synopsis "Pluggable object copying mechanism")
6380 (description
6381 "This package provides a pluggable mechanism for copying persistent objects.")
6382 (license license:zpl2.1)))
6383
6384(define-public python-zope-proxy
6385 (package
6386 (name "python-zope-proxy")
6387 (version "7.0")
6388 (source
6389 (origin
6390 (method git-fetch)
6391 (uri (git-reference
6392 (url "https://github.com/zopefoundation/zope.proxy")
6393 (commit version)))
6394 (file-name (git-file-name name version))
6395 (sha256
6396 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
6397 (build-system pyproject-build-system)
6398 (arguments
6399 (list
6400 #:phases
6401 #~(modify-phases %standard-phases
6402 (replace 'check
6403 (lambda* (#:key tests? #:allow-other-keys)
6404 (if tests?
6405 (invoke "zope-testrunner" "--test-path=src")
6406 (format #t "test suite not run~%")))))))
6407 (native-inputs
6408 (list python-zope-location-bootstrap
6409 python-zope-security-bootstrap
6410 python-zope-testrunner
6411 python-setuptools))
6412 (propagated-inputs (list python-zope-interface))
6413 (home-page "https://zopeproxy.readthedocs.io")
6414 (synopsis "Generic, transparent proxies")
6415 (description
6416 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
6417special objects which serve as mostly-transparent wrappers around another
6418object, intervening in the apparent behavior of the wrapped object only when
6419necessary to apply the policy (e.g., access checking, location brokering,
6420etc.) for which the proxy is responsible.")
6421 (license license:zpl2.1)))
6422
6423(define-public python-zope-proxy-bootstrap
6424 (python-zope-bootstrap-package python-zope-proxy))
6425
6426(define-public python-zope-hookable
6427 (package
6428 (name "python-zope-hookable")
6429 (version "7.0")
6430 (source
6431 (origin
6432 (method git-fetch)
6433 (uri (git-reference
6434 (url "https://github.com/zopefoundation/zope.hookable")
6435 (commit version)))
6436 (file-name (git-file-name name version))
6437 (sha256
6438 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
6439 (build-system pyproject-build-system)
6440 (arguments
6441 (list
6442 #:phases
6443 #~(modify-phases %standard-phases
6444 (replace 'check
6445 (lambda* (#:key tests? #:allow-other-keys)
6446 (if tests?
6447 (invoke "zope-testrunner" "--test-path=src")
6448 (format #t "test suite not run~%")))))))
6449 (native-inputs (list python-zope-testing python-zope-testrunner
6450 python-setuptools))
6451 (home-page "https://zopehookable.readthedocs.io")
6452 (synopsis "Zope hookable")
6453 (description
6454 "This package supports the efficient creation of hookable objects, which
6455are callable objects that are meant to be optionally replaced. The idea is
6456that you create a function that does some default thing and make i hookable.
6457Later, someone can modify what it does by calling its sethook method and
6458changing its implementation. All users of the function, including those that
6459imported it, will see the change.")
6460 (license license:zpl2.1)))
6461
6462(define-public python-zope-location
6463 (package
6464 (name "python-zope-location")
6465 (version "6.0")
6466 (source
6467 (origin
6468 (method git-fetch)
6469 (uri (git-reference
6470 (url "https://github.com/zopefoundation/zope.location")
6471 (commit version)))
6472 (file-name (git-file-name name version))
6473 (sha256
6474 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
6475 (build-system pyproject-build-system)
6476 (arguments
6477 (list
6478 #:phases
6479 #~(modify-phases %standard-phases
6480 (replace 'check
6481 (lambda* (#:key tests? #:allow-other-keys)
6482 (if tests?
6483 (invoke "zope-testrunner" "--test-path=src")
6484 (format #t "test suite not run~%")))))))
6485 (native-inputs (list python-zope-testrunner python-setuptools))
6486 (propagated-inputs (list python-zope-interface python-zope-proxy
6487 python-zope-schema))
6488 (home-page "https://zopelocation.readthedocs.io")
6489 (synopsis "Zope location library")
6490 (description
6491 "Zope.location implements the concept of \"locations\" in Zope3, which
6492are are special objects that have a structural location.")
6493 (license license:zpl2.1)))
6494
6495(define-public python-zope-location-bootstrap
6496 (python-zope-bootstrap-package python-zope-location))
6497
6498(define-public python-zope-security
6499 (package
6500 (name "python-zope-security")
6501 (version "7.3")
6502 (source
6503 (origin
6504 (method git-fetch)
6505 (uri (git-reference
6506 (url "https://github.com/zopefoundation/zope.security")
6507 (commit version)))
6508 (file-name (git-file-name name version))
6509 (sha256
6510 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
6511 (build-system pyproject-build-system)
6512 (arguments
6513 (list
6514 #:phases
6515 #~(modify-phases %standard-phases
6516 (replace 'check
6517 (lambda* (#:key tests? #:allow-other-keys)
6518 (if tests?
6519 (invoke "zope-testrunner" "--test-path=src")
6520 (format #t "test suite not run~%")))))))
6521 (propagated-inputs
6522 (list python-zope-component
6523 python-zope-i18nmessageid
6524 python-zope-interface
6525 python-zope-location
6526 python-zope-proxy
6527 python-zope-schema))
6528 (native-inputs
6529 (list python-btrees
6530 python-zope-component-bootstrap
6531 python-zope-configuration-bootstrap
6532 python-zope-location-bootstrap
6533 python-zope-testing
6534 python-zope-testrunner
6535 python-setuptools))
6536 (home-page "https://zopesecurity.readthedocs.io")
6537 (synopsis "Zope security framework")
6538 (description "Zope.security provides a generic mechanism to implement
6539security policies on Python objects.")
6540 (license license:zpl2.1)))
6541
6542(define-public python-zope-security-bootstrap
6543 (package
6544 (inherit (python-zope-bootstrap-package python-zope-security))
6545 (propagated-inputs
6546 (list python-zope-i18nmessageid
6547 python-zope-interface
6548 python-zope-proxy-bootstrap
6549 python-zope-schema))))
6550
6551(define-public python-zope-component
6552 (package
6553 (name "python-zope-component")
6554 (version "7.0")
6555 (source
6556 (origin
6557 (method git-fetch)
6558 (uri (git-reference
6559 (url "https://github.com/zopefoundation/zope.component")
6560 (commit version)))
6561 (file-name (git-file-name name version))
6562 (sha256
6563 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
6564 (build-system pyproject-build-system)
6565 (arguments
6566 (list
6567 #:phases
6568 #~(modify-phases %standard-phases
6569 (replace 'check
6570 (lambda* (#:key tests? #:allow-other-keys)
6571 (if tests?
6572 (invoke "zope-testrunner" "--test-path=src")
6573 (format #t "test suite not run~%")))))))
6574 (native-inputs
6575 (list python-persistent
6576 python-zope-configuration-bootstrap
6577 python-zope-i18nmessageid
6578 python-zope-location-bootstrap
6579 python-zope-proxy-bootstrap
6580 python-zope-security-bootstrap
6581 python-zope-testing
6582 python-zope-testrunner
6583 python-setuptools))
6584 (propagated-inputs
6585 (list python-zope-deferredimport python-zope-deprecation
6586 python-zope-event python-zope-hookable python-zope-interface))
6587 (home-page "https://zopecomponent.readthedocs.io")
6588 (synopsis "Zope Component Architecture")
6589 (description
6590 "Zope.component represents the core of the Zope Component Architecture.
6591Together with the zope.interface package, it provides facilities for defining,
6592registering and looking up components.")
6593 (license license:zpl2.1)))
6594
6595(define-public python-zope-component-bootstrap
6596 (python-zope-bootstrap-package python-zope-component))
6597
6598(define-public python-zope-deferredimport
6599 (package
6600 (name "python-zope-deferredimport")
6601 (version "6.0")
6602 (source
6603 (origin
6604 (method git-fetch)
6605 (uri (git-reference
6606 (url "https://github.com/zopefoundation/zope.deferredimport")
6607 (commit version)))
6608 (file-name (git-file-name name version))
6609 (sha256
6610 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
6611 (build-system pyproject-build-system)
6612 (arguments
6613 (list
6614 #:phases
6615 #~(modify-phases %standard-phases
6616 (replace 'check
6617 (lambda* (#:key tests? #:allow-other-keys)
6618 (if tests?
6619 (invoke "zope-testrunner" "--test-path=src")
6620 (format #t "test suite not run~%")))))))
6621 (propagated-inputs (list python-zope-proxy))
6622 (native-inputs (list python-zope-testrunner python-setuptools))
6623 (home-page "https://zopedeferredimport.readthedocs.io")
6624 (synopsis "Defer imports until used by code")
6625 (description
6626 "Often, especially for package modules, you want to import names for
6627convenience, but not actually perform the imports until necessary. The
6628@code{zope.deferredimport} package provided facilities for defining names in
6629modules that will be imported from somewhere else when used. You can also cause
6630deprecation warnings to be issued when a variable is used.")
6631 (license license:zpl2.1)))
6632
6633(define-public python-ndg-httpsclient
6634 (package
6635 (name "python-ndg-httpsclient")
6636 (version "0.5.1")
6637 (source
6638 (origin
6639 (method git-fetch)
6640 (uri (git-reference
6641 (url "https://github.com/cedadev/ndg_httpsclient/")
6642 (commit version)))
6643 (file-name (git-file-name name version))
6644 (sha256
6645 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
6646 (build-system pyproject-build-system)
6647 (arguments
6648 (list
6649 #:tests? #f)) ;Tests appear to require networking.
6650 (native-inputs (list python-setuptools))
6651 (propagated-inputs (list python-pyasn1 python-pyopenssl))
6652 (synopsis "HTTPS support for Python's httplib and urllib2")
6653 (description
6654 "This is a HTTPS client implementation for httplib and urllib2 based on
6655PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
6656the default provided with Python and, importantly, enables full verification
6657of the SSL peer.")
6658 (home-page "https://github.com/cedadev/ndg_httpsclient/")
6659 (license license:bsd-3)))
6660
6661(define-public python-netaddr
6662 (package
6663 (name "python-netaddr")
6664 (version "1.3.0")
6665 (source
6666 (origin
6667 (method url-fetch)
6668 (uri (pypi-uri "netaddr" version))
6669 (sha256
6670 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
6671 (build-system pyproject-build-system)
6672 (native-inputs (list python-poetry-core
6673 python-pytest
6674 python-setuptools
6675 python-wheel))
6676 (home-page "https://netaddr.readthedocs.io")
6677 (synopsis "Pythonic manipulation of network addresses")
6678 (description
6679 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
6680and MAC network addresses.")
6681 (license license:bsd-3)))
6682
6683(define-public python-nh3
6684 (package
6685 (name "python-nh3")
6686 (version "0.2.20")
6687 (source
6688 (origin
6689 (method url-fetch)
6690 (uri (pypi-uri "nh3" version))
6691 (sha256
6692 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
6693 (build-system pyproject-build-system)
6694 (arguments
6695 (list
6696 #:imported-modules `(,@%cargo-build-system-modules
6697 ,@%pyproject-build-system-modules)
6698 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
6699 (guix build pyproject-build-system)
6700 (guix build utils))
6701 #:phases
6702 #~(modify-phases %standard-phases
6703 (add-after 'unpack 'prepare-cargo-build-system
6704 (lambda args
6705 (for-each
6706 (lambda (phase)
6707 (format #t "Running cargo phase: ~a~%" phase)
6708 (apply (assoc-ref cargo:%standard-phases phase)
6709 #:cargo-target #$(cargo-triplet)
6710 args))
6711 '(unpack-rust-crates
6712 configure
6713 check-for-pregenerated-files
6714 patch-cargo-checksums)))))))
6715 (native-inputs
6716 (append
6717 (list maturin python-pytest rust `(,rust "cargo"))
6718 (or (and=> (%current-target-system)
6719 (compose list make-rust-sysroot))
6720 '())))
6721 (inputs (cargo-inputs 'python-nh3))
6722 (home-page "https://nh3.readthedocs.io")
6723 (synopsis "Python bindings to Ammonia HTML sanitization library")
6724 (description "This package provides Python bindings to Ammonia HTML
6725sanitizer Rust crate.")
6726 (license license:expat)))
6727
6728(define-public python-noiseprotocol
6729 (package
6730 (name "python-noiseprotocol")
6731 (version "0.3.1")
6732 (source
6733 (origin
6734 (method git-fetch)
6735 (uri (git-reference
6736 (url "https://github.com/plizonczyk/noiseprotocol")
6737 (commit (string-append "v" version))))
6738 (file-name (git-file-name name version))
6739 (sha256
6740 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
6741 (build-system pyproject-build-system)
6742 (propagated-inputs (list python-cryptography))
6743 (native-inputs (list python-setuptools python-pytest))
6744 (home-page "https://github.com/plizonczyk/noiseprotocol")
6745 (synopsis "Implementation of Noise Protocol Framework")
6746 (description
6747 "This package provides an implementation of Noise Protocol Framework.")
6748 (license license:expat)))
6749
6750(define-public python-webrtcvad-wheels
6751 (package
6752 (name "python-webrtcvad-wheels")
6753 (version "2.0.14")
6754 (source
6755 (origin
6756 (method git-fetch)
6757 (uri (git-reference
6758 (url "https://github.com/daanzu/py-webrtcvad-wheels")
6759 (commit (string-append "v" version))))
6760 (file-name (git-file-name name version))
6761 (sha256
6762 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
6763 (build-system pyproject-build-system)
6764 (native-inputs (list python-psutil python-pytest python-setuptools))
6765 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
6766 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
6767 (description
6768 "This package provides a Python interface to the Google
6769@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
6770 (license license:expat)))
6771
6772(define-public python-websocket-client
6773 (package
6774 (name "python-websocket-client")
6775 (version "1.8.0")
6776 (source
6777 (origin
6778 (method url-fetch)
6779 (uri (pypi-uri "websocket_client" version))
6780 (sha256
6781 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
6782 (build-system pyproject-build-system)
6783 (arguments
6784 (list
6785 #:test-flags
6786 ;; This test requires networking.
6787 '(list "-k" "not testConnect")))
6788 (native-inputs
6789 (list python-pysocks
6790 python-pytest
6791 python-setuptools
6792 python-websockets
6793 python-wheel))
6794 (home-page "https://github.com/websocket-client/websocket-client")
6795 (synopsis "WebSocket client for Python")
6796 (description "The Websocket-client module provides the low level APIs for
6797WebSocket usage in Python programs.")
6798 (license license:lgpl2.1+)))
6799
6800(define-public python-websocket-client-0.59
6801 (package
6802 (inherit python-websocket-client)
6803 (version "0.59.0")
6804 (source
6805 (origin
6806 (method url-fetch)
6807 (uri (pypi-uri "websocket-client" version))
6808 (sha256
6809 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
6810 (native-inputs
6811 (modify-inputs native-inputs
6812 (append python-six)))))
6813
6814(define-public python-purl
6815 (package
6816 (name "python-purl")
6817 (version "1.6")
6818 (source
6819 (origin
6820 (method git-fetch)
6821 (uri (git-reference
6822 (url "https://github.com/codeinthehole/purl")
6823 (commit version)))
6824 (file-name (git-file-name name version))
6825 (sha256
6826 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
6827 (build-system pyproject-build-system)
6828 (arguments
6829 (list
6830 #:test-flags #~(list "--pyargs" "./tests")))
6831 (native-inputs (list python-pytest python-setuptools))
6832 (propagated-inputs (list python-six))
6833 (home-page "https://github.com/codeinthehole/purl")
6834 (synopsis "Python package for URL manipulation")
6835 (description "Purl is a Python package for handling URLs.")
6836 (license license:expat)))
6837
6838(define-public python-apiron
6839 (package
6840 (name "python-apiron")
6841 (version "5.1.0")
6842 (source
6843 (origin
6844 (method url-fetch)
6845 (uri (pypi-uri "apiron" version))
6846 (sha256
6847 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
6848 (build-system pyproject-build-system)
6849 (arguments
6850 (list #:test-flags '(list "-k" "not test_call")))
6851 (propagated-inputs
6852 (list python-requests))
6853 (native-inputs
6854 (list python-pytest python-pytest-cov
6855 python-setuptools python-wheel))
6856 (home-page "https://github.com/ithaka/apiron")
6857 (synopsis "Python wrapper for interacting with RESTful APIs")
6858 (description
6859 "@code{apiron} provides a declarative, structured configuration of
6860services and endpoints with a unified interface for interacting with RESTful
6861APIs.")
6862 (license license:expat)))
6863
6864(define-public python-beren
6865 (package
6866 (name "python-beren")
6867 (version "0.7.0")
6868 (source
6869 (origin
6870 (method git-fetch)
6871 (uri (git-reference
6872 (url "https://github.com/teffalump/beren")
6873 (commit (string-append "v" version))))
6874 (file-name (git-file-name name version))
6875 (sha256
6876 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
6877 (build-system pyproject-build-system)
6878 (arguments
6879 ;; The test tries to open a connection to a remote server.
6880 `(#:tests? #f))
6881 (native-inputs (list python-setuptools))
6882 (propagated-inputs (list python-apiron))
6883 (home-page "https://github.com/teffalump/beren")
6884 (synopsis "REST client for Orthanc DICOM servers")
6885 (description
6886 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
6887 (license license:gpl3+)))
6888
6889(define-public python-requests
6890 (package
6891 (name "python-requests")
6892 (version "2.32.5")
6893 (source (origin
6894 (method url-fetch)
6895 (uri (pypi-uri "requests" version))
6896 (sha256
6897 (base32
6898 "1kypqz701x9s7j4shm1pdnzy4pzx9lmvhwgan0yqa071asn0pfnv"))))
6899 (build-system pyproject-build-system)
6900 (arguments
6901 (list #:test-flags
6902 ;; These require internet access
6903 '(list "--ignore=tests/test_requests.py"
6904 "-k" (string-append "not test_use_proxy_from_environment"
6905 " and not requests.sessions.Session"
6906 " and not requests.models.PreparedRequest"
6907 " and not requests.api.request")
6908 "tests/")))
6909 (propagated-inputs
6910 (list python-certifi
6911 python-charset-normalizer
6912 python-idna
6913 python-urllib3))
6914 (native-inputs
6915 (list python-pytest
6916 python-pytest-mock
6917 python-setuptools))
6918 (home-page "https://requests.readthedocs.io/")
6919 (synopsis "Python HTTP library")
6920 (description
6921 "Requests is a Python HTTP client library. It aims to be easier to use
6922than Python’s urllib2 library.")
6923 (license license:asl2.0)))
6924
6925(define-public python-requests-kerberos
6926 (package
6927 (name "python-requests-kerberos")
6928 (version "0.14.0")
6929 ;; No tests in the PyPI tarball.
6930 (source
6931 (origin
6932 (method git-fetch)
6933 (uri (git-reference
6934 (url "https://github.com/requests/requests-kerberos")
6935 (commit (string-append "v" version))))
6936 (file-name (git-file-name name version))
6937 (sha256
6938 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
6939 (build-system pyproject-build-system)
6940 (propagated-inputs (list python-cryptography
6941 python-pyspnego
6942 python-requests))
6943 (native-inputs (list python-pytest python-pytest-mock python-setuptools
6944 python-wheel))
6945 (home-page "https://github.com/requests/requests-kerberos")
6946 (synopsis "Kerberos authentication handler for python-requests")
6947 (description "This package provides a Kerberos authentication handler for
6948python-requests.")
6949 (license license:isc)))
6950
6951(define-public python-requests-unixsocket2
6952 (package
6953 (name "python-requests-unixsocket2")
6954 (version "1.0.1")
6955 (source
6956 (origin
6957 (method git-fetch)
6958 (uri (git-reference
6959 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
6960 (commit (string-append "v" version))))
6961 (sha256
6962 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
6963 (build-system pyproject-build-system)
6964 (native-inputs
6965 (list nss-certs-for-test
6966 python-hatchling
6967 python-pytest
6968 python-waitress))
6969 (propagated-inputs
6970 (list python-requests
6971 python-urllib3))
6972 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
6973 (synopsis "Talk HTTP via a UNIX domain socket")
6974 (description
6975 "This Python package lets you use the @code{requests} library to talk
6976HTTP via a UNIX domain socket.")
6977 (license license:asl2.0)))
6978
6979(define-public python-requests-ntlm
6980 (package
6981 (name "python-requests-ntlm")
6982 (version "1.3.0")
6983 (source
6984 (origin
6985 (method git-fetch)
6986 (uri (git-reference
6987 (url "https://github.com/requests/requests-ntlm")
6988 (commit (string-append "v" version))))
6989 (file-name (git-file-name name version))
6990 (sha256
6991 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
6992 (build-system pyproject-build-system)
6993 (arguments
6994 (list
6995 #:test-flags
6996 ;; XXX: Connection refused.
6997 #~(list "-k" (string-join
6998 (list "not test_ntlm_http_with_cbt"
6999 "test_ntlm_http_without_cbt"
7000 "test_ntlm_https_with_cbt"
7001 "test_ntlm_https_without_cbt")
7002 " and not "))
7003 #:phases
7004 #~(modify-phases %standard-phases
7005 (add-before 'check 'spawn-test-server
7006 (lambda _
7007 ;; Taken from .github/workflows/ci.yml.
7008 (spawn "python"
7009 (list "python" "-m" "tests.test_server")))))))
7010 (propagated-inputs
7011 (list python-cryptography python-pyspnego python-requests))
7012 (native-inputs (list python-flask python-pytest python-setuptools))
7013 (home-page "https://github.com/requests/requests-ntlm")
7014 (synopsis "NTLM authentication support for Requests")
7015 (description
7016 "This package allows for HTTP NTLM authentication using the requests
7017library.")
7018 (license license:isc)))
7019
7020(define-public python-requests-mock
7021 (package
7022 (name "python-requests-mock")
7023 (version "1.12.1")
7024 (source
7025 (origin
7026 (method url-fetch)
7027 (uri (pypi-uri "requests-mock" version))
7028 (sha256
7029 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
7030 (build-system pyproject-build-system)
7031 (native-inputs
7032 (list python-purl
7033 python-pytest
7034 python-requests-futures
7035 python-setuptools
7036 python-setuptools-scm
7037 python-testtools))
7038 (propagated-inputs
7039 (list python-requests))
7040 (home-page "https://requests-mock.readthedocs.org/")
7041 (synopsis "Mock out responses from the requests package")
7042 (description
7043 "This module provides a building block to stub out the HTTP requests
7044portions of your testing code.")
7045 (license license:asl2.0)))
7046
7047(define-public python-requests-toolbelt
7048 (package
7049 (name "python-requests-toolbelt")
7050 (version "1.0.0")
7051 (source
7052 (origin
7053 (method url-fetch)
7054 (uri (pypi-uri "requests-toolbelt" version))
7055 (sha256
7056 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
7057 (build-system pyproject-build-system)
7058 (arguments
7059 (list
7060 #:test-flags
7061 ;; Requiring networking or fail due not valid certs: AttributeError:
7062 ;; 'MockHTTPResponse' object has no attribute 'close'
7063 #~(list "-k" (string-append "not test_dump_all"
7064 " and not test_dump_response"
7065 " and not test_prepared_request_override_base"
7066 " and not test_prepared_request_with_base"
7067 " and not test_request_override_base"
7068 " and not test_request_with_base"))))
7069 (native-inputs
7070 (list python-betamax
7071 python-mock
7072 python-pyopenssl
7073 python-pytest
7074 python-setuptools
7075 python-trustme
7076 python-wheel))
7077 (propagated-inputs
7078 (list python-requests))
7079 (synopsis "Extensions to python-requests")
7080 (description "This is a toolbelt of useful classes and functions to be used
7081with python-requests.")
7082 (home-page "https://github.com/requests/toolbelt/")
7083 (license license:asl2.0)))
7084
7085(define-public python-requests-ftp
7086 (package
7087 (name "python-requests-ftp")
7088 (version "0.3.1")
7089 (source
7090 (origin
7091 (method git-fetch)
7092 (uri (git-reference
7093 (url "https://github.com/Lukasa/requests-ftp")
7094 (commit (string-append "v" version))))
7095 (file-name (git-file-name name version))
7096 (sha256
7097 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
7098 (build-system pyproject-build-system)
7099 (arguments
7100 ;; XXX: No connection adapters found.
7101 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
7102 (native-inputs
7103 (list python-pyftpdlib python-pytest python-setuptools python-six))
7104 (propagated-inputs (list python-requests))
7105 (home-page "https://github.com/Lukasa/requests-ftp")
7106 (synopsis "FTP Transport Adapter for Requests")
7107 (description "Requests-FTP is an implementation of a simple FTP transport
7108adapter for use with the Requests library.")
7109 (license license:asl2.0)))
7110
7111(define-public python-aioftp
7112 (package
7113 (name "python-aioftp")
7114 (version "0.27.2")
7115 (source (origin
7116 (method url-fetch)
7117 (uri (pypi-uri "aioftp" version))
7118 (sha256
7119 (base32
7120 "06i6xfxxrwncmgihp98jxhy7xngsv2gzv9ijk32rc5q840r8q13w"))))
7121 (build-system pyproject-build-system)
7122 (native-inputs
7123 (list python-async-timeout
7124 python-pytest
7125 python-pytest-asyncio
7126 python-pytest-cov
7127 python-pytest-mock
7128 python-setuptools
7129 python-siosocks
7130 python-trustme))
7131 (home-page "https://aioftp.readthedocs.io/")
7132 (synopsis "FTP client/server for asyncio in Python")
7133 (description
7134 "FTP client and server for asyncio (Python 3) Library implementing FTP
7135protocol, both client and server for Python asyncio module.
7136
7137 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
7138 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
7139 REST, LIST (as fallback).
7140
7141 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
7142 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
7143 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
7144 (license license:asl2.0)))
7145
7146(define-public python-mohawk
7147 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
7148 (revision "0"))
7149 (package
7150 (name "python-mohawk")
7151 (version (git-version "1.1.0" revision commit))
7152 (source
7153 (origin
7154 (method git-fetch)
7155 (uri (git-reference
7156 (url "https://github.com/kumar303/mohawk")
7157 (commit commit)))
7158 (file-name (git-file-name name version))
7159 (sha256
7160 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
7161 (patches
7162 (search-patches "python-mohawk-pytest.patch"))))
7163 (build-system pyproject-build-system)
7164 (arguments
7165 (list #:test-flags #~(list "mohawk/tests.py")))
7166 (native-inputs (list python-pytest python-setuptools))
7167 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
7168 ;python-six is removed?
7169 (home-page "https://github.com/kumar303/mohawk")
7170 (synopsis "Library for Hawk HTTP authorization")
7171 (description
7172 "Mohawk is an alternate Python implementation of the Hawk HTTP
7173authorization scheme.")
7174 (license license:bsd-3))))
7175
7176(define-public python-msal
7177 (package
7178 (name "python-msal")
7179 (version "1.34.0")
7180 (home-page
7181 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
7182 (source
7183 (origin
7184 (method git-fetch)
7185 (uri (git-reference
7186 (url home-page)
7187 (commit version)))
7188 (file-name (git-file-name name version))
7189 (sha256
7190 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
7191 (patches (search-patches "python-msal-requests.patch"))))
7192 (build-system pyproject-build-system)
7193 (arguments
7194 (list
7195 #:test-flags
7196 #~(list
7197 "--ignore=tests/test_benchmark.py"
7198 ;; XXX: Ignoring cryptography version scheme tests.
7199 "-k"
7200 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
7201 ;; XXX: These tests try to access the network.
7202 "--ignore=tests/test_application.py"
7203 "--ignore=tests/test_ccs.py"
7204 ;; XXX: These tests assume they are run on Windows.
7205 "--ignore=tests/test_mi.py")
7206 #:phases
7207 #~(modify-phases %standard-phases
7208 (add-after 'unpack 'set-cryptography-version
7209 (lambda _
7210 (substitute* "tests/test_cryptography.py"
7211 (("^latest_cryptography_version = @version@")
7212 (format #f "latest_cryptography_version = ~s"
7213 #$(package-version
7214 (this-package-input "python-cryptography")))))))
7215 (add-before 'check 'configure-tests
7216 (lambda* (#:key tests? #:allow-other-keys)
7217 (when tests?
7218 (setenv "TRAVIS_TAG" "1")))))))
7219 (native-inputs
7220 (list nss-certs-for-test python-mock python-pytest python-setuptools))
7221 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
7222 (synopsis "Microsoft Authentication Library (MSAL) for Python")
7223 (description
7224 "The Microsoft Authentication Library for Python enables applications to
7225integrate with the Microsoft identity platform. It allows you to sign in
7226users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
7227Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
7228Microsoft Graph or your own APIs registered with the Microsoft identity
7229platform. It is built using industry standard OAuth2 and OpenID Connect
7230protocols.")
7231 (license license:expat)))
7232
7233(define-public oauth2ms
7234 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
7235 (revision "0"))
7236 (package
7237 (name "oauth2ms")
7238 (version (git-version "0.0.0" revision commit))
7239 (source (origin
7240 (method git-fetch)
7241 (uri (git-reference
7242 (url "https://github.com/harishkrupo/oauth2ms")
7243 (commit commit)))
7244 (file-name (git-file-name name version))
7245 (sha256
7246 (base32
7247 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
7248 (build-system copy-build-system)
7249 (arguments
7250 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
7251 ("." #$(string-append "share/doc/" name "-"
7252 version "/")
7253 #:include-regexp ("\\.org$")))
7254 #:phases #~(modify-phases %standard-phases
7255 (add-after 'install 'wrap-pythonpath
7256 (lambda* (#:key inputs outputs #:allow-other-keys)
7257 (let ((path (getenv "GUIX_PYTHONPATH")))
7258 (wrap-program (string-append #$output
7259 "/bin/oauth2ms")
7260 `("GUIX_PYTHONPATH" ":" prefix
7261 (,path)))))))))
7262 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
7263 (home-page "https://github.com/harishkrupo/oauth2ms")
7264 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
7265 (description
7266 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
7267endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
7268used as authentication in IMAP mail servers.")
7269 (license license:asl2.0))))
7270
7271(define-public python-oauthlib
7272 (package
7273 (name "python-oauthlib")
7274 (version "3.3.1")
7275 (source
7276 (origin
7277 (method git-fetch)
7278 (uri (git-reference
7279 (url "https://github.com/oauthlib/oauthlib")
7280 (commit (string-append "v" version))))
7281 (file-name (git-file-name name version))
7282 (sha256
7283 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
7284 (build-system pyproject-build-system)
7285 (native-inputs (list python-pytest python-pytest-cov python-mock
7286 python-setuptools))
7287 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
7288 (home-page "https://github.com/oauthlib/oauthlib")
7289 (synopsis "OAuth implementation for Python")
7290 (description
7291 "Oauthlib is a generic, spec-compliant, thorough implementation of the
7292OAuth request-signing logic.")
7293 (license license:bsd-3)))
7294
7295(define-public python-urllib3
7296 (package
7297 (name "python-urllib3")
7298 (version "2.5.0")
7299 (source
7300 (origin
7301 (method url-fetch)
7302 (uri (pypi-uri "urllib3" version))
7303 (sha256
7304 (base32
7305 "0q17z6zlpyjv9ax5c3d30qwp9fwhz2sc4gbb7yyd86g4qwrpgi1z"))))
7306 (build-system pyproject-build-system)
7307 (arguments `(#:tests? #f))
7308 (native-inputs
7309 (list python-hatch-vcs
7310 python-hatchling
7311 python-setuptools-scm))
7312 (propagated-inputs
7313 (append
7314 ;; These 5 inputs are used to build urrlib3[secure]
7315 (list python-certifi)
7316 (if (member (%current-system)
7317 (package-transitive-supported-systems python-cryptography))
7318 (list python-cryptography)
7319 '())
7320 (list python-idna)
7321 (if (member (%current-system)
7322 (package-transitive-supported-systems python-pyopenssl))
7323 (list python-pyopenssl)
7324 '())
7325 (list python-pysocks)))
7326 (home-page "https://urllib3.readthedocs.io/")
7327 (synopsis "HTTP library with thread-safe connection pooling")
7328 (description
7329 "Urllib3 supports features left out of urllib and urllib2 libraries. It
7330can reuse the same socket connection for multiple requests, it can POST files,
7331supports url redirection and retries, and also gzip and deflate decoding.")
7332 (license license:expat)))
7333
7334(define-public python-urllib3-1.25
7335 (package
7336 (inherit python-urllib3)
7337 (version "1.25.19")
7338 (source
7339 (origin
7340 (method url-fetch)
7341 (uri (pypi-uri "urllib3" version))
7342 (sha256
7343 (base32
7344 "09rmjqm5syhhc8fx3v06h3yv6cqy0b1081jg8wm5grpwpr72j61h"))))
7345 (native-inputs
7346 (list python-setuptools
7347 python-wheel))))
7348
7349(define-public python-urllib3-1.26
7350 (package
7351 (inherit python-urllib3)
7352 (version "1.26.17")
7353 (source
7354 (origin
7355 (method url-fetch)
7356 (uri (pypi-uri "urllib3" version))
7357 (sha256
7358 (base32
7359 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
7360 (native-inputs
7361 (list python-setuptools
7362 python-wheel))))
7363
7364(define-public python-awscrt
7365 (package
7366 (name "python-awscrt")
7367 (version "0.26.1")
7368 (source
7369 (origin
7370 (method url-fetch)
7371 (uri (pypi-uri "awscrt" version))
7372 (sha256
7373 (base32 "0plkc0i0gc6z8fqnyy8kbg43sv3jnv8shcavcz0wb134riykmmm8"))))
7374 (build-system pyproject-build-system)
7375 (arguments
7376 (list
7377 #:test-backend #~'unittest
7378 #:test-flags #~(list "discover" "--verbose")
7379 #:phases
7380 #~(modify-phases %standard-phases
7381 (add-after 'unpack 'disable-broken-tests
7382 (lambda _
7383 ;; Disable broken tests. These tests fail because the
7384 ;; certificate bundle at the default location does not exist.
7385 (substitute* "test/test_auth.py"
7386 (("def test_default_provider")
7387 "def _test_default_provider"))
7388 (substitute* "test/test_http_client.py"
7389 (("def test_h2_client")
7390 "def _test_h2_client"))
7391 (substitute* "test/test_s3.py"
7392 (("def test_sanity")
7393 "def _test_sanity")
7394 (("def test_sanity_secure")
7395 "def _test_sanity_secure")
7396 (("def test_wait_shutdown")
7397 "def _test_wait_shutdown"))))
7398 (add-after 'unpack 'override-cert-bundle-location
7399 (lambda* (#:key inputs #:allow-other-keys)
7400 (let ((bundle (search-input-file inputs
7401 "/etc/ssl/certs/ca-certificates.crt")))
7402 (setenv "SSL_CERT_FILE" bundle)
7403 (substitute* "awscrt/io.py"
7404 (("( +)opt = TlsContextOptions\\(\\)" m indent)
7405 (string-append m "\n"
7406 indent "import os\n"
7407 indent "\
7408opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n")))
7409 (substitute* "test/appexit_http.py"
7410 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
7411 (string-append m indent
7412 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
7413 bundle "')\n")))
7414 (substitute* "test/test_io.py"
7415 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
7416 (string-append m indent
7417 "opt.override_default_trust_store_from_path(None, '"
7418 bundle "')\n"))))))
7419 (add-after 'unpack 'use-system-libraries
7420 (lambda _
7421 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
7422 (inputs (list openssl))
7423 (native-inputs (list cmake-minimal
7424 nss-certs-for-test
7425 python-boto3
7426 python-setuptools
7427 python-websockets))
7428 (home-page "https://github.com/awslabs/aws-crt-python")
7429 (synopsis "Common runtime for AWS Python projects")
7430 (description
7431 "This package provides a common runtime for AWS Python projects.")
7432 (license license:asl2.0)))
7433
7434(define-public awscli
7435 (package
7436 ;; Note: updating awscli typically requires updating botocore as well.
7437 (name "awscli")
7438 (version "1.43.11")
7439 (source
7440 (origin
7441 (method git-fetch)
7442 (uri (git-reference
7443 (url "https://github.com/aws/aws-cli")
7444 (commit version)))
7445 (file-name (git-file-name name version))
7446 (sha256
7447 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
7448 (build-system pyproject-build-system)
7449 (arguments
7450 (list
7451 ;; tests: 2715 passed, 32 warnings
7452 #:test-flags
7453 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7454 ;; Complete test suite is huge and compute hungry, run just unit
7455 ;; tests.
7456 "--ignore=tests/dependencies"
7457 "--ignore=tests/functional"
7458 "--ignore=tests/integration"
7459 ;; TypeError: 'Mock' object is not subscriptable.
7460 "-k" "not test_no_groff_or_mandoc_exists")
7461 #:phases
7462 #~(modify-phases %standard-phases
7463 (add-after 'unpack 'fix-reference-to-groff
7464 (lambda _
7465 ;; XXX: Consider to use wrap-program instead, it tries to parse
7466 ;; the PATH.
7467 (substitute* "awscli/help.py"
7468 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
7469 (("raise ExecutableNotFoundError\\('groff'\\)") "")
7470 (("cmdline = \\['groff'")
7471 (format #f "cmdline = ['~a/bin/groff'"
7472 #$(this-package-input "groff-minimal"))))))
7473 (add-before 'check 'set-environment
7474 (lambda _
7475 ;; PermissionError: [Errno 13] Permission denied:
7476 ;; '/homeless-shelter'
7477 (setenv "HOME" "/tmp"))))))
7478 (native-inputs
7479 (list python-pytest
7480 python-pytest-xdist
7481 python-setuptools
7482 python-wheel))
7483 (inputs
7484 (list groff-minimal
7485 python-botocore
7486 python-colorama
7487 python-docutils-0.19
7488 python-pyyaml
7489 python-rsa-for-awscli-1
7490 python-s3transfer))
7491 (home-page "https://aws.amazon.com/cli/")
7492 (synopsis "Command line client for AWS")
7493 (description
7494 "AWS CLI provides a unified command line interface to the Amazon Web
7495Services (AWS) API.")
7496 (license license:asl2.0)))
7497
7498(define-public awscli-2
7499 (package
7500 (inherit awscli)
7501 ;; Note: updating awscli-2 typically requires updating python-awscrt.
7502 (name "awscli")
7503 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
7504 ;; any fresh one compatible with current state of dependencies in Guix.
7505 (version "2.28.0")
7506 (source
7507 (origin
7508 (method git-fetch)
7509 (uri (git-reference
7510 (url "https://github.com/aws/aws-cli")
7511 (commit version)))
7512 (file-name (git-file-name name version))
7513 (sha256
7514 (base32
7515 "1a1jzvdm434x46yh7ir11lw0nzc64ns4qvxhp5wfra3rh5ykf36j"))))
7516 (build-system pyproject-build-system)
7517 (arguments
7518 (list
7519 ;; When updating and checking locally be very patient as build phase may
7520 ;; hang for 6-8 minutes but eventually passes through.
7521 ;;
7522 ;; tests: 4189 passed, 1 skipped, 2 warnings
7523 #:test-flags
7524 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7525 ;; Full test suite contains more than 70k tests; ignore network
7526 ;; dependent, slow and compute intense tests, keep just unit
7527 ;; tests.
7528 "--ignore=tests/backends"
7529 "--ignore=tests/dependencies"
7530 "--ignore=tests/functional"
7531 "--ignore=tests/integration"
7532 "--ignore=tests/unit/botocore"
7533 ;; Flaky, something to do with PATH disappearing from os.environ?
7534 ;; Passes when run on its own, so maybe something else is
7535 ;; modifying this during the test run.
7536 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
7537 ;; TypeError: 'Mock' object is not subscriptable
7538 "-k" "not test_no_groff_or_mandoc_exists")
7539 #:phases
7540 #~(modify-phases %standard-phases
7541 (add-after 'unpack 'ignore-deprecations
7542 (lambda _
7543 (substitute* "pyproject.toml"
7544 (("\"error::") "\"ignore::"))))
7545 (add-after 'unpack 'fix-reference-to-groff
7546 (lambda* (#:key inputs #:allow-other-keys)
7547 (substitute* "awscli/help.py"
7548 (("if self._exists_on_path\\('groff'\\):") "if True:")
7549 (("cmdline = \\['groff'")
7550 (string-append "cmdline = ['"
7551 (search-input-file inputs "bin/groff")
7552 "'")))))
7553 (add-before 'check 'pre-check
7554 (lambda _ (setenv "HOME" "/tmp"))))))
7555 (inputs
7556 (list groff
7557 ;; less
7558 nss-certs-for-test
7559 python-awscrt
7560 python-colorama
7561 python-dateutil
7562 python-distro
7563 python-docutils
7564 python-jmespath
7565 python-prompt-toolkit
7566 python-ruamel.yaml
7567 python-ruamel.yaml.clib
7568 python-urllib3))
7569 (native-inputs
7570 (list python-flit-core
7571 python-pytest
7572 python-pytest-xdist))))
7573
7574(define-public python-wsgiproxy2
7575 (package
7576 (name "python-wsgiproxy2")
7577 (version "0.5.1")
7578 (source
7579 (origin
7580 (method git-fetch)
7581 (uri (git-reference
7582 (url "https://github.com/gawel/WSGIProxy2/")
7583 (commit version)))
7584 (file-name (git-file-name name version))
7585 (sha256
7586 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
7587 (build-system pyproject-build-system)
7588 (arguments (list #:test-backend #~'unittest))
7589 (native-inputs (list python-webtest python-setuptools))
7590 (propagated-inputs (list python-requests python-six python-urllib3
7591 python-webob))
7592 (home-page "https://github.com/gawel/WSGIProxy2/")
7593 (synopsis "WSGI Proxy with various http client backends")
7594 (description
7595 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
7596function calls into HTTP requests. It also includes code to sign requests and
7597pass private data, and to spawn subprocesses to handle requests.")
7598 (license license:expat)))
7599
7600(define-public python-pastedeploy
7601 (package
7602 (name "python-pastedeploy")
7603 (version "3.1.0")
7604 (source
7605 (origin
7606 (method url-fetch)
7607 (uri (pypi-uri "PasteDeploy" version))
7608 (sha256
7609 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
7610 (build-system pyproject-build-system)
7611 (native-inputs (list python-pytest python-pytest-cov python-setuptools))
7612 (home-page "https://pylonsproject.org/")
7613 (synopsis "Load, configure, and compose WSGI applications and servers")
7614 (description
7615 "This tool provides code to load WSGI applications and servers from URIs;
7616these URIs can refer to Python Eggs for INI-style configuration files. Paste
7617Script provides commands to serve applications based on this configuration
7618file.")
7619 (license license:expat)))
7620
7621(define-public python-webtest
7622 (package
7623 (name "python-webtest")
7624 (version "3.0.6")
7625 (source
7626 (origin
7627 (method url-fetch)
7628 (uri (pypi-uri "webtest" version))
7629 (sha256
7630 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
7631 (build-system pyproject-build-system)
7632 (arguments
7633 ;; Tests require python-pyquery, which creates a circular dependency.
7634 `(#:tests? #f))
7635 (native-inputs
7636 (list python-setuptools))
7637 (propagated-inputs
7638 (list python-beautifulsoup4
7639 python-waitress
7640 python-webob))
7641 (home-page "https://docs.pylonsproject.org/projects/webtest/")
7642 (synopsis "Helper to test WSGI applications")
7643 (description
7644 "Webtest allows you to test your Python web applications without
7645starting an HTTP server. It supports anything that supports the minimum of
7646WSGI.")
7647 (license license:expat)))
7648
7649(define-public python-flask
7650 (package
7651 (name "python-flask")
7652 (version "3.1.0")
7653 (source
7654 (origin
7655 (method url-fetch)
7656 (uri (pypi-uri "flask" version))
7657 (sha256
7658 (base32 "1b1nb250jxrjplbs21wnwq69250vs3iz2pdhs7cwi5y8hi8kr1sz"))))
7659 (build-system pyproject-build-system)
7660 (native-inputs
7661 (list python-flit-core
7662 python-pytest))
7663 (propagated-inputs
7664 (list python-asgiref ;async extra
7665 python-click
7666 python-blinker
7667 python-itsdangerous
7668 python-jinja2
7669 python-werkzeug))
7670 (home-page "https://palletsprojects.com/p/flask/")
7671 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
7672 (description "Flask is a micro web framework based on the Werkzeug toolkit
7673and Jinja2 template engine. It is called a micro framework because it does not
7674presume or force a developer to use a particular tool or library.")
7675 (license license:bsd-3)))
7676
7677(define-public python-flask-compress
7678 (package
7679 (name "python-flask-compress")
7680 (version "1.18")
7681 (source (origin
7682 (method url-fetch)
7683 (uri (pypi-uri "flask_compress" version))
7684 (sha256
7685 (base32
7686 "0fj1r0ixsjls7z3a2zzamxppjz4qcf8q4jcmn74gsk9kisyy3fpx"))))
7687 (build-system pyproject-build-system)
7688 (native-inputs
7689 (list python-flask-caching
7690 python-pytest
7691 python-setuptools
7692 python-setuptools-scm))
7693 (propagated-inputs
7694 (list python-brotli
7695 python-flask
7696 python-pyzstd))
7697 (home-page "https://github.com/colour-science/flask-compress")
7698 (synopsis "Compress responses in a Flask app")
7699 (description
7700 "This package lets you compress Flask application responses and static
7701files with gzip, deflate or brotli. Flask-Compress both adds the various
7702headers required for a compressed response and compresses the response data.")
7703 (license license:expat)))
7704
7705(define-public python-flask-seasurf
7706 (package
7707 (name "python-flask-seasurf")
7708 (version "2.0.0")
7709 (source (origin
7710 (method url-fetch)
7711 (uri (pypi-uri "Flask-SeaSurf" version))
7712 (sha256
7713 (base32
7714 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
7715 (build-system pyproject-build-system)
7716 (arguments
7717 (list #:tests? #false)) ;there are none
7718 (propagated-inputs (list python-flask))
7719 (native-inputs (list python-setuptools python-wheel))
7720 (home-page "https://github.com/maxcountryman/flask-seasurf/")
7721 (synopsis "CSRF extension for Flask")
7722 (description "SeaSurf is a Flask extension for preventing cross-site
7723request forgery (CSRF). CSRF attacks are problematic because the mechanism
7724they use is relatively easy to exploit. This extension attempts to aid you in
7725securing your application from such attacks. This extension is based on the
7726Django middleware.")
7727 (license license:bsd-3)))
7728
7729(define-public python-flask-wtf
7730 (package
7731 (name "python-flask-wtf")
7732 (version "1.2.2")
7733 (source
7734 (origin
7735 (method url-fetch)
7736 (uri (pypi-uri "Flask-WTF" version))
7737 (sha256
7738 (base32
7739 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
7740 (build-system pyproject-build-system)
7741 (propagated-inputs
7742 (list python-flask python-flask python-itsdangerous python-wtforms))
7743 (native-inputs
7744 (list python-hatchling python-pytest))
7745 (home-page "https://github.com/lepture/flask-wtf")
7746 (synopsis "Simple integration of Flask and WTForms")
7747 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
7748upload, and reCAPTCHA.")
7749 (license license:bsd-3)))
7750
7751(define-public python-flask-multistatic
7752 (package
7753 (name "python-flask-multistatic")
7754 (version "1.0")
7755 (source
7756 (origin
7757 (method url-fetch)
7758 (uri (pypi-uri "flask-multistatic" version))
7759 (sha256
7760 (base32
7761 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
7762 (build-system pyproject-build-system)
7763 (arguments (list #:tests? #f)) ; No tests upstream.
7764 (native-inputs (list python-setuptools))
7765 (propagated-inputs (list python-flask))
7766 (home-page "https://pagure.io/flask-multistatic")
7767 (synopsis "Flask plugin to allow overriding static files")
7768 (description "@code{flask-multistatic} is a flask plugin that adds support
7769for overriding static files.")
7770 (license license:gpl3+)))
7771
7772(define-public python-responses
7773 (package
7774 (name "python-responses")
7775 (version "0.25.3")
7776 (source (origin
7777 (method url-fetch)
7778 (uri (pypi-uri "responses" version))
7779 (sha256
7780 (base32
7781 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
7782 (build-system pyproject-build-system)
7783 (native-inputs
7784 (list python-pytest
7785 python-pytest-asyncio
7786 python-pytest-httpserver
7787 python-setuptools
7788 python-tomli
7789 python-tomli-w
7790 python-wheel))
7791 (propagated-inputs
7792 (list python-requests
7793 python-pyyaml
7794 python-urllib3))
7795 (home-page "https://github.com/getsentry/responses")
7796 (synopsis "Utility for mocking out the `requests` Python library")
7797 (description "A utility library for mocking out the `requests` Python
7798library.")
7799 (license license:asl2.0)))
7800
7801(define-public python-grequests
7802 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
7803 (revision "0"))
7804 (package
7805 (name "python-grequests")
7806 (version (git-version "0.7.0" revision commit))
7807 (source
7808 (origin
7809 (method git-fetch)
7810 (uri (git-reference
7811 (url "https://github.com/kennethreitz/grequests")
7812 (commit commit)))
7813 (file-name (git-file-name name version))
7814 (sha256
7815 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
7816 (build-system pyproject-build-system)
7817 (arguments
7818 (list
7819 ;; XXX: Most failing tests seem to be caused by network access,
7820 ;; but there is no easy/flag way to disable tests selectively.
7821 #:tests? #f
7822 #:test-backend #~'unittest
7823 #:test-flags #~(list "tests.py")))
7824 (propagated-inputs (list python-gevent python-requests))
7825 (native-inputs (list python-setuptools))
7826 (home-page "https://github.com/kennethreitz/grequests")
7827 (synopsis "Python library for asynchronous HTTP requests")
7828 (description
7829 "GRequests is a Python library that allows you to use @code{Requests}
7830with @code{Gevent} to make asynchronous HTTP Requests easily.")
7831 (license license:bsd-2))))
7832
7833(define-public python-gwebsockets
7834 (package
7835 (name "python-gwebsockets")
7836 (version "0.7")
7837 (source
7838 (origin
7839 (method git-fetch)
7840 (uri (git-reference
7841 (url "https://github.com/sugarlabs/gwebsockets")
7842 (commit (string-append "v" version))))
7843 (file-name (git-file-name name version))
7844 (sha256
7845 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
7846 (build-system pyproject-build-system)
7847 (arguments (list #:tests? #f)) ; No tests upstream.
7848 (native-inputs (list python-setuptools))
7849 (propagated-inputs (list python-pygobject))
7850 (home-page "https://github.com/sugarlabs/gwebsockets")
7851 (synopsis "GLib based websockets server")
7852 (description
7853 "This package provides a websocket server written in Python. It uses GIO
7854for network communication and hence it easily integrates with the GLib
7855mainloop.")
7856 (license license:asl2.0)))
7857
7858(define-public python-dpkt
7859 (package
7860 (name "python-dpkt")
7861 (version "1.9.8")
7862 (source
7863 (origin
7864 (method git-fetch)
7865 (uri (git-reference
7866 (url "https://github.com/kbandla/dpkt")
7867 (commit (string-append "v" version))))
7868 (file-name (git-file-name name version))
7869 (sha256
7870 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
7871 (build-system pyproject-build-system)
7872 (arguments
7873 (list
7874 #:test-flags
7875 #~(list "--pyargs" "dpkt")))
7876 (native-inputs (list python-pytest python-pytest-cov python-setuptools))
7877 (home-page "https://github.com/kbandla/dpkt")
7878 (synopsis "Packet generator and parser for TCP/IP protocols")
7879 (description
7880 "The dpkt module is a fast, simple packet generator and parser for the
7881basic TCP/IP protocols.")
7882 (license license:bsd-3)))
7883
7884(define-public python-geventhttpclient
7885 (package
7886 (name "python-geventhttpclient")
7887 (version "2.3.3")
7888 (source (origin
7889 (method git-fetch)
7890 (uri (git-reference
7891 (url "https://github.com/geventhttpclient/geventhttpclient")
7892 (commit version)
7893 (recursive? #true)))
7894 (file-name (git-file-name name version))
7895 (sha256
7896 (base32
7897 "1ya0i0fbx054mfx5d1k75fcf64xzp7vva8lkwwzan41xbnc56nyj"))))
7898 (build-system pyproject-build-system)
7899 (arguments
7900 (list
7901 #:test-flags
7902 ;; Disable network tests.
7903 '(list "-k"
7904 (string-append "not test_client_simple"
7905 " and not test_client_ssl"
7906 " and not test_client_with_default_headers"
7907 " and not test_client_without_leading_slash"
7908 " and not test_download"
7909 " and not test_fail_invalid_ca_certificate"
7910 " and not test_httpbin_multipart"
7911 " and not test_multi_queries_greenlet_safe"
7912 " and not test_no_form_encode_header"
7913 " and not test_no_form_encoded_header"
7914 " and not test_request_with_headers"
7915 " and not test_response_context_manager"
7916 " and not test_urllib_request"))))
7917 (native-inputs (list nss-certs-for-test
7918 python-dpkt python-pytest python-requests
7919 python-setuptools python-wheel))
7920 (propagated-inputs (list python-brotli python-certifi python-gevent
7921 python-urllib3))
7922 (home-page "https://github.com/geventhttpclient/geventhttpclient")
7923 (synopsis "HTTP client library for gevent")
7924 (description "@code{python-geventhttpclient} is a high performance,
7925concurrent HTTP client library for python using @code{gevent}.")
7926 (license license:expat)))
7927
7928(define-public python-gevent-websocket
7929 (package
7930 (name "python-gevent-websocket")
7931 (version "0.10.1")
7932 (source
7933 (origin
7934 (method url-fetch)
7935 (uri (pypi-uri "gevent-websocket" version))
7936 (sha256
7937 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
7938 (build-system pyproject-build-system)
7939 (arguments
7940 (list #:tests? #f)) ; no tests in PyPI or git
7941 (native-inputs
7942 (list python-setuptools
7943 python-wheel))
7944 (propagated-inputs
7945 (list python-gevent))
7946 (home-page "https://gitlab.com/noppo/gevent-websocket")
7947 (synopsis "Websocket handler for the gevent pywsgi server")
7948 (description
7949 "Websocket handler for the gevent pywsgi server, a Python network
7950library.
7951
7952Features include:
7953@itemize
7954@item integration on both socket level or using an abstract interface
7955@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
7956Protocol, WAMP}
7957@item easily extendible using a simple WebSocket protocol plugin API
7958@end itemize")
7959 (license license:asl2.0)))
7960
7961(define-public python-requests-oauthlib
7962 (package
7963 (name "python-requests-oauthlib")
7964 (version "2.0.0")
7965 (source
7966 (origin
7967 (method git-fetch)
7968 (uri (git-reference (url
7969 "https://github.com/requests/requests-oauthlib")
7970 (commit (string-append "v" version))))
7971 (file-name (git-file-name name version))
7972 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
7973 (build-system pyproject-build-system)
7974 (arguments
7975 (list
7976 #:test-flags
7977 #~(list
7978 "--ignore=tests/test_core.py" ; requires network access.
7979 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
7980 "-k" "not test_fetch_access_token"))) ; flaky tests.
7981 (native-inputs
7982 (list python-requests-mock python-pytest python-setuptools))
7983 (propagated-inputs
7984 (list python-oauthlib python-requests))
7985 (home-page "https://github.com/requests/requests-oauthlib")
7986 (synopsis "OAuthlib authentication support for Requests")
7987 (description
7988 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
7989provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
7990 (license license:isc)))
7991
7992(define-public python-cachecontrol
7993 (package
7994 (name "python-cachecontrol")
7995 (version "0.14.1")
7996 (source
7997 (origin
7998 (method git-fetch)
7999 (uri (git-reference
8000 (url "https://github.com/ionrock/cachecontrol")
8001 (commit (string-append "v" version))))
8002 (file-name (git-file-name name version))
8003 (sha256
8004 (base32
8005 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
8006 (build-system pyproject-build-system)
8007 (propagated-inputs
8008 (list python-filelock python-msgpack python-requests))
8009 (native-inputs
8010 (list python-cherrypy python-flit-core python-pytest))
8011 (home-page "https://github.com/ionrock/cachecontrol")
8012 (synopsis "The httplib2 caching algorithms for use with requests")
8013 (description "CacheControl is a port of the caching algorithms in
8014@code{httplib2} for use with @code{requests} session objects.")
8015 (license license:asl2.0)))
8016
8017(define-public python-betamax
8018 (package
8019 (name "python-betamax")
8020 (version "0.9.0")
8021 (source
8022 (origin
8023 (method url-fetch)
8024 (uri (pypi-uri "betamax" version))
8025 (sha256
8026 (base32
8027 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
8028 (build-system pyproject-build-system)
8029 (arguments
8030 (list
8031 #:test-flags
8032 #~(list "-k" (string-join
8033 ;; Tests require network access to http://httpbin.org/get.
8034 (list "not test_creates_new_cassettes"
8035 "test_placeholders_work"
8036 "test_post_start_hook"
8037 "test_pre_stop_hook"
8038 "test_preplayback_hook"
8039 "test_prerecord_hook"
8040 "test_prerecord_ignoring_hook"
8041 "test_records_new_events_with_existing_cassette"
8042 "test_records_new_interaction"
8043 "test_records_new_interactions"
8044 "test_replaces_old_interactions"
8045 "test_replays_response_from_cassette"
8046 "test_requests_with_json_body"
8047 "test_saves_content_as_gzip"
8048 "test_unicode_is_saved_properly")
8049 " and not "))))
8050 (native-inputs
8051 (list nss-certs-for-test
8052 python-pytest
8053 python-setuptools))
8054 (propagated-inputs
8055 (list python-requests))
8056 (home-page "https://github.com/sigmavirus24/betamax")
8057 (synopsis "Record HTTP interactions with python-requests")
8058 (description
8059 "Betamax will record your test suite's HTTP interactions and replay them
8060during future tests. It is designed to work with python-requests.")
8061 (license license:expat)))
8062
8063(define-public python-betamax-matchers
8064 (package
8065 (name "python-betamax-matchers")
8066 (version "0.4.0")
8067 (source
8068 (origin
8069 (method git-fetch)
8070 (uri (git-reference
8071 (url "https://github.com/sigmavirus24/betamax_matchers")
8072 (commit version)))
8073 (file-name (git-file-name name version))
8074 (sha256
8075 (base32 "0lyg3r91hwfvavyi5k6sddcla37igigycfv1mx40c32byqwl6pq5"))))
8076 (build-system pyproject-build-system)
8077 (native-inputs (list python-pytest python-setuptools))
8078 (propagated-inputs (list python-betamax python-requests-toolbelt))
8079 (home-page "https://github.com/sigmavirus24/betamax_matchers")
8080 (synopsis "VCR imitation for python-requests")
8081 (description "@code{betamax-matchers} provides a set of Matchers for
8082Betamax.")
8083 (license license:asl2.0)))
8084
8085(define-public python-betamax-serializers
8086 (package
8087 (name "python-betamax-serializers")
8088 (version "0.2.1")
8089 (source
8090 (origin
8091 (method git-fetch)
8092 (uri (git-reference
8093 (url "https://gitlab.com/betamax/serializers")
8094 (commit version)))
8095 (file-name (git-file-name name version))
8096 (sha256
8097 (base32 "1p2l5w3vwvjacs2ndahgcjq55qb53i37p8mz1zh85pjxyszdyw2l"))))
8098 (build-system pyproject-build-system)
8099 (arguments (list #:tests? #f)) ; No tests.
8100 (native-inputs (list python-setuptools))
8101 (propagated-inputs (list python-betamax python-pyyaml))
8102 (synopsis "Set of third-party serializers for Betamax")
8103 (description
8104 "Betamax-Serializers are an experimental set of Serializers for Betamax
8105that may possibly end up in the main package.")
8106 (home-page "https://gitlab.com/betamax/serializers")
8107 (license license:asl2.0)))
8108
8109(define-public python-s3fs
8110 (package
8111 (name "python-s3fs")
8112 (version "2026.1.0")
8113 (source
8114 (origin
8115 (method url-fetch)
8116 (uri (pypi-uri "s3fs" version))
8117 (sha256
8118 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
8119 (build-system pyproject-build-system)
8120 ;; TODO: Many tests fail with "No such file or directory" raised by the
8121 ;; HTTP client.
8122 (arguments (list #:tests? #false))
8123 (native-inputs
8124 (list python-setuptools))
8125 (propagated-inputs
8126 (list python-aiobotocore
8127 python-aiohttp
8128 python-fsspec))
8129 (home-page "https://github.com/fsspec/s3fs/")
8130 (synopsis "Convenient filesystem interface over S3")
8131 (description "This package provides a convenient filesystem interface over
8132S3.")
8133 (license license:bsd-3)))
8134
8135(define-public python-s3transfer
8136 (package
8137 (name "python-s3transfer")
8138 (version "0.16.0")
8139 (source
8140 (origin
8141 (method url-fetch)
8142 (uri (pypi-uri "s3transfer" version))
8143 (sha256
8144 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
8145 (build-system pyproject-build-system)
8146 (arguments
8147 (list
8148 ;; tests: 630 passed, 51 skipped
8149 #:test-flags
8150 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8151 ;; Tests require networking.
8152 "--ignore" "tests/integration")))
8153 (native-inputs
8154 (list python-pytest
8155 python-pytest-xdist
8156 python-setuptools))
8157 (propagated-inputs
8158 (list python-botocore))
8159 (home-page "https://github.com/boto/s3transfer")
8160 (synopsis "Amazon S3 Transfer Manager")
8161 (description
8162 "S3transfer is a Python library for managing Amazon S3 transfers.")
8163 (license license:asl2.0)))
8164
8165(define-public python-flask-restful
8166 (package
8167 (name "python-flask-restful")
8168 (version "0.3.10")
8169 (source
8170 (origin
8171 (method url-fetch)
8172 (uri (pypi-uri "Flask-RESTful" version))
8173 (sha256
8174 (base32
8175 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
8176 (build-system pyproject-build-system)
8177 (arguments
8178 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
8179 (list #:tests? #f))
8180 (propagated-inputs
8181 (list python-aniso8601 python-flask python-pytz))
8182 (native-inputs
8183 (list python-blinker
8184 python-mock
8185 python-pytest
8186 python-setuptools
8187 python-wheel))
8188 (home-page "https://github.com/flask-restful/flask-restful/")
8189 (synopsis "Flask module for creating REST APIs")
8190 (description
8191 "This package contains a Flask module for creating REST APIs.")
8192 (license license:bsd-3)))
8193
8194(define-public python-flask-sqlalchemy
8195 (package
8196 (name "python-flask-sqlalchemy")
8197 (version "3.1.1")
8198 (source (origin
8199 (method url-fetch)
8200 (uri (pypi-uri "flask_sqlalchemy" version))
8201 (sha256
8202 (base32
8203 "04l3dfivznlpvk9p9f20zdbyxl869k42z2w7glddlbc0h6w8pdp4"))))
8204 (build-system pyproject-build-system)
8205 (arguments
8206 (list
8207 #:test-flags
8208 #~(list "-k" (string-append "not test_explicit_table[db2]"
8209 " and not test_explicit_table[db4]")
8210 "-W" "ignore::DeprecationWarning")))
8211 (native-inputs
8212 (list python-flit-core
8213 python-pytest))
8214 (propagated-inputs
8215 (list python-flask
8216 python-sqlalchemy-2))
8217 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
8218 (synopsis "Module adding SQLAlchemy support to your Flask application")
8219 (description
8220 "This package adds SQLAlchemy support to your Flask application.")
8221 (license license:bsd-3)))
8222
8223(define-public python-flask-restful-swagger
8224 (package
8225 (name "python-flask-restful-swagger")
8226 (version "0.20.1")
8227 ;; XXX: Unbundle minified javascript.
8228 (source
8229 (origin
8230 (method git-fetch)
8231 (uri (git-reference
8232 (url "https://github.com/rantav/flask-restful-swagger")
8233 (commit version)))
8234 (file-name (git-file-name name version))
8235 (sha256
8236 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
8237 (build-system pyproject-build-system)
8238 (arguments (list #:tests? #f)) ; No tests.
8239 (native-inputs (list python-setuptools))
8240 (propagated-inputs (list python-flask-restful python-six))
8241 (home-page "https://github.com/rantav/flask-restful-swagger")
8242 (synopsis "Extract Swagger specs from Flask-Restful projects")
8243 (description "This package lets you extract Swagger API documentation
8244specs from your Flask-Restful projects.")
8245 (license license:expat)))
8246
8247(define-public python-htmlmin
8248 (package
8249 (name "python-htmlmin")
8250 (version "0.1.12")
8251 (source
8252 (origin
8253 (method url-fetch)
8254 (uri (pypi-uri "htmlmin" version))
8255 (sha256
8256 (base32
8257 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
8258 (build-system pyproject-build-system)
8259 (arguments
8260 (list #:tests? #f)) ; no tests
8261 (native-inputs (list python-setuptools))
8262 (home-page "https://htmlmin.readthedocs.org/en/latest/")
8263 (synopsis "HTML minifier")
8264 (description "@code{htmlmin} is an HTML minifier that just works.
8265It comes with safe defaults and easily configurable options.")
8266 (license license:bsd-3)))
8267
8268;; XXX: Forked renamed and updated version.
8269(define-public python-htmlmin2
8270 (package/inherit python-htmlmin
8271 (name "python-htmlmin2")
8272 (version "0.1.13")
8273 (source
8274 (origin
8275 (method git-fetch)
8276 (uri (git-reference
8277 (url "https://github.com/wilhelmer/htmlmin")
8278 (commit (string-append "v" version))))
8279 (file-name (git-file-name name version))
8280 (sha256
8281 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
8282 (build-system pyproject-build-system)
8283 (arguments (list #:test-backend #~'unittest))
8284 (native-inputs (list python-setuptools))
8285 (home-page "https://github.com/wilhelmer/htmlmin")
8286 (description
8287 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
8288defaults and easily configurable options. This variant is an updated fork of
8289the original @code{python-htmlmin}.")
8290 (license license:bsd-3)))
8291
8292(define-public python-flask-htmlmin
8293 (package
8294 (name "python-flask-htmlmin")
8295 (version "3.0.0")
8296 (source
8297 (origin
8298 (method git-fetch)
8299 (uri (git-reference
8300 (url "https://github.com/hamidfzm/Flask-HTMLmin")
8301 (commit (string-append "v" version))))
8302 (file-name (git-file-name name version))
8303 (sha256
8304 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
8305 (build-system pyproject-build-system)
8306 (native-inputs (list python-pytest python-setuptools))
8307 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
8308 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
8309 (synopsis "HTML response minifier for Flask")
8310 (description
8311 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
8312 (license license:bsd-3)))
8313
8314(define-public python-jsmin
8315 (package
8316 (name "python-jsmin")
8317 (version "3.0.1")
8318 (source
8319 (origin
8320 (method url-fetch)
8321 (uri (pypi-uri "jsmin" version))
8322 (sha256
8323 (base32
8324 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
8325 (build-system pyproject-build-system)
8326 (arguments (list #:test-backend #~'unittest))
8327 (native-inputs
8328 (list python-setuptools))
8329 (home-page "https://github.com/tikitu/jsmin/")
8330 (synopsis "Python JavaScript minifier")
8331 (description
8332 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
8333on the command line.")
8334 (license license:expat)))
8335
8336(define-public python-flask-login
8337 (package
8338 (name "python-flask-login")
8339 (version "0.6.3")
8340 (source
8341 (origin
8342 (method git-fetch)
8343 (uri (git-reference
8344 (url "https://github.com/maxcountryman/flask-login")
8345 (commit version)))
8346 (file-name (git-file-name name version))
8347 (sha256
8348 (base32 "0wk3dni5qssmbn8ii3hsh89qa3kwr97i92k27bzgsgxvvsfwwzja"))))
8349 (build-system pyproject-build-system)
8350 (propagated-inputs
8351 (list python-flask))
8352 (native-inputs
8353 ;; For tests.
8354 (list python-blinker
8355 python-mock
8356 python-pytest
8357 python-semantic-version
8358 python-setuptools
8359 python-werkzeug
8360 python-wheel))
8361 (home-page "https://github.com/maxcountryman/flask-login")
8362 (synopsis "User session management for Flask")
8363 (description
8364 "@code{Flask-Login} provides user session management for Flask. It
8365handles the common tasks of logging in, logging out, and remembering your
8366users' sessions over extended periods of time.")
8367 (license license:expat)))
8368
8369(define-public python-oauth2client
8370 (package
8371 (name "python-oauth2client")
8372 (version "4.1.3")
8373 (source
8374 (origin
8375 (method git-fetch)
8376 (uri (git-reference
8377 (url "https://github.com/google/oauth2client/")
8378 (commit (string-append "v" version))))
8379 (file-name (git-file-name name version))
8380 (sha256
8381 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
8382 (build-system pyproject-build-system)
8383 (arguments
8384 (list #:tests? #f))
8385 (native-inputs
8386 (list python-setuptools))
8387 (propagated-inputs
8388 (list python-httplib2
8389 python-pyasn1
8390 python-pyasn1-modules
8391 python-pyparsing
8392 python-rsa
8393 python-six))
8394 (home-page "https://github.com/google/oauth2client/")
8395 (synopsis "OAuth 2.0 client library")
8396 (description "@code{python-oauth2client} provides an OAuth 2.0 client
8397library for Python")
8398 (license license:asl2.0)))
8399
8400(define-public python-authlib
8401 (package
8402 (name "python-authlib")
8403 (version "1.5.1")
8404 (source
8405 (origin
8406 (method url-fetch)
8407 (uri (pypi-uri "authlib" version))
8408 (sha256
8409 (base32 "0blpvz2v2r8yvsgm1yr3n61mhwxvh1b0kyf2rp0i4wv6n3n8bg2w"))))
8410 (build-system pyproject-build-system)
8411 ;; No tests target.
8412 (arguments (list #:tests? #false))
8413 (propagated-inputs
8414 (list python-cryptography
8415 python-django
8416 python-flask
8417 python-httpx
8418 python-requests
8419 python-sqlalchemy-2
8420 python-starlette
8421 python-werkzeug))
8422 (native-inputs (list python-pytest python-setuptools python-wheel))
8423 (home-page "https://pypi.org/project/Authlib/1")
8424 (synopsis "Build OAuth and OpenID Connect servers and clients")
8425 (description
8426 "This is a Python library for building OAuth and OpenID Connect servers
8427and clients.")
8428 (license license:bsd-3)))
8429
8430(define-public python-flask-oidc
8431 (package
8432 (name "python-flask-oidc")
8433 (version "2.3.1")
8434 (source
8435 (origin
8436 (method url-fetch)
8437 (uri (pypi-uri "flask_oidc" version))
8438 (sha256
8439 (base32
8440 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
8441 (build-system pyproject-build-system)
8442 (propagated-inputs
8443 (list python-authlib
8444 python-blinker
8445 python-flask
8446 python-requests
8447 python-responses))
8448 (native-inputs
8449 (list python-pytest python-poetry-core))
8450 (home-page "https://github.com/puiterwijk/flask-oidc")
8451 (synopsis "OpenID Connect extension for Flask")
8452 (description "@code{python-flask-oidc} provides an OpenID Connect extension
8453for Flask.")
8454 (license license:bsd-2)))
8455
8456(define-public python-webassets
8457 (package
8458 (name "python-webassets")
8459 (version "3.0.0")
8460 (source
8461 (origin
8462 (method git-fetch)
8463 (uri (git-reference
8464 (url "https://github.com/miracle2k/webassets")
8465 (commit version)))
8466 (file-name (git-file-name name version))
8467 (sha256
8468 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
8469 (build-system pyproject-build-system)
8470 (propagated-inputs (list python-pyyaml python-zope-dottedname))
8471 (native-inputs (list python-hatchling python-pytest))
8472 (home-page "https://github.com/miracle2k/webassets")
8473 (synopsis "Media asset management")
8474 (description
8475 "This package provides utilities to merge, minify and compress Javascript
8476and CSS files,supporting a variety of different filters, including YUI, jsmin,
8477jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
8478 (license license:bsd-2)))
8479
8480(define-public python-cssmin
8481 (package
8482 (name "python-cssmin")
8483 (version "0.2.0")
8484 (source
8485 (origin
8486 (method git-fetch)
8487 (uri (git-reference
8488 (url "https://github.com/zacharyvoase/cssmin")
8489 (commit (string-append "v" version))))
8490 (file-name (git-file-name name version))
8491 (sha256
8492 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
8493 (build-system pyproject-build-system)
8494 (arguments (list #:tests? #f)) ; No tests.
8495 (native-inputs (list python-setuptools))
8496 (home-page "https://github.com/zacharyvoase/cssmin")
8497 (synopsis "Python port of the YUI CSS Compressor")
8498 (description "Python port of the YUI CSS Compressor.")
8499 (license (list license:expat license:bsd-3))))
8500
8501(define-public python-elastic-transport
8502 (package
8503 (name "python-elastic-transport")
8504 (version "9.1.0")
8505 (source
8506 (origin
8507 (method url-fetch)
8508 (uri (pypi-uri "elastic_transport" version))
8509 (sha256
8510 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
8511 (build-system pyproject-build-system)
8512 (arguments
8513 (list
8514 #:test-flags
8515 ;; Deselect failing tests (mostly due to network not reachable)
8516 #~(list "-k"
8517 (string-append
8518 "not .badssl.com"
8519 " and not test_assert_fingerprint_in_cert_chain_failure"))
8520 #:phases
8521 #~(modify-phases %standard-phases
8522 (add-after 'unpack 'fix-pytest-config
8523 (lambda _
8524 ;; Drop test coverage requirements.
8525 (substitute* "setup.cfg"
8526 (("--cov(-[^ ]*)?=[^ ]*") "\n")))))))
8527 (propagated-inputs (list python-certifi python-urllib3))
8528 (native-inputs (list nss-certs-for-test
8529 python-aiohttp
8530 ;; python-furo
8531 python-httpx
8532 python-opentelemetry-api
8533 python-opentelemetry-sdk
8534 python-orjson
8535 python-pytest
8536 python-pytest-asyncio-0.26
8537 ;; python-pytest-cov
8538 python-pytest-httpbin
8539 python-pytest-httpserver
8540 python-pytest-mock
8541 python-requests
8542 python-respx ;test
8543 python-setuptools
8544 ;; python-sphinx
8545 ;; python-sphinx-autodoc-typehints
8546 python-trustme
8547 python-wheel))
8548 (home-page "https://github.com/elastic/elastic-transport-python")
8549 (synopsis "Common library for Python Elastic client libraries")
8550 (description
8551 "This library was lifted from @code{elasticsearch-py} and then transformed to
8552be used across all Elastic services rather than only Elasticsearch. It
8553provides transport classes and utilities shared among Python Elastic client
8554libraries.")
8555 ;; Apache-2.0 in setup.py and LICENSE file.
8556 (license license:asl2.0)))
8557
8558(define-public python-elasticsearch
8559 (package
8560 (name "python-elasticsearch")
8561 (version "9.1.1")
8562 (source
8563 (origin
8564 (method git-fetch) ; no tests in PyPI release
8565 (uri (git-reference
8566 (url "https://github.com/elastic/elasticsearch-py")
8567 (commit (string-append "v" version))))
8568 (file-name (git-file-name name version))
8569 (sha256
8570 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
8571 (build-system pyproject-build-system)
8572 (native-inputs
8573 (list nss-certs-for-test
8574 python-aiohttp
8575 python-dateutil
8576 python-mock
8577 python-orjson
8578 python-pytest
8579 python-pytest-asyncio
8580 python-pytest-cov
8581 python-pytz
8582 python-pyyaml
8583 python-requests
8584 python-hatchling))
8585 (propagated-inputs
8586 (list python-certifi
8587 python-elastic-transport))
8588 (home-page "https://github.com/elastic/elasticsearch-py")
8589 (synopsis "Low-level client for Elasticsearch")
8590 (description "Official low-level client for Elasticsearch. Its goal is to
8591provide common ground for all Elasticsearch-related code in Python; because of
8592this it tries to be opinion-free and very extendable.")
8593 ;; Apache-2.0 in setup.py and LICENSE file.
8594 (license license:asl2.0)))
8595
8596(define-public python-engineio
8597 (package
8598 (name "python-engineio")
8599 (version "4.12.2")
8600 (source
8601 (origin
8602 (method url-fetch)
8603 (uri (pypi-uri "python_engineio" version))
8604 (sha256
8605 (base32
8606 "1ynyf3n29biwkm6nwzzwzhr4m19lsir1x5azxq2nl7xyw7zi5rz7"))))
8607 (build-system pyproject-build-system)
8608 (arguments
8609 (list
8610 #:test-flags
8611 #~(list "-k"
8612 "not test_static_file_routing and not test_static_files")))
8613 (native-inputs
8614 (list python-pytest
8615 python-pytest-asyncio
8616 python-setuptools
8617 python-tornado))
8618 (propagated-inputs
8619 (list python-aiohttp
8620 python-requests
8621 python-simple-websocket
8622 python-websocket-client))
8623 (home-page "https://github.com/miguelgrinberg/python-engineio/")
8624 (synopsis "Engine.IO server")
8625 (description "This package provides a Python implementation of the
8626@code{Engine.IO} realtime client and server.")
8627 (license license:expat)))
8628
8629(define-public python-ephemeral-port-reserve
8630 (package
8631 (name "python-ephemeral-port-reserve")
8632 (version "1.1.4")
8633 (source
8634 (origin
8635 (method git-fetch) ;no tests in PyPI archvie
8636 (uri (git-reference
8637 (url "https://github.com/Yelp/ephemeral-port-reserve")
8638 (commit (string-append "v" version))))
8639 (file-name (git-file-name name version))
8640 (sha256
8641 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
8642 (build-system pyproject-build-system)
8643 (native-inputs
8644 (list python-pytest
8645 python-setuptools
8646 python-wheel))
8647 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
8648 (synopsis "Find an unused port, reliably")
8649 (description
8650 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
8651it.")
8652 (license license:expat)))
8653
8654(define-public python-flask-migrate
8655 (package
8656 (name "python-flask-migrate")
8657 (version "4.1.0")
8658 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
8659 (source (origin
8660 (method git-fetch)
8661 (uri (git-reference (url home-page)
8662 (commit (string-append "v" version))))
8663 (file-name (git-file-name name version))
8664 (sha256
8665 (base32
8666 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
8667 (build-system pyproject-build-system)
8668 (propagated-inputs
8669 (list python-flask python-alembic python-flask-sqlalchemy))
8670 (native-inputs
8671 (list python-pytest python-setuptools python-wheel))
8672 (synopsis "SQLAlchemy database migrations for Flask programs using
8673Alembic")
8674 (description "This package contains SQLAlchemy database migration tools
8675for Flask programs that are using @code{python-alembic}.")
8676 (license license:expat)))
8677
8678(define-public python-genshi
8679 (package
8680 (name "python-genshi")
8681 (version "0.7.10")
8682 (source
8683 (origin
8684 (method git-fetch)
8685 (uri (git-reference
8686 (url "https://github.com/edgewall/genshi")
8687 (commit version)))
8688 (file-name (git-file-name name version))
8689 (sha256
8690 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
8691 (build-system pyproject-build-system)
8692 (arguments (list #:test-backend #~'unittest))
8693 (native-inputs (list python-setuptools))
8694 (propagated-inputs (list python-six))
8695 (home-page "https://genshi.edgewall.org/")
8696 (synopsis "Toolkit for generation of output for the web")
8697 (description "Genshi is a Python library that provides an integrated set
8698of components for parsing, generating, and processing HTML, XML or other
8699textual content for output generation on the web.")
8700 (license license:bsd-3)))
8701
8702(define-public python-flask-principal
8703 (package
8704 (name "python-flask-principal")
8705 (version "0.4.0")
8706 (source
8707 (origin
8708 (method git-fetch)
8709 (uri (git-reference
8710 (url "https://github.com/pallets-eco/flask-principal")
8711 (commit version)))
8712 (file-name (git-file-name name version))
8713 (sha256
8714 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
8715 (build-system pyproject-build-system)
8716 (propagated-inputs (list python-blinker))
8717 (native-inputs (list python-flask python-pynose python-setuptools))
8718 (home-page "https://github.com/pallets-eco/flask-principal")
8719 (synopsis "Identity management for Flask")
8720 (description
8721 "@code{flask_principal} is a identity management library for Flask. It
8722supports managing both authentication and authorization data in a thread-local
8723variable.")
8724 (license license:expat)))
8725
8726(define-public python-flask-httpauth
8727 (package
8728 (name "python-flask-httpauth")
8729 (version "4.8.0")
8730 (source
8731 (origin
8732 (method url-fetch)
8733 (uri (pypi-uri "Flask-HTTPAuth" version))
8734 (sha256
8735 (base32
8736 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
8737 (build-system pyproject-build-system)
8738 (propagated-inputs (list python-flask))
8739 (native-inputs
8740 (list nss-certs-for-test
8741 python-pytest
8742 python-setuptools
8743 python-wheel))
8744 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
8745 (synopsis "Basic and Digest HTTP authentication for Flask routes")
8746 (description "@code{flask_httpauth} provides Basic and Digest HTTP
8747authentication for Flask routes.")
8748 (license license:expat)))
8749
8750(define-public python-uritemplate
8751 (package
8752 (name "python-uritemplate")
8753 (version "4.2.0")
8754 (source
8755 (origin
8756 (method url-fetch)
8757 (uri (pypi-uri "uritemplate" version))
8758 (sha256
8759 (base32
8760 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
8761 (build-system pyproject-build-system)
8762 (native-inputs (list python-pytest python-setuptools))
8763 (home-page "https://uritemplate.readthedocs.io/")
8764 (synopsis "Library to deal with URI Templates")
8765 (description "@code{uritemplate} provides Python library to deal with URI
8766Templates.")
8767 ;; The software is made available under the terms of *either* of the
8768 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
8769 ;; are made under *both* licenses (excerpt from the LICENSE file).
8770 (license (list license:bsd-2 license:asl2.0))))
8771
8772(define-public python-uritemplate-3
8773 (package
8774 (inherit python-uritemplate)
8775 (name "python-uritemplate")
8776 (version "3.0.1")
8777 (source (origin
8778 (method url-fetch)
8779 (uri (pypi-uri "uritemplate" version))
8780 (sha256
8781 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
8782
8783(define-public python-publicsuffix2
8784 (package
8785 (name "python-publicsuffix2")
8786 (version "2.2019-12-21")
8787 (source
8788 (origin
8789 (method git-fetch)
8790 (uri (git-reference
8791 (url "https://github.com/pombredanne/python-publicsuffix2")
8792 (commit (string-append "release-" version))))
8793 (file-name (git-file-name name version))
8794 (sha256
8795 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
8796 (build-system pyproject-build-system)
8797 (arguments
8798 (list
8799 #:tests? #f ;the test suite requires network access
8800 #:phases
8801 #~(modify-phases %standard-phases
8802 (add-after 'unpack 'ignore-maintainer-inputs
8803 (lambda _
8804 ;; Comment out a demand for python-requests, which is used only by
8805 ;; the unused ‘update_psl’ helper command.
8806 (substitute* "setup.py"
8807 (("'requests " match)
8808 (format #f "# ~a" match))))))))
8809 (native-inputs (list python-setuptools))
8810 (home-page "https://github.com/pombredanne/python-publicsuffix2")
8811 (synopsis
8812 "Get a public suffix for a domain name using the Public Suffix List")
8813 (description
8814 "Get a public suffix for a domain name using the Public Suffix List.
8815Forked from and using the same API as the publicsuffix package.")
8816 (license (list license:expat license:mpl2.0))))
8817
8818(define-public python-werkzeug
8819 (package
8820 (name "python-werkzeug")
8821 (version "3.1.3")
8822 (source
8823 (origin
8824 (method url-fetch)
8825 (uri (pypi-uri "werkzeug" version))
8826 (sha256
8827 (base32
8828 "0ij7si3aa3ykac7k7fz481h4majqqwn2iqwhjxkji4y18plkqwk0"))))
8829 (build-system pyproject-build-system)
8830 (arguments
8831 (list
8832 #:test-flags
8833 ;; Test requiring networking setup.
8834 #~(list "--ignore=tests/test_serving.py"
8835 "--deselect=tests/test_debug.py::test_basic"
8836 "--deselect=tests/test_exceptions.py::test_response_body"
8837 "--deselect=tests/middleware/test_http_proxy.py::test_http_proxy")))
8838 (native-inputs
8839 (list python-flit-core
8840 python-pytest
8841 python-watchdog
8842 python-ephemeral-port-reserve
8843 python-pytest-timeout
8844 python-pytest-xprocess))
8845 (propagated-inputs
8846 (list python-markupsafe
8847 python-requests))
8848 (home-page "https://palletsprojects.com/p/werkzeug/")
8849 (synopsis "Utilities for WSGI applications")
8850 (description "One of the most advanced WSGI utility modules. It includes a
8851powerful debugger, full-featured request and response objects, HTTP utilities to
8852handle entity tags, cache control headers, HTTP dates, cookie handling, file
8853uploads, a powerful URL routing system and a bunch of community-contributed
8854addon modules.")
8855 (license license:x11)))
8856
8857(define-public python-werkzeug-1.0
8858 (package
8859 (inherit python-werkzeug)
8860 (version "1.0.1")
8861 (source (origin
8862 (method url-fetch)
8863 (uri (pypi-uri "Werkzeug" version))
8864 (sha256
8865 (base32
8866 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
8867 (patches (search-patches "python-werkzeug-tests.patch"))))
8868 (arguments
8869 (list
8870 #:phases
8871 '(modify-phases %standard-phases
8872 (add-after 'unpack 'ignore-warnings
8873 (lambda _
8874 (substitute* "setup.cfg"
8875 ((" error.*") "")))))))
8876 (propagated-inputs
8877 (list python-requests))
8878 (native-inputs
8879 (list python-pytest python-pytest-timeout python-setuptools
8880 python-wheel))))
8881
8882(define-public python-bottle
8883 (package
8884 (name "python-bottle")
8885 (version "0.13.4")
8886 (source
8887 (origin
8888 (method url-fetch)
8889 (uri (pypi-uri "bottle" version))
8890 (sha256
8891 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
8892 (build-system pyproject-build-system)
8893 (native-inputs (list python-pytest python-setuptools))
8894 (home-page "https://bottlepy.org/")
8895 (synopsis "WSGI framework for small web-applications")
8896 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
8897 (license license:expat)))
8898
8899(define-public python-wtforms
8900 (package
8901 (name "python-wtforms")
8902 (version "3.1.2")
8903 (source
8904 (origin
8905 (method url-fetch)
8906 (uri (pypi-uri "wtforms" version))
8907 (sha256
8908 (base32 "1fblnkzvs6339glwx8bskdjy7nhn2ap90y9g6b399713sy063mzq"))))
8909 (build-system pyproject-build-system)
8910 (native-inputs (list python-hatchling python-pytest))
8911 (propagated-inputs (list python-babel python-email-validator
8912 python-markupsafe))
8913 (home-page "https://wtforms.readthedocs.io/")
8914 (synopsis
8915 "Form validation and rendering library for Python web development")
8916 (description
8917 "WTForms is a flexible forms validation and rendering library
8918for Python web development. It is very similar to the web form API
8919available in Django, but is a standalone package.")
8920 (license license:bsd-3)))
8921
8922(define-public python-wtforms-sqlalchemy
8923 (package
8924 (name "python-wtforms-sqlalchemy")
8925 (version "0.4.1")
8926 (source
8927 (origin
8928 (method url-fetch)
8929 (uri (pypi-uri "WTForms-SQLAlchemy" version))
8930 (sha256
8931 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
8932 (build-system pyproject-build-system)
8933 (native-inputs (list python-pytest python-setuptools python-wheel))
8934 (propagated-inputs (list python-sqlalchemy python-wtforms))
8935 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
8936 (synopsis "SQLAlchemy tools for WTForms")
8937 (description
8938 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
8939package from WTForms. The package has been renamed to
8940@code{wtforms_sqlalchemy} but otherwise should function the same as
8941@code{wtforms.ext.sqlalchemy} did.")
8942 (license license:bsd-3)))
8943
8944(define-public python-urlgrabber
8945 (package
8946 (name "python-urlgrabber")
8947 (version "4.1.0")
8948 (source
8949 (origin
8950 (method url-fetch)
8951 (uri (pypi-uri "urlgrabber" version))
8952 (sha256
8953 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
8954 (build-system pyproject-build-system)
8955 (arguments
8956 (list
8957 #:tests? #f ; Most tests require network access.
8958 #:phases
8959 #~(modify-phases %standard-phases
8960 (replace 'check
8961 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8962 (when tests?
8963 (invoke "python" "test/runtests.py")))))))
8964 (native-inputs (list python-setuptools))
8965 (propagated-inputs
8966 (list python-pycurl python-setuptools python-six))
8967 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
8968 (synopsis "High-level cross protocol url-grabber")
8969 (description
8970 "@code{urlgrabber} is a library that unifies access to files available on
8971the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
8972supports features like HTTP keep-alive, reget, throttling and more.")
8973 (license license:lgpl2.1+)))
8974
8975(define-public python-pycares
8976 (package
8977 (name "python-pycares")
8978 (version "4.11.0")
8979 (source
8980 (origin
8981 (method git-fetch)
8982 (uri (git-reference
8983 (url "https://github.com/saghul/pycares")
8984 (commit (string-append "v" version))))
8985 (file-name (git-file-name name version))
8986 (sha256
8987 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
8988 (snippet #~(begin
8989 (rmdir "deps/c-ares")))))
8990 (build-system pyproject-build-system)
8991 (arguments
8992 (list
8993 ;; XXX: Half of the tests require internet access
8994 ;; There is currently no markers to avoid running them.
8995 #:tests? #f
8996 #:phases
8997 #~(modify-phases %standard-phases
8998 (add-after 'unpack 'configure-system-lib
8999 (lambda _
9000 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
9001 (native-inputs (list python-pytest python-setuptools))
9002 (inputs (list c-ares))
9003 (propagated-inputs (list python-cffi))
9004 (home-page "https://github.com/saghul/pycares")
9005 (synopsis "Python interface for @code{c-ares}")
9006 (description
9007 "@code{pycares} is a Python module which provides an interface to
9008@code{c-ares}, a C library that performs DNS requests and name resolutions
9009asynchronously.")
9010 (license license:expat)))
9011
9012(define-public python-yarl
9013 (package
9014 (name "python-yarl")
9015 (version "1.18.3")
9016 (source
9017 (origin
9018 (method url-fetch)
9019 (uri (pypi-uri "yarl" version))
9020 (sha256
9021 (base32
9022 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
9023 (build-system pyproject-build-system)
9024 (arguments
9025 (list
9026 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
9027 #:phases
9028 '(modify-phases %standard-phases
9029 (add-after 'unpack 'patch-build-system
9030 (lambda _
9031 ;; XXX: I don't know how to tell it to build the extensions in
9032 ;; place.
9033 (substitute* "packaging/pep517_backend/_backend.py"
9034 (("build_inplace=False") "build_inplace=True")))))))
9035 (native-inputs
9036 (list python-covdefaults
9037 python-cython
9038 python-expandvars
9039 python-pytest
9040 python-pytest-cov
9041 python-pytest-xdist
9042 python-setuptools
9043 python-tomli
9044 python-wheel))
9045 (propagated-inputs
9046 (list python-packaging python-idna python-multidict python-propcache))
9047 (home-page "https://github.com/aio-libs/yarl/")
9048 (synopsis "Yet another URL library")
9049 (description "@code{yarl} module provides handy @code{URL} class
9050for URL parsing and changing.")
9051 (license license:asl2.0)))
9052
9053(define-public python-canvasapi
9054 (package
9055 (name "python-canvasapi")
9056 (version "3.4.0")
9057 (source (origin
9058 (method git-fetch)
9059 (uri (git-reference
9060 (url "https://github.com/ucfopen/canvasapi")
9061 (commit (string-append "v" version))))
9062 (file-name (git-file-name name version))
9063 (sha256
9064 (base32
9065 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
9066 (build-system pyproject-build-system)
9067 (propagated-inputs (list python-arrow python-pytz python-requests))
9068 (native-inputs (list python-pytest
9069 python-requests-mock
9070 python-setuptools
9071 python-urllib3))
9072 (home-page "https://github.com/ucfopen/canvasapi")
9073 (synopsis "API wrapper for the Canvas LMS")
9074 (description
9075 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
9076The library enables developers to programmatically manage Canvas courses,
9077users, gradebooks, and more.")
9078 (license license:expat)))
9079
9080(define-public python-google
9081 (package
9082 (name "python-google")
9083 (version "3.0.0")
9084 (source
9085 (origin
9086 (method url-fetch)
9087 (uri (pypi-uri "google" version))
9088 (sha256
9089 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
9090 (build-system pyproject-build-system)
9091 (arguments (list #:tests? #f)) ;There are no tests.
9092 (native-inputs (list python-setuptools))
9093 (propagated-inputs (list python-beautifulsoup4))
9094 (home-page "https://breakingcode.wordpress.com/")
9095 (synopsis "Python bindings to the Google search engine")
9096 (description
9097 "This package provides Python bindings for using the Google search
9098engine. Its module is called @code{googlesearch}.")
9099 (license license:bsd-3)))
9100
9101(define-public python-google-api-client
9102 (package
9103 (name "python-google-api-client")
9104 (version "2.187.0")
9105 (source
9106 (origin
9107 (method git-fetch)
9108 (uri (git-reference
9109 (url "https://github.com/google/google-api-python-client")
9110 (commit (string-append "v" version))))
9111 (file-name (git-file-name name version))
9112 (sha256
9113 (base32 "09vq5d32avri0gl8c7nn5dv2xds1jzjms7vqk3gn66nm2m37x8mv"))))
9114 (build-system pyproject-build-system)
9115 (arguments
9116 (list
9117 #:test-flags
9118 #~(list
9119 "-k"
9120 (string-join
9121 (list
9122 ;; XXX: Deprecated behavior.
9123 "not test_client_options_universe_configured_with_mtls"
9124 "test_universe_env_var_configured_with_mtls"
9125 ;; XXX: Requires CA certificates.
9126 "test_credentials_and_credentials_file_mutually_exclusive")
9127 " and not ")
9128 "tests")))
9129 (native-inputs
9130 (list python-parameterized
9131 python-pytest
9132 python-setuptools))
9133 (propagated-inputs
9134 (list python-google-api-core
9135 python-google-auth
9136 python-google-auth-httplib2
9137 python-httplib2
9138 python-pyparsing
9139 python-uritemplate-3))
9140 (home-page "https://github.com/google/google-api-python-client")
9141 (synopsis "Core Python library for accessing Google APIs")
9142 (description "Python client library for Google's discovery based APIs")
9143 (license license:asl2.0)))
9144
9145(define-public python-google-auth-httplib2
9146 (package
9147 (name "python-google-auth-httplib2")
9148 (version "0.2.0")
9149 (source (origin
9150 (method url-fetch)
9151 (uri (pypi-uri "google-auth-httplib2" version))
9152 (sha256
9153 (base32 "018fckshilc6z2qpj1pclh8haanbq3lr85w6p4g4z5wgyjnppaiq"))))
9154 (build-system pyproject-build-system)
9155 (propagated-inputs
9156 (list python-google-auth python-httplib2))
9157 (native-inputs
9158 (list python-pytest
9159 python-pyparsing
9160 python-pytest-localserver
9161 python-flask
9162 python-setuptools))
9163 (home-page
9164 "https://github.com/GoogleCloudPlatform/google-auth-library-python-httplib2")
9165 (synopsis "Google Authentication Library: httplib2 transport")
9166 (description "This package provides a Google Authentication Library plugin
9167for httplib2 transport.")
9168 (license license:asl2.0)))
9169
9170(define-public python-google-auth-oauthlib
9171 (package
9172 (name "python-google-auth-oauthlib")
9173 (version "1.2.4")
9174 (home-page
9175 "https://github.com/GoogleCloudPlatform/\
9176google-auth-library-python-oauthlib")
9177 (source
9178 (origin
9179 (method git-fetch)
9180 (uri (git-reference
9181 (url home-page)
9182 (commit (string-append "v" version))))
9183 (file-name (git-file-name name version))
9184 (sha256
9185 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
9186 (build-system pyproject-build-system)
9187 (propagated-inputs (list python-google-auth python-requests-oauthlib))
9188 (native-inputs
9189 (list python-click python-mock python-pytest python-setuptools))
9190 (synopsis "Google Authentication Library: oauthlib")
9191 (description "This package provides a Google Authentication Library plugin
9192with oauthlib.")
9193 (license license:asl2.0)))
9194
9195(define-public whoogle-search
9196 (package
9197 (name "whoogle-search")
9198 (version "0.8.4")
9199 (source (origin
9200 (method url-fetch)
9201 (uri (pypi-uri "whoogle-search" version))
9202 (sha256
9203 (base32
9204 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
9205 (build-system pyproject-build-system)
9206 (arguments
9207 (list
9208 ;; The tests need network access
9209 #:tests? #f))
9210 (propagated-inputs
9211 (list python-beautifulsoup4
9212 python-brotli
9213 python-cryptography
9214 python-cssutils
9215 python-defusedxml
9216 python-flask
9217 python-dotenv
9218 python-requests
9219 python-stem
9220 python-validators
9221 python-waitress))
9222 (native-inputs (list python-setuptools python-wheel))
9223 (home-page "https://github.com/benbusby/whoogle-search")
9224 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
9225 (description
9226 "Get Google results, but without any ads, javascript, AMP links,
9227cookies, or IP address tracking. Quick and simple to implement as a primary
9228search engine replacement on both desktop and mobile.")
9229 (license license:expat)))
9230
9231(define-public python-hawkauthlib
9232 (package
9233 (name "python-hawkauthlib")
9234 (version "2.0.0")
9235 (source
9236 (origin
9237 (method git-fetch)
9238 (uri (git-reference
9239 (url "https://github.com/mozilla-services/hawkauthlib")
9240 (commit (string-append "v" version))))
9241 (file-name (git-file-name name version))
9242 (sha256
9243 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
9244 (build-system pyproject-build-system)
9245 (arguments (list #:test-backend #~'unittest))
9246 (native-inputs (list python-setuptools))
9247 (propagated-inputs (list python-requests python-webob))
9248 (home-page "https://github.com/mozilla-services/hawkauthlib")
9249 (synopsis "Hawk Access Authentication protocol")
9250 (description
9251 "This is a low-level Python library for implementing Hawk Access
9252Authentication, a simple HTTP request-signing scheme.")
9253 (license license:mpl2.0)))
9254
9255(define-public python-pybrowserid
9256 (package
9257 (name "python-pybrowserid")
9258 (version "0.14.0")
9259 (source
9260 (origin
9261 (method git-fetch)
9262 (uri (git-reference
9263 (url "https://github.com/mozilla/PyBrowserID")
9264 (commit version)))
9265 (file-name (git-file-name name version))
9266 (sha256
9267 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
9268 (build-system pyproject-build-system)
9269 (arguments (list #:test-backend #~'unittest))
9270 (propagated-inputs (list python-requests))
9271 (native-inputs (list python-mock python-setuptools))
9272 (home-page "https://github.com/mozilla/PyBrowserID")
9273 (synopsis "Python library for the BrowserID protocol")
9274 (description
9275 "This is a Python client library for the BrowserID protocol that
9276underlies Mozilla Persona.")
9277 (license license:mpl2.0)))
9278
9279(define-public python-pyfxa
9280 (package
9281 (name "python-pyfxa")
9282 (version "0.8.1")
9283 (source
9284 (origin
9285 (method git-fetch)
9286 (uri (git-reference
9287 (url "https://github.com/mozilla/PyFxA")
9288 (commit (string-append "v" version))))
9289 (file-name (git-file-name name version))
9290 (sha256
9291 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
9292 (build-system pyproject-build-system)
9293 (arguments
9294 (list
9295 ;; These tests require network access
9296 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
9297 (propagated-inputs
9298 (list python-cryptography
9299 python-pyjwt
9300 python-parameterized
9301 python-hawkauthlib
9302 python-requests))
9303 (native-inputs
9304 (list python-grequests
9305 python-hatchling
9306 python-mock
9307 python-pytest
9308 python-responses))
9309 (home-page "https://github.com/mozilla/PyFxA")
9310 (synopsis "Firefox Accounts client library for Python")
9311 (description
9312 "This is a Python library for interacting with the Firefox Accounts
9313ecosystem.")
9314 (license license:mpl2.0)))
9315
9316(define-public python-hyperlink
9317 (package
9318 (name "python-hyperlink")
9319 (version "21.0.0")
9320 (source
9321 (origin
9322 (method url-fetch)
9323 (uri (pypi-uri "hyperlink" version))
9324 (sha256
9325 (base32
9326 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
9327 (build-system pyproject-build-system)
9328 (arguments
9329 (list #:phases
9330 #~(modify-phases %standard-phases
9331 (add-before 'check 'pretend-to-be-CI
9332 (lambda _
9333 ;; Pretend to be a CI system to skip flaky tests.
9334 (setenv "CI" "true"))))))
9335 (native-inputs
9336 (list python-pytest python-setuptools python-wheel))
9337 (propagated-inputs
9338 (list python-idna))
9339 (home-page "https://github.com/python-hyper/hyperlink")
9340 (synopsis "Python module to create immutable URLs according to spec")
9341 (description "This package provides a Python module to create immutable, and
9342correct URLs for Python according to RFCs 3986 and 3987.")
9343 (license license:expat)))
9344
9345(define-public python-treq
9346 (package
9347 (name "python-treq")
9348 (version "24.9.1")
9349 (source
9350 (origin
9351 (method url-fetch)
9352 (uri (pypi-uri "treq" version))
9353 (sha256
9354 (base32
9355 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
9356 (build-system pyproject-build-system)
9357 (native-inputs
9358 (list python-httpbin
9359 python-pytest
9360 python-service-identity
9361 python-setuptools
9362 python-wheel))
9363 (propagated-inputs
9364 (list python-attrs
9365 python-hyperlink
9366 python-incremental
9367 python-requests
9368 python-twisted
9369 python-typing-extensions))
9370 (home-page "https://github.com/twisted/treq")
9371 (synopsis "Requests-like API built on top of twisted.web's Agent")
9372 (description "This package provides an HTTP library inspired by
9373@code{requests} but written on top of Twisted's @code{Agents}. It offers a
9374high level API for making HTTP requests when using Twisted.")
9375 (license license:expat)))
9376
9377(define-public python-autobahn
9378 (package
9379 (name "python-autobahn")
9380 (version "25.11.1")
9381 (source
9382 (origin
9383 (method url-fetch)
9384 (uri (pypi-uri "autobahn" version))
9385 (sha256
9386 (base32
9387 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
9388 (build-system pyproject-build-system)
9389 (arguments
9390 (list
9391 ;; The tests fail to run:
9392 ;; https://github.com/crossbario/autobahn-python/issues/1117
9393 #:tests? #f
9394 #:phases #~(modify-phases %standard-phases
9395 (add-after 'unpack 'relax-zope-interface
9396 (lambda _
9397 ;; python-zope-interface is a world rebuild package
9398 ;; and our one-digit lower minor version seems to be
9399 ;; fine.
9400 (substitute* "setup.py"
9401 (("zope.interface>=5.2.0")
9402 "zope.interface>=5.1.0"))))
9403 (add-after 'unpack 'strip-xbr
9404 (lambda _
9405 ;; Strip new XBR feature which isn't available in Guix.
9406 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
9407 (native-inputs (list python-setuptools python-wheel))
9408 (propagated-inputs (list python-cbor2
9409 python-cryptography
9410 python-hyperlink
9411 python-msgpack
9412 python-py-ubjson
9413 python-twisted
9414 python-txaio
9415 python-ujson))
9416 (home-page "https://github.com/crossbario/autobahn-python/")
9417 (synopsis "Web Application Messaging Protocol implementation")
9418 (description "This package provides an implementation of the @dfn{Web Application
9419Messaging Protocol} (WAMP). WAMP connects components in distributed
9420applications using Publish and Subscribe (PubSub) and routed Remote Procedure
9421Calls (rRPC). It is ideal for distributed, multi-client and server applications
9422such as IoT applications or multi-user database-driven business applications.")
9423 (license license:expat)))
9424
9425(define-public python-ws4py
9426 (package
9427 (name "python-ws4py")
9428 (version "0.6.0")
9429 (source
9430 (origin
9431 (method git-fetch)
9432 (uri (git-reference
9433 (url "https://github.com/Lawouach/WebSocket-for-Python")
9434 (commit version)))
9435 (file-name (git-file-name name version))
9436 (sha256
9437 (base32
9438 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
9439 (build-system pyproject-build-system)
9440 (arguments
9441 (list
9442 #:phases
9443 #~(modify-phases %standard-phases
9444 (add-after 'unpack 'remove-cherrypy-support
9445 (lambda _
9446 (delete-file "ws4py/server/cherrypyserver.py")
9447 (delete-file "test/test_cherrypy.py"))))))
9448 (native-inputs (list python-setuptools python-pytest))
9449 (propagated-inputs
9450 (list python-gevent python-tornado))
9451 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
9452 (synopsis "WebSocket client and server library")
9453 (description
9454 "This package provides a WebSocket client and server library for Python.")
9455 (license license:bsd-3)))
9456
9457(define-public python-slowapi
9458 (package
9459 (name "python-slowapi")
9460 (version "0.1.9")
9461 (source
9462 (origin
9463 (method git-fetch)
9464 (uri (git-reference
9465 (url "https://github.com/laurents/slowapi")
9466 (commit (string-append "v" version))))
9467 (file-name (git-file-name name version))
9468 (sha256
9469 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
9470 (build-system pyproject-build-system)
9471 (arguments
9472 (list
9473 #:test-flags
9474 ;; These tests fail because the timestamp contains more decimal points
9475 ;; than expected, so a simple equality comparison fails.
9476 '(list "-k" (string-append "not test_headers_no_breach"
9477 " and not test_headers_breach"))))
9478 (propagated-inputs (list python-limits python-redis))
9479 (native-inputs
9480 (list python-fastapi
9481 python-hiro
9482 python-mock
9483 python-poetry-core
9484 python-pytest))
9485 (home-page "https://github.com/laurents/slowapi")
9486 (synopsis "Rate limiting extension for Starlette and Fastapi")
9487 (description
9488 "This package provides a rate limiting extension for Starlette and
9489Fastapi.")
9490 (license license:expat)))
9491
9492(define-public python-slugify
9493 (package
9494 (name "python-slugify")
9495 (version "8.0.4")
9496 (source
9497 (origin
9498 (method git-fetch)
9499 (uri (git-reference
9500 (url "https://github.com/un33k/python-slugify")
9501 (commit (string-append "v" version))))
9502 (file-name (git-file-name name version))
9503 (sha256
9504 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
9505 (build-system pyproject-build-system)
9506 (arguments (list #:test-backend #~'unittest))
9507 (native-inputs (list python-setuptools))
9508 (propagated-inputs (list python-unidecode python-text-unidecode))
9509 (home-page "https://github.com/un33k/python-slugify")
9510 (synopsis "Python Slugify application that handles Unicode")
9511 (description "This package provides a @command{slufigy} command and
9512library to create slugs from unicode strings while keeping it DRY.")
9513 (license license:expat)))
9514
9515(define-public python-branca
9516 (package
9517 (name "python-branca")
9518 (version "0.7.2")
9519 (source
9520 (origin
9521 (method git-fetch) ; no tests in PyPI
9522 (uri (git-reference
9523 (url "https://github.com/python-visualization/branca")
9524 (commit (string-append "v" version))))
9525 (file-name (git-file-name name version))
9526 (sha256
9527 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
9528 (build-system pyproject-build-system)
9529 (arguments
9530 ;; This file requires Selenium.
9531 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
9532 ;; This test passes but is very slow.
9533 "-k" "not test_color_brewer_extendability")))
9534 (propagated-inputs (list python-jinja2))
9535 (native-inputs
9536 (list python-numpy
9537 python-pytest
9538 python-setuptools
9539 python-setuptools-scm
9540 python-wheel))
9541 (home-page "https://github.com/python-visualization/branca")
9542 (synopsis "Generate complex HTML+JS pages with Python")
9543 (description "This library is a spinoff from @code{folium} that would host
9544the non-map-specific features. It can be used to generate HTML + JS.")
9545 (license license:expat)))
9546
9547(define-public python-tinycss2
9548 (package
9549 (name "python-tinycss2")
9550 (version "1.5.1")
9551 (source
9552 (origin
9553 (method git-fetch)
9554 (uri (git-reference
9555 (url "https://github.com/Kozea/tinycss2")
9556 (commit (string-append "v" version))
9557 (recursive? #true)))
9558 (file-name (git-file-name name version))
9559 (sha256
9560 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
9561 (build-system pyproject-build-system)
9562 (native-inputs
9563 (list python-flit
9564 python-pytest))
9565 (propagated-inputs
9566 (list python-webencodings))
9567 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
9568 (synopsis "Low-level CSS parser for Python")
9569 (description "@code{tinycss2} can parse strings, return Python objects
9570representing tokens and blocks, and generate CSS strings corresponding to
9571these objects.
9572
9573Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
9574grammar of CSS but doesn’t know specific rules, properties or values supported
9575in various CSS modules.")
9576 (license license:bsd-3)))
9577
9578(define-public python-tinyhtml5
9579 (package
9580 (name "python-tinyhtml5")
9581 (version "2.1.0")
9582 (source
9583 (origin
9584 (method git-fetch)
9585 (uri (git-reference
9586 (url "https://github.com/CourtBouillon/tinyhtml5")
9587 (commit version)))
9588 (file-name (git-file-name name version))
9589 (sha256
9590 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
9591 (build-system pyproject-build-system)
9592 (propagated-inputs
9593 (list python-webencodings))
9594 (native-inputs
9595 (list python-flit-core
9596 python-pytest))
9597 (home-page "https://github.com/CourtBouillon/tinyhtml5")
9598 (synopsis "Small HTML parser based on the WHATWG HTML specification")
9599 (description "This Python module is a HTML5 parser that transforms a
9600possibly malformed HTML document into an ElementTree tree. This module is a
9601simplified fork of html5lib.")
9602 (license license:expat)))
9603
9604(define-public python-cssselect2
9605 (package
9606 (name "python-cssselect2")
9607 (version "0.4.1")
9608 (source
9609 (origin
9610 (method url-fetch)
9611 (uri (pypi-uri "cssselect2" version))
9612 (sha256
9613 (base32 "1j2fcr217rsvkipsg6zjq03rl64rxnvb5hqqpx0dv58fhspvkywk"))))
9614 (build-system pyproject-build-system)
9615 (arguments
9616 `(#:phases
9617 (modify-phases %standard-phases
9618 (add-after 'unpack 'disable-linters
9619 ;; Their check fails; none of our business.
9620 (lambda _
9621 (substitute* '("setup.py" "pyproject.toml")
9622 (("'pytest-flake8',") "")
9623 (("'pytest-isort',") "")
9624 (("--flake8") "")
9625 (("--isort") "")))))))
9626 (propagated-inputs
9627 (list python-tinycss2))
9628 (native-inputs
9629 (list python-flit python-pytest-cov python-pytest-runner))
9630 (home-page "https://cssselect2.readthedocs.io/")
9631 (synopsis "CSS selectors for Python ElementTree")
9632 (description "@code{cssselect2} is a straightforward implementation of
9633CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
9634ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
9635
9636Unlike the Python package @code{cssselect}, it does not translate selectors to
9637XPath and therefore does not have all the correctness corner cases that are
9638hard or impossible to fix in cssselect.")
9639 (license license:bsd-3)))
9640
9641(define-public python-uvloop
9642 (package
9643 (name "python-uvloop")
9644 (version "0.21.0")
9645 (source
9646 (origin
9647 (method url-fetch)
9648 (uri (pypi-uri "uvloop" version))
9649 (sha256
9650 (base32 "1qq46ym3ymzfn4j6fnykfmr1f4qnb7x7p15dlw37hi38v87jpw9v"))
9651 (modules '((guix build utils)))
9652 (snippet
9653 '(begin (delete-file-recursively "vendor")
9654 (delete-file "uvloop/loop.c")))))
9655 (build-system pyproject-build-system)
9656 (arguments
9657 (list
9658 #:test-flags
9659 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
9660 ;; to get a meaningful idea about where.
9661 #~(list "--timeout=300"
9662 "--timeout-method=thread"
9663 "-k" (string-join
9664 (list
9665 ;; Timeout, because SIGINT cannot be sent to child.
9666 "not test_signals_sigint_pycode_continue"
9667 "test_signals_sigint_pycode_stop"
9668 "test_signals_sigint_uvcode"
9669 "test_signals_sigint_uvcode_two_loop_runs"
9670 ;; This test is racy and prone to get stuck on
9671 ;; various platforms, possibly a aiohttp issue:
9672 ;; https://github.com/MagicStack/uvloop/issues/412
9673 "test_remote_shutdown_receives_trailing_data"
9674 ;; It looks like pytest is preventing
9675 ;; custom stdout/stderr redirection,
9676 ;; even with -s.
9677 "test_process_streams_redirect"
9678 ;; FileNotFoundError: [Errno 2] No such file or
9679 ;; directory
9680 "test_process_env_2"
9681 ;; socket.gaierror: [Errno -2] Name or service not known
9682 "test_getaddrinfo_21"
9683 #$@(if (target-riscv64?)
9684 `("test_renegotiation")
9685 `()))
9686 " and not "))
9687 #:phases
9688 #~(modify-phases %standard-phases
9689 (add-after 'unpack 'preparations
9690 (lambda _
9691 ;; Use packaged libuv.
9692 (substitute* "setup.py" (("self.use_system_libuv = False")
9693 "self.use_system_libuv = True"))
9694 ;; Replace hardcoded shell command.
9695 (substitute* "uvloop/loop.pyx"
9696 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))))
9697 #$@(if (target-riscv64?)
9698 `((add-after 'unpack 'adjust-test-timeouts
9699 (lambda _
9700 (substitute* '("tests/test_tcp.py"
9701 "tests/test_unix.py")
9702 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
9703 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
9704 '())
9705 (add-before 'check 'pre-check
9706 (lambda* (#:key tests? #:allow-other-keys)
9707 (when tests?
9708 ;; Remove Python module, which conflicts with the installed
9709 ;; version, but lacks the built C module.
9710 (delete-file-recursively "uvloop")))))))
9711 (native-inputs
9712 (list python-aiohttp
9713 python-cython
9714 python-psutil
9715 python-pyopenssl
9716 python-pytest
9717 python-pytest-timeout
9718 python-setuptools
9719 python-wheel))
9720 (inputs
9721 (list libuv))
9722 (home-page "https://github.com/MagicStack/uvloop")
9723 (synopsis "Fast implementation of asyncio event loop on top of libuv")
9724 (description
9725 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
9726event loop. It is implemented in Cython and uses libuv under the hood.")
9727 (license license:expat)))
9728
9729(define-public gunicorn
9730 (package
9731 (name "gunicorn")
9732 (version "22.0.0")
9733 (source
9734 (origin
9735 (method url-fetch)
9736 (uri (pypi-uri "gunicorn" version))
9737 (sha256
9738 (base32
9739 "0qzc3ghayc137hlwrqqwkkhaf8f5h9ja21qwy4rznxpz75i462sa"))))
9740 ;; CVE-2024-1135 is fixed in version 22.0.0.
9741 (properties `((lint-hidden-cve . ("CVE-2024-1135"))))
9742 (outputs '("out" "doc"))
9743 (build-system pyproject-build-system)
9744 (arguments
9745 `(#:test-flags
9746 ;; Disable the geventlet tests because eventlet uses dnspython, which
9747 ;; does not work in the build container due to lack of /etc/resolv.conf
9748 '("--ignore=tests/workers/test_geventlet.py")
9749 #:phases (modify-phases %standard-phases
9750 (add-after 'build 'build-doc
9751 (lambda _
9752 (invoke "make"
9753 "-C"
9754 "docs"
9755 "PAPER=a4"
9756 "html"
9757 "info")
9758 (delete-file "docs/build/texinfo/Makefile")
9759 (delete-file "docs/build/texinfo/Gunicorn.texi")))
9760 (add-after 'install 'install-doc
9761 (lambda* (#:key outputs #:allow-other-keys)
9762 (let* ((doc (string-append (assoc-ref outputs "doc")
9763 "/share/doc/"
9764 ,name "-"
9765 ,version))
9766 (html (string-append doc "/html"))
9767 (info (string-append doc "/info"))
9768 (examples (string-append doc "/examples")))
9769 (mkdir-p html)
9770 (mkdir-p info)
9771 (mkdir-p examples)
9772 (copy-recursively "docs/build/html" html)
9773 (copy-recursively "docs/build/texinfo" info)
9774 (copy-recursively "examples" examples)
9775 (for-each (lambda (file)
9776 (copy-file file
9777 (string-append doc "/" file)))
9778 '("README.rst" "NOTICE" "LICENSE" "THANKS")))))
9779 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
9780 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
9781 ;; size. Override it to only add the essential entries.
9782 (replace 'wrap
9783 (lambda* (#:key native-inputs inputs outputs
9784 #:allow-other-keys)
9785 (let* ((out (assoc-ref outputs "out"))
9786 (python (assoc-ref (or native-inputs inputs)
9787 "python"))
9788 (sitedir (string-append "/lib/python"
9789 (python-version python)
9790 "/site-packages")))
9791 (wrap-program (string-append out "/bin/gunicorn")
9792 `("PYTHONPATH" ":" prefix
9793 ,(map (lambda (output)
9794 (string-append output sitedir))
9795 (list python out))))))))))
9796 (inputs (list bash-minimal))
9797 (native-inputs (list binutils ;for ctypes.util.find_library()
9798 python-aiohttp
9799 python-gevent
9800 python-pytest
9801 python-pytest-cov
9802 python-sphinx
9803 texinfo))
9804 (propagated-inputs (list python-packaging python-setuptools python-wheel))
9805 (home-page "https://gunicorn.org/")
9806 (synopsis "Python WSGI HTTP Server for UNIX")
9807 (description
9808 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
9809Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
9810Unicorn project. The Gunicorn server is broadly compatible with
9811various web frameworks, simply implemented, light on server resources,
9812and fairly speedy.")
9813 (license license:expat)))
9814
9815;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
9816;; its tests
9817(define-public gunicorn-bootstrap
9818 (package
9819 (inherit gunicorn)
9820 (name "gunicorn")
9821 (arguments `(#:tests? #f))
9822 (properties '((hidden? . #t)))
9823 (native-inputs `())))
9824
9825(define-public python-httptools
9826 (package
9827 (name "python-httptools")
9828 (version "0.7.1")
9829 (source
9830 (origin
9831 ;; PyPI tarball comes with a vendored http-parser and no tests.
9832 (method git-fetch)
9833 (uri (git-reference
9834 (url "https://github.com/MagicStack/httptools")
9835 (commit (string-append "v" version))))
9836 (file-name (git-file-name name version))
9837 (sha256
9838 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
9839 (modules '((guix build utils)))
9840 (snippet
9841 #~(begin (delete-file-recursively "vendor")))))
9842 (build-system pyproject-build-system)
9843 (arguments
9844 (list
9845 #:test-flags
9846 ;; XXX: AssertionError: HttpParserError not raised.
9847 #~(list "-k" "not test_parser_response_leninent_headers_1")
9848 #:phases
9849 #~(modify-phases %standard-phases
9850 (add-after 'unpack 'configure-build-ext
9851 (lambda _
9852 (with-output-to-file "setup.cfg"
9853 (lambda ()
9854 (display "\
9855[build_ext]
9856use_system_llhttp = true
9857use_system_http_parser = true
9858cython_always = true"))))))))
9859 (native-inputs
9860 (list python-cython
9861 python-pytest
9862 python-setuptools))
9863 (inputs
9864 (list http-parser
9865 llhttp))
9866 (home-page "https://github.com/MagicStack/httptools")
9867 (synopsis "Collection of framework independent HTTP protocol utils")
9868 (description
9869 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
9870 (license license:expat)))
9871
9872(define-public python-uvicorn
9873 (package
9874 (name "python-uvicorn")
9875 (version "0.34.0")
9876 (source
9877 (origin
9878 ;; PyPI tarball has no tests.
9879 (method git-fetch)
9880 (uri (git-reference
9881 (url "https://github.com/encode/uvicorn")
9882 (commit version)))
9883 (file-name (git-file-name name version))
9884 (sha256
9885 (base32 "05lkxnpzmr0kik81kdcvavjvvc4d1lgmw88mr4vbwsqk147wgqbc"))))
9886 (build-system pyproject-build-system)
9887 (arguments
9888 (list
9889 #:test-flags
9890 #~(list "-o" "asyncio_mode=auto"
9891 ;; For some reason tests stacked in infinity re-invocation loop:
9892 ;; AssertionError where is_alive =
9893 ;; <uvicorn.supervisors.multiprocess.Process object at
9894 ;; 0x7ffff39b6110>.is_alive.
9895 ;; Maybe this <https://github.com/encode/uvicorn/issues/2466>.
9896 "--ignore=tests/supervisors/test_multiprocess.py"
9897
9898 #$@(cond
9899 ((or (target-aarch64?)
9900 (target-riscv64?))
9901 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
9902 (#t '())))))
9903 (native-inputs
9904 (list nss-certs-for-test
9905 python-a2wsgi
9906 python-hatchling
9907 python-httpx-bootstrap
9908 python-pytest
9909 python-pytest-asyncio-0.26
9910 python-pytest-mock
9911 python-requests
9912 python-trustme
9913 python-wsproto))
9914 (propagated-inputs
9915 (list python-a2wsgi
9916 python-click
9917 python-dotenv
9918 python-h11
9919 python-httptools
9920 python-pyyaml
9921 python-uvloop
9922 python-watchfiles
9923 python-websockets))
9924 (home-page "https://github.com/encode/uvicorn")
9925 (synopsis "Fast ASGI server implementation")
9926 (description
9927 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
9928and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
9929for HTTP/2 is planned.")
9930 (license license:bsd-3)))
9931
9932(define-public python-translation-finder
9933 (package
9934 (name "python-translation-finder")
9935 (version "2.22")
9936 (source
9937 (origin
9938 (method url-fetch)
9939 (uri (pypi-uri "translation_finder" version))
9940 (sha256
9941 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
9942 (build-system pyproject-build-system)
9943 (arguments
9944 (list
9945 #:test-flags
9946 ;; AssertionError: 31 != 30 : Mismatched count of results
9947 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
9948 (native-inputs
9949 (list python-pytest
9950 python-setuptools))
9951 (propagated-inputs
9952 (list python-charset-normalizer
9953 python-ruamel.yaml
9954 python-weblate-language-data))
9955 (home-page "https://weblate.org/")
9956 (synopsis "Translation file finder for Weblate")
9957 (description "This package provides a function to find translation file in
9958the source code of a project. It supports many translation file formats and
9959is part of the Weblate translation platform.")
9960 (license license:gpl3+)))
9961
9962(define-public python-gitlab
9963 (package
9964 (name "python-gitlab")
9965 (version "7.0.0")
9966 (source
9967 (origin
9968 (method git-fetch)
9969 (uri (git-reference
9970 (url "https://github.com/python-gitlab/python-gitlab")
9971 (commit (string-append "v" version))))
9972 (file-name (git-file-name name version))
9973 (sha256
9974 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
9975 (build-system pyproject-build-system)
9976 (arguments
9977 (list
9978 #:test-flags
9979 #~(list "--ignore=tests/unit/test_graphql.py"
9980 ;; XXX: Missing helper script.
9981 "-k" "not test_data_from_helper" "tests/unit")))
9982 (native-inputs
9983 (list python-anyio
9984 python-pytest
9985 python-responses
9986 python-setuptools))
9987 (propagated-inputs (list python-requests python-requests-toolbelt))
9988 (home-page "https://github.com/python-gitlab/python-gitlab")
9989 (synopsis "Interact with GitLab API")
9990 (description "This package provides an extended library for interacting
9991with GitLab instances through their API.")
9992 (license license:lgpl3+)))
9993
9994(define-public python-path-and-address
9995 (package
9996 (name "python-path-and-address")
9997 (version "2.0.1")
9998 (source
9999 (origin
10000 (method git-fetch)
10001 (uri (git-reference
10002 (url "https://github.com/joeyespo/path-and-address")
10003 (commit (string-append "v" version))))
10004 (file-name (git-file-name name version))
10005 (sha256
10006 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
10007 (build-system pyproject-build-system)
10008 (native-inputs
10009 (list python-pytest python-setuptools))
10010 (home-page "https://github.com/joeyespo/path-and-address")
10011 (synopsis "Functions for command-line server tools used by humans")
10012 (description "Path-and-address resolves ambiguities of command-line
10013interfaces, inferring which argument is the path, and which is the address.")
10014 (license license:expat)))
10015
10016;; XXX: This project missed maintainer upstream, see
10017;; <https://github.com/joeyespo/grip/issues/387>.
10018;; Consider to remove if it keeps failing to build.
10019(define-public grip
10020 (package
10021 (name "grip")
10022 (version "4.6.1")
10023 (source
10024 (origin
10025 (method git-fetch)
10026 (uri (git-reference
10027 (url "https://github.com/joeyespo/grip")
10028 (commit (string-append "v" version))))
10029 (file-name (git-file-name name version))
10030 (sha256
10031 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
10032 (build-system pyproject-build-system)
10033 (arguments
10034 (list
10035 #:test-flags
10036 ;; All tests fail requiring network access, ignore the whole file.
10037 #~(list "--ignore=tests/test_github.py")
10038 #:phases
10039 #~(modify-phases %standard-phases
10040 ;; This fixes the removal of `charset` attribute of requests from
10041 ;; Werkzeug 2.3.0.
10042 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
10043 (add-after 'unpack 'fix-response-encoding
10044 (lambda _
10045 (substitute* "grip/app.py"
10046 (("response.charset")
10047 "getattr(response, 'charset', 'utf-8')")))))))
10048 (native-inputs
10049 (list nss-certs-for-test
10050 python-pytest
10051 python-responses
10052 python-setuptools
10053 python-wheel))
10054 (propagated-inputs
10055 (list python-docopt
10056 python-flask
10057 python-markdown
10058 python-path-and-address
10059 python-pygments
10060 python-requests))
10061 (home-page "https://github.com/joeyespo/grip")
10062 (synopsis "Preview Markdown files using the GitHub API")
10063 (description
10064 "Grip is a command-line server application written in Python that uses
10065the GitHub Markdown API to render a local Markdown file. The styles and
10066rendering come directly from GitHub, so you'll know exactly how it will
10067appear. Changes you make to the file will be instantly reflected in the
10068browser without requiring a page refresh.")
10069 (license license:expat)))
10070
10071(define-public python-port-for
10072 (package
10073 (name "python-port-for")
10074 (version "0.7.4")
10075 (source
10076 (origin
10077 (method url-fetch)
10078 (uri (pypi-uri "port_for" version))
10079 (sha256
10080 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
10081 (build-system pyproject-build-system)
10082 (propagated-inputs
10083 (list python-urllib3))
10084 (native-inputs
10085 (list python-pytest python-setuptools python-wheel))
10086 (home-page "https://github.com/kmike/port-for/")
10087 (synopsis "TCP localhost port finder and association manager")
10088 (description
10089 "This package provides a utility that helps with local TCP ports
10090management. It can find an unused TCP localhost port and remember the
10091association.")
10092 (license license:expat)))
10093
10094(define-public python-livereload
10095 (package
10096 (name "python-livereload")
10097 (version "2.7.1")
10098 (source
10099 (origin
10100 (method git-fetch)
10101 (uri (git-reference
10102 (url "https://github.com/lepture/python-livereload")
10103 (commit (string-append "v" version))))
10104 (file-name (git-file-name name version))
10105 (sha256
10106 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
10107 (build-system pyproject-build-system)
10108 (arguments (list #:test-backend #~'unittest))
10109 (native-inputs (list python-django python-setuptools))
10110 (propagated-inputs (list python-tornado))
10111 (home-page "https://github.com/lepture/python-livereload")
10112 (synopsis "Python LiveReload")
10113 (description
10114 "Python LiveReload provides a command line utility, @command{livereload},
10115for starting a web server in a directory. It can trigger arbitrary commands
10116and serve updated contents upon changes to the directory.")
10117 (license license:bsd-3)))
10118
10119(define-public python-vf-1
10120 (package
10121 (name "python-vf-1")
10122 (version "1.0.0")
10123 (source
10124 (origin
10125 (method git-fetch)
10126 (uri (git-reference
10127 (url "https://git.sr.ht/~solderpunk/VF-1")
10128 (commit (string-append "v" version))))
10129 (file-name (git-file-name name version))
10130 (sha256
10131 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
10132 (build-system pyproject-build-system)
10133 (arguments (list #:tests? #f)) ; No tests.
10134 (native-inputs (list python-setuptools))
10135 (home-page "https://git.sr.ht/~solderpunk/VF-1")
10136 (synopsis "Command line gopher client")
10137 (description "@code{VF-1} is a command line gopher client with
10138@acronym{TLS, Transport Layer Security} support.")
10139 (license license:bsd-2)))
10140
10141(define-public python-httpcore
10142 (package
10143 (name "python-httpcore")
10144 (version "1.0.9")
10145 (source
10146 (origin
10147 ;; PyPI tarball does not contain tests.
10148 (method git-fetch)
10149 (uri (git-reference
10150 (url "https://github.com/encode/httpcore")
10151 (commit version)))
10152 (file-name (git-file-name name version))
10153 (sha256
10154 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
10155 (build-system pyproject-build-system)
10156 (native-inputs
10157 (list nss-certs-for-test
10158 python-hatch-fancy-pypi-readme
10159 python-hatchling
10160 python-pytest
10161 python-pytest-asyncio
10162 python-pytest-httpbin
10163 python-pytest-trio
10164 python-uvicorn
10165 python-trustme))
10166 (propagated-inputs
10167 (list python-anyio
10168 python-certifi
10169 python-h11
10170 python-h2
10171 python-sniffio
10172 python-socksio
10173 python-trio
10174 python-trio-typing))
10175 (home-page "https://github.com/encode/httpcore")
10176 (synopsis "Minimal, low-level HTTP client")
10177 (description
10178 "HTTP Core provides a minimal and low-level HTTP client, which does one
10179thing only: send HTTP requests.
10180
10181Some things HTTP Core does do:
10182
10183@itemize
10184@item Sending HTTP requests.
10185@item Provides both sync and async interfaces.
10186@item Supports HTTP/1.1 and HTTP/2.
10187@item Async backend support for asyncio and trio.
10188@item Automatic connection pooling.
10189@item HTTP(S) proxy support.
10190@end itemize")
10191 (license license:bsd-3)))
10192
10193;;; Variant used to break a cycle between python-httpx and python-uvicorn.
10194(define-public python-httpcore-bootstrap
10195 (hidden-package
10196 (package/inherit python-httpcore
10197 (name "python-httpcore-bootstrap")
10198 (arguments (list #:tests? #f))
10199 (native-inputs (list python-hatchling
10200 python-hatch-fancy-pypi-readme)))))
10201
10202(define-public python-httpx
10203 (package
10204 (name "python-httpx")
10205 (version "0.28.1")
10206 (source
10207 (origin
10208 ;; PyPI tarball does not contain tests.
10209 (method git-fetch)
10210 (uri (git-reference
10211 (url "https://github.com/encode/httpx")
10212 (commit version)))
10213 (file-name (git-file-name name version))
10214 (sha256
10215 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
10216 (build-system pyproject-build-system)
10217 (arguments
10218 (list
10219 ;; 1401 passed, 1 skipped, 5 deselected
10220 #:test-flags
10221 #~(list "-o" "asyncio_mode=auto"
10222 ;; CLI tests are broken.
10223 "--ignore=tests/test_main.py"
10224 "-k" (string-join
10225 ;; These tests try to open an outgoing connection.
10226 (list "not test_async_proxy_close"
10227 "test_sync_proxy_clos"
10228 "test_write_timeout")
10229 " and not "))))
10230 (native-inputs
10231 (list nss-certs-for-test
10232 python-chardet
10233 python-cryptography
10234 python-hatch-fancy-pypi-readme
10235 python-hatchling
10236 python-pytest
10237 python-pytest-asyncio
10238 python-pytest-trio
10239 python-setuptools
10240 python-trio
10241 python-trustme
10242 python-uvicorn))
10243 (propagated-inputs
10244 (list python-anyio
10245 python-certifi
10246 python-httpcore
10247 python-idna
10248 ;; [brotli]
10249 python-brotli
10250 ;; [http2]
10251 python-h2
10252 ;; [socks]
10253 python-socksio
10254 ;; [zstd]
10255 python-zstandard
10256 ;; For trio, see:
10257 ;; <https://github.com/python-trio/trio/issues/2802>.
10258 python-sniffio))
10259 (home-page "https://www.python-httpx.org/")
10260 (synopsis "HTTP client for Python")
10261 (description
10262 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
10263and async APIs, and support for both HTTP/1.1 and HTTP/2.
10264
10265HTTPX builds on the well-established usability of requests, and gives you:
10266
10267@itemize
10268@item A broadly requests-compatible API.
10269@item Standard synchronous interface, but with async support if you need it.
10270@item HTTP/1.1 and HTTP/2 support.
10271@item Ability to make requests directly to WSGI applications or ASGI applications.
10272@item Strict timeouts everywhere.
10273@item Fully type annotated.
10274@item 99% test coverage.
10275@end itemize
10276
10277Plus all the standard features of requests:
10278
10279@itemize
10280@item International Domains and URLs
10281@item Keep-Alive & Connection Pooling
10282@item Sessions with Cookie Persistence
10283@item Browser-style SSL Verification
10284@item Basic/Digest Authentication
10285@item Elegant Key/Value Cookies
10286@item Automatic Decompression
10287@item Automatic Content Decoding
10288@item Unicode Response Bodies
10289@item Multipart File Uploads
10290@item HTTP(S) Proxy Support
10291@item Connection Timeouts
10292@item Streaming Downloads
10293@item .netrc Support
10294@item Chunked Requests
10295@end itemize")
10296 (license license:bsd-3)))
10297
10298;;; Variant used to break a cycle with python-uvicorn.
10299(define-public python-httpx-bootstrap
10300 (hidden-package
10301 (package/inherit python-httpx
10302 (name "python-httpx-bootstrap")
10303 (arguments (list #:tests? #f))
10304 (native-inputs
10305 (list python-hatchling
10306 python-hatch-fancy-pypi-readme))
10307 (propagated-inputs
10308 (modify-inputs propagated-inputs
10309 (replace "python-httpcore" python-httpcore-bootstrap))))))
10310
10311(define-public python-httpx-sse
10312 (package
10313 (name "python-httpx-sse")
10314 (version "0.4.3")
10315 (source
10316 (origin
10317 (method git-fetch)
10318 (uri (git-reference
10319 (url "https://github.com/florimondmanca/httpx-sse")
10320 (commit version)))
10321 (file-name (git-file-name name version))
10322 (sha256
10323 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
10324 (build-system pyproject-build-system)
10325 (arguments
10326 (list
10327 ;; XXX: Avoids python-pytest-cov dependency.
10328 #:test-flags #~(list "-c" "/dev/null")))
10329 (native-inputs
10330 (list python-pytest
10331 python-pytest-asyncio
10332 python-setuptools
10333 python-setuptools-scm
10334 python-sse-starlette))
10335 (propagated-inputs (list python-httpx))
10336 (home-page "https://github.com/florimondmanca/httpx-sse")
10337 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
10338 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
10339 (license license:expat)))
10340
10341(define-public python-wsgiprox
10342 (package
10343 (name "python-wsgiprox")
10344 (version "1.5.2")
10345 (source
10346 (origin
10347 (method url-fetch)
10348 (uri (pypi-uri "wsgiprox" version))
10349 (sha256
10350 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
10351 (build-system pyproject-build-system)
10352 (arguments
10353 ;; The test suite hangs (see:
10354 ;; https://github.com/webrecorder/wsgiprox/issues/6).
10355 (list
10356 #:tests? #f
10357 #:phases
10358 #~(modify-phases %standard-phases
10359 (add-after 'unpack 'fix-pytest-argument
10360 (lambda _
10361 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
10362 (substitute* "setup.py"
10363 (("--doctest-module")
10364 "--doctest-modules")))))))
10365 (propagated-inputs
10366 (list python-certauth python-gevent python-websocket-client))
10367 (native-inputs
10368 (list python-mock python-pytest-cov python-waitress python-setuptools))
10369 (home-page "https://github.com/webrecorder/wsgiprox")
10370 (synopsis "HTTP/S proxy with WebSockets over WSGI")
10371 (description
10372 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
10373middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
10374The library accepts HTTP and HTTPS proxy connections, and routes them to a
10375designated prefix.")
10376 (license license:asl2.0)))
10377
10378(define-public python-warcio
10379 ;; The PyPI release is missing some test support files (see:
10380 ;; https://github.com/webrecorder/warcio/issues/132).
10381 (package
10382 (name "python-warcio")
10383 (version "1.7.5")
10384 (source
10385 (origin
10386 (method git-fetch)
10387 (uri (git-reference
10388 (url "https://github.com/webrecorder/warcio")
10389 (commit (string-append "v" version))))
10390 (file-name (git-file-name name version))
10391 (sha256
10392 (base32
10393 "0r3kijsm8wsbipi5pxsrqpg5nn4w8iaw5i8010b0ligmfxnxamlb"))))
10394 (build-system pyproject-build-system)
10395 (arguments
10396 (list
10397 #:test-flags ; These tests fail due to networking requirements.
10398 '(list "-k" (format #f "not ~a"
10399 (string-join
10400 '("test_post_chunked"
10401 "test_remote"
10402 "test_capture_http_proxy"
10403 "test_capture_https_proxy"
10404 "test_capture_https_proxy_same_session")
10405 " and not "))
10406 ; The following test requires the hookdns package.
10407 "--ignore=test/test_capture_http_proxy.py")))
10408 (native-inputs
10409 ;; These inputs are required for the test suite.
10410 (list python-httpbin
10411 python-pytest-cov
10412 python-requests
10413 python-setuptools
10414 python-wheel
10415 python-wsgiprox))
10416 (home-page "https://github.com/webrecorder/warcio")
10417 (synopsis "Streaming web archival archive (WARC) library")
10418 (description "warcio is a Python library to read and write the WARC format
10419commonly used in Web archives. It is designed for fast, low-level access to
10420web archival content, oriented around a stream of WARC records rather than
10421files.")
10422 (license license:asl2.0)))
10423
10424(define-public python-websockets
10425 (package
10426 (name "python-websockets")
10427 (version "13.1")
10428 (source
10429 (origin
10430 (method git-fetch)
10431 (uri (git-reference
10432 (url "https://github.com/aaugustin/websockets")
10433 (commit version)))
10434 (file-name (git-file-name name version))
10435 (sha256
10436 (base32
10437 "1dx3rf6fmg4ir9cfcn1fil446qz879cwrjq2rcz5zvl71xkw6hb3"))))
10438 (build-system pyproject-build-system)
10439 (arguments
10440 (list #:test-backend #~'unittest
10441 #:phases
10442 #~(modify-phases %standard-phases
10443 (add-before 'check 'extend-test-timeout
10444 (lambda _
10445 ;; Some architectures need an even longer timeout. Make it
10446 ;; long enough that it should never fail due to timeout.
10447 #$@(if (target-riscv64?)
10448 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
10449 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
10450 (native-inputs
10451 (list python-setuptools
10452 python-wheel))
10453 (home-page "https://github.com/aaugustin/websockets")
10454 (synopsis
10455 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
10456 (description
10457 "@code{websockets} is a library for building WebSocket servers and clients
10458in Python with a focus on correctness and simplicity.
10459
10460Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
10461it provides an elegant coroutine-based API.")
10462 (license license:bsd-3)))
10463
10464(define-public selenium-manager
10465 (package
10466 (name "selenium-manager")
10467 (version "4.34.2")
10468 (source
10469 (origin
10470 (method git-fetch)
10471 (uri (git-reference
10472 (url "https://github.com/SeleniumHQ/selenium")
10473 (commit (string-append "selenium-" version "-python"))))
10474 (file-name (git-file-name name version))
10475 (sha256
10476 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
10477 (build-system cargo-build-system)
10478 (arguments
10479 (list
10480 ;; XXX: Almost all tests require either browsers or network access.
10481 #:tests? #f
10482 #:install-source? #f ; Most likely intended as a leaf.
10483 #:phases
10484 #~(modify-phases %standard-phases
10485 (add-after 'unpack 'chdir
10486 (lambda _
10487 (chdir "rust"))))))
10488 (native-inputs (list pkg-config))
10489 (inputs (cons* (list zstd "lib") xz
10490 (cargo-inputs 'selenium-manager)))
10491 (home-page "https://www.selenium.dev")
10492 (synopsis "CLI tool to manager the browser test infrastructure")
10493 (description
10494 "Selenium simplifies web browser automation. It specifically provides
10495infrastructure for the W3C WebDriver specification — a platform and
10496language-neutral coding interface compatible with all major web browsers.
10497
10498Selenium Manager is a CLI tool that automatically manages the browser/driver
10499infrastructure required by Selenium.")
10500 (license license:asl2.0)))
10501
10502(define-public python-selenium
10503 (package/inherit selenium-manager
10504 (name "python-selenium")
10505 (build-system pyproject-build-system)
10506 (arguments
10507 (list
10508 ;; XXX: Disable failing tests.
10509 #:test-flags
10510 #~(list "--ignore-glob=test/selenium/webdriver/*"
10511 ;; Probably requires those.
10512 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
10513 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
10514 ;; XXX: SSL certificates access.
10515 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
10516 "-k" "not test_missing_cdp_devtools_version_falls_back")
10517 #:phases
10518 #~(modify-phases %standard-phases
10519 (add-after 'unpack 'chdir
10520 (lambda _
10521 (chdir "py")))
10522 (add-after 'chdir 'inject-selenium-manager-binary
10523 (lambda* (#:key inputs #:allow-other-keys)
10524 (substitute* "selenium/webdriver/common/selenium_manager.py"
10525 (("compiled_path = Path.*")
10526 (format #f "return Path(~s)~%"
10527 (search-input-file inputs "bin/selenium-manager"))))
10528 (substitute* "pyproject.toml"
10529 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
10530 "")
10531 (("target = \"selenium\\.webdriver\\.common.*\"")
10532 ""))))
10533 (add-after 'chdir 'relax-requirements
10534 (lambda _
10535 (substitute* "pyproject.toml"
10536 (("\"(typing_extensions|trio)~=.*\"," _ target)
10537 (format #f "~s," target))))))))
10538 (propagated-inputs (list python-certifi
10539 python-trio
10540 python-trio-websocket
10541 python-typing-extensions
10542 python-urllib3
10543 python-websocket-client))
10544 (inputs (list selenium-manager))
10545 (native-inputs (list python-filetype
10546 python-pytest
10547 python-pytest-mock
10548 python-pytest-trio
10549 python-setuptools
10550 python-setuptools-rust))
10551 (synopsis "Python bindings for Selenium")
10552 (description
10553 "Selenium enables web browser automation. It specifically provides
10554infrastructure for the W3C WebDriver specification — a platform and
10555language-neutral coding interface compatible with all major web browsers.")))
10556
10557(define-public python-rapidjson
10558 (package
10559 (name "python-rapidjson")
10560 (version "1.10")
10561 (source
10562 (origin
10563 (method url-fetch)
10564 (uri (pypi-uri "python-rapidjson" version))
10565 (sha256
10566 (base32
10567 "0h1m9m4a5rlf5hw6ak7z3qbgdhmqarzxw9d140mcf7mrxpswpzmc"))
10568 (modules '((guix build utils)))
10569 (snippet
10570 '(delete-file-recursively "rapidjson"))))
10571 (build-system pyproject-build-system)
10572 (arguments
10573 (list
10574 #:test-flags '(list "tests")
10575 #:phases
10576 #~(modify-phases %standard-phases
10577 ;; We cannot seem to use #:configure-flags with the
10578 ;; pyproject-build-system to override rj_include_dir.
10579 (add-after 'unpack 'override-rapidjson-sources
10580 (lambda _
10581 (substitute* "setup.py"
10582 (("^rj_include_dir =.*")
10583 (string-append "rj_include_dir = '"
10584 #$(this-package-native-input "rapidjson")
10585 "/include/rapidjson" "'"))
10586 (("if not os.path.isdir.*") "if False:")))))))
10587 (native-inputs
10588 (list rapidjson python-pytest python-pytz python-setuptools python-wheel))
10589 (home-page "https://github.com/python-rapidjson/python-rapidjson")
10590 (synopsis "Python wrapper around rapidjson")
10591 (description "This package provides a python wrapper around rapidjson.")
10592 (license license:expat)))
10593
10594(define-public python-venusian
10595 (package
10596 (name "python-venusian")
10597 (version "3.1.1")
10598 (source
10599 (origin
10600 (method url-fetch)
10601 (uri (pypi-uri "venusian" version))
10602 (sha256
10603 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
10604 (build-system pyproject-build-system)
10605 (arguments
10606 (list
10607 #:phases
10608 #~(modify-phases %standard-phases
10609 (add-after 'unpack 'fix-pytest-config
10610 (lambda _
10611 (substitute* "setup.cfg"
10612 (("--cov --cov-report=term-missing ") "")))))))
10613 (native-inputs
10614 (list python-pytest
10615 python-setuptools))
10616 (home-page "https://docs.pylonsproject.org/projects/venusian")
10617 (synopsis "Library for deferring decorator actions")
10618 (description
10619 "Venusian is a library which allows framework authors to defer decorator
10620actions. Instead of taking actions when a function (or class) decorator is
10621executed at import time, you can defer the action usually taken by the
10622decorator until a separate scan phase.")
10623 (license license:repoze)))
10624
10625(define-public python-zope-deprecation
10626 (package
10627 (name "python-zope-deprecation")
10628 (version "6.0")
10629 (source (origin
10630 (method url-fetch)
10631 (uri (pypi-uri "zope_deprecation" version))
10632 (sha256
10633 (base32
10634 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
10635 (build-system pyproject-build-system)
10636 (arguments
10637 (list #:tests? #f)) ;no tests in PyPI
10638 (native-inputs
10639 (list python-setuptools))
10640 (home-page "https://zopedeprecation.readthedocs.io/")
10641 (synopsis "Function for marking deprecations")
10642 (description "The @code{zope.deprecation} module provides a function for
10643marking modules, classes, functions, methods and properties as deprecated,
10644displaying warnings when usaged in application code.")
10645 (license license:zpl2.1)))
10646
10647(define-public python-translationstring
10648 (package
10649 (name "python-translationstring")
10650 (version "1.4")
10651 (source (origin
10652 (method url-fetch)
10653 (uri (pypi-uri "translationstring" version))
10654 (sha256
10655 (base32
10656 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
10657 (build-system pyproject-build-system)
10658 (native-inputs
10659 (list python-pytest
10660 python-setuptools))
10661 (home-page "https://docs.pylonsproject.org/projects/translationstring")
10662 (synopsis "Internationalization tooling for the Pylons project")
10663 (description "This package provides a library used by various Pylons
10664project packages for internationalization (i18n) duties related to
10665translation.")
10666 (license license:repoze)))
10667
10668(define-public python-plaster
10669 (package
10670 (name "python-plaster")
10671 (version "1.1.2")
10672 (source (origin
10673 (method url-fetch)
10674 (uri (pypi-uri "plaster" version))
10675 (sha256
10676 (base32
10677 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
10678 (build-system pyproject-build-system)
10679 (native-inputs
10680 (list python-pytest
10681 python-setuptools))
10682 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
10683 (synopsis "Configuration loader for multiple config file formats")
10684 (description
10685 "Plaster is a loader interface around multiple config file formats. It
10686exists to define a common API for applications to use when they wish to load
10687configuration. The library itself does not aim to handle anything except a
10688basic API that applications may use to find and load configuration settings.
10689Any specific constraints should be implemented in a pluggable loader which can
10690be registered via an entrypoint.")
10691 (license license:repoze)))
10692
10693(define-public python-plaster-pastedeploy
10694 (package
10695 (name "python-plaster-pastedeploy")
10696 (version "1.0.1")
10697 (source (origin
10698 (method url-fetch)
10699 (uri (pypi-uri "plaster_pastedeploy" version))
10700 (sha256
10701 (base32
10702 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
10703 (build-system pyproject-build-system)
10704 (native-inputs
10705 (list python-pytest
10706 python-setuptools))
10707 (propagated-inputs
10708 (list python-plaster python-pastedeploy))
10709 (home-page "https://github.com/Pylons/plaster_pastedeploy")
10710 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
10711 (description
10712 "This plugin for @code{python-plaster} adds support for PasteDeploy
10713syntax, it provides a plaster @code{Loader} object that can parse ini files
10714according to the standard set by PasteDeploy")
10715 (license license:expat)))
10716
10717(define-public python-hupper
10718 (package
10719 (name "python-hupper")
10720 (version "1.12.1")
10721 (source
10722 (origin
10723 (method url-fetch)
10724 (uri (pypi-uri "hupper" version))
10725 (sha256
10726 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
10727 (build-system pyproject-build-system)
10728 (arguments
10729 (list
10730 ;; RuntimeError: timeout waiting for change to
10731 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
10732 #:test-flags #~(list "--ignore=tests/test_it.py")))
10733 (native-inputs
10734 (list python-pytest
10735 python-pytest-cov
10736 python-setuptools
10737 python-wheel))
10738 (propagated-inputs
10739 (list python-watchdog))
10740 (home-page "https://readthedocs.org/projects/hupper")
10741 (synopsis "Integrated process monitor tracking changes to imported Python files")
10742 (description
10743 "Hupper is an integrated process monitor that will track changes to any
10744imported Python files in sys.modules as well as custom paths. When files are
10745changed the process is restarted.")
10746 (license license:expat)))
10747
10748(define-public python-pyowm
10749 (package
10750 (name "python-pyowm")
10751 (version "3.3.0")
10752 (source
10753 (origin
10754 (method git-fetch)
10755 (uri (git-reference
10756 (url "https://github.com/csparpa/pyowm")
10757 (commit version)))
10758 (file-name (git-file-name name version))
10759 (sha256
10760 (base32
10761 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
10762 (build-system pyproject-build-system)
10763 (arguments (list #:test-flags #~(list "tests/unit")))
10764 (native-inputs (list python-pytest python-setuptools python-wheel))
10765 (propagated-inputs
10766 (list python-geojson-for-pyowm
10767 python-pysocks
10768 python-requests))
10769 (home-page "https://github.com/csparpa/pyowm")
10770 (synopsis "Python wrapper around OpenWeatherMap web APIs")
10771 (description
10772 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
10773 (license license:expat)))
10774
10775(define-public python-pyramid
10776 (package
10777 (name "python-pyramid")
10778 (version "2.0.2")
10779 (source (origin
10780 (method url-fetch)
10781 (uri (pypi-uri "pyramid" version))
10782 (sha256
10783 (base32
10784 "1phqdz068hl3zda263qkjp5am8fmvmpcxp3nrhsna8g472kkh89p"))))
10785 (build-system pyproject-build-system)
10786 (propagated-inputs
10787 (list python-hupper
10788 python-plaster
10789 python-plaster-pastedeploy
10790 python-setuptools
10791 python-translationstring
10792 python-venusian
10793 python-webob
10794 python-zope-component
10795 python-zope-deprecation
10796 python-zope-interface))
10797 (native-inputs (list python-pytest python-webtest python-wheel))
10798 (home-page "https://trypyramid.com/")
10799 (synopsis "Python web-framework suitable for small and large sites")
10800 (description
10801 "Pyramid makes it easy to write web applications. From minimal
10802request/response web apps to larger, grown applications.")
10803 (license license:repoze)))
10804
10805(define-public python-pyramid-chameleon
10806 ;; PyPI lacks a fresh release, use the latest commit assosiated with
10807 ;; unrleased version, see:
10808 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
10809 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
10810 (revision "0"))
10811 (package
10812 (name "python-pyramid-chameleon")
10813 (version (git-version "0.4.dev0" revision commit))
10814 (source
10815 (origin
10816 (method git-fetch)
10817 (uri (git-reference
10818 (url "https://github.com/Pylons/pyramid_chameleon")
10819 (commit commit)))
10820 (file-name (git-file-name name version))
10821 (sha256
10822 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
10823 (build-system pyproject-build-system)
10824 (native-inputs
10825 (list python-pytest
10826 python-setuptools))
10827 (propagated-inputs
10828 (list python-chameleon
10829 python-pyramid))
10830 (home-page "https://github.com/Pylons/pyramid_chameleon")
10831 (synopsis "Chameleon template compiler for pyramid")
10832 (description
10833 "These package provides bindings for the Chameleon templating system
10834 for the Pyramid web framework.")
10835 (license license:repoze))))
10836
10837(define-public python-pyramid-debugtoolbar
10838 (package
10839 (name "python-pyramid-debugtoolbar")
10840 (version "4.12.1")
10841 (source
10842 (origin
10843 (method url-fetch)
10844 (uri (pypi-uri "pyramid_debugtoolbar" version))
10845 (sha256
10846 (base32 "0gdlc7vcga4vzma53h5csnhh4gwfmv3w8v9y5fhwqpy8979qis3i"))))
10847 (build-system pyproject-build-system)
10848 (arguments
10849 (list
10850 #:test-flags
10851 ;; Large diff assertion not equal faileurs.
10852 #~(list #$@(map (lambda (test)
10853 (string-append "--deselect=tests"
10854 "/test_panels/test_sqla.py::" test))
10855 (list "TestSimpleSelect::test_panel"
10856 "TestTransactionCommit::test_panel"
10857 "TestTransactionRollback::test_panel")))))
10858 (native-inputs
10859 (list python-pytest
10860 python-setuptools
10861 python-webtest))
10862 (propagated-inputs
10863 (list python-pyramid
10864 python-pyramid-chameleon
10865 python-pyramid-jinja2
10866 python-pyramid-mako
10867 ;; python-selenium ; see: guix/guix#3478
10868 python-sqlalchemy
10869 python-waitress))
10870 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
10871 (synopsis "Pyramid debug toolbar")
10872 (description
10873 "This package provides an interactive HTML debugger for Pyramid application
10874development.")
10875 (license license:bsd-3)))
10876
10877(define-public python-pyramid-jinja2
10878 (package
10879 (name "python-pyramid-jinja2")
10880 (version "2.10.1")
10881 (source
10882 (origin
10883 (method url-fetch)
10884 (uri (pypi-uri "pyramid_jinja2" version))
10885 (sha256
10886 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
10887 (build-system pyproject-build-system)
10888 (arguments
10889 (list
10890 #:test-flags
10891 ;; Two tests failed with assertion not equal.
10892 #~(list "-k" "not test_it_relative_to_package and not test_options")
10893 #:phases
10894 #~(modify-phases %standard-phases
10895 (add-after 'unpack 'fix-pytest-config
10896 (lambda _
10897 (substitute* "setup.cfg"
10898 ((" --cov") "")))))))
10899 (native-inputs
10900 (list python-pytest
10901 python-setuptools
10902 python-webtest))
10903 (propagated-inputs
10904 (list python-jinja2
10905 python-markupsafe
10906 python-pyramid
10907 python-zope-deprecation))
10908 (home-page "https://github.com/Pylons/pyramid_jinja2")
10909 (synopsis "Jinja2 template bindings for the Pyramid web framework")
10910 (description "This package provides Jinja2 template bindings for the
10911Pyramid web framework.")
10912 (license license:repoze)))
10913
10914(define-public python-pyramid-mako
10915 ;; 1.1.0 was released in 2019, there a lot of compatability changes on
10916 ;; master, us the latest commit for now.
10917 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
10918 (revision "0"))
10919 (package
10920 (name "python-pyramid-mako")
10921 (version (git-version "1.1.0" revision commit))
10922 (source
10923 (origin
10924 (method git-fetch)
10925 (uri (git-reference
10926 (url "https://github.com/Pylons/pyramid_mako")
10927 (commit commit)))
10928 (file-name (git-file-name name version))
10929 (sha256
10930 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
10931 (build-system pyproject-build-system)
10932 (arguments
10933 (list
10934 #:phases
10935 #~(modify-phases %standard-phases
10936 (add-after 'unpack 'fix-pytest-config
10937 (lambda _
10938 (substitute* "pyproject.toml"
10939 ((" --cov --cov-report=term-missing") "")))))))
10940 (native-inputs
10941 (list python-pytest
10942 python-setuptools))
10943 (propagated-inputs
10944 (list python-mako
10945 python-pyramid))
10946 (home-page "https://github.com/Pylons/pyramid_mako")
10947 (synopsis "Mako template bindings for the Pyramid web framework")
10948 (description
10949 "This package provides Mako template bindings for the Pyramid web
10950framework.")
10951 (license license:repoze))))
10952
10953(define-public python-pyramid-retry
10954 (package
10955 (name "python-pyramid-retry")
10956 (version "2.1.1")
10957 (source
10958 (origin
10959 (method url-fetch)
10960 (uri (pypi-uri "pyramid_retry" version))
10961 (sha256
10962 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
10963 (build-system pyproject-build-system)
10964 (native-inputs
10965 (list python-pytest
10966 python-setuptools
10967 python-webtest))
10968 (propagated-inputs
10969 (list python-pyramid
10970 python-zope-interface))
10971 (home-page "https://github.com/Pylons/pyramid_retry")
10972 (synopsis "Pyramid execution policy supporting retrying failed requests")
10973 (description
10974 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
10975and can retry them a configurable number of times under certain \"retryable\"
10976error conditions before indicating a failure to the client.")
10977 (license license:expat)))
10978
10979(define-public python-pyramid-tm
10980 (package
10981 (name "python-pyramid-tm")
10982 (version "2.6")
10983 (source
10984 (origin
10985 (method url-fetch)
10986 (uri (pypi-uri "pyramid_tm" version))
10987 (sha256
10988 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
10989 (build-system pyproject-build-system)
10990 (arguments
10991 (list
10992 #:phases
10993 #~(modify-phases %standard-phases
10994 (add-after 'unpack 'fix-pytest-config
10995 (lambda _
10996 (substitute* "setup.cfg"
10997 ((" --cov") "")))))))
10998 (native-inputs
10999 (list python-pytest
11000 python-setuptools
11001 python-webtest))
11002 (propagated-inputs
11003 (list python-pyramid
11004 python-transaction))
11005 (home-page "https://github.com/Pylons/pyramid_tm")
11006 (synopsis "Centralized transaction management for Pyramid")
11007 (description
11008 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
11009active @url{https://pypi.org/project/transaction/, transaction} as provided by
11010the Python transaction package.")
11011 (license license:repoze)))
11012
11013(define-public python-random-user-agent
11014 (package
11015 (name "python-random-user-agent")
11016 (version "1.0.1")
11017 (source
11018 (origin
11019 (method url-fetch)
11020 (uri (pypi-uri "random_user_agent" version))
11021 (sha256
11022 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
11023 (build-system pyproject-build-system)
11024 (arguments (list #:tests? #f)) ; No tests.
11025 (native-inputs (list python-setuptools))
11026 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
11027 (synopsis "List of user agents")
11028 (description
11029 "This package provides a list of user agents, from a collection of more
11030than 326,000 known user-agents. Users can pick a random one, or select one
11031based on filters.")
11032 (license license:expat)))
11033
11034(define-public python-rangehttpserver
11035 (package
11036 (name "python-rangehttpserver")
11037 (version "1.4.0")
11038 (source
11039 (origin
11040 (method git-fetch)
11041 (uri (git-reference
11042 (url "https://github.com/danvk/RangeHTTPServer")
11043 (commit version)))
11044 (file-name (git-file-name name version))
11045 (sha256
11046 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
11047 (build-system pyproject-build-system)
11048 (native-inputs
11049 (list python-pytest
11050 python-requests
11051 python-setuptools))
11052 (home-page "https://github.com/danvk/RangeHTTPServer")
11053 (synopsis "SimpleHTTPServer with support for range requests")
11054 (description
11055 "This tool provides a simple HTTP server with support for Range
11056requests.")
11057 (license license:asl2.0)))
11058
11059(define-public python-flask-restx
11060 (package
11061 (name "python-flask-restx")
11062 (version "1.3.0")
11063 (source
11064 (origin
11065 (method git-fetch) ;no tests in PyPI archive
11066 (uri (git-reference
11067 (url "https://github.com/python-restx/flask-restx")
11068 (commit version)))
11069 (file-name (git-file-name name version))
11070 (sha256
11071 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
11072 (build-system pyproject-build-system)
11073 (arguments
11074 (list
11075 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
11076 #:test-flags
11077 #~(list "--benchmark-skip"
11078 ;; ValueError: http://www.google.com is not a valid URL. Domain
11079 ;; does not exists.
11080 "--deselect=tests/test_inputs.py::URLTest::test_check"
11081 "-k" (string-join
11082 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
11083 (list "not test_rfc822_value"
11084 "test_iso8601_value"
11085 ;; assert 404 == 2000
11086 "test_specs_endpoint_host_and_subdomain"
11087 ;; ValueError: [email protected] is not a valid email
11088 "test_valid_value_check")
11089 " and not "))))
11090 (native-inputs
11091 (list python-blinker
11092 python-faker
11093 python-pytest
11094 python-pytest-benchmark
11095 python-pytest-flask
11096 python-pytest-mock
11097 python-setuptools))
11098 (propagated-inputs
11099 (list python-aniso8601
11100 python-flask
11101 python-importlib-resources
11102 python-jsonschema
11103 python-pytz
11104 python-werkzeug))
11105 (home-page "https://github.com/python-restx/flask-restx")
11106 (synopsis
11107 "Framework for fast, easy and documented API development with Flask")
11108 (description
11109 "Flask-RESTX is an extension for Flask that adds support for quickly building
11110REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
11111 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
11112decorators and tools to describe your API and expose its documentation properly using
11113Swagger.")
11114 (license license:bsd-3)))
11115
11116(define-deprecated-package python-flask-restplus
11117 python-flask-restx)
11118
11119(define-public python-flask-socketio
11120 (package
11121 (name "python-flask-socketio")
11122 (version "5.5.1")
11123 (source
11124 (origin
11125 (method url-fetch)
11126 (uri (pypi-uri "flask_socketio" version))
11127 (sha256
11128 (base32
11129 "1i0yqn39b4v4r2whppx47sg7iicvqzssd1clx7cclk07l52cjinr"))))
11130 (build-system pyproject-build-system)
11131 (propagated-inputs
11132 (list python-flask python-socketio))
11133 (native-inputs
11134 (list python-pytest python-redis python-setuptools python-wheel))
11135 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
11136 (synopsis "Socket.IO integration for Flask applications")
11137 (description "Socket.IO integration for Flask applications")
11138 (license license:expat)))
11139
11140(define-public python-manuel
11141 (package
11142 (name "python-manuel")
11143 (version "1.13.0")
11144 (source
11145 (origin
11146 (method url-fetch)
11147 (uri (pypi-uri "manuel" version))
11148 (sha256
11149 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
11150 (build-system pyproject-build-system)
11151 (arguments
11152 (list
11153 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
11154 #:tests? #f))
11155 (propagated-inputs
11156 (list python-setuptools)) ;install requires
11157 (home-page "https://pypi.org/project/manuel/")
11158 (synopsis "Build tested documentation")
11159 (description
11160 "Manuel lets you mix and match traditional doctests with custom test syntax.")
11161 (license license:asl2.0)))
11162
11163(define-public python-marshmallow-jsonapi
11164 (package
11165 (name "python-marshmallow-jsonapi")
11166 (version "0.26.0")
11167 (source
11168 (origin
11169 (method git-fetch)
11170 (uri (git-reference
11171 ;; XXX: Deprecated upstream: This repository has been archived
11172 ;; by the owner on Jun 6, 2024. It is now read-only.
11173 ;; Using a maintained fork. The pypi name of this fork
11174 ;; is marshmallow-jsonapi-minfork.
11175 (url "https://github.com/tadams42/marshmallow-jsonapi")
11176 (commit version)))
11177 (file-name (git-file-name name version))
11178 (sha256
11179 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
11180 (build-system pyproject-build-system)
11181 (native-inputs
11182 (list python-faker
11183 python-flask
11184 python-pytest
11185 python-setuptools))
11186 (propagated-inputs (list python-marshmallow))
11187 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
11188 (synopsis "JSON:API 1.0 formatting with Marshmallow")
11189 (description
11190 "The marshmallow-jsonapi package provides a simple way to produce
11191@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
11192framework. It includes optional utilities to integrate with Flask. This is a
11193forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
11194 (license license:expat)))
11195
11196(define-public python-pecan
11197 (package
11198 (name "python-pecan")
11199 (version "1.6.1")
11200 (source
11201 (origin
11202 (method git-fetch) ;no tests in pypi release
11203 (uri (git-reference
11204 (url "https://github.com/pecan/pecan")
11205 (commit version)))
11206 (file-name (git-file-name name version))
11207 (sha256
11208 (base32
11209 "1ybjvpws741bvxd7aq5hh8gv5sk9836hb9afgalqsm0lxsq0li3a"))))
11210 (build-system pyproject-build-system)
11211 (arguments
11212 (list
11213 #:test-flags '(list "--pyargs" "pecan")))
11214 (native-inputs
11215 (list gunicorn
11216 python-genshi
11217 python-jinja2
11218 python-pytest
11219 python-sqlalchemy))
11220 (propagated-inputs
11221 (list python-logutils
11222 python-mako
11223 python-six
11224 python-webob
11225 python-webtest))
11226 (home-page "http://github.com/pecan/pecan")
11227 (synopsis "WSGI object-dispatching web framework")
11228 (description "This package provides a WSGI object-dispatching web
11229framework, designed to be lean and fast, with few dependencies.")
11230 (license license:bsd-3)))
11231
11232(define-public python-persistent
11233 (package
11234 (name "python-persistent")
11235 (version "6.1.1")
11236 (source
11237 (origin
11238 (method git-fetch)
11239 (uri (git-reference
11240 (url "https://github.com/zopefoundation/persistent/")
11241 (commit version)))
11242 (file-name (git-file-name name version))
11243 (sha256
11244 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
11245 (build-system pyproject-build-system)
11246 (arguments
11247 (list
11248 #:phases
11249 #~(modify-phases %standard-phases
11250 (replace 'check
11251 (lambda* (#:key tests? #:allow-other-keys)
11252 (if tests?
11253 (invoke "zope-testrunner" "--test-path=src"
11254 ;; XXX: Ignore doc tests.
11255 "!persistent.tests.test_docs")
11256 (format #t "test suite not run~%")))))))
11257 (propagated-inputs
11258 (list python-cffi
11259 python-zope-deferredimport
11260 python-zope-interface
11261 python-zope-testrunner))
11262 (native-inputs
11263 (list python-manuel python-zope-testrunner python-setuptools))
11264 (home-page "https://github.com/zopefoundation/persistent/")
11265 (synopsis "Translucent persistent objects")
11266 (description
11267 "This package contains a generic persistence implementation for Python.
11268It forms the core protocol for making objects interact \"transparently\" with
11269a database such as the ZODB.")
11270 (license license:zpl2.1)))
11271
11272(define-public python-btrees
11273 (package
11274 (name "python-btrees")
11275 (version "6.1")
11276 (source
11277 (origin
11278 (method git-fetch)
11279 (uri (git-reference
11280 (url "https://github.com/zopefoundation/BTrees")
11281 (commit version)))
11282 (file-name (git-file-name name version))
11283 (sha256
11284 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
11285 (build-system pyproject-build-system)
11286 (arguments
11287 (list
11288 #:phases
11289 #~(modify-phases %standard-phases
11290 (replace 'check
11291 (lambda* (#:key tests? #:allow-other-keys)
11292 (if tests?
11293 (invoke "zope-testrunner" "--test-path=src")
11294 (format #t "test suite not run~%")))))))
11295 (propagated-inputs (list python-persistent python-zope-interface))
11296 (native-inputs (list python-persistent python-transaction
11297 python-zope-testrunner python-setuptools))
11298 (home-page "https://github.com/zopefoundation/BTrees")
11299 (synopsis "Scalable persistent object containers")
11300 (description
11301 "This package contains a set of persistent object containers built around a
11302modified BTree data structure. The trees are optimized for use inside ZODB's
11303\"optimistic concurrency\" paradigm, and include explicit resolution of
11304conflicts detected by that mechanism.")
11305 (license license:zpl2.1)))
11306
11307(define-public python-transaction
11308 (package
11309 (name "python-transaction")
11310 (version "5.0")
11311 (source
11312 (origin
11313 (method url-fetch)
11314 (uri (pypi-uri "transaction" version))
11315 (sha256
11316 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
11317 (build-system pyproject-build-system)
11318 (native-inputs
11319 (list python-pytest
11320 python-setuptools))
11321 (propagated-inputs
11322 (list python-zope-interface))
11323 (home-page "https://github.com/zopefoundation/transaction")
11324 (synopsis "Transaction management for Python")
11325 (description "This package contains a generic transaction implementation
11326for Python. It is mainly used by the ZODB.")
11327 (license license:zpl2.1)))
11328
11329(define-public python-truststore
11330 (package
11331 (name "python-truststore")
11332 (version "0.10.4")
11333 (source
11334 (origin
11335 (method url-fetch)
11336 (uri (pypi-uri "truststore" version))
11337 (sha256
11338 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
11339 (build-system pyproject-build-system)
11340 (arguments
11341 (list #:tests? #f)) ;all tests require Internet access
11342 (native-inputs
11343 (list python-flit-core))
11344 (home-page "https://github.com/sethmlarson/truststore")
11345 (synopsis "Verify certificates using native system trust stores")
11346 (description
11347 "Truststore is a library which exposes native system certificate stores (ie
11348\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
11349Python applications no longer need to rely on certifi as a root certificate
11350store.")
11351 (license license:expat)))
11352
11353(define-public python-robot-detection
11354 (package
11355 (name "python-robot-detection")
11356 (version "0.4.0")
11357 (source
11358 (origin
11359 (method git-fetch)
11360 (uri (git-reference
11361 (url "https://github.com/rory/robot-detection")
11362 (commit (string-append "v" version))))
11363 (file-name (git-file-name name version))
11364 (sha256
11365 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
11366 (build-system pyproject-build-system)
11367 (arguments (list #:test-backend #~'unittest))
11368 (native-inputs (list python-setuptools))
11369 (propagated-inputs (list python-six))
11370 (home-page "https://github.com/rory/robot-detection")
11371 (synopsis "Detect web crawlers")
11372 (description
11373 "@code{robot_detection} is a python module to detect if a given HTTP User
11374Agent is a web crawler. It uses the list of registered robots from
11375@url{http://www.robotstxt.org}.")
11376 (license license:gpl3+)))
11377
11378(define-public python-robotframework-requests
11379 (package
11380 (name "python-robotframework-requests")
11381 (version "0.9.7")
11382 (source
11383 (origin
11384 (method git-fetch) ; no tests in PyPI release
11385 (uri (git-reference
11386 (url "https://github.com/MarketSquare/robotframework-requests")
11387 (commit (string-append "v" version))))
11388 (file-name (git-file-name name version))
11389 (sha256
11390 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
11391 (build-system pyproject-build-system)
11392 (native-inputs
11393 (list python-pytest
11394 python-setuptools
11395 python-wheel))
11396 (propagated-inputs
11397 (list python-requests
11398 python-robotframework))
11399 (home-page "https://github.com/MarketSquare/robotframework-requests")
11400 (synopsis "Robot Framework keyword library wrapper around requests")
11401 (description
11402 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
11403Framework} library aimed to provide HTTP API testing functionalities by
11404wrapping the @code{requests} Python library.")
11405 (license license:expat)))
11406
11407(define-public python-pysolr
11408 (package
11409 (name "python-pysolr")
11410 (version "3.10.0")
11411 (source
11412 (origin
11413 (method url-fetch)
11414 (uri (pypi-uri "pysolr" version))
11415 (sha256
11416 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
11417 (build-system pyproject-build-system)
11418 (arguments
11419 '(#:tests? #f)) ; Tests require network access.
11420 (native-inputs
11421 (list python-setuptools
11422 python-setuptools-scm
11423 python-wheel))
11424 (propagated-inputs
11425 (list python-requests))
11426 (home-page "https://github.com/django-haystack/pysolr/")
11427 (synopsis "Lightweight python wrapper for Apache Solr")
11428 (description
11429 "This module provides an interface that queries the Apache Solr server
11430using a pure Python implementation.")
11431 (license license:bsd-3)))
11432
11433(define-public python-pyjsparser
11434 ;; XXX: This project is potentially abandonware, consider to remove in next
11435 ;; refresh cycle, see:
11436 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
11437 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
11438 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
11439 (package
11440 (name "python-pyjsparser")
11441 (version "2.7.1")
11442 (source
11443 (origin
11444 (method url-fetch)
11445 (uri (pypi-uri "pyjsparser" version))
11446 (sha256
11447 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
11448 (build-system pyproject-build-system)
11449 (arguments
11450 '(#:tests? #f)) ;no tests in PyPI
11451 (native-inputs (list python-setuptools))
11452 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
11453 (synopsis "Fast JavaScript parser")
11454 (description
11455 "This package provides a fast JavaScript parser (based on esprima.js)")
11456 (license license:expat)))
11457
11458(define-public python-js2py
11459 (package
11460 (name "python-js2py")
11461 (version "0.74")
11462 (source
11463 (origin
11464 (method url-fetch)
11465 (uri (pypi-uri "Js2Py" version))
11466 (sha256
11467 (base32 "0bwpp23qpx9amzqisiqvzlr17hr7vxqp4ry8lgxhw639hjmadwrr"))))
11468 (build-system pyproject-build-system)
11469 (arguments
11470 (list #:tests? #f)) ; tests require Node
11471 (native-inputs
11472 (list python-setuptools))
11473 (propagated-inputs
11474 (list python-pyjsparser
11475 python-six
11476 python-tzlocal))
11477 (home-page "https://github.com/PiotrDabkowski/Js2Py")
11478 (synopsis "JavaScript to Python translator")
11479 (description
11480 "This package provides a JavaScript to Python translator and a JavaScript
11481interpreter written in pure Python.")
11482 (license license:expat)))
11483
11484(define-public python-http-ece
11485 (package
11486 (name "python-http-ece")
11487 (version "1.2.1")
11488 (source
11489 (origin
11490 (method git-fetch)
11491 (uri (git-reference
11492 (url "https://github.com/web-push-libs/encrypted-content-encoding")
11493 (commit (string-append "v" version))))
11494 (file-name (git-file-name name version))
11495 (sha256
11496 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
11497 (build-system pyproject-build-system)
11498 (arguments
11499 `(#:phases
11500 (modify-phases %standard-phases
11501 (add-after 'unpack 'change-directory
11502 (lambda _ (chdir "python") #t)))))
11503 (native-inputs
11504 (list python-pytest
11505 python-pytest-cov
11506 python-setuptools))
11507 (propagated-inputs
11508 (list python-cryptography))
11509 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
11510 (synopsis "Encrypted Content Encoding for HTTP")
11511 (description
11512 "This package provides a simple implementation of Encrypted Content
11513Encoding for HTTP.")
11514 (license license:expat)))
11515
11516(define-public python-cloud-init
11517 (package
11518 (name "python-cloud-init")
11519 (version "24.2")
11520 (source
11521 (origin
11522 (method git-fetch)
11523 (uri (git-reference
11524 (url "https://github.com/canonical/cloud-init")
11525 (commit version)))
11526 (file-name (git-file-name name version))
11527 (sha256
11528 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
11529 (build-system pyproject-build-system)
11530 (arguments
11531 (list
11532 #:test-flags
11533 '(list
11534 ;; This requires usermod
11535 "--ignore=tests/unittests/distros/test_create_users.py"
11536 ;; This writes to /var
11537 "--ignore=tests/unittests/net/test_dhcp.py"
11538 "-k"
11539 (string-append
11540 ;; This test messes with PATH, so it cannot find mkdir
11541 "not test_path_env_gets_set_from_main"
11542 " and not test_apt_configure_sources_list_"
11543 ;; These all fail because /bin/sh doesn't exist. We cannot patch
11544 ;; this because the generated scripts must use /bin/sh as they are
11545 ;; supposed to be run on minimal systems.
11546 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
11547 " and not test_handler_runs_bootcmd_script_with_error"
11548 " and not test_subp_combined_stderr_stdout"
11549 " and not test_handle_part"))
11550 #:phases
11551 #~(modify-phases %standard-phases
11552 (add-after 'unpack 'patch-references
11553 (lambda _
11554 (substitute* "tests/unittests/cmd/test_clean.py"
11555 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
11556 (add-after 'install 'move-files
11557 (lambda* (#:key inputs outputs #:allow-other-keys)
11558 (for-each (lambda (dir)
11559 (let ((source (string-append (site-packages inputs outputs) "/" dir))
11560 (target (string-append #$output "/" (basename dir))))
11561 (copy-recursively source target)
11562 (delete-file-recursively source)))
11563 (list "etc" "lib" "usr/lib" "usr/share")))))))
11564 (propagated-inputs
11565 (list python-configobj
11566 python-jinja2
11567 python-jsonpatch
11568 python-jsonschema
11569 python-netifaces
11570 python-oauthlib
11571 python-pyserial
11572 python-pyyaml
11573 python-responses))
11574 (native-inputs
11575 (list procps ;for ps when running tests
11576 python-pytest
11577 python-pytest-cov
11578 python-pytest-mock
11579 python-passlib
11580 python-setuptools
11581 python-wheel))
11582 (home-page "https://github.com/canonical/cloud-init")
11583 (synopsis "Cloud instance initialization tools")
11584 (description
11585 "Cloud-init is the multi-distribution method for cross-platform cloud
11586instance initialization. It is supported across all major public cloud
11587providers, provisioning systems for private cloud infrastructure, and
11588bare-metal installations.")
11589 ;; Either license can be chosen
11590 (license (list license:asl2.0 license:gpl3))))
11591
11592(define-public python-cloudscraper
11593 (package
11594 (name "python-cloudscraper")
11595 (version "3.0.0")
11596 (source
11597 (origin
11598 (method git-fetch)
11599 (uri (git-reference
11600 (url "https://github.com/VeNoMouS/cloudscraper")
11601 (commit version)))
11602 (file-name (git-file-name name version))
11603 (sha256
11604 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
11605 (modules '((guix build utils)))
11606 (snippet
11607 '(with-directory-excursion "cloudscraper"
11608 (for-each delete-file
11609 '("captcha/9kw.py" "captcha/anticaptcha.py"))
11610 (substitute* "__init__.py"
11611 ;; Perhaps it's a joke, but don't promote proprietary software.
11612 (("([Th]is feature is not available) in the .*'" _ prefix)
11613 (string-append prefix ".'")))))))
11614 (build-system pyproject-build-system)
11615 (arguments
11616 (list
11617 #:test-flags
11618 #~(list "-k" "not test_403_handling")
11619 #:phases
11620 #~(modify-phases %standard-phases
11621 (add-after 'unpack 'relax-requirements
11622 (lambda _
11623 ;; XXX: Relax brotli dependency.
11624 (substitute* "pyproject.toml"
11625 (("\"brotli>=.*\"")
11626 "\"brotli\""))
11627 ;; XXX: Dependencies, that have not yet been packaged
11628 ;; and cause an import error when included.
11629 (delete-file "cloudscraper/interpreters/v8.py")))
11630 (add-after 'unpack 'fix-references
11631 (lambda _
11632 (substitute* "cloudscraper/interpreters/nodejs.py"
11633 (("'node'")
11634 (string-append "'" (which "node") "'"))))))))
11635 (inputs (list node-lts))
11636 (propagated-inputs
11637 (list python-pycryptodome
11638 python-brotli
11639 python-js2py
11640 python-polling2
11641 python-requests
11642 python-requests-toolbelt
11643 python-responses
11644 python-pyparsing
11645 python-websocket-client))
11646 (native-inputs (list python-pytest python-setuptools))
11647 (home-page "https://github.com/venomous/cloudscraper")
11648 (synopsis "Cloudflare anti-bot bypass")
11649 (description
11650 "This module acts as a webbrowser solving Cloudflare's Javascript
11651challenges.")
11652 (license license:expat)))
11653
11654(define-public python-imap-tools
11655 (package
11656 (name "python-imap-tools")
11657 (version "1.9.0")
11658 (source
11659 (origin
11660 (method git-fetch) ; no tests in PyPI release
11661 (uri (git-reference
11662 (url "https://github.com/ikvk/imap_tools")
11663 (commit (string-append "v" version))))
11664 (file-name (git-file-name name version))
11665 (sha256
11666 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
11667 (arguments
11668 (list
11669 #:test-flags
11670 ;; Tests require a network connection
11671 #~(list "-k" (string-append "not test_action"
11672 " and not test_attributes"
11673 " and not test_connection"
11674 " and not test_folders"
11675 " and not test_idle"
11676 " and not test_live"))))
11677 (build-system pyproject-build-system)
11678 (native-inputs
11679 (list python-pytest python-setuptools python-wheel))
11680 (home-page "https://github.com/ikvk/imap_tools")
11681 (synopsis "Work with email and mailbox by IMAP")
11682 (description
11683 "This Python library provides tools to deal with email and mailboxes
11684over IMAP:
11685
11686@itemize
11687@item Parsed email message attributes
11688@item Query builder for searching emails
11689@item Work with emails in folders (copy, delete, flag, move, seen)
11690@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
11691@end itemize")
11692 (license license:asl2.0)))
11693
11694(define-public python-giturlparse
11695 (package
11696 (name "python-giturlparse")
11697 (version "0.12.0")
11698 (source
11699 (origin
11700 (method git-fetch)
11701 (uri (git-reference
11702 (url "https://github.com/nephila/giturlparse")
11703 (commit version)))
11704 (file-name (git-file-name name version))
11705 (sha256
11706 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
11707 (build-system pyproject-build-system)
11708 (native-inputs (list python-pytest python-setuptools))
11709 (home-page "https://github.com/nephila/giturlparse")
11710 (synopsis "Git URL parsing module")
11711 (description
11712 "This package provides a git URL parsing module which supports parsing
11713and rewriting of remote git URLs from various hosting providers.")
11714 (license license:asl2.0)))
11715
11716(define-public python-hstspreload
11717 (package
11718 (name "python-hstspreload")
11719 (version "2025.1.1")
11720 (source
11721 (origin
11722 (method git-fetch)
11723 (uri (git-reference
11724 (url "https://github.com/sethmlarson/hstspreload")
11725 (commit version)))
11726 (file-name (git-file-name name version))
11727 (sha256
11728 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
11729 (build-system pyproject-build-system)
11730 (arguments (list #:tests? #f)) ; tests require external resources.
11731 (native-inputs (list python-setuptools))
11732 (home-page "https://github.com/sethmlarson/hstspreload")
11733 (synopsis "Chromium HSTS Preload list as a Python package")
11734 (description
11735 "@code{python-hstspreload} contains Chromium HSTS Preload list
11736as a Python package.")
11737 (license license:bsd-3)))
11738
11739(define-public python-sanic-routing
11740 (package
11741 (name "python-sanic-routing")
11742 (version "23.12.0")
11743 (source
11744 (origin
11745 (method url-fetch)
11746 (uri (pypi-uri "sanic-routing" version))
11747 (sha256
11748 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
11749 (build-system pyproject-build-system)
11750 (arguments
11751 ;; PyPi sources does not contain tests, recursive dependency on
11752 ;; python-sanic.
11753 (list #:tests? #f))
11754 (native-inputs (list python-setuptools python-wheel))
11755 (home-page "https://github.com/sanic-org/sanic-routing/")
11756 (synopsis "Routing component for Sanic")
11757 (description "Internal package for @code{python-sanic}, which provides
11758the @code{BasicRouter}.")
11759 (license license:expat)))
11760
11761(define-public python-sanic-testing
11762 (package
11763 (name "python-sanic-testing")
11764 (version "23.12.0")
11765 (source
11766 (origin
11767 (method url-fetch)
11768 (uri (pypi-uri "sanic-testing" version))
11769 (sha256
11770 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
11771 (build-system pyproject-build-system)
11772 (arguments
11773 ;; PyPi sources does not contain tests, recursive dependency on
11774 ;; python-sanic.
11775 (list #:tests? #f))
11776 (propagated-inputs (list python-httpx python-sanic-bootstrap))
11777 (native-inputs (list python-setuptools python-wheel))
11778 (home-page "https://github.com/sanic-org/sanic-testing/")
11779 (synopsis "Test clients for Sanic")
11780 (description "Internal package for @code{python-sanic}, which is
11781meant to be the core testing utility and clients for testing Sanic
11782applications.")
11783 (license license:expat)))
11784
11785(define-public python-sanic
11786 (package
11787 (name "python-sanic")
11788 (version "25.3.0")
11789 (source
11790 (origin
11791 (method url-fetch)
11792 (uri (pypi-uri "sanic" version))
11793 (sha256
11794 (base32 "1fv9wgsj54scbr7qhmwdgc4zqnqpwacpakcfxhsg10gc04h54pbp"))
11795 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
11796 (modules '((guix build utils)))
11797 (snippet #~(substitute* "setup.py"
11798 (("setuptools>=[0-9.]*")
11799 "setuptools")))))
11800 (build-system pyproject-build-system)
11801 (arguments
11802 (list
11803 #:test-flags
11804 #~(list "--asyncio-mode=auto"
11805 "--ignore=tests/benchmark/"
11806 "--ignore=tests/typing/test_typing.py"
11807 ;; Most tests hang or fail
11808 "--ignore=tests/test_cli.py"
11809 "--ignore=tests/worker/test_worker_serve.py"
11810 "-k"
11811 (string-append
11812 ;; PyPi sources lack examples module.
11813 "not test_gunicorn_"
11814 ;; Does not expect brotli and reordered headers.
11815 " and not test_raw_headers"
11816 ;; These look like buggy testcases.
11817 " and not test_zero_downtime"
11818 " and not test_non_default_uvloop_config_raises_warning"
11819 " and not test_listeners_triggered"
11820 " and not test_keep_alive_connection_context"
11821 " and not test_keep_alive_client_timeout"
11822 " and not test_conflicting_body_methods_overload"
11823 " and not test_unix_connection"
11824 ;; Unclear why they fail since core-updates merge.
11825 " and not test_missing_sni"
11826 " and not test_no_matching_cert"
11827 " and not test_wildcards"
11828 ;; These tests fail because subprotocols appear to be
11829 ;; parameterized as None
11830 " and not test_websocket_route_with_subprotocols"
11831 ;; AF_UNIX path too long
11832 " and not test_setup_and_teardown_unix"
11833 " and not test_configure_socket"
11834 ;; Freezes
11835 " and not test_server_run_with_repl"
11836 " and not test_server_run"
11837 " and not test_no_workers"))))
11838 (propagated-inputs
11839 (list python-aiofiles
11840 python-aioquic
11841 python-html5tagger
11842 python-httptools
11843 python-multidict
11844 python-sanic-routing
11845 python-tracerite
11846 python-typing-extensions
11847 python-ujson
11848 python-uvloop
11849 python-websockets))
11850 (native-inputs
11851 (list python-beautifulsoup4
11852 python-chardet
11853 python-cryptography
11854 python-docutils
11855 python-mypy
11856 python-pygments
11857 python-pytest
11858 python-pytest-asyncio
11859 python-pytest-benchmark
11860 python-pytest-sanic
11861 python-sanic-testing
11862 python-setuptools
11863 python-slotscheck
11864 python-towncrier
11865 python-types-ujson
11866 python-uvicorn
11867 python-wheel))
11868 (home-page "https://github.com/sanic-org/sanic/")
11869 (synopsis "Async Python web server/framework")
11870 (description
11871 "Sanic is a Python web server and web framework that's written to go
11872fast. It allows the usage of the @code{async/await} syntax added in Python
118733.5, which makes your code non-blocking and speedy.")
11874 (license license:expat)))
11875
11876(define-public python-sanic-bootstrap
11877 (package
11878 (inherit python-sanic)
11879 (name "python-sanic-bootstrap")
11880 (arguments (list #:tests? #f))
11881 (native-inputs (list python-setuptools python-wheel))))
11882
11883(define-public python-socketio
11884 (package
11885 (name "python-socketio")
11886 (version "5.12.1")
11887 (source
11888 (origin
11889 (method url-fetch)
11890 (uri (pypi-uri "python_socketio" version))
11891 (sha256
11892 (base32
11893 "175sd3fdld3s477i6b3v49yhf1alsbm1vaxzq44nqrqb8wgzz682"))))
11894 (build-system pyproject-build-system)
11895 (arguments
11896 (list #:test-flags
11897 '(list "--timeout=60"
11898 ;; These tests freeze.
11899 "--ignore-glob=tests/async/*")))
11900 (propagated-inputs
11901 (list python-bidict python-engineio python-msgpack))
11902 (native-inputs
11903 (list python-pytest
11904 python-pytest-asyncio
11905 python-pytest-timeout
11906 python-setuptools
11907 python-uvicorn
11908 python-wheel))
11909 (home-page "https://github.com/miguelgrinberg/python-socketio/")
11910 (synopsis "Python Socket.IO server")
11911 (description
11912 "This package provides a Python implementation of the @code{Socket.IO}
11913realtime client and server.")
11914 (license license:expat)))
11915
11916(define-public python-socks
11917 (package
11918 (name "python-socks")
11919 (version "2.7.2")
11920 (source
11921 (origin
11922 (method git-fetch)
11923 (uri (git-reference
11924 (url "https://github.com/romis2012/python-socks")
11925 (commit (string-append "v" version))))
11926 (file-name (git-file-name name version))
11927 (sha256
11928 (base32 "1alrfjkir69006qmr2ax3inrffk2bllpljwmprwczb44r0mya77m"))))
11929 (build-system pyproject-build-system)
11930 (propagated-inputs (list python-trio))
11931 (native-inputs
11932 (list python-anyio
11933 python-async-timeout
11934 python-flask
11935 python-pytest
11936 python-pytest-asyncio
11937 python-pytest-trio
11938 python-setuptools
11939 python-tiny-proxy
11940 python-trustme
11941 python-yarl))
11942 (home-page "https://github.com/romis2012/python-socks")
11943 (synopsis
11944 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
11945 (description
11946 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
11947 functionality.")
11948 (license license:asl2.0)))
11949
11950(define-public python-socksio
11951 (package
11952 (name "python-socksio")
11953 (version "1.0.0")
11954 (source
11955 (origin
11956 (method url-fetch)
11957 (uri (pypi-uri "socksio" version))
11958 (sha256
11959 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
11960 (build-system pyproject-build-system)
11961 (native-inputs
11962 (list python-flit-core
11963 python-pytest
11964 python-pytest-cov))
11965 (home-page "https://github.com/sethmlarson/socksio")
11966 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
11967 (description "The @code{socksio} Python module is a client-side sans-I/O
11968SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
11969@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
11970means the library itself does not handle the actual sending of the bytes
11971through the network, it only deals with the implementation details of the
11972SOCKS protocols. It can be paired with any I/O library.")
11973 (license license:expat)))
11974
11975(define-public python-simple-websocket
11976 (package
11977 (name "python-simple-websocket")
11978 (version "1.1.0")
11979 (source
11980 (origin
11981 (method url-fetch)
11982 (uri (pypi-uri "simple_websocket" version))
11983 (sha256
11984 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
11985 (build-system pyproject-build-system)
11986 (arguments
11987 ;; Requires Internet access to resolve example.com
11988 (list #:test-flags '(list "--ignore=tests/test_client.py")))
11989 (propagated-inputs (list python-wsproto))
11990 (native-inputs (list python-pytest
11991 python-setuptools))
11992 (home-page "https://github.com/miguelgrinberg/simple-websocket")
11993 (synopsis "Simple WebSocket server and client for Python")
11994 (description "This package provides a simple @code{WebSocket} server and
11995client for Python.")
11996 (license license:expat)))
11997
11998(define-public python-siosocks
11999 (package
12000 (name "python-siosocks")
12001 (version "0.3.0")
12002 (source
12003 (origin
12004 (method git-fetch)
12005 (uri (git-reference
12006 (url "https://github.com/pohmelie/siosocks")
12007 (commit (string-append "v" version))))
12008 (file-name (git-file-name name version))
12009 (sha256
12010 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
12011 (build-system pyproject-build-system)
12012 (native-inputs
12013 (list python-pytest
12014 python-pytest-asyncio
12015 python-pytest-cov
12016 python-pytest-trio
12017 python-setuptools))
12018 (propagated-inputs (list python-trio))
12019 (home-page "https://github.com/pohmelie/siosocks")
12020 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
12021 (description
12022 "This package provides a Python module and framework for sans-io socks proxy
12023client/server with couple io backends.
12024
12025Features:
12026@itemize
12027@item Only TCP connect (no BIND, no UDP)
12028@item Both client and server
12029@item SOCKS versions: 4, 4a, 5
12030@item SOCKSv5 auth: no auth, username/password
12031@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
12032@item One-shot socks server (@code{python -m siosocks})
12033@end itemize")
12034 (license license:expat)))
12035
12036(define-public python-tiny-proxy
12037 (package
12038 (name "python-tiny-proxy")
12039 (version "0.2.1")
12040 (source
12041 (origin
12042 (method url-fetch)
12043 (uri (pypi-uri "tiny_proxy" version))
12044 (sha256
12045 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
12046 (build-system pyproject-build-system)
12047 ;; There are only a handful of tests and they require the as yet
12048 ;; unpackaged httpx_socks.
12049 (arguments (list #:tests? #false))
12050 (propagated-inputs (list python-anyio))
12051 (native-inputs
12052 (list python-httpx
12053 python-pytest
12054 python-setuptools
12055 python-wheel))
12056 (home-page "https://github.com/romis2012/tiny-proxy")
12057 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
12058 (description "This package provides a simple proxy server (SOCKS4(a),
12059SOCKS5(h), HTTP tunnel).")
12060 (license license:asl2.0)))
12061
12062(define-public python-azure-nspkg
12063 (package
12064 (name "python-azure-nspkg")
12065 (version "3.0.2")
12066 (source
12067 (origin
12068 (method url-fetch)
12069 (uri (pypi-uri "azure-nspkg" version ".zip"))
12070 (sha256
12071 (base32
12072 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
12073 (build-system pyproject-build-system)
12074 (arguments (list #:tests? #f)) ;no tests in package
12075 (native-inputs (list unzip python-setuptools))
12076 (home-page "https://github.com/Azure/azure-sdk-for-python")
12077 (synopsis "Azure namespace internals")
12078 (description
12079 "This package is an internal Azure namespace package.")
12080 (license license:expat)))
12081
12082(define-public python-azure-storage-nspkg
12083 (package
12084 (name "python-azure-storage-nspkg")
12085 (version "3.1.0")
12086 (source
12087 (origin
12088 (method url-fetch)
12089 (uri (pypi-uri "azure-storage-nspkg" version))
12090 (sha256
12091 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
12092 (build-system pyproject-build-system)
12093 (arguments
12094 (list #:tests? #f)) ;no tests in PyPI archive
12095 (native-inputs (list python-setuptools))
12096 (propagated-inputs (list python-azure-nspkg))
12097 (home-page "https://github.com/Azure/azure-storage-python")
12098 (synopsis "Microsoft Azure Storage Namespace package")
12099 (description
12100 "This project provides a client library in Python that makes it easy to
12101communicate with Microsoft Azure Storage services.")
12102 (license license:expat)))
12103
12104(define-public python-azure-common
12105 (package
12106 (name "python-azure-common")
12107 (version "1.1.28")
12108 (source
12109 (origin
12110 (method url-fetch)
12111 (uri (pypi-uri "azure-common" version ".zip"))
12112 (sha256
12113 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
12114 (build-system pyproject-build-system)
12115 (arguments
12116 (list #:tests? #f)) ;no tests in PyPI archive
12117 (propagated-inputs (list python-azure-nspkg))
12118 (native-inputs (list python-setuptools unzip))
12119 (home-page "https://github.com/Azure/azure-sdk-for-python")
12120 (synopsis "Microsoft Azure Client library for Python")
12121 (description "This package provides the Microsoft Azure Client library for
12122Python.")
12123 (license license:expat)))
12124
12125(define-public python-azure-core
12126 (package
12127 (name "python-azure-core")
12128 (version "1.32.0")
12129 (source
12130 (origin
12131 (method url-fetch)
12132 (uri (pypi-uri "azure_core" version))
12133 (sha256
12134 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
12135 (build-system pyproject-build-system)
12136 (arguments
12137 (list
12138 #:test-flags
12139 `(list ;; This fails because devtools_testutils doesn't exist.
12140 "--ignore=tests/test_connection_string_parsing.py"
12141 ;; These all need network access.
12142 "--ignore=samples"
12143 "--ignore=tests/async_tests/test_streaming_async.py"
12144 "--ignore=tests/test_streaming.py"
12145 "-m" "not asyncio and not live_test_only"
12146 "-k" ,(string-append
12147 "not test_decompress_plain_no_header"
12148 " and not test_compress_plain_no_header"
12149 " and not test_decompress_compressed_no_header"
12150 " and not test_requests_socket_timeout"))
12151 #:phases
12152 #~(modify-phases %standard-phases
12153 (add-before 'check 'add-test-pythonpath
12154 (lambda* (#:key tests? #:allow-other-keys)
12155 (when tests?
12156 (setenv "PYTHONPATH"
12157 (string-append
12158 (getcwd) "/tests/testserver_tests/coretestserver:"
12159 (getenv "GUIX_PYTHONPATH")))))))))
12160 (propagated-inputs
12161 (list python-aiohttp
12162 python-requests
12163 python-six
12164 python-typing-extensions))
12165 (native-inputs
12166 (list python-flask
12167 python-pytest-8
12168 python-pytest-aiohttp
12169 python-pytest-asyncio
12170 python-pytest-trio
12171 python-setuptools
12172 python-wheel))
12173 (home-page "https://github.com/Azure/azure-sdk-for-python")
12174 (synopsis "Microsoft Azure Core library for Python")
12175 (description "This package provides the Microsoft Azure Core library for
12176Python.")
12177 (license license:expat)))
12178
12179(define-public python-azure-storage-blob
12180 (package
12181 (name "python-azure-storage-blob")
12182 (version "12.27.0")
12183 (source
12184 (origin
12185 (method url-fetch)
12186 (uri (pypi-uri "azure_storage_blob" version))
12187 (sha256
12188 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
12189 (build-system pyproject-build-system)
12190 (arguments
12191 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12192 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12193 ;; it hard to package in Guix.
12194 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12195 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12196 (list #:tests? #f))
12197 (native-inputs
12198 (list python-setuptools))
12199 (propagated-inputs
12200 (list python-azure-core
12201 python-cryptography
12202 python-isodate
12203 python-typing-extensions))
12204 (home-page "https://github.com/Azure/azure-sdk-for-python/")
12205 (synopsis "Microsoft Azure Blob Storage client library for Python")
12206 (description "This package provides the Microsoft Azure Blob Storage
12207Client Library for Python.")
12208 (license license:expat)))
12209
12210(define-public python-azure-storage-file-datalake
12211 (package
12212 (name "python-azure-storage-file-datalake")
12213 (version "12.22.0")
12214 (source
12215 (origin
12216 (method url-fetch)
12217 (uri (pypi-uri "azure_storage_file_datalake" version))
12218 (sha256
12219 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
12220 (build-system pyproject-build-system)
12221 (arguments
12222 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12223 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12224 ;; it hard to package in Guix.
12225 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12226 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12227 (list #:tests? #f))
12228 (native-inputs
12229 (list python-setuptools))
12230 (propagated-inputs
12231 (list python-azure-core
12232 python-azure-storage-blob
12233 python-isodate
12234 python-typing-extensions))
12235 (home-page "https://github.com/Azure/azure-sdk-for-python")
12236 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
12237 (description
12238 "This package provides the Microsoft Azure File @code{DataLake} Storage
12239Client Library for Python.")
12240 (license license:expat)))
12241
12242(define-public python-google-auth
12243 (package
12244 (name "python-google-auth")
12245 (version "2.48.0")
12246 (source
12247 (origin
12248 (method url-fetch)
12249 (uri (pypi-uri "google_auth" version))
12250 (sha256
12251 (base32 "1kj1r3vp2jk2wv1mc0a5lpdnsivsqciah68ajhyql86k1imp0zjg"))))
12252 (build-system pyproject-build-system)
12253 (arguments
12254 (list
12255 #:test-flags
12256 ;; This one test uses crypto.sign with an outdated calling convention.
12257 '(list "--ignore=tests/transport/test__mtls_helper.py")))
12258 (propagated-inputs
12259 (list python-aiohttp
12260 python-cryptography
12261 python-pyasn1-modules
12262 python-requests
12263 python-rsa
12264 python-urllib3))
12265 (native-inputs
12266 (list nss-certs-for-test
12267 python-aiohttp
12268 python-aioresponses
12269 python-flask
12270 python-freezegun
12271 python-grpcio
12272 python-oauth2client
12273 python-packaging
12274 python-pyjwt
12275 python-pyopenssl
12276 python-pytest
12277 python-pytest-asyncio
12278 python-pytest-localserver
12279 python-pyu2f
12280 python-requests
12281 python-responses
12282 python-rsa
12283 python-setuptools
12284 python-urllib3))
12285 (home-page "https://github.com/googleapis/google-auth-library-python")
12286 (synopsis "Google Authentication Library")
12287 (description "This library simplifies using Google's various
12288server-to-server authentication mechanisms to access Google APIs.")
12289 (license license:asl2.0)))
12290
12291(define-public python-google-resumable-media
12292 (package
12293 (name "python-google-resumable-media")
12294 (version "2.8.0")
12295 (source
12296 (origin
12297 (method git-fetch)
12298 (uri (git-reference
12299 (url
12300 "https://github.com/googleapis/google-resumable-media-python")
12301 (commit (string-append "v" version))))
12302 (file-name (git-file-name name version))
12303 (sha256
12304 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
12305 (build-system pyproject-build-system)
12306 (arguments
12307 (list
12308 #:test-flags
12309 #~(list
12310 ;; XXX: Missing test_utils.retry.
12311 "--ignore-glob=tests*/system/"
12312 ;; XXX: md5_hash is not mock.sentinel.md5_hash
12313 "-k" (string-join
12314 (list "not test_brotli"
12315 "test_constructor"
12316 "test_decompress")
12317 " and not "))))
12318 (propagated-inputs (list python-google-crc32c))
12319 (native-inputs
12320 (list python-google-auth
12321 python-mock
12322 python-pytest
12323 python-pytest-asyncio
12324 python-setuptools
12325 python-test-utils))
12326 (home-page "https://github.com/googleapis/google-resumable-media-python")
12327 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
12328 (description "This package provides utilities for Google Media Downloads
12329and Resumable Uploads.")
12330 (license license:asl2.0)))
12331
12332(define-public python-googleapis-common-protos
12333 (package
12334 (name "python-googleapis-common-protos")
12335 (version "1.66.0")
12336 (source
12337 (origin
12338 (method git-fetch)
12339 (uri (git-reference
12340 (url "https://github.com/googleapis/python-api-common-protos")
12341 (commit (string-append "v" version))))
12342 (file-name (git-file-name name version))
12343 (sha256
12344 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
12345 (build-system pyproject-build-system)
12346 (propagated-inputs (list python-protobuf))
12347 (native-inputs (list python-pytest python-setuptools))
12348 (home-page "https://github.com/googleapis/python-api-common-protos")
12349 (synopsis "Common protobufs used in Google APIs")
12350 (description
12351 "This package contains Python classes generated from the common protos in
12352the @code{googleapis/api-common-protos} repository.")
12353 (license license:asl2.0)))
12354
12355(define-public python-google-api-core
12356 (package
12357 (name "python-google-api-core")
12358 (version "2.29.0")
12359 (source
12360 (origin
12361 (method git-fetch)
12362 (uri (git-reference
12363 (url "https://github.com/googleapis/python-api-core")
12364 (commit (string-append "v" version))))
12365 (file-name (git-file-name name version))
12366 (sha256
12367 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
12368 (build-system pyproject-build-system)
12369 (propagated-inputs
12370 (list python-google-auth
12371 python-googleapis-common-protos
12372 python-protobuf
12373 python-proto-plus
12374 python-requests))
12375 (native-inputs
12376 (list python-mock
12377 python-pytest
12378 python-pytest-asyncio
12379 python-pytest-mock
12380 python-setuptools))
12381 (home-page "https://github.com/googleapis/python-api-core")
12382 (synopsis "Google API client core library")
12383 (description
12384 "This library defines common helpers used by all Google API clients.")
12385 (license license:asl2.0)))
12386
12387(define-public python-google-cloud-core
12388 (package
12389 (name "python-google-cloud-core")
12390 (version "2.5.0")
12391 (source
12392 (origin
12393 (method git-fetch)
12394 (uri (git-reference
12395 (url "https://github.com/googleapis/python-cloud-core")
12396 (commit (string-append "v" version))))
12397 (file-name (git-file-name name version))
12398 (sha256
12399 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
12400 (build-system pyproject-build-system)
12401 (propagated-inputs (list python-google-api-core python-google-auth))
12402 (native-inputs
12403 (list python-grpcio
12404 python-grpcio-status
12405 python-pytest
12406 python-setuptools))
12407 (home-page "https://github.com/googleapis/python-cloud-core")
12408 (synopsis "Google Cloud API client core library")
12409 (description
12410 "This library defines common helpers (e.g. base @code{Client} classes)
12411used by all of the @code{google-cloud-*} packages.")
12412 (license license:asl2.0)))
12413
12414(define-public python-google-cloud-storage
12415 (package
12416 (name "python-google-cloud-storage")
12417 (version "2.19.0")
12418 (source
12419 (origin
12420 (method git-fetch)
12421 (uri (git-reference
12422 (url "https://github.com/googleapis/python-storage")
12423 (commit (string-append "v" version))))
12424 (file-name (git-file-name name version))
12425 (sha256
12426 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
12427 (build-system pyproject-build-system)
12428 (arguments
12429 (list
12430 #:test-flags
12431 #~(list
12432 ;; XXX: Missing test_utils.retry.
12433 "--ignore=tests/system/"
12434 ;; Needs docker.
12435 "--ignore=tests/conformance/"
12436 ;; XXX: Deprecations.
12437 "-k" (string-join
12438 (list "not test_set_api_request_attr"
12439 "test_create_bucket_w_custom_endpoint"
12440 "test_ctor_w_api_endpoint_override"
12441 "test_ctor_w_custom_endpoint_use_auth"
12442 "test_list_buckets_w_custom_endpoint")
12443 " and not ")
12444 "tests")))
12445 (native-inputs
12446 (list python-googleapis-common-protos
12447 python-mock
12448 python-pytest
12449 python-test-utils
12450 python-setuptools))
12451 (propagated-inputs
12452 (list python-google-api-core
12453 python-google-auth
12454 python-google-cloud-core
12455 python-google-resumable-media
12456 python-protobuf
12457 python-requests))
12458 (home-page "https://github.com/googleapis/python-storage")
12459 (synopsis "Google Cloud Storage API client library")
12460 (description
12461 "Google Cloud Storage allows you to store data on Google infrastructure,
12462and it can be used to distribute large data objects to users via direct
12463download. This package provides a Google Cloud Storage API client library for
12464Python.")
12465 (license license:asl2.0)))
12466
12467(define-public python-smart-open
12468 (package
12469 (name "python-smart-open")
12470 (version "7.3.0")
12471 (source
12472 (origin
12473 (method git-fetch) ;no tests in PyPI archive
12474 (uri (git-reference
12475 (url "https://github.com/piskvorky/smart_open")
12476 (commit (string-append "v" version))))
12477 (file-name (git-file-name name version))
12478 (sha256
12479 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
12480 (build-system pyproject-build-system)
12481 (arguments
12482 (list
12483 #:test-flags
12484 #~(list "--ignore=ci_helpers/"
12485 "--ignore=integration-tests/"
12486 ;; FIXME: Enable when guix/guix#1436 is resolved.
12487 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
12488 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
12489 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
12490 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
12491 "--ignore=tests/test_gcs.py")))
12492 (propagated-inputs
12493 (list python-azure-common
12494 python-azure-core
12495 python-azure-storage-blob
12496 python-boto3
12497 ;; python-google-cloud-storage ;see guix/guix#1436
12498 python-paramiko
12499 python-requests
12500 python-wrapt
12501 python-zstandard))
12502 (native-inputs
12503 (list python-numpy
12504 python-moto
12505 python-pytest
12506 python-pytest-rerunfailures
12507 python-responses
12508 python-setuptools
12509 python-setuptools-scm
12510 python-wheel))
12511 (home-page "https://github.com/piskvorky/smart_open")
12512 (synopsis "Utilities for streaming large files")
12513 (description
12514 "This package provides utilities for streaming large files (S3, HDFS,
12515GCS, Azure Blob Storage, gzip, bz2, etc.)")
12516 (license license:expat)))
12517
12518(define-public python-smart-open-6
12519 (package
12520 (inherit python-smart-open)
12521 (name "python-smart-open")
12522 (version "6.4.0")
12523 (source
12524 (origin
12525 (method git-fetch)
12526 (uri (git-reference
12527 (url "https://github.com/piskvorky/smart_open")
12528 (commit (string-append "v" version))))
12529 (file-name (git-file-name name version))
12530 (sha256
12531 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
12532 (arguments
12533 (list
12534 ;; XXX: Tests need some older native inputs, disable for now.
12535 #:tests? #f))))
12536
12537(define-public python-w3lib
12538 (package
12539 (name "python-w3lib")
12540 (version "2.3.1")
12541 (source
12542 (origin
12543 (method url-fetch)
12544 (uri (pypi-uri "w3lib" version))
12545 (sha256
12546 (base32
12547 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
12548 (build-system pyproject-build-system)
12549 (native-inputs
12550 (list python-pytest python-setuptools python-wheel))
12551 (home-page "https://github.com/scrapy/w3lib")
12552 (synopsis "Python library of web-related functions")
12553 (description
12554 "This is a Python library of web-related functions, such as: remove
12555comments, or tags from HTML snippets, extract base url from HTML snippets,
12556translate entities on HTML strings, among other things.")
12557 (license license:bsd-3)))
12558
12559(define-public python-webcolors
12560 (package
12561 (name "python-webcolors")
12562 (version "24.11.1")
12563 (source
12564 (origin
12565 (method url-fetch)
12566 (uri (pypi-uri "webcolors" version))
12567 (sha256
12568 (base32 "1xl0vn4xa03vjwx6fj19q9kgb94g65gvdf3p0ivsy0i2ydldgczc"))))
12569 (build-system pyproject-build-system)
12570 (arguments
12571 (list
12572 #:phases
12573 '(modify-phases %standard-phases
12574 (add-after 'unpack 'patch-pyproject
12575 (lambda _
12576 ;; XXX Our version of python-pdm-backend does not recognize
12577 ;; "dependency-groups", but is fine with the bogus
12578 ;; "tool.whatever".
12579 (substitute* "pyproject.toml"
12580 (("\\[dependency-groups\\]") "[tool.whatever]")))))))
12581 (native-inputs
12582 (list python-pdm-backend python-pytest))
12583 (home-page "https://github.com/ubernostrum/webcolors")
12584 (synopsis "HTML/CSS color definitions library")
12585 (description "@code{python-webcolors} is a module for working with
12586HTML/CSS color definitions. Normalizing and converting between the following
12587formats is supported.
12588@itemize
12589@item Specification-defined color names
12590@item Six-digit hexadecimal
12591@item Three-digit hexadecimal
12592@item Integer rgb() triplet
12593@item Percentage rgb() triplet
12594@end itemize
12595Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
12596can be handled by the @code{colorsys} module in the Python standard library.")
12597 (license license:bsd-3)))
12598
12599(define-public python-woob
12600 ;; TODO: woob requires backends which are currently installed on the fly in
12601 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
12602 ;; them in the store instead. Many modules are included in the modules
12603 ;; directory in the source tree, but it is unclear how to install them.
12604 ;; Many modules require extra dependencies though, so maybe they should be
12605 ;; packaged independently of woob itself.
12606 (package
12607 (name "python-woob")
12608 (version "3.7")
12609 (source
12610 (origin
12611 (method git-fetch)
12612 (uri (git-reference
12613 (url "https://gitlab.com/woob/woob.git")
12614 (commit version)))
12615 (file-name (git-file-name name version))
12616 (sha256
12617 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
12618 (build-system pyproject-build-system)
12619 (arguments
12620 (list
12621 #:test-flags
12622 ;; Deselect tests that require DNS lookup.
12623 #~(list
12624 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
12625 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
12626 #:phases
12627 #~(modify-phases %standard-phases
12628 (add-before 'build 'relax-requirements
12629 (lambda _
12630 (substitute* "pyproject.toml"
12631 ;; packaging ~= 23.0
12632 (("\"packaging .*\",")
12633 "")
12634 ;; rich~=13.0
12635 (("\"rich .*\",")
12636 "\"rich\",")))))))
12637 (native-inputs
12638 (list nss-certs-for-test
12639 python-pytest
12640 python-setuptools))
12641 (propagated-inputs
12642 (list python-babel
12643 python-colorama
12644 python-cssselect
12645 python-dateutil
12646 python-feedparser
12647 python-html2text
12648 python-lxml
12649 python-packaging
12650 python-pillow
12651 python-prettytable
12652 python-pycountry
12653 python-pyyaml
12654 python-requests
12655 python-responses
12656 python-rich
12657 python-termcolor
12658 python-unidecode))
12659 (home-page "https://woob.tech/")
12660 (synopsis "Woob, Web Outside Of Browsers")
12661 (description
12662 "Woob is a collection of applications able to interact with
12663websites, without requiring the user to open them in a browser. It also
12664provides well-defined APIs to talk to websites lacking one.")
12665 (license license:lgpl3+)))
12666
12667(define-public python-flask-combo-jsonapi
12668 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
12669 (revision "0"))
12670 (package
12671 (name "python-flask-combo-jsonapi")
12672 (version (git-version "1.1.0" revision commit))
12673 (source
12674 (origin
12675 (method git-fetch)
12676 (uri (git-reference
12677 (url "https://github.com/AdCombo/flask-combo-jsonapi")
12678 (commit commit)))
12679 (file-name (git-file-name name version))
12680 (sha256
12681 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
12682 (build-system pyproject-build-system)
12683 (arguments
12684 (list
12685 #:test-flags
12686 #~(list
12687 "-k"
12688 (string-join
12689 (list
12690 ;; XXX: This tests a feature that doesn't make sense when dropping
12691 ;; marshmallow < 3 support.
12692 "not test_compute_schema_propagate_context"
12693 ;; The following tests fail for unknown reasons (see:
12694 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
12695 "test_get_list_with_simple_filter_relationship_custom_qs_api"
12696 "test_get_list_with_simple_filter_relationship_error")
12697 " and not "))
12698 #:phases
12699 #~(modify-phases %standard-phases
12700 (add-after 'unpack 'loosen-requirements
12701 (lambda _
12702 ;; Don't pin specific versions of dependencies.
12703 (substitute* "requirements.txt"
12704 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
12705 (string-append dep "\n"))
12706 (("^marshmallow_jsonapi[=<>].*")
12707 "marshmallow_jsonapi_minfork\n"))
12708 ;; Drop support for marshmallow < 3.
12709 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
12710 "flask_combo_jsonapi/schema.py")
12711 (("from marshmallow\\.base import SchemaABC")
12712 "from marshmallow import Schema")
12713 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
12714 "if isinstance(related_schema_cls, Schema):"))
12715 (substitute* "tests/test_sqlalchemy_data_layer.py"
12716 (("default=None")
12717 "dump_default=None")
12718 (("missing=")
12719 "load_default=")))))))
12720 (propagated-inputs
12721 (list python-flask
12722 python-marshmallow
12723 python-marshmallow-jsonapi
12724 python-simplejson
12725 python-sqlalchemy
12726 python-apispec
12727 python-simplejson
12728 python-six))
12729 (native-inputs
12730 (list python-pytest python-setuptools))
12731 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
12732 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
12733 (description
12734 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
12735APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
12736specification.
12737
12738It tries to combine the power of Flask-Restless with the flexibility of
12739Flask-RESTful to quickly build APIs that fit the complexity of existing
12740real-life projects with legacy data and diverse storage providers.")
12741 (license license:expat))))
12742
12743(define-public python-mwparserfromhell
12744 (package
12745 (name "python-mwparserfromhell")
12746 (version "0.7.2")
12747 (source
12748 (origin
12749 (method git-fetch)
12750 (uri (git-reference
12751 (url "https://github.com/earwig/mwparserfromhell")
12752 (commit (string-append "v" version))))
12753 (file-name (git-file-name name version))
12754 (sha256
12755 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
12756 (build-system pyproject-build-system)
12757 (native-inputs (list python-pytest python-setuptools))
12758 (home-page "https://github.com/earwig/mwparserfromhell")
12759 (synopsis "Python parser for MediaWiki wikicode")
12760 (description
12761 "The MediaWiki Parser From Hell is a python library package that provides
12762a parser for MediaWiki.
12763
12764It exposes parses as normal string objects with additional methods giving
12765access to the special Wikicode features it contains (hyperlinks, tags,
12766templates…). The parser doesn't interpolate strings at all, it remains at a
12767purely formal level.
12768
12769Full documentation may be found at
12770@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
12771 (license license:expat)))
12772
12773(define-public python-tweepy
12774 (package
12775 (name "python-tweepy")
12776 (version "4.16.0")
12777 (source
12778 (origin
12779 (method git-fetch)
12780 (uri
12781 (git-reference
12782 (url "https://github.com/tweepy/tweepy")
12783 (commit (string-append "v" version))))
12784 (file-name (git-file-name name version))
12785 (sha256
12786 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
12787 (build-system pyproject-build-system)
12788 (arguments
12789 ;; tests: 149 passed, 3 skipped, 1 warning
12790 (list #:test-backend #~'unittest
12791 #:test-flags #~(list "discover" "tests")))
12792 (native-inputs
12793 (list nss-certs-for-test
12794 python-flit-core
12795 python-urllib3-1.26
12796 python-vcrpy))
12797 (propagated-inputs
12798 (list python-aiohttp
12799 python-async-lru
12800 python-oauthlib
12801 python-requests
12802 python-requests-oauthlib))
12803 (home-page "https://www.tweepy.org/")
12804 (synopsis "Twitter library for Python")
12805 (description
12806 "This package provides @code{Tweepy}, an easy-to-use Python library for
12807accessing the Twitter API.")
12808 (license license:expat)))
12809
12810(define-public python-quart
12811 (package
12812 (name "python-quart")
12813 (version "0.19.9")
12814 (source
12815 (origin
12816 (method git-fetch) ; no tests in PyPI release
12817 (uri (git-reference
12818 (url "https://github.com/pallets/quart")
12819 (commit version)))
12820 (file-name (git-file-name name version))
12821 (sha256
12822 (base32 "1h5ifv8g9dc9m07vj4v7dfalam83v38545d845vvgys1gan1pscd"))))
12823 (build-system pyproject-build-system)
12824 (arguments
12825 (list
12826 #:phases
12827 #~(modify-phases %standard-phases
12828 (add-after 'unpack 'remove-coverage-pytest-options
12829 (lambda _
12830 (substitute* "pyproject.toml"
12831 (("--no-cov-on-fail") "")))))))
12832 (native-inputs
12833 (list python-poetry-core
12834 python-pytest
12835 python-pytest-asyncio))
12836 (propagated-inputs
12837 (list hypercorn
12838 python-aiofiles
12839 python-blinker
12840 python-click
12841 python-dotenv
12842 python-flask
12843 python-itsdangerous
12844 python-jinja2
12845 python-markupsafe
12846 python-toml
12847 python-werkzeug))
12848 (home-page "https://gitlab.com/pgjones/quart/")
12849 (synopsis "Python ASGI web microframework with the same API as Flask")
12850 (description
12851 "This package provides a Python ASGI web microframework with the same API
12852as Flask.")
12853 (license license:expat)))
12854
12855(define-public python-quart-trio
12856 (package
12857 (name "python-quart-trio")
12858 (version "0.12.0")
12859 (source
12860 (origin
12861 (method url-fetch)
12862 (uri (pypi-uri "quart_trio" version))
12863 (sha256
12864 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
12865 (build-system pyproject-build-system)
12866 (arguments
12867 (list
12868 #:phases
12869 #~(modify-phases %standard-phases
12870 (add-after 'unpack 'remove-coverage-pytest-options
12871 (lambda _
12872 (substitute* "pyproject.toml"
12873 (("--no-cov-on-fail") "")))))))
12874 (native-inputs
12875 (list python-pdm-backend
12876 python-pytest
12877 python-pytest-sugar
12878 python-pytest-trio))
12879 (propagated-inputs
12880 (list hypercorn
12881 python-quart
12882 python-trio))
12883 (home-page "https://github.com/pgjones/quart-trio")
12884 (synopsis "Extension for Quart to support the Trio event loop")
12885 (description
12886 "This package provides a Quart extension to provide Trio support. This
12887is an alternative to using the asyncio event loop present in the Python
12888standard library and supported by default in Quart.")
12889 (license license:expat)))
12890
12891(define-public python-ajsonrpc
12892 (package
12893 (name "python-ajsonrpc")
12894 (version "1.2.0")
12895 (source
12896 (origin
12897 (method git-fetch)
12898 (uri (git-reference
12899 (url "https://github.com/pavlov99/ajsonrpc")
12900 (commit version)))
12901 (file-name (git-file-name name version))
12902 (sha256
12903 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
12904 (build-system pyproject-build-system)
12905 (arguments
12906 (list
12907 #:phases
12908 #~(modify-phases %standard-phases
12909 (add-after 'unpack 'set-version
12910 (lambda _
12911 (substitute* "ajsonrpc/__init__.py"
12912 (("^__version__ = .*")
12913 (string-append "__version__ = \"" #$version "\"\n"))))))))
12914 (native-inputs
12915 (list python-pytest
12916 python-setuptools))
12917 (propagated-inputs
12918 (list python-quart
12919 python-sanic
12920 python-tornado))
12921 (home-page "https://github.com/pavlov99/ajsonrpc")
12922 (synopsis "Async JSON-RPC 2.0 protocol and server")
12923 (description
12924 "This package provides a Python JSON-RPC 2.0 protocol and server powered
12925by asyncio.")
12926 (license license:expat)))
12927
12928(define-public python-protego
12929 (package
12930 (name "python-protego")
12931 (version "0.4.0")
12932 (source
12933 (origin
12934 (method url-fetch)
12935 (uri (pypi-uri "protego" version))
12936 (sha256
12937 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
12938 (build-system pyproject-build-system)
12939 (native-inputs (list python-pytest python-setuptools python-wheel))
12940 (home-page "https://github.com/scrapy/protego")
12941 (synopsis "Python robots.txt parser with support for modern conventions")
12942 (description "Protego is a pure-Python @file{robots.txt} parser with support
12943for modern conventions.")
12944 (license license:bsd-3)))
12945
12946(define-public python-parsel
12947 (package
12948 (name "python-parsel")
12949 (version "1.10.0")
12950 (source
12951 (origin
12952 (method url-fetch)
12953 (uri (pypi-uri "parsel" version))
12954 (sha256
12955 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
12956 (build-system pyproject-build-system)
12957 (propagated-inputs
12958 (list python-cssselect
12959 python-jmespath
12960 python-lxml
12961 python-typing-extensions
12962 python-w3lib))
12963 (native-inputs
12964 (list python-psutil python-pytest python-setuptools python-wheel))
12965 (home-page "https://github.com/scrapy/parsel")
12966 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
12967 (description "Parsel is a library to extract and remove data from
12968HTML and XML using XPath and CSS selectors, optionally combined with
12969regular expressions.")
12970 (license license:bsd-3)))
12971
12972(define-public python-scrapy
12973 (package
12974 (name "python-scrapy")
12975 (version "2.13.3")
12976 (source
12977 (origin
12978 (method url-fetch)
12979 (uri (pypi-uri "scrapy" version))
12980 (sha256
12981 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
12982 (build-system pyproject-build-system)
12983 (arguments
12984 (list #:test-flags
12985 #~(list "--numprocesses" (number->string (parallel-job-count))
12986 "-k" (string-join
12987 ;; ConnectionRefusedError: [Errno 111] Connection
12988 ;; refused
12989 (list "not test_append"
12990 "test_append_active_mode"
12991 "test_overwrite"
12992 "test_overwrite_active_mode"
12993 "test_persist"
12994 ;; AssertionError
12995 "test_start_deprecated_super")
12996 " and not ")
12997 ;; Skip documentation testing.
12998 "--ignore=docs")
12999 #:phases
13000 #~(modify-phases %standard-phases
13001 (add-before 'check 'prepare-test-environment
13002 (lambda _
13003 (setenv "HOME" "/tmp"))))))
13004 (propagated-inputs
13005 (list python-cryptography
13006 python-cssselect
13007 python-defusedxml
13008 python-itemadapter
13009 python-itemloaders
13010 python-lxml
13011 python-packaging
13012 python-parsel
13013 python-protego
13014 python-pydispatcher
13015 python-pyopenssl
13016 python-pypydispatcher
13017 python-queuelib
13018 python-service-identity
13019 python-tldextract
13020 python-twisted
13021 python-w3lib
13022 python-zope-interface))
13023 (native-inputs
13024 (list nss-certs-for-test
13025 python-hatchling
13026 python-pexpect
13027 python-pytest
13028 python-pytest-xdist
13029 python-setuptools
13030 python-sybil
13031 python-testfixtures))
13032 (home-page "https://scrapy.org")
13033 (synopsis "High-level Web crawling and Web scraping framework")
13034 (description "Scrapy is a fast high-level web crawling and web
13035scraping framework, used to crawl websites and extract structured data
13036from their pages. It can be used for a wide range of purposes, from data
13037mining to monitoring and automated testing.")
13038 (license license:bsd-3)))
13039
13040(define-public python-jstyleson
13041 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
13042 (revision "0"))
13043 (package
13044 (name "python-jstyleson")
13045 (version (git-version "0.0.2" revision commit))
13046 (source
13047 (origin
13048 (method git-fetch)
13049 (uri (git-reference
13050 (url "https://github.com/linjackson78/jstyleson")
13051 (commit commit)))
13052 (file-name (git-file-name name version))
13053 (sha256
13054 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
13055 (build-system pyproject-build-system)
13056 (native-inputs (list python-pytest python-setuptools))
13057 (home-page "https://github.com/linjackson78/jstyleson")
13058 (synopsis "JSON parser supporting js-style comments")
13059 (description
13060 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
13061standard Python @code{json} library, it understands js-style comments.
13062Trailing comma is also supported.")
13063 (license license:expat))))
13064
13065(define-public python-html-text
13066 (package
13067 (name "python-html-text")
13068 (version "0.7.0")
13069 (source
13070 (origin
13071 (method url-fetch)
13072 (uri (pypi-uri "html_text" version))
13073 (sha256
13074 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
13075 (build-system pyproject-build-system)
13076 (native-inputs
13077 (list python-pytest
13078 python-setuptools
13079 python-wheel))
13080 (propagated-inputs
13081 (list python-lxml
13082 python-lxml-html-clean))
13083 (home-page "https://github.com/TeamHG-Memex/html-text")
13084 (synopsis "Extract text from HTML")
13085 (description "HTML to Text is a Python library for extract text from HTML.
13086Contrary to other solution such as LXML or Beautiful Soup, the text extracted
13087with @code{html_text} does not contain elements such as JavaScript or inline
13088styles not normally visible to users. It also normalizes white space
13089characters in a smarter, more visually pleasing style.")
13090 (license license:expat)))
13091
13092(define-public python-mf2py
13093 (package
13094 (name "python-mf2py")
13095 (version "2.0.1")
13096 (source
13097 (origin
13098 (method git-fetch)
13099 (uri (git-reference
13100 (url "https://github.com/microformats/mf2py")
13101 (commit (string-append "v" version))))
13102 (file-name (git-file-name name version))
13103 (sha256
13104 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
13105 (build-system pyproject-build-system)
13106 (native-inputs (list python-mock python-poetry-core python-pytest))
13107 (propagated-inputs
13108 (list python-beautifulsoup4 python-html5lib python-requests))
13109 (home-page "https://github.com/microformats/mf2py")
13110 (synopsis "Python Microformats2 parser")
13111 (description
13112 "This Python library provides a Microformats2 parser implementing the
13113full Microformats2 (mf2) specification, including backward compatibility with
13114Microformats1 (mf1).")
13115 (license license:expat)))
13116
13117(define-public python-extruct
13118 (package
13119 (name "python-extruct")
13120 (version "0.18.0")
13121 (source (origin
13122 (method git-fetch) ;for tests
13123 (uri (git-reference
13124 (url "https://github.com/scrapinghub/extruct")
13125 (commit (string-append "v" version))))
13126 (file-name (git-file-name name version))
13127 (sha256
13128 (base32
13129 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
13130 (build-system pyproject-build-system)
13131 (arguments
13132 (list
13133 #:test-flags
13134 ;; 67 passed, 3 deselected
13135 ;; XXX: 3 tests fail with errors in assertion.
13136 #~(list "-k" (string-append
13137 "not test_microformat"
13138 " and not test_microformat"
13139 " and not test_umicroformat"))))
13140 (native-inputs
13141 (list python-pytest
13142 python-setuptools
13143 python-wheel))
13144 (propagated-inputs
13145 (list python-html-text
13146 python-jstyleson
13147 python-lxml
13148 python-mf2py
13149 python-pyrdfa3
13150 python-rdflib
13151 python-w3lib))
13152 (home-page "https://github.com/scrapinghub/extruct")
13153 (synopsis "Extract embedded metadata from HTML markup")
13154 (description "@code{extruct} is a Python library for extracting embedded
13155metadata from HTML markup. Currently, extruct supports:
13156@itemize
13157@item W3C's HTML Microdata
13158@item embedded JSON-LD
13159@item Microformat via mf2py
13160@item Facebook's Open Graph
13161@item (experimental) RDFa via rdflib
13162@item Dublin Core Metadata (DC-HTML-2003)
13163@end itemize")
13164 (license license:bsd-3)))
13165
13166(define-public python-wadllib
13167 (package
13168 (name "python-wadllib")
13169 (version "2.0.0")
13170 (source
13171 (origin
13172 (method url-fetch)
13173 (uri (pypi-uri "wadllib" version))
13174 (sha256
13175 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
13176 (build-system pyproject-build-system)
13177 (arguments
13178 (list
13179 ;; XXX: Doctests are currently failing.
13180 #:tests? #f
13181 #:phases
13182 #~(modify-phases %standard-phases
13183 (replace 'check
13184 (lambda* (#:key tests? #:allow-other-keys)
13185 (if tests?
13186 (invoke "zope-testrunner" "--test-path=src")
13187 (format #t "test suite not run~%")))))))
13188 (native-inputs
13189 (list python-multipart python-setuptools python-zope-testrunner))
13190 (propagated-inputs (list python-lazr-uri))
13191 (home-page "https://launchpad.net/wadllib")
13192 (synopsis "Web Application Description Language (WADL) navigation library")
13193 (description "The @code{wadllib} Python library allows navigating HTTP
13194resources using Web Application Description Language (WADL) files as guides.")
13195 (license license:lgpl3)))
13196
13197(define-public python-zeep
13198 (package
13199 (name "python-zeep")
13200 (version "4.3.1")
13201 (source
13202 (origin
13203 (method url-fetch)
13204 (uri (pypi-uri "zeep" version))
13205 (sha256
13206 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
13207 (build-system pyproject-build-system)
13208 (arguments
13209 (list
13210 #:phases
13211 '(modify-phases %standard-phases
13212 (add-after 'unpack 'compatibility
13213 (lambda _
13214 ;; Relax requests-file requirement.
13215 (substitute* "pyproject.toml"
13216 (("\"requests-file.*\",")
13217 "\"requests-file\","))
13218 ;; httpx removed the "proxies" keyword. It's now either "mounts"
13219 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
13220 (substitute* "src/zeep/transports.py"
13221 (("proxies=") "proxy="))))
13222 ;; One test requires write access
13223 (add-before 'check 'set-HOME
13224 (lambda _ (setenv "HOME" (getcwd)))))))
13225 (propagated-inputs
13226 (list python-attrs
13227 python-isodate
13228 python-lxml
13229 python-platformdirs
13230 python-pytz
13231 python-requests
13232 python-requests-file
13233 python-requests-toolbelt))
13234 (native-inputs
13235 (list nss-certs-for-test
13236 python-freezegun
13237 python-pretend
13238 python-pytest
13239 python-pytest-asyncio
13240 python-pytest-cov
13241 python-pytest-httpx
13242 python-requests-mock
13243 python-setuptools
13244 python-wheel))
13245 (home-page "https://docs.python-zeep.org/en/stable/")
13246 (synopsis "Python SOAP client based on lxml / requests")
13247 (description "Zeep is a Python SOAP client. Highlights:
13248
13249@itemize
13250@item Build on top of @code{lxml} and @code{requests}.
13251@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
13252@item Support for WS-Addressing headers.
13253@item Support for WSSE (UserNameToken / x.509 signing).
13254@item Support for @code{asyncio} via @code{httpx}.
13255@item Experimental support for XOP messages.
13256@end itemize")
13257 (license license:expat)))
13258
13259(define-public python-http-client
13260 (package
13261 (name "python-http-client")
13262 (version "3.3.7")
13263 (source
13264 (origin
13265 (method git-fetch)
13266 (uri (git-reference
13267 (url "https://github.com/sendgrid/python-http-client")
13268 (commit version)))
13269 (file-name (git-file-name name version))
13270 (sha256
13271 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
13272 (build-system pyproject-build-system)
13273 (arguments
13274 (list
13275 #:test-backend #~'unittest
13276 #:phases
13277 #~(modify-phases %standard-phases
13278 (add-after 'unpack 'fix-tests
13279 (lambda _
13280 ;; The test expects the copyright to be updated each year.
13281 (substitute* "tests/test_daterange.py"
13282 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
13283 (native-inputs
13284 (list python-setuptools))
13285 (home-page "https://github.com/sendgrid/python-http-client")
13286 (synopsis "HTTP REST client for Python")
13287 (description
13288 "This package provides access to any RESTful or RESTful-like API.")
13289 (license license:expat)))
13290
13291(define-public python-sendgrid
13292 (package
13293 (name "python-sendgrid")
13294 (version "6.9.7")
13295 (source
13296 (origin
13297 (method git-fetch)
13298 (uri (git-reference
13299 (url "https://github.com/sendgrid/sendgrid-python")
13300 (commit version)))
13301 (file-name (git-file-name name version))
13302 (sha256
13303 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
13304 (build-system pyproject-build-system)
13305 (arguments
13306 (list
13307 #:test-flags
13308 #~(list "--ignore=test/integ"
13309 ;; Network access is required.
13310 "--ignore=live_test.py")))
13311 (native-inputs
13312 (list python-pytest
13313 python-setuptools))
13314 (propagated-inputs
13315 (list python-cryptography
13316 python-http-client
13317 python-flask
13318 python-pyyaml
13319 python-six ;hard dependency
13320 python-starkbank-ecdsa
13321 python-werkzeug))
13322 (home-page "https://github.com/sendgrid/sendgrid-python/")
13323 (synopsis "SendGrid API library for Python")
13324 (description
13325 "The @code{sendgrid} Python library allows access to the
13326SendGrid Web API v3. Version 3+ of the library provides full support for all
13327SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
13328 (license license:expat)))
13329
13330(define-public python-sse-starlette
13331 (package
13332 (name "python-sse-starlette")
13333 (version "3.1.2")
13334 (source
13335 (origin
13336 (method git-fetch)
13337 (uri (git-reference
13338 (url "https://github.com/sysid/sse-starlette")
13339 (commit (string-append "v" version))))
13340 (file-name (git-file-name name version))
13341 (sha256
13342 (base32 "0cs4218jc8fa9x362vdigdpz2nn1l4qav9yizj3psklvwiq2z1as"))))
13343 (build-system pyproject-build-system)
13344 (arguments
13345 (list
13346 #:test-flags
13347 #~(list
13348 ;; XXX: Server fails to start.
13349 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
13350 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
13351 ;; XXX: Missing test dependency.
13352 "--ignore=tests/integration/test_multiple_consumers.py")
13353 #:phases
13354 #~(modify-phases %standard-phases
13355 (add-after 'unpack 'relax-requirements
13356 (lambda _
13357 (substitute* "pyproject.toml"
13358 (("\"anyio>=.*\"")
13359 "\"anyio\"")))))))
13360 (propagated-inputs (list python-anyio python-starlette))
13361 (native-inputs
13362 (list python-asgi-lifespan
13363 python-async-timeout
13364 python-httpx
13365 python-portend
13366 python-pytest
13367 python-pytest-asyncio
13368 python-psutil
13369 python-setuptools
13370 python-tenacity
13371 python-uvicorn))
13372 (home-page "https://github.com/sysid/sse-starlette")
13373 (synopsis "SSE plugin for Starlette")
13374 (description
13375 "This package provides SSE plugin for Starlette.")
13376 (license license:bsd-3)))
13377
13378(define-public python-sseclient-py
13379 (package
13380 (name "python-sseclient-py")
13381 (version "1.9.0")
13382 (source
13383 (origin
13384 (method git-fetch)
13385 (uri (git-reference
13386 (url "https://github.com/mpetazzoni/sseclient")
13387 (commit (string-append "sseclient-py-" version))))
13388 (file-name (git-file-name name version))
13389 (sha256
13390 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
13391 (build-system pyproject-build-system)
13392 (native-inputs (list python-hatchling python-pytest))
13393 (arguments
13394 (list
13395 #:test-backend #~'unittest
13396 #:test-flags #~'("discover" "--verbose" "tests")))
13397 (home-page "https://github.com/mpetazzoni/sseclient")
13398 (synopsis "Pure-Python Server Side Events (SSE) client")
13399 (description
13400 "This package provides a Python client for SSE event sources that
13401seamlessly integrates with @code{urllib3} and @code{requests}.")
13402 (license license:asl2.0)))
13403
13404(define-public python-starlette
13405 (package
13406 (name "python-starlette")
13407 (version "0.49.1")
13408 (source (origin
13409 (method git-fetch)
13410 (uri (git-reference
13411 (url "https://github.com/encode/starlette")
13412 (commit version)))
13413 (file-name (git-file-name name version))
13414 (sha256
13415 (base32
13416 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
13417 (build-system pyproject-build-system)
13418 (propagated-inputs (list python-anyio
13419 python-typing-extensions
13420 ;; [all] extra dependencies:
13421 python-itsdangerous
13422 python-jinja2
13423 python-multipart
13424 python-pyyaml
13425 python-requests))
13426 (native-inputs (list python-hatchling
13427 python-httpx
13428 python-pytest
13429 python-typing-extensions))
13430 (home-page "https://github.com/encode/starlette")
13431 (synopsis "Little ASGI library")
13432 (description
13433 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
13434Interface) framework/toolkit for building async web services in Python.")
13435 (license license:bsd-3)))
13436
13437(define-public python-starsessions
13438 (package
13439 (name "python-starsessions")
13440 (version "1.3.0")
13441 (source (origin
13442 (method git-fetch)
13443 (uri (git-reference
13444 (url "https://github.com/alex-oleshkevich/starsessions")
13445 (commit (string-append "v" version))))
13446 (file-name (git-file-name name version))
13447 (sha256
13448 (base32
13449 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
13450 (build-system pyproject-build-system)
13451 (arguments
13452 (list
13453 #:test-flags
13454 ;; These tests require a running redis server
13455 '(list "--ignore=tests/backends/test_redis.py"
13456 ;; XXX: this failure indicates a real compatibility problem, but
13457 ;; it seems restricted to the tests only.
13458 ;; AttributeError: 'Cookies' object has no attribute
13459 ;; 'clear_session_cookies'
13460 "-k"
13461 (string-append "not test_session_clears_on_tab_close"
13462 ;; This fails because an error is not raised.
13463 " and not test_session_wants_secret_key"))
13464 #:phases
13465 '(modify-phases %standard-phases
13466 (add-after 'unpack 'compatibilitiy
13467 (lambda _
13468 ;; aioredis has been renamed
13469 (substitute* "starsessions/backends/redis.py"
13470 (("aioredis") "redis")))))))
13471 (propagated-inputs
13472 (list python-redis
13473 python-itsdangerous
13474 python-starlette))
13475 (native-inputs
13476 (list python-httpx
13477 python-poetry-core
13478 python-pytest
13479 python-pytest-asyncio
13480 python-requests))
13481 (home-page "https://github.com/alex-oleshkevich/starsessions")
13482 (synopsis "Pluggable session support for Starlette and FastAPI")
13483 (description
13484 "This package adds pluggable session backends and ships default
13485@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
13486and FastAPI.")
13487 (license license:expat)))
13488
13489(define-public python-whereismyip
13490 (package
13491 (name "python-whereismyip")
13492 (version "0.1.0")
13493 (source
13494 (origin
13495 (method url-fetch)
13496 (uri (pypi-uri "whereismyip" version))
13497 (sha256
13498 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
13499 (build-system pyproject-build-system)
13500 (arguments (list #:tests? #false)) ; There are no tests.
13501 (native-inputs (list python-setuptools))
13502 (home-page "https://pypi.org/project/whereismyip/")
13503 (synopsis "Queries multiple geolocation services until one succeeds")
13504 (description
13505 "This package provides a simple Python library that queries multiple geolocation
13506services until one succeeds.")
13507 (license license:gpl3)))
13508
13509(define-public python-whitenoise
13510 (package
13511 (name "python-whitenoise")
13512 (version "6.9.0")
13513 (source (origin
13514 (method git-fetch) ; PyPI missing test failes
13515 (uri (git-reference
13516 (url "https://github.com/evansd/whitenoise")
13517 (commit version)))
13518 (file-name (git-file-name name version))
13519 (sha256
13520 (base32
13521 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
13522 (build-system pyproject-build-system)
13523 (arguments
13524 (list
13525 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
13526 (native-inputs (list python-brotli
13527 python-django
13528 python-requests
13529 python-pytest
13530 python-setuptools
13531 python-wheel))
13532 (home-page "https://github.com/evansd/whitenoise")
13533 (synopsis "Static file serving for WSGI applications")
13534 (description
13535 "WhiteNoise allows your web app to serve its own static files, making it
13536a self-contained unit that can be deployed anywhere without relying on nginx,
13537Amazon S3 or any other external service.")
13538 (license license:expat)))
13539
13540(define-public python-suds
13541 (package
13542 (name "python-suds")
13543 (version "1.2.0")
13544 (source
13545 (origin
13546 (method url-fetch)
13547 (uri (pypi-uri "suds" version))
13548 (sha256
13549 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
13550 (build-system pyproject-build-system)
13551 (arguments
13552 (list #:phases
13553 #~(modify-phases %standard-phases
13554 ;; XXX: chirp expects suds instead of suds_community
13555 (add-after 'install 'add-custom-dist-info
13556 (lambda _
13557 (for-each
13558 (lambda (dir)
13559 (with-directory-excursion (dirname dir)
13560 (symlink
13561 (basename dir)
13562 (string-append "suds-" #$version ".dist-info"))))
13563 (find-files #$output
13564 (lambda (file stat)
13565 (string-suffix? ".dist-info" file))
13566 #:directories? #t)))))))
13567 (native-inputs
13568 (list python-pytest
13569 python-setuptools
13570 python-wheel))
13571 (home-page "https://github.com/suds-community/suds")
13572 (synopsis "Lightweight SOAP python client for consuming Web Services")
13573 (description
13574 "Suds is a lightweight SOAP-based web service client for Python.")
13575 (license license:lgpl3+)))
13576
13577(define-public python-fastapi
13578 (package
13579 (name "python-fastapi")
13580 (version "0.128.0")
13581 (source
13582 (origin
13583 (method url-fetch)
13584 (uri (pypi-uri "fastapi" version))
13585 (sha256
13586 (base32 "0nk4ybvzv3bcgv5plbg3infykp19p1wryhpy1zk6n2pirvhpkh8w"))))
13587 (build-system pyproject-build-system)
13588 (arguments
13589 (list
13590 ;; tests: 1126 passed, 12 skipped, 2 deselected
13591 #:test-flags
13592 #~(list
13593 ;; cannot import name 'StaticPool' from 'sqlalchemy'
13594 "--ignore=tests/test_tutorial/"
13595 ;; Some snapshots have incorrect values.
13596 "--deselect=tests/test_schema_compat_pydantic_v2.py::test_openapi_schema"
13597 ;; Argument() missing 1 required positional argument: 'default'
13598 "--ignore=tests/test_fastapi_cli.py")))
13599 (native-inputs
13600 (list python-anyio
13601 python-dirty-equals
13602 python-flask
13603 python-inline-snapshot
13604 python-pdm-backend
13605 ;; python-pwdlib
13606 python-pyjwt
13607 python-pytest
13608 python-sqlalchemy
13609 ;; python-sqlmodel
13610 python-types-orjson
13611 python-types-ujson))
13612 (propagated-inputs
13613 (list python-starlette
13614 python-pydantic
13615 python-typing-extensions
13616 python-annotated-doc
13617 ;; [optional]
13618 python-email-validator
13619 python-fastapi-cli
13620 python-httpx
13621 python-itsdangerous
13622 python-jinja2
13623 python-multipart
13624 python-orjson
13625 python-pydantic-extra-types
13626 python-pydantic-settings
13627 python-pyyaml
13628 python-ujson
13629 python-uvicorn))
13630 (home-page "https://github.com/tiangolo/fastapi")
13631 (synopsis "Web framework based on type hints")
13632 (description "FastAPI provides a web API framework based on pydantic and
13633starlette.")
13634 (license license:expat)))
13635
13636(define-public python-fastapi-csrf-protect
13637 (package
13638 (name "python-fastapi-csrf-protect")
13639 (version "0.3.3")
13640 (source (origin
13641 (method git-fetch)
13642 (uri (git-reference
13643 (url "https://github.com/aekasitt/fastapi-csrf-protect")
13644 (commit (string-append "v" version))))
13645 (file-name (git-file-name name version))
13646 (sha256
13647 (base32
13648 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
13649 (build-system pyproject-build-system)
13650 (propagated-inputs
13651 (list python-fastapi python-itsdangerous
13652 python-pydantic))
13653 (native-inputs
13654 (list python-poetry-core
13655 python-pytest))
13656 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
13657 (synopsis "Cross-Site Request Forgery (XSRF) protection")
13658 (description
13659 "This package provides a stateless implementation of @dfn{Cross-Site
13660Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
13661pattern.")
13662 (license license:expat)))
13663
13664(define-public python-fastapi-pagination-minimal
13665 (package
13666 (name "python-fastapi-pagination-minimal")
13667 (version "0.15.6")
13668 (source (origin
13669 (method git-fetch)
13670 (uri (git-reference
13671 (url "https://github.com/uriyyo/fastapi-pagination")
13672 (commit version)))
13673 (file-name (git-file-name name version))
13674 (sha256
13675 (base32
13676 "1ndazaqi1na0lj6fi42d7mi9lmpxdak0wq0pd97fb3b23ml8rlg6"))))
13677 (build-system pyproject-build-system)
13678 ;; We run the tests in python-fastapi-pagination only.
13679 (arguments (list #:tests? #false))
13680 ;; These are the only required dependencies,
13681 ;; please add all optional dependencies to the
13682 ;; full python-fastapi-pagination below.
13683 (propagated-inputs (list python-fastapi python-pydantic))
13684 (native-inputs (list python-hatchling))
13685 (home-page "https://github.com/uriyyo/fastapi-pagination")
13686 (synopsis "FastAPI pagination library")
13687 (description "@code{fastapi-pagination} is a Python library designed to
13688simplify pagination in FastAPI applications. It provides a set of utility
13689functions and data models to help you paginate your database queries and
13690return paginated responses to your clients.")
13691 (license license:expat)))
13692
13693(define-public python-fastapi-pagination
13694 (package
13695 (inherit python-fastapi-pagination-minimal)
13696 (name "python-fastapi-pagination")
13697 (arguments
13698 (list
13699 #:test-flags
13700 #~(list "--asyncio-mode=auto"
13701 "--ignore=tests/ext"
13702 ;; Netwok access is required.
13703 "-k" (string-join
13704 (list "not test_optional_params[postgres-default]"
13705 "test_optional_params[postgres-limit-offset]"
13706 "test_optional_params[sqlite-default]"
13707 "test_optional_params[sqlite-limit-offset]")
13708 " and not "))
13709 #:phases
13710 '(modify-phases %standard-phases
13711 (add-after 'unpack 'patch-tests
13712 (lambda _
13713 ;; We don't have a package for python-cassandra or motor, but we
13714 ;; also don't need them as we only run the unit tests anyway.
13715 (substitute* "tests/conftest.py"
13716 (("from cassandra.*") "")
13717 (("from motor.*") "")))))))
13718 (propagated-inputs
13719 (modify-inputs (package-propagated-inputs
13720 python-fastapi-pagination-minimal)
13721 (prepend python-asyncpg
13722 python-databases
13723 python-django
13724 python-fastapi
13725 python-pydantic
13726 python-sqlalchemy
13727 (package
13728 (inherit python-tortoise-orm)
13729 (arguments
13730 (substitute-keyword-arguments (package-arguments
13731 python-tortoise-orm)
13732 ((#:phases phases '%standard-phases)
13733 `(modify-phases ,phases
13734 (delete 'sanity-check)))))
13735 (propagated-inputs
13736 (modify-inputs propagated-inputs
13737 (replace "python-aiosqlite" python-aiosqlite)))))))
13738 (native-inputs
13739 (list python-aiosqlite
13740 python-asgi-lifespan
13741 python-asyncpg
13742 python-dirty-equals
13743 python-faker
13744 python-hatchling
13745 python-httpx
13746 python-pytest
13747 python-pytest-asyncio
13748 python-sqlalchemy
13749 python-typing-extensions))
13750 (description
13751 (string-append (package-description python-fastapi-pagination-minimal)
13752 "
13753
13754This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
13755all available optional dependencies supported by mainline
13756@code{fastapi-pagination}."))))
13757
13758(define-public python-fastapi-cli
13759 (package
13760 (name "python-fastapi-cli")
13761 (version "0.0.7")
13762 (source
13763 (origin
13764 (method url-fetch)
13765 (uri (pypi-uri "fastapi_cli" version))
13766 (sha256
13767 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
13768 (build-system pyproject-build-system)
13769 ;; Tests require fastapi, which depends on this package.
13770 (arguments (list #:tests? #false))
13771 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
13772 (native-inputs
13773 (list python-inline-snapshot python-pdm-backend python-pytest))
13774 (home-page "https://pypi.org/project/fastapi-cli/")
13775 (synopsis
13776 "Run and manage FastAPI apps from the command line with FastAPI CLI")
13777 (description
13778 "FastAPI CLI is a command line program fastapi that you can use to serve
13779your FastAPI app, manage your FastAPI project, and more.")
13780 (license license:expat)))
13781
13782(define-public python-pyactiveresource
13783 (package
13784 (name "python-pyactiveresource")
13785 (version "2.2.2")
13786 (source
13787 (origin
13788 (method git-fetch)
13789 (uri (git-reference
13790 (url "https://github.com/Shopify/pyactiveresource")
13791 (commit (string-append "v" version))))
13792 (file-name (git-file-name name version))
13793 (sha256
13794 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
13795 (build-system pyproject-build-system)
13796 (native-inputs (list python-dateutil python-pytest python-pyyaml
13797 python-setuptools))
13798 (propagated-inputs (list python-six))
13799 (home-page "https://github.com/Shopify/pyactiveresource/")
13800 (synopsis "ActiveResource for Python")
13801 (description
13802 "This package provides a Python port of the ActiveResource project.
13803
13804Active Resource attempts to provide a coherent wrapper object-relational
13805mapping for REST web services. It follows the same philosophy as Active
13806Record, in that one of its prime aims is to reduce the amount of code needed
13807to map to these resources. This is made possible by relying on a number of
13808code- and protocol-based conventions that make it easy for Active Resource to
13809infer complex relations and structures.")
13810 (license license:expat)))
13811
13812(define-public python-shopifyapi
13813 (package
13814 (name "python-shopifyapi")
13815 (version "12.7.0")
13816 (source
13817 (origin
13818 (method git-fetch)
13819 (uri (git-reference
13820 (url "https://github.com/Shopify/shopify_python_api")
13821 (commit (string-append "v" version))))
13822 (file-name (git-file-name name version))
13823 (sha256
13824 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
13825 (build-system pyproject-build-system)
13826 (arguments
13827 (list
13828 #:test-flags
13829 #~'("-k"
13830 ;; Disable a failing test.
13831 "not test_raises_if_aud_doesnt_match_api_key")))
13832 (native-inputs (list python-mock python-pytest python-setuptools))
13833 (propagated-inputs (list python-pyactiveresource python-pyjwt
13834 python-pyyaml python-six))
13835 (home-page "https://github.com/Shopify/shopify_python_api")
13836 (synopsis "Shopify API for Python")
13837 (description
13838 "This package provides the Shopify API for Python.
13839
13840The ShopifyAPI library allows Python developers to programmatically access the
13841admin section of stores using an ActiveResource-like interface similar the
13842ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
13843list, create, update, or delete resources (e.g. Order, Product, Collection).")
13844 (license license:expat)))
13845
13846(define-public python-pybadges
13847 (package
13848 (name "python-pybadges")
13849 (version "3.0.1")
13850 (source (origin
13851 (method git-fetch)
13852 (uri (git-reference
13853 (url "https://github.com/google/pybadges")
13854 (commit version)))
13855 (file-name (git-file-name name version))
13856 (sha256
13857 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
13858 (build-system pyproject-build-system)
13859 (arguments
13860 (list
13861 #:test-flags
13862 #~'("-k"
13863 ;; Disable network dependent tests.
13864 "not test_changes and not test_not_image_url and not test_http_url")))
13865 (propagated-inputs (list python-jinja2 python-requests))
13866 (native-inputs (list python-flask
13867 python-fonttools
13868 python-pillow
13869 python-pytest
13870 python-setuptools
13871 python-wheel
13872 python-xmldiff))
13873 (home-page "https://github.com/google/pybadges")
13874 (synopsis "Generate Github-style badges on the command-line")
13875 (description
13876 "This package provides @code{python-pybadges}: a library and command-line
13877tool for generating Github-style badges as SVG images.")
13878 (license license:asl2.0)))
13879
13880(define-public python-grid5000
13881 (package
13882 (name "python-grid5000")
13883 (version "1.2.4")
13884 (source (origin
13885 (method git-fetch)
13886 (uri (git-reference
13887 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
13888 (commit (string-append "v" version))))
13889 (file-name (git-file-name name version))
13890 (sha256
13891 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
13892 (build-system pyproject-build-system)
13893 (arguments
13894 (list #:tests? #f)) ; No tests.
13895 (native-inputs (list python-setuptools))
13896 (propagated-inputs (list python-requests python-ipython python-pyyaml))
13897 (home-page "https://pypi.org/project/python-grid5000/")
13898 (synopsis "Grid5000 python client")
13899 (description
13900 "python-grid5000 is a python package wrapping the Grid5000 REST API.
13901You can use it as a library in your python project or you can explore the
13902Grid5000 resources interactively using the embedded shell.")
13903 (license license:gpl3+)))
13904
13905(define-public python-enoslib
13906 (package
13907 (name "python-enoslib")
13908 (version "8.0.1")
13909 (source
13910 (origin
13911 (method git-fetch)
13912 (uri (git-reference
13913 (url "https://gitlab.inria.fr/discovery/enoslib")
13914 (commit (string-append "v" version))))
13915 (file-name (git-file-name name version))
13916 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
13917 (arguments
13918 (list
13919 #:test-flags
13920 #~(list "enoslib/tests/unit"
13921 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
13922 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
13923 #:phases
13924 #~(modify-phases %standard-phases
13925 (add-before 'check 'pre-check
13926 (lambda* (#:key tests? #:allow-other-keys)
13927 (when tests?
13928 ;; Otherwise Ansible fails to create its config directory.
13929 (setenv "HOME" "/tmp"))))
13930 ;; Disable the sanity check, which fails with the following error:
13931 ;;
13932 ;; ContextualVersionConflict(rich 12.4.1
13933 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
13934 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
13935 ;;
13936 ;; The optional jupyter dependency of rich isn't critical for
13937 ;; EnOSlib to work
13938 (delete 'sanity-check))))
13939 (build-system pyproject-build-system)
13940 (native-inputs
13941 (list python-ddt
13942 python-freezegun
13943 python-pytest
13944 python-setuptools
13945 python-wheel))
13946 (propagated-inputs
13947 (list ansible
13948 python-cryptography
13949 python-grid5000
13950 python-jsonschema
13951 python-netaddr
13952 python-packaging
13953 python-requests
13954 python-rich
13955 python-sshtunnel
13956 python-pytz))
13957 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
13958 (synopsis "Deploy distributed testbeds on a variety of platforms")
13959 (description
13960 "EnOSlib is a library to build experimental frameworks on various
13961scientific testbeds. It lets you deploy networks of machines on actual
13962hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
13963 (license license:gpl3+)))
13964
13965(define-public python-pynetbox
13966 (package
13967 (name "python-pynetbox")
13968 (version "7.4.1")
13969 (source (origin
13970 (method url-fetch)
13971 (uri (pypi-uri "pynetbox" version))
13972 (sha256
13973 (base32
13974 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
13975 (build-system pyproject-build-system)
13976 (arguments
13977 (list
13978 #:test-flags
13979 ;; Integration tests depend on docker.
13980 '(list "--ignore=tests/integration")))
13981 (propagated-inputs (list python-packaging python-requests))
13982 (native-inputs
13983 (list python-pytest
13984 python-setuptools
13985 python-setuptools-scm
13986 python-wheel))
13987 (home-page "https://github.com/netbox-community/pynetbox")
13988 (synopsis "NetBox API client library")
13989 (description "Python module to query and edit data stored in a
13990@url{https://netbox.dev,NetBox} instance.")
13991 (license license:asl2.0)))
13992
13993(define-public python-waybackpack
13994 (package
13995 (name "python-waybackpack")
13996 (version "0.6.4")
13997 (source
13998 (origin
13999 (method url-fetch)
14000 (uri (pypi-uri "waybackpack" version))
14001 (sha256
14002 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14003 (build-system pyproject-build-system)
14004 (arguments
14005 (list #:tests? #f)) ; would require network (and SSL certificates)
14006 (propagated-inputs (list python-requests))
14007 (native-inputs (list python-pytest python-setuptools python-wheel))
14008 (home-page "https://github.com/jsvine/waybackpack")
14009 (synopsis
14010 "Download the entire Wayback Machine archive for a given URL")
14011 (description
14012 "This package provides a library and a command-line tool that lets
14013you download the entire Wayback Machine archive for a given URL.")
14014 (license license:expat)))
14015
14016(define-public python-xyzservices
14017 (package
14018 (name "python-xyzservices")
14019 (version "2025.4.0")
14020 (source
14021 (origin
14022 (method url-fetch)
14023 (uri (pypi-uri "xyzservices" version))
14024 (sha256
14025 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14026 (build-system pyproject-build-system)
14027 (arguments
14028 (list
14029 #:test-flags #~(list "-m" "not request")))
14030 (native-inputs
14031 (list python-pytest
14032 python-mercantile
14033 python-requests
14034 python-setuptools
14035 python-setuptools-scm))
14036 (home-page "https://github.com/geopandas/xyzservices")
14037 (synopsis "Source of XYZ tiles providers")
14038 (description "@code{xyzservices} is a lightweight library providing a
14039repository of available XYZ services offering raster basemap tiles. The
14040repository is provided via Python API and as a compressed JSON file.")
14041 (license license:bsd-3)))
14042
14043(define-public s3cmd
14044 (package
14045 (name "s3cmd")
14046 (version "2.4.0")
14047 (source
14048 (origin
14049 (method git-fetch)
14050 (uri (git-reference
14051 (url "https://github.com/s3tools/s3cmd")
14052 (commit (string-append "v" version))))
14053 (file-name (git-file-name name version))
14054 (sha256
14055 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14056 (build-system pyproject-build-system)
14057 (arguments
14058 (list
14059 #:tests? #f ; XXX: Tests require network access.
14060 #:phases
14061 #~(modify-phases %standard-phases
14062 (add-after 'unpack 'hide-wrapping
14063 (lambda _
14064 (substitute* "S3/MultiPart.py"
14065 (("sys\\.argv\\[0\\]")
14066 "\"s3cmd\""))
14067 (substitute* "s3cmd"
14068 (("optparser\\.get_prog_name\\(\\)")
14069 "\"s3cmd\"")))))))
14070 (native-inputs (list python-setuptools))
14071 (inputs (list python-dateutil python-magic))
14072 (home-page "https://s3tools.org/s3cmd")
14073 (synopsis "Command line tool for S3-compatible storage services")
14074 (description
14075 "S3cmd is a command line tool for uploading, retrieving and managing data
14076in storage services that are compatible with the Amazon Simple Storage
14077Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14078GnuPG encryption, and more. It also supports management of Amazon's
14079CloudFront content delivery network.")
14080 (license license:gpl2+)))