projects/guix·blob hurd-team · refs

14115 lines · 508.8 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015-2025 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Christopher Baines <[email protected]>
5;;; Copyright © 2017 Muriithi Frederick Muriuki <[email protected]>
6;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
7;;; Copyright © 2013, 2014, 2015, 2016, 2020, 2023 Andreas Enge <[email protected]>
8;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
9;;; Copyright © 2015-2025 Ricardo Wurmus <[email protected]>
10;;; Copyright © 2017, 2021 Roel Janssen <[email protected]>
11;;; Copyright © 2016, 2017, 2020 Julien Lepiller <[email protected]>
12;;; Copyright © 2016, 2017 Nikita <[email protected]>
13;;; Copyright © 2014, 2017, 2021 Eric Bavier <[email protected]>
14;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
15;;; Copyright © 2015 Cyril Roelandt <[email protected]>
16;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
17;;; Copyright © 2016, 2019, 2022, 2025 Hartmut Goebel <[email protected]>
18;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <[email protected]>
19;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
20;;; Copyright © 2015, 2016 Christine Lemmer-Webber <[email protected]>
21;;; Copyright © 2017 Adriano Peluso <[email protected]>
22;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
23;;; Copyright © 2016 David Craven <[email protected]>
24;;; Copyright © 2017 Oleg Pykhalov <[email protected]>
25;;; Copyright © 2015, 2016 David Thompson <[email protected]>
26;;; Copyright © 2017 Mark Meyer <[email protected]>
27;;; Copyright © 2018 Clément Lassieur <[email protected]>
28;;; Copyright © 2018 Tomáš Čech <[email protected]>
29;;; Copyright © 2018, 2019, 2021, 2024 Nicolas Goaziou <[email protected]>
30;;; Copyright © 2018 Mathieu Othacehe <[email protected]>
31;;; Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
32;;; Copyright © 2018 swedebugia <[email protected]>
33;;; Copyright © 2019 Vagrant Cascadian <[email protected]>
34;;; Copyright © 2019, 2023 Brendan Tildesley <[email protected]>
35;;; Copyright © 2019 Pierre Langlois <[email protected]>
36;;; Copyright © 2019, 2020 Tanguy Le Carrour <[email protected]>
37;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
38;;; Copyright © 2020 Josh Marshall <[email protected]>
39;;; Copyright © 2020 Evan Straw <[email protected]>
40;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
41;;; Copyright © 2020 Holger Peters <[email protected]>
42;;; Copyright © 2020 Noisytoot <[email protected]>
43;;; Copyright © 2020 Edouard Klein <[email protected]>
44;;; Copyright © 2020, 2021, 2022, 2023, 2025 Vinicius Monego <[email protected]>
45;;; Copyright © 2020 Konrad Hinsen <[email protected]>
46;;; Copyright © 2020, 2022, 2024 Giacomo Leidi <[email protected]>
47;;; Copyright © 2020 Raghav Gururajan <[email protected]>
48;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
49;;; Copyright © 2021 Greg Hogan <[email protected]>
50;;; Copyright © 2021 Maxime Devos <[email protected]>
51;;; Copyright © 2021 Pradana Aumars <[email protected]>
52;;; Copyright © 2021, 2022, 2024, 2026 Arun Isaac <[email protected]>
53;;; Copyright © 2021-2022, 2024-2025 jgart <[email protected]>
54;;; Copyright © 2021 Alice Brenon <[email protected]>
55;;; Copyright © 2021 Mekeor Melire <[email protected]>
56;;; Copyright © 2022 John Kehayias <[email protected]>
57;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email protected]>
58;;; Copyright © 2022, 2023, 2025 Felix Gruber <[email protected]>
59;;; Copyright © 2022 Peter Polidoro <[email protected]>
60;;; Copyright © 2022 Antero Mejr <[email protected]>
61;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
62;;; Copyright © 2022, 2025 Nicolas Graves <[email protected]>
63;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
64;;; Copyright © 2022 msimonin <[email protected]>
65;;; Copyright © 2022 Michael Rohleder <[email protected]>
66;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
67;;; Copyright © 2023 dan <[email protected]>
68;;; Copyright © 2023 John Kehayias <[email protected]>
69;;; Copyright © 2023 Juliana Sims <[email protected]>
70;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
71;;; Copyright © 2024 Fabio Natali <[email protected]>
72;;; Copyright © 2024 Steve George <[email protected]>
73;;; Copyright © 2024 Troy Figiel <[email protected]>
74;;; Copyright © 2024, 2025 Sharlatan Hellseher <[email protected]>
75;;; Copyright © 2024 normally_js <[email protected]>
76;;; Copyright © 2024 Markku Korkeala <[email protected]>
77;;; Copyright © 2024 Nguyễn Gia Phong <[email protected]>
78;;; Copyright © 2024 Zheng Junjie <[email protected]>
79;;; Copyright © 2024 Spencer King <[email protected]>
80;;; Copyright © 2024 Attila Lendvai <[email protected]>
81;;; Copyright © 2025 Daniel Ziltener <[email protected]>
82;;; Copyright © 2025 gemmaro <[email protected]>
83;;; Copyright © 2025 Sergio Pastor Pérez <[email protected]>
84;;; Copyright © 2025 Jake Forster <[email protected]>
85;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
86;;; Copyright © 2025 Hugo Buddelmeijer <[email protected]>
87;;; Copyright © 2025-2026 Artur Wroblewski <[email protected]>
88;;; Copyright © 2025, 2026 Allan Adair <[email protected]>
89;;; Copyright © 2025 Aaron Covrig <[email protected]>
90;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
91;;; Copyright © 2026 mst <[email protected]>
92;;;
93;;; This file is part of GNU Guix.
94;;;
95;;; GNU Guix is free software; you can redistribute it and/or modify it
96;;; under the terms of the GNU General Public License as published by
97;;; the Free Software Foundation; either version 3 of the License, or (at
98;;; your option) any later version.
99;;;
100;;; GNU Guix is distributed in the hope that it will be useful, but
101;;; WITHOUT ANY WARRANTY; without even the implied warranty of
102;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
103;;; GNU General Public License for more details.
104;;;
105;;; You should have received a copy of the GNU General Public License
106;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
107
108(define-module (gnu packages python-web)
109 #:use-module (gnu packages admin)
110 #:use-module (gnu packages base)
111 #:use-module (gnu packages bash)
112 #:use-module (gnu packages check)
113 #:use-module (gnu packages cmake)
114 #:use-module (gnu packages compression)
115 #:use-module (gnu packages curl)
116 #:use-module (gnu packages databases)
117 #:use-module (gnu packages django)
118 #:use-module (gnu packages dns)
119 #:use-module (gnu packages freedesktop)
120 #:use-module (gnu packages glib)
121 #:use-module (gnu packages gnupg)
122 #:use-module (gnu packages graphviz)
123 #:use-module (gnu packages groff)
124 #:use-module (gnu packages iso-codes)
125 #:use-module (gnu packages libevent)
126 #:use-module (gnu packages libffi)
127 #:use-module (gnu packages libidn)
128 #:use-module (gnu packages linux)
129 #:use-module (gnu packages lsof)
130 #:use-module (gnu packages node)
131 #:use-module (gnu packages nss)
132 #:use-module (gnu packages openstack)
133 #:use-module (gnu packages pcre)
134 #:use-module (gnu packages pkg-config)
135 #:use-module (gnu packages protobuf)
136 #:use-module (gnu packages python)
137 #:use-module (gnu packages python-build)
138 #:use-module (gnu packages python-check)
139 #:use-module (gnu packages python-compression)
140 #:use-module (gnu packages python-crypto)
141 #:use-module (gnu packages python-science)
142 #:use-module (gnu packages python-xyz)
143 #:use-module (gnu packages qt)
144 #:use-module (gnu packages rdf)
145 #:use-module (gnu packages rpc)
146 #:use-module (gnu packages rust)
147 #:use-module (gnu packages rust-apps)
148 #:use-module (gnu packages serialization)
149 #:use-module (gnu packages sphinx)
150 #:use-module (gnu packages texinfo)
151 #:use-module (gnu packages time)
152 #:use-module (gnu packages tls)
153 #:use-module (gnu packages version-control)
154 #:use-module (gnu packages web)
155 #:use-module (gnu packages xml)
156 #:use-module (gnu packages)
157 #:use-module (guix build-system cargo)
158 #:use-module (guix build-system copy)
159 #:use-module (guix build-system pyproject)
160 #:use-module (guix build-system python)
161 #:use-module (guix deprecation)
162 #:use-module (guix download)
163 #:use-module (guix gexp)
164 #:use-module (guix git-download)
165 #:use-module ((guix licenses) #:prefix license:)
166 #:use-module (guix packages)
167 #:use-module (guix utils)
168 #:use-module (srfi srfi-1))
169
170(define-public python-aioboto3
171 (package
172 (name "python-aioboto3")
173 (version "15.5.0")
174 (source
175 (origin
176 (method git-fetch)
177 (uri (git-reference
178 (url "https://github.com/terricain/aioboto3")
179 (commit (string-append "v" version))))
180 (file-name (git-file-name name version))
181 (sha256
182 (base32 "05644x17f9sl8mv9bp8l0rjcmw5x2ssyd5z1v3xmgcspk5qs6qn8"))))
183 (build-system pyproject-build-system)
184 (arguments
185 (list
186 #:tests? #f ;XXX: all tests faild
187 #:phases
188 #~(modify-phases %standard-phases
189 (add-after 'unpack 'relax-requirements
190 (lambda _
191 (substitute* "pyproject.toml"
192 (("aiobotocore\\[boto3\\]==2.25.1")
193 "aiobotocore >= 2.25.1")))))))
194 (native-inputs
195 (list python-setuptools
196 python-setuptools-scm))
197 (propagated-inputs
198 (list python-aiobotocore
199 python-aiofiles
200 ;; [optional]
201 python-boto3
202 python-cryptography))
203 (home-page "https://github.com/terricain/aioboto3")
204 (synopsis "Async boto3 wrapper")
205 (description
206 "This package is mostly just a wrapper combining the great work of boto3
207and aiobotocore.")
208 (license license:asl2.0)))
209
210(define-public python-aiocoap
211 (package
212 (name "python-aiocoap")
213 (version "0.4.14")
214 (source
215 (origin
216 (method git-fetch) ; tests miss data and module files in PyPI release
217 (uri (git-reference
218 (url "https://github.com/chrysn/aiocoap")
219 (commit version)))
220 (file-name (git-file-name name version))
221 (sha256
222 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
223 (build-system pyproject-build-system)
224 (arguments
225 (list
226 #:test-flags
227 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
228 ;; 8683, 0, 0): address already in use
229 #~(list "--ignore=tests/test_server.py"
230 "-k" (string-join
231 ;; TypeError: can only concatenate str (not "NoneType") to
232 ;; str
233 (list "not test_options"
234 "test_uri_parser"
235 "test_help" ; returned non-zero exit status 1.
236 "test_routing" ; address already in use
237 "test_tls")
238 " and not "))))
239 (native-inputs
240 (list openssl ;for tests/test_tls.py
241 python-pytest
242 python-setuptools
243 python-wheel))
244 (propagated-inputs
245 (list ;; python-cbor-diag
246 python-cbor2
247 python-cryptography
248 ;; python-dtlssocket
249 python-filelock
250 ;; python-ge25519
251 python-pygments
252 python-termcolor
253 python-websockets))
254 (home-page "https://github.com/chrysn/aiocoap")
255 (synopsis "Python CoAP library")
256 (description
257 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
258Constrained Application Protocol}, http://coap.space/}. It facilitates
259writing applications that talk to network enabled embedded
260@acronym{IoT,Internet of Things} devices.")
261 (license license:expat)))
262
263(define-public python-alpaca-py
264 (package
265 (name "python-alpaca-py")
266 (version "0.43.2")
267 (source
268 (origin
269 (method git-fetch)
270 (uri (git-reference
271 (url "https://github.com/alpacahq/alpaca-py")
272 (commit (string-append "v" version))))
273 (file-name (git-file-name name version))
274 (sha256
275 (base32 "0majn27r2s2z5nbqvkpmw04kswhj9xkmvmm0rkvb3fga9lwwivlb"))))
276 (build-system pyproject-build-system)
277 (arguments
278 (list
279 #:phases
280 #~(modify-phases %standard-phases
281 (add-before 'build 'set-version
282 (lambda _
283 (setenv "POETRY_DYNAMIC_VERSIONING_BYPASS"
284 #$(version-major+minor+point version)))))))
285 (native-inputs
286 (list python-poetry-core
287 python-poetry-dynamic-versioning
288 python-pytest
289 python-pytest-asyncio
290 python-requests-mock))
291 (propagated-inputs
292 (list python-msgpack
293 python-pandas
294 python-pydantic
295 python-requests
296 python-sseclient-py
297 python-websockets))
298 (home-page "https://alpaca.markets/sdks/python/")
299 (synopsis "Alpaca API official Python SDK")
300 (description
301 "Alpaca-py provides an interface to REST, WebSocket and SSE endpoints
302that allow interaction with the @url{https://alpaca.markets/, Alpaca} API.")
303 (license license:asl2.0)))
304
305(define-public python-anaconda-client
306 (package
307 (name "python-anaconda-client")
308 (version "1.13.1")
309 (source
310 (origin
311 (method git-fetch)
312 (uri (git-reference
313 (url "https://github.com/Anaconda-Platform/anaconda-client")
314 (commit version)))
315 (file-name (git-file-name name version))
316 (sha256
317 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
318 (build-system pyproject-build-system)
319 (arguments
320 (list
321 #:test-flags
322 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
323 "--deselect=tests/utils/test_conda.py::test_conda_vars")
324 #:phases
325 #~(modify-phases %standard-phases
326 (add-after 'unpack 'fix-pytest-config
327 (lambda _
328 (substitute* "setup.cfg"
329 (("addopts=.*") "addopts=\n")))))))
330 (native-inputs
331 (list python-freezegun
332 python-pytest
333 python-setuptools))
334 (propagated-inputs
335 (list python-anaconda-cli-base
336 python-conda-package-handling
337 python-conda-package-streaming
338 python-dateutil
339 python-defusedxml
340 python-nbformat
341 python-pillow
342 python-platformdirs
343 python-pytz
344 python-pyyaml
345 python-requests
346 python-requests-toolbelt
347 python-setuptools
348 python-tqdm
349 python-urllib3))
350 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
351 (synopsis "Anaconda Cloud command line client library")
352 (description
353 "Anaconda Cloud command line client library provides an interface to
354Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
355environments.")
356 (license license:bsd-3)))
357
358(define-public python-apprise
359 (package
360 (name "python-apprise")
361 (version "1.9.4")
362 (source
363 (origin
364 (method url-fetch)
365 (uri (pypi-uri "apprise" version))
366 (sha256
367 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
368 (build-system pyproject-build-system)
369 (arguments
370 (list
371 ;; These tests used to be ran with --numprocesses, but that seems to have
372 ;; made them non-deterministic.
373 #:test-flags
374 #~(list "--ignore=tests/test_plugin_macosx.py"
375 "-k" "not test_plugin_glib_send_raises_generic")))
376 (native-inputs
377 (list python-babel
378 python-pytest
379 python-pytest-mock
380 python-setuptools))
381 (propagated-inputs
382 (list python-certifi
383 python-click
384 python-markdown
385 python-pygobject
386 python-pyyaml
387 python-requests
388 python-requests-oauthlib))
389 (home-page "https://github.com/caronc/apprise")
390 (synopsis "Push notification library")
391 (description
392 "Apprise is a Python library that allows sending push notifications to a
393broad range of notification services, such as Telegram, Discord, Slack, Amazon
394SNS, Gotify, etc.")
395 (license license:bsd-2)))
396
397(define-public python-asyncudp
398 (package
399 (name "python-asyncudp")
400 (version "0.11.0")
401 (source
402 (origin
403 (method git-fetch)
404 (uri (git-reference
405 (url "https://github.com/eerimoq/asyncudp")
406 (commit version)))
407 (file-name (git-file-name name version))
408 (sha256
409 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
410 (build-system pyproject-build-system)
411 (native-inputs (list python-pytest python-setuptools))
412 (home-page (git-reference-url (origin-uri source)))
413 (synopsis "High level UDP sockets for asyncio")
414 (description
415 "This package provides a Python library offering high level UDP sockets
416for asyncio. Import it alongside asyncio and use its API to send and receive
417UDP packets.")
418 (license license:expat)))
419
420(define-public python-behave-web-api
421 (package
422 (name "python-behave-web-api")
423 (version "2.3.0")
424 (source
425 (origin
426 (method git-fetch)
427 (uri (git-reference
428 (url "https://github.com/jefersondaniel/behave-web-api")
429 (commit (string-append "v" version))))
430 (file-name (git-file-name name version))
431 (sha256
432 (base32 "1r8yx8gb5m599cpdqfvk6z9ax3qj26fpvczdr84z8jya0dxfch4p"))))
433 (build-system pyproject-build-system)
434 (native-inputs
435 (list python-pytest
436 python-setuptools))
437 (propagated-inputs
438 (list behave
439 python-requests))
440 (home-page "https://github.com/jefersondaniel/behave-web-api")
441 (synopsis "Provides testing for JSON APIs with Behave for Python")
442 (description "This package provides testing utility modules for testing
443JSON APIs with Behave.")
444 (license license:expat)))
445
446(define-public python-blacksheep
447 (package
448 (name "python-blacksheep")
449 (version "2.4.6")
450 (source
451 (origin
452 (method git-fetch)
453 (uri (git-reference
454 (url "https://github.com/Neoteroi/BlackSheep")
455 (commit (string-append "v" version))))
456 (file-name (git-file-name name version))
457 (sha256
458 (base32 "120q6hrhfjxdsqav8h5z8yqfi0iiacwxbkryjk7kb20ic2879vqh"))))
459 (build-system pyproject-build-system)
460 (arguments
461 (list
462 ;; tests: 1821 passed
463 ;;
464 ;; Run all unit tests, but do not run integration tests from `itests`
465 ;; directory.
466 #:test-flags
467 #~(list "tests")
468 #:phases
469 #~(modify-phases %standard-phases
470 (add-before 'build 'cythonize
471 (lambda _
472 (with-directory-excursion "blacksheep"
473 (for-each (lambda (file)
474 (invoke "cython" "-3" file "-I" "."))
475 (find-files "." ".*\\.pyx$"))))))))
476 (native-inputs
477 (list nss-certs-for-test
478 python-cython
479 python-flask
480 python-jinja2
481 python-pydantic
482 python-pyjwt
483 python-pytest
484 python-pytest-asyncio
485 python-setuptools))
486 (propagated-inputs
487 (list python-certifi
488 python-essentials
489 python-essentials-openapi
490 python-guardpost
491 python-httptools
492 python-rodi
493 python-itsdangerous))
494 (home-page "https://github.com/Neoteroi/BlackSheep")
495 (synopsis "Asynchronous framework to build event based web applications")
496 (description
497 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
498
499The framework offers
500@itemize
501@item A rich code API, based on dependency injection and inspired by Flask and
502ASP.NET Core.
503@item A typing-friendly codebase, which enables a comfortable development
504experience thanks to hints when coding with IDEs.
505@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
506and JSON.
507@item A cross-platform framework, using the most modern versions of Python.
508@item Good performance.
509@end itemize")
510 (license license:expat)))
511
512(define-public python-bleach
513 (package
514 (name "python-bleach")
515 (version "6.3.0")
516 (source
517 (origin
518 (method git-fetch)
519 (uri (git-reference
520 (url "https://github.com/mozilla/bleach")
521 (commit (string-append "v" version))))
522 (file-name (git-file-name name version))
523 (sha256
524 (base32 "02abk9ixn010sqpbdsd7nxms0gv4prwv6d3nplb8giq85lpn1kkb"))
525 (snippet
526 #~(begin
527 (use-modules (guix build utils))
528 (substitute* (find-files "." "\\.py$")
529 (("bleach\\._vendor\\.html5lib") "html5lib"))
530 (delete-file-recursively "bleach/_vendor/html5lib")))))
531 (build-system pyproject-build-system)
532 (arguments
533 (list
534 ;; tests: 448 passed, 1 deselected, 3 xfailed
535 #:test-flags
536 #~(list (string-append "--deselect=tests/test_clean.py::"
537 "test_self_closing_tags_self_close[wbr]"))
538 #:phases
539 #~(modify-phases %standard-phases
540 (add-after 'unpack 'relax-requirements
541 (lambda _
542 ;; "tinycss2>=1.1.0,<1.5"
543 ;; The 'sanity-check of python-nbclassic fails without this.
544 (substitute* "setup.py"
545 (("\"tinycss2.*") "")))))))
546 (native-inputs
547 (list python-pytest
548 python-setuptools))
549 (propagated-inputs
550 (list python-html5lib
551 python-tinycss2
552 python-webencodings))
553 (home-page "https://github.com/mozilla/bleach")
554 (synopsis "Whitelist-based HTML-sanitizing tool")
555 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
556 (license license:asl2.0)))
557
558(define-public python-cloudpathlib
559 (package
560 (name "python-cloudpathlib")
561 (version "0.23.0")
562 (source
563 (origin
564 (method git-fetch)
565 (uri (git-reference
566 (url "https://github.com/drivendataorg/cloudpathlib")
567 (commit (string-append "v" version))))
568 (file-name (git-file-name name version))
569 (sha256
570 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
571 (build-system pyproject-build-system)
572 (arguments
573 (list
574 ;; tests: 977 passed, 15 skipped, 8642 warnings
575 #:test-flags
576 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
577 ;; TODO: Package azure-identity (required for this file)
578 "--ignore=tests/test_azure_specific.py"
579 ;; TypeError: Retry.__init__() got an unexpected keyword
580 ;; argument 'timeout'
581 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")
582 #:phases
583 #~(modify-phases %standard-phases
584 (add-after 'unpack 'fix-pytest-config
585 (lambda _
586 (substitute* "pyproject.toml"
587 (("addopts =.*") "")))))))
588 (native-inputs
589 (list ;; python-azure-identity
590 python-dotenv
591 python-flit-core
592 python-psutil
593 python-pydantic
594 python-pytest
595 python-pytest-cases
596 python-pytest-xdist
597 python-shortuuid
598 python-tenacity))
599 (propagated-inputs
600 (list python-azure-storage-blob
601 python-azure-storage-file-datalake
602 python-boto3
603 python-google-cloud-storage
604 python-typing-extensions))
605 (home-page "https://github.com/drivendataorg/cloudpathlib")
606 (synopsis "Pathlib-style classes for cloud storage services")
607 (description
608 "This package provides a Python library with classes that mimic
609@code{pathlib.Path}'s interface for URIs from different cloud storage
610services.")
611 (license license:expat)))
612
613(define-public python-conda-package-handling
614 (package
615 (name "python-conda-package-handling")
616 (version "2.4.0")
617 (source
618 (origin
619 (method git-fetch)
620 (uri (git-reference
621 (url "https://github.com/conda/conda-package-handling/")
622 (commit version)))
623 (file-name (git-file-name name version))
624 (sha256
625 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
626 (build-system pyproject-build-system)
627 (native-inputs
628 (list python-bottle
629 python-mock
630 python-pytest-8
631 python-pytest-cov
632 python-pytest-mock
633 python-setuptools))
634 (propagated-inputs
635 (list python-conda-package-streaming))
636 (home-page "https://conda.io")
637 (synopsis "Create and extract conda packages of various formats")
638 (description
639 "This library is an abstraction of Conda package handling and a tool for
640extracting, creating, and converting between formats.")
641 (license license:bsd-3)))
642
643(define-public python-conda-package-streaming
644 (package
645 (name "python-conda-package-streaming")
646 (version "0.12.0")
647 (source
648 (origin
649 (method url-fetch)
650 (uri (pypi-uri "conda_package_streaming" version))
651 (sha256
652 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
653 (build-system pyproject-build-system)
654 (arguments
655 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
656 (list #:tests? #f))
657 (native-inputs
658 (list python-flit-core))
659 (propagated-inputs
660 (list python-requests
661 python-zstandard))
662 (home-page "https://conda.github.io/conda-package-streaming/")
663 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
664 (description
665 "This package provides an efficient library to read from new and old format
666@code{.conda} and @code{.tar.bz2} conda packages.")
667 (license license:bsd-3)))
668
669(define-public python-dependency-groups
670 (package
671 (name "python-dependency-groups")
672 (version "1.3.1")
673 (source
674 (origin
675 (method url-fetch)
676 (uri (pypi-uri "dependency_groups" version))
677 (sha256
678 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
679 (build-system pyproject-build-system)
680 (propagated-inputs (list python-packaging python-tomli))
681 (native-inputs (list python-flit-core python-pytest))
682 (home-page "https://dependency-groups.readthedocs.io/")
683 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
684 (description
685 "This package provides a library which is able to parse dependency groups (PEP
686735), following includes, and provide that data as output.")
687 (license license:expat)))
688
689(define-public python-devpi-common
690 (package
691 (name "python-devpi-common")
692 (version "4.0.4")
693 (source
694 (origin
695 (method url-fetch)
696 (uri (pypi-uri "devpi_common" version))
697 (sha256
698 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
699 (build-system pyproject-build-system)
700 (propagated-inputs (list python-lazy python-packaging-legacy
701 python-requests))
702 (native-inputs
703 (list python-pytest
704 python-setuptools
705 python-wheel))
706 (home-page "https://github.com/devpi/devpi")
707 (synopsis
708 "Utilities jointly used by devpi-server, devpi-client and others")
709 (description
710 "This package provides utilities jointly used by devpi-server,
711devpi-client and others.")
712 (license license:expat)))
713
714(define-public python-devpi-client
715 (package
716 (name "python-devpi-client")
717 (version "7.2.0")
718 (source
719 (origin
720 (method url-fetch)
721 (uri (pypi-uri "devpi-client" version))
722 (sha256
723 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
724 (build-system pyproject-build-system)
725 (arguments
726 (list
727 #:test-flags
728 ;; This wants to use pip install
729 '(list "--ignore=testing/test_upload.py"
730 ;; These complain about finding distutils. It's not my fault,
731 ;; mate, setuptools is right there, but you won't pick it!
732 "--ignore=testing/test_list_remove.py"
733 "--ignore=testing/test_main.py"
734 "--ignore=testing/test_install.py"
735 "--ignore=testing/test_functional.py"
736 "--ignore=testing/test_test.py")
737 #:phases
738 '(modify-phases %standard-phases
739 (add-after 'unpack 'patch-tests
740 (lambda _
741 ;; Do not replace the directory name of the store item.
742 (substitute* "testing/conftest.py"
743 (("\"devpi-server\", \"devpi-init\"")
744 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
745 (add-before 'check 'set-HOME
746 ;; Some tests need this
747 (lambda _ (setenv "HOME" "/tmp"))))))
748 (propagated-inputs (list python-pypa-build
749 python-check-manifest
750 python-colorama
751 python-devpi-common
752 python-iniconfig
753 python-pkginfo
754 python-platformdirs
755 python-pluggy
756 python-pypitoken
757 python-tomli))
758 (native-inputs
759 (list python-devpi-server
760 python-pytest
761 python-setuptools
762 python-virtualenv))
763 (home-page "https://github.com/devpi/devpi")
764 (synopsis "Devpi upload/install/... commands for Python developers")
765 (description
766 "The devpi command line tool is typically used in conjunction with
767devpi-server. It allows uploading, testing and installing packages from devpi
768indexes.")
769 (license license:expat)))
770
771(define-public python-devpi-process
772 (package
773 (name "python-devpi-process")
774 (version "1.0.2")
775 (source
776 (origin
777 (method url-fetch)
778 (uri (pypi-uri "devpi_process" version))
779 (sha256
780 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
781 (build-system pyproject-build-system)
782 (arguments
783 (list
784 #:phases
785 '(modify-phases %standard-phases
786 (add-after 'unpack 'relax-requirements
787 (lambda _
788 ;; Our package is too old, sorry.
789 (substitute* "pyproject.toml"
790 (("typing-extensions>=4.12.2")
791 "typing-extensions>=4.10.0"))))
792 (add-after 'unpack 'patch-tool-locations
793 (lambda* (#:key inputs #:allow-other-keys)
794 (substitute* "src/devpi_process/__init__.py"
795 (("_exe\\(\"devpi-init\"\\)")
796 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
797 (("_exe\\(\"devpi-server\"\\)")
798 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
799 (("_exe\\(\"devpi\"\\)")
800 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
801 (propagated-inputs (list python-devpi-client python-devpi-server
802 python-typing-extensions))
803 (native-inputs
804 (list nss-certs-for-test
805 python-hatchling
806 python-hatch-vcs
807 python-httpx
808 python-pytest
809 python-pytest-cov))
810 (home-page "https://github.com/devpi/devpi")
811 (synopsis "API to create and use a devpi server process")
812 (description
813 "This package provides a programmatic API to create and use a devpi
814server process.")
815 (license license:expat)))
816
817(define-public python-devpi-server
818 (package
819 (name "python-devpi-server")
820 (version "6.17.0")
821 (source
822 (origin
823 (method url-fetch)
824 (uri (pypi-uri "devpi_server" version))
825 (sha256
826 (base32 "13lybrw8j6zjxwvx6sk7bw6854hd2m18s1xcvl0q100j4n06p6ml"))))
827 (build-system pyproject-build-system)
828 (arguments
829 (list
830 #:test-flags
831 ;; These all fail with: "module 'py' has no attribute 'io'"
832 #~(list "--ignore=test_devpi_server/test_importexport.py"
833 "--ignore=test_devpi_server/test_main.py"
834 "--ignore=test_devpi_server/test_genconfig.py")
835 #:phases
836 #~(modify-phases %standard-phases
837 (add-after 'unpack 'relax-requirements
838 (lambda _
839 (substitute* "pyproject.toml"
840 ;; It straggles to check argon2 in passlib on any versions
841 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
842 ;; such extra feature 'argon2'",).
843 (("passlib\\[argon2\\]") "passlib")))))))
844 (propagated-inputs (list python-argon2-cffi
845 python-attrs
846 python-defusedxml
847 python-devpi-common
848 python-httpx
849 python-itsdangerous
850 python-lazy
851 python-legacy-cgi
852 python-passlib
853 python-platformdirs
854 python-pluggy
855 python-py
856 python-pyramid
857 python-repoze-lru
858 python-ruamel.yaml-0.16 ;FIXME: rename
859 python-strictyaml
860 python-waitress))
861 (native-inputs
862 (list python-execnet
863 python-pytest
864 python-pytest-asyncio
865 python-pytest-timeout
866 python-setuptools
867 python-webtest))
868 (home-page "https://devpi.net")
869 (synopsis "Pypi.org caching server")
870 (description "This package implements a reliable private and pypi.org
871caching server.")
872 (license license:expat)))
873
874(define-public python-dicomweb-client
875 (package
876 (name "python-dicomweb-client")
877 (version "0.60.0")
878 (source
879 (origin
880 (method git-fetch)
881 (uri (git-reference
882 (url "https://github.com/ImagingDataCommons/dicomweb-client")
883 (commit (string-append "v" version))))
884 (file-name (git-file-name name version))
885 (sha256
886 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
887 (build-system pyproject-build-system)
888 (arguments
889 (list
890 #:phases
891 #~(modify-phases %standard-phases
892 (add-after 'unpack 'remove-dynamic-versioning
893 (lambda _
894 (substitute* "pyproject.toml"
895 ;; Dynamic versioning via 'uv-dynamic-versioning' is
896 ;; not suitable for Guix.
897 (("dynamic = \\[\"version\"\\]")
898 (string-append "version = \""
899 #$version "\""))))))))
900 (native-inputs
901 (list python-hatchling
902 python-pytest
903 python-pytest-localserver))
904 (propagated-inputs
905 (list python-numpy
906 python-pillow
907 python-pydicom
908 python-requests
909 python-retrying))
910 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
911 (synopsis "Python client for DICOMweb RESTful services")
912 (description
913 "@code{dicomweb_client} provides client interfaces for DICOMweb RESTful
914services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
915DICOM objects over the web, respectively.")
916 (license license:expat)))
917
918(define-public python-docusign-esign
919 (package
920 (name "python-docusign-esign")
921 (version "5.0.0")
922 (source
923 (origin
924 (method url-fetch)
925 (uri (pypi-uri "docusign-esign" version))
926 (sha256
927 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
928 (build-system pyproject-build-system)
929 ;; Testing requires undocumented setup changes with network access to
930 ;; <demo.docusign.net>, and so testing is disabled here.
931 (arguments `(#:tests? #f))
932 (native-inputs
933 (list python-setuptools
934 python-wheel))
935 (propagated-inputs
936 (list python-certifi
937 python-dateutil
938 python-urllib3
939 python-pyjwt
940 python-cryptography))
941 (home-page "https://developers.docusign.com/")
942 (synopsis "DocuSign Python Client")
943 (description
944 "The Official DocuSign Python Client Library used to interact with the
945eSign REST API. Send, sign, and approve documents using this client.")
946 (license license:expat)))
947
948(define-public python-domain-connect
949 (package
950 (name "python-domain-connect")
951 (version "0.0.11")
952 (source
953 (origin
954 (method git-fetch) ;no tests in PyPI archive
955 (uri (git-reference
956 (url "https://github.com/Domain-Connect/domainconnect_python")
957 (commit (string-append "v" version))))
958 (file-name (git-file-name name version))
959 (sha256
960 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
961 (build-system pyproject-build-system)
962 (arguments
963 (list
964 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
965 ;; present in container.
966 #:tests? #f
967 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
968 (native-inputs
969 (list python-setuptools))
970 (propagated-inputs
971 (list python-cryptography
972 python-dnspython
973 python-future
974 python-publicsuffixlist))
975 (home-page "https://github.com/Domain-Connect/domainconnect_python")
976 (synopsis "Client library for Domain Connect protocol")
977 (description
978 "This package provides a Service Provider functionality in both Sync and
979Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
980 (license license:expat)))
981
982(define-public python-domain-connect-dyndns
983 (package
984 (name "python-domain-connect-dyndns")
985 (version "0.0.9")
986 (source
987 (origin
988 (method url-fetch)
989 (uri (pypi-uri "domain-connect-dyndns" version))
990 (sha256
991 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
992 (build-system pyproject-build-system)
993 (arguments
994 (list
995 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
996 ;; present in container.
997 #:tests? #f
998 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
999 (native-inputs
1000 (list python-setuptools
1001 python-wheel))
1002 (propagated-inputs
1003 (list python-dnspython
1004 python-domain-connect
1005 python-requests
1006 python-validators))
1007 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
1008 (synopsis "Domain Connect Dynamic DNS in Python")
1009 ;; Project lacks meaningful description in README, see
1010 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
1011 (description
1012 "Python client library for Dynamic DNS using
1013@url{https://www.domainconnect.org/, Domain Connect} protocol.")
1014 (license license:expat)))
1015
1016(define-public python-dropbox
1017 (package
1018 (name "python-dropbox")
1019 (version "12.0.2")
1020 (source
1021 (origin
1022 (method git-fetch) ; no tests in PyPI release
1023 (uri (git-reference
1024 (url "https://github.com/dropbox/dropbox-sdk-python")
1025 (commit (string-append "v" version))))
1026 (file-name (git-file-name name version))
1027 (sha256
1028 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
1029 (build-system pyproject-build-system)
1030 (arguments
1031 (list
1032 #:test-flags
1033 #~(list "-k" (string-join
1034 ;; Network access is required.
1035 (list "not test_bad_auth"
1036 "test_app_auth"
1037 "test_bad_pins"
1038 "test_bad_pins_session"
1039 "test_downscope"
1040 "test_multi_auth"
1041 "test_path_root"
1042 "test_path_root_err"
1043 "test_refresh"
1044 "test_rpc"
1045 "test_team"
1046 "test_upload_download"
1047 "test_versioned_route")
1048 " and not "))
1049 #:phases
1050 #~(modify-phases %standard-phases
1051 (add-after 'unpack 'relax-requirements
1052 (lambda _
1053 (substitute* "setup.py"
1054 ;; 'stone>=2,<3.3.3',
1055 ((">=2,<3.3.3") ">=2,<3.4.0"))))
1056 (add-before 'check 'pre-check
1057 (lambda _
1058 ;; Otherwise tests setup erroring.
1059 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
1060 (setenv "LEGACY_USER_CLIENT_ID" "guix")
1061 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
1062 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
1063 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
1064 (setenv "SCOPED_USER_CLIENT_ID" "guix")
1065 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
1066 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
1067 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
1068 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
1069 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
1070 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
1071 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
1072 (native-inputs
1073 (list nss-certs-for-test
1074 python-mock
1075 python-pytest
1076 python-pytest-mock
1077 python-setuptools
1078 python-wheel))
1079 (propagated-inputs
1080 (list python-requests python-six python-stone))
1081 (home-page "https://www.dropbox.com/developers")
1082 (synopsis "Official Dropbox API Client")
1083 (description "This package provides a Python SDK for integrating with the
1084Dropbox API v2.")
1085 (license license:expat)))
1086
1087(define-public python-essentials-openapi
1088 (package
1089 (name "python-essentials-openapi")
1090 (version "1.2.1")
1091 (source
1092 (origin
1093 (method git-fetch)
1094 (uri (git-reference
1095 (url "https://github.com/Neoteroi/essentials-openapi")
1096 (commit (string-append "v" version))))
1097 (file-name (git-file-name name version))
1098 (sha256
1099 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
1100 (build-system pyproject-build-system)
1101 (native-inputs
1102 (list python-flask
1103 python-hatchling
1104 python-pydantic
1105 python-pytest
1106 python-rich))
1107 (propagated-inputs
1108 (list python-essentials
1109 python-httpx
1110 python-jinja2
1111 python-markupsafe
1112 python-pyyaml))
1113 (home-page "https://github.com/Neoteroi/essentials-openapi/")
1114 (synopsis "Generator for OpenAPI Documentation")
1115 (description
1116 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
1117formats. Generator for other kinds of documents from OpenAPI Documentation
1118files.")
1119 (license license:expat)))
1120
1121(define-public python-eventlet
1122 (package
1123 (name "python-eventlet")
1124 (version "0.40.4")
1125 (source
1126 (origin
1127 (method url-fetch)
1128 (uri (pypi-uri "eventlet" version))
1129 (sha256
1130 (base32
1131 "0vzjrb7n3x7gdrxiw4dacdxvz0m8saaw9w7n1n9v865yn49gggk9"))))
1132 (build-system pyproject-build-system)
1133 (arguments
1134 (list
1135 #:test-flags
1136 '(list "-k"
1137 (string-append
1138 "not TestGetaddrinfo"
1139 " and not TestProxyResolver"
1140 " and not test_noraise_dns_tcp"
1141 " and not test_raise_dns_tcp"
1142 " and not test_hosts_no_network"
1143 " and not test_import_rdtypes_then_eventlet"
1144 " and not test_patcher_existing_locks"
1145 " and not test_dns_methods_are_green"))
1146 #:phases
1147 #~(modify-phases %standard-phases
1148 (add-after 'unpack 'avoid-OSError
1149 (lambda _
1150 ;; If eventlet tries to load greendns, an OSError is thrown when
1151 ;; getprotobyname is called. Thankfully there is an environment
1152 ;; variable to disable the greendns import, so use it. Note that
1153 ;; this error is propagated to child packages too, so enforce the
1154 ;; changed default.
1155 (substitute* "eventlet/green/socket.py"
1156 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
1157 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")")))))))
1158 (native-inputs
1159 (list python-hatchling
1160 python-hatch-vcs
1161 python-pytest))
1162 (propagated-inputs
1163 (list python-dnspython python-greenlet))
1164 (home-page "https://eventlet.net")
1165 (synopsis "Concurrent networking library for Python")
1166 (description
1167 "Eventlet is a concurrent networking library for Python that
1168allows you to change how you run your code, not how you write it.
1169It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1170Coroutines ensure that the developer uses a blocking style of programming
1171that is similar to threading, but provide the benefits of non-blocking I/O.
1172The event dispatch is implicit, which means you can easily use @code{Eventlet}
1173from the Python interpreter, or as a small part of a larger application.
1174
1175Note: In Guix, this package assumes the environment variable
1176@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
1177to anything else.")
1178 (license license:expat)))
1179
1180(define-public python-feedgen
1181 (package
1182 (name "python-feedgen")
1183 (version "1.0.0")
1184 (source
1185 (origin
1186 (method git-fetch)
1187 (uri (git-reference
1188 (url "https://github.com/lkiesow/python-feedgen")
1189 (commit (string-append "v" version))))
1190 (file-name (git-file-name name version))
1191 (sha256
1192 (base32
1193 "1ppwxp9yck29pk2p2dlrrad6rz16l9h4fhcajp9yb7ns94fm5v3l"))))
1194 (build-system pyproject-build-system)
1195 (propagated-inputs
1196 (list python-dateutil
1197 python-lxml))
1198 (native-inputs
1199 (list python-pytest
1200 python-setuptools))
1201 (home-page "https://feedgen.kiesow.be")
1202 (synopsis "Atom and RSS feed generator")
1203 (description
1204 "This module can be used to generate web feeds in both Atom and RSS
1205format. It also extensible and comes with an extension to produce podcasts.")
1206 ;; The README says that this package is released under both licenses, and
1207 ;; permits the user to choose whichever is more convenient to them.
1208 (license (list license:bsd-2
1209 license:lgpl3+))))
1210
1211(define-public python-flask-caching
1212 (package
1213 (name "python-flask-caching")
1214 (version "2.3.1")
1215 (source
1216 (origin
1217 (method url-fetch)
1218 (uri (pypi-uri "flask_caching" version))
1219 (sha256
1220 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
1221 (build-system pyproject-build-system)
1222 (arguments
1223 (list
1224 #:test-flags
1225 ;; Tests requiring running Redis or dated python-cache.
1226 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
1227 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
1228 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
1229 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
1230 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
1231 "-k" "not test_client_override_reflected_on_cachelib_methods")))
1232 (native-inputs
1233 (list python-pytest
1234 python-pytest-asyncio
1235 python-pytest-xprocess
1236 python-setuptools))
1237 (propagated-inputs
1238 (list python-cachelib
1239 python-flask))
1240 (home-page "https://github.com/pallets-eco/flask-caching")
1241 (synopsis "Caching extension for Flask")
1242 (description
1243 "This package provides a caching support to Flask applications, it's a
1244fort ok https://github.com/thadeusb/flask-cache.")
1245 (license license:bsd-3)))
1246
1247(define-public python-flask-paginate
1248 (package
1249 (name "python-flask-paginate")
1250 (version "2024.4.12")
1251 (source
1252 (origin
1253 (method git-fetch)
1254 (uri (git-reference
1255 (url "https://github.com/lixxu/flask-paginate")
1256 (commit (string-append "v" version))))
1257 (file-name (git-file-name name version))
1258 (sha256
1259 (base32 "1q4ajwk0pzc6934g07gdryjcwi6rd9iqcwv5g5s718dfx2bj1831"))))
1260 (arguments
1261 (list #:test-backend #~'custom
1262 #:test-flags #~(list "tests/tests.py")))
1263 (build-system pyproject-build-system)
1264 (native-inputs
1265 (list python-pytest
1266 python-setuptools))
1267 (propagated-inputs
1268 (list python-flask))
1269 (home-page "https://github.com/lixxu/flask-paginate")
1270 (synopsis "Simple paginate support for Flask")
1271 (description
1272 "Flask-paginate is a simple pagination extension for Flask which is
1273inspired by Ruby's will_paginate library. It supports several CSS frameworks.")
1274 (license license:bsd-3)))
1275
1276(define-public python-flask-limiter
1277 (package
1278 (name "python-flask-limiter")
1279 (version "4.1.1")
1280 (source
1281 (origin
1282 (method git-fetch)
1283 (uri (git-reference
1284 (url "https://github.com/alisaifee/flask-limiter")
1285 (commit version)))
1286 (file-name (git-file-name name version))
1287 (sha256
1288 (base32 "18n12iayzw6qqys26824j5lfbphfcammpmyrvys1k0rn4xcbifln"))))
1289 (build-system pyproject-build-system)
1290 (arguments
1291 (list
1292 ;; tests: 155 passed, 620 deselected
1293 #:test-flags
1294 #~(list "-k" (simple-format #f "not (~a)"
1295 (string-join
1296 (append
1297 ;; The test suite spawns storages in Docker.
1298 '("memcache" "reset_unsupported")
1299 '("mongo")
1300 '("redis" "clear_limits"
1301 "constructor_arguments_over_config"
1302 "custom_key_prefix" "fallback_to_memory"))
1303 " or ")))
1304 #:phases
1305 #~(modify-phases %standard-phases
1306 (add-before 'check 'adjust-tests
1307 (lambda _
1308 (substitute* "pytest.ini"
1309 ((".*--cov=.*") ""))
1310 (substitute* (find-files "tests" "\\.py$")
1311 (("import pymemcache.*") "")
1312 (("import pymongo.*") "")
1313 (("import redis.*") "")))))))
1314 (native-inputs (list python-flask-restful
1315 python-hatch-vcs
1316 python-hatchling
1317 python-hiro
1318 python-pytest
1319 python-pytest-check
1320 python-pytest-mock))
1321 (propagated-inputs (list python-flask
1322 python-limits
1323 python-ordered-set
1324 python-rich))
1325 (home-page "https://flask-limiter.readthedocs.org/")
1326 (synopsis "Rate limiting for Flask applications")
1327 (description
1328 "Flask-Limiter adds rate limiting to Flask applications.
1329Rate limits can be configured at different levels such as:
1330
1331@itemize
1332@item Application wide global limits per user
1333@item Default limits per route
1334@item By blueprints
1335@item By class-based views
1336@item By individual routes
1337@end itemize")
1338 (license license:expat)))
1339
1340(define-public python-gdown
1341 (package
1342 (name "python-gdown")
1343 (version "5.2.0")
1344 (source
1345 (origin
1346 (method url-fetch)
1347 (uri (pypi-uri "gdown" version))
1348 (sha256
1349 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
1350 (build-system pyproject-build-system)
1351 (arguments (list #:tests? #f)) ;network access is required
1352 (native-inputs
1353 (list python-hatch-fancy-pypi-readme
1354 python-hatch-vcs
1355 python-hatchling))
1356 (propagated-inputs
1357 (list python-beautifulsoup4
1358 python-filelock
1359 python-requests
1360 python-tqdm))
1361 (home-page "https://github.com/wkentaro/gdown")
1362 (synopsis "Google Drive Public File/Folder Downloader")
1363 (description
1364 "This package implements a functionality to download large files
1365recursively from Google Drive with option to filter them by file
1366formats (PDF/XML/CSV).")
1367 (license license:expat)))
1368
1369(define-public python-globus-sdk
1370 (package
1371 (name "python-globus-sdk")
1372 (version "4.4.0")
1373 (source
1374 (origin
1375 (method git-fetch)
1376 (uri (git-reference
1377 (url "https://github.com/globus/globus-sdk-python")
1378 (commit version)))
1379 (file-name (git-file-name name version))
1380 (sha256
1381 (base32 "1d0zw9dkpdhsf9zdg3nk6b55gqwzc3v2rj76nj7999hjmq8350vh"))))
1382 (build-system pyproject-build-system)
1383 (arguments
1384 (list
1385 #:phases
1386 #~(modify-phases %standard-phases
1387 (add-before 'check 'pre-check
1388 (lambda _ (setenv "HOME" "/tmp"))))))
1389 (native-inputs
1390 (list python-flaky
1391 python-pytest
1392 python-pytest-randomly
1393 python-responses
1394 python-setuptools))
1395 (propagated-inputs
1396 (list python-cryptography
1397 python-importlib-resources
1398 python-pyjwt
1399 python-requests))
1400 (home-page "https://github.com/globus/globus-sdk-python")
1401 (synopsis "Globus SDK for Python")
1402 (description
1403 "This package provides a SDK for convenient Pythonic interface to
1404@url{https://www.globus.org/, Globus} APIs.")
1405 (license license:asl2.0)))
1406
1407(define-public python-guardpost
1408 (package
1409 (name "python-guardpost")
1410 (version "1.0.4")
1411 (source
1412 (origin
1413 (method git-fetch)
1414 (uri (git-reference
1415 (url "https://github.com/Neoteroi/guardpost")
1416 (commit (string-append "v" version))))
1417 (file-name (git-file-name name version))
1418 (sha256
1419 (base32 "1xsakqn36g2h1s5rnbaf1lasx1jn4skqhmb8kdl1k4pgxp5sczyy"))))
1420 (build-system pyproject-build-system)
1421 (arguments
1422 (list
1423 ;; Possible timing issue, see:
1424 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
1425 #:test-flags '(list "--ignore=tests/test_jwts.py")))
1426 (native-inputs
1427 (list python-flask
1428 python-hatchling
1429 python-pytest
1430 python-pytest-asyncio))
1431 (propagated-inputs
1432 (list python-rodi
1433 ;; [optional]
1434 python-cryptography
1435 python-essentials
1436 python-pyjwt))
1437 (home-page "https://github.com/Neoteroi/GuardPost/")
1438 (synopsis
1439 "Authentication and authorization framework for Python applications")
1440 (description
1441 "GuardPost is a framework to handle authentication and
1442authorization in asynchronous Python applications.
1443
1444Its features include
1445
1446@itemize
1447@item Strategy to implement authentication.
1448@item Strategy to implement authorization.
1449@item Support for dependency injection
1450@item Built-in support for JSON Web Tokens (JWTs) authentication.
1451@end itemize")
1452 (license license:expat)))
1453
1454(define-public python-hookdns
1455 (package
1456 (name "python-hookdns")
1457 (version "2.0.0")
1458 (source
1459 (origin
1460 (method url-fetch)
1461 (uri (pypi-uri "hookdns" version))
1462 (sha256
1463 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
1464 (build-system pyproject-build-system)
1465 (arguments
1466 (list
1467 #:test-flags
1468 #~(list "-k" (string-join
1469 ;; Tests requiring networking.
1470 (list
1471 "not test_patch_contextmanager_with_another_hostname"
1472 "test_patch_contextmanager_with_another_hostname_ipv6"
1473 "test_patch_contextmanager_with_ipv4"
1474 "test_patch_contextmanager_with_name"
1475 "test_patch_contextmanager_with_public_fqdn_and_"
1476 "test_patch_contextmanager_with_unknown_hostname"
1477 "test_patch_decorator_with_another_hostname"
1478 "test_patch_decorator_with_another_hostname_ipv6"
1479 "test_patch_decorator_with_ipv4"
1480 "test_patch_decorator_with_name"
1481 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
1482 "test_patch_decorator_with_unknown_hostname"
1483 "test_real_getaddrinfo_with_name_ipv6"
1484 "test_real_getaddrinfo_with_public_fqdn_ipv4"
1485 "test_real_getaddrinfo_with_public_fqdn_ipv6"
1486 "test_real_gethostbyname_ex_with_public_fqdn"
1487 "test_real_gethostbyname_with_public_fqdn"
1488 "test_real_requests_ip"
1489 "test_real_requests_name"
1490 "test_real_requests_with_public_fqdn"
1491 "test_reentrant")
1492 " and not "))))
1493 (native-inputs
1494 (list python-pytest
1495 python-requests
1496 python-setuptools
1497 python-wheel))
1498 (home-page "https://github.com/cle-b/hookdns")
1499 (synopsis "DNS resolution customization library")
1500 (description
1501 "HookDNS implements functionality that allows for modifying name
1502resolution in a Python script without any changes to the hosts file or the use
1503of a fake DNS resolver.")
1504 (license license:asl2.0)))
1505
1506(define-public python-httpretty
1507 (package
1508 (name "python-httpretty")
1509 (version "1.1.4")
1510 (source
1511 (origin
1512 (method url-fetch)
1513 (uri (pypi-uri "httpretty" version))
1514 (sha256
1515 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
1516 (build-system pyproject-build-system)
1517 (arguments
1518 (list
1519 #:test-flags
1520 ;; Only run Unit tests.
1521 #~(list "--ignore=tests/bugfixes"
1522 "--ignore=tests/functional"
1523 "--ignore=tests/pyopenssl"
1524 "-k" (string-join
1525 ;; Tests pattern failing with one of these errors:
1526 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
1527 ;; has no attribute 'should'
1528 ;; AttributeError: 'function' object has no attribute
1529 ;; 'when'
1530 ;; AttributeError: 'AssertionBuilder' object has no
1531 ;; attribute 'should_not'
1532 (list "not fake_socket_passes_through"
1533 "fakesock_socket"
1534 "request_parse_body_when"
1535 "test_Entry_class_normalizes_headers"
1536 "test_has_request"
1537 "test_httpretty_should_raise_proper"
1538 "test_parse_request_line_connect"
1539 "test_request_parse_querystring"
1540 "test_request_string_representation"
1541 "test_request_stubs_internals")
1542 " and not "))))
1543 (native-inputs
1544 (list nss-certs-for-test
1545 python-freezegun
1546 python-mock
1547 python-pytest
1548 python-setuptools
1549 python-sure
1550 python-wheel))
1551 (home-page "https://httpretty.readthedocs.io")
1552 (synopsis "HTTP client mock for Python")
1553 (description
1554 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
1555@code{fakeweb}.")
1556 (license license:expat)))
1557
1558(define-public python-justhtml
1559 (package
1560 (name "python-justhtml")
1561 (version "1.13.0")
1562 (source
1563 (origin
1564 (method git-fetch)
1565 (uri (git-reference
1566 (url "https://github.com/emilstenstrom/justhtml")
1567 (commit (string-append "v" version))))
1568 (file-name (git-file-name name version))
1569 (sha256
1570 (base32 "1hy5w3lr08sj3pivs46nnlfsvrd9ynmicxcrjk4sxbpg7411lyj5"))))
1571 (build-system pyproject-build-system)
1572 (native-inputs
1573 (list python-hatchling))
1574 (home-page "https://github.com/emilstenstrom/justhtml")
1575 (synopsis "Pure Python HTML5 parser")
1576 (description
1577 "JustHTML is a pure Python HTML5 parser. It has a simple API and does
1578not require C extensions or system dependencies.")
1579 (license license:expat)))
1580
1581(define-public python-huggingface-hub
1582 (package
1583 (name "python-huggingface-hub")
1584 (version "0.31.4")
1585 (source
1586 (origin
1587 (method git-fetch)
1588 (uri (git-reference
1589 (url "https://github.com/huggingface/huggingface_hub")
1590 (commit (string-append "v" version))))
1591 (file-name (git-file-name name version))
1592 (sha256
1593 (base32 "1rjkrmvvyzxlbnbndrg4v9qq39grn46c26zrdjgpf114gci5pwap"))))
1594 (build-system pyproject-build-system)
1595 (arguments
1596 (list
1597 #:test-flags
1598 ;; We don't have sentence_transformers...
1599 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
1600 ;; ...nor do we have InquirerPy...
1601 "--ignore=tests/test_command_delete_cache.py"
1602 ;; ...or timm...
1603 "--ignore=contrib/timm/test_timm.py"
1604 ;; ...or spacy_huggingface_hub
1605 "--ignore=contrib/spacy/test_spacy.py"
1606 ;; These all require internet access
1607 "--ignore=tests/test_cache_no_symlinks.py"
1608 "--ignore=tests/test_cache_layout.py"
1609 "--ignore=tests/test_commit_scheduler.py"
1610 "--ignore=tests/test_file_download.py"
1611 "--ignore=tests/test_hf_api.py"
1612 "--ignore=tests/test_hf_file_system.py"
1613 "--ignore=tests/test_inference_api.py"
1614 "--ignore=tests/test_inference_async_client.py"
1615 "--ignore=tests/test_inference_client.py"
1616 "--ignore=tests/test_inference_text_generation.py"
1617 "--ignore=tests/test_login_utils.py"
1618 "--ignore=tests/test_offline_utils.py"
1619 "--ignore=tests/test_repocard.py"
1620 "--ignore=tests/test_repository.py"
1621 "--ignore=tests/test_snapshot_download.py"
1622 "--ignore=tests/test_utils_cache.py"
1623 "--ignore=tests/test_utils_git_credentials.py"
1624 "--ignore=tests/test_utils_http.py"
1625 "--ignore=tests/test_utils_pagination.py"
1626 "--ignore=tests/test_webhooks_server.py"
1627 "-k" (string-append
1628 "not test_push_to_hub"
1629 " and not test_from_pretrained_model_id_only"
1630 " and not test_from_pretrained_model_id_and_revision"
1631 ;; These all require internet access
1632 " and not test_auth"
1633 " and not test_oauth"
1634 " and not test_utils_sha"
1635 " and not test_inference_providers"
1636 " and not test_xet"))
1637 #:phases
1638 '(modify-phases %standard-phases
1639 (add-before 'check 'pre-check
1640 ;; Some tests need to write to HOME.
1641 (lambda _ (setenv "HOME" "/tmp"))))))
1642 (propagated-inputs
1643 (list python-filelock
1644 python-fsspec
1645 python-packaging
1646 python-pyyaml
1647 python-requests
1648 python-tqdm
1649 python-typing-extensions))
1650 (native-inputs
1651 (list python-aiohttp
1652 python-fastapi
1653 python-jedi
1654 python-jinja2
1655 python-numpy
1656 python-pillow
1657 python-pydantic
1658 python-pytest
1659 python-pytest-asyncio
1660 python-pytest-cov
1661 python-pytest-env
1662 python-pytest-mock
1663 python-pytest-rerunfailures
1664 python-pytest-vcr
1665 python-pytest-xdist
1666 python-setuptools
1667 python-types-requests
1668 python-types-toml
1669 python-types-urllib3
1670 python-typing-extensions
1671 python-urllib3
1672 python-wheel))
1673 (home-page "https://huggingface.co/docs/huggingface_hub/")
1674 (synopsis "Client library for accessing the huggingface.co hub")
1675 (description
1676 "This package provides a client library to download and publish models,
1677datasets and other repos on the @url{huggingface.co} hub.")
1678 (license license:asl2.0)))
1679
1680(define-public python-kubernetes
1681 (package
1682 (name "python-kubernetes")
1683 (version "35.0.0")
1684 (source
1685 (origin
1686 (method url-fetch)
1687 (uri (pypi-uri "kubernetes" version))
1688 (sha256
1689 (base32 "1vh9bzq175fzv9av3v37lcfh37yzss2d9vxrb0a84fa2ji2d601x"))))
1690 (build-system pyproject-build-system)
1691 (arguments
1692 (list
1693 #:test-flags
1694 #~(list
1695 ;; The following tests expect a local running Kubernetes cluster.
1696 "--ignore=kubernetes/e2e_test"
1697 "--ignore=kubernetes/dynamic")))
1698 (native-inputs
1699 (list python-pytest
1700 python-setuptools))
1701 (propagated-inputs
1702 (list python-certifi
1703 python-dateutil
1704 python-durationpy
1705 python-google-auth
1706 python-pyyaml
1707 python-requests
1708 python-requests-oauthlib
1709 python-six ;XXX: hard dependency
1710 python-urllib3
1711 python-websocket-client))
1712 (home-page "https://github.com/kubernetes-client/python")
1713 (synopsis "Python client for Kubernetes")
1714 (description
1715 "This package provides an official Python client library for
1716@url{http://kubernetes.io, Kubernetes}.")
1717 (license license:asl2.0)))
1718
1719(define-public python-lazr-restfulclient
1720 (package
1721 (name "python-lazr-restfulclient")
1722 (version "0.14.6")
1723 (source
1724 (origin
1725 (method url-fetch)
1726 (uri (pypi-uri "lazr.restfulclient" version))
1727 (sha256
1728 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
1729 (build-system pyproject-build-system)
1730 (arguments
1731 (list
1732 #:phases
1733 #~(modify-phases %standard-phases
1734 ;; Disable part of the test suite to avoid the lazr.authentication
1735 ;; requirement, which requires 'oauth', a Python 2 only library.
1736 (add-after 'unpack 'remove-some-checks
1737 (lambda _
1738 (with-directory-excursion "src/lazr/restfulclient/tests"
1739 (for-each delete-file '("test_oauth.py" "test_docs.py")))
1740 (substitute* "setup.py"
1741 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
1742 ""))))
1743 (replace 'check
1744 (lambda* (#:key tests? #:allow-other-keys)
1745 (if tests?
1746 (invoke "zope-testrunner" "--test-path=src")
1747 (format #t "test suite not run~%")))))))
1748 (native-inputs
1749 (list python-setuptools
1750 python-testtools
1751 python-wheel
1752 python-wsgi-intercept
1753 python-zope-testrunner))
1754 (propagated-inputs
1755 (list python-distro
1756 python-httplib2
1757 python-oauthlib
1758 python-pyparsing
1759 python-setuptools
1760 python-six
1761 python-wadllib))
1762 (home-page "https://launchpad.net/lazr.restfulclient")
1763 (synopsis "Web client Python library extending wadlib")
1764 (description "This package provides a programmable client library that
1765adds functionality on top of @code{wadlib}.")
1766 (license license:lgpl3+)))
1767
1768(define-public python-launchpadlib
1769 (package
1770 (name "python-launchpadlib")
1771 (version "2.1.0")
1772 (source
1773 (origin
1774 (method url-fetch)
1775 (uri (pypi-uri "launchpadlib" version))
1776 (sha256
1777 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
1778 (build-system pyproject-build-system)
1779 (arguments
1780 (list #:phases #~(modify-phases %standard-phases
1781 (add-before 'check 'set-home
1782 (lambda _
1783 ;; Tests require a writable home.
1784 (setenv "HOME" "/tmp"))))))
1785 (propagated-inputs
1786 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
1787 (native-inputs (list python-pytest python-testresources python-wadllib
1788 python-setuptools python-wheel))
1789 (home-page "https://documentation.ubuntu.com/launchpad")
1790 (synopsis "Python client library for Launchpad's web service")
1791 (description "@code{launchpadlib} is a Python library that allows
1792scripting Launchpad via its the web service API.")
1793 (license license:lgpl3+)))
1794
1795(define-public python-lazr-uri
1796 (package
1797 (name "python-lazr-uri")
1798 (version "1.0.7")
1799 (source
1800 (origin
1801 (method url-fetch)
1802 (uri (pypi-uri "lazr_uri" version))
1803 (sha256
1804 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
1805 (build-system pyproject-build-system)
1806 (arguments
1807 (list
1808 #:phases
1809 #~(modify-phases %standard-phases
1810 (replace 'check
1811 (lambda* (#:key tests? #:allow-other-keys)
1812 (if tests?
1813 (invoke "zope-testrunner" "--test-path=src")
1814 (format #t "test suite not run~%")))))))
1815 (native-inputs (list python-setuptools python-zope-testrunner))
1816 (home-page "https://launchpad.net/lazr.uri")
1817 (synopsis "Python URI manipulation library")
1818 (description "This Python package provides a self-contained, easily
1819reusable library for parsing, manipulating, and generating URIs.")
1820 (license license:lgpl3)))
1821
1822(define-public python-ldaptor
1823 (package
1824 (name "python-ldaptor")
1825 (version "21.2.0")
1826 (source
1827 (origin
1828 (method url-fetch)
1829 (uri (pypi-uri "ldaptor" version))
1830 (sha256
1831 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
1832 (build-system pyproject-build-system)
1833 (arguments
1834 (list
1835 #:test-flags
1836 #~(list "-m" "twisted.trial"
1837 (string-append "-j" (number->string (parallel-job-count)))
1838 "ldaptor")
1839 #:phases
1840 #~(modify-phases %standard-phases
1841 (add-before 'check 'disable-failing-tests
1842 (lambda _
1843 ;; Testing with Twisted 22.4 results in infinite loop creating
1844 ;; temporary config files, see
1845 ;; <https://github.com/twisted/ldaptor/issues/238>.
1846 (delete-file "ldaptor/test/test_config.py")))
1847 (replace 'check
1848 (lambda* (#:key tests? test-flags #:allow-other-keys)
1849 (when tests?
1850 (apply invoke "python" test-flags)))))))
1851 (native-inputs
1852 (list python-setuptools
1853 python-wheel))
1854 (propagated-inputs
1855 (list python-passlib
1856 python-pyopenssl
1857 python-service-identity ; to pass sanity check, for Twisted[tls]
1858 python-pyparsing
1859 python-twisted
1860 python-zope-interface))
1861 (home-page "https://github.com/twisted/ldaptor")
1862 (synopsis "Pure-Python Twisted library for LDAP")
1863 (description
1864 "This package provides a Python Twisted library for LDAP, which key
1865feaatures are:
1866@itemize
1867@item LDAP client logic
1868@item separately-accessible LDAP and BER protocol message generation/parsing
1869@item ASCII-format LDAP filter generation and parsing
1870@item LDIF format data generation
1871@item Samba password changing logic
1872@end itemize")
1873 (license license:expat)))
1874
1875(define-public python-legacy-cgi
1876 (package
1877 (name "python-legacy-cgi")
1878 (version "2.6.1")
1879 (source
1880 (origin
1881 (method url-fetch)
1882 (uri (pypi-uri "legacy_cgi" version))
1883 (sha256
1884 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
1885 (build-system pyproject-build-system)
1886 (native-inputs (list python-poetry-core python-pytest))
1887 (home-page "https://github.com/jackrosenthal/legacy-cgi")
1888 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
1889 (description
1890 "This is a fork of the standard library modules @code{cgi} and
1891@code{cgitb}. They are slated to be removed from the Python standard library
1892in Python 3.13 by PEP-594.")
1893 (license license:psfl)))
1894
1895(define-public python-librouteros
1896 (package
1897 (name "python-librouteros")
1898 (version "4.0.0")
1899 (source
1900 (origin
1901 (method git-fetch)
1902 (uri (git-reference
1903 (url "https://github.com/luqasz/librouteros")
1904 (commit version)))
1905 (file-name (git-file-name name version))
1906 (sha256
1907 (base32 "0in952b2idb5j8v6sxfm21gqbr5i5776w5ir0hdsxjrl2f29305v"))))
1908 (build-system pyproject-build-system)
1909 (arguments
1910 (list
1911 #:build-backend "hatchling.build"
1912 #:test-flags
1913 #~(list "tests/unit")))
1914 (native-inputs
1915 (list python-hatchling
1916 python-pytest
1917 python-pytest-asyncio
1918 python-stamina))
1919 (home-page "https://github.com/luqasz/librouteros")
1920 (synopsis "Python implementation of MikroTik RouterOS API")
1921 (description
1922 "This package implements MikroTik's @code{RouterOS} API.")
1923 (license license:gpl2+)))
1924
1925(define-public python-opentelemetry-api
1926 (package
1927 (name "python-opentelemetry-api")
1928 (version "1.37.0")
1929 (source
1930 (origin
1931 (method url-fetch)
1932 (uri (pypi-uri "opentelemetry_api" version))
1933 (sha256
1934 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
1935 (build-system pyproject-build-system)
1936 (propagated-inputs (list python-importlib-metadata
1937 python-typing-extensions))
1938 (native-inputs (list python-hatchling
1939 python-opentelemetry-test-utils-bootstrap))
1940 (home-page "https://opentelemetry.io/docs/languages/python/")
1941 (synopsis "OpenTelemetry Python API")
1942 (description "@code{OpenTelemetry} Python API.")
1943 (license license:asl2.0)))
1944
1945(define-public python-opentelemetry-api-bootstrap
1946 (hidden-package
1947 (package/inherit python-opentelemetry-api
1948 (name "python-opentelemetry-api-bootstrap")
1949 (arguments
1950 (list
1951 #:tests? #f))
1952 (native-inputs (list python-hatchling)))))
1953
1954(define-public python-opentelemetry-sdk
1955 (package
1956 (name "python-opentelemetry-sdk")
1957 (version "1.37.0")
1958 (source
1959 (origin
1960 (method url-fetch)
1961 (uri (pypi-uri "opentelemetry_sdk" version))
1962 (sha256
1963 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
1964 (build-system pyproject-build-system)
1965 (propagated-inputs (list python-opentelemetry-api
1966 python-opentelemetry-semantic-conventions
1967 python-typing-extensions))
1968 (native-inputs (list python-hatchling
1969 python-opentelemetry-test-utils-bootstrap
1970 python-pytest))
1971 (home-page "https://opentelemetry.io/docs/languages/python/")
1972 (synopsis "OpenTelemetry Python SDK")
1973 (description "@code{OpenTelemetry} Python SDK.")
1974 (license license:asl2.0)))
1975
1976(define-public python-opentelemetry-sdk-bootstrap
1977 (hidden-package
1978 (package/inherit python-opentelemetry-sdk
1979 (name "python-opentelemetry-sdk-bootstrap")
1980 (arguments (list #:tests? #f))
1981 (propagated-inputs (list python-opentelemetry-api-bootstrap
1982 python-opentelemetry-semantic-conventions-bootstrap))
1983 (native-inputs (list python-hatchling)))))
1984
1985(define-public python-opentelemetry-semantic-conventions
1986 (package
1987 (name "python-opentelemetry-semantic-conventions")
1988 (version "0.58b0")
1989 (source
1990 (origin
1991 (method url-fetch)
1992 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
1993 (sha256
1994 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
1995 (build-system pyproject-build-system)
1996 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
1997 (native-inputs (list python-hatchling))
1998 (home-page "https://opentelemetry.io/docs/languages/python/")
1999 (synopsis "OpenTelemetry Semantic Conventions")
2000 (description "@code{OpenTelemetry} Semantic Conventions.")
2001 (license license:asl2.0)))
2002
2003(define-public python-opentelemetry-semantic-conventions-bootstrap
2004 (hidden-package
2005 (package/inherit python-opentelemetry-semantic-conventions
2006 (name "python-opentelemetry-semantic-conventions-bootstrap")
2007 (arguments
2008 (list
2009 #:tests? #f))
2010 (propagated-inputs (list python-opentelemetry-api-bootstrap
2011 python-typing-extensions)))))
2012
2013(define-public python-opentelemetry-test-utils
2014 (package
2015 (name "python-opentelemetry-test-utils")
2016 (version "0.58b0")
2017 (source
2018 (origin
2019 (method url-fetch)
2020 (uri (pypi-uri "opentelemetry_test_utils" version))
2021 (sha256
2022 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
2023 (build-system pyproject-build-system)
2024 (propagated-inputs (list python-asgiref python-opentelemetry-api
2025 python-opentelemetry-sdk))
2026 (native-inputs (list python-hatchling))
2027 (home-page "https://opentelemetry.io/docs/languages/python/")
2028 (synopsis "Test utilities for OpenTelemetry unit tests")
2029 (description "Test utilities for @code{OpenTelemetry} unit tests.")
2030 (license license:asl2.0)))
2031
2032(define-public python-opentelemetry-test-utils-bootstrap
2033 (hidden-package
2034 (package/inherit python-opentelemetry-test-utils
2035 (name "python-opentelemetry-test-utils-bootstrap")
2036 (arguments
2037 (list
2038 #:tests? #f))
2039 (propagated-inputs (list python-asgiref
2040 python-opentelemetry-api-bootstrap
2041 python-opentelemetry-sdk-bootstrap))
2042 (native-inputs (list python-hatchling)))))
2043
2044(define-public python-pathy
2045 (package
2046 (name "python-pathy")
2047 (version "0.11.0")
2048 (source
2049 (origin
2050 (method url-fetch)
2051 (uri (pypi-uri "pathy" version))
2052 (sha256
2053 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
2054 (build-system pyproject-build-system)
2055 (native-inputs
2056 (list python-mock
2057 python-pytest
2058 python-setuptools))
2059 (propagated-inputs
2060 (list python-pathlib-abc-for-python-pathy
2061 python-smart-open-6
2062 python-typer))
2063 (home-page "https://github.com/justindujardin/pathy")
2064 (synopsis "Path interface for local and cloud bucket storage")
2065 (description "Pathy is a python package (with type annotations) for
2066working with Cloud Bucket storage providers using a @code{pathlib} interface.
2067It provides @code{pathlib.Path} subclasses for local and cloud bucket
2068storage.")
2069 (license license:asl2.0)))
2070
2071(define-public python-portend
2072 (package
2073 (name "python-portend")
2074 (version "3.2.1")
2075 (source
2076 (origin
2077 (method url-fetch)
2078 (uri (pypi-uri "portend" version))
2079 (sha256
2080 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
2081 (build-system pyproject-build-system)
2082 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
2083 ;; download dependencies.
2084 (arguments
2085 '(#:test-flags '("-k" "not project")))
2086 (native-inputs
2087 (list python-pytest
2088 python-setuptools
2089 python-setuptools-scm))
2090 (propagated-inputs
2091 (list python-tempora))
2092 (home-page "https://github.com/jaraco/portend")
2093 (synopsis "Monitor TCP ports for bound or unbound states")
2094 (description
2095 "@code{python-portend} can be used to monitor TCP ports for bound or
2096unbound states. For example, waiting for a port to be occupied or freed
2097within a set timeout. @code{python-portend} can also be used directly from
2098the command line.")
2099 (license license:expat)))
2100
2101(define-public python-prawcore
2102 (package
2103 (name "python-prawcore")
2104 (version "2.4.0")
2105 (source
2106 (origin
2107 (method git-fetch)
2108 (uri (git-reference
2109 (url "https://github.com/praw-dev/prawcore")
2110 (commit (string-append "v" version))))
2111 (file-name (git-file-name name version))
2112 (sha256
2113 (base32 "1y7gh7kk002b2h1ppkr1llb2gjfnby28zvx11j4ji0wm3r3rjh5l"))))
2114 (build-system pyproject-build-system)
2115 (arguments
2116 ;; XXX: These tests fail with an incomplete request response.
2117 (list #:test-flags
2118 #~'("-k" #$(string-append
2119 "not test_revoke__access_token_with_refresh_set"
2120 " and not test_revoke__access_token_without_refresh_set"
2121 " and not test_revoke__refresh_token_with_access_set"
2122 " and not test_refresh__with_scopes"
2123 " and not test_request__patch"))))
2124 (native-inputs
2125 (list python-betamax
2126 python-betamax-matchers
2127 python-betamax-serializers
2128 python-flit-core
2129 python-mock
2130 python-pytest
2131 python-testfixtures))
2132 (propagated-inputs
2133 (list python-requests))
2134 (synopsis "Core component of PRAW")
2135 (description "PRAWcore is a low-level communication layer used by PRAW.")
2136 (home-page "https://praw.readthedocs.io/en/latest/")
2137 (license license:bsd-2)))
2138
2139(define-public python-praw
2140 (package
2141 (name "python-praw")
2142 (version "7.8.1")
2143 (source
2144 (origin
2145 (method git-fetch)
2146 (uri (git-reference
2147 (url "https://github.com/praw-dev/praw")
2148 (commit (string-append "v" version))))
2149 (file-name (git-file-name name version))
2150 (sha256
2151 (base32 "05qq43l4334cq8r8k731qnb45nq12vvfdxwbr6q84a1hafp7n4cg"))))
2152 (build-system pyproject-build-system)
2153 (arguments
2154 (list #:test-flags
2155 #~(list "--ignore=tests/units/models"
2156 "--ignore=tests/integration/models"
2157 "--ignore=tests/unit/test_config.py"
2158 "--ignore=tests/integration/test_reddit.py")))
2159 (native-inputs
2160 (list python-betamax
2161 python-betamax-matchers
2162 python-flit-core
2163 python-pytest))
2164 (propagated-inputs
2165 (list python-prawcore python-update-checker python-websocket-client))
2166 (synopsis "Python Reddit API Wrapper")
2167 (description "PRAW is a Python package that allows for simple access to
2168Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
2169API rules.")
2170 (home-page "https://praw.readthedocs.io/en/latest/")
2171 (license license:bsd-2)))
2172
2173(define-public python-frozenlist
2174 (package
2175 (name "python-frozenlist")
2176 (version "1.8.0")
2177 (source
2178 (origin
2179 (method git-fetch)
2180 (uri (git-reference
2181 (url "https://github.com/aio-libs/frozenlist")
2182 (commit (string-append "v" version))))
2183 (file-name (git-file-name name version))
2184 (sha256
2185 (base32 "0r1kxf5b562zrn04nl912i6a8y1fyc891l1284v0zj9llb97limy"))))
2186 ;; XXX: Without "wheel", the 'install phase can't find the wheel.
2187 (outputs (list "out" "wheel"))
2188 (build-system pyproject-build-system)
2189 ;; The configuration contains explicit calls to pytest_cov.
2190 (arguments (list #:test-flags #~(list "-c" "/dev/null")))
2191 (native-inputs
2192 (list python-cython
2193 python-expandvars
2194 python-pytest
2195 python-setuptools
2196 python-tomli))
2197 (home-page "https://github.com/aio-libs/frozenlist")
2198 (synopsis "List-like data structure for Python")
2199 (description "@code{frozenlist.FrozenList} is a list-like structure which
2200implements @code{collections.abc.MutableSequence}. It can be made immutable
2201by calling @code{FrozenList.freeze}.")
2202 (license license:asl2.0)))
2203
2204(define-public python-aiobotocore
2205 (package
2206 (name "python-aiobotocore")
2207 (version "3.0.0")
2208 (source
2209 (origin
2210 (method url-fetch)
2211 (uri (pypi-uri "aiobotocore" version))
2212 (sha256
2213 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
2214 (build-system pyproject-build-system)
2215 (arguments
2216 ;; TODO: Tests need some setupt, see Makefile.
2217 (list #:tests? #f))
2218 (native-inputs
2219 (list python-setuptools))
2220 (propagated-inputs
2221 (list python-aiohttp
2222 python-aioitertools
2223 python-botocore
2224 python-dateutil
2225 python-jmespath
2226 python-multidict
2227 python-typing-extensions
2228 python-wrapt))
2229 (home-page "https://github.com/aio-libs/aiobotocore")
2230 (synopsis "Async client for AWS services using botocore and aiohttp")
2231 (description "This package provides an async client for Amazon services
2232using botocore and aiohttp/asyncio. This library is a mostly full featured
2233asynchronous version of botocore.")
2234 (license license:asl2.0)))
2235
2236(define-public python-aiohappyeyeballs
2237 (package
2238 (name "python-aiohappyeyeballs")
2239 (version "2.6.1")
2240 (source
2241 (origin
2242 (method url-fetch)
2243 (uri (pypi-uri "aiohappyeyeballs" version))
2244 (sha256
2245 (base32 "0n1mjip846fprc34ik6if9m8xisva2m0ygyzvz53r013648x1yf3"))))
2246 (build-system pyproject-build-system)
2247 (native-inputs
2248 (list python-poetry-core
2249 python-pytest
2250 python-pytest-asyncio-0.26
2251 python-pytest-cov))
2252 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
2253 (synopsis "Happy Eyeballs for asyncio")
2254 (description "This library exists to allow connecting with Happy
2255Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
2256DNS name.")
2257 (license license:psfl)))
2258
2259(define-public python-aioitertools
2260 (package
2261 (name "python-aioitertools")
2262 (version "0.12.0")
2263 (source
2264 (origin
2265 (method url-fetch)
2266 (uri (pypi-uri "aioitertools" version))
2267 (sha256
2268 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
2269 (build-system pyproject-build-system)
2270 (arguments
2271 (list #:test-backend #~'custom
2272 #:test-flags #~(list "-m" "aioitertools.tests")))
2273 (native-inputs
2274 (list python-flit-core))
2275 (home-page "https://pypi.org/project/aioitertools/")
2276 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
2277 (description
2278 "This package provides an implementation of itertools, builtins, and more
2279for AsyncIO and mixed-type iterables.")
2280 (license license:expat)))
2281
2282(define-public python-aiosignal
2283 (package
2284 (name "python-aiosignal")
2285 (version "1.4.0")
2286 (source
2287 (origin
2288 (method url-fetch)
2289 (uri (pypi-uri "aiosignal" version))
2290 (sha256
2291 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
2292 (build-system pyproject-build-system)
2293 (native-inputs
2294 (list python-pytest
2295 python-pytest-asyncio
2296 python-pytest-cov
2297 python-setuptools
2298 python-wheel))
2299 (propagated-inputs
2300 (list python-frozenlist))
2301 (home-page "https://github.com/aio-libs/aiosignal")
2302 (synopsis "Callback manager for Python @code{asyncio} projects")
2303 (description "This Python module provides @code{Signal}, an abstraction to
2304register asynchronous callbacks. The @code{Signal} abstraction can be used
2305for adding, removing and dropping callbacks.")
2306 (license license:asl2.0)))
2307
2308(define-public python-aiohttp
2309 (package
2310 (name "python-aiohttp")
2311 ;; TODO: Newer versions require zlib-ng:
2312 ;; <https://github.com/zlib-ng/zlib-ng>,
2313 ;; <https://github.com/pycompression/python-zlib-ng>.
2314 (version "3.11.18")
2315 (source
2316 (origin
2317 (method url-fetch)
2318 (uri (pypi-uri "aiohttp" version))
2319 (sha256
2320 (base32 "12jmkxkc5nnk6ma6m7rrs0w4vzswfc47ffxn5m0pwav1708nx1df"))
2321 (snippet
2322 #~(begin
2323 (use-modules ((guix build utils)))
2324 ;; TODO: Unbundle the llhttp sources.
2325 ;; (delete-file-recursively "vendor")
2326 (delete-file "aiohttp/_http_parser.c")
2327 (delete-file "aiohttp/_http_writer.c")))))
2328 (build-system pyproject-build-system)
2329 (arguments
2330 (list
2331 ;; tests: 3045 passed, 32 skipped, 29 xfailed, 2 subtests passed
2332 #:test-flags
2333 '(list
2334 "--numprocesses" (number->string (parallel-job-count))
2335 ;; This tests requires the 'proxy.py' module, not yet packaged.
2336 "--ignore=tests/test_proxy_functional.py"
2337 ;; These tests need brotli.
2338 "--ignore=tests/test_web_sendfile_functional.py"
2339 "--ignore=tests/test_web_functional.py"
2340 ;; These tests need pytest_codspeed
2341 "--ignore-glob=tests/test_benchmarks*"
2342 ;; These tests need python_on_whales
2343 "--ignore=tests/autobahn/test_autobahn.py"
2344 "-k"
2345 ;; These tests fail for unknown reasons (see:
2346 ;; https://github.com/aio-libs/aiohttp/issues/7130)
2347 (string-append
2348 "not test_no_warnings "
2349 "and not test_default_loop "
2350 "and not test_ctor_global_loop "
2351 "and not test_set_loop_default_loop "
2352
2353 ;; Disable brotli tests, because we’re not providing that optional
2354 ;; library.
2355 "and not test_feed_eof_no_err_brotli "
2356
2357 ;; Disable the following tests as they require
2358 ;; networking.
2359 "and not TestDeflateBuffer "
2360 "and not test_client_session_timeout_zero "
2361 "and not test_empty_body "
2362 "and not test_mark_formdata_as_processed[pyloop] "
2363 "and not test_receive_runtime_err[pyloop] "
2364
2365 ;; assert 'gzip, deflate' == 'gzip, deflate, br'
2366 "and not test_headers[pyloop] "
2367 ;; ~/.. does not resolve
2368 "and not test_add_static_path_resolution"))
2369 #:phases
2370 '(modify-phases %standard-phases
2371 (add-after 'unpack 'fix-pytest-config
2372 (lambda _
2373 (substitute* "setup.cfg"
2374 (("--numprocesses=auto") "")
2375 (("-p pytest_cov") "")
2376 (("--cov.*") ""))))
2377 (add-after 'unpack 'fix-tests
2378 (lambda _
2379 ;; Make sure the timestamp of this file is > 1990, because a few
2380 ;; tests like test_static_file_if_modified_since_past_date depend
2381 ;; on it.
2382 (let ((late-90s (* 60 60 24 365 30)))
2383 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
2384 (add-before 'build 'cythonize
2385 (lambda _
2386 ;; Adapted from the Makefile.
2387 (with-directory-excursion "aiohttp"
2388 (for-each
2389 (lambda (file)
2390 (invoke "cython" "-3"
2391 file "-I" "."))
2392 (find-files "." "_.*\\.pyx$"))))))))
2393 (propagated-inputs
2394 (list python-aiohappyeyeballs
2395 python-aiosignal
2396 python-attrs
2397 python-frozenlist
2398 python-multidict
2399 python-propcache
2400 python-yarl))
2401 (native-inputs
2402 (list gunicorn-bootstrap
2403 python-cython
2404 python-freezegun
2405 python-isal
2406 python-pytest
2407 python-pytest-mock
2408 python-pytest-xdist
2409 python-re-assert
2410 python-setuptools))
2411 (home-page "https://github.com/aio-libs/aiohttp/")
2412 (synopsis "Async HTTP client/server framework (asyncio)")
2413 (description "@code{aiohttp} is an asynchronous HTTP client/server
2414framework.
2415
2416Its main features are:
2417@itemize
2418@item Supports both client and server side of HTTP protocol.
2419@item Supports both client and server Web-Sockets out-of-the-box without the
2420Callback Hell.
2421@item Web-server has middlewares and pluggable routing.
2422@end itemize")
2423 (license license:asl2.0)))
2424
2425(define-public python-aiohttp-oauthlib
2426 (package
2427 (name "python-aiohttp-oauthlib")
2428 (version "0.1.0")
2429 (source
2430 (origin
2431 (method url-fetch)
2432 (uri (pypi-uri "aiohttp-oauthlib" version))
2433 (sha256
2434 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
2435 (build-system pyproject-build-system)
2436 (arguments (list #:tests? #f)) ; none included
2437 (propagated-inputs (list python-aiohttp python-oauthlib))
2438 (native-inputs (list python-setuptools python-setuptools-scm))
2439 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
2440 (synopsis "OAuthlib authentication support for aiohttp")
2441 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
2442provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
2443 (license license:isc)))
2444
2445(define-public python-aiohttp-client-cache
2446 (package
2447 (name "python-aiohttp-client-cache")
2448 (version "0.14.2")
2449 (source
2450 (origin
2451 (method git-fetch)
2452 (uri (git-reference
2453 (url "https://github.com/requests-cache/aiohttp-client-cache")
2454 (commit (string-append "v" version))))
2455 (file-name (git-file-name name version))
2456 (sha256
2457 (base32
2458 "17qa2sh63wa7b9ma40y2b6k9sjscc5vfwlmf46sv36l1mz9rmd4y"))))
2459 (build-system pyproject-build-system)
2460 (arguments
2461 (list
2462 #:test-flags
2463 ;; Run unit tests only which not require networking or additional setup.
2464 #~(list "--ignore=test/integration")))
2465 (native-inputs
2466 (list python-hatchling
2467 ;; TODO: Missing packages: pytest-clarity,
2468 ;; nox-poetry, types-aiofiles.
2469 python-async-timeout
2470 python-brotli
2471 python-faker
2472 python-pytest
2473 python-pytest-aiohttp
2474 python-pytest-asyncio
2475 python-pytest-xdist))
2476 (propagated-inputs
2477 (list python-aiofiles
2478 python-aiohttp
2479 python-aiosqlite
2480 python-attrs
2481 python-itsdangerous
2482 python-redis
2483 python-url-normalize))
2484 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
2485 (synopsis "Persistent cache for aiohttp requests")
2486 (description
2487 "This package is an asynchronous persistent caching library specifically
2488designed for @samp{aiohttp} requests in Python. With support for various
2489storage backends, it offers flexibility in how and where the cache is stored.
2490Please note that MongoDB and DynamoDB backends are not currently supported due
2491to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
2492 (license license:expat)))
2493
2494(define-public python-aiohttp-cors
2495 (package
2496 (name "python-aiohttp-cors")
2497 (version "0.8.1")
2498 (source
2499 (origin
2500 (method url-fetch)
2501 (uri (pypi-uri "aiohttp_cors" version))
2502 (sha256
2503 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
2504 (build-system pyproject-build-system)
2505 (arguments
2506 (list
2507 #:tests? #f)) ; network access is required to run tests
2508 (native-inputs
2509 (list python-setuptools
2510 python-wheel))
2511 (propagated-inputs
2512 (list python-aiohttp))
2513 (home-page "https://github.com/aio-libs/aiohttp-cors")
2514 (synopsis "CORS support for aiohttp")
2515 (description
2516 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
2517support for aiohttp asyncio-powered asynchronous HTTP server.")
2518 (license license:asl2.0)))
2519
2520(define-public python-aiohttp-retry
2521 (package
2522 (name "python-aiohttp-retry")
2523 (version "2.9.1")
2524 (source
2525 (origin
2526 (method git-fetch)
2527 (uri (git-reference
2528 (url "https://github.com/inyutin/aiohttp_retry")
2529 (commit (string-append "v" version))))
2530 (file-name (git-file-name name version))
2531 (sha256
2532 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
2533 (build-system pyproject-build-system)
2534 (native-inputs
2535 (list python-pytest
2536 python-pytest-aiohttp
2537 python-setuptools))
2538 (propagated-inputs
2539 (list python-aiohttp))
2540 (home-page "https://github.com/inyutin/aiohttp_retry")
2541 (synopsis "Simple retry client for aiohttp")
2542 (description
2543 "This package implements @code{RetryClient} for @code{aiohttp} to retry
2544connection to provided endpoint with timeouts logic or use:
2545
2546@itemize
2547@item @code{ExponentialRetry} with exponential backoff
2548@item @code{RandomRetry} for random backoff
2549@item @code{ListRetry} with backoff you predefine by list
2550@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
2551@item @code{JitterRetry} exponential retry with a bit of randomness
2552@end itemize")
2553 (license license:expat)))
2554
2555(define-public python-aiohttp-socks
2556 (package
2557 (name "python-aiohttp-socks")
2558 (version "0.10.1")
2559 (source
2560 (origin
2561 (method url-fetch)
2562 (uri (pypi-uri "aiohttp_socks" version))
2563 (sha256
2564 (base32
2565 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
2566 (build-system pyproject-build-system)
2567 (arguments (list #:tests? #false)) ;none included
2568 (propagated-inputs
2569 (list python-aiohttp python-socks))
2570 (native-inputs (list python-setuptools python-wheel))
2571 (home-page "https://github.com/romis2012/aiohttp-socks")
2572 (synopsis "SOCKS proxy connector for aiohttp")
2573 (description "This package provides a SOCKS proxy connector for
2574aiohttp. It supports SOCKS4(a) and SOCKS5.")
2575 (license license:asl2.0)))
2576
2577(define-public python-aiodns
2578 (package
2579 (name "python-aiodns")
2580 (version "3.5.0")
2581 (source
2582 (origin
2583 (method git-fetch)
2584 (uri (git-reference
2585 (url "https://github.com/saghul/aiodns")
2586 (commit (string-append "v" version))))
2587 (file-name (git-file-name name version))
2588 (sha256
2589 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
2590 (build-system pyproject-build-system)
2591 (arguments
2592 (list
2593 #:tests? #f)) ;tests require internet access
2594 (native-inputs
2595 (list python-pytest
2596 python-pytest-cov
2597 python-pytest-asyncio
2598 python-setuptools))
2599 (propagated-inputs (list python-pycares))
2600 (home-page "https://github.com/saghul/aiodns")
2601 (synopsis "Simple DNS resolver for asyncio")
2602 (description
2603 "@code{aiodns} provides a simple way for doing asynchronous DNS
2604resolutions with a synchronous looking interface by using
2605@url{https://github.com/saghul/pycares,pycares}.")
2606 (license license:expat)))
2607
2608(define-public python-aioquic
2609 (package
2610 (name "python-aioquic")
2611 (version "1.2.0")
2612 (source
2613 (origin
2614 (method url-fetch)
2615 (uri (pypi-uri "aioquic" version))
2616 (sha256
2617 (base32 "16bigrn5b46c7nmpzxhnlhh4y03hwc7dbd0mi5f8r53i7yxn64pr"))))
2618 (build-system pyproject-build-system)
2619 (arguments
2620 (list
2621 #:test-flags
2622 #~(list "-k" (string-join
2623 ;; AssertionError: AlertBadCertificate not raised
2624 (list "not test_verify_subject_no_subjaltname"
2625 ;; AttributeError: module
2626 ;; 'service_identity.cryptography' has no attribute
2627 ;; 'extract_patterns'
2628 "test_verify_subject_with_subjaltname"
2629 ;; AttributeError: module
2630 ;; 'service_identity.cryptography' has no attribute
2631 ;; 'extract_patterns'
2632 "test_verify_subject_with_subjaltname_ipaddress")
2633 " and not "))))
2634 (native-inputs
2635 (list nss-certs-for-test
2636 python-pytest
2637 python-setuptools
2638 python-wheel))
2639 (inputs
2640 (list openssl))
2641 (propagated-inputs
2642 (list python-certifi
2643 python-pylsqpack
2644 python-pyopenssl
2645 python-service-identity))
2646 (home-page "https://github.com/aiortc/aioquic")
2647 (synopsis "QUIC and HTTP3 implementation in Python")
2648 (description
2649 "@code{aioquic} is a library for the QUIC network protocol in Python.
2650It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
2651 (license license:bsd-3)))
2652
2653(define-public python-aiorpcx
2654 (package
2655 (name "python-aiorpcx")
2656 (version "0.25.0")
2657 (source
2658 (origin
2659 (method git-fetch)
2660 ;; PyPI misses the util.py file used for tests.
2661 (uri (git-reference
2662 (url "https://github.com/kyuupichan/aiorpcX")
2663 (commit version)))
2664 (file-name (git-file-name name version))
2665 (sha256
2666 (base32
2667 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
2668 (build-system pyproject-build-system)
2669 (arguments
2670 (list
2671 #:test-flags
2672 ;; This test opens a remote connection.
2673 #~(list "-k" "not test_create_connection_resolve_good")))
2674 (native-inputs (list python-pytest
2675 python-pytest-asyncio-0.26
2676 python-setuptools))
2677 (propagated-inputs
2678 (list python-attrs python-websockets))
2679 (home-page "https://github.com/kyuupichan/aiorpcX")
2680 (synopsis "Generic asyncio RPC implementation")
2681 (description
2682 "The aiorpcX library is a generic asyncio implementation of RPC suitable
2683for an application that is a client, server or both.
2684
2685The package includes a module with full coverage of JSON RPC versions 1.0 and
26862.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
2687comes with a SOCKS proxy client.")
2688 (license (list license:expat license:bsd-2))))
2689
2690(define-public python-aiostream
2691 (package
2692 (name "python-aiostream")
2693 (version "0.7.0")
2694 (source
2695 (origin
2696 (method git-fetch) ;no tests in PyPI archive
2697 (uri (git-reference
2698 (url "https://github.com/vxgmichel/aiostream")
2699 (commit (string-append "v" version))))
2700 (file-name (git-file-name name version))
2701 (sha256
2702 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
2703 (build-system pyproject-build-system)
2704 (native-inputs
2705 (list python-pytest
2706 python-pytest-cov
2707 python-pytest-asyncio
2708 python-setuptools))
2709 (propagated-inputs
2710 (list python-typing-extensions))
2711 (home-page "https://github.com/vxgmichel/aiostream")
2712 (synopsis "Generator-based operators for asynchronous iteration")
2713 (description "@code{aiostream} provides a collection of stream operators that can
2714be combined to create asynchronous pipelines of operations. It can be seen as an
2715asynchronous version of @code{itertools}, although some aspects are slightly
2716different. All the provided operators return a unified interface called a stream. A
2717stream is an enhanced asynchronous iterable.")
2718 (license license:gpl3)))
2719
2720(define-public python-asgiref
2721 (package
2722 (name "python-asgiref")
2723 (version "3.8.1")
2724 (source (origin
2725 (method url-fetch)
2726 (uri (pypi-uri "asgiref" version))
2727 (sha256
2728 (base32 "146mhkn3zp2bqf7j6r3chdlvfzgs5x1lrnqahsllgjdyl20bshy3"))))
2729 (build-system pyproject-build-system)
2730 (native-inputs
2731 (list python-pytest
2732 python-pytest-asyncio
2733 python-setuptools
2734 python-wheel))
2735 (home-page "https://github.com/django/asgiref/")
2736 (synopsis "ASGI specs, helper code, and adapters")
2737 (description
2738 "ASGI is a standard for Python asynchronous web apps and servers to
2739communicate with each other, and positioned as an asynchronous successor to
2740WSGI. This package includes libraries for implementing ASGI servers.")
2741 (license license:bsd-3)))
2742
2743(define-public python-asgi-csrf
2744 (package
2745 (name "python-asgi-csrf")
2746 (version "0.11")
2747 (source (origin
2748 (method git-fetch) ;for tests
2749 (uri (git-reference
2750 (url "https://github.com/simonw/asgi-csrf")
2751 (commit version)))
2752 (file-name (git-file-name name version))
2753 (sha256
2754 (base32
2755 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))))
2756 (build-system pyproject-build-system)
2757 (propagated-inputs (list python-itsdangerous python-multipart))
2758 (native-inputs (list python-asgi-lifespan
2759 python-httpx
2760 python-pytest
2761 python-pytest-asyncio
2762 python-starlette
2763 python-setuptools
2764 python-wheel))
2765 (home-page "https://github.com/simonw/asgi-csrf")
2766 (synopsis "ASGI middleware for protecting against CSRF attacks")
2767 (description "This Asynchronous Server Gateway Interface (ASGI)
2768middleware protects against Cross-site request forgery (CSRF) attacks.
2769It implements the Double Submit Cookie pattern, where a cookie is set
2770that is then compared to a @code{csrftoken} hidden form field or a
2771@code{x-csrftoken} HTTP header.")
2772 (license license:asl2.0)))
2773
2774(define-public python-asgi-lifespan
2775 (package
2776 (name "python-asgi-lifespan")
2777 (version "2.1.0")
2778 (source (origin
2779 (method git-fetch) ;for tests
2780 (uri (git-reference
2781 (url "https://github.com/florimondmanca/asgi-lifespan")
2782 (commit version)))
2783 (file-name (git-file-name name version))
2784 (sha256
2785 (base32
2786 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
2787 (build-system pyproject-build-system)
2788 (arguments
2789 (list
2790 #:test-flags
2791 '(list "-c" "/dev/null" ;ignore coverage-related options
2792 "-k"
2793 (string-append
2794 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
2795 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
2796 " or test_lifespan_manager[trio-None-BodyFailed-None]"
2797 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
2798 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
2799 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
2800 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
2801 " or test_lifespan_timeout[trio-slow_shutdown]"
2802 " or test_lifespan_not_supported[trio-http_only]"
2803 " or test_lifespan_not_supported[trio-http_no_assert]"
2804 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
2805 ")"))
2806 #:phases
2807 '(modify-phases %standard-phases
2808 (add-after 'unpack 'compatibility
2809 (lambda _
2810 ;; httpx version 0.28.0 removed the "app" shortcut.
2811 (substitute* "tests/test_manager.py"
2812 (("app=manager.app")
2813 "transport=httpx.ASGITransport(manager.app)")))))))
2814 (native-inputs (list python-httpx
2815 python-pytest
2816 python-pytest-asyncio
2817 python-pytest-trio
2818 python-starlette
2819 python-setuptools
2820 python-wheel))
2821 (propagated-inputs (list python-sniffio))
2822 (home-page "https://github.com/florimondmanca/asgi-lifespan")
2823 (synopsis "Programmatic startup/shutdown of ASGI apps")
2824 (description "Programmatically send startup/shutdown lifespan events
2825into Asynchronous Server Gateway Interface (ASGI) applications. When
2826used in combination with an ASGI-capable HTTP client such as HTTPX, this
2827allows mocking or testing ASGI applications without having to spin up an
2828ASGI server.")
2829 (license license:expat)))
2830
2831(define-public python-a2wsgi
2832 (package
2833 (name "python-a2wsgi")
2834 (version "1.10.7")
2835 (source (origin
2836 (method url-fetch)
2837 (uri (pypi-uri "a2wsgi" version))
2838 (sha256
2839 (base32
2840 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
2841 (build-system pyproject-build-system)
2842 (arguments
2843 (list
2844 #:test-flags
2845 #~(list "-k" (string-join
2846 (list "not test_starlette_stream_response"
2847 "test_starlette_base_http_middleware"
2848 "test_baize_stream_response"
2849 ;; Fails because of harmless whitespace differences.
2850 "test_wsgi_post")
2851 " and not "))
2852 #:build-backend "pdm.backend"))
2853 (native-inputs
2854 (list python-pdm-backend
2855 python-pytest
2856 ;; python-baize ; not packed yet
2857 python-httpx-bootstrap
2858 ;; Cycle: python-a2wsgi->python-uvicorn->
2859 ;; python-httpx->python-starlette->python-a2wsgi
2860 ;; python-starlette
2861 python-pytest-asyncio))
2862 (home-page "https://github.com/abersheeran/a2wsgi")
2863 (synopsis "Convert WSGI to ASGI or vice versa")
2864 (description
2865 "This program converts a WSGI program to an ASGI program or the other
2866way around. It depends only on the Python standard library.")
2867 (license license:asl2.0)))
2868
2869(define-public python-httpauth
2870 (package
2871 (name "python-httpauth")
2872 (version "0.4.1")
2873 (source (origin
2874 (method url-fetch)
2875 (uri (pypi-uri "httpauth" version))
2876 (sha256
2877 (base32
2878 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
2879 (build-system pyproject-build-system)
2880 (native-inputs (list python-pytest python-setuptools python-wheel))
2881 (home-page "https://github.com/jonashaag/httpauth")
2882 (synopsis "WSGI HTTP Digest Authentication middleware")
2883 (description "@code{python-httpauth} is WSGI middleware that secures some/all
2884routes using HTTP Digest Authentication.")
2885 (license license:bsd-2)))
2886
2887(define-public python-css-html-js-minify
2888 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
2889 (revision "0"))
2890 (package
2891 (name "python-css-html-js-minify")
2892 (version (git-version "2.5.5" revision commit))
2893 (source
2894 (origin
2895 (method git-fetch)
2896 (uri (git-reference
2897 (url "https://github.com/juancarlospaco/css-html-js-minify")
2898 (commit commit)))
2899 (file-name (git-file-name name version))
2900 (sha256
2901 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
2902 (build-system pyproject-build-system)
2903 (arguments
2904 (list
2905 #:phases
2906 #~(modify-phases %standard-phases
2907 (add-after 'unpack 'relax-requirements
2908 (lambda _
2909 (substitute* "setup.cfg"
2910 (("^tests_require.*") "")))))))
2911 (native-inputs (list python-pytest python-setuptools))
2912 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
2913 (synopsis "CSS/HTML/JS minifier")
2914 (description
2915 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
2916 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
2917 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
2918 ;; looks like the user can choose a license.
2919 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
2920
2921(define-public python-aws-sam-translator
2922 (package
2923 (name "python-aws-sam-translator")
2924 (version "1.107.0")
2925 (source
2926 (origin
2927 (method git-fetch) ; no tests in PyPI release
2928 (uri (git-reference
2929 (url "https://github.com/aws/serverless-application-model")
2930 (commit (string-append "v" version))))
2931 (file-name (git-file-name name version))
2932 (sha256
2933 (base32 "0bx9ha9k6zx6gl1hsgm6cpq4xrfn604v2g1d5dh2d5zq0463gwfq"))))
2934 (build-system pyproject-build-system)
2935 (arguments
2936 (list
2937 #:test-flags
2938 #~(list "--numprocesses" (number->string (parallel-job-count))
2939 "--ignore=tests/bin/test_public_interface.py"
2940 "tests")
2941 #:phases
2942 #~(modify-phases %standard-phases
2943 (add-after 'unpack 'fix-pytest-config
2944 (lambda _
2945 ;; Drop test coverage requirements.
2946 (substitute* "pytest.ini"
2947 ((".*addopts.*") ""))))
2948 (add-before 'check 'pre-check
2949 (lambda _
2950 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
2951 (native-inputs
2952 (list python-pytest
2953 python-pytest-xdist
2954 python-parameterized
2955 python-pyyaml
2956 python-setuptools))
2957 (propagated-inputs
2958 (list python-boto3
2959 python-jsonschema
2960 python-pydantic
2961 python-typing-extensions))
2962 (home-page "https://github.com/aws/serverless-application-model")
2963 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
2964 (description
2965 "AWS SAM Translator is a library that transform @dfn{Serverless Application
2966Model} (SAM) templates into AWS CloudFormation templates.")
2967 (license license:asl2.0)))
2968
2969(define-public python-aws-xray-sdk
2970 (package
2971 (name "python-aws-xray-sdk")
2972 (version "2.14.0")
2973 (home-page "https://github.com/aws/aws-xray-sdk-python")
2974 (source (origin
2975 (method git-fetch)
2976 (uri (git-reference (url home-page) (commit version)))
2977 (file-name (git-file-name name version))
2978 (sha256
2979 (base32
2980 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
2981 (build-system pyproject-build-system)
2982 (arguments
2983 (list
2984 #:test-flags
2985 '(list ;; Tries to connect to external network resources
2986 "--ignore=tests/ext/aiohttp/test_client.py"
2987 "--ignore=tests/ext/httplib/test_httplib.py"
2988 "--ignore=tests/ext/httpx"
2989 "--ignore=tests/ext/requests/test_requests.py"
2990 ;; TODO: How to configure Django for these tests?
2991 "--ignore=tests/ext/django"
2992 ;; These tests require packages not yet in Guix.
2993 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
2994 "--ignore=tests/ext/aiohttp/test_middleware.py"
2995 "--ignore=tests/ext/pg8000/test_pg8000.py"
2996 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
2997 "--ignore=tests/ext/pymysql/test_pymysql.py"
2998 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
2999 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
3000 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
3001 "--ignore=tests/test_async_recorder.py"
3002 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
3003 "--ignore-glob=tests/ext/sqlalchemy*"
3004 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
3005 ;; FIXME: Why is this failing?
3006 "--ignore=tests/test_patcher.py"
3007 "--ignore=tests/test_lambda_context.py")
3008 #:phases
3009 '(modify-phases %standard-phases
3010 (add-before 'check 'pre-check
3011 (lambda _
3012 ;; Allow "import tests.utils" to work as expected.
3013 (setenv "PYTHONPATH" (getcwd)))))))
3014 (native-inputs
3015 (list ;; These are required for the test suite.
3016 python-aiohttp
3017 python-bottle
3018 python-flask
3019 python-flask-sqlalchemy
3020 python-httpx
3021 python-mock
3022 python-pymysql
3023 python-pytest
3024 python-pytest-asyncio-0.26
3025 python-pytest-benchmark
3026 python-setuptools
3027 python-sqlalchemy
3028 python-webtest))
3029 (propagated-inputs
3030 (list python-botocore
3031 python-jsonpickle
3032 python-requests
3033 python-wrapt))
3034 (synopsis "Profile applications on AWS X-Ray")
3035 (description
3036 "The AWS X-Ray SDK for Python enables Python developers to record and
3037emit information from within their applications to the AWS X-Ray service.")
3038 (license license:asl2.0)))
3039
3040(define-public python-publicsuffixlist
3041 (package
3042 (name "python-publicsuffixlist")
3043 (version "1.0.2.20250202")
3044 (source
3045 (origin
3046 (method url-fetch)
3047 (uri (pypi-uri "publicsuffixlist" version))
3048 (sha256
3049 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
3050 (build-system pyproject-build-system)
3051 (arguments (list #:test-backend #~'unittest))
3052 (native-inputs (list python-setuptools))
3053 (home-page "https://github.com/ko-zu/psl")
3054 (synopsis "Public suffix list for Python")
3055 (description
3056 "This package provides an implementation of
3057@url{https://publicsuffix.org/, Public Suffix List } as Python library.
3058
3059Features:
3060@itemize
3061@item supports IDN (unicode and punycoded)
3062@item shipped with built-in PSL and an updater script
3063@item written in Pure Python with no library dependencies
3064@end itemize")
3065 (license license:mpl2.0)))
3066
3067(define-public python-pycognito
3068 (package
3069 (name "python-pycognito")
3070 (version "2024.5.1")
3071 (source
3072 (origin
3073 (method url-fetch)
3074 (uri (pypi-uri "pycognito" version))
3075 (sha256
3076 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
3077 (build-system pyproject-build-system)
3078 (arguments
3079 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
3080 (list #:tests? #f))
3081 (native-inputs
3082 (list python-setuptools))
3083 (propagated-inputs
3084 (list python-boto3
3085 python-envs
3086 python-pyjwt
3087 python-requests))
3088 (home-page "https://github.com/pvizeli/pycognito")
3089 (synopsis "Python library for using AWS Cognito")
3090 (description
3091 "This package provides a Python class to integrate Boto3's Cognito
3092client so it is easy to login users, with @acronym{Secure Remote Password,
3093SRP} support.")
3094 (license license:asl2.0)))
3095
3096(define-public python-python3-saml
3097 (package
3098 (name "python-python3-saml")
3099 (version "1.16.0")
3100 (source
3101 (origin
3102 (method git-fetch)
3103 (uri (git-reference
3104 (url "https://github.com/SAML-Toolkits/python3-saml")
3105 (commit (string-append "v" version))))
3106 (file-name (git-file-name name version))
3107 (sha256
3108 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
3109 (build-system pyproject-build-system)
3110 (arguments
3111 (list
3112 ;; 214 tests pass, 50 fail; many fail because of required Internet
3113 ;; access or because of assumptions about the location of test files.
3114 #:tests? #false))
3115 (native-inputs
3116 (list python-freezegun
3117 python-poetry-core))
3118 (inputs
3119 (list xmlsec-openssl))
3120 (propagated-inputs
3121 (list python-isodate
3122 python-lxml
3123 python-xmlsec))
3124 (home-page "https://github.com/SAML-Toolkits/python3-saml")
3125 (synopsis "Saml Python toolkit")
3126 (description
3127 "The SAML Python Toolkit lets you add SAML support to your Python
3128software.")
3129 (license license:expat)))
3130
3131(define-public python-ovh
3132 (package
3133 (name "python-ovh")
3134 (version "1.1.0")
3135 (source (origin
3136 (method url-fetch)
3137 (uri (pypi-uri "ovh" version))
3138 (sha256
3139 (base32
3140 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
3141 (build-system pyproject-build-system)
3142 (arguments (list #:tests? #f)) ; XXX: tests require networking
3143 (propagated-inputs (list python-requests))
3144 (native-inputs (list python-setuptools))
3145 (home-page "https://api.ovh.com")
3146 (synopsis "Interact with OVHcloud APIs")
3147 (description "This package provides the official module to perform HTTP requests
3148to the OVHcloud APIs.")
3149 (license license:bsd-3)))
3150
3151(define-public python-cbor2
3152 (package
3153 (name "python-cbor2")
3154 (version "5.4.2.post1")
3155 (source
3156 (origin
3157 (method url-fetch)
3158 (uri (pypi-uri "cbor2" version))
3159 (sha256
3160 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
3161 (build-system pyproject-build-system)
3162 (native-inputs
3163 (list python-pytest
3164 python-pytest-cov
3165 python-setuptools
3166 python-setuptools-scm
3167 python-wheel))
3168 (home-page "https://github.com/agronholm/cbor2")
3169 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
3170 (description "This Python library provides encoding and decoding for the
3171Concise Binary Object
3172Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
31738949}) serialization format. The specification is fully compatible with the
3174original RFC 7049. Among its features are:
3175@itemize
3176@item Simple API like the @code{json} or @code{pickle} modules.
3177@item Support many CBOR tags with stdlib objects.
3178@item Generic tag decoding.
3179@item Shared value references including cyclic references.
3180@item String references compact encoding with repeated strings replaced with
3181indices.
3182@item Optional C module backend tested on big- and little-endian architectures.
3183@item Extensible tagged value handling using tag_hook and object_hook on
3184decode and default on encode.
3185@end itemize")
3186 (license license:expat)))
3187
3188(define-public python-cfn-lint
3189 (package
3190 (name "python-cfn-lint")
3191 (version "1.38.1")
3192 (source
3193 (origin
3194 (method git-fetch)
3195 (uri (git-reference
3196 (url "https://github.com/aws-cloudformation/cfn-lint")
3197 (commit (string-append "v" version))))
3198 (file-name (git-file-name name version))
3199 (sha256
3200 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
3201 (build-system pyproject-build-system)
3202 (arguments
3203 (list
3204 ;; tests: 2136 passed, 11 deselected, 1 warning
3205 #:test-flags
3206 #~(list "--ignore=test/integration/"
3207 "-k" (string-join
3208 ;; Tests failing on doctest or comparing diff.
3209 (list "not test_build_graph"
3210 "test_good_template"
3211 "test_success_run"
3212 "test_update_docs"
3213 ;; ImportError: Missing optional dependencies sarif
3214 "test_sarif_formatter")
3215 " and not "))
3216 #:phases
3217 #~(modify-phases %standard-phases
3218 (add-after 'unpack 'remove-deprecated
3219 (lambda _
3220 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
3221 (("deprecated\": \"2025")
3222 "deprecated\": \"2125")))))))
3223 (native-inputs
3224 (list python-defusedxml
3225 python-pydot
3226 python-pytest
3227 python-setuptools))
3228 (propagated-inputs
3229 (list python-aws-sam-translator
3230 python-jsonpatch
3231 python-networkx
3232 python-pyyaml
3233 python-regex
3234 python-sympy
3235 python-typing-extensions
3236 ;; [optional]
3237 python-junit-xml))
3238 (home-page "https://github.com/aws-cloudformation/cfn-lint")
3239 (synopsis "Validate CloudFormation templates")
3240 (description
3241 "This package lets you validate CloudFormation YAML/JSON templates against
3242the CloudFormation spec and additional checks. Includes checking valid values
3243for resource properties and best practices.")
3244 (license license:expat)))
3245
3246(define-public python-pyzabbix
3247 (package
3248 (name "python-pyzabbix")
3249 (version "1.3.1")
3250 (source
3251 (origin
3252 (method git-fetch)
3253 (uri (git-reference
3254 (url "https://github.com/lukecyca/pyzabbix")
3255 (commit version)))
3256 (file-name (git-file-name name version))
3257 (sha256
3258 (base32 "1dbs3bz1mjlvlg46ikhg5j7agwni61ljlpiziknklv95yp29n86v"))))
3259 (build-system pyproject-build-system)
3260 (arguments
3261 (list #:test-flags #~(list "tests")))
3262 (native-inputs
3263 (list python-pytest
3264 python-requests-mock
3265 python-setuptools))
3266 (propagated-inputs
3267 (list python-packaging
3268 python-requests))
3269 (home-page "https://github.com/lukecyca/pyzabbix")
3270 (synopsis "Python interface to the Zabbix API")
3271 (description
3272 "@code{pyzabbix} is a Python module for working with the Zabbix API.")
3273 (license license:lgpl2.1+)))
3274
3275(define-public python-requests-cache
3276 (package
3277 (name "python-requests-cache")
3278 (version "1.2.1")
3279 (source
3280 (origin
3281 (method url-fetch)
3282 (uri (pypi-uri "requests_cache" version))
3283 (sha256
3284 (base32 "1l8i4l2pd26gbrlcdb5z056wvsqfr3vvbyqq2f8x1f65zn3ckav8"))))
3285 (build-system pyproject-build-system)
3286 (arguments
3287 (list
3288 #:test-flags
3289 #~(list "--numprocesses" (number->string (parallel-job-count))
3290 ;; These tests require access to external services, e.g. MongoDB
3291 ;; and Redis.
3292 "--ignore=tests/integration"
3293 ;; AttributeError: <class 'requests.adapters.HTTPAdapter'> does
3294 ;; not have the attribute 'get_connection_with_tls_context'
3295 "-k" "not test_mock_session")
3296 #:phases
3297 #~(modify-phases %standard-phases
3298 (add-before 'check 'pre-check
3299 (lambda _
3300 ;; PermissionError: [Errno 13] Permission denied:
3301 ;; '/homeless-shelter'
3302 (setenv "HOME" "/tmp"))))))
3303 (native-inputs
3304 (list python-poetry-core
3305 python-pytest
3306 python-pytest-rerunfailures
3307 python-pytest-xdist
3308 python-requests-mock
3309 python-responses
3310 python-rich
3311 python-tenacity
3312 python-time-machine
3313 python-timeout-decorator))
3314 (propagated-inputs
3315 (list python-attrs
3316 python-boto3
3317 python-bson
3318 python-cattrs
3319 python-itsdangerous
3320 python-orjson
3321 python-platformdirs
3322 python-pymongo
3323 python-pyyaml
3324 python-redis
3325 python-requests
3326 python-ujson
3327 python-url-normalize
3328 python-urllib3))
3329 (home-page "https://github.com/requests-cache/requests-cache")
3330 (synopsis "Persistent HTTP cache for Python requests")
3331 (description
3332 "This package provides a drop-in replacement for @code{requests.Session}
3333with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
3334responses as planin JSON/YAML file or save responses as plain JSON/YAML
3335files.")
3336 (license license:bsd-2)))
3337
3338(define-public python-requests-futures
3339 (package
3340 (name "python-requests-futures")
3341 (version "1.0.2")
3342 (source
3343 (origin
3344 (method url-fetch)
3345 (uri (pypi-uri "requests_futures" version))
3346 (sha256
3347 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
3348 (build-system pyproject-build-system)
3349 (native-inputs
3350 (list python-greenlet
3351 python-pytest
3352 python-pytest-httpbin
3353 python-setuptools
3354 python-werkzeug))
3355 (propagated-inputs (list python-requests))
3356 (home-page "https://github.com/ross/requests-futures")
3357 (synopsis "Asynchronous Python HTTP for Humans")
3358 (description
3359 "This package provides and add-on the Python Requests HTTP library to run
3360code asynchronously.")
3361 (license license:asl2.0)))
3362
3363(define-public python-s3path
3364 (package
3365 (name "python-s3path")
3366 (version "0.6.4")
3367 (source
3368 (origin
3369 (method url-fetch)
3370 (uri (pypi-uri "s3path" version))
3371 (sha256
3372 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
3373 (build-system pyproject-build-system)
3374 (arguments
3375 (list
3376 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
3377 #:tests? #f))
3378 (native-inputs
3379 (list python-setuptools
3380 python-wheel))
3381 (propagated-inputs
3382 (list python-boto3
3383 python-smart-open))
3384 (home-page "https://github.com/liormizr/s3path")
3385 (synopsis "Pathlib extension for AWS S3 Service")
3386 (description
3387 "S3Path provide a Python convenient File-System/Path like interface for
3388AWS S3 Service using boto3 S3 resource as a driver.")
3389 (license license:asl2.0)))
3390
3391(define-public python-falcon
3392 (package
3393 (name "python-falcon")
3394 (version "4.0.2")
3395 (source
3396 (origin
3397 ;; Use git, as there are some test files missing from the PyPI release,
3398 ;; such as 'examples' directory.
3399 (method git-fetch)
3400 (uri (git-reference
3401 (url "https://github.com/falconry/falcon")
3402 (commit version)))
3403 (file-name (git-file-name name version))
3404 (sha256
3405 (base32
3406 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
3407 (build-system pyproject-build-system)
3408 (arguments
3409 (list
3410 #:test-flags
3411 '(list "-k" "not slow"
3412 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
3413 #:phases
3414 '(modify-phases %standard-phases
3415 (add-before 'check 'pre-check
3416 (lambda _
3417 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
3418 (setenv "FALCON_TESTING_SESSION" "Y")
3419 (setenv "PYTHONASYNCIODEBUG" "1")
3420 (setenv "HOME" "/tmp"))))))
3421 (propagated-inputs
3422 (list python-mimeparse))
3423 (native-inputs
3424 (list python-aiofiles
3425 python-cbor2
3426 python-cython ;for faster binaries
3427 python-fakeredis
3428 python-httpx
3429 python-mujson
3430 python-msgpack
3431 python-orjson
3432 python-pecan
3433 python-pillow
3434 python-pytest
3435 python-pytest-asyncio
3436 python-pytest-runner
3437 python-pyyaml
3438 python-rapidjson
3439 python-requests
3440 python-setuptools
3441 python-testtools
3442 python-ujson
3443 python-websockets
3444 python-wheel))
3445 (home-page "https://falconframework.org")
3446 (synopsis "Web framework for building APIs and application backends")
3447 (description "Falcon is a web API framework for building microservices,
3448application backends and higher-level frameworks. Among its features are:
3449@itemize
3450@item Optimized and extensible code base
3451@item Routing via URI templates and REST-inspired resource
3452classes
3453@item Access to headers and bodies through request and response
3454classes
3455@item Request processing via middleware components and hooks
3456@item Idiomatic HTTP error responses
3457@item Straightforward exception handling
3458@item Unit testing support through WSGI helpers and mocks
3459@item Compatible with both CPython and PyPy
3460@item Cython support for better performance when used with CPython
3461@end itemize")
3462 (license license:asl2.0)))
3463
3464(define-public python-falcon-cors
3465 (package
3466 (name "python-falcon-cors")
3467 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
3468 (revision . "0")))
3469 (version (git-version "1.1.7"
3470 (assoc-ref properties 'revision)
3471 (assoc-ref properties 'commit)))
3472 (source
3473 (origin
3474 (method git-fetch)
3475 (uri (git-reference
3476 (url "https://github.com/lwcolton/falcon-cors")
3477 (commit (assoc-ref properties 'commit))))
3478 (file-name (git-file-name name version))
3479 (sha256
3480 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
3481 (build-system pyproject-build-system)
3482 (arguments
3483 (list
3484 ;; XXX: The last commit's tests are incompatible with the more recent
3485 ;; version of python-falcon.
3486 #:tests? #f))
3487 (native-inputs
3488 (list python-falcon python-mock python-pynose python-setuptools))
3489 (home-page "https://github.com/lwcolton/falcon-cors")
3490 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
3491 (description
3492 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
3493support for Falcon. It allows applying a specially crafted CORS object to the
3494incoming requests, enabling the ability to serve resources over a different
3495origin than that of the web application.")
3496 (license license:asl2.0)))
3497
3498(define-public python-furl
3499 (package
3500 (name "python-furl")
3501 (version "2.1.4")
3502 (source
3503 (origin
3504 (method url-fetch)
3505 (uri (pypi-uri "furl" version))
3506 (sha256
3507 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
3508 (build-system pyproject-build-system)
3509 (arguments
3510 (list #:test-flags
3511 #~(list "-k" (string-append "not test_hosts"
3512 " and not test_netloc"
3513 " and not test_odd_urls"))))
3514 (propagated-inputs
3515 (list python-orderedmultidict python-six))
3516 (native-inputs
3517 (list python-pytest python-setuptools python-wheel))
3518 (home-page "https://github.com/gruns/furl")
3519 (synopsis "URL manipulation in Python")
3520 (description "Furl provides an easy-to-use alternative to the
3521@code{urllib} and @code{urlparse} modules for manipulating URLs.")
3522 (license license:unlicense)))
3523
3524(define-public python-httplib2
3525 (package
3526 (name "python-httplib2")
3527 (version "0.22.0")
3528 (source
3529 (origin
3530 ;; Tests not included in the release tarball.
3531 (method git-fetch)
3532 (uri (git-reference
3533 (url "https://github.com/httplib2/httplib2")
3534 (commit (string-append "v" version))))
3535 (file-name (git-file-name name version))
3536 (sha256
3537 (base32
3538 "1zkp3glv0iha7p68p5m0sb8mrrammkdc0mx32517xry52s4iva7g"))))
3539 (build-system pyproject-build-system)
3540 (arguments
3541 (list
3542 #:phases
3543 #~(modify-phases %standard-phases
3544 (add-after 'unpack 'adjust-test-requirements
3545 (lambda _
3546 (substitute* "requirements-test.txt"
3547 (("==") ">=")))))))
3548 (native-inputs
3549 (list python-cryptography
3550 python-future
3551 python-mock
3552 python-pyparsing
3553 python-pytest
3554 python-pytest-cov
3555 python-pytest-randomly
3556 python-pytest-timeout
3557 python-setuptools))
3558 (home-page "https://github.com/httplib2/httplib2")
3559 (synopsis "Comprehensive HTTP client library")
3560 (description
3561 "A comprehensive HTTP client library supporting many features left out of
3562other HTTP libraries.")
3563 (license license:expat)))
3564
3565(define-public python-cheroot
3566 (package
3567 (name "python-cheroot")
3568 (version "11.1.2")
3569 (source
3570 (origin
3571 (method git-fetch)
3572 (uri (git-reference
3573 (url "https://github.com/cherrypy/cheroot")
3574 (commit (string-append "v" version))))
3575 (file-name (git-file-name name version))
3576 (sha256
3577 (base32 "02rhci01m5fcn8mqpvq3c35rs4n28gxlfvfw2if2f85rgwrji8y8"))))
3578 (build-system pyproject-build-system)
3579 (arguments
3580 (list
3581 #:test-flags
3582 #~(list "--cov=cheroot"
3583 ;; Tests are flaky in parallel invocation.
3584 ;; "--numprocesses=auto"
3585 "--doctest-modules"
3586 "--showlocals"
3587 "-k" (string-append
3588 ;; Disable test requiring networking.
3589 "not test_tls_client_auth"
3590 ;; TypeError: HTTPConnection.request() got an unexpected keyword
3591 ;; argument 'chunked'
3592 " and not test_peercreds_unix_sock"
3593 " and not test_peercreds_unix_sock_with_lookup"))
3594 #:phases
3595 #~(modify-phases %standard-phases
3596 (replace 'check
3597 (lambda* (#:key tests? test-flags #:allow-other-keys)
3598 (when tests?
3599 (with-directory-excursion "/tmp"
3600 (apply invoke "pytest" "-v"
3601 (append test-flags (list #$output))))))))))
3602 (propagated-inputs
3603 (list python-jaraco-functools python-more-itertools))
3604 (native-inputs
3605 (list python-jaraco-text
3606 python-portend
3607 python-pyopenssl
3608 python-pypytools
3609 python-pytest-cov
3610 python-pytest-mock
3611 python-requests
3612 python-requests-toolbelt
3613 python-requests-unixsocket2
3614 python-setuptools
3615 python-setuptools-scm
3616 python-trustme
3617 python-wheel))
3618 (home-page "https://cheroot.cherrypy.dev")
3619 (synopsis "Highly-optimized, pure-python HTTP server")
3620 (description
3621 "Cheroot is a high-performance, pure-Python HTTP server.")
3622 (license license:bsd-3)))
3623
3624(define-public python-cherrypy
3625 (package
3626 (name "python-cherrypy")
3627 (properties '((commit . "1f75bc9eed8e0e385f64f368bd69f58d96fb8c2b")
3628 (revision . "0")))
3629 (version (git-version "18.10.0"
3630 (assoc-ref properties 'revision)
3631 (assoc-ref properties 'commit)))
3632 (source
3633 (origin
3634 (method git-fetch)
3635 (uri (git-reference
3636 (url "https://github.com/cherrypy/cherrypy")
3637 (commit (assoc-ref properties 'commit))))
3638 (file-name (git-file-name name version))
3639 (sha256
3640 (base32 "1l01a4sbfm42s5xp6ngphgqf0yb65ksqbsb27kznvybblyaxfa9p"))))
3641 (build-system pyproject-build-system)
3642 (arguments
3643 (list
3644 #:phases
3645 #~(modify-phases %standard-phases
3646 (add-after 'unpack 'patch-pyproject
3647 (lambda _
3648 (substitute* "pyproject.toml"
3649 (("\"cherrypy.scaffold\",")
3650 (string-join
3651 (list "\"cherrypy.scaffold\""
3652 "\"cherrypy._private_api\""
3653 "\"cherrypy._private_api.compat\",")
3654 ",\n "))))))
3655 #:test-flags
3656 #~(map
3657 (lambda (test)
3658 (string-append "--deselect=cherrypy/test/" test))
3659 (list
3660 ;; Requires bumping python-flaky.
3661 "test_bus.py::test_wait_publishes_periodically"
3662 "test_bus.py::test_block"
3663 "test_bus.py::test_start_with_callback"
3664 "test_refleaks.py::ReferenceTests::test_threadlocal_garbage"
3665 "test_session.py::SessionTest::test_0_Session"
3666 "test_session.py::SessionTest::test_2_File_Concurrency"
3667 ;; assert b'RamSession' == b'FileSession' or FileNotFoundError
3668 "test_session.py::SessionTest::test_3_Redirect"
3669 "test_session.py::SessionTest::test_4_File_deletion"
3670 ;; XXX: Unraisable exceptions.
3671 "test_core.py::CoreRequestHandlingTest"))))
3672 (propagated-inputs
3673 (list python-cheroot
3674 python-jaraco-collections
3675 python-more-itertools
3676 python-portend
3677 python-zc-lockfile))
3678 (native-inputs
3679 (list python-filelock
3680 python-flaky
3681 python-objgraph
3682 python-path
3683 python-pytest
3684 python-pytest-cov
3685 python-pytest-forked
3686 python-pytest-services
3687 python-pytest-sugar
3688 python-requests-toolbelt
3689 python-setuptools
3690 python-setuptools-scm))
3691 (home-page "https://www.cherrypy.dev")
3692 (synopsis "Object-Oriented HTTP framework")
3693 (description
3694 "CherryPy is a pythonic, object-oriented web framework. It helps in
3695building web applications in the same way any other object-oriented Python
3696program would be built.")
3697 (license license:bsd-3)))
3698
3699(define-public httpie
3700 (package
3701 (name "httpie")
3702 (version "3.2.4")
3703 (source
3704 (origin
3705 (method git-fetch)
3706 (uri (git-reference
3707 (url "https://github.com/httpie/cli")
3708 (commit version)))
3709 (file-name (git-file-name name version))
3710 (sha256
3711 (base32 "0ii11xfqkbawg1v8dlli4fqq5k3yc2v65z3j7k3p4gng998s94mr"))))
3712 (build-system pyproject-build-system)
3713 (arguments
3714 (list
3715 #:phases
3716 #~(modify-phases %standard-phases
3717 (add-before 'build 'remove-unnecessary-dependencies
3718 ;; Remove pip and setuptools dependencies so sanity-check.py passes.
3719 (lambda _
3720 (substitute* "setup.cfg"
3721 (("(pip|setuptools)") "")))))
3722 ;; tests: 951 passed, 23 skipped, 6 deselected, 4 xfailed, 122 warnings
3723 #:test-flags
3724 ;; test_plugins_cli.py communicates through subprocesses
3725 ;; mocking stdin, which does not work in the build container.
3726 ;; test_ssl.py cannot find the SSL certificates.
3727 ;; test_binary.py fails for an unknown reason.
3728 #~(list "--ignore=tests/test_plugins_cli.py"
3729 "--ignore=tests/test_ssl.py"
3730 "--ignore=tests/test_binary.py"
3731 ;; Assertion failed to compare Unicode characters.
3732 (string-append
3733 "--deselect=tests/test_encoding.py"
3734 "::test_terminal_output_request_charset_detection")
3735 (string-append
3736 "--deselect=tests/test_encoding.py"
3737 "::test_terminal_output_response_charset_detection"))))
3738 (native-inputs (list python-pytest
3739 python-pytest-httpbin
3740 python-pytest-mock
3741 python-responses
3742 python-setuptools
3743 python-werkzeug))
3744 (propagated-inputs
3745 (list python-charset-normalizer
3746 python-defusedxml
3747 python-multidict
3748 python-pygments
3749 python-requests
3750 python-requests-toolbelt
3751 python-rich))
3752 (home-page "https://httpie.io")
3753 (synopsis "Modern, user-friendly command-line HTTP client for the API era")
3754 (description
3755 "A command line HTTP client with an intuitive UI, JSON support,
3756syntax highlighting, wget-like downloads, plugins, and more. It consists of
3757a single http command designed for painless debugging and interaction with
3758HTTP servers, RESTful APIs, and web services.")
3759 ;; CVE-2019-10751 was fixed in 1.0.3.
3760 (properties `((lint-hidden-cve "CVE-2019-10751")))
3761 (license license:bsd-3)))
3762
3763(define-public python-parfive
3764 (package
3765 (name "python-parfive")
3766 (version "2.2.0")
3767 (source
3768 (origin
3769 (method url-fetch)
3770 (uri (pypi-uri "parfive" version))
3771 (sha256
3772 (base32 "16rf02jhjr9lij8s2gqmvs01vx8kiv9f2535dnnziqwqv14d21yy"))))
3773 (build-system pyproject-build-system)
3774 (arguments
3775 (list
3776 #:test-flags
3777 ;; Disable tests requiring network access.
3778 #~(list "-k" (string-join
3779 (list "not test_ftp"
3780 "test_ftp_pasv_command"
3781 "test_ftp_http")
3782 " and not "))))
3783 (native-inputs
3784 (list python-pytest
3785 python-pytest-asyncio
3786 python-pytest-cov
3787 python-pytest-localserver
3788 python-pytest-socket
3789 python-setuptools
3790 python-setuptools-scm
3791 python-wheel))
3792 (propagated-inputs
3793 (list python-aiofiles
3794 python-aioftp
3795 python-aiohttp
3796 python-tqdm))
3797 (home-page "https://parfive.readthedocs.io/")
3798 (synopsis "HTTP and FTP parallel file downloader")
3799 (description
3800 "This package provides CLI tool and Python library @code{parallel} file
3801downloader using asyncio. parfive can handle downloading multiple files in
3802parallel as well as downloading each file in a number of chunks.
3803
3804asciicast demo of parfive parfive works by creating a downloader object,
3805appending files to it and then running the download. parfive has a synchronous
3806API, but uses asyncio to parallelise downloading the files.")
3807 (license license:expat)))
3808
3809(define-public python-html2text
3810 (package
3811 (name "python-html2text")
3812 (version "2020.1.16")
3813 (source
3814 (origin
3815 (method url-fetch)
3816 (uri (pypi-uri "html2text" version))
3817 (sha256
3818 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
3819 (build-system pyproject-build-system)
3820 (native-inputs (list python-pytest python-setuptools python-wheel))
3821 (home-page "https://github.com/Alir3z4/html2text")
3822 (synopsis "Convert HTML into plain text")
3823 (description
3824 "html2text takes HTML and converts it into plain ASCII text
3825which is also valid markdown. html2text was originally written by Aaron
3826Swartz.")
3827 (license license:gpl3+)))
3828
3829(define-public python-jose
3830 (package
3831 (name "python-jose")
3832 (version "3.5.0")
3833 (home-page "https://github.com/mpdavis/python-jose")
3834 (source (origin
3835 (method git-fetch)
3836 (uri (git-reference (url home-page) (commit version)))
3837 (file-name (git-file-name name version))
3838 (sha256
3839 (base32
3840 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
3841 (build-system pyproject-build-system)
3842 (native-inputs
3843 (list python-pyasn1 python-pytest python-setuptools))
3844 (propagated-inputs
3845 (list python-cryptography python-ecdsa python-rsa))
3846 (synopsis "JOSE implementation in Python")
3847 (description
3848 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
3849- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
3850JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
3851content using a variety of algorithms.")
3852 (license license:expat)))
3853
3854(define-public python-joserfc
3855 (package
3856 (name "python-joserfc")
3857 (version "1.0.1")
3858 (source
3859 (origin
3860 (method url-fetch)
3861 (uri (pypi-uri "joserfc" version))
3862 (sha256
3863 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
3864 (build-system pyproject-build-system)
3865 (arguments
3866 (list
3867 #:test-flags
3868 ;; No module named 'Crypto'
3869 '(list "--ignore=tests/jwe/test_chacha20.py"
3870 ;; Deprecation warnings are not raised.
3871 "-k" (string-append "not test_guess_bytes_key"
3872 " and not test_guess_callable_key"
3873 " and not test_guess_str_key"))))
3874 (propagated-inputs (list python-cryptography))
3875 (native-inputs (list python-pytest python-setuptools python-wheel))
3876 (home-page "https://github.com/authlib/joserfc")
3877 (synopsis "Python library for JOSE RFCs")
3878 (description
3879 "This package provides a Python library for JOSE RFCs, including JWS,
3880JWE, JWK, JWA, and JWT.")
3881 (license license:bsd-3)))
3882
3883(define-public python-jwcrypto
3884 (package
3885 (name "python-jwcrypto")
3886 (version "1.5.6")
3887 (source
3888 (origin
3889 (method url-fetch)
3890 (uri (pypi-uri "jwcrypto" version))
3891 (sha256
3892 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
3893 (build-system pyproject-build-system)
3894 (native-inputs
3895 (list python-pytest
3896 python-setuptools))
3897 (propagated-inputs
3898 (list python-cryptography
3899 python-typing-extensions))
3900 (home-page "https://github.com/latchset/jwcrypto")
3901 (synopsis "Implementation of JOSE Web standards")
3902 (description
3903 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
3904Encryption} (JOSE) Web Standards.")
3905 (license license:lgpl3+)))
3906
3907(define-public python-pypitoken
3908 (package
3909 (name "python-pypitoken")
3910 (version "7.0.1")
3911 (source
3912 (origin
3913 (method url-fetch)
3914 (uri (pypi-uri "pypitoken" version))
3915 (sha256
3916 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
3917 (build-system pyproject-build-system)
3918 ;; There are no tests.
3919 (arguments (list #:tests? #false))
3920 (propagated-inputs (list python-jsonschema python-pymacaroons
3921 python-typing-extensions))
3922 (native-inputs (list python-poetry-core))
3923 (home-page "https://pypitoken.readthedocs.io/en/latest/")
3924 (synopsis "Manipulate PyPI API tokens")
3925 (description "This package lets you manipulate PyPI API tokens.")
3926 (license license:expat)))
3927
3928(define-public python-pyscss
3929 ;; XXX: no fresh release supporting Python 3.11, use the latest commit, see
3930 ;; <https://github.com/Kronuz/pyScss/issues/428>,
3931 ;; <https://github.com/Kronuz/pyScss/issues/431>.
3932 (let ((commit "73559d047706ccd4593cf6aa092de71f35164723")
3933 (revision "0"))
3934 (package
3935 (name "python-pyscss")
3936 (version (git-version "1.4.0" revision commit))
3937 (source
3938 (origin
3939 (method git-fetch) ; no tests in PyPI release
3940 (uri (git-reference
3941 (url "https://github.com/Kronuz/pyScss")
3942 (commit commit)))
3943 (file-name (git-file-name name version))
3944 (sha256
3945 (base32 "00msypxf5dm57gyfp3jxvjinigi4km84v33w83635pms9li2k3y7"))))
3946 (build-system pyproject-build-system)
3947 (native-inputs
3948 (list python-pytest-8
3949 python-setuptools))
3950 (inputs
3951 (list pcre))
3952 (propagated-inputs
3953 (list python-six)) ;hard dependency in scss/compiler.py
3954 (home-page "https://github.com/Kronuz/pyScss")
3955 (synopsis "Scss compiler for Python")
3956 (description
3957 "@code{pyScss} is a compiler for Sass, a superset language of
3958CSS3 that adds programming capabilities and some other syntactic sugar.")
3959 (license license:expat))))
3960
3961(define-public python-jsonpickle
3962 (package
3963 (name "python-jsonpickle")
3964 (version "4.0.0")
3965 (source (origin
3966 (method url-fetch)
3967 (uri (pypi-uri "jsonpickle" version))
3968 (sha256
3969 (base32
3970 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
3971 (build-system pyproject-build-system)
3972 (arguments
3973 (list
3974 #:test-flags
3975 ;; Prevent running the flake8 and black pytest plugins, which only tests
3976 ;; style and frequently causes harmless failures.
3977 '(list "-o" "addopts=''" "tests")
3978 #:phases
3979 '(modify-phases %standard-phases
3980 (add-before 'check 'pre-check
3981 (lambda* (#:key inputs #:allow-other-keys)
3982 (setenv "TZ" "UTC")
3983 (setenv "TZDIR"
3984 (search-input-directory inputs "share/zoneinfo")))))))
3985 (native-inputs
3986 (list python-bson
3987 python-ecdsa
3988 python-feedparser
3989 python-pymongo
3990 python-pytest
3991 python-pytest-benchmark
3992 python-pytest-cov
3993 python-pytest-enabler
3994 python-setuptools
3995 python-setuptools-scm
3996 python-simplejson
3997 python-sqlalchemy
3998 python-ujson
3999 python-wheel
4000 tzdata-for-tests))
4001 (home-page "https://jsonpickle.github.io/")
4002 (synopsis "Serialize object graphs into JSON")
4003 (description
4004 "This package provides a Python library for serializing any arbitrary
4005object graph to and from JSON.")
4006 (license license:bsd-3)))
4007
4008(define-public python-mcp
4009 (package
4010 (name "python-mcp")
4011 (version "1.25.0")
4012 (source
4013 (origin
4014 (method url-fetch)
4015 (uri (pypi-uri "mcp" version))
4016 (sha256
4017 (base32 "00k87bl4jvnh7hrmicwb2m715fwccvvlanwf8cnlwdphxdhh6can"))))
4018 (build-system pyproject-build-system)
4019 (arguments
4020 (list
4021 ;; XXX: 186 failed, 648 passed, 94 skipped, 54 errors
4022 ;; A lot of tests fail for unclear reasons.
4023 #:tests? #f))
4024 (propagated-inputs (list python-httpx python-pydantic))
4025 (native-inputs
4026 (list python-hatchling
4027 python-httpx-sse
4028 python-jsonschema
4029 python-pydantic-settings
4030 python-pytest
4031 python-pytest-examples
4032 python-pytest-xdist
4033 python-sse-starlette
4034 python-starlette
4035 python-typer
4036 python-typing-inspection
4037 python-uvicorn))
4038 (home-page "https://modelcontextprotocol.io")
4039 (synopsis "Model Context Protocol SDK")
4040 (description
4041 "This package provides a Python Software Development Kit for the Model
4042Context Protocol (MCP).")
4043 (license license:expat)))
4044
4045(define-public python-mechanicalsoup
4046 (package
4047 (name "python-mechanicalsoup")
4048 (version "1.4.0")
4049 (source
4050 (origin
4051 (method url-fetch)
4052 (uri (pypi-uri "mechanicalsoup" version))
4053 (sha256
4054 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
4055 (build-system pyproject-build-system)
4056 (arguments
4057 (list
4058 #:test-flags
4059 ;; Unclear why test fails.
4060 #~(list "-k" "not test_select_form_associated_elements")
4061 ;; The following dependencies are not directly required, the developer
4062 ;; only pinned versions because of vulnerabilities. They also break
4063 ;; sanity-check because it checks for a python-certifi version which is
4064 ;; more recent than the one available in Guix.
4065 #:phases #~(modify-phases %standard-phases
4066 (add-after 'unpack 'relax-dependencies
4067 (lambda _
4068 (substitute* "requirements.txt"
4069 (("certifi.*") "")
4070 (("urllib3.*") "")))))))
4071 (propagated-inputs
4072 (list python-beautifulsoup4 python-lxml python-requests))
4073 (native-inputs
4074 (list python-pytest
4075 python-pytest-cov
4076 python-pytest-flake8
4077 python-pytest-httpbin
4078 python-pytest-mock
4079 python-requests-mock
4080 python-setuptools
4081 python-wheel))
4082 (home-page "https://mechanicalsoup.readthedocs.io/")
4083 (synopsis "Python library for automating website interaction")
4084 (description
4085 "MechanicalSoup is a Python library for automating interaction with
4086websites. It automatically stores and sends cookies, follows redirects, and can
4087follow links and submit forms. It doesn’t do JavaScript.")
4088 (license license:expat)))
4089
4090(define-public python-hyperframe
4091 (package
4092 (name "python-hyperframe")
4093 (version "6.1.0")
4094 (source
4095 (origin
4096 (method url-fetch)
4097 (uri (pypi-uri "hyperframe" version))
4098 (sha256
4099 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
4100 (build-system pyproject-build-system)
4101 (native-inputs
4102 (list python-pytest python-setuptools))
4103 (home-page "https://github.com/python-hyper/hyperframe")
4104 (synopsis "HTTP/2 framing layer for Python")
4105 (description
4106 "This library contains the HTTP/2 framing code used in the hyper project.
4107It provides a pure-Python codebase that is capable of decoding a binary stream
4108into HTTP/2 frames.")
4109 (license license:expat)))
4110
4111(define-public python-hpack
4112 (package
4113 (name "python-hpack")
4114 (version "4.1.0")
4115 (source
4116 (origin
4117 ;; PyPI tarball is missing some files necessary for the tests.
4118 (method git-fetch)
4119 (uri (git-reference
4120 (url "https://github.com/python-hyper/hpack")
4121 (commit (string-append "v" version))))
4122 (file-name (git-file-name name version))
4123 (sha256
4124 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
4125 (build-system pyproject-build-system)
4126 (native-inputs
4127 (list python-pytest python-setuptools))
4128 (home-page "https://hyper.rtfd.org")
4129 (synopsis "Pure-Python HPACK header compression")
4130 (description
4131 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
4132for use in Python programs that implement HTTP/2.")
4133 (license license:expat)))
4134
4135(define-public python-h11
4136 (package
4137 (name "python-h11")
4138 (version "0.16.0")
4139 (source
4140 (origin
4141 (method url-fetch)
4142 (uri (pypi-uri "h11" version))
4143 (sha256
4144 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
4145 (build-system pyproject-build-system)
4146 (native-inputs
4147 (list python-pytest python-setuptools))
4148 (home-page "https://github.com/python-hyper/h11")
4149 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
4150 (description
4151 "This is a little HTTP/1.1 library written from scratch in Python, heavily
4152inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
4153code whatsoever. This means you can hook h11 up to your favorite network API,
4154and that could be anything you want.")
4155 (license license:expat)))
4156
4157(define-public python-h2
4158 (package
4159 (name "python-h2")
4160 (version "4.1.0")
4161 (source
4162 (origin
4163 (method url-fetch)
4164 (uri (pypi-uri "h2" version))
4165 (sha256
4166 (base32 "1fraip114fm1ha5w37pdc0sk8dn9pb0ck267zrwwpap7zc4clfm8"))))
4167 (build-system pyproject-build-system)
4168 (arguments
4169 (list
4170 ;; AssertionError: assert '<RemoteSettingsChanged
4171 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
4172 ;; new_value=32768)}>' == '<RemoteSettingsChanged
4173 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
4174 ;; original_value=65536, new_value=32768)}>'
4175 #:test-flags
4176 #~(list "-k"
4177 (string-join
4178 (list "not test_remotesettingschanged_repr"
4179 ;; This test exceededs the Hypothesis deadline.
4180 #$@(if (target-riscv64?)
4181 #~("test_changing_max_frame_size")
4182 #~())
4183 "test_streamreset_repr"
4184 "test_settingsacknowledged_repr"
4185 "test_connectionterminated_repr[None-None]"
4186 "test_connectionterminated_repr[some"
4187 "test_remotesettingschanged_repr"
4188 "test_streamreset_repr"
4189 "test_settingsacknowledged_repr"
4190 "test_connectionterminated_repr[None-None]"
4191 "test_connectionterminated_repr[some")
4192 " and not "))))
4193 (native-inputs
4194 (list python-pytest
4195 python-setuptools
4196 python-wheel))
4197 (propagated-inputs
4198 (list python-hpack
4199 python-hyperframe))
4200 (home-page "https://github.com/python-hyper/h2")
4201 (synopsis "HTTP/2 State-Machine based protocol implementation")
4202 (description
4203 "This module contains a pure-Python implementation of a HTTP/2 protocol
4204stack. It does not provide a parsing layer, a network layer, or any rules
4205about concurrency. Instead, it's a purely in-memory solution, defined in
4206terms of data actions and HTTP/2 frames. This is one building block of a full
4207Python HTTP implementation.")
4208 (license license:expat)))
4209
4210(define-public python-slixmpp
4211 (package
4212 (name "python-slixmpp")
4213 (version "1.8.6") ; XXX: The latest version which does not require Rust
4214 (source
4215 (origin
4216 (method git-fetch)
4217 (uri (git-reference
4218 (url "https://codeberg.org/poezio/slixmpp")
4219 (commit (string-append "slix-" version))))
4220 (file-name (git-file-name name version))
4221 (sha256
4222 (base32 "0gpy6arwyk4lsx1hbcwbllxs6qbwn58adkp1rm1cfvfrjdv5kxx7"))))
4223 (build-system pyproject-build-system)
4224 (arguments
4225 (list
4226 #:phases
4227 #~(modify-phases %standard-phases
4228 (add-after 'unpack 'patch-setup.py
4229 (lambda _
4230 (substitute* "setup.py"
4231 (("'CC', 'cc'")
4232 "'CC', 'gcc'")))))))
4233 (native-inputs
4234 (list gnupg
4235 pkg-config
4236 python-cython
4237 python-setuptools
4238 python-wheel))
4239 (inputs
4240 (list libidn
4241 python)) ; We are building a Python extension.
4242 (propagated-inputs
4243 (list python-aiodns
4244 python-aiohttp
4245 python-cryptography
4246 python-defusedxml
4247 python-emoji
4248 python-pyasn1
4249 python-pyasn1-modules))
4250 (home-page "https://lab.louiz.org/poezio/slixmpp")
4251 (synopsis "XMPP library without threads")
4252 (description
4253 "Slixmpp is a XMPP library for Python 3.7+. It is a fork of SleekXMPP.
4254Its goal is to only rewrite the core of the library (the low level socket
4255handling, the timers, the events dispatching) in order to remove all
4256threads.")
4257 (license license:expat)))
4258
4259(define-public python-sockjs-tornado
4260 (package
4261 (name "python-sockjs-tornado")
4262 (version "1.0.6")
4263 (source
4264 (origin
4265 (method git-fetch)
4266 (uri (git-reference
4267 (url "https://github.com/mrjoes/sockjs-tornado/")
4268 (commit (string-append "v" version))))
4269 (file-name (git-file-name name version))
4270 (sha256
4271 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
4272 (build-system pyproject-build-system)
4273 (arguments
4274 (list
4275 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
4276 (native-inputs (list python-setuptools))
4277 (propagated-inputs (list python-tornado))
4278 (home-page "https://github.com/mrjoes/sockjs-tornado/")
4279 (synopsis
4280 "SockJS Python server implementation on top of the Tornado framework")
4281 (description
4282 "SockJS-tornado provides the server-side counterpart to a SockJS client
4283library, through the Tornado framework.
4284
4285SockJS provides a low-latency, full-duplex, cross-domain communication channel
4286between a web browser and web server.")
4287 (license license:expat)))
4288
4289(define-public python-flask-assets
4290 ;; The latest release still depends on the abandoned flask-script, whereas
4291 ;; at this later commit (already 2 years old at the time of this writing)
4292 ;; the dependency has been lifted.
4293 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
4294 (revision "1"))
4295 (package
4296 (name "python-flask-assets")
4297 (version (git-version "2.1.0" revision commit))
4298 (source
4299 (origin
4300 (method git-fetch)
4301 (uri (git-reference
4302 (url "https://github.com/miracle2k/flask-assets/")
4303 (commit commit)))
4304 (file-name (git-file-name name version))
4305 (sha256
4306 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
4307 (build-system pyproject-build-system)
4308 (propagated-inputs
4309 (list python-flask python-webassets))
4310 (native-inputs
4311 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
4312 (home-page "https://github.com/miracle2k/flask-assets")
4313 (synopsis "Asset management for Flask")
4314 (description "This package integrates @code{webassets} with Flask, adding
4315support for merging, minifying and compiling CSS and Javascript files.")
4316 (license license:bsd-2))))
4317
4318(define-public python-flask-babel
4319 (package
4320 (name "python-flask-babel")
4321 (version "4.0.0")
4322 (source
4323 (origin
4324 (method git-fetch) ;no tests in pypi release
4325 (uri (git-reference
4326 (url "https://github.com/python-babel/flask-babel")
4327 (commit (string-append "v" version))))
4328 (sha256
4329 (base32
4330 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
4331 (build-system pyproject-build-system)
4332 (native-inputs
4333 (list python-poetry-core
4334 python-pytest
4335 python-pytest-cov
4336 python-pytest-mock))
4337 (propagated-inputs
4338 (list python-babel
4339 python-flask
4340 python-jinja2
4341 python-pytz))
4342 (home-page "https://github.com/python-babel/flask-babel")
4343 (synopsis "Add i18n/l10n support to Flask applications")
4344 (description "This package implements internationalization and localization
4345support for Flask. This is based on the Python babel module as well as pytz -
4346both of which are installed automatically if you install this library.")
4347 (license license:bsd-3)))
4348
4349(define-public python-flask-cors
4350 (package
4351 (name "python-flask-cors")
4352 (version "6.0.2")
4353 (source
4354 (origin
4355 (method git-fetch) ;no tests in PyPI archive
4356 (uri (git-reference
4357 (url "https://github.com/CoryDolphin/flask-cors")
4358 (commit version)))
4359 (file-name (git-file-name name version))
4360 (sha256
4361 (base32 "02y740h951dscgkm7ghsss1bc0m8ymsfdpsimm1j0nkl0zjl6sgm"))))
4362 (build-system pyproject-build-system)
4363 (arguments
4364 (list
4365 #:phases
4366 #~(modify-phases %standard-phases
4367 (add-after 'unpack 'fix-version
4368 (lambda _
4369 ;; Otherwise sanity-check of dependents will fail.
4370 (substitute* "pyproject.toml"
4371 (("version = \"0\\.0\\.1\"" all)
4372 (string-append "version = \"" #$version "\""))))))))
4373 (native-inputs
4374 (list python-pytest
4375 python-setuptools))
4376 (propagated-inputs
4377 (list python-flask
4378 python-werkzeug))
4379 (home-page "https://flask-cors.readthedocs.io/en/latest/")
4380 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
4381 (description
4382 "This package provides a Flask extension for handling @acronym{CORS,Cross
4383Origin Resource Sharing}, making cross-origin AJAX possible.")
4384 (license license:expat)))
4385
4386(define-public python-flask-markdown
4387 (package
4388 (name "python-flask-markdown")
4389 (version "0.3")
4390 (source
4391 (origin
4392 (method git-fetch)
4393 (uri (git-reference
4394 (url "https://github.com/dcolish/flask-markdown")
4395 (commit version)))
4396 (file-name (git-file-name name version))
4397 (sha256
4398 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
4399 (build-system pyproject-build-system)
4400 (arguments
4401 (list
4402 #:tests? #f ;Tests seem to be incompatible with latest python
4403 #:phases
4404 #~(modify-phases %standard-phases
4405 (add-after 'unpack 'set-version
4406 (lambda _
4407 (substitute* "setup.py"
4408 (("dev")
4409 #$version)))))))
4410 (propagated-inputs (list python-markdown python-flask))
4411 (native-inputs (list python-pynose python-setuptools))
4412 (home-page "https://github.com/dcolish/flask-markdown")
4413 (synopsis "Small extension to help with using Markdown in Flask")
4414 (description
4415 "Flask-Markdown supports several extensions for Markdown and integrates
4416into Jinja2 by default.")
4417 (license license:bsd-3)))
4418
4419(define-public python-flask-session
4420 (package
4421 (name "python-flask-session")
4422 (version "0.8.0")
4423 (source
4424 (origin
4425 (method url-fetch)
4426 (uri (pypi-uri "flask_session" version))
4427 (sha256
4428 (base32
4429 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
4430 (build-system pyproject-build-system)
4431 (arguments
4432 '(#:tests? #f)) ; Tests require the various storage backends to be present
4433 (native-inputs (list python-flit-core))
4434 (propagated-inputs
4435 (list python-cachelib python-flask python-msgspec))
4436 (home-page "https://github.com/pallets-eco/flask-session")
4437 (synopsis "Adds server-side session support to your Flask application")
4438 (description
4439 "Flask-Session is an extension for Flask that adds support for
4440Server-side sessions, with a variety of different backends for session
4441storage.")
4442 (license license:bsd-3)))
4443
4444(define-public python-html5lib
4445 (package
4446 (name "python-html5lib")
4447 (version "1.1")
4448 (source
4449 (origin
4450 (method url-fetch)
4451 (uri (pypi-uri "html5lib" version))
4452 (sha256
4453 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
4454 (build-system pyproject-build-system)
4455 (arguments
4456 '(#:tests? #f)) ;tests depend on dated pytest-expect
4457 (native-inputs
4458 (list python-setuptools))
4459 (propagated-inputs
4460 (list python-six
4461 python-webencodings
4462 ;; Required by Calibre 5.
4463 python-chardet))
4464 (home-page "https://github.com/html5lib/html5lib-python")
4465 (synopsis "Python HTML parser based on the WHATWG HTML specification")
4466 (description
4467 "Html5lib is an HTML parser based on the WHATWG HTML specification
4468and written in Python.")
4469 (license license:expat)))
4470
4471(define-public python-html5-parser
4472 (package
4473 (name "python-html5-parser")
4474 (version "0.4.12")
4475 (source
4476 (origin
4477 (method git-fetch)
4478 (uri (git-reference
4479 (url "https://github.com/kovidgoyal/html5-parser")
4480 (commit (string-append "v" version))))
4481 (file-name (git-file-name name version))
4482 (sha256
4483 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
4484 (build-system pyproject-build-system)
4485 (arguments
4486 (list
4487 #:phases
4488 #~(modify-phases %standard-phases
4489 (add-before 'build 'set-configure-flags
4490 (lambda _
4491 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
4492 (native-inputs (list pkg-config python-setuptools))
4493 (inputs (list libxml2))
4494 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
4495 (home-page "https://html5-parser.readthedocs.io")
4496 (synopsis "Fast C-based HTML5 parsing for Python")
4497 (description
4498 "This package provides a fast implementation of the HTML5 parsing spec
4499for Python. Parsing is done in C using a variant of the gumbo parser. The
4500gumbo parse tree is then transformed into an lxml tree, also in C, yielding
4501parse times that can be a thirtieth of the html5lib parse times.")
4502 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
4503 ;; indicate ASL2.0, including the LICENSE file for the whole project.
4504 (license (list license:asl2.0 license:gpl3))))
4505
4506(define-public python-html5tagger
4507 (package
4508 (name "python-html5tagger")
4509 (version "1.3.0")
4510 (source (origin
4511 (method url-fetch)
4512 (uri (pypi-uri "html5tagger" version))
4513 (sha256
4514 (base32
4515 "1acd1a4f66gi4plqnsml7cf33qp83mxsnmnqpdwkpj7597xkvyl4"))))
4516 (build-system pyproject-build-system)
4517 (arguments
4518 (list #:tests? #f)) ;no tests in PyPI or Git
4519 (native-inputs
4520 (list python-setuptools python-setuptools-scm python-wheel))
4521 (home-page "https://github.com/sanic-org/html5tagger")
4522 (synopsis "Create HTML documents from Python")
4523 (description
4524 "@code{html5tagger} provides a simplified HTML5 syntax that can
4525be written directly in Python without templates.")
4526 (license license:unlicense)))
4527
4528(define-public python-minio
4529 (package
4530 (name "python-minio")
4531 (version "7.1.9")
4532 (source
4533 (origin
4534 (method git-fetch)
4535 (uri (git-reference
4536 (url "https://github.com/minio/minio-py")
4537 (commit version)))
4538 (file-name (git-file-name name version))
4539 (sha256
4540 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
4541 (build-system pyproject-build-system)
4542 (arguments
4543 (list
4544 #:test-flags
4545 ;; XXX: requires network access.
4546 #~(list "--ignore=tests/unit/credentials_test.py")))
4547 (native-inputs (list python-pytest python-setuptools))
4548 (propagated-inputs
4549 (list python-certifi python-dateutil python-pytz python-urllib3))
4550 (home-page "https://github.com/minio/minio-py")
4551 (synopsis "Programmatically access Amazon S3 from Python")
4552 (description
4553 "This package provides a Python library for interacting with any
4554Amazon S3 compatible object storage server.")
4555 (license license:asl2.0)))
4556
4557(define-public python-pycurl
4558 (package
4559 (name "python-pycurl")
4560 (version "7.45.4")
4561 (source
4562 (origin
4563 (method git-fetch)
4564 (uri (git-reference
4565 (url "https://github.com/pycurl/pycurl")
4566 (commit (string-append
4567 "REL_" (string-replace-substring version "." "_")))))
4568 (file-name (git-file-name name version))
4569 (sha256
4570 (base32 "00cd1l0lsml0708hpv5k4qyhqfv0qphb0p317j9aci2wdspn1mpl"))))
4571 (build-system pyproject-build-system)
4572 (arguments
4573 '(#:test-flags
4574 ;; The test suite is not thread safe:
4575 ;; - some tests want to use the same port: address already in use
4576 ;; - some tests use signal.Signal, i.e. main-thread only
4577 (list "-k" (string-append
4578 ;; Disable hanginging tests
4579 "not test_multi_socket_select"
4580 ;; E assert None is not None
4581 ;; E+ where None =
4582 ;; <tests.multi_callback_test.MultiCallbackTest
4583 ;; testMethod=test_multi_socket_action>.timer_result
4584 " and not test_multi_socket_action"
4585 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
4586 ;; open shared object file: No such file or directory
4587 " and not test_libcurl_ssl_gnutls"
4588 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
4589 ;; open shared object file: No such file or directory
4590 " and not test_libcurl_ssl_nss"
4591 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
4592 ;; open shared object file: No such file or directory
4593 " and not test_libcurl_ssl_openssl"
4594 ;; Probably due to an expired CA
4595 " and not test_request_without_certinfo"
4596 ;; "A libcurl function was given a bad argument"
4597 " and not test_proxy_tlsauth"))
4598 #:phases (modify-phases %standard-phases
4599 (add-before 'build 'configure-tls-backend
4600 (lambda _
4601 ;; XXX: PycURL fails to automatically determine which
4602 ;; TLS backend to use when cURL is built with
4603 ;; --disable-static. See setup.py and
4604 ;; <https://github.com/pycurl/pycurl/pull/147>.
4605 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
4606 (native-inputs
4607 (list python-bottle
4608 python-flaky
4609 python-flask
4610 python-pytest
4611 python-setuptools
4612 python-wheel))
4613 (inputs
4614 (list curl gnutls))
4615 (home-page "http://pycurl.io/")
4616 (synopsis "Lightweight Python wrapper around libcurl")
4617 (description "Pycurl is a lightweight wrapper around libcurl. It provides
4618high-speed transfers via libcurl and frequently outperforms alternatives.")
4619
4620 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
4621 ;; under the terms of LGPLv2.1+ or Expat.
4622 (license (list license:lgpl2.1+ license:expat))))
4623
4624(define-public python-stamina
4625 (package
4626 (name "python-stamina")
4627 (version "25.2.0")
4628 (source
4629 (origin
4630 (method git-fetch)
4631 (uri (git-reference
4632 (url "https://github.com/hynek/stamina")
4633 (commit version)))
4634 (file-name (git-file-name name version))
4635 (sha256
4636 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
4637 (build-system pyproject-build-system)
4638 (native-inputs
4639 (list python-pytest
4640 python-anyio
4641 python-dirty-equals
4642 python-hatch-fancy-pypi-readme
4643 python-hatch-vcs
4644 python-hatchling
4645 python-structlog))
4646 (propagated-inputs
4647 (list python-tenacity
4648 python-typing-extensions))
4649 (home-page "https://github.com/hynek/stamina")
4650 (synopsis "Retries library for Python")
4651 (description
4652 "@code{stamina} is an opinionated wrapper around the
4653@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
4654 (license license:expat)))
4655
4656(define-public python-stripe
4657 (package
4658 (name "python-stripe")
4659 (version "13.2.0")
4660 (source
4661 (origin
4662 (method git-fetch)
4663 (uri (git-reference
4664 (url "https://github.com/stripe/stripe-python")
4665 (commit (string-append "v" version))))
4666 (file-name (git-file-name name version))
4667 (sha256
4668 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
4669 (build-system pyproject-build-system)
4670 (arguments
4671 '(#:tests? #f)) ;; tests require network
4672 (native-inputs
4673 (list python-flit-core))
4674 (propagated-inputs
4675 (list python-httpx
4676 python-requests))
4677 (home-page "https://github.com/stripe/stripe-python")
4678 (synopsis "Python bindings for the Stripe financial services' API")
4679 (description "This package provides access to the Stripe financial
4680services' API. It includes a pre-defined set of classes for API resources
4681that initialize themselves dynamically from API responses which makes it
4682compatible with a wide range of versions of the Stripe API.")
4683 (license license:expat)))
4684
4685(define-public python-stripe-12
4686 (hidden-package
4687 (package/inherit python-stripe
4688 (name "python-stripe")
4689 (version "12.5.1")
4690 (source
4691 (origin
4692 (inherit (package-source python-stripe))
4693 (uri (git-reference
4694 (url "https://github.com/stripe/stripe-python")
4695 (commit (string-append "v" version))))
4696 (file-name (git-file-name name version))
4697 (sha256 (base32
4698 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
4699 (native-inputs
4700 (list python-setuptools)))))
4701
4702(define-public python-tldextract
4703 (package
4704 (name "python-tldextract")
4705 (version "5.3.0")
4706 (source
4707 (origin
4708 (method url-fetch)
4709 (uri (pypi-uri "tldextract" version))
4710 (sha256
4711 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
4712 (build-system pyproject-build-system)
4713 (arguments
4714 (list
4715 #:phases
4716 #~(modify-phases %standard-phases
4717 (add-after 'unpack 'relax-requirements
4718 (lambda _
4719 (substitute* "pyproject.toml"
4720 (("\"requests-file.*\",")
4721 "\"requests-file\",")))))))
4722 (native-inputs
4723 (list nss-certs-for-test
4724 python-pytest
4725 python-pytest-mock
4726 python-responses
4727 python-setuptools
4728 python-setuptools-scm
4729 python-syrupy))
4730 (propagated-inputs
4731 (list python-filelock
4732 python-idna
4733 python-requests
4734 python-requests-file))
4735 (home-page "https://github.com/john-kurkowski/tldextract")
4736 (synopsis
4737 "Separate the TLD from the registered domain and subdomains of a URL")
4738 (description
4739 "TLDExtract accurately separates the TLD from the registered domain and
4740subdomains of a URL, using the Public Suffix List. By default, this includes
4741the public ICANN TLDs and their exceptions. It can optionally support the
4742Public Suffix List's private domains as well.")
4743 (license license:bsd-3)))
4744
4745(define-public python-tracerite
4746 (package
4747 (name "python-tracerite")
4748 (version "1.1.3")
4749 (source
4750 (origin
4751 (method url-fetch)
4752 (uri (pypi-uri "tracerite" version))
4753 (sha256
4754 (base32 "07mkg0sl0h335kj6yjvxki2c19gxhb7rkks1zgzh7aj0y83c17qi"))))
4755 (build-system pyproject-build-system)
4756 (arguments
4757 (list #:tests? #f)) ;no tests in PyPI or Git
4758 (native-inputs
4759 (list python-setuptools
4760 python-setuptools-scm))
4761 (propagated-inputs
4762 (list python-html5tagger))
4763 (home-page "https://github.com/sanic-org/tracerite")
4764 (synopsis "Human-readable HTML tracebacks")
4765 (description
4766 "@code{tracerite} converts Python tracebacks into useful error messages
4767in human-readable HTML format.")
4768 (license license:unlicense)))
4769
4770(define-public python-trio-websocket
4771 (package
4772 (name "python-trio-websocket")
4773 (version "0.12.2")
4774 (source
4775 (origin
4776 (method git-fetch)
4777 (uri (git-reference
4778 (url "https://github.com/HyperionGray/trio-websocket")
4779 (commit version)))
4780 (file-name (git-file-name name version))
4781 (sha256
4782 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
4783 (build-system pyproject-build-system)
4784 (native-inputs
4785 (list python-pytest
4786 python-pytest-trio
4787 python-setuptools
4788 python-trustme))
4789 (propagated-inputs
4790 (list python-outcome
4791 python-trio
4792 python-wsproto))
4793 (home-page "https://github.com/HyperionGray/trio-websocket")
4794 (synopsis "WebSocket library for Trio")
4795 (description "This library implements both server and client aspects of
4796the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
4797striving for safety, correctness, and ergonomics. It is based on the
4798@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
4799@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
4800the majority of the WebSocket protocol, including framing, codecs, and events.
4801This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
4802the Trio framework}.")
4803 (license license:expat)))
4804
4805(define-public python-txacme
4806 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
4807 ;; compatibility with twisted, use the latest commit from trunk branch.
4808 ;;
4809 ;;See: <https://github.com/twisted/txacme/issues/165>.
4810 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
4811 (revision "0"))
4812 (package
4813 (name "python-txacme")
4814 (version (git-version "0.9.3" revision commit))
4815 (source
4816 (origin
4817 (method git-fetch) ;no fresh release in PyPI
4818 (uri (git-reference
4819 (url "https://github.com/twisted/txacme")
4820 (commit commit)))
4821 (file-name (git-file-name name version))
4822 (sha256
4823 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
4824 (build-system pyproject-build-system)
4825 (arguments
4826 (list #:test-backend #~'custom
4827 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
4828 (native-inputs
4829 (list python-setuptools))
4830 (propagated-inputs
4831 (list python-acme
4832 python-attrs
4833 python-eliot
4834 python-josepy
4835 python-pem
4836 python-treq
4837 python-twisted
4838 python-txsni))
4839 (home-page "https://github.com/twisted/txacme")
4840 (synopsis "Twisted implexmentation of the ACME protocol")
4841 (description
4842 "ACME is Automatic Certificate Management Environment, a protocol that
4843allows clients and certificate authorities to automate verification and
4844certificate issuance. The ACME protocol is used by the free Let's Encrypt
4845Certificate Authority.
4846
4847txacme is an implementation of the protocol for Twisted, the event-driven
4848networking engine for Python.")
4849 (license license:expat))))
4850
4851(define-public python-txaio
4852 (package
4853 (name "python-txaio")
4854 (version "25.9.2")
4855 (source
4856 (origin
4857 (method url-fetch)
4858 (uri (pypi-uri "txaio" version))
4859 (sha256
4860 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
4861 (build-system pyproject-build-system)
4862 (native-inputs
4863 (list python-pytest
4864 python-setuptools))
4865 (home-page "https://github.com/crossbario/txaio")
4866 (synopsis "Compatibility layer between Python asyncio and Twisted")
4867 (description
4868 "Txaio provides a compatibility layer between the Python @code{asyncio}
4869 bsmodule and @code{Twisted}.")
4870 (license license:expat)))
4871
4872;; XXX: Potentially abandonware since 2017, consider to remove when nothing
4873;; depends on it or fails to build.
4874(define-public python-txamqp
4875 (package
4876 (name "python-txamqp")
4877 (version "0.8.2")
4878 (source
4879 (origin
4880 (method url-fetch)
4881 (uri (pypi-uri "txAMQP" version))
4882 (sha256
4883 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
4884 (build-system pyproject-build-system)
4885 (arguments
4886 (list #:tests? #f)) ;all tests failed
4887 (native-inputs
4888 (list python-setuptools))
4889 (propagated-inputs
4890 (list python-six python-twisted))
4891 (home-page "https://github.com/txamqp/txamqp")
4892 (synopsis "Communicate with AMQP peers and brokers using Twisted")
4893 (description
4894 "This package provides a Python library for communicating with AMQP peers
4895and brokers using the asynchronous networking framework Twisted. It contains
4896all the necessary code to connect, send and receive messages to/from an
4897AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
4898also includes support for using Thrift RPC over AMQP in Twisted
4899applications.")
4900 (license license:asl2.0)))
4901
4902(define-public python-txsni
4903 (package
4904 (name "python-txsni")
4905 (version "0.2.0")
4906 (source
4907 (origin
4908 (method git-fetch)
4909 (uri (git-reference
4910 (url "https://github.com/glyph/txsni")
4911 (commit (string-append "v" version))))
4912 (file-name (git-file-name name version))
4913 (sha256
4914 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
4915 (build-system pyproject-build-system)
4916 (arguments
4917 (list #:test-backend #~'custom
4918 #:test-flags #~(list "-m" "twisted.trial"
4919 "--temp-directory=/tmp/_trial_temp"
4920 "txsni")))
4921 (native-inputs
4922 (list python-setuptools))
4923 (propagated-inputs
4924 (list python-pyopenssl
4925 python-service-identity
4926 python-twisted))
4927 (home-page "https://github.com/glyph/txsni")
4928 (synopsis "Run TLS servers with Twisted")
4929 (description
4930 "This package provides an easy-to-use SNI endpoint for use with the
4931Twisted web framework.")
4932 (license license:expat)))
4933
4934(define-public python-txtorcon
4935 (package
4936 (name "python-txtorcon")
4937 (version "24.8.0")
4938 (source
4939 (origin
4940 (method url-fetch)
4941 (uri (pypi-uri "txtorcon" version))
4942 (sha256
4943 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
4944 (build-system pyproject-build-system)
4945 (native-inputs
4946 (list python-pytest
4947 python-setuptools
4948 python-wheel))
4949 (inputs
4950 (list lsof))
4951 (propagated-inputs
4952 (list python-automat
4953 python-idna
4954 python-incremental
4955 python-pyopenssl
4956 python-service-identity
4957 python-twisted
4958 python-zope-interface))
4959 (home-page "https://github.com/meejah/txtorcon")
4960 (synopsis "Twisted-based Tor controller client")
4961 (description
4962 "This package provides a Twisted-based Tor controller client,with
4963state-tracking and configuration abstractions.")
4964 (license license:expat)))
4965
4966(define-public python-url-normalize
4967 (package
4968 (name "python-url-normalize")
4969 (version "2.2.1")
4970 (source
4971 (origin
4972 (method git-fetch) ; no tests in PyPI release
4973 (uri (git-reference
4974 (url "https://github.com/niksite/url-normalize")
4975 (commit (string-append "v" version))))
4976 (file-name (git-file-name name version))
4977 (sha256
4978 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
4979 (build-system pyproject-build-system)
4980 (arguments
4981 (list
4982 #:test-flags #~(list "--ignore=tests/test_cli.py")))
4983 (native-inputs
4984 (list python-pytest
4985 python-pytest-cov
4986 python-pytest-socket
4987 python-setuptools))
4988 (propagated-inputs
4989 (list python-idna))
4990 (home-page "https://github.com/niksite/url-normalize")
4991 (synopsis "URL normalization for Python")
4992 (description
4993 "This package provides a URI Normalization function with following
4994features:
4995@itemize
4996@item take care of IDN domains
4997@item always provide the URI scheme in lowercase characters
4998@item always provide the host, if any, in lowercase characters
4999@item only perform percent-encoding where it is essential
5000@item always use uppercase A-through-F characters when percent-encoding
5001@item prevent dot-segments appearing in non-relative URI paths
5002@item for schemes that define a default authority, use an empty authority if
5003the default is desired
5004@item for schemes that define an empty path to be equivalent to a path of
5005@code{/}, use @code{/}
5006@item for schemes that define a port, use an empty port if the default is
5007desired
5008@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
5009@end itemize")
5010 (license license:expat)))
5011
5012(define-public python-waitress
5013 (package
5014 (name "python-waitress")
5015 (version "3.0.2")
5016 (source
5017 (origin
5018 (method url-fetch)
5019 (uri (pypi-uri "waitress" version))
5020 (sha256
5021 (base32
5022 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
5023 (build-system pyproject-build-system)
5024 (arguments
5025 ;; https://github.com/Pylons/waitress/issues/443
5026 (list #:test-flags #~(list "-k" "not test_service_port")))
5027 (native-inputs
5028 (list python-pytest
5029 python-pytest-cov
5030 python-setuptools))
5031 (home-page "https://github.com/Pylons/waitress")
5032 (synopsis "Waitress WSGI server")
5033 (description
5034 "Waitress is meant to be a production-quality pure-Python WSGI server
5035with very acceptable performance.")
5036 (license license:zpl2.1)))
5037
5038(define-public python-weasel
5039 (package
5040 (name "python-weasel")
5041 (version "0.4.1")
5042 (source
5043 (origin
5044 (method url-fetch)
5045 (uri (pypi-uri "weasel" version))
5046 (sha256
5047 (base32 "1aas113r29y6yxrmdlsw80rj8w4kgw1jhfjw9rsgc4rf0w7j3g5a"))))
5048 (build-system pyproject-build-system)
5049 (arguments
5050 (list
5051 #:test-flags
5052 ;; Network access is required.
5053 #~(list #$@(map (lambda (test) (string-append "--deselect="
5054 "weasel/tests/cli/"
5055 test))
5056 (list "test_cli.py::test_project_git_dir_asset"
5057 "test_cli.py::test_project_git_file_asset"
5058 "test_cli_app.py::test_project_assets")))))
5059 (native-inputs
5060 (list python-pytest
5061 python-setuptools))
5062 (propagated-inputs
5063 (list python-cloudpathlib
5064 python-confection
5065 python-packaging
5066 python-pydantic
5067 python-requests
5068 python-smart-open
5069 python-srsly
5070 python-typer
5071 python-wasabi))
5072 (home-page "https://github.com/explosion/weasel/")
5073 (synopsis "Small and easy workflow system")
5074 (description
5075 "This package provides a minimalistic workflow system to manage and
5076share end-to-end workflows for different use cases and domains.")
5077 (license license:expat)))
5078
5079(define-public python-webencodings
5080 (package
5081 (name "python-webencodings")
5082 (version "0.5.1")
5083 (source
5084 (origin
5085 (method url-fetch)
5086 (uri (pypi-uri "webencodings" version))
5087 (sha256
5088 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
5089 (build-system pyproject-build-system)
5090 (arguments
5091 (list #:test-flags #~(list "webencodings/tests.py")))
5092 (native-inputs
5093 (list python-pytest python-setuptools))
5094 (home-page "https://github.com/SimonSapin/python-webencodings")
5095 (synopsis "Character encoding aliases for legacy web content")
5096 (description
5097 "In order to be compatible with legacy web content when interpreting
5098something like @code{Content-Type: text/html; charset=latin1}, tools need to
5099use a particular set of aliases for encoding labels as well as some overriding
5100rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
5101actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
5102BOM takes precedence over any other encoding declaration. The WHATWG
5103@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
5104details so that implementations do not have to reverse-engineer each other.
5105
5106This module implements the Encoding standard and has encoding labels and BOM
5107detection, but the actual implementation for encoders and decoders is
5108Python’s.")
5109 (license license:bsd-3)))
5110
5111(define-public python-omnipath
5112 (package
5113 (name "python-omnipath")
5114 (version "1.0.10")
5115 (source
5116 (origin
5117 (method git-fetch)
5118 (uri (git-reference
5119 (url "https://github.com/saezlab/omnipath/")
5120 (commit (string-append "v" version))))
5121 (file-name (git-file-name name version))
5122 (sha256
5123 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
5124 (build-system pyproject-build-system)
5125 (arguments
5126 (list
5127 #:test-flags '(list "-k"
5128 (string-append
5129 ;; These require internet access
5130 "not test_download_homologene"
5131 " and not test_complex_genes"))
5132 #:phases
5133 #~(modify-phases %standard-phases
5134 (add-after 'unpack 'set-home
5135 (lambda _
5136 (setenv "HOME" "/tmp"))))))
5137 (propagated-inputs (list python-attrs
5138 python-docrep
5139 python-inflect
5140 python-networkx
5141 python-packaging
5142 python-pandas
5143 python-requests
5144 python-tqdm
5145 python-typing-extensions
5146 python-urllib3
5147 python-wrapt))
5148 (native-inputs (list nss-certs-for-test
5149 python-bump2version
5150 python-hatchling
5151 python-pytest
5152 python-pytest-mock
5153 python-pytest-socket
5154 python-requests-mock))
5155 (home-page "https://omnipathdb.org/")
5156 (synopsis "Python client for the OmniPath web service")
5157 (description "This package provides a Python client for the OmniPath web
5158service.")
5159 (license license:expat)))
5160
5161(define-public python-openai
5162 (package
5163 (name "python-openai")
5164 (version "1.3.5")
5165 (source (origin
5166 (method git-fetch)
5167 (uri (git-reference
5168 (url "https://github.com/openai/openai-python")
5169 (commit (string-append "v" version))))
5170 (file-name (git-file-name name version))
5171 (sha256
5172 (base32
5173 "0k1rwhj7v22x5bnv9xbk9nj9grxqmmclh9538qqjadgqxfn5x74q"))))
5174 (build-system pyproject-build-system)
5175 (arguments
5176 (list
5177 #:test-flags
5178 ;; These require internet access and an openai API key.
5179 '(list "--ignore=openai/tests/asyncio/test_endpoints.py"
5180 "--ignore=openai/tests/test_endpoints.py"
5181 "--ignore-glob=tests/api_resources/*"
5182 ;; Needs respx
5183 "--ignore=tests/api_resources/audio/test_speech.py"
5184 "--ignore=tests/api_resources/test_files.py"
5185 "--ignore=tests/test_client.py"
5186 "-k" "not test_requestor_cycle_sessions\
5187 and not test_requestor_sets_request_id\
5188 and not test_file_cli\
5189 and not test_basic_async\
5190 and not test_async\
5191 and not test_datetime_with_alias\
5192 and not test_pydantic")
5193 #:phases
5194 '(modify-phases %standard-phases
5195 (add-after 'unpack 'relax-requirements
5196 (lambda _
5197 (substitute* "pyproject.toml"
5198 (("distro>=1.7.0") "distro>=1.6.0")
5199 (("anyio>=3.5.0, <4") "anyio"))))
5200 (add-after 'unpack 'httpx-compatibility
5201 (lambda _
5202 (substitute* "src/openai/_base_client.py"
5203 (("proxies=proxies,") "")
5204 (("self._proxies = proxies") "")
5205 (("proxies: ProxiesTypes . None,") "")))))))
5206 (propagated-inputs
5207 (list python-aiohttp
5208 python-distro
5209 python-httpx
5210 python-pydantic
5211 python-requests
5212 python-tqdm
5213 python-typing-extensions))
5214 (native-inputs (list nss-certs-for-test
5215 python-dirty-equals
5216 python-hatchling
5217 python-pytest python-pytest-asyncio
5218 python-pytest-mock python-setuptools python-wheel))
5219 (home-page "https://github.com/openai/openai-python")
5220 (synopsis "Python client library for the OpenAI API")
5221 (description "This package provides a Python client library for the
5222OpenAI API.")
5223 (license license:expat)))
5224
5225(define-public python-openapi-schema-validator
5226 (package
5227 (name "python-openapi-schema-validator")
5228 (version "0.6.2")
5229 (source
5230 (origin
5231 (method git-fetch) ;no tests in pypi release
5232 (uri (git-reference
5233 (url "https://github.com/p1c2u/openapi-schema-validator")
5234 (commit version)))
5235 (file-name (git-file-name name version))
5236 (sha256
5237 (base32
5238 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
5239 (build-system pyproject-build-system)
5240 (arguments
5241 (list
5242 #:test-flags
5243 ;; This one returns 5 instead of 4 elements
5244 '(list "-k" "not test_array_prefixitems_invalid")
5245 #:phases
5246 #~(modify-phases %standard-phases
5247 (add-after 'unpack 'remove-coverage-pytest-options
5248 (lambda _
5249 (substitute* "pyproject.toml"
5250 (("^--cov.*") ""))))
5251 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
5252 (add-after 'unpack 'relax-requirements
5253 (lambda _
5254 (substitute* "pyproject.toml"
5255 (("jsonschema-specifications.*")
5256 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
5257 (native-inputs (list python-poetry-core python-pytest))
5258 (propagated-inputs
5259 (list python-isodate
5260 python-jsonschema
5261 python-rfc3339-validator
5262 python-strict-rfc3339))
5263 (home-page "https://github.com/p1c2u/openapi-schema-validator")
5264 (synopsis "OpenAPI schema validation library for Python")
5265 (description "Openapi-schema-validator is a Python library that validates
5266a schema against:
5267@itemize
5268@item OpenAPI Schema Specification v3.0 which is an extended subset of the
5269JSON Schema Specification Wright Draft 00.
5270@item OpenAPI Schema Specification v3.1 which is an extended superset of the
5271JSON Schema Specification Draft 2020-12.
5272@end itemize")
5273 (license license:bsd-3)))
5274
5275(define-public python-openapi-spec-validator
5276 (package
5277 (name "python-openapi-spec-validator")
5278 (version "0.7.1")
5279 (source
5280 (origin
5281 (method git-fetch) ;no tests in pypi release
5282 (uri (git-reference
5283 (url "https://github.com/p1c2u/openapi-spec-validator")
5284 (commit version)))
5285 (file-name (git-file-name name version))
5286 (sha256
5287 (base32
5288 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
5289 (build-system pyproject-build-system)
5290 (arguments
5291 (list
5292 ;; These tests attempt to fetch resources from the Internet
5293 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
5294 "-k" "not example")
5295 #:phases
5296 #~(modify-phases %standard-phases
5297 (add-after 'unpack 'remove-coverage-pytest-options
5298 (lambda _
5299 (substitute* "pyproject.toml"
5300 (("^--cov.*") "")))))))
5301 (native-inputs
5302 (list python-poetry-core
5303 python-pytest))
5304 (propagated-inputs
5305 (list python-jsonschema
5306 python-jsonschema-path
5307 python-lazy-object-proxy
5308 python-openapi-schema-validator
5309 python-pyyaml
5310 python-requests
5311 python-setuptools))
5312 (home-page "https://github.com/p1c2u/openapi-spec-validator")
5313 (synopsis "OpenAPI spec validator")
5314 (description "OpenAPI Spec Validator is a Python library that validates an
5315OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
53163.0 and OpenAPI 3.1 specifications. The validator aims to check for full
5317compliance with the specification.")
5318 (license license:asl2.0)))
5319
5320(define-public python-openapi-core
5321 (package
5322 (name "python-openapi-core")
5323 (version "0.19.4")
5324 (source
5325 (origin
5326 (method git-fetch)
5327 (uri (git-reference
5328 (url "https://github.com/p1c2u/openapi-core")
5329 (commit version)))
5330 (file-name (git-file-name name version))
5331 (sha256
5332 (base32
5333 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
5334 (build-system pyproject-build-system)
5335 (arguments
5336 (list
5337 #:test-flags
5338 '(list "tests/unit"
5339 ;; Ignore Pytest configuration in setup.cfg that adds
5340 ;; unwanted flake8 and coverage options.
5341 "-c" "/dev/null"
5342 "-k" "not test_chars_valid")))
5343 (native-inputs (list python-django
5344 python-falcon
5345 python-flask
5346 python-mock
5347 python-poetry-core
5348 python-pytest
5349 python-responses))
5350 (propagated-inputs
5351 (list python-attrs
5352 python-aiohttp
5353 python-isodate
5354 python-jsonschema
5355 python-lazy-object-proxy
5356 python-more-itertools
5357 python-openapi-schema-validator
5358 python-openapi-spec-validator
5359 python-parse
5360 python-six
5361 python-werkzeug))
5362 (home-page "https://github.com/p1c2u/openapi-core")
5363 (synopsis "OpenAPI core library")
5364 (description "Openapi-core is a Python library that adds client-side and
5365server-side support for the OpenAPI Specification v3. It has features such
5366as:
5367@itemize
5368@item Validation of requests and responses
5369@item Schema casting and unmarshalling
5370@item Media type and parameters deserialization
5371@item Security providers (API keys, Cookie, Basic and Bearer HTTP
5372authentications)
5373@item Custom deserializers and formats
5374@item Integration with libraries and frameworks.
5375@end itemize")
5376 (license license:bsd-3)))
5377
5378(define-public python-openid
5379 (package
5380 (name "python-openid")
5381 (version "3.2.0")
5382 (source
5383 (origin
5384 (method url-fetch)
5385 (uri (pypi-uri "python3-openid" version))
5386 (sha256
5387 (base32
5388 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
5389 (build-system pyproject-build-system)
5390 (arguments
5391 `(#:phases
5392 (modify-phases %standard-phases
5393 (replace 'check
5394 (lambda* (#:key tests? #:allow-other-keys)
5395 (when tests?
5396 (invoke "python" "-m" "unittest" "openid.test.test_suite")))))))
5397 (propagated-inputs
5398 (list python-defusedxml))
5399 (native-inputs
5400 (list python-psycopg2 python-django python-setuptools python-wheel))
5401 (home-page "https://github.com/necaris/python3-openid")
5402 (synopsis "OpenID support for servers and consumers")
5403 (description "This library provides OpenID authentication for Python, both
5404for clients and servers.")
5405 (license license:asl2.0)))
5406
5407(define-public python-cssutils
5408 (package
5409 (name "python-cssutils")
5410 (version "2.11.1")
5411 (source
5412 (origin
5413 (method url-fetch)
5414 (uri (pypi-uri "cssutils" version))
5415 (sha256
5416 (base32
5417 "1qpq7xvzqp4cfcb8837rnd30x4hws3rkp33qpvmnxbxn2djsfqq5"))))
5418 (build-system pyproject-build-system)
5419 (arguments
5420 (list
5421 #:phases
5422 #~(modify-phases %standard-phases
5423 (replace 'check
5424 (lambda _
5425 (invoke "pytest" "-vv" "-k"
5426 (string-append "not encutils "
5427 "and not website.logging")))))))
5428 (native-inputs
5429 (list python-cssselect
5430 python-jaraco-test
5431 python-lxml
5432 python-pytest
5433 python-setuptools
5434 python-wheel))
5435 (propagated-inputs
5436 (list python-more-itertools))
5437 (home-page "https://github.com/jaraco/cssutils")
5438 (synopsis
5439 "CSS Cascading Style Sheets library for Python")
5440 (description
5441 "Cssutils is a Python package for parsing and building CSS
5442Cascading Style Sheets. Currently it provides a DOM only and no rendering
5443options.")
5444 (license license:lgpl3+)))
5445
5446(define-public python-css-parser
5447 (package
5448 (inherit python-cssutils)
5449 (name "python-css-parser")
5450 (version "1.0.10")
5451 (source
5452 (origin
5453 (method url-fetch)
5454 (uri (pypi-uri "css-parser" version))
5455 (sha256
5456 (base32 "0qs375slcwqd7slizh6hzkwxx7cdj36v8kwn0qrfji1kscm9f7mz"))))
5457 (home-page "https://github.com/ebook-utils/css-parser")
5458 (synopsis "Fork of cssutils modified for parsing ebooks")
5459 (description
5460 "Css-parser is a Python package for parsing and building CSS
5461Cascading Style Sheets. Currently it provides a DOM only and no rendering
5462options.
5463
5464It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
5465cssutils not receiving updates as of 1.0.2.")
5466 (license license:lgpl3+)))
5467
5468(define-public python-cssselect
5469 (package
5470 (name "python-cssselect")
5471 (version "1.2.0")
5472 (source (origin
5473 ;; The PyPI release does not contain tests.
5474 (method git-fetch)
5475 (uri (git-reference
5476 (url "https://github.com/scrapy/cssselect")
5477 (commit (string-append "v" version))))
5478 (file-name (git-file-name name version))
5479 (sha256
5480 (base32
5481 "1x4nrvb1p1byi1whmspik7lbh303akdlh762dayfxam3hycsh5kk"))))
5482 (build-system pyproject-build-system)
5483 (native-inputs
5484 (list python-lxml python-pytest python-setuptools python-wheel))
5485 (home-page "https://github.com/scrapy/cssselect")
5486 (synopsis "CSS3 selector parser and translator to XPath 1.0")
5487 (description
5488 "Cssselect ia a Python module that parses CSS3 Selectors and translates
5489them to XPath 1.0 expressions. Such expressions can be used in lxml or
5490another XPath engine to find the matching elements in an XML or HTML document.")
5491 (license license:bsd-3)))
5492
5493(define-public python-databricks-cli
5494 (package
5495 (name "python-databricks-cli")
5496 (version "0.18.0")
5497 (home-page "https://github.com/databricks/databricks-cli")
5498 (source (origin
5499 (method git-fetch)
5500 (uri (git-reference (url home-page) (commit version)))
5501 (file-name (git-file-name name version))
5502 (sha256
5503 (base32
5504 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
5505 (build-system pyproject-build-system)
5506 (arguments
5507 (list #:phases #~(modify-phases %standard-phases
5508 (replace 'check
5509 (lambda _
5510 (invoke "pytest" "tests" "-vv"))))))
5511 (native-inputs
5512 ;; For tests.
5513 (list python-decorator
5514 python-mock
5515 python-pytest
5516 python-requests-mock
5517 python-setuptools
5518 python-wheel))
5519 (propagated-inputs
5520 (list python-click
5521 python-oauthlib
5522 python-pyjwt
5523 python-requests
5524 python-six
5525 python-tabulate))
5526 (synopsis "Command line interface for Databricks")
5527 (description
5528 "The Databricks Command Line Interface is a tool which provides an easy
5529to use interface to the Databricks platform. The CLI is built on top of the
5530Databricks REST APIs.")
5531 (license license:asl2.0)))
5532
5533(define-public python-openid-cla
5534 ;; XXX: Last updated in 2015.
5535 (package
5536 (name "python-openid-cla")
5537 (version "1.2")
5538 (source
5539 (origin
5540 (method url-fetch)
5541 (uri (pypi-uri "python-openid-cla" version))
5542 (sha256
5543 (base32
5544 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
5545 (build-system pyproject-build-system)
5546 (arguments '(#:tests? #f)) ; No tests.
5547 (native-inputs (list python-setuptools python-wheel))
5548 (propagated-inputs (list python-openid python-six))
5549 (home-page "https://github.com/puiterwijk/python-openid-cla/")
5550 (synopsis "Implementation of the OpenID CLA extension for python-openid")
5551 (description "@code{openid-cla} is an implementation of the OpenID
5552contributor license agreement extension for python-openid.")
5553 (license license:bsd-3)))
5554
5555(define-public python-openid-teams
5556 ;; XXX: Last updated in 2018.
5557 (package
5558 (name "python-openid-teams")
5559 (version "1.1")
5560 (source
5561 (origin
5562 (method url-fetch)
5563 (uri (pypi-uri "python-openid-teams" version))
5564 (sha256
5565 (base32
5566 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
5567 (build-system pyproject-build-system)
5568 (arguments '(#:tests? #f)) ; No tests.
5569 (native-inputs (list python-setuptools python-wheel))
5570 (propagated-inputs (list python-openid python-six))
5571 (home-page "https://github.com/puiterwijk/python-openid-teams/")
5572 (synopsis "Implementation of the OpenID teams extension for python-openid")
5573 (description
5574 "@code{openid-teams} is an implementation of the OpenID
5575teams extension for python-openid.")
5576 (license license:bsd-3)))
5577
5578(define-public python-priority
5579 (package
5580 (name "python-priority")
5581 (version "2.0.0")
5582 (source
5583 (origin
5584 (method url-fetch)
5585 (uri (pypi-uri "priority" version))
5586 (sha256
5587 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
5588 (build-system pyproject-build-system)
5589 (native-inputs
5590 (list python-pytest python-setuptools python-wheel))
5591 (home-page "https://python-hyper.org/projects/priority/en/latest/")
5592 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
5593 (description
5594 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
5595set out in RFC 7540 Section 5.3 (Stream Priority).")
5596 (license license:expat)))
5597
5598(define-public python-weblate-language-data
5599 (package
5600 (name "python-weblate-language-data")
5601 (version "2025.8")
5602 (source
5603 (origin
5604 (method url-fetch)
5605 (uri (pypi-uri "weblate_language_data" version))
5606 (sha256
5607 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
5608 (build-system pyproject-build-system)
5609 (arguments (list #:tests? #f)) ;not tests, just data files
5610 (native-inputs
5611 (list python-setuptools))
5612 (propagated-inputs
5613 (list python-translate-toolkit))
5614 (home-page "https://github.com/WeblateOrg/language-data")
5615 (synopsis "Language definitions for Weblate")
5616 (description
5617 "This package provides language definitions used by
5618@url{https://weblate.org/, Weblate}i.")
5619 (license license:expat)))
5620
5621(define-public python-wikidata
5622 (package
5623 (name "python-wikidata")
5624 (version "0.8.1")
5625 (source
5626 (origin
5627 (method git-fetch)
5628 (uri (git-reference
5629 (url "https://github.com/dahlia/wikidata")
5630 (commit version)))
5631 (file-name (git-file-name name version))
5632 (sha256
5633 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
5634 (build-system pyproject-build-system)
5635 (native-inputs
5636 (list python-pytest python-setuptools))
5637 (home-page "https://github.com/dahlia/wikidata")
5638 (synopsis "Wikidata client library")
5639 (description
5640 "This package provides a Python interface to @url{https://www.wikidata.org/,
5641Wikidata}.")
5642 (license license:gpl3+)))
5643
5644(define-public python-wsproto
5645 (package
5646 (name "python-wsproto")
5647 (version "1.2.0")
5648 (source
5649 (origin
5650 (method url-fetch)
5651 (uri (pypi-uri "wsproto" version))
5652 (sha256
5653 (base32 "0rahm1j9danv1l6i6as80acwv16ycihxkhrvwjiqh9drxhk5ymmd"))))
5654 (build-system pyproject-build-system)
5655 (native-inputs
5656 (list python-pytest python-setuptools python-wheel))
5657 (propagated-inputs
5658 (list python-h11))
5659 (home-page "https://github.com/python-hyper/wsproto/")
5660 (synopsis "WebSockets state-machine based protocol implementation")
5661 (description
5662 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
5663stack. It's written from the ground up to be embeddable in whatever program you
5664choose to use, ensuring that you can communicate via WebSockets, as defined in
5665RFC6455, regardless of your programming paradigm.")
5666 (license license:expat)))
5667
5668(define-public hypercorn
5669 (package
5670 (name "hypercorn")
5671 (version "0.18.0")
5672 (source
5673 (origin
5674 (method git-fetch) ;PyPI does not have tests
5675 (uri (git-reference
5676 (url "https://github.com/pgjones/hypercorn")
5677 (commit version)))
5678 (file-name (git-file-name name version))
5679 (sha256
5680 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
5681 (build-system pyproject-build-system)
5682 ;; Propagate because Hypercorn also exposes functionality over a module.
5683 (propagated-inputs (list python-h11
5684 python-h2
5685 python-priority
5686 python-tomli
5687 python-wsproto))
5688 (native-inputs (list nss-certs-for-test
5689 python-httpx
5690 python-pdm-backend
5691 python-poetry-core
5692 python-pytest
5693 python-pytest-asyncio
5694 python-pytest-cov
5695 python-pytest-trio
5696 python-trio))
5697 (home-page "https://gitlab.com/pgjones/hypercorn/")
5698 (synopsis "ASGI Server based on Hyper libraries")
5699 (description
5700 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
5701wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
5702WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
5703can utilise asyncio, uvloop, or trio worker types.")
5704 (license license:expat)))
5705
5706(define-public python-querystring-parser
5707 (package
5708 (name "python-querystring-parser")
5709 (version "1.2.4")
5710 (source
5711 (origin
5712 (method git-fetch)
5713 (uri (git-reference
5714 (url "https://github.com/bernii/querystring-parser")
5715 (commit version)))
5716 (file-name (git-file-name name version))
5717 (sha256
5718 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
5719 (build-system pyproject-build-system)
5720 (arguments
5721 (list
5722 #:phases
5723 #~(modify-phases %standard-phases
5724 (replace 'check
5725 (lambda _
5726 ;; XXX FIXME: This test is broken with Python 3.7:
5727 ;; https://github.com/bernii/querystring-parser/issues/35
5728 (substitute* "querystring_parser/tests.py"
5729 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
5730 "True"))
5731 (invoke "python" "querystring_parser/tests.py"))))))
5732 (native-inputs (list python-setuptools))
5733 (propagated-inputs (list python-six))
5734 (home-page "https://github.com/bernii/querystring-parser")
5735 (synopsis "QueryString parser that correctly handles nested dictionaries")
5736 (description
5737 "This package provides a query string parser for Python and Django
5738projects that correctly creates nested dictionaries from sent form/querystring
5739data.")
5740 (license license:expat)))
5741
5742(define-public python-tornado
5743 (package
5744 (name "python-tornado")
5745 (version "6.4.2")
5746 (source
5747 (origin
5748 (method url-fetch)
5749 (uri (pypi-uri "tornado" version))
5750 (sha256
5751 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
5752 (build-system pyproject-build-system)
5753 (arguments
5754 (list
5755 #:test-flags
5756 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
5757 #~(list "--ignore=tornado/test/iostream_test.py")))
5758 (native-inputs
5759 (list python-certifi
5760 python-pytest
5761 python-setuptools))
5762 (home-page "https://www.tornadoweb.org/")
5763 (synopsis "Python web framework and asynchronous networking library")
5764 (description
5765 "Tornado is a Python web framework and asynchronous networking library,
5766originally developed at FriendFeed. By using non-blocking network I/O,
5767Tornado can scale to tens of thousands of open connections, making it ideal
5768for long polling, WebSockets, and other applications that require a long-lived
5769connection to each user.")
5770 (license license:asl2.0)))
5771
5772(define-public python-tornado-5
5773 (package
5774 (inherit python-tornado)
5775 (version "5.1.1")
5776 (source
5777 (origin
5778 (method url-fetch)
5779 (uri (pypi-uri "tornado" version))
5780 (sha256
5781 (base32
5782 "02clqk2116jbnq8lnaqmdw3p52nqrd9ib59r4xz2ll43fpcmhlaf"))))
5783 (build-system pyproject-build-system)
5784 (arguments
5785 (list
5786 #:phases
5787 '(modify-phases %standard-phases
5788 (add-after 'unpack 'fix-collections
5789 (lambda _
5790 (substitute* "tornado/httputil.py"
5791 (("collections.MutableMapping")
5792 "collections.abc.MutableMapping"))))
5793 (replace 'check
5794 (lambda* (#:key tests? #:allow-other-keys)
5795 (when tests?
5796 (substitute* "tornado/test/runtests.py"
5797 (("\"error\", category=DeprecationWarning")
5798 "\"ignore\", category=DeprecationWarning")
5799 ;; Disable tests that use SSL.
5800 (("'tornado.test.simple_httpclient_test',") "")
5801 (("'tornado.test.iostream_test',") "")
5802 (("'tornado.test.httpserver_test',") "")
5803 ;; Some timeouts are triggered in these two modules
5804 (("'tornado.test.queues_test',") "")
5805 (("'tornado.test.locks_test',") ""))
5806 ;; Skip all network tests
5807 (setenv "NO_NETWORK" "1")
5808 ;; Skip timing-relevant tests
5809 (setenv "TRAVIS" "1")
5810 (invoke "python" "-m" "tornado.test.runtests"
5811 "--verbose=yes")))))))
5812 (native-inputs
5813 (list python-certifi
5814 python-setuptools))))
5815
5816;; XXX: Deprecated on <2026-01-23>.
5817(define-deprecated-package python-tornado-6 python-tornado)
5818
5819(define-public python-tornado-http-auth
5820 (package
5821 (name "python-tornado-http-auth")
5822 (version "1.1.1")
5823 (source
5824 (origin
5825 (method git-fetch)
5826 (uri (git-reference
5827 (url "https://github.com/gvalkov/tornado-http-auth")
5828 (commit (string-append "v" version))))
5829 (file-name (git-file-name name version))
5830 (sha256
5831 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
5832 (build-system pyproject-build-system)
5833 ;; XXX: This version is incompatible with current tornado.testing.
5834 (arguments (list #:tests? #f))
5835 (native-inputs (list python-setuptools))
5836 (propagated-inputs (list python-tornado))
5837 (home-page "https://github.com/gvalkov/tornado-http-auth")
5838 (synopsis "Digest and basic authentication module for Tornado")
5839 (description
5840 "Provides support for adding authentication to services using the Tornado
5841web framework, either via the basic or digest authentication schemes.")
5842 (license license:asl2.0)))
5843
5844(define-public python-wsgi-intercept
5845 (package
5846 (name "python-wsgi-intercept")
5847 (version "1.13.1")
5848 (source (origin
5849 (method url-fetch)
5850 (uri (pypi-uri "wsgi_intercept" version))
5851 (sha256
5852 (base32
5853 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
5854 (build-system pyproject-build-system)
5855 (arguments
5856 (list
5857 ;; XXX: tests required internet access
5858 #:tests? #f))
5859 (propagated-inputs
5860 (list python-six))
5861 (native-inputs
5862 (list python-httplib2
5863 python-pytest
5864 python-requests
5865 python-setuptools
5866 python-urllib3
5867 python-wheel))
5868 (synopsis "Puts a WSGI application in place of a real URI for testing")
5869 (description "Wsgi_intercept installs a WSGI application in place of a real
5870URI for testing. Testing a WSGI application normally involves starting a
5871server at a local host and port, then pointing your test code to that address.
5872Instead, this library lets you intercept calls to any specific host/port
5873combination and redirect them into a WSGI application importable by your test
5874program. Thus, you can avoid spawning multiple processes or threads to test
5875your Web app.")
5876 (home-page "https://github.com/cdent/wsgi-intercept")
5877 (license license:expat)))
5878
5879(define-public python-webob
5880 (package
5881 (name "python-webob")
5882 (version "1.8.9")
5883 (source
5884 (origin
5885 (method url-fetch)
5886 (uri (pypi-uri "webob" version))
5887 (sha256
5888 (base32
5889 "12b5sl10yzzzz3g11kij3rdzk9y6583ywggc6h9nsxmnxpi7hq5d"))))
5890 (build-system pyproject-build-system)
5891 ;; tests: 2380 passed, 9 skipped, 1 xfailed, 12 warnings
5892 (native-inputs
5893 (list python-pytest
5894 python-setuptools))
5895 (home-page "https://webob.org/")
5896 (synopsis "WSGI request and response object")
5897 (description
5898 "WebOb provides wrappers around the WSGI request environment, and an
5899object to help create WSGI responses.")
5900 (license license:expat)))
5901
5902(define-public python-zc-lockfile
5903 (package
5904 (name "python-zc-lockfile")
5905 (version "4.0")
5906 (source
5907 (origin
5908 (method git-fetch)
5909 (uri (git-reference
5910 (url "https://github.com/zopefoundation/zc.lockfile")
5911 (commit version)))
5912 (file-name (git-file-name name version))
5913 (sha256
5914 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
5915 (build-system pyproject-build-system)
5916 (arguments
5917 (list
5918 #:phases
5919 #~(modify-phases %standard-phases
5920 (replace 'check
5921 (lambda* (#:key tests? #:allow-other-keys)
5922 (if tests?
5923 (invoke "zope-testrunner" "--test-path=src")
5924 (format #t "test suite not run~%")))))))
5925 (native-inputs (list python-zope-testing python-zope-testrunner
5926 python-setuptools))
5927 (home-page "https://github.com/zopefoundation/zc.lockfile")
5928 (synopsis "Interprocess locks using lock files")
5929 (description
5930 "This package provides an implementation of interprocess locks using lock
5931files. These locks can also be used to mediate access to other files.")
5932 (license license:zpl2.1)))
5933
5934(define-public python-zconfig
5935 (package
5936 (name "python-zconfig")
5937 (version "4.0")
5938 (source
5939 (origin
5940 (method git-fetch)
5941 (uri (git-reference
5942 (url "https://github.com/zopefoundation/ZConfig/")
5943 (commit version)))
5944 (file-name (git-file-name name version))
5945 (sha256
5946 (base32 "1x502hyfijh6fc8n85cm046c44spwfmwcn2lnxa1axg8n0n5rsbp"))))
5947 (build-system pyproject-build-system)
5948 (arguments
5949 (list
5950 #:phases
5951 #~(modify-phases %standard-phases
5952 (replace 'check
5953 (lambda* (#:key tests? #:allow-other-keys)
5954 (if tests?
5955 (begin
5956 ;; This test assumes we still have setup.py in the
5957 ;; directory from which we import zconfig, which
5958 ;; does not work after installing the package.
5959 (delete-file-recursively
5960 "src/ZConfig/tests/test_readme.py")
5961 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
5962 (format #t "test suite not run~%")))))))
5963 (native-inputs (list python-docutils python-manuel python-zope-exceptions
5964 python-zope-testrunner python-setuptools))
5965 (home-page "https://github.com/zopefoundation/ZConfig/")
5966 (synopsis "Structured configuration library intended for general use")
5967 (description
5968 "@code{zconfig} is a configuration library intended for general use. It
5969supports a hierarchical schema-driven configuration model that allows a schema
5970to specify data conversion routines written in Python. Its model is very
5971different from the model supported by the @code{configparser} module found in
5972Python's standard library, and is more suitable to configuration-intensive
5973applications.")
5974 (license license:zpl2.1)))
5975
5976(define-public python-zodb
5977 (package
5978 (name "python-zodb")
5979 (version "6.0.1")
5980 (source
5981 (origin
5982 (method url-fetch)
5983 (uri (pypi-uri "zodb" version))
5984 (sha256
5985 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
5986 (build-system pyproject-build-system)
5987 (arguments
5988 (list
5989 #:phases
5990 #~(modify-phases %standard-phases
5991 (replace 'check
5992 (lambda* (#:key tests? #:allow-other-keys)
5993 (if tests?
5994 (begin
5995 ;; This test does not work after installing the
5996 ;; package, since it expects the ZODB source code
5997 ;; to reside in the src/ directory.
5998 (delete-file-recursively
5999 "src/ZODB/tests/testdocumentation.py")
6000 (invoke "zope-testrunner" "-vv" "--test-path=src"
6001 "--all"))
6002 (format #t "test suite not run~%")))))))
6003 (native-inputs
6004 (list python-manuel
6005 python-wheel
6006 python-zope-testing
6007 python-zope-testrunner))
6008 (propagated-inputs
6009 (list python-btrees
6010 python-persistent
6011 python-transaction
6012 python-zc-lockfile
6013 python-zconfig
6014 python-zodbpickle
6015 python-zope-interface))
6016 (home-page "http://zodb-docs.readthedocs.io")
6017 (synopsis "Object-oriented database for Python")
6018 (description
6019 "@code{ZODB} provides an object-oriented and @acronym{ACID,
6020Atomicity Consistency Isolation Durability} compliant database for Python with
6021a high degree of transparency. @code{ZODB} is an object-oriented database,
6022not an object-relational mapping. This comes with several advantaged:
6023
6024@itemize
6025@item no separate language for database operations
6026@item very little impact on your code to make objects persistent
6027@item no database mapper that partially hides the database.
6028@item almost no seam between code and database.
6029@end itemize")
6030 (license license:zpl2.1)))
6031
6032(define-public python-zodbpickle
6033 (package
6034 (name "python-zodbpickle")
6035 (version "3.2")
6036 (source
6037 (origin
6038 (method url-fetch)
6039 (uri (pypi-uri "zodbpickle" version))
6040 (sha256
6041 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
6042 (build-system pyproject-build-system)
6043 (arguments
6044 '(#:phases (modify-phases %standard-phases
6045 (replace 'check
6046 (lambda* (#:key tests? #:allow-other-keys)
6047 (if tests?
6048 (invoke "zope-testrunner" "-vv" "--test-path=src"
6049 "--all")
6050 (format #t "test suite not run~%")))))))
6051 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
6052 (home-page "https://github.com/zopefoundation/zodbpickle")
6053 (synopsis "Uniform pickling interface for @code{zodb}")
6054 (description
6055 "This package is a fork of the @code{pickle} module (and the
6056supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
6057support for the @code{noload} operations used by @code{zodb}.")
6058 (license (list license:psfl license:zpl2.1))))
6059
6060(define-public python-zope-dottedname
6061 (package
6062 (name "python-zope-dottedname")
6063 (version "7.0")
6064 (source
6065 (origin
6066 (method git-fetch)
6067 (uri (git-reference
6068 (url "https://github.com/zopefoundation/zope.dottedname")
6069 (commit version)))
6070 (file-name (git-file-name name version))
6071 (sha256
6072 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
6073 (build-system pyproject-build-system)
6074 (arguments
6075 (list #:test-backend #~'custom
6076 #:test-flags #~(list "src/zope/dottedname/tests.py")))
6077 (native-inputs (list python-setuptools))
6078 (home-page "https://zopedottedname.readthedocs.io")
6079 (synopsis "Resolver for Python dotted names")
6080 (description
6081 "This package provides a @code{resolve()} function that resolves strings
6082containing dotted names into the appropriate Python object.")
6083 (license license:zpl2.1)))
6084
6085(define-public python-zope-event
6086 (package
6087 (name "python-zope-event")
6088 (version "6.0")
6089 (source
6090 (origin
6091 (method git-fetch)
6092 (uri (git-reference
6093 (url "https://github.com/zopefoundation/zope.event")
6094 (commit version)))
6095 (file-name (git-file-name name version))
6096 (sha256
6097 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
6098 (build-system pyproject-build-system)
6099 (arguments
6100 (list
6101 #:test-flags
6102 #~(list "src/zope/event/tests.py")))
6103 (native-inputs (list python-pytest python-setuptools))
6104 (home-page "https://zopeevent.readthedocs.io/en/latest/")
6105 (synopsis "Event publishing system for Python")
6106 (description
6107 "Zope.event provides an event publishing API, intended for use by
6108applications which are unaware of any subscribers to their events. It is a
6109simple event-dispatching system on which more sophisticated event dispatching
6110systems can be built.")
6111 (license license:zpl2.1)))
6112
6113(define-public python-zope-interface
6114 (package
6115 (name "python-zope-interface")
6116 (version "7.2")
6117 (source
6118 (origin
6119 (method git-fetch)
6120 (uri (git-reference
6121 (url "https://github.com/zopefoundation/zope.interface")
6122 (commit version)))
6123 (file-name (git-file-name name version))
6124 (sha256
6125 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
6126 (build-system pyproject-build-system)
6127 (arguments
6128 ;; XXX: test suite can't find python-zope-testing
6129 (list #:tests? #f))
6130 (native-inputs (list python-setuptools))
6131 (home-page "https://zopeinterface.readthedocs.io")
6132 (synopsis "\"Design by contract\" methodology in Python")
6133 (description
6134 "Zope.interface provides an implementation of \"object interfaces\" for
6135Python. Interfaces are a mechanism for labeling objects as conforming to a
6136given API or contract.")
6137 (license license:zpl2.1)))
6138
6139(define-public python-zope-exceptions
6140 (package
6141 (name "python-zope-exceptions")
6142 (version "6.0")
6143 (source
6144 (origin
6145 (method git-fetch)
6146 (uri (git-reference
6147 (url "https://github.com/zopefoundation/zope.exceptions")
6148 (commit version)))
6149 (file-name (git-file-name name version))
6150 (sha256
6151 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
6152 (build-system pyproject-build-system)
6153 (arguments
6154 (list
6155 #:phases
6156 #~(modify-phases %standard-phases
6157 (replace 'check
6158 (lambda* (#:key tests? #:allow-other-keys)
6159 (if tests?
6160 (invoke "zope-testrunner" "--test-path=src")
6161 (format #t "test suite not run~%")))))))
6162 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
6163 (propagated-inputs (list python-zope-interface))
6164 (home-page "https://github.com/zopefoundation/zope.exceptions")
6165 (synopsis "Zope exceptions")
6166 (description
6167 "Zope.exceptions provides general-purpose exception types that have uses
6168outside of the Zope framework.")
6169 (license license:zpl2.1)))
6170
6171(define (python-zope-bootstrap-package orig)
6172 (package
6173 (inherit orig)
6174 (name (string-append (package-name orig) "-bootstrap"))
6175 (arguments
6176 (if (null? (package-arguments orig))
6177 (list
6178 #:tests? #f
6179 #:phases #~(modify-phases %standard-phases
6180 (delete 'sanity-check)))
6181 (substitute-keyword-arguments arguments
6182 ((#:tests? _ #f) #f)
6183 ((#:phases phases '%standard-phases)
6184 #~(modify-phases #$phases
6185 (delete 'sanity-check))))))
6186 (propagated-inputs `())
6187 (native-inputs (list python-setuptools))
6188 (properties `((hidden? . #t)))))
6189
6190(define-public python-zope-exceptions-bootstrap
6191 (python-zope-bootstrap-package python-zope-exceptions))
6192
6193(define-public python-zope-testing
6194 (package
6195 (name "python-zope-testing")
6196 (version "6.0")
6197 (source
6198 (origin
6199 (method git-fetch)
6200 (uri (git-reference
6201 (url "https://github.com/zopefoundation/zope.testing")
6202 (commit version)))
6203 (file-name (git-file-name name version))
6204 (sha256
6205 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
6206 (build-system pyproject-build-system)
6207 (arguments
6208 (list
6209 #:phases
6210 #~(modify-phases %standard-phases
6211 (replace 'check
6212 (lambda* (#:key tests? #:allow-other-keys)
6213 (if tests?
6214 (invoke "zope-testrunner" "--test-path=src")
6215 (format #t "test suite not run~%")))))))
6216 (native-inputs (list python-setuptools
6217 python-zope-interface
6218 python-zope-testrunner-bootstrap))
6219 (home-page "https://zopetesting.readthedocs.io/")
6220 (synopsis "Zope testing helpers")
6221 (description
6222 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
6223servers, regular expressions, and more.")
6224 (license license:zpl2.1)))
6225
6226(define-public python-zope-testrunner
6227 (package
6228 (name "python-zope-testrunner")
6229 (version "7.4")
6230 (source
6231 (origin
6232 (method git-fetch)
6233 (uri (git-reference
6234 (url "https://github.com/zopefoundation/zope.testrunner")
6235 (commit version)))
6236 (file-name (git-file-name name version))
6237 (sha256
6238 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
6239 (build-system pyproject-build-system)
6240 (arguments
6241 (list
6242 #:phases
6243 #~(modify-phases %standard-phases
6244 (add-after 'unpack 'remove-problematic-test
6245 (lambda _
6246 ;; This test contains invalid syntax, which breaks bytecode
6247 ;; compilation. For simplicity just remove it.
6248 (delete-file
6249 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
6250 (replace 'check
6251 (lambda* (#:key tests? #:allow-other-keys)
6252 (if tests?
6253 (invoke "zope-testrunner" "--test-path=src")
6254 (format #t "test suite not run~%")))))))
6255 (native-inputs (list python-setuptools python-zope-testing))
6256 (propagated-inputs (list python-zope-exceptions python-zope-interface))
6257 (home-page "https://zopetestrunner.readthedocs.io")
6258 (synopsis "Zope testrunner script")
6259 (description "This package provides a script for running Python tests.")
6260 (license license:zpl2.1)))
6261
6262(define-public python-zope-testrunner-bootstrap
6263 (package
6264 (inherit (python-zope-bootstrap-package python-zope-testrunner))
6265 (propagated-inputs
6266 (list python-six python-zope-exceptions-bootstrap))
6267 (properties `((hidden? . #t)))))
6268
6269(define-public python-zope-i18nmessageid
6270 (package
6271 (name "python-zope-i18nmessageid")
6272 (version "7.0")
6273 (source
6274 (origin
6275 (method git-fetch)
6276 (uri (git-reference
6277 (url "https://github.com/zopefoundation/zope.i18nmessageid")
6278 (commit version)))
6279 (file-name (git-file-name name version))
6280 (sha256
6281 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
6282 (build-system pyproject-build-system)
6283 (arguments
6284 (list
6285 #:phases
6286 #~(modify-phases %standard-phases
6287 (replace 'check
6288 (lambda* (#:key tests? #:allow-other-keys)
6289 (if tests?
6290 (invoke "zope-testrunner" "--test-path=src")
6291 (format #t "test suite not run~%")))))))
6292 (native-inputs (list python-setuptools python-zope-testrunner))
6293 (home-page "https://zopei18nmessageid.readthedocs.io")
6294 (synopsis "Message identifiers for internationalization")
6295 (description "Zope.i18nmessageid provides facilities for declaring
6296internationalized messages within program source text.")
6297 (license license:zpl2.1)))
6298
6299(define-public python-zope-schema
6300 (package
6301 (name "python-zope-schema")
6302 (version "7.0.1")
6303 (source
6304 (origin
6305 (method git-fetch)
6306 (uri (git-reference
6307 (url "https://github.com/zopefoundation/zope.schema")
6308 (commit version)))
6309 (file-name (git-file-name name version))
6310 (sha256
6311 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
6312 (build-system pyproject-build-system)
6313 (arguments
6314 (list
6315 #:phases
6316 #~(modify-phases %standard-phases
6317 (replace 'check
6318 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6319 (add-installed-pythonpath inputs outputs)
6320 (if tests?
6321 (invoke "zope-testrunner" "--test-path=src")
6322 (format #t "test suite not run.~%")))))))
6323 (propagated-inputs (list python-zope-event python-zope-interface))
6324 (native-inputs (list python-zope-i18nmessageid python-zope-testing
6325 python-zope-testrunner python-setuptools))
6326 (home-page "https://zopeschema.readthedocs.io")
6327 (synopsis "Zope data schemas")
6328 (description "Zope.scheme provides extensions to zope.interface for
6329defining data schemas.")
6330 (license license:zpl2.1)))
6331
6332(define-public python-zope-sqlalchemy
6333 (package
6334 (name "python-zope-sqlalchemy")
6335 (version "1.6")
6336 (source
6337 (origin
6338 (method git-fetch)
6339 (uri (git-reference
6340 (url "https://github.com/zopefoundation/zope.sqlalchemy")
6341 (commit version)))
6342 (file-name (git-file-name name version))
6343 (sha256
6344 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
6345 (build-system pyproject-build-system)
6346 (arguments
6347 (list
6348 #:phases
6349 #~(modify-phases %standard-phases
6350 (replace 'check
6351 (lambda* (#:key tests? #:allow-other-keys)
6352 (if tests?
6353 (invoke "zope-testrunner" "--test-path=src")
6354 (format #t "test suite not run~%")))))))
6355 (propagated-inputs (list python-sqlalchemy python-transaction
6356 python-zope-interface))
6357 (native-inputs (list python-zope-testing python-zope-testrunner
6358 python-setuptools))
6359 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
6360 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
6361 (description
6362 "The aim of this package is to unify the plethora of existing packages
6363integrating SQLAlchemy with Zope's transaction management. As such,it only
6364provides a data manager and makes no attempt to define a @i{zopeish} way to
6365configure engines.")
6366 (license license:zpl2.1)))
6367
6368(define-public python-zope-configuration
6369 (package
6370 (name "python-zope-configuration")
6371 (version "7.0")
6372 (source
6373 (origin
6374 (method git-fetch)
6375 (uri (git-reference
6376 (url "https://github.com/zopefoundation/zope.configuration")
6377 (commit version)))
6378 (file-name (git-file-name name version))
6379 (sha256
6380 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
6381 (build-system pyproject-build-system)
6382 (arguments
6383 (list
6384 #:phases
6385 #~(modify-phases %standard-phases
6386 (replace 'check
6387 (lambda* (#:key tests? #:allow-other-keys)
6388 (if tests?
6389 (invoke "zope-testrunner" "--test-path=src")
6390 (format #t "test suite not run~%")))))))
6391 (native-inputs (list python-manuel python-setuptools python-zope-testing
6392 python-zope-testrunner))
6393 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
6394 python-zope-schema))
6395 (home-page "https://zopeconfiguration.readthedocs.io")
6396 (synopsis "Zope Configuration Markup Language")
6397 (description "Zope.configuration implements ZCML, the Zope Configuration
6398Markup Language.")
6399 (license license:zpl2.1)))
6400
6401(define-public python-zope-configuration-bootstrap
6402 (python-zope-bootstrap-package python-zope-configuration))
6403
6404(define-public python-zope-copy
6405 (package
6406 (name "python-zope-copy")
6407 (version "6.0")
6408 (source
6409 (origin
6410 (method git-fetch)
6411 (uri (git-reference
6412 (url "https://github.com/zopefoundation/zope.copy")
6413 (commit version)))
6414 (file-name (git-file-name name version))
6415 (sha256
6416 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
6417 (build-system pyproject-build-system)
6418 (arguments
6419 (list
6420 #:phases
6421 #~(modify-phases %standard-phases
6422 (replace 'check
6423 (lambda* (#:key tests? #:allow-other-keys)
6424 (if tests?
6425 (invoke "zope-testrunner" "--test-path=src")
6426 (format #t "test suite not run~%")))))))
6427 (propagated-inputs (list python-zope-interface))
6428 (native-inputs
6429 (list python-zodbpickle
6430 python-zope-component-bootstrap
6431 python-zope-location-bootstrap
6432 python-zope-proxy
6433 python-zope-schema
6434 python-zope-testing
6435 python-zope-testrunner
6436 python-setuptools))
6437 (home-page "https://zopecopy.readthedocs.io")
6438 (synopsis "Pluggable object copying mechanism")
6439 (description
6440 "This package provides a pluggable mechanism for copying persistent objects.")
6441 (license license:zpl2.1)))
6442
6443(define-public python-zope-proxy
6444 (package
6445 (name "python-zope-proxy")
6446 (version "7.0")
6447 (source
6448 (origin
6449 (method git-fetch)
6450 (uri (git-reference
6451 (url "https://github.com/zopefoundation/zope.proxy")
6452 (commit version)))
6453 (file-name (git-file-name name version))
6454 (sha256
6455 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
6456 (build-system pyproject-build-system)
6457 (arguments
6458 (list
6459 #:phases
6460 #~(modify-phases %standard-phases
6461 (replace 'check
6462 (lambda* (#:key tests? #:allow-other-keys)
6463 (if tests?
6464 (invoke "zope-testrunner" "--test-path=src")
6465 (format #t "test suite not run~%")))))))
6466 (native-inputs
6467 (list python-zope-location-bootstrap
6468 python-zope-security-bootstrap
6469 python-zope-testrunner
6470 python-setuptools))
6471 (propagated-inputs (list python-zope-interface))
6472 (home-page "https://zopeproxy.readthedocs.io")
6473 (synopsis "Generic, transparent proxies")
6474 (description
6475 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
6476special objects which serve as mostly-transparent wrappers around another
6477object, intervening in the apparent behavior of the wrapped object only when
6478necessary to apply the policy (e.g., access checking, location brokering,
6479etc.) for which the proxy is responsible.")
6480 (license license:zpl2.1)))
6481
6482(define-public python-zope-proxy-bootstrap
6483 (python-zope-bootstrap-package python-zope-proxy))
6484
6485(define-public python-zope-hookable
6486 (package
6487 (name "python-zope-hookable")
6488 (version "7.0")
6489 (source
6490 (origin
6491 (method git-fetch)
6492 (uri (git-reference
6493 (url "https://github.com/zopefoundation/zope.hookable")
6494 (commit version)))
6495 (file-name (git-file-name name version))
6496 (sha256
6497 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
6498 (build-system pyproject-build-system)
6499 (arguments
6500 (list
6501 #:phases
6502 #~(modify-phases %standard-phases
6503 (replace 'check
6504 (lambda* (#:key tests? #:allow-other-keys)
6505 (if tests?
6506 (invoke "zope-testrunner" "--test-path=src")
6507 (format #t "test suite not run~%")))))))
6508 (native-inputs (list python-zope-testing python-zope-testrunner
6509 python-setuptools))
6510 (home-page "https://zopehookable.readthedocs.io")
6511 (synopsis "Zope hookable")
6512 (description
6513 "This package supports the efficient creation of hookable objects, which
6514are callable objects that are meant to be optionally replaced. The idea is
6515that you create a function that does some default thing and make i hookable.
6516Later, someone can modify what it does by calling its sethook method and
6517changing its implementation. All users of the function, including those that
6518imported it, will see the change.")
6519 (license license:zpl2.1)))
6520
6521(define-public python-zope-location
6522 (package
6523 (name "python-zope-location")
6524 (version "6.0")
6525 (source
6526 (origin
6527 (method git-fetch)
6528 (uri (git-reference
6529 (url "https://github.com/zopefoundation/zope.location")
6530 (commit version)))
6531 (file-name (git-file-name name version))
6532 (sha256
6533 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
6534 (build-system pyproject-build-system)
6535 (arguments
6536 (list
6537 #:phases
6538 #~(modify-phases %standard-phases
6539 (replace 'check
6540 (lambda* (#:key tests? #:allow-other-keys)
6541 (if tests?
6542 (invoke "zope-testrunner" "--test-path=src")
6543 (format #t "test suite not run~%")))))))
6544 (native-inputs (list python-zope-testrunner python-setuptools))
6545 (propagated-inputs (list python-zope-interface python-zope-proxy
6546 python-zope-schema))
6547 (home-page "https://zopelocation.readthedocs.io")
6548 (synopsis "Zope location library")
6549 (description
6550 "Zope.location implements the concept of \"locations\" in Zope3, which
6551are are special objects that have a structural location.")
6552 (license license:zpl2.1)))
6553
6554(define-public python-zope-location-bootstrap
6555 (python-zope-bootstrap-package python-zope-location))
6556
6557(define-public python-zope-security
6558 (package
6559 (name "python-zope-security")
6560 (version "7.3")
6561 (source
6562 (origin
6563 (method git-fetch)
6564 (uri (git-reference
6565 (url "https://github.com/zopefoundation/zope.security")
6566 (commit version)))
6567 (file-name (git-file-name name version))
6568 (sha256
6569 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
6570 (build-system pyproject-build-system)
6571 (arguments
6572 (list
6573 #:phases
6574 #~(modify-phases %standard-phases
6575 (replace 'check
6576 (lambda* (#:key tests? #:allow-other-keys)
6577 (if tests?
6578 (invoke "zope-testrunner" "--test-path=src")
6579 (format #t "test suite not run~%")))))))
6580 (propagated-inputs
6581 (list python-zope-component
6582 python-zope-i18nmessageid
6583 python-zope-interface
6584 python-zope-location
6585 python-zope-proxy
6586 python-zope-schema))
6587 (native-inputs
6588 (list python-btrees
6589 python-zope-component-bootstrap
6590 python-zope-configuration-bootstrap
6591 python-zope-location-bootstrap
6592 python-zope-testing
6593 python-zope-testrunner
6594 python-setuptools))
6595 (home-page "https://zopesecurity.readthedocs.io")
6596 (synopsis "Zope security framework")
6597 (description "Zope.security provides a generic mechanism to implement
6598security policies on Python objects.")
6599 (license license:zpl2.1)))
6600
6601(define-public python-zope-security-bootstrap
6602 (package
6603 (inherit (python-zope-bootstrap-package python-zope-security))
6604 (propagated-inputs
6605 (list python-zope-i18nmessageid
6606 python-zope-interface
6607 python-zope-proxy-bootstrap
6608 python-zope-schema))))
6609
6610(define-public python-zope-component
6611 (package
6612 (name "python-zope-component")
6613 (version "7.0")
6614 (source
6615 (origin
6616 (method git-fetch)
6617 (uri (git-reference
6618 (url "https://github.com/zopefoundation/zope.component")
6619 (commit version)))
6620 (file-name (git-file-name name version))
6621 (sha256
6622 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
6623 (build-system pyproject-build-system)
6624 (arguments
6625 (list
6626 #:phases
6627 #~(modify-phases %standard-phases
6628 (replace 'check
6629 (lambda* (#:key tests? #:allow-other-keys)
6630 (if tests?
6631 (invoke "zope-testrunner" "--test-path=src")
6632 (format #t "test suite not run~%")))))))
6633 (native-inputs
6634 (list python-persistent
6635 python-zope-configuration-bootstrap
6636 python-zope-i18nmessageid
6637 python-zope-location-bootstrap
6638 python-zope-proxy-bootstrap
6639 python-zope-security-bootstrap
6640 python-zope-testing
6641 python-zope-testrunner
6642 python-setuptools))
6643 (propagated-inputs
6644 (list python-zope-deferredimport python-zope-deprecation
6645 python-zope-event python-zope-hookable python-zope-interface))
6646 (home-page "https://zopecomponent.readthedocs.io")
6647 (synopsis "Zope Component Architecture")
6648 (description
6649 "Zope.component represents the core of the Zope Component Architecture.
6650Together with the zope.interface package, it provides facilities for defining,
6651registering and looking up components.")
6652 (license license:zpl2.1)))
6653
6654(define-public python-zope-component-bootstrap
6655 (python-zope-bootstrap-package python-zope-component))
6656
6657(define-public python-zope-deferredimport
6658 (package
6659 (name "python-zope-deferredimport")
6660 (version "6.0")
6661 (source
6662 (origin
6663 (method git-fetch)
6664 (uri (git-reference
6665 (url "https://github.com/zopefoundation/zope.deferredimport")
6666 (commit version)))
6667 (file-name (git-file-name name version))
6668 (sha256
6669 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
6670 (build-system pyproject-build-system)
6671 (arguments
6672 (list
6673 #:phases
6674 #~(modify-phases %standard-phases
6675 (replace 'check
6676 (lambda* (#:key tests? #:allow-other-keys)
6677 (if tests?
6678 (invoke "zope-testrunner" "--test-path=src")
6679 (format #t "test suite not run~%")))))))
6680 (propagated-inputs (list python-zope-proxy))
6681 (native-inputs (list python-zope-testrunner python-setuptools))
6682 (home-page "https://zopedeferredimport.readthedocs.io")
6683 (synopsis "Defer imports until used by code")
6684 (description
6685 "Often, especially for package modules, you want to import names for
6686convenience, but not actually perform the imports until necessary. The
6687@code{zope.deferredimport} package provided facilities for defining names in
6688modules that will be imported from somewhere else when used. You can also cause
6689deprecation warnings to be issued when a variable is used.")
6690 (license license:zpl2.1)))
6691
6692(define-public python-ndg-httpsclient
6693 (package
6694 (name "python-ndg-httpsclient")
6695 (version "0.5.1")
6696 (source
6697 (origin
6698 (method git-fetch)
6699 (uri (git-reference
6700 (url "https://github.com/cedadev/ndg_httpsclient/")
6701 (commit version)))
6702 (file-name (git-file-name name version))
6703 (sha256
6704 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
6705 (build-system pyproject-build-system)
6706 (arguments
6707 (list
6708 #:tests? #f)) ;Tests appear to require networking.
6709 (native-inputs (list python-setuptools))
6710 (propagated-inputs (list python-pyasn1 python-pyopenssl))
6711 (synopsis "HTTPS support for Python's httplib and urllib2")
6712 (description
6713 "This is a HTTPS client implementation for httplib and urllib2 based on
6714PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
6715the default provided with Python and, importantly, enables full verification
6716of the SSL peer.")
6717 (home-page "https://github.com/cedadev/ndg_httpsclient/")
6718 (license license:bsd-3)))
6719
6720(define-public python-netaddr
6721 (package
6722 (name "python-netaddr")
6723 (version "1.3.0")
6724 (source
6725 (origin
6726 (method url-fetch)
6727 (uri (pypi-uri "netaddr" version))
6728 (sha256
6729 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
6730 (build-system pyproject-build-system)
6731 (native-inputs (list python-poetry-core
6732 python-pytest
6733 python-setuptools
6734 python-wheel))
6735 (home-page "https://netaddr.readthedocs.io")
6736 (synopsis "Pythonic manipulation of network addresses")
6737 (description
6738 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
6739and MAC network addresses.")
6740 (license license:bsd-3)))
6741
6742(define-public python-nh3
6743 (package
6744 (name "python-nh3")
6745 (version "0.2.20")
6746 (source
6747 (origin
6748 (method url-fetch)
6749 (uri (pypi-uri "nh3" version))
6750 (sha256
6751 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
6752 (build-system pyproject-build-system)
6753 (arguments
6754 (list
6755 #:imported-modules `(,@%cargo-build-system-modules
6756 ,@%pyproject-build-system-modules)
6757 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
6758 (guix build pyproject-build-system)
6759 (guix build utils))
6760 #:phases
6761 #~(modify-phases %standard-phases
6762 (add-after 'unpack 'prepare-cargo-build-system
6763 (lambda args
6764 (for-each
6765 (lambda (phase)
6766 (format #t "Running cargo phase: ~a~%" phase)
6767 (apply (assoc-ref cargo:%standard-phases phase)
6768 #:cargo-target #$(cargo-triplet)
6769 args))
6770 '(unpack-rust-crates
6771 configure
6772 check-for-pregenerated-files
6773 patch-cargo-checksums)))))))
6774 (native-inputs
6775 (append
6776 (list maturin python-pytest rust `(,rust "cargo"))
6777 (or (and=> (%current-target-system)
6778 (compose list make-rust-sysroot))
6779 '())))
6780 (inputs (cargo-inputs 'python-nh3))
6781 (home-page "https://nh3.readthedocs.io")
6782 (synopsis "Python bindings to Ammonia HTML sanitization library")
6783 (description "This package provides Python bindings to Ammonia HTML
6784sanitizer Rust crate.")
6785 (license license:expat)))
6786
6787(define-public python-noiseprotocol
6788 (package
6789 (name "python-noiseprotocol")
6790 (version "0.3.1")
6791 (source
6792 (origin
6793 (method git-fetch)
6794 (uri (git-reference
6795 (url "https://github.com/plizonczyk/noiseprotocol")
6796 (commit (string-append "v" version))))
6797 (file-name (git-file-name name version))
6798 (sha256
6799 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
6800 (build-system pyproject-build-system)
6801 (propagated-inputs (list python-cryptography))
6802 (native-inputs (list python-setuptools python-pytest))
6803 (home-page "https://github.com/plizonczyk/noiseprotocol")
6804 (synopsis "Implementation of Noise Protocol Framework")
6805 (description
6806 "This package provides an implementation of Noise Protocol Framework.")
6807 (license license:expat)))
6808
6809(define-public python-webrtcvad-wheels
6810 (package
6811 (name "python-webrtcvad-wheels")
6812 (version "2.0.14")
6813 (source
6814 (origin
6815 (method git-fetch)
6816 (uri (git-reference
6817 (url "https://github.com/daanzu/py-webrtcvad-wheels")
6818 (commit (string-append "v" version))))
6819 (file-name (git-file-name name version))
6820 (sha256
6821 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
6822 (build-system pyproject-build-system)
6823 (native-inputs (list python-psutil python-pytest python-setuptools))
6824 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
6825 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
6826 (description
6827 "This package provides a Python interface to the Google
6828@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
6829 (license license:expat)))
6830
6831(define-public python-websocket-client
6832 (package
6833 (name "python-websocket-client")
6834 (version "1.8.0")
6835 (source
6836 (origin
6837 (method url-fetch)
6838 (uri (pypi-uri "websocket_client" version))
6839 (sha256
6840 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
6841 (build-system pyproject-build-system)
6842 (arguments
6843 (list
6844 #:test-flags
6845 ;; This test requires networking.
6846 '(list "-k" "not testConnect")))
6847 (native-inputs
6848 (list python-pysocks
6849 python-pytest
6850 python-setuptools
6851 python-websockets
6852 python-wheel))
6853 (home-page "https://github.com/websocket-client/websocket-client")
6854 (synopsis "WebSocket client for Python")
6855 (description "The Websocket-client module provides the low level APIs for
6856WebSocket usage in Python programs.")
6857 (license license:lgpl2.1+)))
6858
6859(define-public python-websocket-client-0.59
6860 (package
6861 (inherit python-websocket-client)
6862 (version "0.59.0")
6863 (source
6864 (origin
6865 (method url-fetch)
6866 (uri (pypi-uri "websocket-client" version))
6867 (sha256
6868 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
6869 (native-inputs
6870 (modify-inputs native-inputs
6871 (append python-six)))))
6872
6873(define-public python-purl
6874 (package
6875 (name "python-purl")
6876 (version "1.6")
6877 (source
6878 (origin
6879 (method git-fetch)
6880 (uri (git-reference
6881 (url "https://github.com/codeinthehole/purl")
6882 (commit version)))
6883 (file-name (git-file-name name version))
6884 (sha256
6885 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
6886 (build-system pyproject-build-system)
6887 (arguments
6888 (list
6889 #:test-flags #~(list "--pyargs" "./tests")))
6890 (native-inputs (list python-pytest python-setuptools))
6891 (propagated-inputs (list python-six))
6892 (home-page "https://github.com/codeinthehole/purl")
6893 (synopsis "Python package for URL manipulation")
6894 (description "Purl is a Python package for handling URLs.")
6895 (license license:expat)))
6896
6897(define-public python-apiron
6898 (package
6899 (name "python-apiron")
6900 (version "5.1.0")
6901 (source
6902 (origin
6903 (method url-fetch)
6904 (uri (pypi-uri "apiron" version))
6905 (sha256
6906 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
6907 (build-system pyproject-build-system)
6908 (arguments
6909 (list #:test-flags '(list "-k" "not test_call")))
6910 (propagated-inputs
6911 (list python-requests))
6912 (native-inputs
6913 (list python-pytest python-pytest-cov
6914 python-setuptools python-wheel))
6915 (home-page "https://github.com/ithaka/apiron")
6916 (synopsis "Python wrapper for interacting with RESTful APIs")
6917 (description
6918 "@code{apiron} provides a declarative, structured configuration of
6919services and endpoints with a unified interface for interacting with RESTful
6920APIs.")
6921 (license license:expat)))
6922
6923(define-public python-beren
6924 (package
6925 (name "python-beren")
6926 (version "0.7.0")
6927 (source
6928 (origin
6929 (method git-fetch)
6930 (uri (git-reference
6931 (url "https://github.com/teffalump/beren")
6932 (commit (string-append "v" version))))
6933 (file-name (git-file-name name version))
6934 (sha256
6935 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
6936 (build-system pyproject-build-system)
6937 (arguments
6938 ;; The test tries to open a connection to a remote server.
6939 `(#:tests? #f))
6940 (native-inputs (list python-setuptools))
6941 (propagated-inputs (list python-apiron))
6942 (home-page "https://github.com/teffalump/beren")
6943 (synopsis "REST client for Orthanc DICOM servers")
6944 (description
6945 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
6946 (license license:gpl3+)))
6947
6948(define-public python-requests
6949 (package
6950 (name "python-requests")
6951 (version "2.32.5")
6952 (source (origin
6953 (method url-fetch)
6954 (uri (pypi-uri "requests" version))
6955 (sha256
6956 (base32
6957 "1kypqz701x9s7j4shm1pdnzy4pzx9lmvhwgan0yqa071asn0pfnv"))))
6958 (build-system pyproject-build-system)
6959 (arguments
6960 (list #:test-flags
6961 ;; These require internet access
6962 '(list "--ignore=tests/test_requests.py"
6963 "-k" (string-append "not test_use_proxy_from_environment"
6964 " and not requests.sessions.Session"
6965 " and not requests.models.PreparedRequest"
6966 " and not requests.api.request")
6967 "tests/")))
6968 (propagated-inputs
6969 (list python-certifi
6970 python-charset-normalizer
6971 python-idna
6972 python-urllib3))
6973 (native-inputs
6974 (list python-pytest
6975 python-pytest-mock
6976 python-setuptools))
6977 (home-page "https://requests.readthedocs.io/")
6978 (synopsis "Python HTTP library")
6979 (description
6980 "Requests is a Python HTTP client library. It aims to be easier to use
6981than Python’s urllib2 library.")
6982 (license license:asl2.0)))
6983
6984(define-public python-requests-kerberos
6985 (package
6986 (name "python-requests-kerberos")
6987 (version "0.14.0")
6988 ;; No tests in the PyPI tarball.
6989 (source
6990 (origin
6991 (method git-fetch)
6992 (uri (git-reference
6993 (url "https://github.com/requests/requests-kerberos")
6994 (commit (string-append "v" version))))
6995 (file-name (git-file-name name version))
6996 (sha256
6997 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
6998 (build-system pyproject-build-system)
6999 (propagated-inputs (list python-cryptography
7000 python-pyspnego
7001 python-requests))
7002 (native-inputs (list python-pytest python-pytest-mock python-setuptools
7003 python-wheel))
7004 (home-page "https://github.com/requests/requests-kerberos")
7005 (synopsis "Kerberos authentication handler for python-requests")
7006 (description "This package provides a Kerberos authentication handler for
7007python-requests.")
7008 (license license:isc)))
7009
7010(define-public python-requests-unixsocket2
7011 (package
7012 (name "python-requests-unixsocket2")
7013 (version "1.0.1")
7014 (source
7015 (origin
7016 (method git-fetch)
7017 (uri (git-reference
7018 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
7019 (commit (string-append "v" version))))
7020 (sha256
7021 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
7022 (build-system pyproject-build-system)
7023 (native-inputs
7024 (list nss-certs-for-test
7025 python-hatchling
7026 python-pytest
7027 python-waitress))
7028 (propagated-inputs
7029 (list python-requests
7030 python-urllib3))
7031 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
7032 (synopsis "Talk HTTP via a UNIX domain socket")
7033 (description
7034 "This Python package lets you use the @code{requests} library to talk
7035HTTP via a UNIX domain socket.")
7036 (license license:asl2.0)))
7037
7038(define-public python-requests-ntlm
7039 (package
7040 (name "python-requests-ntlm")
7041 (version "1.3.0")
7042 (source
7043 (origin
7044 (method git-fetch)
7045 (uri (git-reference
7046 (url "https://github.com/requests/requests-ntlm")
7047 (commit (string-append "v" version))))
7048 (file-name (git-file-name name version))
7049 (sha256
7050 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
7051 (build-system pyproject-build-system)
7052 (arguments
7053 (list
7054 #:test-flags
7055 ;; XXX: Connection refused.
7056 #~(list "-k" (string-join
7057 (list "not test_ntlm_http_with_cbt"
7058 "test_ntlm_http_without_cbt"
7059 "test_ntlm_https_with_cbt"
7060 "test_ntlm_https_without_cbt")
7061 " and not "))
7062 #:phases
7063 #~(modify-phases %standard-phases
7064 (add-before 'check 'spawn-test-server
7065 (lambda _
7066 ;; Taken from .github/workflows/ci.yml.
7067 (spawn "python"
7068 (list "python" "-m" "tests.test_server")))))))
7069 (propagated-inputs
7070 (list python-cryptography python-pyspnego python-requests))
7071 (native-inputs (list python-flask python-pytest python-setuptools))
7072 (home-page "https://github.com/requests/requests-ntlm")
7073 (synopsis "NTLM authentication support for Requests")
7074 (description
7075 "This package allows for HTTP NTLM authentication using the requests
7076library.")
7077 (license license:isc)))
7078
7079(define-public python-requests-mock
7080 (package
7081 (name "python-requests-mock")
7082 (version "1.12.1")
7083 (source
7084 (origin
7085 (method url-fetch)
7086 (uri (pypi-uri "requests-mock" version))
7087 (sha256
7088 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
7089 (build-system pyproject-build-system)
7090 (native-inputs
7091 (list python-purl
7092 python-pytest
7093 python-requests-futures
7094 python-setuptools
7095 python-setuptools-scm
7096 python-testtools))
7097 (propagated-inputs
7098 (list python-requests))
7099 (home-page "https://requests-mock.readthedocs.org/")
7100 (synopsis "Mock out responses from the requests package")
7101 (description
7102 "This module provides a building block to stub out the HTTP requests
7103portions of your testing code.")
7104 (license license:asl2.0)))
7105
7106(define-public python-requests-toolbelt
7107 (package
7108 (name "python-requests-toolbelt")
7109 (version "1.0.0")
7110 (source
7111 (origin
7112 (method url-fetch)
7113 (uri (pypi-uri "requests-toolbelt" version))
7114 (sha256
7115 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
7116 (build-system pyproject-build-system)
7117 (arguments
7118 (list
7119 #:test-flags
7120 ;; Requiring networking or fail due not valid certs: AttributeError:
7121 ;; 'MockHTTPResponse' object has no attribute 'close'
7122 #~(list "-k" (string-append "not test_dump_all"
7123 " and not test_dump_response"
7124 " and not test_prepared_request_override_base"
7125 " and not test_prepared_request_with_base"
7126 " and not test_request_override_base"
7127 " and not test_request_with_base"))))
7128 (native-inputs
7129 (list python-betamax
7130 python-mock
7131 python-pyopenssl
7132 python-pytest
7133 python-setuptools
7134 python-trustme
7135 python-wheel))
7136 (propagated-inputs
7137 (list python-requests))
7138 (synopsis "Extensions to python-requests")
7139 (description "This is a toolbelt of useful classes and functions to be used
7140with python-requests.")
7141 (home-page "https://github.com/requests/toolbelt/")
7142 (license license:asl2.0)))
7143
7144(define-public python-requests-ftp
7145 (package
7146 (name "python-requests-ftp")
7147 (version "0.3.1")
7148 (source
7149 (origin
7150 (method git-fetch)
7151 (uri (git-reference
7152 (url "https://github.com/Lukasa/requests-ftp")
7153 (commit (string-append "v" version))))
7154 (file-name (git-file-name name version))
7155 (sha256
7156 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
7157 (build-system pyproject-build-system)
7158 (arguments
7159 ;; XXX: No connection adapters found.
7160 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
7161 (native-inputs
7162 (list python-pyftpdlib python-pytest python-setuptools python-six))
7163 (propagated-inputs (list python-requests))
7164 (home-page "https://github.com/Lukasa/requests-ftp")
7165 (synopsis "FTP Transport Adapter for Requests")
7166 (description "Requests-FTP is an implementation of a simple FTP transport
7167adapter for use with the Requests library.")
7168 (license license:asl2.0)))
7169
7170(define-public python-aioftp
7171 (package
7172 (name "python-aioftp")
7173 (version "0.27.2")
7174 (source (origin
7175 (method url-fetch)
7176 (uri (pypi-uri "aioftp" version))
7177 (sha256
7178 (base32
7179 "06i6xfxxrwncmgihp98jxhy7xngsv2gzv9ijk32rc5q840r8q13w"))))
7180 (build-system pyproject-build-system)
7181 (native-inputs
7182 (list python-async-timeout
7183 python-pytest
7184 python-pytest-asyncio
7185 python-pytest-cov
7186 python-pytest-mock
7187 python-setuptools
7188 python-siosocks
7189 python-trustme))
7190 (home-page "https://aioftp.readthedocs.io/")
7191 (synopsis "FTP client/server for asyncio in Python")
7192 (description
7193 "FTP client and server for asyncio (Python 3) Library implementing FTP
7194protocol, both client and server for Python asyncio module.
7195
7196 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
7197 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
7198 REST, LIST (as fallback).
7199
7200 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
7201 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
7202 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
7203 (license license:asl2.0)))
7204
7205(define-public python-mohawk
7206 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
7207 (revision "0"))
7208 (package
7209 (name "python-mohawk")
7210 (version (git-version "1.1.0" revision commit))
7211 (source
7212 (origin
7213 (method git-fetch)
7214 (uri (git-reference
7215 (url "https://github.com/kumar303/mohawk")
7216 (commit commit)))
7217 (file-name (git-file-name name version))
7218 (sha256
7219 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
7220 (patches
7221 (search-patches "python-mohawk-pytest.patch"))))
7222 (build-system pyproject-build-system)
7223 (arguments
7224 (list #:test-flags #~(list "mohawk/tests.py")))
7225 (native-inputs (list python-pytest python-setuptools))
7226 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
7227 ;python-six is removed?
7228 (home-page "https://github.com/kumar303/mohawk")
7229 (synopsis "Library for Hawk HTTP authorization")
7230 (description
7231 "Mohawk is an alternate Python implementation of the Hawk HTTP
7232authorization scheme.")
7233 (license license:bsd-3))))
7234
7235(define-public python-msal
7236 (package
7237 (name "python-msal")
7238 (version "1.34.0")
7239 (home-page
7240 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
7241 (source
7242 (origin
7243 (method git-fetch)
7244 (uri (git-reference
7245 (url home-page)
7246 (commit version)))
7247 (file-name (git-file-name name version))
7248 (sha256
7249 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
7250 (patches (search-patches "python-msal-requests.patch"))))
7251 (build-system pyproject-build-system)
7252 (arguments
7253 (list
7254 #:test-flags
7255 #~(list
7256 "--ignore=tests/test_benchmark.py"
7257 ;; XXX: Ignoring cryptography version scheme tests.
7258 "-k"
7259 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
7260 ;; XXX: These tests try to access the network.
7261 "--ignore=tests/test_application.py"
7262 "--ignore=tests/test_ccs.py"
7263 ;; XXX: These tests assume they are run on Windows.
7264 "--ignore=tests/test_mi.py")
7265 #:phases
7266 #~(modify-phases %standard-phases
7267 (add-after 'unpack 'set-cryptography-version
7268 (lambda _
7269 (substitute* "tests/test_cryptography.py"
7270 (("^latest_cryptography_version = @version@")
7271 (format #f "latest_cryptography_version = ~s"
7272 #$(package-version
7273 (this-package-input "python-cryptography")))))))
7274 (add-before 'check 'configure-tests
7275 (lambda* (#:key tests? #:allow-other-keys)
7276 (when tests?
7277 (setenv "TRAVIS_TAG" "1")))))))
7278 (native-inputs
7279 (list nss-certs-for-test python-mock python-pytest python-setuptools))
7280 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
7281 (synopsis "Microsoft Authentication Library (MSAL) for Python")
7282 (description
7283 "The Microsoft Authentication Library for Python enables applications to
7284integrate with the Microsoft identity platform. It allows you to sign in
7285users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
7286Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
7287Microsoft Graph or your own APIs registered with the Microsoft identity
7288platform. It is built using industry standard OAuth2 and OpenID Connect
7289protocols.")
7290 (license license:expat)))
7291
7292(define-public oauth2ms
7293 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
7294 (revision "0"))
7295 (package
7296 (name "oauth2ms")
7297 (version (git-version "0.0.0" revision commit))
7298 (source (origin
7299 (method git-fetch)
7300 (uri (git-reference
7301 (url "https://github.com/harishkrupo/oauth2ms")
7302 (commit commit)))
7303 (file-name (git-file-name name version))
7304 (sha256
7305 (base32
7306 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
7307 (build-system copy-build-system)
7308 (arguments
7309 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
7310 ("." #$(string-append "share/doc/" name "-"
7311 version "/")
7312 #:include-regexp ("\\.org$")))
7313 #:phases #~(modify-phases %standard-phases
7314 (add-after 'install 'wrap-pythonpath
7315 (lambda* (#:key inputs outputs #:allow-other-keys)
7316 (let ((path (getenv "GUIX_PYTHONPATH")))
7317 (wrap-program (string-append #$output
7318 "/bin/oauth2ms")
7319 `("GUIX_PYTHONPATH" ":" prefix
7320 (,path)))))))))
7321 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
7322 (home-page "https://github.com/harishkrupo/oauth2ms")
7323 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
7324 (description
7325 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
7326endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
7327used as authentication in IMAP mail servers.")
7328 (license license:asl2.0))))
7329
7330(define-public python-oauthlib
7331 (package
7332 (name "python-oauthlib")
7333 (version "3.3.1")
7334 (source
7335 (origin
7336 (method git-fetch)
7337 (uri (git-reference
7338 (url "https://github.com/oauthlib/oauthlib")
7339 (commit (string-append "v" version))))
7340 (file-name (git-file-name name version))
7341 (sha256
7342 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
7343 (build-system pyproject-build-system)
7344 (native-inputs (list python-pytest python-pytest-cov python-mock
7345 python-setuptools))
7346 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
7347 (home-page "https://github.com/oauthlib/oauthlib")
7348 (synopsis "OAuth implementation for Python")
7349 (description
7350 "Oauthlib is a generic, spec-compliant, thorough implementation of the
7351OAuth request-signing logic.")
7352 (license license:bsd-3)))
7353
7354(define-public python-urllib3
7355 (package
7356 (name "python-urllib3")
7357 (version "2.5.0")
7358 (source
7359 (origin
7360 (method url-fetch)
7361 (uri (pypi-uri "urllib3" version))
7362 (sha256
7363 (base32
7364 "0q17z6zlpyjv9ax5c3d30qwp9fwhz2sc4gbb7yyd86g4qwrpgi1z"))))
7365 (build-system pyproject-build-system)
7366 (arguments `(#:tests? #f))
7367 (native-inputs
7368 (list python-hatch-vcs
7369 python-hatchling
7370 python-setuptools-scm))
7371 (propagated-inputs
7372 (append
7373 ;; These 5 inputs are used to build urrlib3[secure]
7374 (list python-certifi)
7375 (if (member (%current-system)
7376 (package-transitive-supported-systems python-cryptography))
7377 (list python-cryptography)
7378 '())
7379 (list python-idna)
7380 (if (member (%current-system)
7381 (package-transitive-supported-systems python-pyopenssl))
7382 (list python-pyopenssl)
7383 '())
7384 (list python-pysocks)))
7385 (home-page "https://urllib3.readthedocs.io/")
7386 (synopsis "HTTP library with thread-safe connection pooling")
7387 (description
7388 "Urllib3 supports features left out of urllib and urllib2 libraries. It
7389can reuse the same socket connection for multiple requests, it can POST files,
7390supports url redirection and retries, and also gzip and deflate decoding.")
7391 (license license:expat)))
7392
7393(define-public python-urllib3-1.25
7394 (package
7395 (inherit python-urllib3)
7396 (version "1.25.19")
7397 (source
7398 (origin
7399 (method url-fetch)
7400 (uri (pypi-uri "urllib3" version))
7401 (sha256
7402 (base32
7403 "09rmjqm5syhhc8fx3v06h3yv6cqy0b1081jg8wm5grpwpr72j61h"))))
7404 (native-inputs
7405 (list python-setuptools
7406 python-wheel))))
7407
7408(define-public python-urllib3-1.26
7409 (package
7410 (inherit python-urllib3)
7411 (version "1.26.17")
7412 (source
7413 (origin
7414 (method url-fetch)
7415 (uri (pypi-uri "urllib3" version))
7416 (sha256
7417 (base32
7418 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
7419 (native-inputs
7420 (list python-setuptools
7421 python-wheel))))
7422
7423(define-public python-awscrt
7424 (package
7425 (name "python-awscrt")
7426 (version "0.26.1")
7427 (source
7428 (origin
7429 (method url-fetch)
7430 (uri (pypi-uri "awscrt" version))
7431 (sha256
7432 (base32 "0plkc0i0gc6z8fqnyy8kbg43sv3jnv8shcavcz0wb134riykmmm8"))))
7433 (build-system pyproject-build-system)
7434 (arguments
7435 (list
7436 #:test-backend #~'unittest
7437 #:test-flags #~(list "discover" "--verbose")
7438 #:phases
7439 #~(modify-phases %standard-phases
7440 (add-after 'unpack 'disable-broken-tests
7441 (lambda _
7442 ;; Disable broken tests. These tests fail because the
7443 ;; certificate bundle at the default location does not exist.
7444 (substitute* "test/test_auth.py"
7445 (("def test_default_provider")
7446 "def _test_default_provider"))
7447 (substitute* "test/test_http_client.py"
7448 (("def test_h2_client")
7449 "def _test_h2_client"))
7450 (substitute* "test/test_s3.py"
7451 (("def test_sanity")
7452 "def _test_sanity")
7453 (("def test_sanity_secure")
7454 "def _test_sanity_secure")
7455 (("def test_wait_shutdown")
7456 "def _test_wait_shutdown"))))
7457 (add-after 'unpack 'override-cert-bundle-location
7458 (lambda* (#:key inputs #:allow-other-keys)
7459 (let ((bundle (search-input-file inputs
7460 "/etc/ssl/certs/ca-certificates.crt")))
7461 (setenv "SSL_CERT_FILE" bundle)
7462 (substitute* "awscrt/io.py"
7463 (("( +)opt = TlsContextOptions\\(\\)" m indent)
7464 (string-append m "\n"
7465 indent "import os\n"
7466 indent "\
7467opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n")))
7468 (substitute* "test/appexit_http.py"
7469 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
7470 (string-append m indent
7471 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
7472 bundle "')\n")))
7473 (substitute* "test/test_io.py"
7474 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
7475 (string-append m indent
7476 "opt.override_default_trust_store_from_path(None, '"
7477 bundle "')\n"))))))
7478 (add-after 'unpack 'use-system-libraries
7479 (lambda _
7480 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
7481 (inputs (list openssl))
7482 (native-inputs (list cmake-minimal
7483 nss-certs-for-test
7484 python-boto3
7485 python-setuptools
7486 python-websockets))
7487 (home-page "https://github.com/awslabs/aws-crt-python")
7488 (synopsis "Common runtime for AWS Python projects")
7489 (description
7490 "This package provides a common runtime for AWS Python projects.")
7491 (license license:asl2.0)))
7492
7493(define-public awscli
7494 (package
7495 ;; Note: updating awscli typically requires updating botocore as well.
7496 (name "awscli")
7497 (version "1.43.11")
7498 (source
7499 (origin
7500 (method git-fetch)
7501 (uri (git-reference
7502 (url "https://github.com/aws/aws-cli")
7503 (commit version)))
7504 (file-name (git-file-name name version))
7505 (sha256
7506 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
7507 (build-system pyproject-build-system)
7508 (arguments
7509 (list
7510 ;; tests: 2715 passed, 32 warnings
7511 #:test-flags
7512 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7513 ;; Complete test suite is huge and compute hungry, run just unit
7514 ;; tests.
7515 "--ignore=tests/dependencies"
7516 "--ignore=tests/functional"
7517 "--ignore=tests/integration"
7518 ;; TypeError: 'Mock' object is not subscriptable.
7519 "-k" "not test_no_groff_or_mandoc_exists")
7520 #:phases
7521 #~(modify-phases %standard-phases
7522 (add-after 'unpack 'fix-reference-to-groff
7523 (lambda _
7524 ;; XXX: Consider to use wrap-program instead, it tries to parse
7525 ;; the PATH.
7526 (substitute* "awscli/help.py"
7527 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
7528 (("raise ExecutableNotFoundError\\('groff'\\)") "")
7529 (("cmdline = \\['groff'")
7530 (format #f "cmdline = ['~a/bin/groff'"
7531 #$(this-package-input "groff-minimal"))))))
7532 (add-before 'check 'set-environment
7533 (lambda _
7534 ;; PermissionError: [Errno 13] Permission denied:
7535 ;; '/homeless-shelter'
7536 (setenv "HOME" "/tmp"))))))
7537 (native-inputs
7538 (list python-pytest
7539 python-pytest-xdist
7540 python-setuptools
7541 python-wheel))
7542 (inputs
7543 (list groff-minimal
7544 python-botocore
7545 python-colorama
7546 python-docutils-0.19
7547 python-pyyaml
7548 python-rsa-for-awscli-1
7549 python-s3transfer))
7550 (home-page "https://aws.amazon.com/cli/")
7551 (synopsis "Command line client for AWS")
7552 (description
7553 "AWS CLI provides a unified command line interface to the Amazon Web
7554Services (AWS) API.")
7555 (license license:asl2.0)))
7556
7557(define-public awscli-2
7558 (package
7559 (inherit awscli)
7560 ;; Note: updating awscli-2 typically requires updating python-awscrt.
7561 (name "awscli")
7562 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
7563 ;; any fresh one compatible with current state of dependencies in Guix.
7564 (version "2.28.0")
7565 (source
7566 (origin
7567 (method git-fetch)
7568 (uri (git-reference
7569 (url "https://github.com/aws/aws-cli")
7570 (commit version)))
7571 (file-name (git-file-name name version))
7572 (sha256
7573 (base32
7574 "1a1jzvdm434x46yh7ir11lw0nzc64ns4qvxhp5wfra3rh5ykf36j"))))
7575 (build-system pyproject-build-system)
7576 (arguments
7577 (list
7578 ;; When updating and checking locally be very patient as build phase may
7579 ;; hang for 6-8 minutes but eventually passes through.
7580 ;;
7581 ;; tests: 4189 passed, 1 skipped, 2 warnings
7582 #:test-flags
7583 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7584 ;; Full test suite contains more than 70k tests; ignore network
7585 ;; dependent, slow and compute intense tests, keep just unit
7586 ;; tests.
7587 "--ignore=tests/backends"
7588 "--ignore=tests/dependencies"
7589 "--ignore=tests/functional"
7590 "--ignore=tests/integration"
7591 "--ignore=tests/unit/botocore"
7592 ;; Flaky, something to do with PATH disappearing from os.environ?
7593 ;; Passes when run on its own, so maybe something else is
7594 ;; modifying this during the test run.
7595 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
7596 ;; TypeError: 'Mock' object is not subscriptable
7597 "-k" "not test_no_groff_or_mandoc_exists")
7598 #:phases
7599 #~(modify-phases %standard-phases
7600 (add-after 'unpack 'ignore-deprecations
7601 (lambda _
7602 (substitute* "pyproject.toml"
7603 (("\"error::") "\"ignore::"))))
7604 (add-after 'unpack 'fix-reference-to-groff
7605 (lambda* (#:key inputs #:allow-other-keys)
7606 (substitute* "awscli/help.py"
7607 (("if self._exists_on_path\\('groff'\\):") "if True:")
7608 (("cmdline = \\['groff'")
7609 (string-append "cmdline = ['"
7610 (search-input-file inputs "bin/groff")
7611 "'")))))
7612 (add-before 'check 'pre-check
7613 (lambda _ (setenv "HOME" "/tmp"))))))
7614 (inputs
7615 (list groff
7616 ;; less
7617 nss-certs-for-test
7618 python-awscrt
7619 python-colorama
7620 python-dateutil
7621 python-distro
7622 python-docutils
7623 python-jmespath
7624 python-prompt-toolkit
7625 python-ruamel.yaml
7626 python-ruamel.yaml.clib
7627 python-urllib3))
7628 (native-inputs
7629 (list python-flit-core
7630 python-pytest
7631 python-pytest-xdist))))
7632
7633(define-public python-wsgiproxy2
7634 (package
7635 (name "python-wsgiproxy2")
7636 (version "0.5.1")
7637 (source
7638 (origin
7639 (method git-fetch)
7640 (uri (git-reference
7641 (url "https://github.com/gawel/WSGIProxy2/")
7642 (commit version)))
7643 (file-name (git-file-name name version))
7644 (sha256
7645 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
7646 (build-system pyproject-build-system)
7647 (arguments (list #:test-backend #~'unittest))
7648 (native-inputs (list python-webtest python-setuptools))
7649 (propagated-inputs (list python-requests python-six python-urllib3
7650 python-webob))
7651 (home-page "https://github.com/gawel/WSGIProxy2/")
7652 (synopsis "WSGI Proxy with various http client backends")
7653 (description
7654 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
7655function calls into HTTP requests. It also includes code to sign requests and
7656pass private data, and to spawn subprocesses to handle requests.")
7657 (license license:expat)))
7658
7659(define-public python-pastedeploy
7660 (package
7661 (name "python-pastedeploy")
7662 (version "3.1.0")
7663 (source
7664 (origin
7665 (method url-fetch)
7666 (uri (pypi-uri "PasteDeploy" version))
7667 (sha256
7668 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
7669 (build-system pyproject-build-system)
7670 (native-inputs (list python-pytest python-pytest-cov python-setuptools))
7671 (home-page "https://pylonsproject.org/")
7672 (synopsis "Load, configure, and compose WSGI applications and servers")
7673 (description
7674 "This tool provides code to load WSGI applications and servers from URIs;
7675these URIs can refer to Python Eggs for INI-style configuration files. Paste
7676Script provides commands to serve applications based on this configuration
7677file.")
7678 (license license:expat)))
7679
7680(define-public python-webtest
7681 (package
7682 (name "python-webtest")
7683 (version "3.0.6")
7684 (source
7685 (origin
7686 (method url-fetch)
7687 (uri (pypi-uri "webtest" version))
7688 (sha256
7689 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
7690 (build-system pyproject-build-system)
7691 (arguments
7692 ;; Tests require python-pyquery, which creates a circular dependency.
7693 `(#:tests? #f))
7694 (native-inputs
7695 (list python-setuptools))
7696 (propagated-inputs
7697 (list python-beautifulsoup4
7698 python-waitress
7699 python-webob))
7700 (home-page "https://docs.pylonsproject.org/projects/webtest/")
7701 (synopsis "Helper to test WSGI applications")
7702 (description
7703 "Webtest allows you to test your Python web applications without
7704starting an HTTP server. It supports anything that supports the minimum of
7705WSGI.")
7706 (license license:expat)))
7707
7708(define-public python-flask
7709 (package
7710 (name "python-flask")
7711 (version "3.1.0")
7712 (source
7713 (origin
7714 (method url-fetch)
7715 (uri (pypi-uri "flask" version))
7716 (sha256
7717 (base32 "1b1nb250jxrjplbs21wnwq69250vs3iz2pdhs7cwi5y8hi8kr1sz"))))
7718 (build-system pyproject-build-system)
7719 (native-inputs
7720 (list python-flit-core
7721 python-pytest))
7722 (propagated-inputs
7723 (list python-asgiref ;async extra
7724 python-click
7725 python-blinker
7726 python-itsdangerous
7727 python-jinja2
7728 python-werkzeug))
7729 (home-page "https://palletsprojects.com/p/flask/")
7730 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
7731 (description "Flask is a micro web framework based on the Werkzeug toolkit
7732and Jinja2 template engine. It is called a micro framework because it does not
7733presume or force a developer to use a particular tool or library.")
7734 (license license:bsd-3)))
7735
7736(define-public python-flask-compress
7737 (package
7738 (name "python-flask-compress")
7739 (version "1.18")
7740 (source (origin
7741 (method url-fetch)
7742 (uri (pypi-uri "flask_compress" version))
7743 (sha256
7744 (base32
7745 "0fj1r0ixsjls7z3a2zzamxppjz4qcf8q4jcmn74gsk9kisyy3fpx"))))
7746 (build-system pyproject-build-system)
7747 (native-inputs
7748 (list python-flask-caching
7749 python-pytest
7750 python-setuptools
7751 python-setuptools-scm))
7752 (propagated-inputs
7753 (list python-brotli
7754 python-flask
7755 python-pyzstd))
7756 (home-page "https://github.com/colour-science/flask-compress")
7757 (synopsis "Compress responses in a Flask app")
7758 (description
7759 "This package lets you compress Flask application responses and static
7760files with gzip, deflate or brotli. Flask-Compress both adds the various
7761headers required for a compressed response and compresses the response data.")
7762 (license license:expat)))
7763
7764(define-public python-flask-seasurf
7765 (package
7766 (name "python-flask-seasurf")
7767 (version "2.0.0")
7768 (source (origin
7769 (method url-fetch)
7770 (uri (pypi-uri "Flask-SeaSurf" version))
7771 (sha256
7772 (base32
7773 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
7774 (build-system pyproject-build-system)
7775 (arguments
7776 (list #:tests? #false)) ;there are none
7777 (propagated-inputs (list python-flask))
7778 (native-inputs (list python-setuptools python-wheel))
7779 (home-page "https://github.com/maxcountryman/flask-seasurf/")
7780 (synopsis "CSRF extension for Flask")
7781 (description "SeaSurf is a Flask extension for preventing cross-site
7782request forgery (CSRF). CSRF attacks are problematic because the mechanism
7783they use is relatively easy to exploit. This extension attempts to aid you in
7784securing your application from such attacks. This extension is based on the
7785Django middleware.")
7786 (license license:bsd-3)))
7787
7788(define-public python-flask-wtf
7789 (package
7790 (name "python-flask-wtf")
7791 (version "1.2.2")
7792 (source
7793 (origin
7794 (method url-fetch)
7795 (uri (pypi-uri "Flask-WTF" version))
7796 (sha256
7797 (base32
7798 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
7799 (build-system pyproject-build-system)
7800 (propagated-inputs
7801 (list python-flask python-flask python-itsdangerous python-wtforms))
7802 (native-inputs
7803 (list python-hatchling python-pytest))
7804 (home-page "https://github.com/lepture/flask-wtf")
7805 (synopsis "Simple integration of Flask and WTForms")
7806 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
7807upload, and reCAPTCHA.")
7808 (license license:bsd-3)))
7809
7810(define-public python-flask-multistatic
7811 (package
7812 (name "python-flask-multistatic")
7813 (version "1.0")
7814 (source
7815 (origin
7816 (method url-fetch)
7817 (uri (pypi-uri "flask-multistatic" version))
7818 (sha256
7819 (base32
7820 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
7821 (build-system pyproject-build-system)
7822 (arguments (list #:tests? #f)) ; No tests upstream.
7823 (native-inputs (list python-setuptools))
7824 (propagated-inputs (list python-flask))
7825 (home-page "https://pagure.io/flask-multistatic")
7826 (synopsis "Flask plugin to allow overriding static files")
7827 (description "@code{flask-multistatic} is a flask plugin that adds support
7828for overriding static files.")
7829 (license license:gpl3+)))
7830
7831(define-public python-responses
7832 (package
7833 (name "python-responses")
7834 (version "0.25.3")
7835 (source (origin
7836 (method url-fetch)
7837 (uri (pypi-uri "responses" version))
7838 (sha256
7839 (base32
7840 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
7841 (build-system pyproject-build-system)
7842 (native-inputs
7843 (list python-pytest
7844 python-pytest-asyncio
7845 python-pytest-httpserver
7846 python-setuptools
7847 python-tomli
7848 python-tomli-w
7849 python-wheel))
7850 (propagated-inputs
7851 (list python-requests
7852 python-pyyaml
7853 python-urllib3))
7854 (home-page "https://github.com/getsentry/responses")
7855 (synopsis "Utility for mocking out the `requests` Python library")
7856 (description "A utility library for mocking out the `requests` Python
7857library.")
7858 (license license:asl2.0)))
7859
7860(define-public python-grequests
7861 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
7862 (revision "0"))
7863 (package
7864 (name "python-grequests")
7865 (version (git-version "0.7.0" revision commit))
7866 (source
7867 (origin
7868 (method git-fetch)
7869 (uri (git-reference
7870 (url "https://github.com/kennethreitz/grequests")
7871 (commit commit)))
7872 (file-name (git-file-name name version))
7873 (sha256
7874 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
7875 (build-system pyproject-build-system)
7876 (arguments
7877 (list
7878 ;; XXX: Most failing tests seem to be caused by network access,
7879 ;; but there is no easy/flag way to disable tests selectively.
7880 #:tests? #f
7881 #:test-backend #~'unittest
7882 #:test-flags #~(list "tests.py")))
7883 (propagated-inputs (list python-gevent python-requests))
7884 (native-inputs (list python-setuptools))
7885 (home-page "https://github.com/kennethreitz/grequests")
7886 (synopsis "Python library for asynchronous HTTP requests")
7887 (description
7888 "GRequests is a Python library that allows you to use @code{Requests}
7889with @code{Gevent} to make asynchronous HTTP Requests easily.")
7890 (license license:bsd-2))))
7891
7892(define-public python-gwebsockets
7893 (package
7894 (name "python-gwebsockets")
7895 (version "0.7")
7896 (source
7897 (origin
7898 (method git-fetch)
7899 (uri (git-reference
7900 (url "https://github.com/sugarlabs/gwebsockets")
7901 (commit (string-append "v" version))))
7902 (file-name (git-file-name name version))
7903 (sha256
7904 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
7905 (build-system pyproject-build-system)
7906 (arguments (list #:tests? #f)) ; No tests upstream.
7907 (native-inputs (list python-setuptools))
7908 (propagated-inputs (list python-pygobject))
7909 (home-page "https://github.com/sugarlabs/gwebsockets")
7910 (synopsis "GLib based websockets server")
7911 (description
7912 "This package provides a websocket server written in Python. It uses GIO
7913for network communication and hence it easily integrates with the GLib
7914mainloop.")
7915 (license license:asl2.0)))
7916
7917(define-public python-dpkt
7918 (package
7919 (name "python-dpkt")
7920 (version "1.9.8")
7921 (source
7922 (origin
7923 (method git-fetch)
7924 (uri (git-reference
7925 (url "https://github.com/kbandla/dpkt")
7926 (commit (string-append "v" version))))
7927 (file-name (git-file-name name version))
7928 (sha256
7929 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
7930 (build-system pyproject-build-system)
7931 (arguments
7932 (list
7933 #:test-flags
7934 #~(list "--pyargs" "dpkt")))
7935 (native-inputs (list python-pytest python-pytest-cov python-setuptools))
7936 (home-page "https://github.com/kbandla/dpkt")
7937 (synopsis "Packet generator and parser for TCP/IP protocols")
7938 (description
7939 "The dpkt module is a fast, simple packet generator and parser for the
7940basic TCP/IP protocols.")
7941 (license license:bsd-3)))
7942
7943(define-public python-geventhttpclient
7944 (package
7945 (name "python-geventhttpclient")
7946 (version "2.3.9")
7947 (source (origin
7948 (method git-fetch)
7949 (uri (git-reference
7950 (url "https://github.com/geventhttpclient/geventhttpclient")
7951 (commit version)
7952 (recursive? #true)))
7953 (file-name (git-file-name name version))
7954 (sha256
7955 (base32
7956 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
7957 (build-system pyproject-build-system)
7958 (arguments
7959 (list
7960 #:test-flags
7961 ;; Disable network tests.
7962 '(list "-k"
7963 (string-append "not test_client_simple"
7964 " and not test_client_ssl"
7965 " and not test_client_with_default_headers"
7966 " and not test_client_without_leading_slash"
7967 " and not test_download"
7968 " and not test_fail_invalid_ca_certificate"
7969 " and not test_httpbin_multipart"
7970 " and not test_multi_queries_greenlet_safe"
7971 " and not test_no_form_encode_header"
7972 " and not test_no_form_encoded_header"
7973 " and not test_request_with_headers"
7974 " and not test_response_context_manager"
7975 " and not test_urllib_request"))))
7976 (native-inputs (list nss-certs-for-test
7977 python-dpkt python-pytest python-requests
7978 python-setuptools python-wheel))
7979 (propagated-inputs (list python-brotli python-certifi python-gevent
7980 python-urllib3))
7981 (home-page "https://github.com/geventhttpclient/geventhttpclient")
7982 (synopsis "HTTP client library for gevent")
7983 (description "@code{python-geventhttpclient} is a high performance,
7984concurrent HTTP client library for python using @code{gevent}.")
7985 (license license:expat)))
7986
7987(define-public python-gevent-websocket
7988 (package
7989 (name "python-gevent-websocket")
7990 (version "0.10.1")
7991 (source
7992 (origin
7993 (method url-fetch)
7994 (uri (pypi-uri "gevent-websocket" version))
7995 (sha256
7996 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
7997 (build-system pyproject-build-system)
7998 (arguments
7999 (list #:tests? #f)) ; no tests in PyPI or git
8000 (native-inputs
8001 (list python-setuptools
8002 python-wheel))
8003 (propagated-inputs
8004 (list python-gevent))
8005 (home-page "https://gitlab.com/noppo/gevent-websocket")
8006 (synopsis "Websocket handler for the gevent pywsgi server")
8007 (description
8008 "Websocket handler for the gevent pywsgi server, a Python network
8009library.
8010
8011Features include:
8012@itemize
8013@item integration on both socket level or using an abstract interface
8014@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
8015Protocol, WAMP}
8016@item easily extendible using a simple WebSocket protocol plugin API
8017@end itemize")
8018 (license license:asl2.0)))
8019
8020(define-public python-requests-oauthlib
8021 (package
8022 (name "python-requests-oauthlib")
8023 (version "2.0.0")
8024 (source
8025 (origin
8026 (method git-fetch)
8027 (uri (git-reference (url
8028 "https://github.com/requests/requests-oauthlib")
8029 (commit (string-append "v" version))))
8030 (file-name (git-file-name name version))
8031 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
8032 (build-system pyproject-build-system)
8033 (arguments
8034 (list
8035 #:test-flags
8036 #~(list
8037 "--ignore=tests/test_core.py" ; requires network access.
8038 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
8039 "-k" "not test_fetch_access_token"))) ; flaky tests.
8040 (native-inputs
8041 (list python-requests-mock python-pytest python-setuptools))
8042 (propagated-inputs
8043 (list python-oauthlib python-requests))
8044 (home-page "https://github.com/requests/requests-oauthlib")
8045 (synopsis "OAuthlib authentication support for Requests")
8046 (description
8047 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
8048provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
8049 (license license:isc)))
8050
8051(define-public python-cachecontrol
8052 (package
8053 (name "python-cachecontrol")
8054 (version "0.14.1")
8055 (source
8056 (origin
8057 (method git-fetch)
8058 (uri (git-reference
8059 (url "https://github.com/ionrock/cachecontrol")
8060 (commit (string-append "v" version))))
8061 (file-name (git-file-name name version))
8062 (sha256
8063 (base32
8064 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
8065 (build-system pyproject-build-system)
8066 (propagated-inputs
8067 (list python-filelock python-msgpack python-requests))
8068 (native-inputs
8069 (list python-cherrypy python-flit-core python-pytest))
8070 (home-page "https://github.com/ionrock/cachecontrol")
8071 (synopsis "The httplib2 caching algorithms for use with requests")
8072 (description "CacheControl is a port of the caching algorithms in
8073@code{httplib2} for use with @code{requests} session objects.")
8074 (license license:asl2.0)))
8075
8076(define-public python-betamax
8077 (package
8078 (name "python-betamax")
8079 (version "0.9.0")
8080 (source
8081 (origin
8082 (method url-fetch)
8083 (uri (pypi-uri "betamax" version))
8084 (sha256
8085 (base32
8086 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
8087 (build-system pyproject-build-system)
8088 (arguments
8089 (list
8090 #:test-flags
8091 #~(list "-k" (string-join
8092 ;; Tests require network access to http://httpbin.org/get.
8093 (list "not test_creates_new_cassettes"
8094 "test_placeholders_work"
8095 "test_post_start_hook"
8096 "test_pre_stop_hook"
8097 "test_preplayback_hook"
8098 "test_prerecord_hook"
8099 "test_prerecord_ignoring_hook"
8100 "test_records_new_events_with_existing_cassette"
8101 "test_records_new_interaction"
8102 "test_records_new_interactions"
8103 "test_replaces_old_interactions"
8104 "test_replays_response_from_cassette"
8105 "test_requests_with_json_body"
8106 "test_saves_content_as_gzip"
8107 "test_unicode_is_saved_properly")
8108 " and not "))))
8109 (native-inputs
8110 (list nss-certs-for-test
8111 python-pytest
8112 python-setuptools))
8113 (propagated-inputs
8114 (list python-requests))
8115 (home-page "https://github.com/sigmavirus24/betamax")
8116 (synopsis "Record HTTP interactions with python-requests")
8117 (description
8118 "Betamax will record your test suite's HTTP interactions and replay them
8119during future tests. It is designed to work with python-requests.")
8120 (license license:expat)))
8121
8122(define-public python-betamax-matchers
8123 (package
8124 (name "python-betamax-matchers")
8125 (version "0.4.0")
8126 (source
8127 (origin
8128 (method git-fetch)
8129 (uri (git-reference
8130 (url "https://github.com/sigmavirus24/betamax_matchers")
8131 (commit version)))
8132 (file-name (git-file-name name version))
8133 (sha256
8134 (base32 "0lyg3r91hwfvavyi5k6sddcla37igigycfv1mx40c32byqwl6pq5"))))
8135 (build-system pyproject-build-system)
8136 (native-inputs (list python-pytest python-setuptools))
8137 (propagated-inputs (list python-betamax python-requests-toolbelt))
8138 (home-page "https://github.com/sigmavirus24/betamax_matchers")
8139 (synopsis "VCR imitation for python-requests")
8140 (description "@code{betamax-matchers} provides a set of Matchers for
8141Betamax.")
8142 (license license:asl2.0)))
8143
8144(define-public python-betamax-serializers
8145 (package
8146 (name "python-betamax-serializers")
8147 (version "0.2.1")
8148 (source
8149 (origin
8150 (method git-fetch)
8151 (uri (git-reference
8152 (url "https://gitlab.com/betamax/serializers")
8153 (commit version)))
8154 (file-name (git-file-name name version))
8155 (sha256
8156 (base32 "1p2l5w3vwvjacs2ndahgcjq55qb53i37p8mz1zh85pjxyszdyw2l"))))
8157 (build-system pyproject-build-system)
8158 (arguments (list #:tests? #f)) ; No tests.
8159 (native-inputs (list python-setuptools))
8160 (propagated-inputs (list python-betamax python-pyyaml))
8161 (synopsis "Set of third-party serializers for Betamax")
8162 (description
8163 "Betamax-Serializers are an experimental set of Serializers for Betamax
8164that may possibly end up in the main package.")
8165 (home-page "https://gitlab.com/betamax/serializers")
8166 (license license:asl2.0)))
8167
8168(define-public python-s3fs
8169 (package
8170 (name "python-s3fs")
8171 (version "2026.1.0")
8172 (source
8173 (origin
8174 (method url-fetch)
8175 (uri (pypi-uri "s3fs" version))
8176 (sha256
8177 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
8178 (build-system pyproject-build-system)
8179 ;; TODO: Many tests fail with "No such file or directory" raised by the
8180 ;; HTTP client.
8181 (arguments (list #:tests? #false))
8182 (native-inputs
8183 (list python-setuptools))
8184 (propagated-inputs
8185 (list python-aiobotocore
8186 python-aiohttp
8187 python-fsspec))
8188 (home-page "https://github.com/fsspec/s3fs/")
8189 (synopsis "Convenient filesystem interface over S3")
8190 (description "This package provides a convenient filesystem interface over
8191S3.")
8192 (license license:bsd-3)))
8193
8194(define-public python-s3transfer
8195 (package
8196 (name "python-s3transfer")
8197 (version "0.16.0")
8198 (source
8199 (origin
8200 (method url-fetch)
8201 (uri (pypi-uri "s3transfer" version))
8202 (sha256
8203 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
8204 (build-system pyproject-build-system)
8205 (arguments
8206 (list
8207 ;; tests: 630 passed, 51 skipped
8208 #:test-flags
8209 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
8210 ;; Tests require networking.
8211 "--ignore" "tests/integration")))
8212 (native-inputs
8213 (list python-pytest
8214 python-pytest-xdist
8215 python-setuptools))
8216 (propagated-inputs
8217 (list python-botocore))
8218 (home-page "https://github.com/boto/s3transfer")
8219 (synopsis "Amazon S3 Transfer Manager")
8220 (description
8221 "S3transfer is a Python library for managing Amazon S3 transfers.")
8222 (license license:asl2.0)))
8223
8224(define-public python-flask-restful
8225 (package
8226 (name "python-flask-restful")
8227 (version "0.3.10")
8228 (source
8229 (origin
8230 (method url-fetch)
8231 (uri (pypi-uri "Flask-RESTful" version))
8232 (sha256
8233 (base32
8234 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
8235 (build-system pyproject-build-system)
8236 (arguments
8237 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
8238 (list #:tests? #f))
8239 (propagated-inputs
8240 (list python-aniso8601 python-flask python-pytz))
8241 (native-inputs
8242 (list python-blinker
8243 python-mock
8244 python-pytest
8245 python-setuptools
8246 python-wheel))
8247 (home-page "https://github.com/flask-restful/flask-restful/")
8248 (synopsis "Flask module for creating REST APIs")
8249 (description
8250 "This package contains a Flask module for creating REST APIs.")
8251 (license license:bsd-3)))
8252
8253(define-public python-flask-sqlalchemy
8254 (package
8255 (name "python-flask-sqlalchemy")
8256 (version "3.1.1")
8257 (source (origin
8258 (method url-fetch)
8259 (uri (pypi-uri "flask_sqlalchemy" version))
8260 (sha256
8261 (base32
8262 "04l3dfivznlpvk9p9f20zdbyxl869k42z2w7glddlbc0h6w8pdp4"))))
8263 (build-system pyproject-build-system)
8264 (arguments
8265 (list
8266 #:test-flags
8267 #~(list "-k" (string-append "not test_explicit_table[db2]"
8268 " and not test_explicit_table[db4]")
8269 "-W" "ignore::DeprecationWarning")))
8270 (native-inputs
8271 (list python-flit-core
8272 python-pytest))
8273 (propagated-inputs
8274 (list python-flask
8275 python-sqlalchemy-2))
8276 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
8277 (synopsis "Module adding SQLAlchemy support to your Flask application")
8278 (description
8279 "This package adds SQLAlchemy support to your Flask application.")
8280 (license license:bsd-3)))
8281
8282(define-public python-flask-restful-swagger
8283 (package
8284 (name "python-flask-restful-swagger")
8285 (version "0.20.1")
8286 ;; XXX: Unbundle minified javascript.
8287 (source
8288 (origin
8289 (method git-fetch)
8290 (uri (git-reference
8291 (url "https://github.com/rantav/flask-restful-swagger")
8292 (commit version)))
8293 (file-name (git-file-name name version))
8294 (sha256
8295 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
8296 (build-system pyproject-build-system)
8297 (arguments (list #:tests? #f)) ; No tests.
8298 (native-inputs (list python-setuptools))
8299 (propagated-inputs (list python-flask-restful python-six))
8300 (home-page "https://github.com/rantav/flask-restful-swagger")
8301 (synopsis "Extract Swagger specs from Flask-Restful projects")
8302 (description "This package lets you extract Swagger API documentation
8303specs from your Flask-Restful projects.")
8304 (license license:expat)))
8305
8306(define-public python-htmlmin
8307 (package
8308 (name "python-htmlmin")
8309 (version "0.1.12")
8310 (source
8311 (origin
8312 (method url-fetch)
8313 (uri (pypi-uri "htmlmin" version))
8314 (sha256
8315 (base32
8316 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
8317 (build-system pyproject-build-system)
8318 (arguments
8319 (list #:tests? #f)) ; no tests
8320 (native-inputs (list python-setuptools))
8321 (home-page "https://htmlmin.readthedocs.org/en/latest/")
8322 (synopsis "HTML minifier")
8323 (description "@code{htmlmin} is an HTML minifier that just works.
8324It comes with safe defaults and easily configurable options.")
8325 (license license:bsd-3)))
8326
8327;; XXX: Forked renamed and updated version.
8328(define-public python-htmlmin2
8329 (package/inherit python-htmlmin
8330 (name "python-htmlmin2")
8331 (version "0.1.13")
8332 (source
8333 (origin
8334 (method git-fetch)
8335 (uri (git-reference
8336 (url "https://github.com/wilhelmer/htmlmin")
8337 (commit (string-append "v" version))))
8338 (file-name (git-file-name name version))
8339 (sha256
8340 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
8341 (build-system pyproject-build-system)
8342 (arguments (list #:test-backend #~'unittest))
8343 (native-inputs (list python-setuptools))
8344 (home-page "https://github.com/wilhelmer/htmlmin")
8345 (description
8346 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
8347defaults and easily configurable options. This variant is an updated fork of
8348the original @code{python-htmlmin}.")
8349 (license license:bsd-3)))
8350
8351(define-public python-flask-htmlmin
8352 (package
8353 (name "python-flask-htmlmin")
8354 (version "3.0.0")
8355 (source
8356 (origin
8357 (method git-fetch)
8358 (uri (git-reference
8359 (url "https://github.com/hamidfzm/Flask-HTMLmin")
8360 (commit (string-append "v" version))))
8361 (file-name (git-file-name name version))
8362 (sha256
8363 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
8364 (build-system pyproject-build-system)
8365 (native-inputs (list python-pytest python-setuptools))
8366 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
8367 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
8368 (synopsis "HTML response minifier for Flask")
8369 (description
8370 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
8371 (license license:bsd-3)))
8372
8373(define-public python-jsmin
8374 (package
8375 (name "python-jsmin")
8376 (version "3.0.1")
8377 (source
8378 (origin
8379 (method url-fetch)
8380 (uri (pypi-uri "jsmin" version))
8381 (sha256
8382 (base32
8383 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
8384 (build-system pyproject-build-system)
8385 (arguments (list #:test-backend #~'unittest))
8386 (native-inputs
8387 (list python-setuptools))
8388 (home-page "https://github.com/tikitu/jsmin/")
8389 (synopsis "Python JavaScript minifier")
8390 (description
8391 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
8392on the command line.")
8393 (license license:expat)))
8394
8395(define-public python-flask-login
8396 (package
8397 (name "python-flask-login")
8398 (version "0.6.3")
8399 (source
8400 (origin
8401 (method git-fetch)
8402 (uri (git-reference
8403 (url "https://github.com/maxcountryman/flask-login")
8404 (commit version)))
8405 (file-name (git-file-name name version))
8406 (sha256
8407 (base32 "0wk3dni5qssmbn8ii3hsh89qa3kwr97i92k27bzgsgxvvsfwwzja"))))
8408 (build-system pyproject-build-system)
8409 (propagated-inputs
8410 (list python-flask))
8411 (native-inputs
8412 ;; For tests.
8413 (list python-blinker
8414 python-mock
8415 python-pytest
8416 python-semantic-version
8417 python-setuptools
8418 python-werkzeug
8419 python-wheel))
8420 (home-page "https://github.com/maxcountryman/flask-login")
8421 (synopsis "User session management for Flask")
8422 (description
8423 "@code{Flask-Login} provides user session management for Flask. It
8424handles the common tasks of logging in, logging out, and remembering your
8425users' sessions over extended periods of time.")
8426 (license license:expat)))
8427
8428(define-public python-oauth2client
8429 (package
8430 (name "python-oauth2client")
8431 (version "4.1.3")
8432 (source
8433 (origin
8434 (method git-fetch)
8435 (uri (git-reference
8436 (url "https://github.com/google/oauth2client/")
8437 (commit (string-append "v" version))))
8438 (file-name (git-file-name name version))
8439 (sha256
8440 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
8441 (build-system pyproject-build-system)
8442 (arguments
8443 (list #:tests? #f))
8444 (native-inputs
8445 (list python-setuptools))
8446 (propagated-inputs
8447 (list python-httplib2
8448 python-pyasn1
8449 python-pyasn1-modules
8450 python-pyparsing
8451 python-rsa
8452 python-six))
8453 (home-page "https://github.com/google/oauth2client/")
8454 (synopsis "OAuth 2.0 client library")
8455 (description "@code{python-oauth2client} provides an OAuth 2.0 client
8456library for Python")
8457 (license license:asl2.0)))
8458
8459(define-public python-authlib
8460 (package
8461 (name "python-authlib")
8462 (version "1.5.1")
8463 (source
8464 (origin
8465 (method url-fetch)
8466 (uri (pypi-uri "authlib" version))
8467 (sha256
8468 (base32 "0blpvz2v2r8yvsgm1yr3n61mhwxvh1b0kyf2rp0i4wv6n3n8bg2w"))))
8469 (build-system pyproject-build-system)
8470 ;; No tests target.
8471 (arguments (list #:tests? #false))
8472 (propagated-inputs
8473 (list python-cryptography
8474 python-django
8475 python-flask
8476 python-httpx
8477 python-requests
8478 python-sqlalchemy-2
8479 python-starlette
8480 python-werkzeug))
8481 (native-inputs (list python-pytest python-setuptools python-wheel))
8482 (home-page "https://pypi.org/project/Authlib/1")
8483 (synopsis "Build OAuth and OpenID Connect servers and clients")
8484 (description
8485 "This is a Python library for building OAuth and OpenID Connect servers
8486and clients.")
8487 (license license:bsd-3)))
8488
8489(define-public python-flask-oidc
8490 (package
8491 (name "python-flask-oidc")
8492 (version "2.3.1")
8493 (source
8494 (origin
8495 (method url-fetch)
8496 (uri (pypi-uri "flask_oidc" version))
8497 (sha256
8498 (base32
8499 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
8500 (build-system pyproject-build-system)
8501 (propagated-inputs
8502 (list python-authlib
8503 python-blinker
8504 python-flask
8505 python-requests
8506 python-responses))
8507 (native-inputs
8508 (list python-pytest python-poetry-core))
8509 (home-page "https://github.com/puiterwijk/flask-oidc")
8510 (synopsis "OpenID Connect extension for Flask")
8511 (description "@code{python-flask-oidc} provides an OpenID Connect extension
8512for Flask.")
8513 (license license:bsd-2)))
8514
8515(define-public python-webassets
8516 (package
8517 (name "python-webassets")
8518 (version "3.0.0")
8519 (source
8520 (origin
8521 (method git-fetch)
8522 (uri (git-reference
8523 (url "https://github.com/miracle2k/webassets")
8524 (commit version)))
8525 (file-name (git-file-name name version))
8526 (sha256
8527 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
8528 (build-system pyproject-build-system)
8529 (propagated-inputs (list python-pyyaml python-zope-dottedname))
8530 (native-inputs (list python-hatchling python-pytest))
8531 (home-page "https://github.com/miracle2k/webassets")
8532 (synopsis "Media asset management")
8533 (description
8534 "This package provides utilities to merge, minify and compress Javascript
8535and CSS files,supporting a variety of different filters, including YUI, jsmin,
8536jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
8537 (license license:bsd-2)))
8538
8539(define-public python-cssmin
8540 (package
8541 (name "python-cssmin")
8542 (version "0.2.0")
8543 (source
8544 (origin
8545 (method git-fetch)
8546 (uri (git-reference
8547 (url "https://github.com/zacharyvoase/cssmin")
8548 (commit (string-append "v" version))))
8549 (file-name (git-file-name name version))
8550 (sha256
8551 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
8552 (build-system pyproject-build-system)
8553 (arguments (list #:tests? #f)) ; No tests.
8554 (native-inputs (list python-setuptools))
8555 (home-page "https://github.com/zacharyvoase/cssmin")
8556 (synopsis "Python port of the YUI CSS Compressor")
8557 (description "Python port of the YUI CSS Compressor.")
8558 (license (list license:expat license:bsd-3))))
8559
8560(define-public python-elastic-transport
8561 (package
8562 (name "python-elastic-transport")
8563 (version "9.1.0")
8564 (source
8565 (origin
8566 (method url-fetch)
8567 (uri (pypi-uri "elastic_transport" version))
8568 (sha256
8569 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
8570 (build-system pyproject-build-system)
8571 (arguments
8572 (list
8573 #:test-flags
8574 ;; Deselect failing tests (mostly due to network not reachable)
8575 #~(list "-k"
8576 (string-append
8577 "not .badssl.com"
8578 " and not test_assert_fingerprint_in_cert_chain_failure"))
8579 #:phases
8580 #~(modify-phases %standard-phases
8581 (add-after 'unpack 'fix-pytest-config
8582 (lambda _
8583 ;; Drop test coverage requirements.
8584 (substitute* "setup.cfg"
8585 (("--cov(-[^ ]*)?=[^ ]*") "\n")))))))
8586 (propagated-inputs (list python-certifi python-urllib3))
8587 (native-inputs (list nss-certs-for-test
8588 python-aiohttp
8589 ;; python-furo
8590 python-httpx
8591 python-opentelemetry-api
8592 python-opentelemetry-sdk
8593 python-orjson
8594 python-pytest
8595 python-pytest-asyncio-0.26
8596 ;; python-pytest-cov
8597 python-pytest-httpbin
8598 python-pytest-httpserver
8599 python-pytest-mock
8600 python-requests
8601 python-respx ;test
8602 python-setuptools
8603 ;; python-sphinx
8604 ;; python-sphinx-autodoc-typehints
8605 python-trustme
8606 python-wheel))
8607 (home-page "https://github.com/elastic/elastic-transport-python")
8608 (synopsis "Common library for Python Elastic client libraries")
8609 (description
8610 "This library was lifted from @code{elasticsearch-py} and then transformed to
8611be used across all Elastic services rather than only Elasticsearch. It
8612provides transport classes and utilities shared among Python Elastic client
8613libraries.")
8614 ;; Apache-2.0 in setup.py and LICENSE file.
8615 (license license:asl2.0)))
8616
8617(define-public python-elasticsearch
8618 (package
8619 (name "python-elasticsearch")
8620 (version "9.1.1")
8621 (source
8622 (origin
8623 (method git-fetch) ; no tests in PyPI release
8624 (uri (git-reference
8625 (url "https://github.com/elastic/elasticsearch-py")
8626 (commit (string-append "v" version))))
8627 (file-name (git-file-name name version))
8628 (sha256
8629 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
8630 (build-system pyproject-build-system)
8631 (native-inputs
8632 (list nss-certs-for-test
8633 python-aiohttp
8634 python-dateutil
8635 python-mock
8636 python-orjson
8637 python-pytest
8638 python-pytest-asyncio
8639 python-pytest-cov
8640 python-pytz
8641 python-pyyaml
8642 python-requests
8643 python-hatchling))
8644 (propagated-inputs
8645 (list python-certifi
8646 python-elastic-transport))
8647 (home-page "https://github.com/elastic/elasticsearch-py")
8648 (synopsis "Low-level client for Elasticsearch")
8649 (description "Official low-level client for Elasticsearch. Its goal is to
8650provide common ground for all Elasticsearch-related code in Python; because of
8651this it tries to be opinion-free and very extendable.")
8652 ;; Apache-2.0 in setup.py and LICENSE file.
8653 (license license:asl2.0)))
8654
8655(define-public python-engineio
8656 (package
8657 (name "python-engineio")
8658 (version "4.12.2")
8659 (source
8660 (origin
8661 (method url-fetch)
8662 (uri (pypi-uri "python_engineio" version))
8663 (sha256
8664 (base32
8665 "1ynyf3n29biwkm6nwzzwzhr4m19lsir1x5azxq2nl7xyw7zi5rz7"))))
8666 (build-system pyproject-build-system)
8667 (arguments
8668 (list
8669 #:test-flags
8670 #~(list "-k"
8671 "not test_static_file_routing and not test_static_files")))
8672 (native-inputs
8673 (list python-pytest
8674 python-pytest-asyncio
8675 python-setuptools
8676 python-tornado))
8677 (propagated-inputs
8678 (list python-aiohttp
8679 python-requests
8680 python-simple-websocket
8681 python-websocket-client))
8682 (home-page "https://github.com/miguelgrinberg/python-engineio/")
8683 (synopsis "Engine.IO server")
8684 (description "This package provides a Python implementation of the
8685@code{Engine.IO} realtime client and server.")
8686 (license license:expat)))
8687
8688(define-public python-ephemeral-port-reserve
8689 (package
8690 (name "python-ephemeral-port-reserve")
8691 (version "1.1.4")
8692 (source
8693 (origin
8694 (method git-fetch) ;no tests in PyPI archive
8695 (uri (git-reference
8696 (url "https://github.com/Yelp/ephemeral-port-reserve")
8697 (commit (string-append "v" version))))
8698 (file-name (git-file-name name version))
8699 (sha256
8700 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
8701 (build-system pyproject-build-system)
8702 (native-inputs
8703 (list python-pytest
8704 python-setuptools
8705 python-wheel))
8706 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
8707 (synopsis "Find an unused port, reliably")
8708 (description
8709 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
8710it.")
8711 (license license:expat)))
8712
8713(define-public python-flask-migrate
8714 (package
8715 (name "python-flask-migrate")
8716 (version "4.1.0")
8717 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
8718 (source (origin
8719 (method git-fetch)
8720 (uri (git-reference (url home-page)
8721 (commit (string-append "v" version))))
8722 (file-name (git-file-name name version))
8723 (sha256
8724 (base32
8725 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
8726 (build-system pyproject-build-system)
8727 (propagated-inputs
8728 (list python-flask python-alembic python-flask-sqlalchemy))
8729 (native-inputs
8730 (list python-pytest python-setuptools python-wheel))
8731 (synopsis "SQLAlchemy database migrations for Flask programs using
8732Alembic")
8733 (description "This package contains SQLAlchemy database migration tools
8734for Flask programs that are using @code{python-alembic}.")
8735 (license license:expat)))
8736
8737(define-public python-genshi
8738 (package
8739 (name "python-genshi")
8740 (version "0.7.10")
8741 (source
8742 (origin
8743 (method git-fetch)
8744 (uri (git-reference
8745 (url "https://github.com/edgewall/genshi")
8746 (commit version)))
8747 (file-name (git-file-name name version))
8748 (sha256
8749 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
8750 (build-system pyproject-build-system)
8751 (arguments (list #:test-backend #~'unittest))
8752 (native-inputs (list python-setuptools))
8753 (propagated-inputs (list python-six))
8754 (home-page "https://genshi.edgewall.org/")
8755 (synopsis "Toolkit for generation of output for the web")
8756 (description "Genshi is a Python library that provides an integrated set
8757of components for parsing, generating, and processing HTML, XML or other
8758textual content for output generation on the web.")
8759 (license license:bsd-3)))
8760
8761(define-public python-flask-principal
8762 (package
8763 (name "python-flask-principal")
8764 (version "0.4.0")
8765 (source
8766 (origin
8767 (method git-fetch)
8768 (uri (git-reference
8769 (url "https://github.com/pallets-eco/flask-principal")
8770 (commit version)))
8771 (file-name (git-file-name name version))
8772 (sha256
8773 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
8774 (build-system pyproject-build-system)
8775 (propagated-inputs (list python-blinker))
8776 (native-inputs (list python-flask python-pynose python-setuptools))
8777 (home-page "https://github.com/pallets-eco/flask-principal")
8778 (synopsis "Identity management for Flask")
8779 (description
8780 "@code{flask_principal} is a identity management library for Flask. It
8781supports managing both authentication and authorization data in a thread-local
8782variable.")
8783 (license license:expat)))
8784
8785(define-public python-flask-httpauth
8786 (package
8787 (name "python-flask-httpauth")
8788 (version "4.8.0")
8789 (source
8790 (origin
8791 (method url-fetch)
8792 (uri (pypi-uri "Flask-HTTPAuth" version))
8793 (sha256
8794 (base32
8795 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
8796 (build-system pyproject-build-system)
8797 (propagated-inputs (list python-flask))
8798 (native-inputs
8799 (list nss-certs-for-test
8800 python-pytest
8801 python-setuptools
8802 python-wheel))
8803 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
8804 (synopsis "Basic and Digest HTTP authentication for Flask routes")
8805 (description "@code{flask_httpauth} provides Basic and Digest HTTP
8806authentication for Flask routes.")
8807 (license license:expat)))
8808
8809(define-public python-uritemplate
8810 (package
8811 (name "python-uritemplate")
8812 (version "4.2.0")
8813 (source
8814 (origin
8815 (method url-fetch)
8816 (uri (pypi-uri "uritemplate" version))
8817 (sha256
8818 (base32
8819 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
8820 (build-system pyproject-build-system)
8821 (native-inputs (list python-pytest python-setuptools))
8822 (home-page "https://uritemplate.readthedocs.io/")
8823 (synopsis "Library to deal with URI Templates")
8824 (description "@code{uritemplate} provides Python library to deal with URI
8825Templates.")
8826 ;; The software is made available under the terms of *either* of the
8827 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
8828 ;; are made under *both* licenses (excerpt from the LICENSE file).
8829 (license (list license:bsd-2 license:asl2.0))))
8830
8831(define-public python-uritemplate-3
8832 (package
8833 (inherit python-uritemplate)
8834 (name "python-uritemplate")
8835 (version "3.0.1")
8836 (source (origin
8837 (method url-fetch)
8838 (uri (pypi-uri "uritemplate" version))
8839 (sha256
8840 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
8841
8842(define-public python-publicsuffix2
8843 (package
8844 (name "python-publicsuffix2")
8845 (version "2.2019-12-21")
8846 (source
8847 (origin
8848 (method git-fetch)
8849 (uri (git-reference
8850 (url "https://github.com/pombredanne/python-publicsuffix2")
8851 (commit (string-append "release-" version))))
8852 (file-name (git-file-name name version))
8853 (sha256
8854 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
8855 (build-system pyproject-build-system)
8856 (arguments
8857 (list
8858 #:tests? #f ;the test suite requires network access
8859 #:phases
8860 #~(modify-phases %standard-phases
8861 (add-after 'unpack 'ignore-maintainer-inputs
8862 (lambda _
8863 ;; Comment out a demand for python-requests, which is used only by
8864 ;; the unused ‘update_psl’ helper command.
8865 (substitute* "setup.py"
8866 (("'requests " match)
8867 (format #f "# ~a" match))))))))
8868 (native-inputs (list python-setuptools))
8869 (home-page "https://github.com/pombredanne/python-publicsuffix2")
8870 (synopsis
8871 "Get a public suffix for a domain name using the Public Suffix List")
8872 (description
8873 "Get a public suffix for a domain name using the Public Suffix List.
8874Forked from and using the same API as the publicsuffix package.")
8875 (license (list license:expat license:mpl2.0))))
8876
8877(define-public python-werkzeug
8878 (package
8879 (name "python-werkzeug")
8880 (version "3.1.3")
8881 (source
8882 (origin
8883 (method url-fetch)
8884 (uri (pypi-uri "werkzeug" version))
8885 (sha256
8886 (base32
8887 "0ij7si3aa3ykac7k7fz481h4majqqwn2iqwhjxkji4y18plkqwk0"))))
8888 (build-system pyproject-build-system)
8889 (arguments
8890 (list
8891 #:test-flags
8892 ;; Test requiring networking setup.
8893 #~(list "--ignore=tests/test_serving.py"
8894 "--deselect=tests/test_debug.py::test_basic"
8895 "--deselect=tests/test_exceptions.py::test_response_body"
8896 "--deselect=tests/middleware/test_http_proxy.py::test_http_proxy")))
8897 (native-inputs
8898 (list python-flit-core
8899 python-pytest
8900 python-watchdog
8901 python-ephemeral-port-reserve
8902 python-pytest-timeout
8903 python-pytest-xprocess))
8904 (propagated-inputs
8905 (list python-markupsafe
8906 python-requests))
8907 (home-page "https://palletsprojects.com/p/werkzeug/")
8908 (synopsis "Utilities for WSGI applications")
8909 (description "One of the most advanced WSGI utility modules. It includes a
8910powerful debugger, full-featured request and response objects, HTTP utilities to
8911handle entity tags, cache control headers, HTTP dates, cookie handling, file
8912uploads, a powerful URL routing system and a bunch of community-contributed
8913addon modules.")
8914 (license license:x11)))
8915
8916(define-public python-werkzeug-1.0
8917 (package
8918 (inherit python-werkzeug)
8919 (version "1.0.1")
8920 (source (origin
8921 (method url-fetch)
8922 (uri (pypi-uri "Werkzeug" version))
8923 (sha256
8924 (base32
8925 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
8926 (patches (search-patches "python-werkzeug-tests.patch"))))
8927 (arguments
8928 (list
8929 #:phases
8930 '(modify-phases %standard-phases
8931 (add-after 'unpack 'ignore-warnings
8932 (lambda _
8933 (substitute* "setup.cfg"
8934 ((" error.*") "")))))))
8935 (propagated-inputs
8936 (list python-requests))
8937 (native-inputs
8938 (list python-pytest python-pytest-timeout python-setuptools
8939 python-wheel))))
8940
8941(define-public python-bottle
8942 (package
8943 (name "python-bottle")
8944 (version "0.13.4")
8945 (source
8946 (origin
8947 (method url-fetch)
8948 (uri (pypi-uri "bottle" version))
8949 (sha256
8950 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
8951 (build-system pyproject-build-system)
8952 (native-inputs (list python-pytest python-setuptools))
8953 (home-page "https://bottlepy.org/")
8954 (synopsis "WSGI framework for small web-applications")
8955 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
8956 (license license:expat)))
8957
8958(define-public python-wtforms
8959 (package
8960 (name "python-wtforms")
8961 (version "3.1.2")
8962 (source
8963 (origin
8964 (method url-fetch)
8965 (uri (pypi-uri "wtforms" version))
8966 (sha256
8967 (base32 "1fblnkzvs6339glwx8bskdjy7nhn2ap90y9g6b399713sy063mzq"))))
8968 (build-system pyproject-build-system)
8969 (native-inputs (list python-hatchling python-pytest))
8970 (propagated-inputs (list python-babel python-email-validator
8971 python-markupsafe))
8972 (home-page "https://wtforms.readthedocs.io/")
8973 (synopsis
8974 "Form validation and rendering library for Python web development")
8975 (description
8976 "WTForms is a flexible forms validation and rendering library
8977for Python web development. It is very similar to the web form API
8978available in Django, but is a standalone package.")
8979 (license license:bsd-3)))
8980
8981(define-public python-wtforms-sqlalchemy
8982 (package
8983 (name "python-wtforms-sqlalchemy")
8984 (version "0.4.1")
8985 (source
8986 (origin
8987 (method url-fetch)
8988 (uri (pypi-uri "WTForms-SQLAlchemy" version))
8989 (sha256
8990 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
8991 (build-system pyproject-build-system)
8992 (native-inputs (list python-pytest python-setuptools python-wheel))
8993 (propagated-inputs (list python-sqlalchemy python-wtforms))
8994 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
8995 (synopsis "SQLAlchemy tools for WTForms")
8996 (description
8997 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
8998package from WTForms. The package has been renamed to
8999@code{wtforms_sqlalchemy} but otherwise should function the same as
9000@code{wtforms.ext.sqlalchemy} did.")
9001 (license license:bsd-3)))
9002
9003(define-public python-urlgrabber
9004 (package
9005 (name "python-urlgrabber")
9006 (version "4.1.0")
9007 (source
9008 (origin
9009 (method url-fetch)
9010 (uri (pypi-uri "urlgrabber" version))
9011 (sha256
9012 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
9013 (build-system pyproject-build-system)
9014 (arguments
9015 (list
9016 #:tests? #f ; Most tests require network access.
9017 #:phases
9018 #~(modify-phases %standard-phases
9019 (replace 'check
9020 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
9021 (when tests?
9022 (invoke "python" "test/runtests.py")))))))
9023 (native-inputs (list python-setuptools))
9024 (propagated-inputs
9025 (list python-pycurl python-setuptools python-six))
9026 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
9027 (synopsis "High-level cross protocol url-grabber")
9028 (description
9029 "@code{urlgrabber} is a library that unifies access to files available on
9030the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
9031supports features like HTTP keep-alive, reget, throttling and more.")
9032 (license license:lgpl2.1+)))
9033
9034(define-public python-pycares
9035 (package
9036 (name "python-pycares")
9037 (version "4.11.0")
9038 (source
9039 (origin
9040 (method git-fetch)
9041 (uri (git-reference
9042 (url "https://github.com/saghul/pycares")
9043 (commit (string-append "v" version))))
9044 (file-name (git-file-name name version))
9045 (sha256
9046 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
9047 (snippet #~(begin
9048 (rmdir "deps/c-ares")))))
9049 (build-system pyproject-build-system)
9050 (arguments
9051 (list
9052 ;; XXX: Half of the tests require internet access
9053 ;; There is currently no markers to avoid running them.
9054 #:tests? #f
9055 #:phases
9056 #~(modify-phases %standard-phases
9057 (add-after 'unpack 'configure-system-lib
9058 (lambda _
9059 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
9060 (native-inputs (list python-pytest python-setuptools))
9061 (inputs (list c-ares))
9062 (propagated-inputs (list python-cffi))
9063 (home-page "https://github.com/saghul/pycares")
9064 (synopsis "Python interface for @code{c-ares}")
9065 (description
9066 "@code{pycares} is a Python module which provides an interface to
9067@code{c-ares}, a C library that performs DNS requests and name resolutions
9068asynchronously.")
9069 (license license:expat)))
9070
9071(define-public python-yarl
9072 (package
9073 (name "python-yarl")
9074 (version "1.18.3")
9075 (source
9076 (origin
9077 (method url-fetch)
9078 (uri (pypi-uri "yarl" version))
9079 (sha256
9080 (base32
9081 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
9082 (build-system pyproject-build-system)
9083 (arguments
9084 (list
9085 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
9086 #:phases
9087 '(modify-phases %standard-phases
9088 (add-after 'unpack 'patch-build-system
9089 (lambda _
9090 ;; XXX: I don't know how to tell it to build the extensions in
9091 ;; place.
9092 (substitute* "packaging/pep517_backend/_backend.py"
9093 (("build_inplace=False") "build_inplace=True")))))))
9094 (native-inputs
9095 (list python-covdefaults
9096 python-cython
9097 python-expandvars
9098 python-pytest
9099 python-pytest-cov
9100 python-pytest-xdist
9101 python-setuptools
9102 python-tomli
9103 python-wheel))
9104 (propagated-inputs
9105 (list python-packaging python-idna python-multidict python-propcache))
9106 (home-page "https://github.com/aio-libs/yarl/")
9107 (synopsis "Yet another URL library")
9108 (description "@code{yarl} module provides handy @code{URL} class
9109for URL parsing and changing.")
9110 (license license:asl2.0)))
9111
9112(define-public python-canvasapi
9113 (package
9114 (name "python-canvasapi")
9115 (version "3.4.0")
9116 (source (origin
9117 (method git-fetch)
9118 (uri (git-reference
9119 (url "https://github.com/ucfopen/canvasapi")
9120 (commit (string-append "v" version))))
9121 (file-name (git-file-name name version))
9122 (sha256
9123 (base32
9124 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
9125 (build-system pyproject-build-system)
9126 (propagated-inputs (list python-arrow python-pytz python-requests))
9127 (native-inputs (list python-pytest
9128 python-requests-mock
9129 python-setuptools
9130 python-urllib3))
9131 (home-page "https://github.com/ucfopen/canvasapi")
9132 (synopsis "API wrapper for the Canvas LMS")
9133 (description
9134 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
9135The library enables developers to programmatically manage Canvas courses,
9136users, gradebooks, and more.")
9137 (license license:expat)))
9138
9139(define-public python-google
9140 (package
9141 (name "python-google")
9142 (version "3.0.0")
9143 (source
9144 (origin
9145 (method url-fetch)
9146 (uri (pypi-uri "google" version))
9147 (sha256
9148 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
9149 (build-system pyproject-build-system)
9150 (arguments (list #:tests? #f)) ;There are no tests.
9151 (native-inputs (list python-setuptools))
9152 (propagated-inputs (list python-beautifulsoup4))
9153 (home-page "https://breakingcode.wordpress.com/")
9154 (synopsis "Python bindings to the Google search engine")
9155 (description
9156 "This package provides Python bindings for using the Google search
9157engine. Its module is called @code{googlesearch}.")
9158 (license license:bsd-3)))
9159
9160(define-public python-google-api-client
9161 (package
9162 (name "python-google-api-client")
9163 (version "2.187.0")
9164 (source
9165 (origin
9166 (method git-fetch)
9167 (uri (git-reference
9168 (url "https://github.com/google/google-api-python-client")
9169 (commit (string-append "v" version))))
9170 (file-name (git-file-name name version))
9171 (sha256
9172 (base32 "09vq5d32avri0gl8c7nn5dv2xds1jzjms7vqk3gn66nm2m37x8mv"))))
9173 (build-system pyproject-build-system)
9174 (arguments
9175 (list
9176 #:test-flags
9177 #~(list
9178 "-k"
9179 (string-join
9180 (list
9181 ;; XXX: Deprecated behavior.
9182 "not test_client_options_universe_configured_with_mtls"
9183 "test_universe_env_var_configured_with_mtls"
9184 ;; XXX: Requires CA certificates.
9185 "test_credentials_and_credentials_file_mutually_exclusive")
9186 " and not ")
9187 "tests")))
9188 (native-inputs
9189 (list python-parameterized
9190 python-pytest
9191 python-setuptools))
9192 (propagated-inputs
9193 (list python-google-api-core
9194 python-google-auth
9195 python-google-auth-httplib2
9196 python-httplib2
9197 python-pyparsing
9198 python-uritemplate-3))
9199 (home-page "https://github.com/google/google-api-python-client")
9200 (synopsis "Core Python library for accessing Google APIs")
9201 (description "Python client library for Google's discovery based APIs")
9202 (license license:asl2.0)))
9203
9204(define-public python-google-auth-httplib2
9205 (package
9206 (name "python-google-auth-httplib2")
9207 (version "0.2.0")
9208 (source (origin
9209 (method url-fetch)
9210 (uri (pypi-uri "google-auth-httplib2" version))
9211 (sha256
9212 (base32 "018fckshilc6z2qpj1pclh8haanbq3lr85w6p4g4z5wgyjnppaiq"))))
9213 (build-system pyproject-build-system)
9214 (propagated-inputs
9215 (list python-google-auth python-httplib2))
9216 (native-inputs
9217 (list python-pytest
9218 python-pyparsing
9219 python-pytest-localserver
9220 python-flask
9221 python-setuptools))
9222 (home-page
9223 "https://github.com/GoogleCloudPlatform/google-auth-library-python-httplib2")
9224 (synopsis "Google Authentication Library: httplib2 transport")
9225 (description "This package provides a Google Authentication Library plugin
9226for httplib2 transport.")
9227 (license license:asl2.0)))
9228
9229(define-public python-google-auth-oauthlib
9230 (package
9231 (name "python-google-auth-oauthlib")
9232 (version "1.2.4")
9233 (home-page
9234 "https://github.com/GoogleCloudPlatform/\
9235google-auth-library-python-oauthlib")
9236 (source
9237 (origin
9238 (method git-fetch)
9239 (uri (git-reference
9240 (url home-page)
9241 (commit (string-append "v" version))))
9242 (file-name (git-file-name name version))
9243 (sha256
9244 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
9245 (build-system pyproject-build-system)
9246 (propagated-inputs (list python-google-auth python-requests-oauthlib))
9247 (native-inputs
9248 (list python-click python-mock python-pytest python-setuptools))
9249 (synopsis "Google Authentication Library: oauthlib")
9250 (description "This package provides a Google Authentication Library plugin
9251with oauthlib.")
9252 (license license:asl2.0)))
9253
9254(define-public whoogle-search
9255 (package
9256 (name "whoogle-search")
9257 (version "0.8.4")
9258 (source (origin
9259 (method url-fetch)
9260 (uri (pypi-uri "whoogle-search" version))
9261 (sha256
9262 (base32
9263 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
9264 (build-system pyproject-build-system)
9265 (arguments
9266 (list
9267 ;; The tests need network access
9268 #:tests? #f))
9269 (propagated-inputs
9270 (list python-beautifulsoup4
9271 python-brotli
9272 python-cryptography
9273 python-cssutils
9274 python-defusedxml
9275 python-flask
9276 python-dotenv
9277 python-requests
9278 python-stem
9279 python-validators
9280 python-waitress))
9281 (native-inputs (list python-setuptools python-wheel))
9282 (home-page "https://github.com/benbusby/whoogle-search")
9283 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
9284 (description
9285 "Get Google results, but without any ads, javascript, AMP links,
9286cookies, or IP address tracking. Quick and simple to implement as a primary
9287search engine replacement on both desktop and mobile.")
9288 (license license:expat)))
9289
9290(define-public python-hawkauthlib
9291 (package
9292 (name "python-hawkauthlib")
9293 (version "2.0.0")
9294 (source
9295 (origin
9296 (method git-fetch)
9297 (uri (git-reference
9298 (url "https://github.com/mozilla-services/hawkauthlib")
9299 (commit (string-append "v" version))))
9300 (file-name (git-file-name name version))
9301 (sha256
9302 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
9303 (build-system pyproject-build-system)
9304 (arguments (list #:test-backend #~'unittest))
9305 (native-inputs (list python-setuptools))
9306 (propagated-inputs (list python-requests python-webob))
9307 (home-page "https://github.com/mozilla-services/hawkauthlib")
9308 (synopsis "Hawk Access Authentication protocol")
9309 (description
9310 "This is a low-level Python library for implementing Hawk Access
9311Authentication, a simple HTTP request-signing scheme.")
9312 (license license:mpl2.0)))
9313
9314(define-public python-pybrowserid
9315 (package
9316 (name "python-pybrowserid")
9317 (version "0.14.0")
9318 (source
9319 (origin
9320 (method git-fetch)
9321 (uri (git-reference
9322 (url "https://github.com/mozilla/PyBrowserID")
9323 (commit version)))
9324 (file-name (git-file-name name version))
9325 (sha256
9326 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
9327 (build-system pyproject-build-system)
9328 (arguments (list #:test-backend #~'unittest))
9329 (propagated-inputs (list python-requests))
9330 (native-inputs (list python-mock python-setuptools))
9331 (home-page "https://github.com/mozilla/PyBrowserID")
9332 (synopsis "Python library for the BrowserID protocol")
9333 (description
9334 "This is a Python client library for the BrowserID protocol that
9335underlies Mozilla Persona.")
9336 (license license:mpl2.0)))
9337
9338(define-public python-pyfxa
9339 (package
9340 (name "python-pyfxa")
9341 (version "0.8.1")
9342 (source
9343 (origin
9344 (method git-fetch)
9345 (uri (git-reference
9346 (url "https://github.com/mozilla/PyFxA")
9347 (commit (string-append "v" version))))
9348 (file-name (git-file-name name version))
9349 (sha256
9350 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
9351 (build-system pyproject-build-system)
9352 (arguments
9353 (list
9354 ;; These tests require network access
9355 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
9356 (propagated-inputs
9357 (list python-cryptography
9358 python-pyjwt
9359 python-parameterized
9360 python-hawkauthlib
9361 python-requests))
9362 (native-inputs
9363 (list python-grequests
9364 python-hatchling
9365 python-mock
9366 python-pytest
9367 python-responses))
9368 (home-page "https://github.com/mozilla/PyFxA")
9369 (synopsis "Firefox Accounts client library for Python")
9370 (description
9371 "This is a Python library for interacting with the Firefox Accounts
9372ecosystem.")
9373 (license license:mpl2.0)))
9374
9375(define-public python-hyperlink
9376 (package
9377 (name "python-hyperlink")
9378 (version "21.0.0")
9379 (source
9380 (origin
9381 (method url-fetch)
9382 (uri (pypi-uri "hyperlink" version))
9383 (sha256
9384 (base32
9385 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
9386 (build-system pyproject-build-system)
9387 (arguments
9388 (list #:phases
9389 #~(modify-phases %standard-phases
9390 (add-before 'check 'pretend-to-be-CI
9391 (lambda _
9392 ;; Pretend to be a CI system to skip flaky tests.
9393 (setenv "CI" "true"))))))
9394 (native-inputs
9395 (list python-pytest python-setuptools python-wheel))
9396 (propagated-inputs
9397 (list python-idna))
9398 (home-page "https://github.com/python-hyper/hyperlink")
9399 (synopsis "Python module to create immutable URLs according to spec")
9400 (description "This package provides a Python module to create immutable, and
9401correct URLs for Python according to RFCs 3986 and 3987.")
9402 (license license:expat)))
9403
9404(define-public python-treq
9405 (package
9406 (name "python-treq")
9407 (version "24.9.1")
9408 (source
9409 (origin
9410 (method url-fetch)
9411 (uri (pypi-uri "treq" version))
9412 (sha256
9413 (base32
9414 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
9415 (build-system pyproject-build-system)
9416 (native-inputs
9417 (list python-httpbin
9418 python-pytest
9419 python-service-identity
9420 python-setuptools
9421 python-wheel))
9422 (propagated-inputs
9423 (list python-attrs
9424 python-hyperlink
9425 python-incremental
9426 python-requests
9427 python-twisted
9428 python-typing-extensions))
9429 (home-page "https://github.com/twisted/treq")
9430 (synopsis "Requests-like API built on top of twisted.web's Agent")
9431 (description "This package provides an HTTP library inspired by
9432@code{requests} but written on top of Twisted's @code{Agents}. It offers a
9433high level API for making HTTP requests when using Twisted.")
9434 (license license:expat)))
9435
9436(define-public python-autobahn
9437 (package
9438 (name "python-autobahn")
9439 (version "25.11.1")
9440 (source
9441 (origin
9442 (method url-fetch)
9443 (uri (pypi-uri "autobahn" version))
9444 (sha256
9445 (base32
9446 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
9447 (build-system pyproject-build-system)
9448 (arguments
9449 (list
9450 ;; The tests fail to run:
9451 ;; https://github.com/crossbario/autobahn-python/issues/1117
9452 #:tests? #f
9453 #:phases #~(modify-phases %standard-phases
9454 (add-after 'unpack 'relax-zope-interface
9455 (lambda _
9456 ;; python-zope-interface is a world rebuild package
9457 ;; and our one-digit lower minor version seems to be
9458 ;; fine.
9459 (substitute* "setup.py"
9460 (("zope.interface>=5.2.0")
9461 "zope.interface>=5.1.0"))))
9462 (add-after 'unpack 'strip-xbr
9463 (lambda _
9464 ;; Strip new XBR feature which isn't available in Guix.
9465 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
9466 (native-inputs (list python-setuptools python-wheel))
9467 (propagated-inputs (list python-cbor2
9468 python-cryptography
9469 python-hyperlink
9470 python-msgpack
9471 python-py-ubjson
9472 python-twisted
9473 python-txaio
9474 python-ujson))
9475 (home-page "https://github.com/crossbario/autobahn-python/")
9476 (synopsis "Web Application Messaging Protocol implementation")
9477 (description "This package provides an implementation of the @dfn{Web Application
9478Messaging Protocol} (WAMP). WAMP connects components in distributed
9479applications using Publish and Subscribe (PubSub) and routed Remote Procedure
9480Calls (rRPC). It is ideal for distributed, multi-client and server applications
9481such as IoT applications or multi-user database-driven business applications.")
9482 (license license:expat)))
9483
9484(define-public python-ws4py
9485 (package
9486 (name "python-ws4py")
9487 (version "0.6.0")
9488 (source
9489 (origin
9490 (method git-fetch)
9491 (uri (git-reference
9492 (url "https://github.com/Lawouach/WebSocket-for-Python")
9493 (commit version)))
9494 (file-name (git-file-name name version))
9495 (sha256
9496 (base32
9497 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
9498 (build-system pyproject-build-system)
9499 (arguments
9500 (list
9501 #:phases
9502 #~(modify-phases %standard-phases
9503 (add-after 'unpack 'remove-cherrypy-support
9504 (lambda _
9505 (delete-file "ws4py/server/cherrypyserver.py")
9506 (delete-file "test/test_cherrypy.py"))))))
9507 (native-inputs (list python-setuptools python-pytest))
9508 (propagated-inputs
9509 (list python-gevent python-tornado))
9510 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
9511 (synopsis "WebSocket client and server library")
9512 (description
9513 "This package provides a WebSocket client and server library for Python.")
9514 (license license:bsd-3)))
9515
9516(define-public python-slowapi
9517 (package
9518 (name "python-slowapi")
9519 (version "0.1.9")
9520 (source
9521 (origin
9522 (method git-fetch)
9523 (uri (git-reference
9524 (url "https://github.com/laurents/slowapi")
9525 (commit (string-append "v" version))))
9526 (file-name (git-file-name name version))
9527 (sha256
9528 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
9529 (build-system pyproject-build-system)
9530 (arguments
9531 (list
9532 #:test-flags
9533 ;; These tests fail because the timestamp contains more decimal points
9534 ;; than expected, so a simple equality comparison fails.
9535 '(list "-k" (string-append "not test_headers_no_breach"
9536 " and not test_headers_breach"))))
9537 (propagated-inputs (list python-limits python-redis))
9538 (native-inputs
9539 (list python-fastapi
9540 python-hiro
9541 python-mock
9542 python-poetry-core
9543 python-pytest))
9544 (home-page "https://github.com/laurents/slowapi")
9545 (synopsis "Rate limiting extension for Starlette and Fastapi")
9546 (description
9547 "This package provides a rate limiting extension for Starlette and
9548Fastapi.")
9549 (license license:expat)))
9550
9551(define-public python-slugify
9552 (package
9553 (name "python-slugify")
9554 (version "8.0.4")
9555 (source
9556 (origin
9557 (method git-fetch)
9558 (uri (git-reference
9559 (url "https://github.com/un33k/python-slugify")
9560 (commit (string-append "v" version))))
9561 (file-name (git-file-name name version))
9562 (sha256
9563 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
9564 (build-system pyproject-build-system)
9565 (arguments (list #:test-backend #~'unittest))
9566 (native-inputs (list python-setuptools))
9567 (propagated-inputs (list python-unidecode python-text-unidecode))
9568 (home-page "https://github.com/un33k/python-slugify")
9569 (synopsis "Python Slugify application that handles Unicode")
9570 (description "This package provides a @command{slufigy} command and
9571library to create slugs from unicode strings while keeping it DRY.")
9572 (license license:expat)))
9573
9574(define-public python-branca
9575 (package
9576 (name "python-branca")
9577 (version "0.7.2")
9578 (source
9579 (origin
9580 (method git-fetch) ; no tests in PyPI
9581 (uri (git-reference
9582 (url "https://github.com/python-visualization/branca")
9583 (commit (string-append "v" version))))
9584 (file-name (git-file-name name version))
9585 (sha256
9586 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
9587 (build-system pyproject-build-system)
9588 (arguments
9589 ;; This file requires Selenium.
9590 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
9591 ;; This test passes but is very slow.
9592 "-k" "not test_color_brewer_extendability")))
9593 (propagated-inputs (list python-jinja2))
9594 (native-inputs
9595 (list python-numpy
9596 python-pytest
9597 python-setuptools
9598 python-setuptools-scm
9599 python-wheel))
9600 (home-page "https://github.com/python-visualization/branca")
9601 (synopsis "Generate complex HTML+JS pages with Python")
9602 (description "This library is a spinoff from @code{folium} that would host
9603the non-map-specific features. It can be used to generate HTML + JS.")
9604 (license license:expat)))
9605
9606(define-public python-tinycss2
9607 (package
9608 (name "python-tinycss2")
9609 (version "1.5.1")
9610 (source
9611 (origin
9612 (method git-fetch)
9613 (uri (git-reference
9614 (url "https://github.com/Kozea/tinycss2")
9615 (commit (string-append "v" version))
9616 (recursive? #true)))
9617 (file-name (git-file-name name version))
9618 (sha256
9619 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
9620 (build-system pyproject-build-system)
9621 (native-inputs
9622 (list python-flit
9623 python-pytest))
9624 (propagated-inputs
9625 (list python-webencodings))
9626 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
9627 (synopsis "Low-level CSS parser for Python")
9628 (description "@code{tinycss2} can parse strings, return Python objects
9629representing tokens and blocks, and generate CSS strings corresponding to
9630these objects.
9631
9632Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
9633grammar of CSS but doesn’t know specific rules, properties or values supported
9634in various CSS modules.")
9635 (license license:bsd-3)))
9636
9637(define-public python-tinyhtml5
9638 (package
9639 (name "python-tinyhtml5")
9640 (version "2.1.0")
9641 (source
9642 (origin
9643 (method git-fetch)
9644 (uri (git-reference
9645 (url "https://github.com/CourtBouillon/tinyhtml5")
9646 (commit version)))
9647 (file-name (git-file-name name version))
9648 (sha256
9649 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
9650 (build-system pyproject-build-system)
9651 (propagated-inputs
9652 (list python-webencodings))
9653 (native-inputs
9654 (list python-flit-core
9655 python-pytest))
9656 (home-page "https://github.com/CourtBouillon/tinyhtml5")
9657 (synopsis "Small HTML parser based on the WHATWG HTML specification")
9658 (description "This Python module is a HTML5 parser that transforms a
9659possibly malformed HTML document into an ElementTree tree. This module is a
9660simplified fork of html5lib.")
9661 (license license:expat)))
9662
9663(define-public python-cssselect2
9664 (package
9665 (name "python-cssselect2")
9666 (version "0.4.1")
9667 (source
9668 (origin
9669 (method url-fetch)
9670 (uri (pypi-uri "cssselect2" version))
9671 (sha256
9672 (base32 "1j2fcr217rsvkipsg6zjq03rl64rxnvb5hqqpx0dv58fhspvkywk"))))
9673 (build-system pyproject-build-system)
9674 (arguments
9675 `(#:phases
9676 (modify-phases %standard-phases
9677 (add-after 'unpack 'disable-linters
9678 ;; Their check fails; none of our business.
9679 (lambda _
9680 (substitute* '("setup.py" "pyproject.toml")
9681 (("'pytest-flake8',") "")
9682 (("'pytest-isort',") "")
9683 (("--flake8") "")
9684 (("--isort") "")))))))
9685 (propagated-inputs
9686 (list python-tinycss2))
9687 (native-inputs
9688 (list python-flit python-pytest-cov python-pytest-runner))
9689 (home-page "https://cssselect2.readthedocs.io/")
9690 (synopsis "CSS selectors for Python ElementTree")
9691 (description "@code{cssselect2} is a straightforward implementation of
9692CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
9693ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
9694
9695Unlike the Python package @code{cssselect}, it does not translate selectors to
9696XPath and therefore does not have all the correctness corner cases that are
9697hard or impossible to fix in cssselect.")
9698 (license license:bsd-3)))
9699
9700(define-public python-uvloop
9701 (package
9702 (name "python-uvloop")
9703 (version "0.21.0")
9704 (source
9705 (origin
9706 (method url-fetch)
9707 (uri (pypi-uri "uvloop" version))
9708 (sha256
9709 (base32 "1qq46ym3ymzfn4j6fnykfmr1f4qnb7x7p15dlw37hi38v87jpw9v"))
9710 (modules '((guix build utils)))
9711 (snippet
9712 '(begin (delete-file-recursively "vendor")
9713 (delete-file "uvloop/loop.c")))))
9714 (build-system pyproject-build-system)
9715 (arguments
9716 (list
9717 #:test-flags
9718 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
9719 ;; to get a meaningful idea about where.
9720 #~(list "--timeout=300"
9721 "--timeout-method=thread"
9722 "-k" (string-join
9723 (list
9724 ;; Timeout, because SIGINT cannot be sent to child.
9725 "not test_signals_sigint_pycode_continue"
9726 "test_signals_sigint_pycode_stop"
9727 "test_signals_sigint_uvcode"
9728 "test_signals_sigint_uvcode_two_loop_runs"
9729 ;; This test is racy and prone to get stuck on
9730 ;; various platforms, possibly a aiohttp issue:
9731 ;; https://github.com/MagicStack/uvloop/issues/412
9732 "test_remote_shutdown_receives_trailing_data"
9733 ;; It looks like pytest is preventing
9734 ;; custom stdout/stderr redirection,
9735 ;; even with -s.
9736 "test_process_streams_redirect"
9737 ;; FileNotFoundError: [Errno 2] No such file or
9738 ;; directory
9739 "test_process_env_2"
9740 ;; socket.gaierror: [Errno -2] Name or service not known
9741 "test_getaddrinfo_21"
9742 #$@(if (target-riscv64?)
9743 `("test_renegotiation")
9744 `()))
9745 " and not "))
9746 #:phases
9747 #~(modify-phases %standard-phases
9748 (add-after 'unpack 'preparations
9749 (lambda _
9750 ;; Use packaged libuv.
9751 (substitute* "setup.py" (("self.use_system_libuv = False")
9752 "self.use_system_libuv = True"))
9753 ;; Replace hardcoded shell command.
9754 (substitute* "uvloop/loop.pyx"
9755 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))))
9756 #$@(if (target-riscv64?)
9757 `((add-after 'unpack 'adjust-test-timeouts
9758 (lambda _
9759 (substitute* '("tests/test_tcp.py"
9760 "tests/test_unix.py")
9761 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
9762 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
9763 '())
9764 (add-before 'check 'pre-check
9765 (lambda* (#:key tests? #:allow-other-keys)
9766 (when tests?
9767 ;; Remove Python module, which conflicts with the installed
9768 ;; version, but lacks the built C module.
9769 (delete-file-recursively "uvloop")))))))
9770 (native-inputs
9771 (list python-aiohttp
9772 python-cython
9773 python-psutil
9774 python-pyopenssl
9775 python-pytest
9776 python-pytest-timeout
9777 python-setuptools
9778 python-wheel))
9779 (inputs
9780 (list libuv))
9781 (home-page "https://github.com/MagicStack/uvloop")
9782 (synopsis "Fast implementation of asyncio event loop on top of libuv")
9783 (description
9784 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
9785event loop. It is implemented in Cython and uses libuv under the hood.")
9786 (license license:expat)))
9787
9788(define-public gunicorn
9789 (package
9790 (name "gunicorn")
9791 (version "25.3.0")
9792 (source
9793 (origin
9794 (method url-fetch)
9795 (uri (pypi-uri "gunicorn" version))
9796 (sha256
9797 (base32
9798 "12g85w735s4dszjfidi4vh786rfxsa5rd60il0fcvxknkwpinkpp"))))
9799 (outputs '("out" "doc"))
9800 (build-system pyproject-build-system)
9801 (arguments
9802 `(#:test-flags
9803 ;; Disable the geventlet tests because eventlet uses dnspython, which
9804 ;; does not work in the build container due to lack of /etc/resolv.conf
9805 '("--ignore=tests/workers/test_geventlet.py")
9806 #:phases (modify-phases %standard-phases
9807 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
9808 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
9809 ;; size. Override it to only add the essential entries.
9810 (replace 'wrap
9811 (lambda* (#:key native-inputs inputs outputs
9812 #:allow-other-keys)
9813 (let* ((out (assoc-ref outputs "out"))
9814 (python (assoc-ref (or native-inputs inputs)
9815 "python"))
9816 (sitedir (string-append "/lib/python"
9817 (python-version python)
9818 "/site-packages")))
9819 (wrap-program (string-append out "/bin/gunicorn")
9820 `("PYTHONPATH" ":" prefix
9821 ,(map (lambda (output)
9822 (string-append output sitedir))
9823 (list python out))))))))))
9824 (inputs (list bash-minimal))
9825 (native-inputs
9826 (list binutils ;for ctypes.util.find_library()
9827 python-eventlet
9828 python-gevent
9829 python-h2
9830 python-httpx
9831 python-pytest
9832 python-pytest-asyncio
9833 python-pytest-cov
9834 python-setuptools
9835 python-uvloop))
9836 (propagated-inputs
9837 (list python-packaging
9838 python-setuptools
9839 python-wheel))
9840 (home-page "https://gunicorn.org/")
9841 (synopsis "Python WSGI HTTP Server for UNIX")
9842 (description
9843 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
9844Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
9845Unicorn project. The Gunicorn server is broadly compatible with
9846various web frameworks, simply implemented, light on server resources,
9847and fairly speedy.")
9848 (license license:expat)))
9849
9850;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
9851;; its tests
9852(define-public gunicorn-bootstrap
9853 (package
9854 (inherit gunicorn)
9855 (name "gunicorn")
9856 (arguments `(#:tests? #f))
9857 (properties '((hidden? . #t)))
9858 (native-inputs `())))
9859
9860(define-public python-httptools
9861 (package
9862 (name "python-httptools")
9863 (version "0.7.1")
9864 (source
9865 (origin
9866 ;; PyPI tarball comes with a vendored http-parser and no tests.
9867 (method git-fetch)
9868 (uri (git-reference
9869 (url "https://github.com/MagicStack/httptools")
9870 (commit (string-append "v" version))))
9871 (file-name (git-file-name name version))
9872 (sha256
9873 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
9874 (modules '((guix build utils)))
9875 (snippet
9876 #~(begin (delete-file-recursively "vendor")))))
9877 (build-system pyproject-build-system)
9878 (arguments
9879 (list
9880 #:test-flags
9881 ;; XXX: AssertionError: HttpParserError not raised.
9882 #~(list "-k" "not test_parser_response_leninent_headers_1")
9883 #:phases
9884 #~(modify-phases %standard-phases
9885 (add-after 'unpack 'configure-build-ext
9886 (lambda _
9887 (with-output-to-file "setup.cfg"
9888 (lambda ()
9889 (display "\
9890[build_ext]
9891use_system_llhttp = true
9892use_system_http_parser = true
9893cython_always = true"))))))))
9894 (native-inputs
9895 (list python-cython
9896 python-pytest
9897 python-setuptools))
9898 (inputs
9899 (list http-parser
9900 llhttp))
9901 (home-page "https://github.com/MagicStack/httptools")
9902 (synopsis "Collection of framework independent HTTP protocol utils")
9903 (description
9904 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
9905 (license license:expat)))
9906
9907(define-public python-uvicorn
9908 (package
9909 (name "python-uvicorn")
9910 (version "0.34.0")
9911 (source
9912 (origin
9913 ;; PyPI tarball has no tests.
9914 (method git-fetch)
9915 (uri (git-reference
9916 (url "https://github.com/encode/uvicorn")
9917 (commit version)))
9918 (file-name (git-file-name name version))
9919 (sha256
9920 (base32 "05lkxnpzmr0kik81kdcvavjvvc4d1lgmw88mr4vbwsqk147wgqbc"))))
9921 (build-system pyproject-build-system)
9922 (arguments
9923 (list
9924 #:test-flags
9925 #~(list "-o" "asyncio_mode=auto"
9926 ;; For some reason tests stacked in infinity re-invocation loop:
9927 ;; AssertionError where is_alive =
9928 ;; <uvicorn.supervisors.multiprocess.Process object at
9929 ;; 0x7ffff39b6110>.is_alive.
9930 ;; Maybe this <https://github.com/encode/uvicorn/issues/2466>.
9931 "--ignore=tests/supervisors/test_multiprocess.py"
9932
9933 #$@(cond
9934 ((or (target-aarch64?)
9935 (target-riscv64?))
9936 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
9937 (#t '())))))
9938 (native-inputs
9939 (list nss-certs-for-test
9940 python-a2wsgi
9941 python-hatchling
9942 python-httpx-bootstrap
9943 python-pytest
9944 python-pytest-asyncio-0.26
9945 python-pytest-mock
9946 python-requests
9947 python-trustme
9948 python-wsproto))
9949 (propagated-inputs
9950 (list python-a2wsgi
9951 python-click
9952 python-dotenv
9953 python-h11
9954 python-httptools
9955 python-pyyaml
9956 python-uvloop
9957 python-watchfiles
9958 python-websockets))
9959 (home-page "https://github.com/encode/uvicorn")
9960 (synopsis "Fast ASGI server implementation")
9961 (description
9962 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
9963and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
9964for HTTP/2 is planned.")
9965 (license license:bsd-3)))
9966
9967(define-public python-translation-finder
9968 (package
9969 (name "python-translation-finder")
9970 (version "2.22")
9971 (source
9972 (origin
9973 (method url-fetch)
9974 (uri (pypi-uri "translation_finder" version))
9975 (sha256
9976 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
9977 (build-system pyproject-build-system)
9978 (arguments
9979 (list
9980 #:test-flags
9981 ;; AssertionError: 31 != 30 : Mismatched count of results
9982 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
9983 (native-inputs
9984 (list python-pytest
9985 python-setuptools))
9986 (propagated-inputs
9987 (list python-charset-normalizer
9988 python-ruamel.yaml
9989 python-weblate-language-data))
9990 (home-page "https://weblate.org/")
9991 (synopsis "Translation file finder for Weblate")
9992 (description "This package provides a function to find translation file in
9993the source code of a project. It supports many translation file formats and
9994is part of the Weblate translation platform.")
9995 (license license:gpl3+)))
9996
9997(define-public python-gitlab
9998 (package
9999 (name "python-gitlab")
10000 (version "7.0.0")
10001 (source
10002 (origin
10003 (method git-fetch)
10004 (uri (git-reference
10005 (url "https://github.com/python-gitlab/python-gitlab")
10006 (commit (string-append "v" version))))
10007 (file-name (git-file-name name version))
10008 (sha256
10009 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
10010 (build-system pyproject-build-system)
10011 (arguments
10012 (list
10013 #:test-flags
10014 #~(list "--ignore=tests/unit/test_graphql.py"
10015 ;; XXX: Missing helper script.
10016 "-k" "not test_data_from_helper" "tests/unit")))
10017 (native-inputs
10018 (list python-anyio
10019 python-pytest
10020 python-responses
10021 python-setuptools))
10022 (propagated-inputs (list python-requests python-requests-toolbelt))
10023 (home-page "https://github.com/python-gitlab/python-gitlab")
10024 (synopsis "Interact with GitLab API")
10025 (description "This package provides an extended library for interacting
10026with GitLab instances through their API.")
10027 (license license:lgpl3+)))
10028
10029(define-public python-path-and-address
10030 (package
10031 (name "python-path-and-address")
10032 (version "2.0.1")
10033 (source
10034 (origin
10035 (method git-fetch)
10036 (uri (git-reference
10037 (url "https://github.com/joeyespo/path-and-address")
10038 (commit (string-append "v" version))))
10039 (file-name (git-file-name name version))
10040 (sha256
10041 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
10042 (build-system pyproject-build-system)
10043 (native-inputs
10044 (list python-pytest python-setuptools))
10045 (home-page "https://github.com/joeyespo/path-and-address")
10046 (synopsis "Functions for command-line server tools used by humans")
10047 (description "Path-and-address resolves ambiguities of command-line
10048interfaces, inferring which argument is the path, and which is the address.")
10049 (license license:expat)))
10050
10051;; XXX: This project missed maintainer upstream, see
10052;; <https://github.com/joeyespo/grip/issues/387>.
10053;; Consider to remove if it keeps failing to build.
10054(define-public grip
10055 (package
10056 (name "grip")
10057 (version "4.6.1")
10058 (source
10059 (origin
10060 (method git-fetch)
10061 (uri (git-reference
10062 (url "https://github.com/joeyespo/grip")
10063 (commit (string-append "v" version))))
10064 (file-name (git-file-name name version))
10065 (sha256
10066 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
10067 (build-system pyproject-build-system)
10068 (arguments
10069 (list
10070 #:test-flags
10071 ;; All tests fail requiring network access, ignore the whole file.
10072 #~(list "--ignore=tests/test_github.py")
10073 #:phases
10074 #~(modify-phases %standard-phases
10075 ;; This fixes the removal of `charset` attribute of requests from
10076 ;; Werkzeug 2.3.0.
10077 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
10078 (add-after 'unpack 'fix-response-encoding
10079 (lambda _
10080 (substitute* "grip/app.py"
10081 (("response.charset")
10082 "getattr(response, 'charset', 'utf-8')")))))))
10083 (native-inputs
10084 (list nss-certs-for-test
10085 python-pytest
10086 python-responses
10087 python-setuptools
10088 python-wheel))
10089 (propagated-inputs
10090 (list python-docopt
10091 python-flask
10092 python-markdown
10093 python-path-and-address
10094 python-pygments
10095 python-requests))
10096 (home-page "https://github.com/joeyespo/grip")
10097 (synopsis "Preview Markdown files using the GitHub API")
10098 (description
10099 "Grip is a command-line server application written in Python that uses
10100the GitHub Markdown API to render a local Markdown file. The styles and
10101rendering come directly from GitHub, so you'll know exactly how it will
10102appear. Changes you make to the file will be instantly reflected in the
10103browser without requiring a page refresh.")
10104 (license license:expat)))
10105
10106(define-public python-port-for
10107 (package
10108 (name "python-port-for")
10109 (version "0.7.4")
10110 (source
10111 (origin
10112 (method url-fetch)
10113 (uri (pypi-uri "port_for" version))
10114 (sha256
10115 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
10116 (build-system pyproject-build-system)
10117 (propagated-inputs
10118 (list python-urllib3))
10119 (native-inputs
10120 (list python-pytest python-setuptools python-wheel))
10121 (home-page "https://github.com/kmike/port-for/")
10122 (synopsis "TCP localhost port finder and association manager")
10123 (description
10124 "This package provides a utility that helps with local TCP ports
10125management. It can find an unused TCP localhost port and remember the
10126association.")
10127 (license license:expat)))
10128
10129(define-public python-livereload
10130 (package
10131 (name "python-livereload")
10132 (version "2.7.1")
10133 (source
10134 (origin
10135 (method git-fetch)
10136 (uri (git-reference
10137 (url "https://github.com/lepture/python-livereload")
10138 (commit (string-append "v" version))))
10139 (file-name (git-file-name name version))
10140 (sha256
10141 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
10142 (build-system pyproject-build-system)
10143 (arguments (list #:test-backend #~'unittest))
10144 (native-inputs (list python-django python-setuptools))
10145 (propagated-inputs (list python-tornado))
10146 (home-page "https://github.com/lepture/python-livereload")
10147 (synopsis "Python LiveReload")
10148 (description
10149 "Python LiveReload provides a command line utility, @command{livereload},
10150for starting a web server in a directory. It can trigger arbitrary commands
10151and serve updated contents upon changes to the directory.")
10152 (license license:bsd-3)))
10153
10154(define-public python-vf-1
10155 (package
10156 (name "python-vf-1")
10157 (version "1.0.0")
10158 (source
10159 (origin
10160 (method git-fetch)
10161 (uri (git-reference
10162 (url "https://git.sr.ht/~solderpunk/VF-1")
10163 (commit (string-append "v" version))))
10164 (file-name (git-file-name name version))
10165 (sha256
10166 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
10167 (build-system pyproject-build-system)
10168 (arguments (list #:tests? #f)) ; No tests.
10169 (native-inputs (list python-setuptools))
10170 (home-page "https://git.sr.ht/~solderpunk/VF-1")
10171 (synopsis "Command line gopher client")
10172 (description "@code{VF-1} is a command line gopher client with
10173@acronym{TLS, Transport Layer Security} support.")
10174 (license license:bsd-2)))
10175
10176(define-public python-httpcore
10177 (package
10178 (name "python-httpcore")
10179 (version "1.0.9")
10180 (source
10181 (origin
10182 ;; PyPI tarball does not contain tests.
10183 (method git-fetch)
10184 (uri (git-reference
10185 (url "https://github.com/encode/httpcore")
10186 (commit version)))
10187 (file-name (git-file-name name version))
10188 (sha256
10189 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
10190 (build-system pyproject-build-system)
10191 (native-inputs
10192 (list nss-certs-for-test
10193 python-hatch-fancy-pypi-readme
10194 python-hatchling
10195 python-pytest
10196 python-pytest-asyncio
10197 python-pytest-httpbin
10198 python-pytest-trio
10199 python-uvicorn
10200 python-trustme))
10201 (propagated-inputs
10202 (list python-anyio
10203 python-certifi
10204 python-h11
10205 python-h2
10206 python-sniffio
10207 python-socksio
10208 python-trio
10209 python-trio-typing))
10210 (home-page "https://github.com/encode/httpcore")
10211 (synopsis "Minimal, low-level HTTP client")
10212 (description
10213 "HTTP Core provides a minimal and low-level HTTP client, which does one
10214thing only: send HTTP requests.
10215
10216Some things HTTP Core does do:
10217
10218@itemize
10219@item Sending HTTP requests.
10220@item Provides both sync and async interfaces.
10221@item Supports HTTP/1.1 and HTTP/2.
10222@item Async backend support for asyncio and trio.
10223@item Automatic connection pooling.
10224@item HTTP(S) proxy support.
10225@end itemize")
10226 (license license:bsd-3)))
10227
10228;;; Variant used to break a cycle between python-httpx and python-uvicorn.
10229(define-public python-httpcore-bootstrap
10230 (hidden-package
10231 (package/inherit python-httpcore
10232 (name "python-httpcore-bootstrap")
10233 (arguments (list #:tests? #f))
10234 (native-inputs (list python-hatchling
10235 python-hatch-fancy-pypi-readme)))))
10236
10237(define-public python-httpx
10238 (package
10239 (name "python-httpx")
10240 (version "0.28.1")
10241 (source
10242 (origin
10243 ;; PyPI tarball does not contain tests.
10244 (method git-fetch)
10245 (uri (git-reference
10246 (url "https://github.com/encode/httpx")
10247 (commit version)))
10248 (file-name (git-file-name name version))
10249 (sha256
10250 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
10251 (build-system pyproject-build-system)
10252 (arguments
10253 (list
10254 ;; 1401 passed, 1 skipped, 5 deselected
10255 #:test-flags
10256 #~(list "-o" "asyncio_mode=auto"
10257 ;; CLI tests are broken.
10258 "--ignore=tests/test_main.py"
10259 "-k" (string-join
10260 ;; These tests try to open an outgoing connection.
10261 (list "not test_async_proxy_close"
10262 "test_sync_proxy_clos"
10263 "test_write_timeout")
10264 " and not "))))
10265 (native-inputs
10266 (list nss-certs-for-test
10267 python-chardet
10268 python-cryptography
10269 python-hatch-fancy-pypi-readme
10270 python-hatchling
10271 python-pytest
10272 python-pytest-asyncio
10273 python-pytest-trio
10274 python-setuptools
10275 python-trio
10276 python-trustme
10277 python-uvicorn))
10278 (propagated-inputs
10279 (list python-anyio
10280 python-certifi
10281 python-httpcore
10282 python-idna
10283 ;; [brotli]
10284 python-brotli
10285 ;; [http2]
10286 python-h2
10287 ;; [socks]
10288 python-socksio
10289 ;; [zstd]
10290 python-zstandard
10291 ;; For trio, see:
10292 ;; <https://github.com/python-trio/trio/issues/2802>.
10293 python-sniffio))
10294 (home-page "https://www.python-httpx.org/")
10295 (synopsis "HTTP client for Python")
10296 (description
10297 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
10298and async APIs, and support for both HTTP/1.1 and HTTP/2.
10299
10300HTTPX builds on the well-established usability of requests, and gives you:
10301
10302@itemize
10303@item A broadly requests-compatible API.
10304@item Standard synchronous interface, but with async support if you need it.
10305@item HTTP/1.1 and HTTP/2 support.
10306@item Ability to make requests directly to WSGI applications or ASGI applications.
10307@item Strict timeouts everywhere.
10308@item Fully type annotated.
10309@item 99% test coverage.
10310@end itemize
10311
10312Plus all the standard features of requests:
10313
10314@itemize
10315@item International Domains and URLs
10316@item Keep-Alive & Connection Pooling
10317@item Sessions with Cookie Persistence
10318@item Browser-style SSL Verification
10319@item Basic/Digest Authentication
10320@item Elegant Key/Value Cookies
10321@item Automatic Decompression
10322@item Automatic Content Decoding
10323@item Unicode Response Bodies
10324@item Multipart File Uploads
10325@item HTTP(S) Proxy Support
10326@item Connection Timeouts
10327@item Streaming Downloads
10328@item .netrc Support
10329@item Chunked Requests
10330@end itemize")
10331 (license license:bsd-3)))
10332
10333;;; Variant used to break a cycle with python-uvicorn.
10334(define-public python-httpx-bootstrap
10335 (hidden-package
10336 (package/inherit python-httpx
10337 (name "python-httpx-bootstrap")
10338 (arguments (list #:tests? #f))
10339 (native-inputs
10340 (list python-hatchling
10341 python-hatch-fancy-pypi-readme))
10342 (propagated-inputs
10343 (modify-inputs propagated-inputs
10344 (replace "python-httpcore" python-httpcore-bootstrap))))))
10345
10346(define-public python-httpx-sse
10347 (package
10348 (name "python-httpx-sse")
10349 (version "0.4.3")
10350 (source
10351 (origin
10352 (method git-fetch)
10353 (uri (git-reference
10354 (url "https://github.com/florimondmanca/httpx-sse")
10355 (commit version)))
10356 (file-name (git-file-name name version))
10357 (sha256
10358 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
10359 (build-system pyproject-build-system)
10360 (arguments
10361 (list
10362 ;; XXX: Avoids python-pytest-cov dependency.
10363 #:test-flags #~(list "-c" "/dev/null")))
10364 (native-inputs
10365 (list python-pytest
10366 python-pytest-asyncio
10367 python-setuptools
10368 python-setuptools-scm
10369 python-sse-starlette))
10370 (propagated-inputs (list python-httpx))
10371 (home-page "https://github.com/florimondmanca/httpx-sse")
10372 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
10373 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
10374 (license license:expat)))
10375
10376(define-public python-wsgiprox
10377 (package
10378 (name "python-wsgiprox")
10379 (version "1.5.2")
10380 (source
10381 (origin
10382 (method url-fetch)
10383 (uri (pypi-uri "wsgiprox" version))
10384 (sha256
10385 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
10386 (build-system pyproject-build-system)
10387 (arguments
10388 ;; The test suite hangs (see:
10389 ;; https://github.com/webrecorder/wsgiprox/issues/6).
10390 (list
10391 #:tests? #f
10392 #:phases
10393 #~(modify-phases %standard-phases
10394 (add-after 'unpack 'fix-pytest-argument
10395 (lambda _
10396 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
10397 (substitute* "setup.py"
10398 (("--doctest-module")
10399 "--doctest-modules")))))))
10400 (propagated-inputs
10401 (list python-certauth python-gevent python-websocket-client))
10402 (native-inputs
10403 (list python-mock python-pytest-cov python-waitress python-setuptools))
10404 (home-page "https://github.com/webrecorder/wsgiprox")
10405 (synopsis "HTTP/S proxy with WebSockets over WSGI")
10406 (description
10407 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
10408middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
10409The library accepts HTTP and HTTPS proxy connections, and routes them to a
10410designated prefix.")
10411 (license license:asl2.0)))
10412
10413(define-public python-warcio
10414 ;; The PyPI release is missing some test support files (see:
10415 ;; https://github.com/webrecorder/warcio/issues/132).
10416 (package
10417 (name "python-warcio")
10418 (version "1.7.5")
10419 (source
10420 (origin
10421 (method git-fetch)
10422 (uri (git-reference
10423 (url "https://github.com/webrecorder/warcio")
10424 (commit (string-append "v" version))))
10425 (file-name (git-file-name name version))
10426 (sha256
10427 (base32
10428 "0r3kijsm8wsbipi5pxsrqpg5nn4w8iaw5i8010b0ligmfxnxamlb"))))
10429 (build-system pyproject-build-system)
10430 (arguments
10431 (list
10432 #:test-flags ; These tests fail due to networking requirements.
10433 '(list "-k" (format #f "not ~a"
10434 (string-join
10435 '("test_post_chunked"
10436 "test_remote"
10437 "test_capture_http_proxy"
10438 "test_capture_https_proxy"
10439 "test_capture_https_proxy_same_session")
10440 " and not "))
10441 ; The following test requires the hookdns package.
10442 "--ignore=test/test_capture_http_proxy.py")))
10443 (native-inputs
10444 ;; These inputs are required for the test suite.
10445 (list python-httpbin
10446 python-pytest-cov
10447 python-requests
10448 python-setuptools
10449 python-wheel
10450 python-wsgiprox))
10451 (home-page "https://github.com/webrecorder/warcio")
10452 (synopsis "Streaming web archival archive (WARC) library")
10453 (description "warcio is a Python library to read and write the WARC format
10454commonly used in Web archives. It is designed for fast, low-level access to
10455web archival content, oriented around a stream of WARC records rather than
10456files.")
10457 (license license:asl2.0)))
10458
10459(define-public python-websockets
10460 (package
10461 (name "python-websockets")
10462 (version "13.1")
10463 (source
10464 (origin
10465 (method git-fetch)
10466 (uri (git-reference
10467 (url "https://github.com/aaugustin/websockets")
10468 (commit version)))
10469 (file-name (git-file-name name version))
10470 (sha256
10471 (base32
10472 "1dx3rf6fmg4ir9cfcn1fil446qz879cwrjq2rcz5zvl71xkw6hb3"))))
10473 (build-system pyproject-build-system)
10474 (arguments
10475 (list #:test-backend #~'unittest
10476 #:phases
10477 #~(modify-phases %standard-phases
10478 (add-before 'check 'extend-test-timeout
10479 (lambda _
10480 ;; Some architectures need an even longer timeout. Make it
10481 ;; long enough that it should never fail due to timeout.
10482 #$@(if (target-riscv64?)
10483 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
10484 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
10485 (native-inputs
10486 (list python-setuptools
10487 python-wheel))
10488 (home-page "https://github.com/aaugustin/websockets")
10489 (synopsis
10490 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
10491 (description
10492 "@code{websockets} is a library for building WebSocket servers and clients
10493in Python with a focus on correctness and simplicity.
10494
10495Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
10496it provides an elegant coroutine-based API.")
10497 (license license:bsd-3)))
10498
10499(define-public selenium-manager
10500 (package
10501 (name "selenium-manager")
10502 (version "4.34.2")
10503 (source
10504 (origin
10505 (method git-fetch)
10506 (uri (git-reference
10507 (url "https://github.com/SeleniumHQ/selenium")
10508 (commit (string-append "selenium-" version "-python"))))
10509 (file-name (git-file-name name version))
10510 (sha256
10511 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
10512 (build-system cargo-build-system)
10513 (arguments
10514 (list
10515 ;; XXX: Almost all tests require either browsers or network access.
10516 #:tests? #f
10517 #:install-source? #f ; Most likely intended as a leaf.
10518 #:phases
10519 #~(modify-phases %standard-phases
10520 (add-after 'unpack 'chdir
10521 (lambda _
10522 (chdir "rust"))))))
10523 (native-inputs (list pkg-config))
10524 (inputs (cons* (list zstd "lib") xz
10525 (cargo-inputs 'selenium-manager)))
10526 (home-page "https://www.selenium.dev")
10527 (synopsis "CLI tool to manager the browser test infrastructure")
10528 (description
10529 "Selenium simplifies web browser automation. It specifically provides
10530infrastructure for the W3C WebDriver specification — a platform and
10531language-neutral coding interface compatible with all major web browsers.
10532
10533Selenium Manager is a CLI tool that automatically manages the browser/driver
10534infrastructure required by Selenium.")
10535 (license license:asl2.0)))
10536
10537(define-public python-selenium
10538 (package/inherit selenium-manager
10539 (name "python-selenium")
10540 (build-system pyproject-build-system)
10541 (arguments
10542 (list
10543 ;; XXX: Disable failing tests.
10544 #:test-flags
10545 #~(list "--ignore-glob=test/selenium/webdriver/*"
10546 ;; Probably requires those.
10547 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
10548 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
10549 ;; XXX: SSL certificates access.
10550 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
10551 "-k" "not test_missing_cdp_devtools_version_falls_back")
10552 #:phases
10553 #~(modify-phases %standard-phases
10554 (add-after 'unpack 'chdir
10555 (lambda _
10556 (chdir "py")))
10557 (add-after 'chdir 'inject-selenium-manager-binary
10558 (lambda* (#:key inputs #:allow-other-keys)
10559 (substitute* "selenium/webdriver/common/selenium_manager.py"
10560 (("compiled_path = Path.*")
10561 (format #f "return Path(~s)~%"
10562 (search-input-file inputs "bin/selenium-manager"))))
10563 (substitute* "pyproject.toml"
10564 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
10565 "")
10566 (("target = \"selenium\\.webdriver\\.common.*\"")
10567 ""))))
10568 (add-after 'chdir 'relax-requirements
10569 (lambda _
10570 (substitute* "pyproject.toml"
10571 (("\"(typing_extensions|trio)~=.*\"," _ target)
10572 (format #f "~s," target))))))))
10573 (propagated-inputs (list python-certifi
10574 python-trio
10575 python-trio-websocket
10576 python-typing-extensions
10577 python-urllib3
10578 python-websocket-client))
10579 (inputs (list selenium-manager))
10580 (native-inputs (list python-filetype
10581 python-pytest
10582 python-pytest-mock
10583 python-pytest-trio
10584 python-setuptools
10585 python-setuptools-rust))
10586 (synopsis "Python bindings for Selenium")
10587 (description
10588 "Selenium enables web browser automation. It specifically provides
10589infrastructure for the W3C WebDriver specification — a platform and
10590language-neutral coding interface compatible with all major web browsers.")))
10591
10592(define-public python-rapidjson
10593 (package
10594 (name "python-rapidjson")
10595 (version "1.10")
10596 (source
10597 (origin
10598 (method url-fetch)
10599 (uri (pypi-uri "python-rapidjson" version))
10600 (sha256
10601 (base32
10602 "0h1m9m4a5rlf5hw6ak7z3qbgdhmqarzxw9d140mcf7mrxpswpzmc"))
10603 (modules '((guix build utils)))
10604 (snippet
10605 '(delete-file-recursively "rapidjson"))))
10606 (build-system pyproject-build-system)
10607 (arguments
10608 (list
10609 #:test-flags '(list "tests")
10610 #:phases
10611 #~(modify-phases %standard-phases
10612 ;; We cannot seem to use #:configure-flags with the
10613 ;; pyproject-build-system to override rj_include_dir.
10614 (add-after 'unpack 'override-rapidjson-sources
10615 (lambda _
10616 (substitute* "setup.py"
10617 (("^rj_include_dir =.*")
10618 (string-append "rj_include_dir = '"
10619 #$(this-package-native-input "rapidjson")
10620 "/include/rapidjson" "'"))
10621 (("if not os.path.isdir.*") "if False:")))))))
10622 (native-inputs
10623 (list rapidjson python-pytest python-pytz python-setuptools python-wheel))
10624 (home-page "https://github.com/python-rapidjson/python-rapidjson")
10625 (synopsis "Python wrapper around rapidjson")
10626 (description "This package provides a python wrapper around rapidjson.")
10627 (license license:expat)))
10628
10629(define-public python-venusian
10630 (package
10631 (name "python-venusian")
10632 (version "3.1.1")
10633 (source
10634 (origin
10635 (method url-fetch)
10636 (uri (pypi-uri "venusian" version))
10637 (sha256
10638 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
10639 (build-system pyproject-build-system)
10640 (arguments
10641 (list
10642 #:phases
10643 #~(modify-phases %standard-phases
10644 (add-after 'unpack 'fix-pytest-config
10645 (lambda _
10646 (substitute* "setup.cfg"
10647 (("--cov --cov-report=term-missing ") "")))))))
10648 (native-inputs
10649 (list python-pytest
10650 python-setuptools))
10651 (home-page "https://docs.pylonsproject.org/projects/venusian")
10652 (synopsis "Library for deferring decorator actions")
10653 (description
10654 "Venusian is a library which allows framework authors to defer decorator
10655actions. Instead of taking actions when a function (or class) decorator is
10656executed at import time, you can defer the action usually taken by the
10657decorator until a separate scan phase.")
10658 (license license:repoze)))
10659
10660(define-public python-zope-deprecation
10661 (package
10662 (name "python-zope-deprecation")
10663 (version "6.0")
10664 (source (origin
10665 (method url-fetch)
10666 (uri (pypi-uri "zope_deprecation" version))
10667 (sha256
10668 (base32
10669 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
10670 (build-system pyproject-build-system)
10671 (arguments
10672 (list #:tests? #f)) ;no tests in PyPI
10673 (native-inputs
10674 (list python-setuptools))
10675 (home-page "https://zopedeprecation.readthedocs.io/")
10676 (synopsis "Function for marking deprecations")
10677 (description "The @code{zope.deprecation} module provides a function for
10678marking modules, classes, functions, methods and properties as deprecated,
10679displaying warnings when usaged in application code.")
10680 (license license:zpl2.1)))
10681
10682(define-public python-translationstring
10683 (package
10684 (name "python-translationstring")
10685 (version "1.4")
10686 (source (origin
10687 (method url-fetch)
10688 (uri (pypi-uri "translationstring" version))
10689 (sha256
10690 (base32
10691 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
10692 (build-system pyproject-build-system)
10693 (native-inputs
10694 (list python-pytest
10695 python-setuptools))
10696 (home-page "https://docs.pylonsproject.org/projects/translationstring")
10697 (synopsis "Internationalization tooling for the Pylons project")
10698 (description "This package provides a library used by various Pylons
10699project packages for internationalization (i18n) duties related to
10700translation.")
10701 (license license:repoze)))
10702
10703(define-public python-plaster
10704 (package
10705 (name "python-plaster")
10706 (version "1.1.2")
10707 (source (origin
10708 (method url-fetch)
10709 (uri (pypi-uri "plaster" version))
10710 (sha256
10711 (base32
10712 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
10713 (build-system pyproject-build-system)
10714 (native-inputs
10715 (list python-pytest
10716 python-setuptools))
10717 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
10718 (synopsis "Configuration loader for multiple config file formats")
10719 (description
10720 "Plaster is a loader interface around multiple config file formats. It
10721exists to define a common API for applications to use when they wish to load
10722configuration. The library itself does not aim to handle anything except a
10723basic API that applications may use to find and load configuration settings.
10724Any specific constraints should be implemented in a pluggable loader which can
10725be registered via an entrypoint.")
10726 (license license:repoze)))
10727
10728(define-public python-plaster-pastedeploy
10729 (package
10730 (name "python-plaster-pastedeploy")
10731 (version "1.0.1")
10732 (source (origin
10733 (method url-fetch)
10734 (uri (pypi-uri "plaster_pastedeploy" version))
10735 (sha256
10736 (base32
10737 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
10738 (build-system pyproject-build-system)
10739 (native-inputs
10740 (list python-pytest
10741 python-setuptools))
10742 (propagated-inputs
10743 (list python-plaster python-pastedeploy))
10744 (home-page "https://github.com/Pylons/plaster_pastedeploy")
10745 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
10746 (description
10747 "This plugin for @code{python-plaster} adds support for PasteDeploy
10748syntax, it provides a plaster @code{Loader} object that can parse ini files
10749according to the standard set by PasteDeploy")
10750 (license license:expat)))
10751
10752(define-public python-hupper
10753 (package
10754 (name "python-hupper")
10755 (version "1.12.1")
10756 (source
10757 (origin
10758 (method url-fetch)
10759 (uri (pypi-uri "hupper" version))
10760 (sha256
10761 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
10762 (build-system pyproject-build-system)
10763 (arguments
10764 (list
10765 ;; RuntimeError: timeout waiting for change to
10766 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
10767 #:test-flags #~(list "--ignore=tests/test_it.py")))
10768 (native-inputs
10769 (list python-pytest
10770 python-pytest-cov
10771 python-setuptools
10772 python-wheel))
10773 (propagated-inputs
10774 (list python-watchdog))
10775 (home-page "https://readthedocs.org/projects/hupper")
10776 (synopsis "Integrated process monitor tracking changes to imported Python files")
10777 (description
10778 "Hupper is an integrated process monitor that will track changes to any
10779imported Python files in sys.modules as well as custom paths. When files are
10780changed the process is restarted.")
10781 (license license:expat)))
10782
10783(define-public python-pyowm
10784 (package
10785 (name "python-pyowm")
10786 (version "3.3.0")
10787 (source
10788 (origin
10789 (method git-fetch)
10790 (uri (git-reference
10791 (url "https://github.com/csparpa/pyowm")
10792 (commit version)))
10793 (file-name (git-file-name name version))
10794 (sha256
10795 (base32
10796 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
10797 (build-system pyproject-build-system)
10798 (arguments (list #:test-flags #~(list "tests/unit")))
10799 (native-inputs (list python-pytest python-setuptools python-wheel))
10800 (propagated-inputs
10801 (list python-geojson-for-pyowm
10802 python-pysocks
10803 python-requests))
10804 (home-page "https://github.com/csparpa/pyowm")
10805 (synopsis "Python wrapper around OpenWeatherMap web APIs")
10806 (description
10807 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
10808 (license license:expat)))
10809
10810(define-public python-pyramid
10811 (package
10812 (name "python-pyramid")
10813 (version "2.0.2")
10814 (source (origin
10815 (method url-fetch)
10816 (uri (pypi-uri "pyramid" version))
10817 (sha256
10818 (base32
10819 "1phqdz068hl3zda263qkjp5am8fmvmpcxp3nrhsna8g472kkh89p"))))
10820 (build-system pyproject-build-system)
10821 (propagated-inputs
10822 (list python-hupper
10823 python-plaster
10824 python-plaster-pastedeploy
10825 python-setuptools
10826 python-translationstring
10827 python-venusian
10828 python-webob
10829 python-zope-component
10830 python-zope-deprecation
10831 python-zope-interface))
10832 (native-inputs (list python-pytest python-webtest python-wheel))
10833 (home-page "https://trypyramid.com/")
10834 (synopsis "Python web-framework suitable for small and large sites")
10835 (description
10836 "Pyramid makes it easy to write web applications. From minimal
10837request/response web apps to larger, grown applications.")
10838 (license license:repoze)))
10839
10840(define-public python-pyramid-chameleon
10841 ;; PyPI lacks a fresh release, use the latest commit associated with
10842 ;; unrleased version, see:
10843 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
10844 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
10845 (revision "0"))
10846 (package
10847 (name "python-pyramid-chameleon")
10848 (version (git-version "0.4.dev0" revision commit))
10849 (source
10850 (origin
10851 (method git-fetch)
10852 (uri (git-reference
10853 (url "https://github.com/Pylons/pyramid_chameleon")
10854 (commit commit)))
10855 (file-name (git-file-name name version))
10856 (sha256
10857 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
10858 (build-system pyproject-build-system)
10859 (native-inputs
10860 (list python-pytest
10861 python-setuptools))
10862 (propagated-inputs
10863 (list python-chameleon
10864 python-pyramid))
10865 (home-page "https://github.com/Pylons/pyramid_chameleon")
10866 (synopsis "Chameleon template compiler for pyramid")
10867 (description
10868 "These package provides bindings for the Chameleon templating system
10869 for the Pyramid web framework.")
10870 (license license:repoze))))
10871
10872(define-public python-pyramid-debugtoolbar
10873 (package
10874 (name "python-pyramid-debugtoolbar")
10875 (version "4.12.1")
10876 (source
10877 (origin
10878 (method url-fetch)
10879 (uri (pypi-uri "pyramid_debugtoolbar" version))
10880 (sha256
10881 (base32 "0gdlc7vcga4vzma53h5csnhh4gwfmv3w8v9y5fhwqpy8979qis3i"))))
10882 (build-system pyproject-build-system)
10883 (arguments
10884 (list
10885 #:test-flags
10886 ;; Large diff assertion not equal faileurs.
10887 #~(list #$@(map (lambda (test)
10888 (string-append "--deselect=tests"
10889 "/test_panels/test_sqla.py::" test))
10890 (list "TestSimpleSelect::test_panel"
10891 "TestTransactionCommit::test_panel"
10892 "TestTransactionRollback::test_panel")))))
10893 (native-inputs
10894 (list python-pytest
10895 python-setuptools
10896 python-webtest))
10897 (propagated-inputs
10898 (list python-pyramid
10899 python-pyramid-chameleon
10900 python-pyramid-jinja2
10901 python-pyramid-mako
10902 ;; python-selenium ; see: guix/guix#3478
10903 python-sqlalchemy
10904 python-waitress))
10905 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
10906 (synopsis "Pyramid debug toolbar")
10907 (description
10908 "This package provides an interactive HTML debugger for Pyramid application
10909development.")
10910 (license license:bsd-3)))
10911
10912(define-public python-pyramid-jinja2
10913 (package
10914 (name "python-pyramid-jinja2")
10915 (version "2.10.1")
10916 (source
10917 (origin
10918 (method url-fetch)
10919 (uri (pypi-uri "pyramid_jinja2" version))
10920 (sha256
10921 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
10922 (build-system pyproject-build-system)
10923 (arguments
10924 (list
10925 #:test-flags
10926 ;; Two tests failed with assertion not equal.
10927 #~(list "-k" "not test_it_relative_to_package and not test_options")
10928 #:phases
10929 #~(modify-phases %standard-phases
10930 (add-after 'unpack 'fix-pytest-config
10931 (lambda _
10932 (substitute* "setup.cfg"
10933 ((" --cov") "")))))))
10934 (native-inputs
10935 (list python-pytest
10936 python-setuptools
10937 python-webtest))
10938 (propagated-inputs
10939 (list python-jinja2
10940 python-markupsafe
10941 python-pyramid
10942 python-zope-deprecation))
10943 (home-page "https://github.com/Pylons/pyramid_jinja2")
10944 (synopsis "Jinja2 template bindings for the Pyramid web framework")
10945 (description "This package provides Jinja2 template bindings for the
10946Pyramid web framework.")
10947 (license license:repoze)))
10948
10949(define-public python-pyramid-mako
10950 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
10951 ;; master, us the latest commit for now.
10952 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
10953 (revision "0"))
10954 (package
10955 (name "python-pyramid-mako")
10956 (version (git-version "1.1.0" revision commit))
10957 (source
10958 (origin
10959 (method git-fetch)
10960 (uri (git-reference
10961 (url "https://github.com/Pylons/pyramid_mako")
10962 (commit commit)))
10963 (file-name (git-file-name name version))
10964 (sha256
10965 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
10966 (build-system pyproject-build-system)
10967 (arguments
10968 (list
10969 #:phases
10970 #~(modify-phases %standard-phases
10971 (add-after 'unpack 'fix-pytest-config
10972 (lambda _
10973 (substitute* "pyproject.toml"
10974 ((" --cov --cov-report=term-missing") "")))))))
10975 (native-inputs
10976 (list python-pytest
10977 python-setuptools))
10978 (propagated-inputs
10979 (list python-mako
10980 python-pyramid))
10981 (home-page "https://github.com/Pylons/pyramid_mako")
10982 (synopsis "Mako template bindings for the Pyramid web framework")
10983 (description
10984 "This package provides Mako template bindings for the Pyramid web
10985framework.")
10986 (license license:repoze))))
10987
10988(define-public python-pyramid-retry
10989 (package
10990 (name "python-pyramid-retry")
10991 (version "2.1.1")
10992 (source
10993 (origin
10994 (method url-fetch)
10995 (uri (pypi-uri "pyramid_retry" version))
10996 (sha256
10997 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
10998 (build-system pyproject-build-system)
10999 (native-inputs
11000 (list python-pytest
11001 python-setuptools
11002 python-webtest))
11003 (propagated-inputs
11004 (list python-pyramid
11005 python-zope-interface))
11006 (home-page "https://github.com/Pylons/pyramid_retry")
11007 (synopsis "Pyramid execution policy supporting retrying failed requests")
11008 (description
11009 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
11010and can retry them a configurable number of times under certain \"retryable\"
11011error conditions before indicating a failure to the client.")
11012 (license license:expat)))
11013
11014(define-public python-pyramid-tm
11015 (package
11016 (name "python-pyramid-tm")
11017 (version "2.6")
11018 (source
11019 (origin
11020 (method url-fetch)
11021 (uri (pypi-uri "pyramid_tm" version))
11022 (sha256
11023 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
11024 (build-system pyproject-build-system)
11025 (arguments
11026 (list
11027 #:phases
11028 #~(modify-phases %standard-phases
11029 (add-after 'unpack 'fix-pytest-config
11030 (lambda _
11031 (substitute* "setup.cfg"
11032 ((" --cov") "")))))))
11033 (native-inputs
11034 (list python-pytest
11035 python-setuptools
11036 python-webtest))
11037 (propagated-inputs
11038 (list python-pyramid
11039 python-transaction))
11040 (home-page "https://github.com/Pylons/pyramid_tm")
11041 (synopsis "Centralized transaction management for Pyramid")
11042 (description
11043 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
11044active @url{https://pypi.org/project/transaction/, transaction} as provided by
11045the Python transaction package.")
11046 (license license:repoze)))
11047
11048(define-public python-random-user-agent
11049 (package
11050 (name "python-random-user-agent")
11051 (version "1.0.1")
11052 (source
11053 (origin
11054 (method url-fetch)
11055 (uri (pypi-uri "random_user_agent" version))
11056 (sha256
11057 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
11058 (build-system pyproject-build-system)
11059 (arguments (list #:tests? #f)) ; No tests.
11060 (native-inputs (list python-setuptools))
11061 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
11062 (synopsis "List of user agents")
11063 (description
11064 "This package provides a list of user agents, from a collection of more
11065than 326,000 known user-agents. Users can pick a random one, or select one
11066based on filters.")
11067 (license license:expat)))
11068
11069(define-public python-rangehttpserver
11070 (package
11071 (name "python-rangehttpserver")
11072 (version "1.4.0")
11073 (source
11074 (origin
11075 (method git-fetch)
11076 (uri (git-reference
11077 (url "https://github.com/danvk/RangeHTTPServer")
11078 (commit version)))
11079 (file-name (git-file-name name version))
11080 (sha256
11081 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
11082 (build-system pyproject-build-system)
11083 (native-inputs
11084 (list python-pytest
11085 python-requests
11086 python-setuptools))
11087 (home-page "https://github.com/danvk/RangeHTTPServer")
11088 (synopsis "SimpleHTTPServer with support for range requests")
11089 (description
11090 "This tool provides a simple HTTP server with support for Range
11091requests.")
11092 (license license:asl2.0)))
11093
11094(define-public python-flask-restx
11095 (package
11096 (name "python-flask-restx")
11097 (version "1.3.0")
11098 (source
11099 (origin
11100 (method git-fetch) ;no tests in PyPI archive
11101 (uri (git-reference
11102 (url "https://github.com/python-restx/flask-restx")
11103 (commit version)))
11104 (file-name (git-file-name name version))
11105 (sha256
11106 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
11107 (build-system pyproject-build-system)
11108 (arguments
11109 (list
11110 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
11111 #:test-flags
11112 #~(list "--benchmark-skip"
11113 ;; ValueError: http://www.google.com is not a valid URL. Domain
11114 ;; does not exists.
11115 "--deselect=tests/test_inputs.py::URLTest::test_check"
11116 "-k" (string-join
11117 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
11118 (list "not test_rfc822_value"
11119 "test_iso8601_value"
11120 ;; assert 404 == 2000
11121 "test_specs_endpoint_host_and_subdomain"
11122 ;; ValueError: [email protected] is not a valid email
11123 "test_valid_value_check")
11124 " and not "))))
11125 (native-inputs
11126 (list python-blinker
11127 python-faker
11128 python-pytest
11129 python-pytest-benchmark
11130 python-pytest-flask
11131 python-pytest-mock
11132 python-setuptools))
11133 (propagated-inputs
11134 (list python-aniso8601
11135 python-flask
11136 python-importlib-resources
11137 python-jsonschema
11138 python-pytz
11139 python-werkzeug))
11140 (home-page "https://github.com/python-restx/flask-restx")
11141 (synopsis
11142 "Framework for fast, easy and documented API development with Flask")
11143 (description
11144 "Flask-RESTX is an extension for Flask that adds support for quickly building
11145REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
11146 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
11147decorators and tools to describe your API and expose its documentation properly using
11148Swagger.")
11149 (license license:bsd-3)))
11150
11151(define-deprecated-package python-flask-restplus
11152 python-flask-restx)
11153
11154(define-public python-flask-socketio
11155 (package
11156 (name "python-flask-socketio")
11157 (version "5.5.1")
11158 (source
11159 (origin
11160 (method url-fetch)
11161 (uri (pypi-uri "flask_socketio" version))
11162 (sha256
11163 (base32
11164 "1i0yqn39b4v4r2whppx47sg7iicvqzssd1clx7cclk07l52cjinr"))))
11165 (build-system pyproject-build-system)
11166 (propagated-inputs
11167 (list python-flask python-socketio))
11168 (native-inputs
11169 (list python-pytest python-redis python-setuptools python-wheel))
11170 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
11171 (synopsis "Socket.IO integration for Flask applications")
11172 (description "Socket.IO integration for Flask applications")
11173 (license license:expat)))
11174
11175(define-public python-manuel
11176 (package
11177 (name "python-manuel")
11178 (version "1.13.0")
11179 (source
11180 (origin
11181 (method url-fetch)
11182 (uri (pypi-uri "manuel" version))
11183 (sha256
11184 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
11185 (build-system pyproject-build-system)
11186 (arguments
11187 (list
11188 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
11189 #:tests? #f))
11190 (propagated-inputs
11191 (list python-setuptools)) ;install requires
11192 (home-page "https://pypi.org/project/manuel/")
11193 (synopsis "Build tested documentation")
11194 (description
11195 "Manuel lets you mix and match traditional doctests with custom test syntax.")
11196 (license license:asl2.0)))
11197
11198(define-public python-marshmallow-jsonapi
11199 (package
11200 (name "python-marshmallow-jsonapi")
11201 (version "0.26.0")
11202 (source
11203 (origin
11204 (method git-fetch)
11205 (uri (git-reference
11206 ;; XXX: Deprecated upstream: This repository has been archived
11207 ;; by the owner on Jun 6, 2024. It is now read-only.
11208 ;; Using a maintained fork. The pypi name of this fork
11209 ;; is marshmallow-jsonapi-minfork.
11210 (url "https://github.com/tadams42/marshmallow-jsonapi")
11211 (commit version)))
11212 (file-name (git-file-name name version))
11213 (sha256
11214 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
11215 (build-system pyproject-build-system)
11216 (native-inputs
11217 (list python-faker
11218 python-flask
11219 python-pytest
11220 python-setuptools))
11221 (propagated-inputs (list python-marshmallow))
11222 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
11223 (synopsis "JSON:API 1.0 formatting with Marshmallow")
11224 (description
11225 "The marshmallow-jsonapi package provides a simple way to produce
11226@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
11227framework. It includes optional utilities to integrate with Flask. This is a
11228forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
11229 (license license:expat)))
11230
11231(define-public python-pecan
11232 (package
11233 (name "python-pecan")
11234 (version "1.6.1")
11235 (source
11236 (origin
11237 (method git-fetch) ;no tests in pypi release
11238 (uri (git-reference
11239 (url "https://github.com/pecan/pecan")
11240 (commit version)))
11241 (file-name (git-file-name name version))
11242 (sha256
11243 (base32
11244 "1ybjvpws741bvxd7aq5hh8gv5sk9836hb9afgalqsm0lxsq0li3a"))))
11245 (build-system pyproject-build-system)
11246 (arguments
11247 (list
11248 #:test-flags '(list "--pyargs" "pecan")))
11249 (native-inputs
11250 (list gunicorn
11251 python-genshi
11252 python-jinja2
11253 python-pytest
11254 python-sqlalchemy))
11255 (propagated-inputs
11256 (list python-logutils
11257 python-mako
11258 python-six
11259 python-webob
11260 python-webtest))
11261 (home-page "http://github.com/pecan/pecan")
11262 (synopsis "WSGI object-dispatching web framework")
11263 (description "This package provides a WSGI object-dispatching web
11264framework, designed to be lean and fast, with few dependencies.")
11265 (license license:bsd-3)))
11266
11267(define-public python-persistent
11268 (package
11269 (name "python-persistent")
11270 (version "6.1.1")
11271 (source
11272 (origin
11273 (method git-fetch)
11274 (uri (git-reference
11275 (url "https://github.com/zopefoundation/persistent/")
11276 (commit version)))
11277 (file-name (git-file-name name version))
11278 (sha256
11279 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
11280 (build-system pyproject-build-system)
11281 (arguments
11282 (list
11283 #:phases
11284 #~(modify-phases %standard-phases
11285 (replace 'check
11286 (lambda* (#:key tests? #:allow-other-keys)
11287 (if tests?
11288 (invoke "zope-testrunner" "--test-path=src"
11289 ;; XXX: Ignore doc tests.
11290 "!persistent.tests.test_docs")
11291 (format #t "test suite not run~%")))))))
11292 (propagated-inputs
11293 (list python-cffi
11294 python-zope-deferredimport
11295 python-zope-interface
11296 python-zope-testrunner))
11297 (native-inputs
11298 (list python-manuel python-zope-testrunner python-setuptools))
11299 (home-page "https://github.com/zopefoundation/persistent/")
11300 (synopsis "Translucent persistent objects")
11301 (description
11302 "This package contains a generic persistence implementation for Python.
11303It forms the core protocol for making objects interact \"transparently\" with
11304a database such as the ZODB.")
11305 (license license:zpl2.1)))
11306
11307(define-public python-btrees
11308 (package
11309 (name "python-btrees")
11310 (version "6.1")
11311 (source
11312 (origin
11313 (method git-fetch)
11314 (uri (git-reference
11315 (url "https://github.com/zopefoundation/BTrees")
11316 (commit version)))
11317 (file-name (git-file-name name version))
11318 (sha256
11319 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
11320 (build-system pyproject-build-system)
11321 (arguments
11322 (list
11323 #:phases
11324 #~(modify-phases %standard-phases
11325 (replace 'check
11326 (lambda* (#:key tests? #:allow-other-keys)
11327 (if tests?
11328 (invoke "zope-testrunner" "--test-path=src")
11329 (format #t "test suite not run~%")))))))
11330 (propagated-inputs (list python-persistent python-zope-interface))
11331 (native-inputs (list python-persistent python-transaction
11332 python-zope-testrunner python-setuptools))
11333 (home-page "https://github.com/zopefoundation/BTrees")
11334 (synopsis "Scalable persistent object containers")
11335 (description
11336 "This package contains a set of persistent object containers built around a
11337modified BTree data structure. The trees are optimized for use inside ZODB's
11338\"optimistic concurrency\" paradigm, and include explicit resolution of
11339conflicts detected by that mechanism.")
11340 (license license:zpl2.1)))
11341
11342(define-public python-transaction
11343 (package
11344 (name "python-transaction")
11345 (version "5.0")
11346 (source
11347 (origin
11348 (method url-fetch)
11349 (uri (pypi-uri "transaction" version))
11350 (sha256
11351 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
11352 (build-system pyproject-build-system)
11353 (native-inputs
11354 (list python-pytest
11355 python-setuptools))
11356 (propagated-inputs
11357 (list python-zope-interface))
11358 (home-page "https://github.com/zopefoundation/transaction")
11359 (synopsis "Transaction management for Python")
11360 (description "This package contains a generic transaction implementation
11361for Python. It is mainly used by the ZODB.")
11362 (license license:zpl2.1)))
11363
11364(define-public python-truststore
11365 (package
11366 (name "python-truststore")
11367 (version "0.10.4")
11368 (source
11369 (origin
11370 (method url-fetch)
11371 (uri (pypi-uri "truststore" version))
11372 (sha256
11373 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
11374 (build-system pyproject-build-system)
11375 (arguments
11376 (list #:tests? #f)) ;all tests require Internet access
11377 (native-inputs
11378 (list python-flit-core))
11379 (home-page "https://github.com/sethmlarson/truststore")
11380 (synopsis "Verify certificates using native system trust stores")
11381 (description
11382 "Truststore is a library which exposes native system certificate stores (ie
11383\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
11384Python applications no longer need to rely on certifi as a root certificate
11385store.")
11386 (license license:expat)))
11387
11388(define-public python-robot-detection
11389 (package
11390 (name "python-robot-detection")
11391 (version "0.4.0")
11392 (source
11393 (origin
11394 (method git-fetch)
11395 (uri (git-reference
11396 (url "https://github.com/rory/robot-detection")
11397 (commit (string-append "v" version))))
11398 (file-name (git-file-name name version))
11399 (sha256
11400 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
11401 (build-system pyproject-build-system)
11402 (arguments (list #:test-backend #~'unittest))
11403 (native-inputs (list python-setuptools))
11404 (propagated-inputs (list python-six))
11405 (home-page "https://github.com/rory/robot-detection")
11406 (synopsis "Detect web crawlers")
11407 (description
11408 "@code{robot_detection} is a python module to detect if a given HTTP User
11409Agent is a web crawler. It uses the list of registered robots from
11410@url{http://www.robotstxt.org}.")
11411 (license license:gpl3+)))
11412
11413(define-public python-robotframework-requests
11414 (package
11415 (name "python-robotframework-requests")
11416 (version "0.9.7")
11417 (source
11418 (origin
11419 (method git-fetch) ; no tests in PyPI release
11420 (uri (git-reference
11421 (url "https://github.com/MarketSquare/robotframework-requests")
11422 (commit (string-append "v" version))))
11423 (file-name (git-file-name name version))
11424 (sha256
11425 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
11426 (build-system pyproject-build-system)
11427 (native-inputs
11428 (list python-pytest
11429 python-setuptools
11430 python-wheel))
11431 (propagated-inputs
11432 (list python-requests
11433 python-robotframework))
11434 (home-page "https://github.com/MarketSquare/robotframework-requests")
11435 (synopsis "Robot Framework keyword library wrapper around requests")
11436 (description
11437 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
11438Framework} library aimed to provide HTTP API testing functionalities by
11439wrapping the @code{requests} Python library.")
11440 (license license:expat)))
11441
11442(define-public python-pysolr
11443 (package
11444 (name "python-pysolr")
11445 (version "3.10.0")
11446 (source
11447 (origin
11448 (method url-fetch)
11449 (uri (pypi-uri "pysolr" version))
11450 (sha256
11451 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
11452 (build-system pyproject-build-system)
11453 (arguments
11454 '(#:tests? #f)) ; Tests require network access.
11455 (native-inputs
11456 (list python-setuptools
11457 python-setuptools-scm
11458 python-wheel))
11459 (propagated-inputs
11460 (list python-requests))
11461 (home-page "https://github.com/django-haystack/pysolr/")
11462 (synopsis "Lightweight python wrapper for Apache Solr")
11463 (description
11464 "This module provides an interface that queries the Apache Solr server
11465using a pure Python implementation.")
11466 (license license:bsd-3)))
11467
11468(define-public python-pyjsparser
11469 ;; XXX: This project is potentially abandonware, consider to remove in next
11470 ;; refresh cycle, see:
11471 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
11472 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
11473 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
11474 (package
11475 (name "python-pyjsparser")
11476 (version "2.7.1")
11477 (source
11478 (origin
11479 (method url-fetch)
11480 (uri (pypi-uri "pyjsparser" version))
11481 (sha256
11482 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
11483 (build-system pyproject-build-system)
11484 (arguments
11485 '(#:tests? #f)) ;no tests in PyPI
11486 (native-inputs (list python-setuptools))
11487 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
11488 (synopsis "Fast JavaScript parser")
11489 (description
11490 "This package provides a fast JavaScript parser (based on esprima.js)")
11491 (license license:expat)))
11492
11493(define-public python-js2py
11494 (package
11495 (name "python-js2py")
11496 (version "0.74")
11497 (source
11498 (origin
11499 (method url-fetch)
11500 (uri (pypi-uri "Js2Py" version))
11501 (sha256
11502 (base32 "0bwpp23qpx9amzqisiqvzlr17hr7vxqp4ry8lgxhw639hjmadwrr"))))
11503 (build-system pyproject-build-system)
11504 (arguments
11505 (list #:tests? #f)) ; tests require Node
11506 (native-inputs
11507 (list python-setuptools))
11508 (propagated-inputs
11509 (list python-pyjsparser
11510 python-six
11511 python-tzlocal))
11512 (home-page "https://github.com/PiotrDabkowski/Js2Py")
11513 (synopsis "JavaScript to Python translator")
11514 (description
11515 "This package provides a JavaScript to Python translator and a JavaScript
11516interpreter written in pure Python.")
11517 (license license:expat)))
11518
11519(define-public python-http-ece
11520 (package
11521 (name "python-http-ece")
11522 (version "1.2.1")
11523 (source
11524 (origin
11525 (method git-fetch)
11526 (uri (git-reference
11527 (url "https://github.com/web-push-libs/encrypted-content-encoding")
11528 (commit (string-append "v" version))))
11529 (file-name (git-file-name name version))
11530 (sha256
11531 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
11532 (build-system pyproject-build-system)
11533 (arguments
11534 `(#:phases
11535 (modify-phases %standard-phases
11536 (add-after 'unpack 'change-directory
11537 (lambda _ (chdir "python") #t)))))
11538 (native-inputs
11539 (list python-pytest
11540 python-pytest-cov
11541 python-setuptools))
11542 (propagated-inputs
11543 (list python-cryptography))
11544 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
11545 (synopsis "Encrypted Content Encoding for HTTP")
11546 (description
11547 "This package provides a simple implementation of Encrypted Content
11548Encoding for HTTP.")
11549 (license license:expat)))
11550
11551(define-public python-cloud-init
11552 (package
11553 (name "python-cloud-init")
11554 (version "24.2")
11555 (source
11556 (origin
11557 (method git-fetch)
11558 (uri (git-reference
11559 (url "https://github.com/canonical/cloud-init")
11560 (commit version)))
11561 (file-name (git-file-name name version))
11562 (sha256
11563 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
11564 (build-system pyproject-build-system)
11565 (arguments
11566 (list
11567 #:test-flags
11568 '(list
11569 ;; This requires usermod
11570 "--ignore=tests/unittests/distros/test_create_users.py"
11571 ;; This writes to /var
11572 "--ignore=tests/unittests/net/test_dhcp.py"
11573 "-k"
11574 (string-append
11575 ;; This test messes with PATH, so it cannot find mkdir
11576 "not test_path_env_gets_set_from_main"
11577 " and not test_apt_configure_sources_list_"
11578 ;; These all fail because /bin/sh doesn't exist. We cannot patch
11579 ;; this because the generated scripts must use /bin/sh as they are
11580 ;; supposed to be run on minimal systems.
11581 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
11582 " and not test_handler_runs_bootcmd_script_with_error"
11583 " and not test_subp_combined_stderr_stdout"
11584 " and not test_handle_part"))
11585 #:phases
11586 #~(modify-phases %standard-phases
11587 (add-after 'unpack 'patch-references
11588 (lambda _
11589 (substitute* "tests/unittests/cmd/test_clean.py"
11590 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
11591 (add-after 'install 'move-files
11592 (lambda* (#:key inputs outputs #:allow-other-keys)
11593 (for-each (lambda (dir)
11594 (let ((source (string-append (site-packages inputs outputs) "/" dir))
11595 (target (string-append #$output "/" (basename dir))))
11596 (copy-recursively source target)
11597 (delete-file-recursively source)))
11598 (list "etc" "lib" "usr/lib" "usr/share")))))))
11599 (propagated-inputs
11600 (list python-configobj
11601 python-jinja2
11602 python-jsonpatch
11603 python-jsonschema
11604 python-netifaces
11605 python-oauthlib
11606 python-pyserial
11607 python-pyyaml
11608 python-responses))
11609 (native-inputs
11610 (list procps ;for ps when running tests
11611 python-pytest
11612 python-pytest-cov
11613 python-pytest-mock
11614 python-passlib
11615 python-setuptools
11616 python-wheel))
11617 (home-page "https://github.com/canonical/cloud-init")
11618 (synopsis "Cloud instance initialization tools")
11619 (description
11620 "Cloud-init is the multi-distribution method for cross-platform cloud
11621instance initialization. It is supported across all major public cloud
11622providers, provisioning systems for private cloud infrastructure, and
11623bare-metal installations.")
11624 ;; Either license can be chosen
11625 (license (list license:asl2.0 license:gpl3))))
11626
11627(define-public python-cloudscraper
11628 (package
11629 (name "python-cloudscraper")
11630 (version "3.0.0")
11631 (source
11632 (origin
11633 (method git-fetch)
11634 (uri (git-reference
11635 (url "https://github.com/VeNoMouS/cloudscraper")
11636 (commit version)))
11637 (file-name (git-file-name name version))
11638 (sha256
11639 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
11640 (modules '((guix build utils)))
11641 (snippet
11642 '(with-directory-excursion "cloudscraper"
11643 (for-each delete-file
11644 '("captcha/9kw.py" "captcha/anticaptcha.py"))
11645 (substitute* "__init__.py"
11646 ;; Perhaps it's a joke, but don't promote proprietary software.
11647 (("([Th]is feature is not available) in the .*'" _ prefix)
11648 (string-append prefix ".'")))))))
11649 (build-system pyproject-build-system)
11650 (arguments
11651 (list
11652 #:test-flags
11653 #~(list "-k" "not test_403_handling")
11654 #:phases
11655 #~(modify-phases %standard-phases
11656 (add-after 'unpack 'relax-requirements
11657 (lambda _
11658 ;; XXX: Relax brotli dependency.
11659 (substitute* "pyproject.toml"
11660 (("\"brotli>=.*\"")
11661 "\"brotli\""))
11662 ;; XXX: Dependencies, that have not yet been packaged
11663 ;; and cause an import error when included.
11664 (delete-file "cloudscraper/interpreters/v8.py")))
11665 (add-after 'unpack 'fix-references
11666 (lambda _
11667 (substitute* "cloudscraper/interpreters/nodejs.py"
11668 (("'node'")
11669 (string-append "'" (which "node") "'"))))))))
11670 (inputs (list node-lts))
11671 (propagated-inputs
11672 (list python-pycryptodome
11673 python-brotli
11674 python-js2py
11675 python-polling2
11676 python-requests
11677 python-requests-toolbelt
11678 python-responses
11679 python-pyparsing
11680 python-websocket-client))
11681 (native-inputs (list python-pytest python-setuptools))
11682 (home-page "https://github.com/venomous/cloudscraper")
11683 (synopsis "Cloudflare anti-bot bypass")
11684 (description
11685 "This module acts as a webbrowser solving Cloudflare's Javascript
11686challenges.")
11687 (license license:expat)))
11688
11689(define-public python-imap-tools
11690 (package
11691 (name "python-imap-tools")
11692 (version "1.9.0")
11693 (source
11694 (origin
11695 (method git-fetch) ; no tests in PyPI release
11696 (uri (git-reference
11697 (url "https://github.com/ikvk/imap_tools")
11698 (commit (string-append "v" version))))
11699 (file-name (git-file-name name version))
11700 (sha256
11701 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
11702 (arguments
11703 (list
11704 #:test-flags
11705 ;; Tests require a network connection
11706 #~(list "-k" (string-append "not test_action"
11707 " and not test_attributes"
11708 " and not test_connection"
11709 " and not test_folders"
11710 " and not test_idle"
11711 " and not test_live"))))
11712 (build-system pyproject-build-system)
11713 (native-inputs
11714 (list python-pytest python-setuptools python-wheel))
11715 (home-page "https://github.com/ikvk/imap_tools")
11716 (synopsis "Work with email and mailbox by IMAP")
11717 (description
11718 "This Python library provides tools to deal with email and mailboxes
11719over IMAP:
11720
11721@itemize
11722@item Parsed email message attributes
11723@item Query builder for searching emails
11724@item Work with emails in folders (copy, delete, flag, move, seen)
11725@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
11726@end itemize")
11727 (license license:asl2.0)))
11728
11729(define-public python-giturlparse
11730 (package
11731 (name "python-giturlparse")
11732 (version "0.12.0")
11733 (source
11734 (origin
11735 (method git-fetch)
11736 (uri (git-reference
11737 (url "https://github.com/nephila/giturlparse")
11738 (commit version)))
11739 (file-name (git-file-name name version))
11740 (sha256
11741 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
11742 (build-system pyproject-build-system)
11743 (native-inputs (list python-pytest python-setuptools))
11744 (home-page "https://github.com/nephila/giturlparse")
11745 (synopsis "Git URL parsing module")
11746 (description
11747 "This package provides a git URL parsing module which supports parsing
11748and rewriting of remote git URLs from various hosting providers.")
11749 (license license:asl2.0)))
11750
11751(define-public python-hstspreload
11752 (package
11753 (name "python-hstspreload")
11754 (version "2025.1.1")
11755 (source
11756 (origin
11757 (method git-fetch)
11758 (uri (git-reference
11759 (url "https://github.com/sethmlarson/hstspreload")
11760 (commit version)))
11761 (file-name (git-file-name name version))
11762 (sha256
11763 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
11764 (build-system pyproject-build-system)
11765 (arguments (list #:tests? #f)) ; tests require external resources.
11766 (native-inputs (list python-setuptools))
11767 (home-page "https://github.com/sethmlarson/hstspreload")
11768 (synopsis "Chromium HSTS Preload list as a Python package")
11769 (description
11770 "@code{python-hstspreload} contains Chromium HSTS Preload list
11771as a Python package.")
11772 (license license:bsd-3)))
11773
11774(define-public python-sanic-routing
11775 (package
11776 (name "python-sanic-routing")
11777 (version "23.12.0")
11778 (source
11779 (origin
11780 (method url-fetch)
11781 (uri (pypi-uri "sanic-routing" version))
11782 (sha256
11783 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
11784 (build-system pyproject-build-system)
11785 (arguments
11786 ;; PyPi sources does not contain tests, recursive dependency on
11787 ;; python-sanic.
11788 (list #:tests? #f))
11789 (native-inputs (list python-setuptools python-wheel))
11790 (home-page "https://github.com/sanic-org/sanic-routing/")
11791 (synopsis "Routing component for Sanic")
11792 (description "Internal package for @code{python-sanic}, which provides
11793the @code{BasicRouter}.")
11794 (license license:expat)))
11795
11796(define-public python-sanic-testing
11797 (package
11798 (name "python-sanic-testing")
11799 (version "23.12.0")
11800 (source
11801 (origin
11802 (method url-fetch)
11803 (uri (pypi-uri "sanic-testing" version))
11804 (sha256
11805 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
11806 (build-system pyproject-build-system)
11807 (arguments
11808 ;; PyPi sources does not contain tests, recursive dependency on
11809 ;; python-sanic.
11810 (list #:tests? #f))
11811 (propagated-inputs (list python-httpx python-sanic-bootstrap))
11812 (native-inputs (list python-setuptools python-wheel))
11813 (home-page "https://github.com/sanic-org/sanic-testing/")
11814 (synopsis "Test clients for Sanic")
11815 (description "Internal package for @code{python-sanic}, which is
11816meant to be the core testing utility and clients for testing Sanic
11817applications.")
11818 (license license:expat)))
11819
11820(define-public python-sanic
11821 (package
11822 (name "python-sanic")
11823 (version "25.3.0")
11824 (source
11825 (origin
11826 (method url-fetch)
11827 (uri (pypi-uri "sanic" version))
11828 (sha256
11829 (base32 "1fv9wgsj54scbr7qhmwdgc4zqnqpwacpakcfxhsg10gc04h54pbp"))
11830 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
11831 (modules '((guix build utils)))
11832 (snippet #~(substitute* "setup.py"
11833 (("setuptools>=[0-9.]*")
11834 "setuptools")))))
11835 (build-system pyproject-build-system)
11836 (arguments
11837 (list
11838 #:test-flags
11839 #~(list "--asyncio-mode=auto"
11840 "--ignore=tests/benchmark/"
11841 "--ignore=tests/typing/test_typing.py"
11842 ;; Most tests hang or fail
11843 "--ignore=tests/test_cli.py"
11844 "--ignore=tests/worker/test_worker_serve.py"
11845 "-k"
11846 (string-append
11847 ;; PyPi sources lack examples module.
11848 "not test_gunicorn_"
11849 ;; Does not expect brotli and reordered headers.
11850 " and not test_raw_headers"
11851 ;; These look like buggy testcases.
11852 " and not test_zero_downtime"
11853 " and not test_non_default_uvloop_config_raises_warning"
11854 " and not test_listeners_triggered"
11855 " and not test_keep_alive_connection_context"
11856 " and not test_keep_alive_client_timeout"
11857 " and not test_conflicting_body_methods_overload"
11858 " and not test_unix_connection"
11859 ;; Unclear why they fail since core-updates merge.
11860 " and not test_missing_sni"
11861 " and not test_no_matching_cert"
11862 " and not test_wildcards"
11863 ;; These tests fail because subprotocols appear to be
11864 ;; parameterized as None
11865 " and not test_websocket_route_with_subprotocols"
11866 ;; AF_UNIX path too long
11867 " and not test_setup_and_teardown_unix"
11868 " and not test_configure_socket"
11869 ;; Freezes
11870 " and not test_server_run_with_repl"
11871 " and not test_server_run"
11872 " and not test_no_workers"))))
11873 (propagated-inputs
11874 (list python-aiofiles
11875 python-aioquic
11876 python-html5tagger
11877 python-httptools
11878 python-multidict
11879 python-sanic-routing
11880 python-tracerite
11881 python-typing-extensions
11882 python-ujson
11883 python-uvloop
11884 python-websockets))
11885 (native-inputs
11886 (list python-beautifulsoup4
11887 python-chardet
11888 python-cryptography
11889 python-docutils
11890 python-mypy
11891 python-pygments
11892 python-pytest
11893 python-pytest-asyncio
11894 python-pytest-benchmark
11895 python-pytest-sanic
11896 python-sanic-testing
11897 python-setuptools
11898 python-slotscheck
11899 python-towncrier
11900 python-types-ujson
11901 python-uvicorn
11902 python-wheel))
11903 (home-page "https://github.com/sanic-org/sanic/")
11904 (synopsis "Async Python web server/framework")
11905 (description
11906 "Sanic is a Python web server and web framework that's written to go
11907fast. It allows the usage of the @code{async/await} syntax added in Python
119083.5, which makes your code non-blocking and speedy.")
11909 (license license:expat)))
11910
11911(define-public python-sanic-bootstrap
11912 (package
11913 (inherit python-sanic)
11914 (name "python-sanic-bootstrap")
11915 (arguments (list #:tests? #f))
11916 (native-inputs (list python-setuptools python-wheel))))
11917
11918(define-public python-socketio
11919 (package
11920 (name "python-socketio")
11921 (version "5.12.1")
11922 (source
11923 (origin
11924 (method url-fetch)
11925 (uri (pypi-uri "python_socketio" version))
11926 (sha256
11927 (base32
11928 "175sd3fdld3s477i6b3v49yhf1alsbm1vaxzq44nqrqb8wgzz682"))))
11929 (build-system pyproject-build-system)
11930 (arguments
11931 (list #:test-flags
11932 '(list "--timeout=60"
11933 ;; These tests freeze.
11934 "--ignore-glob=tests/async/*")))
11935 (propagated-inputs
11936 (list python-bidict python-engineio python-msgpack))
11937 (native-inputs
11938 (list python-pytest
11939 python-pytest-asyncio
11940 python-pytest-timeout
11941 python-setuptools
11942 python-uvicorn
11943 python-wheel))
11944 (home-page "https://github.com/miguelgrinberg/python-socketio/")
11945 (synopsis "Python Socket.IO server")
11946 (description
11947 "This package provides a Python implementation of the @code{Socket.IO}
11948realtime client and server.")
11949 (license license:expat)))
11950
11951(define-public python-socks
11952 (package
11953 (name "python-socks")
11954 (version "2.7.2")
11955 (source
11956 (origin
11957 (method git-fetch)
11958 (uri (git-reference
11959 (url "https://github.com/romis2012/python-socks")
11960 (commit (string-append "v" version))))
11961 (file-name (git-file-name name version))
11962 (sha256
11963 (base32 "1alrfjkir69006qmr2ax3inrffk2bllpljwmprwczb44r0mya77m"))))
11964 (build-system pyproject-build-system)
11965 (propagated-inputs (list python-trio))
11966 (native-inputs
11967 (list python-anyio
11968 python-async-timeout
11969 python-flask
11970 python-pytest
11971 python-pytest-asyncio
11972 python-pytest-trio
11973 python-setuptools
11974 python-tiny-proxy
11975 python-trustme
11976 python-yarl))
11977 (home-page "https://github.com/romis2012/python-socks")
11978 (synopsis
11979 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
11980 (description
11981 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
11982 functionality.")
11983 (license license:asl2.0)))
11984
11985(define-public python-socksio
11986 (package
11987 (name "python-socksio")
11988 (version "1.0.0")
11989 (source
11990 (origin
11991 (method url-fetch)
11992 (uri (pypi-uri "socksio" version))
11993 (sha256
11994 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
11995 (build-system pyproject-build-system)
11996 (native-inputs
11997 (list python-flit-core
11998 python-pytest
11999 python-pytest-cov))
12000 (home-page "https://github.com/sethmlarson/socksio")
12001 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
12002 (description "The @code{socksio} Python module is a client-side sans-I/O
12003SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
12004@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
12005means the library itself does not handle the actual sending of the bytes
12006through the network, it only deals with the implementation details of the
12007SOCKS protocols. It can be paired with any I/O library.")
12008 (license license:expat)))
12009
12010(define-public python-simple-websocket
12011 (package
12012 (name "python-simple-websocket")
12013 (version "1.1.0")
12014 (source
12015 (origin
12016 (method url-fetch)
12017 (uri (pypi-uri "simple_websocket" version))
12018 (sha256
12019 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
12020 (build-system pyproject-build-system)
12021 (arguments
12022 ;; Requires Internet access to resolve example.com
12023 (list #:test-flags '(list "--ignore=tests/test_client.py")))
12024 (propagated-inputs (list python-wsproto))
12025 (native-inputs (list python-pytest
12026 python-setuptools))
12027 (home-page "https://github.com/miguelgrinberg/simple-websocket")
12028 (synopsis "Simple WebSocket server and client for Python")
12029 (description "This package provides a simple @code{WebSocket} server and
12030client for Python.")
12031 (license license:expat)))
12032
12033(define-public python-siosocks
12034 (package
12035 (name "python-siosocks")
12036 (version "0.3.0")
12037 (source
12038 (origin
12039 (method git-fetch)
12040 (uri (git-reference
12041 (url "https://github.com/pohmelie/siosocks")
12042 (commit (string-append "v" version))))
12043 (file-name (git-file-name name version))
12044 (sha256
12045 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
12046 (build-system pyproject-build-system)
12047 (native-inputs
12048 (list python-pytest
12049 python-pytest-asyncio
12050 python-pytest-cov
12051 python-pytest-trio
12052 python-setuptools))
12053 (propagated-inputs (list python-trio))
12054 (home-page "https://github.com/pohmelie/siosocks")
12055 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
12056 (description
12057 "This package provides a Python module and framework for sans-io socks proxy
12058client/server with couple io backends.
12059
12060Features:
12061@itemize
12062@item Only TCP connect (no BIND, no UDP)
12063@item Both client and server
12064@item SOCKS versions: 4, 4a, 5
12065@item SOCKSv5 auth: no auth, username/password
12066@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
12067@item One-shot socks server (@code{python -m siosocks})
12068@end itemize")
12069 (license license:expat)))
12070
12071(define-public python-tiny-proxy
12072 (package
12073 (name "python-tiny-proxy")
12074 (version "0.2.1")
12075 (source
12076 (origin
12077 (method url-fetch)
12078 (uri (pypi-uri "tiny_proxy" version))
12079 (sha256
12080 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
12081 (build-system pyproject-build-system)
12082 ;; There are only a handful of tests and they require the as yet
12083 ;; unpackaged httpx_socks.
12084 (arguments (list #:tests? #false))
12085 (propagated-inputs (list python-anyio))
12086 (native-inputs
12087 (list python-httpx
12088 python-pytest
12089 python-setuptools
12090 python-wheel))
12091 (home-page "https://github.com/romis2012/tiny-proxy")
12092 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
12093 (description "This package provides a simple proxy server (SOCKS4(a),
12094SOCKS5(h), HTTP tunnel).")
12095 (license license:asl2.0)))
12096
12097(define-public python-azure-nspkg
12098 (package
12099 (name "python-azure-nspkg")
12100 (version "3.0.2")
12101 (source
12102 (origin
12103 (method url-fetch)
12104 (uri (pypi-uri "azure-nspkg" version ".zip"))
12105 (sha256
12106 (base32
12107 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
12108 (build-system pyproject-build-system)
12109 (arguments (list #:tests? #f)) ;no tests in package
12110 (native-inputs (list unzip python-setuptools))
12111 (home-page "https://github.com/Azure/azure-sdk-for-python")
12112 (synopsis "Azure namespace internals")
12113 (description
12114 "This package is an internal Azure namespace package.")
12115 (license license:expat)))
12116
12117(define-public python-azure-storage-nspkg
12118 (package
12119 (name "python-azure-storage-nspkg")
12120 (version "3.1.0")
12121 (source
12122 (origin
12123 (method url-fetch)
12124 (uri (pypi-uri "azure-storage-nspkg" version))
12125 (sha256
12126 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
12127 (build-system pyproject-build-system)
12128 (arguments
12129 (list #:tests? #f)) ;no tests in PyPI archive
12130 (native-inputs (list python-setuptools))
12131 (propagated-inputs (list python-azure-nspkg))
12132 (home-page "https://github.com/Azure/azure-storage-python")
12133 (synopsis "Microsoft Azure Storage Namespace package")
12134 (description
12135 "This project provides a client library in Python that makes it easy to
12136communicate with Microsoft Azure Storage services.")
12137 (license license:expat)))
12138
12139(define-public python-azure-common
12140 (package
12141 (name "python-azure-common")
12142 (version "1.1.28")
12143 (source
12144 (origin
12145 (method url-fetch)
12146 (uri (pypi-uri "azure-common" version ".zip"))
12147 (sha256
12148 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
12149 (build-system pyproject-build-system)
12150 (arguments
12151 (list #:tests? #f)) ;no tests in PyPI archive
12152 (propagated-inputs (list python-azure-nspkg))
12153 (native-inputs (list python-setuptools unzip))
12154 (home-page "https://github.com/Azure/azure-sdk-for-python")
12155 (synopsis "Microsoft Azure Client library for Python")
12156 (description "This package provides the Microsoft Azure Client library for
12157Python.")
12158 (license license:expat)))
12159
12160(define-public python-azure-core
12161 (package
12162 (name "python-azure-core")
12163 (version "1.32.0")
12164 (source
12165 (origin
12166 (method url-fetch)
12167 (uri (pypi-uri "azure_core" version))
12168 (sha256
12169 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
12170 (build-system pyproject-build-system)
12171 (arguments
12172 (list
12173 #:test-flags
12174 `(list ;; This fails because devtools_testutils doesn't exist.
12175 "--ignore=tests/test_connection_string_parsing.py"
12176 ;; These all need network access.
12177 "--ignore=samples"
12178 "--ignore=tests/async_tests/test_streaming_async.py"
12179 "--ignore=tests/test_streaming.py"
12180 "-m" "not asyncio and not live_test_only"
12181 "-k" ,(string-append
12182 "not test_decompress_plain_no_header"
12183 " and not test_compress_plain_no_header"
12184 " and not test_decompress_compressed_no_header"
12185 " and not test_requests_socket_timeout"))
12186 #:phases
12187 #~(modify-phases %standard-phases
12188 (add-before 'check 'add-test-pythonpath
12189 (lambda* (#:key tests? #:allow-other-keys)
12190 (when tests?
12191 (setenv "PYTHONPATH"
12192 (string-append
12193 (getcwd) "/tests/testserver_tests/coretestserver:"
12194 (getenv "GUIX_PYTHONPATH")))))))))
12195 (propagated-inputs
12196 (list python-aiohttp
12197 python-requests
12198 python-six
12199 python-typing-extensions))
12200 (native-inputs
12201 (list python-flask
12202 python-pytest-8
12203 python-pytest-aiohttp
12204 python-pytest-asyncio
12205 python-pytest-trio
12206 python-setuptools
12207 python-wheel))
12208 (home-page "https://github.com/Azure/azure-sdk-for-python")
12209 (synopsis "Microsoft Azure Core library for Python")
12210 (description "This package provides the Microsoft Azure Core library for
12211Python.")
12212 (license license:expat)))
12213
12214(define-public python-azure-storage-blob
12215 (package
12216 (name "python-azure-storage-blob")
12217 (version "12.27.0")
12218 (source
12219 (origin
12220 (method url-fetch)
12221 (uri (pypi-uri "azure_storage_blob" version))
12222 (sha256
12223 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
12224 (build-system pyproject-build-system)
12225 (arguments
12226 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12227 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12228 ;; it hard to package in Guix.
12229 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12230 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12231 (list #:tests? #f))
12232 (native-inputs
12233 (list python-setuptools))
12234 (propagated-inputs
12235 (list python-azure-core
12236 python-cryptography
12237 python-isodate
12238 python-typing-extensions))
12239 (home-page "https://github.com/Azure/azure-sdk-for-python/")
12240 (synopsis "Microsoft Azure Blob Storage client library for Python")
12241 (description "This package provides the Microsoft Azure Blob Storage
12242Client Library for Python.")
12243 (license license:expat)))
12244
12245(define-public python-azure-storage-file-datalake
12246 (package
12247 (name "python-azure-storage-file-datalake")
12248 (version "12.22.0")
12249 (source
12250 (origin
12251 (method url-fetch)
12252 (uri (pypi-uri "azure_storage_file_datalake" version))
12253 (sha256
12254 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
12255 (build-system pyproject-build-system)
12256 (arguments
12257 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
12258 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
12259 ;; it hard to package in Guix.
12260 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
12261 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
12262 (list #:tests? #f))
12263 (native-inputs
12264 (list python-setuptools))
12265 (propagated-inputs
12266 (list python-azure-core
12267 python-azure-storage-blob
12268 python-isodate
12269 python-typing-extensions))
12270 (home-page "https://github.com/Azure/azure-sdk-for-python")
12271 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
12272 (description
12273 "This package provides the Microsoft Azure File @code{DataLake} Storage
12274Client Library for Python.")
12275 (license license:expat)))
12276
12277(define-public python-google-auth
12278 (package
12279 (name "python-google-auth")
12280 (version "2.48.0")
12281 (source
12282 (origin
12283 (method url-fetch)
12284 (uri (pypi-uri "google_auth" version))
12285 (sha256
12286 (base32 "1kj1r3vp2jk2wv1mc0a5lpdnsivsqciah68ajhyql86k1imp0zjg"))))
12287 (build-system pyproject-build-system)
12288 (arguments
12289 (list
12290 #:test-flags
12291 ;; This one test uses crypto.sign with an outdated calling convention.
12292 '(list "--ignore=tests/transport/test__mtls_helper.py")))
12293 (propagated-inputs
12294 (list python-aiohttp
12295 python-cryptography
12296 python-pyasn1-modules
12297 python-requests
12298 python-rsa
12299 python-urllib3))
12300 (native-inputs
12301 (list nss-certs-for-test
12302 python-aiohttp
12303 python-aioresponses
12304 python-flask
12305 python-freezegun
12306 python-grpcio
12307 python-oauth2client
12308 python-packaging
12309 python-pyjwt
12310 python-pyopenssl
12311 python-pytest
12312 python-pytest-asyncio
12313 python-pytest-localserver
12314 python-pyu2f
12315 python-requests
12316 python-responses
12317 python-rsa
12318 python-setuptools
12319 python-urllib3))
12320 (home-page "https://github.com/googleapis/google-auth-library-python")
12321 (synopsis "Google Authentication Library")
12322 (description "This library simplifies using Google's various
12323server-to-server authentication mechanisms to access Google APIs.")
12324 (license license:asl2.0)))
12325
12326(define-public python-google-resumable-media
12327 (package
12328 (name "python-google-resumable-media")
12329 (version "2.8.0")
12330 (source
12331 (origin
12332 (method git-fetch)
12333 (uri (git-reference
12334 (url
12335 "https://github.com/googleapis/google-resumable-media-python")
12336 (commit (string-append "v" version))))
12337 (file-name (git-file-name name version))
12338 (sha256
12339 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
12340 (build-system pyproject-build-system)
12341 (arguments
12342 (list
12343 #:test-flags
12344 #~(list
12345 ;; XXX: Missing test_utils.retry.
12346 "--ignore-glob=tests*/system/"
12347 ;; XXX: md5_hash is not mock.sentinel.md5_hash
12348 "-k" (string-join
12349 (list "not test_brotli"
12350 "test_constructor"
12351 "test_decompress")
12352 " and not "))))
12353 (propagated-inputs (list python-google-crc32c))
12354 (native-inputs
12355 (list python-google-auth
12356 python-mock
12357 python-pytest
12358 python-pytest-asyncio
12359 python-setuptools
12360 python-test-utils))
12361 (home-page "https://github.com/googleapis/google-resumable-media-python")
12362 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
12363 (description "This package provides utilities for Google Media Downloads
12364and Resumable Uploads.")
12365 (license license:asl2.0)))
12366
12367(define-public python-googleapis-common-protos
12368 (package
12369 (name "python-googleapis-common-protos")
12370 (version "1.66.0")
12371 (source
12372 (origin
12373 (method git-fetch)
12374 (uri (git-reference
12375 (url "https://github.com/googleapis/python-api-common-protos")
12376 (commit (string-append "v" version))))
12377 (file-name (git-file-name name version))
12378 (sha256
12379 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
12380 (build-system pyproject-build-system)
12381 (propagated-inputs (list python-protobuf))
12382 (native-inputs (list python-pytest python-setuptools))
12383 (home-page "https://github.com/googleapis/python-api-common-protos")
12384 (synopsis "Common protobufs used in Google APIs")
12385 (description
12386 "This package contains Python classes generated from the common protos in
12387the @code{googleapis/api-common-protos} repository.")
12388 (license license:asl2.0)))
12389
12390(define-public python-google-api-core
12391 (package
12392 (name "python-google-api-core")
12393 (version "2.29.0")
12394 (source
12395 (origin
12396 (method git-fetch)
12397 (uri (git-reference
12398 (url "https://github.com/googleapis/python-api-core")
12399 (commit (string-append "v" version))))
12400 (file-name (git-file-name name version))
12401 (sha256
12402 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
12403 (build-system pyproject-build-system)
12404 (propagated-inputs
12405 (list python-google-auth
12406 python-googleapis-common-protos
12407 python-protobuf
12408 python-proto-plus
12409 python-requests))
12410 (native-inputs
12411 (list python-mock
12412 python-pytest
12413 python-pytest-asyncio
12414 python-pytest-mock
12415 python-setuptools))
12416 (home-page "https://github.com/googleapis/python-api-core")
12417 (synopsis "Google API client core library")
12418 (description
12419 "This library defines common helpers used by all Google API clients.")
12420 (license license:asl2.0)))
12421
12422(define-public python-google-cloud-core
12423 (package
12424 (name "python-google-cloud-core")
12425 (version "2.5.0")
12426 (source
12427 (origin
12428 (method git-fetch)
12429 (uri (git-reference
12430 (url "https://github.com/googleapis/python-cloud-core")
12431 (commit (string-append "v" version))))
12432 (file-name (git-file-name name version))
12433 (sha256
12434 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
12435 (build-system pyproject-build-system)
12436 (propagated-inputs (list python-google-api-core python-google-auth))
12437 (native-inputs
12438 (list python-grpcio
12439 python-grpcio-status
12440 python-pytest
12441 python-setuptools))
12442 (home-page "https://github.com/googleapis/python-cloud-core")
12443 (synopsis "Google Cloud API client core library")
12444 (description
12445 "This library defines common helpers (e.g. base @code{Client} classes)
12446used by all of the @code{google-cloud-*} packages.")
12447 (license license:asl2.0)))
12448
12449(define-public python-google-cloud-storage
12450 (package
12451 (name "python-google-cloud-storage")
12452 (version "2.19.0")
12453 (source
12454 (origin
12455 (method git-fetch)
12456 (uri (git-reference
12457 (url "https://github.com/googleapis/python-storage")
12458 (commit (string-append "v" version))))
12459 (file-name (git-file-name name version))
12460 (sha256
12461 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
12462 (build-system pyproject-build-system)
12463 (arguments
12464 (list
12465 #:test-flags
12466 #~(list
12467 ;; XXX: Missing test_utils.retry.
12468 "--ignore=tests/system/"
12469 ;; Needs docker.
12470 "--ignore=tests/conformance/"
12471 ;; XXX: Deprecations.
12472 "-k" (string-join
12473 (list "not test_set_api_request_attr"
12474 "test_create_bucket_w_custom_endpoint"
12475 "test_ctor_w_api_endpoint_override"
12476 "test_ctor_w_custom_endpoint_use_auth"
12477 "test_list_buckets_w_custom_endpoint")
12478 " and not ")
12479 "tests")))
12480 (native-inputs
12481 (list python-googleapis-common-protos
12482 python-mock
12483 python-pytest
12484 python-test-utils
12485 python-setuptools))
12486 (propagated-inputs
12487 (list python-google-api-core
12488 python-google-auth
12489 python-google-cloud-core
12490 python-google-resumable-media
12491 python-protobuf
12492 python-requests))
12493 (home-page "https://github.com/googleapis/python-storage")
12494 (synopsis "Google Cloud Storage API client library")
12495 (description
12496 "Google Cloud Storage allows you to store data on Google infrastructure,
12497and it can be used to distribute large data objects to users via direct
12498download. This package provides a Google Cloud Storage API client library for
12499Python.")
12500 (license license:asl2.0)))
12501
12502(define-public python-smart-open
12503 (package
12504 (name "python-smart-open")
12505 (version "7.3.0")
12506 (source
12507 (origin
12508 (method git-fetch) ;no tests in PyPI archive
12509 (uri (git-reference
12510 (url "https://github.com/piskvorky/smart_open")
12511 (commit (string-append "v" version))))
12512 (file-name (git-file-name name version))
12513 (sha256
12514 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
12515 (build-system pyproject-build-system)
12516 (arguments
12517 (list
12518 #:test-flags
12519 #~(list "--ignore=ci_helpers/"
12520 "--ignore=integration-tests/"
12521 ;; FIXME: Enable when guix/guix#1436 is resolved.
12522 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
12523 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
12524 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
12525 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
12526 "--ignore=tests/test_gcs.py")))
12527 (propagated-inputs
12528 (list python-azure-common
12529 python-azure-core
12530 python-azure-storage-blob
12531 python-boto3
12532 ;; python-google-cloud-storage ;see guix/guix#1436
12533 python-paramiko
12534 python-requests
12535 python-wrapt
12536 python-zstandard))
12537 (native-inputs
12538 (list python-numpy
12539 python-moto
12540 python-pytest
12541 python-pytest-rerunfailures
12542 python-responses
12543 python-setuptools
12544 python-setuptools-scm
12545 python-wheel))
12546 (home-page "https://github.com/piskvorky/smart_open")
12547 (synopsis "Utilities for streaming large files")
12548 (description
12549 "This package provides utilities for streaming large files (S3, HDFS,
12550GCS, Azure Blob Storage, gzip, bz2, etc.)")
12551 (license license:expat)))
12552
12553(define-public python-smart-open-6
12554 (package
12555 (inherit python-smart-open)
12556 (name "python-smart-open")
12557 (version "6.4.0")
12558 (source
12559 (origin
12560 (method git-fetch)
12561 (uri (git-reference
12562 (url "https://github.com/piskvorky/smart_open")
12563 (commit (string-append "v" version))))
12564 (file-name (git-file-name name version))
12565 (sha256
12566 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
12567 (arguments
12568 (list
12569 ;; XXX: Tests need some older native inputs, disable for now.
12570 #:tests? #f))))
12571
12572(define-public python-w3lib
12573 (package
12574 (name "python-w3lib")
12575 (version "2.3.1")
12576 (source
12577 (origin
12578 (method url-fetch)
12579 (uri (pypi-uri "w3lib" version))
12580 (sha256
12581 (base32
12582 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
12583 (build-system pyproject-build-system)
12584 (native-inputs
12585 (list python-pytest python-setuptools python-wheel))
12586 (home-page "https://github.com/scrapy/w3lib")
12587 (synopsis "Python library of web-related functions")
12588 (description
12589 "This is a Python library of web-related functions, such as: remove
12590comments, or tags from HTML snippets, extract base url from HTML snippets,
12591translate entities on HTML strings, among other things.")
12592 (license license:bsd-3)))
12593
12594(define-public python-webcolors
12595 (package
12596 (name "python-webcolors")
12597 (version "24.11.1")
12598 (source
12599 (origin
12600 (method url-fetch)
12601 (uri (pypi-uri "webcolors" version))
12602 (sha256
12603 (base32 "1xl0vn4xa03vjwx6fj19q9kgb94g65gvdf3p0ivsy0i2ydldgczc"))))
12604 (build-system pyproject-build-system)
12605 (arguments
12606 (list
12607 #:phases
12608 '(modify-phases %standard-phases
12609 (add-after 'unpack 'patch-pyproject
12610 (lambda _
12611 ;; XXX Our version of python-pdm-backend does not recognize
12612 ;; "dependency-groups", but is fine with the bogus
12613 ;; "tool.whatever".
12614 (substitute* "pyproject.toml"
12615 (("\\[dependency-groups\\]") "[tool.whatever]")))))))
12616 (native-inputs
12617 (list python-pdm-backend python-pytest))
12618 (home-page "https://github.com/ubernostrum/webcolors")
12619 (synopsis "HTML/CSS color definitions library")
12620 (description "@code{python-webcolors} is a module for working with
12621HTML/CSS color definitions. Normalizing and converting between the following
12622formats is supported.
12623@itemize
12624@item Specification-defined color names
12625@item Six-digit hexadecimal
12626@item Three-digit hexadecimal
12627@item Integer rgb() triplet
12628@item Percentage rgb() triplet
12629@end itemize
12630Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
12631can be handled by the @code{colorsys} module in the Python standard library.")
12632 (license license:bsd-3)))
12633
12634(define-public python-woob
12635 ;; TODO: woob requires backends which are currently installed on the fly in
12636 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
12637 ;; them in the store instead. Many modules are included in the modules
12638 ;; directory in the source tree, but it is unclear how to install them.
12639 ;; Many modules require extra dependencies though, so maybe they should be
12640 ;; packaged independently of woob itself.
12641 (package
12642 (name "python-woob")
12643 (version "3.7")
12644 (source
12645 (origin
12646 (method git-fetch)
12647 (uri (git-reference
12648 (url "https://gitlab.com/woob/woob.git")
12649 (commit version)))
12650 (file-name (git-file-name name version))
12651 (sha256
12652 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
12653 (build-system pyproject-build-system)
12654 (arguments
12655 (list
12656 #:test-flags
12657 ;; Deselect tests that require DNS lookup.
12658 #~(list
12659 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
12660 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
12661 #:phases
12662 #~(modify-phases %standard-phases
12663 (add-before 'build 'relax-requirements
12664 (lambda _
12665 (substitute* "pyproject.toml"
12666 ;; packaging ~= 23.0
12667 (("\"packaging .*\",")
12668 "")
12669 ;; rich~=13.0
12670 (("\"rich .*\",")
12671 "\"rich\",")))))))
12672 (native-inputs
12673 (list nss-certs-for-test
12674 python-pytest
12675 python-setuptools))
12676 (propagated-inputs
12677 (list python-babel
12678 python-colorama
12679 python-cssselect
12680 python-dateutil
12681 python-feedparser
12682 python-html2text
12683 python-lxml
12684 python-packaging
12685 python-pillow
12686 python-prettytable
12687 python-pycountry
12688 python-pyyaml
12689 python-requests
12690 python-responses
12691 python-rich
12692 python-termcolor
12693 python-unidecode))
12694 (home-page "https://woob.tech/")
12695 (synopsis "Woob, Web Outside Of Browsers")
12696 (description
12697 "Woob is a collection of applications able to interact with
12698websites, without requiring the user to open them in a browser. It also
12699provides well-defined APIs to talk to websites lacking one.")
12700 (license license:lgpl3+)))
12701
12702(define-public python-flask-combo-jsonapi
12703 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
12704 (revision "0"))
12705 (package
12706 (name "python-flask-combo-jsonapi")
12707 (version (git-version "1.1.0" revision commit))
12708 (source
12709 (origin
12710 (method git-fetch)
12711 (uri (git-reference
12712 (url "https://github.com/AdCombo/flask-combo-jsonapi")
12713 (commit commit)))
12714 (file-name (git-file-name name version))
12715 (sha256
12716 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
12717 (build-system pyproject-build-system)
12718 (arguments
12719 (list
12720 #:test-flags
12721 #~(list
12722 "-k"
12723 (string-join
12724 (list
12725 ;; XXX: This tests a feature that doesn't make sense when dropping
12726 ;; marshmallow < 3 support.
12727 "not test_compute_schema_propagate_context"
12728 ;; The following tests fail for unknown reasons (see:
12729 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
12730 "test_get_list_with_simple_filter_relationship_custom_qs_api"
12731 "test_get_list_with_simple_filter_relationship_error")
12732 " and not "))
12733 #:phases
12734 #~(modify-phases %standard-phases
12735 (add-after 'unpack 'loosen-requirements
12736 (lambda _
12737 ;; Don't pin specific versions of dependencies.
12738 (substitute* "requirements.txt"
12739 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
12740 (string-append dep "\n"))
12741 (("^marshmallow_jsonapi[=<>].*")
12742 "marshmallow_jsonapi_minfork\n"))
12743 ;; Drop support for marshmallow < 3.
12744 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
12745 "flask_combo_jsonapi/schema.py")
12746 (("from marshmallow\\.base import SchemaABC")
12747 "from marshmallow import Schema")
12748 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
12749 "if isinstance(related_schema_cls, Schema):"))
12750 (substitute* "tests/test_sqlalchemy_data_layer.py"
12751 (("default=None")
12752 "dump_default=None")
12753 (("missing=")
12754 "load_default=")))))))
12755 (propagated-inputs
12756 (list python-flask
12757 python-marshmallow
12758 python-marshmallow-jsonapi
12759 python-simplejson
12760 python-sqlalchemy
12761 python-apispec
12762 python-simplejson
12763 python-six))
12764 (native-inputs
12765 (list python-pytest python-setuptools))
12766 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
12767 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
12768 (description
12769 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
12770APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
12771specification.
12772
12773It tries to combine the power of Flask-Restless with the flexibility of
12774Flask-RESTful to quickly build APIs that fit the complexity of existing
12775real-life projects with legacy data and diverse storage providers.")
12776 (license license:expat))))
12777
12778(define-public python-mwparserfromhell
12779 (package
12780 (name "python-mwparserfromhell")
12781 (version "0.7.2")
12782 (source
12783 (origin
12784 (method git-fetch)
12785 (uri (git-reference
12786 (url "https://github.com/earwig/mwparserfromhell")
12787 (commit (string-append "v" version))))
12788 (file-name (git-file-name name version))
12789 (sha256
12790 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
12791 (build-system pyproject-build-system)
12792 (native-inputs (list python-pytest python-setuptools))
12793 (home-page "https://github.com/earwig/mwparserfromhell")
12794 (synopsis "Python parser for MediaWiki wikicode")
12795 (description
12796 "The MediaWiki Parser From Hell is a python library package that provides
12797a parser for MediaWiki.
12798
12799It exposes parses as normal string objects with additional methods giving
12800access to the special Wikicode features it contains (hyperlinks, tags,
12801templates…). The parser doesn't interpolate strings at all, it remains at a
12802purely formal level.
12803
12804Full documentation may be found at
12805@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
12806 (license license:expat)))
12807
12808(define-public python-tweepy
12809 (package
12810 (name "python-tweepy")
12811 (version "4.16.0")
12812 (source
12813 (origin
12814 (method git-fetch)
12815 (uri
12816 (git-reference
12817 (url "https://github.com/tweepy/tweepy")
12818 (commit (string-append "v" version))))
12819 (file-name (git-file-name name version))
12820 (sha256
12821 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
12822 (build-system pyproject-build-system)
12823 (arguments
12824 ;; tests: 149 passed, 3 skipped, 1 warning
12825 (list #:test-backend #~'unittest
12826 #:test-flags #~(list "discover" "tests")))
12827 (native-inputs
12828 (list nss-certs-for-test
12829 python-flit-core
12830 python-urllib3-1.26
12831 python-vcrpy))
12832 (propagated-inputs
12833 (list python-aiohttp
12834 python-async-lru
12835 python-oauthlib
12836 python-requests
12837 python-requests-oauthlib))
12838 (home-page "https://www.tweepy.org/")
12839 (synopsis "Twitter library for Python")
12840 (description
12841 "This package provides @code{Tweepy}, an easy-to-use Python library for
12842accessing the Twitter API.")
12843 (license license:expat)))
12844
12845(define-public python-quart
12846 (package
12847 (name "python-quart")
12848 (version "0.19.9")
12849 (source
12850 (origin
12851 (method git-fetch) ; no tests in PyPI release
12852 (uri (git-reference
12853 (url "https://github.com/pallets/quart")
12854 (commit version)))
12855 (file-name (git-file-name name version))
12856 (sha256
12857 (base32 "1h5ifv8g9dc9m07vj4v7dfalam83v38545d845vvgys1gan1pscd"))))
12858 (build-system pyproject-build-system)
12859 (arguments
12860 (list
12861 #:phases
12862 #~(modify-phases %standard-phases
12863 (add-after 'unpack 'remove-coverage-pytest-options
12864 (lambda _
12865 (substitute* "pyproject.toml"
12866 (("--no-cov-on-fail") "")))))))
12867 (native-inputs
12868 (list python-poetry-core
12869 python-pytest
12870 python-pytest-asyncio))
12871 (propagated-inputs
12872 (list hypercorn
12873 python-aiofiles
12874 python-blinker
12875 python-click
12876 python-dotenv
12877 python-flask
12878 python-itsdangerous
12879 python-jinja2
12880 python-markupsafe
12881 python-toml
12882 python-werkzeug))
12883 (home-page "https://gitlab.com/pgjones/quart/")
12884 (synopsis "Python ASGI web microframework with the same API as Flask")
12885 (description
12886 "This package provides a Python ASGI web microframework with the same API
12887as Flask.")
12888 (license license:expat)))
12889
12890(define-public python-quart-trio
12891 (package
12892 (name "python-quart-trio")
12893 (version "0.12.0")
12894 (source
12895 (origin
12896 (method url-fetch)
12897 (uri (pypi-uri "quart_trio" version))
12898 (sha256
12899 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
12900 (build-system pyproject-build-system)
12901 (arguments
12902 (list
12903 #:phases
12904 #~(modify-phases %standard-phases
12905 (add-after 'unpack 'remove-coverage-pytest-options
12906 (lambda _
12907 (substitute* "pyproject.toml"
12908 (("--no-cov-on-fail") "")))))))
12909 (native-inputs
12910 (list python-pdm-backend
12911 python-pytest
12912 python-pytest-sugar
12913 python-pytest-trio))
12914 (propagated-inputs
12915 (list hypercorn
12916 python-quart
12917 python-trio))
12918 (home-page "https://github.com/pgjones/quart-trio")
12919 (synopsis "Extension for Quart to support the Trio event loop")
12920 (description
12921 "This package provides a Quart extension to provide Trio support. This
12922is an alternative to using the asyncio event loop present in the Python
12923standard library and supported by default in Quart.")
12924 (license license:expat)))
12925
12926(define-public python-ajsonrpc
12927 (package
12928 (name "python-ajsonrpc")
12929 (version "1.2.0")
12930 (source
12931 (origin
12932 (method git-fetch)
12933 (uri (git-reference
12934 (url "https://github.com/pavlov99/ajsonrpc")
12935 (commit version)))
12936 (file-name (git-file-name name version))
12937 (sha256
12938 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
12939 (build-system pyproject-build-system)
12940 (arguments
12941 (list
12942 #:phases
12943 #~(modify-phases %standard-phases
12944 (add-after 'unpack 'set-version
12945 (lambda _
12946 (substitute* "ajsonrpc/__init__.py"
12947 (("^__version__ = .*")
12948 (string-append "__version__ = \"" #$version "\"\n"))))))))
12949 (native-inputs
12950 (list python-pytest
12951 python-setuptools))
12952 (propagated-inputs
12953 (list python-quart
12954 python-sanic
12955 python-tornado))
12956 (home-page "https://github.com/pavlov99/ajsonrpc")
12957 (synopsis "Async JSON-RPC 2.0 protocol and server")
12958 (description
12959 "This package provides a Python JSON-RPC 2.0 protocol and server powered
12960by asyncio.")
12961 (license license:expat)))
12962
12963(define-public python-protego
12964 (package
12965 (name "python-protego")
12966 (version "0.4.0")
12967 (source
12968 (origin
12969 (method url-fetch)
12970 (uri (pypi-uri "protego" version))
12971 (sha256
12972 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
12973 (build-system pyproject-build-system)
12974 (native-inputs (list python-pytest python-setuptools python-wheel))
12975 (home-page "https://github.com/scrapy/protego")
12976 (synopsis "Python robots.txt parser with support for modern conventions")
12977 (description "Protego is a pure-Python @file{robots.txt} parser with support
12978for modern conventions.")
12979 (license license:bsd-3)))
12980
12981(define-public python-parsel
12982 (package
12983 (name "python-parsel")
12984 (version "1.10.0")
12985 (source
12986 (origin
12987 (method url-fetch)
12988 (uri (pypi-uri "parsel" version))
12989 (sha256
12990 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
12991 (build-system pyproject-build-system)
12992 (propagated-inputs
12993 (list python-cssselect
12994 python-jmespath
12995 python-lxml
12996 python-typing-extensions
12997 python-w3lib))
12998 (native-inputs
12999 (list python-psutil python-pytest python-setuptools python-wheel))
13000 (home-page "https://github.com/scrapy/parsel")
13001 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
13002 (description "Parsel is a library to extract and remove data from
13003HTML and XML using XPath and CSS selectors, optionally combined with
13004regular expressions.")
13005 (license license:bsd-3)))
13006
13007(define-public python-scrapy
13008 (package
13009 (name "python-scrapy")
13010 (version "2.13.3")
13011 (source
13012 (origin
13013 (method url-fetch)
13014 (uri (pypi-uri "scrapy" version))
13015 (sha256
13016 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
13017 (build-system pyproject-build-system)
13018 (arguments
13019 (list #:test-flags
13020 #~(list "--numprocesses" (number->string (parallel-job-count))
13021 "-k" (string-join
13022 ;; ConnectionRefusedError: [Errno 111] Connection
13023 ;; refused
13024 (list "not test_append"
13025 "test_append_active_mode"
13026 "test_overwrite"
13027 "test_overwrite_active_mode"
13028 "test_persist"
13029 ;; AssertionError
13030 "test_start_deprecated_super")
13031 " and not ")
13032 ;; Skip documentation testing.
13033 "--ignore=docs")
13034 #:phases
13035 #~(modify-phases %standard-phases
13036 (add-before 'check 'prepare-test-environment
13037 (lambda _
13038 (setenv "HOME" "/tmp"))))))
13039 (propagated-inputs
13040 (list python-cryptography
13041 python-cssselect
13042 python-defusedxml
13043 python-itemadapter
13044 python-itemloaders
13045 python-lxml
13046 python-packaging
13047 python-parsel
13048 python-protego
13049 python-pydispatcher
13050 python-pyopenssl
13051 python-pypydispatcher
13052 python-queuelib
13053 python-service-identity
13054 python-tldextract
13055 python-twisted
13056 python-w3lib
13057 python-zope-interface))
13058 (native-inputs
13059 (list nss-certs-for-test
13060 python-hatchling
13061 python-pexpect
13062 python-pytest
13063 python-pytest-xdist
13064 python-setuptools
13065 python-sybil
13066 python-testfixtures))
13067 (home-page "https://scrapy.org")
13068 (synopsis "High-level Web crawling and Web scraping framework")
13069 (description "Scrapy is a fast high-level web crawling and web
13070scraping framework, used to crawl websites and extract structured data
13071from their pages. It can be used for a wide range of purposes, from data
13072mining to monitoring and automated testing.")
13073 (license license:bsd-3)))
13074
13075(define-public python-jstyleson
13076 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
13077 (revision "0"))
13078 (package
13079 (name "python-jstyleson")
13080 (version (git-version "0.0.2" revision commit))
13081 (source
13082 (origin
13083 (method git-fetch)
13084 (uri (git-reference
13085 (url "https://github.com/linjackson78/jstyleson")
13086 (commit commit)))
13087 (file-name (git-file-name name version))
13088 (sha256
13089 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
13090 (build-system pyproject-build-system)
13091 (native-inputs (list python-pytest python-setuptools))
13092 (home-page "https://github.com/linjackson78/jstyleson")
13093 (synopsis "JSON parser supporting js-style comments")
13094 (description
13095 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
13096standard Python @code{json} library, it understands js-style comments.
13097Trailing comma is also supported.")
13098 (license license:expat))))
13099
13100(define-public python-html-text
13101 (package
13102 (name "python-html-text")
13103 (version "0.7.0")
13104 (source
13105 (origin
13106 (method url-fetch)
13107 (uri (pypi-uri "html_text" version))
13108 (sha256
13109 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
13110 (build-system pyproject-build-system)
13111 (native-inputs
13112 (list python-pytest
13113 python-setuptools
13114 python-wheel))
13115 (propagated-inputs
13116 (list python-lxml
13117 python-lxml-html-clean))
13118 (home-page "https://github.com/TeamHG-Memex/html-text")
13119 (synopsis "Extract text from HTML")
13120 (description "HTML to Text is a Python library for extract text from HTML.
13121Contrary to other solution such as LXML or Beautiful Soup, the text extracted
13122with @code{html_text} does not contain elements such as JavaScript or inline
13123styles not normally visible to users. It also normalizes white space
13124characters in a smarter, more visually pleasing style.")
13125 (license license:expat)))
13126
13127(define-public python-mf2py
13128 (package
13129 (name "python-mf2py")
13130 (version "2.0.1")
13131 (source
13132 (origin
13133 (method git-fetch)
13134 (uri (git-reference
13135 (url "https://github.com/microformats/mf2py")
13136 (commit (string-append "v" version))))
13137 (file-name (git-file-name name version))
13138 (sha256
13139 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
13140 (build-system pyproject-build-system)
13141 (native-inputs (list python-mock python-poetry-core python-pytest))
13142 (propagated-inputs
13143 (list python-beautifulsoup4 python-html5lib python-requests))
13144 (home-page "https://github.com/microformats/mf2py")
13145 (synopsis "Python Microformats2 parser")
13146 (description
13147 "This Python library provides a Microformats2 parser implementing the
13148full Microformats2 (mf2) specification, including backward compatibility with
13149Microformats1 (mf1).")
13150 (license license:expat)))
13151
13152(define-public python-extruct
13153 (package
13154 (name "python-extruct")
13155 (version "0.18.0")
13156 (source (origin
13157 (method git-fetch) ;for tests
13158 (uri (git-reference
13159 (url "https://github.com/scrapinghub/extruct")
13160 (commit (string-append "v" version))))
13161 (file-name (git-file-name name version))
13162 (sha256
13163 (base32
13164 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
13165 (build-system pyproject-build-system)
13166 (arguments
13167 (list
13168 #:test-flags
13169 ;; 67 passed, 3 deselected
13170 ;; XXX: 3 tests fail with errors in assertion.
13171 #~(list "-k" (string-append
13172 "not test_microformat"
13173 " and not test_microformat"
13174 " and not test_umicroformat"))))
13175 (native-inputs
13176 (list python-pytest
13177 python-setuptools
13178 python-wheel))
13179 (propagated-inputs
13180 (list python-html-text
13181 python-jstyleson
13182 python-lxml
13183 python-mf2py
13184 python-pyrdfa3
13185 python-rdflib
13186 python-w3lib))
13187 (home-page "https://github.com/scrapinghub/extruct")
13188 (synopsis "Extract embedded metadata from HTML markup")
13189 (description "@code{extruct} is a Python library for extracting embedded
13190metadata from HTML markup. Currently, extruct supports:
13191@itemize
13192@item W3C's HTML Microdata
13193@item embedded JSON-LD
13194@item Microformat via mf2py
13195@item Facebook's Open Graph
13196@item (experimental) RDFa via rdflib
13197@item Dublin Core Metadata (DC-HTML-2003)
13198@end itemize")
13199 (license license:bsd-3)))
13200
13201(define-public python-wadllib
13202 (package
13203 (name "python-wadllib")
13204 (version "2.0.0")
13205 (source
13206 (origin
13207 (method url-fetch)
13208 (uri (pypi-uri "wadllib" version))
13209 (sha256
13210 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
13211 (build-system pyproject-build-system)
13212 (arguments
13213 (list
13214 ;; XXX: Doctests are currently failing.
13215 #:tests? #f
13216 #:phases
13217 #~(modify-phases %standard-phases
13218 (replace 'check
13219 (lambda* (#:key tests? #:allow-other-keys)
13220 (if tests?
13221 (invoke "zope-testrunner" "--test-path=src")
13222 (format #t "test suite not run~%")))))))
13223 (native-inputs
13224 (list python-multipart python-setuptools python-zope-testrunner))
13225 (propagated-inputs (list python-lazr-uri))
13226 (home-page "https://launchpad.net/wadllib")
13227 (synopsis "Web Application Description Language (WADL) navigation library")
13228 (description "The @code{wadllib} Python library allows navigating HTTP
13229resources using Web Application Description Language (WADL) files as guides.")
13230 (license license:lgpl3)))
13231
13232(define-public python-zeep
13233 (package
13234 (name "python-zeep")
13235 (version "4.3.1")
13236 (source
13237 (origin
13238 (method url-fetch)
13239 (uri (pypi-uri "zeep" version))
13240 (sha256
13241 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
13242 (build-system pyproject-build-system)
13243 (arguments
13244 (list
13245 #:phases
13246 '(modify-phases %standard-phases
13247 (add-after 'unpack 'compatibility
13248 (lambda _
13249 ;; Relax requests-file requirement.
13250 (substitute* "pyproject.toml"
13251 (("\"requests-file.*\",")
13252 "\"requests-file\","))
13253 ;; httpx removed the "proxies" keyword. It's now either "mounts"
13254 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
13255 (substitute* "src/zeep/transports.py"
13256 (("proxies=") "proxy="))))
13257 ;; One test requires write access
13258 (add-before 'check 'set-HOME
13259 (lambda _ (setenv "HOME" (getcwd)))))))
13260 (propagated-inputs
13261 (list python-attrs
13262 python-isodate
13263 python-lxml
13264 python-platformdirs
13265 python-pytz
13266 python-requests
13267 python-requests-file
13268 python-requests-toolbelt))
13269 (native-inputs
13270 (list nss-certs-for-test
13271 python-freezegun
13272 python-pretend
13273 python-pytest
13274 python-pytest-asyncio
13275 python-pytest-cov
13276 python-pytest-httpx
13277 python-requests-mock
13278 python-setuptools
13279 python-wheel))
13280 (home-page "https://docs.python-zeep.org/en/stable/")
13281 (synopsis "Python SOAP client based on lxml / requests")
13282 (description "Zeep is a Python SOAP client. Highlights:
13283
13284@itemize
13285@item Build on top of @code{lxml} and @code{requests}.
13286@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
13287@item Support for WS-Addressing headers.
13288@item Support for WSSE (UserNameToken / x.509 signing).
13289@item Support for @code{asyncio} via @code{httpx}.
13290@item Experimental support for XOP messages.
13291@end itemize")
13292 (license license:expat)))
13293
13294(define-public python-http-client
13295 (package
13296 (name "python-http-client")
13297 (version "3.3.7")
13298 (source
13299 (origin
13300 (method git-fetch)
13301 (uri (git-reference
13302 (url "https://github.com/sendgrid/python-http-client")
13303 (commit version)))
13304 (file-name (git-file-name name version))
13305 (sha256
13306 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
13307 (build-system pyproject-build-system)
13308 (arguments
13309 (list
13310 #:test-backend #~'unittest
13311 #:phases
13312 #~(modify-phases %standard-phases
13313 (add-after 'unpack 'fix-tests
13314 (lambda _
13315 ;; The test expects the copyright to be updated each year.
13316 (substitute* "tests/test_daterange.py"
13317 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
13318 (native-inputs
13319 (list python-setuptools))
13320 (home-page "https://github.com/sendgrid/python-http-client")
13321 (synopsis "HTTP REST client for Python")
13322 (description
13323 "This package provides access to any RESTful or RESTful-like API.")
13324 (license license:expat)))
13325
13326(define-public python-sendgrid
13327 (package
13328 (name "python-sendgrid")
13329 (version "6.9.7")
13330 (source
13331 (origin
13332 (method git-fetch)
13333 (uri (git-reference
13334 (url "https://github.com/sendgrid/sendgrid-python")
13335 (commit version)))
13336 (file-name (git-file-name name version))
13337 (sha256
13338 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
13339 (build-system pyproject-build-system)
13340 (arguments
13341 (list
13342 #:test-flags
13343 #~(list "--ignore=test/integ"
13344 ;; Network access is required.
13345 "--ignore=live_test.py")))
13346 (native-inputs
13347 (list python-pytest
13348 python-setuptools))
13349 (propagated-inputs
13350 (list python-cryptography
13351 python-http-client
13352 python-flask
13353 python-pyyaml
13354 python-six ;hard dependency
13355 python-starkbank-ecdsa
13356 python-werkzeug))
13357 (home-page "https://github.com/sendgrid/sendgrid-python/")
13358 (synopsis "SendGrid API library for Python")
13359 (description
13360 "The @code{sendgrid} Python library allows access to the
13361SendGrid Web API v3. Version 3+ of the library provides full support for all
13362SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
13363 (license license:expat)))
13364
13365(define-public python-sse-starlette
13366 (package
13367 (name "python-sse-starlette")
13368 (version "3.1.2")
13369 (source
13370 (origin
13371 (method git-fetch)
13372 (uri (git-reference
13373 (url "https://github.com/sysid/sse-starlette")
13374 (commit (string-append "v" version))))
13375 (file-name (git-file-name name version))
13376 (sha256
13377 (base32 "0cs4218jc8fa9x362vdigdpz2nn1l4qav9yizj3psklvwiq2z1as"))))
13378 (build-system pyproject-build-system)
13379 (arguments
13380 (list
13381 #:test-flags
13382 #~(list
13383 ;; XXX: Server fails to start.
13384 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
13385 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
13386 ;; XXX: Missing test dependency.
13387 "--ignore=tests/integration/test_multiple_consumers.py")
13388 #:phases
13389 #~(modify-phases %standard-phases
13390 (add-after 'unpack 'relax-requirements
13391 (lambda _
13392 (substitute* "pyproject.toml"
13393 (("\"anyio>=.*\"")
13394 "\"anyio\"")))))))
13395 (propagated-inputs (list python-anyio python-starlette))
13396 (native-inputs
13397 (list python-asgi-lifespan
13398 python-async-timeout
13399 python-httpx
13400 python-portend
13401 python-pytest
13402 python-pytest-asyncio
13403 python-psutil
13404 python-setuptools
13405 python-tenacity
13406 python-uvicorn))
13407 (home-page "https://github.com/sysid/sse-starlette")
13408 (synopsis "SSE plugin for Starlette")
13409 (description
13410 "This package provides SSE plugin for Starlette.")
13411 (license license:bsd-3)))
13412
13413(define-public python-sseclient-py
13414 (package
13415 (name "python-sseclient-py")
13416 (version "1.9.0")
13417 (source
13418 (origin
13419 (method git-fetch)
13420 (uri (git-reference
13421 (url "https://github.com/mpetazzoni/sseclient")
13422 (commit (string-append "sseclient-py-" version))))
13423 (file-name (git-file-name name version))
13424 (sha256
13425 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
13426 (build-system pyproject-build-system)
13427 (native-inputs (list python-hatchling python-pytest))
13428 (arguments
13429 (list
13430 #:test-backend #~'unittest
13431 #:test-flags #~'("discover" "--verbose" "tests")))
13432 (home-page "https://github.com/mpetazzoni/sseclient")
13433 (synopsis "Pure-Python Server Side Events (SSE) client")
13434 (description
13435 "This package provides a Python client for SSE event sources that
13436seamlessly integrates with @code{urllib3} and @code{requests}.")
13437 (license license:asl2.0)))
13438
13439(define-public python-starlette
13440 (package
13441 (name "python-starlette")
13442 (version "0.49.1")
13443 (source (origin
13444 (method git-fetch)
13445 (uri (git-reference
13446 (url "https://github.com/encode/starlette")
13447 (commit version)))
13448 (file-name (git-file-name name version))
13449 (sha256
13450 (base32
13451 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
13452 (build-system pyproject-build-system)
13453 (propagated-inputs (list python-anyio
13454 python-typing-extensions
13455 ;; [all] extra dependencies:
13456 python-itsdangerous
13457 python-jinja2
13458 python-multipart
13459 python-pyyaml
13460 python-requests))
13461 (native-inputs (list python-hatchling
13462 python-httpx
13463 python-pytest
13464 python-typing-extensions))
13465 (home-page "https://github.com/encode/starlette")
13466 (synopsis "Little ASGI library")
13467 (description
13468 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
13469Interface) framework/toolkit for building async web services in Python.")
13470 (license license:bsd-3)))
13471
13472(define-public python-starsessions
13473 (package
13474 (name "python-starsessions")
13475 (version "1.3.0")
13476 (source (origin
13477 (method git-fetch)
13478 (uri (git-reference
13479 (url "https://github.com/alex-oleshkevich/starsessions")
13480 (commit (string-append "v" version))))
13481 (file-name (git-file-name name version))
13482 (sha256
13483 (base32
13484 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
13485 (build-system pyproject-build-system)
13486 (arguments
13487 (list
13488 #:test-flags
13489 ;; These tests require a running redis server
13490 '(list "--ignore=tests/backends/test_redis.py"
13491 ;; XXX: this failure indicates a real compatibility problem, but
13492 ;; it seems restricted to the tests only.
13493 ;; AttributeError: 'Cookies' object has no attribute
13494 ;; 'clear_session_cookies'
13495 "-k"
13496 (string-append "not test_session_clears_on_tab_close"
13497 ;; This fails because an error is not raised.
13498 " and not test_session_wants_secret_key"))
13499 #:phases
13500 '(modify-phases %standard-phases
13501 (add-after 'unpack 'compatibilitiy
13502 (lambda _
13503 ;; aioredis has been renamed
13504 (substitute* "starsessions/backends/redis.py"
13505 (("aioredis") "redis")))))))
13506 (propagated-inputs
13507 (list python-redis
13508 python-itsdangerous
13509 python-starlette))
13510 (native-inputs
13511 (list python-httpx
13512 python-poetry-core
13513 python-pytest
13514 python-pytest-asyncio
13515 python-requests))
13516 (home-page "https://github.com/alex-oleshkevich/starsessions")
13517 (synopsis "Pluggable session support for Starlette and FastAPI")
13518 (description
13519 "This package adds pluggable session backends and ships default
13520@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
13521and FastAPI.")
13522 (license license:expat)))
13523
13524(define-public python-whereismyip
13525 (package
13526 (name "python-whereismyip")
13527 (version "0.1.0")
13528 (source
13529 (origin
13530 (method url-fetch)
13531 (uri (pypi-uri "whereismyip" version))
13532 (sha256
13533 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
13534 (build-system pyproject-build-system)
13535 (arguments (list #:tests? #false)) ; There are no tests.
13536 (native-inputs (list python-setuptools))
13537 (home-page "https://pypi.org/project/whereismyip/")
13538 (synopsis "Queries multiple geolocation services until one succeeds")
13539 (description
13540 "This package provides a simple Python library that queries multiple geolocation
13541services until one succeeds.")
13542 (license license:gpl3)))
13543
13544(define-public python-whitenoise
13545 (package
13546 (name "python-whitenoise")
13547 (version "6.9.0")
13548 (source (origin
13549 (method git-fetch) ; PyPI missing test fails
13550 (uri (git-reference
13551 (url "https://github.com/evansd/whitenoise")
13552 (commit version)))
13553 (file-name (git-file-name name version))
13554 (sha256
13555 (base32
13556 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
13557 (build-system pyproject-build-system)
13558 (arguments
13559 (list
13560 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
13561 (native-inputs (list python-brotli
13562 python-django
13563 python-requests
13564 python-pytest
13565 python-setuptools
13566 python-wheel))
13567 (home-page "https://github.com/evansd/whitenoise")
13568 (synopsis "Static file serving for WSGI applications")
13569 (description
13570 "WhiteNoise allows your web app to serve its own static files, making it
13571a self-contained unit that can be deployed anywhere without relying on nginx,
13572Amazon S3 or any other external service.")
13573 (license license:expat)))
13574
13575(define-public python-suds
13576 (package
13577 (name "python-suds")
13578 (version "1.2.0")
13579 (source
13580 (origin
13581 (method url-fetch)
13582 (uri (pypi-uri "suds" version))
13583 (sha256
13584 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
13585 (build-system pyproject-build-system)
13586 (arguments
13587 (list #:phases
13588 #~(modify-phases %standard-phases
13589 ;; XXX: chirp expects suds instead of suds_community
13590 (add-after 'install 'add-custom-dist-info
13591 (lambda _
13592 (for-each
13593 (lambda (dir)
13594 (with-directory-excursion (dirname dir)
13595 (symlink
13596 (basename dir)
13597 (string-append "suds-" #$version ".dist-info"))))
13598 (find-files #$output
13599 (lambda (file stat)
13600 (string-suffix? ".dist-info" file))
13601 #:directories? #t)))))))
13602 (native-inputs
13603 (list python-pytest
13604 python-setuptools
13605 python-wheel))
13606 (home-page "https://github.com/suds-community/suds")
13607 (synopsis "Lightweight SOAP python client for consuming Web Services")
13608 (description
13609 "Suds is a lightweight SOAP-based web service client for Python.")
13610 (license license:lgpl3+)))
13611
13612(define-public python-fastapi
13613 (package
13614 (name "python-fastapi")
13615 (version "0.128.0")
13616 (source
13617 (origin
13618 (method url-fetch)
13619 (uri (pypi-uri "fastapi" version))
13620 (sha256
13621 (base32 "0nk4ybvzv3bcgv5plbg3infykp19p1wryhpy1zk6n2pirvhpkh8w"))))
13622 (build-system pyproject-build-system)
13623 (arguments
13624 (list
13625 ;; tests: 1126 passed, 12 skipped, 2 deselected
13626 #:test-flags
13627 #~(list
13628 ;; cannot import name 'StaticPool' from 'sqlalchemy'
13629 "--ignore=tests/test_tutorial/"
13630 ;; Some snapshots have incorrect values.
13631 "--deselect=tests/test_schema_compat_pydantic_v2.py::test_openapi_schema"
13632 ;; Argument() missing 1 required positional argument: 'default'
13633 "--ignore=tests/test_fastapi_cli.py")))
13634 (native-inputs
13635 (list python-anyio
13636 python-dirty-equals
13637 python-flask
13638 python-inline-snapshot
13639 python-pdm-backend
13640 ;; python-pwdlib
13641 python-pyjwt
13642 python-pytest
13643 python-sqlalchemy
13644 ;; python-sqlmodel
13645 python-types-orjson
13646 python-types-ujson))
13647 (propagated-inputs
13648 (list python-starlette
13649 python-pydantic
13650 python-typing-extensions
13651 python-annotated-doc
13652 ;; [optional]
13653 python-email-validator
13654 python-fastapi-cli
13655 python-httpx
13656 python-itsdangerous
13657 python-jinja2
13658 python-multipart
13659 python-orjson
13660 python-pydantic-extra-types
13661 python-pydantic-settings
13662 python-pyyaml
13663 python-ujson
13664 python-uvicorn))
13665 (home-page "https://github.com/tiangolo/fastapi")
13666 (synopsis "Web framework based on type hints")
13667 (description "FastAPI provides a web API framework based on pydantic and
13668starlette.")
13669 (license license:expat)))
13670
13671(define-public python-fastapi-csrf-protect
13672 (package
13673 (name "python-fastapi-csrf-protect")
13674 (version "0.3.3")
13675 (source (origin
13676 (method git-fetch)
13677 (uri (git-reference
13678 (url "https://github.com/aekasitt/fastapi-csrf-protect")
13679 (commit (string-append "v" version))))
13680 (file-name (git-file-name name version))
13681 (sha256
13682 (base32
13683 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
13684 (build-system pyproject-build-system)
13685 (propagated-inputs
13686 (list python-fastapi python-itsdangerous
13687 python-pydantic))
13688 (native-inputs
13689 (list python-poetry-core
13690 python-pytest))
13691 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
13692 (synopsis "Cross-Site Request Forgery (XSRF) protection")
13693 (description
13694 "This package provides a stateless implementation of @dfn{Cross-Site
13695Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
13696pattern.")
13697 (license license:expat)))
13698
13699(define-public python-fastapi-pagination-minimal
13700 (package
13701 (name "python-fastapi-pagination-minimal")
13702 (version "0.15.6")
13703 (source (origin
13704 (method git-fetch)
13705 (uri (git-reference
13706 (url "https://github.com/uriyyo/fastapi-pagination")
13707 (commit version)))
13708 (file-name (git-file-name name version))
13709 (sha256
13710 (base32
13711 "1ndazaqi1na0lj6fi42d7mi9lmpxdak0wq0pd97fb3b23ml8rlg6"))))
13712 (build-system pyproject-build-system)
13713 ;; We run the tests in python-fastapi-pagination only.
13714 (arguments (list #:tests? #false))
13715 ;; These are the only required dependencies,
13716 ;; please add all optional dependencies to the
13717 ;; full python-fastapi-pagination below.
13718 (propagated-inputs (list python-fastapi python-pydantic))
13719 (native-inputs (list python-hatchling))
13720 (home-page "https://github.com/uriyyo/fastapi-pagination")
13721 (synopsis "FastAPI pagination library")
13722 (description "@code{fastapi-pagination} is a Python library designed to
13723simplify pagination in FastAPI applications. It provides a set of utility
13724functions and data models to help you paginate your database queries and
13725return paginated responses to your clients.")
13726 (license license:expat)))
13727
13728(define-public python-fastapi-pagination
13729 (package
13730 (inherit python-fastapi-pagination-minimal)
13731 (name "python-fastapi-pagination")
13732 (arguments
13733 (list
13734 #:test-flags
13735 #~(list "--asyncio-mode=auto"
13736 "--ignore=tests/ext"
13737 ;; Netwok access is required.
13738 "-k" (string-join
13739 (list "not test_optional_params[postgres-default]"
13740 "test_optional_params[postgres-limit-offset]"
13741 "test_optional_params[sqlite-default]"
13742 "test_optional_params[sqlite-limit-offset]")
13743 " and not "))
13744 #:phases
13745 '(modify-phases %standard-phases
13746 (add-after 'unpack 'patch-tests
13747 (lambda _
13748 ;; We don't have a package for python-cassandra or motor, but we
13749 ;; also don't need them as we only run the unit tests anyway.
13750 (substitute* "tests/conftest.py"
13751 (("from cassandra.*") "")
13752 (("from motor.*") "")))))))
13753 (propagated-inputs
13754 (modify-inputs (package-propagated-inputs
13755 python-fastapi-pagination-minimal)
13756 (prepend python-asyncpg
13757 python-databases
13758 python-django
13759 python-fastapi
13760 python-pydantic
13761 python-sqlalchemy
13762 (package
13763 (inherit python-tortoise-orm)
13764 (arguments
13765 (substitute-keyword-arguments (package-arguments
13766 python-tortoise-orm)
13767 ((#:phases phases '%standard-phases)
13768 `(modify-phases ,phases
13769 (delete 'sanity-check)))))
13770 (propagated-inputs
13771 (modify-inputs propagated-inputs
13772 (replace "python-aiosqlite" python-aiosqlite)))))))
13773 (native-inputs
13774 (list python-aiosqlite
13775 python-asgi-lifespan
13776 python-asyncpg
13777 python-dirty-equals
13778 python-faker
13779 python-hatchling
13780 python-httpx
13781 python-pytest
13782 python-pytest-asyncio
13783 python-sqlalchemy
13784 python-typing-extensions))
13785 (description
13786 (string-append (package-description python-fastapi-pagination-minimal)
13787 "
13788
13789This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
13790all available optional dependencies supported by mainline
13791@code{fastapi-pagination}."))))
13792
13793(define-public python-fastapi-cli
13794 (package
13795 (name "python-fastapi-cli")
13796 (version "0.0.7")
13797 (source
13798 (origin
13799 (method url-fetch)
13800 (uri (pypi-uri "fastapi_cli" version))
13801 (sha256
13802 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
13803 (build-system pyproject-build-system)
13804 ;; Tests require fastapi, which depends on this package.
13805 (arguments (list #:tests? #false))
13806 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
13807 (native-inputs
13808 (list python-inline-snapshot python-pdm-backend python-pytest))
13809 (home-page "https://pypi.org/project/fastapi-cli/")
13810 (synopsis
13811 "Run and manage FastAPI apps from the command line with FastAPI CLI")
13812 (description
13813 "FastAPI CLI is a command line program fastapi that you can use to serve
13814your FastAPI app, manage your FastAPI project, and more.")
13815 (license license:expat)))
13816
13817(define-public python-pyactiveresource
13818 (package
13819 (name "python-pyactiveresource")
13820 (version "2.2.2")
13821 (source
13822 (origin
13823 (method git-fetch)
13824 (uri (git-reference
13825 (url "https://github.com/Shopify/pyactiveresource")
13826 (commit (string-append "v" version))))
13827 (file-name (git-file-name name version))
13828 (sha256
13829 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
13830 (build-system pyproject-build-system)
13831 (native-inputs (list python-dateutil python-pytest python-pyyaml
13832 python-setuptools))
13833 (propagated-inputs (list python-six))
13834 (home-page "https://github.com/Shopify/pyactiveresource/")
13835 (synopsis "ActiveResource for Python")
13836 (description
13837 "This package provides a Python port of the ActiveResource project.
13838
13839Active Resource attempts to provide a coherent wrapper object-relational
13840mapping for REST web services. It follows the same philosophy as Active
13841Record, in that one of its prime aims is to reduce the amount of code needed
13842to map to these resources. This is made possible by relying on a number of
13843code- and protocol-based conventions that make it easy for Active Resource to
13844infer complex relations and structures.")
13845 (license license:expat)))
13846
13847(define-public python-shopifyapi
13848 (package
13849 (name "python-shopifyapi")
13850 (version "12.7.0")
13851 (source
13852 (origin
13853 (method git-fetch)
13854 (uri (git-reference
13855 (url "https://github.com/Shopify/shopify_python_api")
13856 (commit (string-append "v" version))))
13857 (file-name (git-file-name name version))
13858 (sha256
13859 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
13860 (build-system pyproject-build-system)
13861 (arguments
13862 (list
13863 #:test-flags
13864 #~'("-k"
13865 ;; Disable a failing test.
13866 "not test_raises_if_aud_doesnt_match_api_key")))
13867 (native-inputs (list python-mock python-pytest python-setuptools))
13868 (propagated-inputs (list python-pyactiveresource python-pyjwt
13869 python-pyyaml python-six))
13870 (home-page "https://github.com/Shopify/shopify_python_api")
13871 (synopsis "Shopify API for Python")
13872 (description
13873 "This package provides the Shopify API for Python.
13874
13875The ShopifyAPI library allows Python developers to programmatically access the
13876admin section of stores using an ActiveResource-like interface similar the
13877ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
13878list, create, update, or delete resources (e.g. Order, Product, Collection).")
13879 (license license:expat)))
13880
13881(define-public python-pybadges
13882 (package
13883 (name "python-pybadges")
13884 (version "3.0.1")
13885 (source (origin
13886 (method git-fetch)
13887 (uri (git-reference
13888 (url "https://github.com/google/pybadges")
13889 (commit version)))
13890 (file-name (git-file-name name version))
13891 (sha256
13892 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
13893 (build-system pyproject-build-system)
13894 (arguments
13895 (list
13896 #:test-flags
13897 #~'("-k"
13898 ;; Disable network dependent tests.
13899 "not test_changes and not test_not_image_url and not test_http_url")))
13900 (propagated-inputs (list python-jinja2 python-requests))
13901 (native-inputs (list python-flask
13902 python-fonttools
13903 python-pillow
13904 python-pytest
13905 python-setuptools
13906 python-wheel
13907 python-xmldiff))
13908 (home-page "https://github.com/google/pybadges")
13909 (synopsis "Generate Github-style badges on the command-line")
13910 (description
13911 "This package provides @code{python-pybadges}: a library and command-line
13912tool for generating Github-style badges as SVG images.")
13913 (license license:asl2.0)))
13914
13915(define-public python-grid5000
13916 (package
13917 (name "python-grid5000")
13918 (version "1.2.4")
13919 (source (origin
13920 (method git-fetch)
13921 (uri (git-reference
13922 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
13923 (commit (string-append "v" version))))
13924 (file-name (git-file-name name version))
13925 (sha256
13926 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
13927 (build-system pyproject-build-system)
13928 (arguments
13929 (list #:tests? #f)) ; No tests.
13930 (native-inputs (list python-setuptools))
13931 (propagated-inputs (list python-requests python-ipython python-pyyaml))
13932 (home-page "https://pypi.org/project/python-grid5000/")
13933 (synopsis "Grid5000 python client")
13934 (description
13935 "python-grid5000 is a python package wrapping the Grid5000 REST API.
13936You can use it as a library in your python project or you can explore the
13937Grid5000 resources interactively using the embedded shell.")
13938 (license license:gpl3+)))
13939
13940(define-public python-enoslib
13941 (package
13942 (name "python-enoslib")
13943 (version "8.0.1")
13944 (source
13945 (origin
13946 (method git-fetch)
13947 (uri (git-reference
13948 (url "https://gitlab.inria.fr/discovery/enoslib")
13949 (commit (string-append "v" version))))
13950 (file-name (git-file-name name version))
13951 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
13952 (arguments
13953 (list
13954 #:test-flags
13955 #~(list "enoslib/tests/unit"
13956 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
13957 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
13958 #:phases
13959 #~(modify-phases %standard-phases
13960 (add-before 'check 'pre-check
13961 (lambda* (#:key tests? #:allow-other-keys)
13962 (when tests?
13963 ;; Otherwise Ansible fails to create its config directory.
13964 (setenv "HOME" "/tmp"))))
13965 ;; Disable the sanity check, which fails with the following error:
13966 ;;
13967 ;; ContextualVersionConflict(rich 12.4.1
13968 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
13969 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
13970 ;;
13971 ;; The optional jupyter dependency of rich isn't critical for
13972 ;; EnOSlib to work
13973 (delete 'sanity-check))))
13974 (build-system pyproject-build-system)
13975 (native-inputs
13976 (list python-ddt
13977 python-freezegun
13978 python-pytest
13979 python-setuptools
13980 python-wheel))
13981 (propagated-inputs
13982 (list ansible
13983 python-cryptography
13984 python-grid5000
13985 python-jsonschema
13986 python-netaddr
13987 python-packaging
13988 python-requests
13989 python-rich
13990 python-sshtunnel
13991 python-pytz))
13992 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
13993 (synopsis "Deploy distributed testbeds on a variety of platforms")
13994 (description
13995 "EnOSlib is a library to build experimental frameworks on various
13996scientific testbeds. It lets you deploy networks of machines on actual
13997hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
13998 (license license:gpl3+)))
13999
14000(define-public python-pynetbox
14001 (package
14002 (name "python-pynetbox")
14003 (version "7.4.1")
14004 (source (origin
14005 (method url-fetch)
14006 (uri (pypi-uri "pynetbox" version))
14007 (sha256
14008 (base32
14009 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
14010 (build-system pyproject-build-system)
14011 (arguments
14012 (list
14013 #:test-flags
14014 ;; Integration tests depend on docker.
14015 '(list "--ignore=tests/integration")))
14016 (propagated-inputs (list python-packaging python-requests))
14017 (native-inputs
14018 (list python-pytest
14019 python-setuptools
14020 python-setuptools-scm
14021 python-wheel))
14022 (home-page "https://github.com/netbox-community/pynetbox")
14023 (synopsis "NetBox API client library")
14024 (description "Python module to query and edit data stored in a
14025@url{https://netbox.dev,NetBox} instance.")
14026 (license license:asl2.0)))
14027
14028(define-public python-waybackpack
14029 (package
14030 (name "python-waybackpack")
14031 (version "0.6.4")
14032 (source
14033 (origin
14034 (method url-fetch)
14035 (uri (pypi-uri "waybackpack" version))
14036 (sha256
14037 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14038 (build-system pyproject-build-system)
14039 (arguments
14040 (list #:tests? #f)) ; would require network (and SSL certificates)
14041 (propagated-inputs (list python-requests))
14042 (native-inputs (list python-pytest python-setuptools python-wheel))
14043 (home-page "https://github.com/jsvine/waybackpack")
14044 (synopsis
14045 "Download the entire Wayback Machine archive for a given URL")
14046 (description
14047 "This package provides a library and a command-line tool that lets
14048you download the entire Wayback Machine archive for a given URL.")
14049 (license license:expat)))
14050
14051(define-public python-xyzservices
14052 (package
14053 (name "python-xyzservices")
14054 (version "2025.4.0")
14055 (source
14056 (origin
14057 (method url-fetch)
14058 (uri (pypi-uri "xyzservices" version))
14059 (sha256
14060 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14061 (build-system pyproject-build-system)
14062 (arguments
14063 (list
14064 #:test-flags #~(list "-m" "not request")))
14065 (native-inputs
14066 (list python-pytest
14067 python-mercantile
14068 python-requests
14069 python-setuptools
14070 python-setuptools-scm))
14071 (home-page "https://github.com/geopandas/xyzservices")
14072 (synopsis "Source of XYZ tiles providers")
14073 (description "@code{xyzservices} is a lightweight library providing a
14074repository of available XYZ services offering raster basemap tiles. The
14075repository is provided via Python API and as a compressed JSON file.")
14076 (license license:bsd-3)))
14077
14078(define-public s3cmd
14079 (package
14080 (name "s3cmd")
14081 (version "2.4.0")
14082 (source
14083 (origin
14084 (method git-fetch)
14085 (uri (git-reference
14086 (url "https://github.com/s3tools/s3cmd")
14087 (commit (string-append "v" version))))
14088 (file-name (git-file-name name version))
14089 (sha256
14090 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14091 (build-system pyproject-build-system)
14092 (arguments
14093 (list
14094 #:tests? #f ; XXX: Tests require network access.
14095 #:phases
14096 #~(modify-phases %standard-phases
14097 (add-after 'unpack 'hide-wrapping
14098 (lambda _
14099 (substitute* "S3/MultiPart.py"
14100 (("sys\\.argv\\[0\\]")
14101 "\"s3cmd\""))
14102 (substitute* "s3cmd"
14103 (("optparser\\.get_prog_name\\(\\)")
14104 "\"s3cmd\"")))))))
14105 (native-inputs (list python-setuptools))
14106 (inputs (list python-dateutil python-magic))
14107 (home-page "https://s3tools.org/s3cmd")
14108 (synopsis "Command line tool for S3-compatible storage services")
14109 (description
14110 "S3cmd is a command line tool for uploading, retrieving and managing data
14111in storage services that are compatible with the Amazon Simple Storage
14112Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14113GnuPG encryption, and more. It also supports management of Amazon's
14114CloudFront content delivery network.")
14115 (license license:gpl2+)))