projects/guix·blob javascript-team · refs

15395 lines · 557.5 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;;; Copyright © 2026 Goran Vukoman <[email protected]>
93;;;
94;;; This file is part of GNU Guix.
95;;;
96;;; GNU Guix is free software; you can redistribute it and/or modify it
97;;; under the terms of the GNU General Public License as published by
98;;; the Free Software Foundation; either version 3 of the License, or (at
99;;; your option) any later version.
100;;;
101;;; GNU Guix is distributed in the hope that it will be useful, but
102;;; WITHOUT ANY WARRANTY; without even the implied warranty of
103;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
104;;; GNU General Public License for more details.
105;;;
106;;; You should have received a copy of the GNU General Public License
107;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
108
109(define-module (gnu packages python-web)
110 #:use-module (gnu packages admin)
111 #:use-module (gnu packages base)
112 #:use-module (gnu packages bash)
113 #:use-module (gnu packages build-tools)
114 #:use-module (gnu packages check)
115 #:use-module (gnu packages cmake)
116 #:use-module (gnu packages compression)
117 #:use-module (gnu packages curl)
118 #:use-module (gnu packages databases)
119 #:use-module (gnu packages django)
120 #:use-module (gnu packages dns)
121 #:use-module (gnu packages freedesktop)
122 #:use-module (gnu packages glib)
123 #:use-module (gnu packages gnupg)
124 #:use-module (gnu packages graphviz)
125 #:use-module (gnu packages groff)
126 #:use-module (gnu packages iso-codes)
127 #:use-module (gnu packages libevent)
128 #:use-module (gnu packages libffi)
129 #:use-module (gnu packages libidn)
130 #:use-module (gnu packages linux)
131 #:use-module (gnu packages lsof)
132 #:use-module (gnu packages machine-learning)
133 #:use-module (gnu packages node)
134 #:use-module (gnu packages nss)
135 #:use-module (gnu packages openstack)
136 #:use-module (gnu packages pcre)
137 #:use-module (gnu packages pkg-config)
138 #:use-module (gnu packages protobuf)
139 #:use-module (gnu packages python)
140 #:use-module (gnu packages python-build)
141 #:use-module (gnu packages python-check)
142 #:use-module (gnu packages python-compression)
143 #:use-module (gnu packages python-crypto)
144 #:use-module (gnu packages python-science)
145 #:use-module (gnu packages python-xyz)
146 #:use-module (gnu packages qt)
147 #:use-module (gnu packages rdf)
148 #:use-module (gnu packages rpc)
149 #:use-module (gnu packages rust)
150 #:use-module (gnu packages serialization)
151 #:use-module (gnu packages sphinx)
152 #:use-module (gnu packages texinfo)
153 #:use-module (gnu packages time)
154 #:use-module (gnu packages tls)
155 #:use-module (gnu packages version-control)
156 #:use-module (gnu packages web)
157 #:use-module (gnu packages xml)
158 #:use-module (gnu packages)
159 #:use-module (guix build-system cargo)
160 #:use-module (guix build-system copy)
161 #:use-module (guix build-system pyproject)
162 #:use-module (guix deprecation)
163 #:use-module (guix download)
164 #:use-module (guix gexp)
165 #:use-module (guix git-download)
166 #:use-module ((guix licenses) #:prefix license:)
167 #:use-module (guix packages)
168 #:use-module (guix utils)
169 #:use-module (srfi srfi-1))
170
171(define-public awscli
172 (package
173 ;; Note: updating awscli typically requires updating botocore as well.
174 (name "awscli")
175 (version "1.43.11")
176 (source
177 (origin
178 (method git-fetch)
179 (uri (git-reference
180 (url "https://github.com/aws/aws-cli")
181 (commit version)))
182 (file-name (git-file-name name version))
183 (sha256
184 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
185 (build-system pyproject-build-system)
186 (arguments
187 (list
188 ;; tests: 2715 passed, 32 warnings
189 #:test-flags
190 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
191 ;; Complete test suite is huge and compute hungry, run just unit
192 ;; tests.
193 "--ignore=tests/dependencies"
194 "--ignore=tests/functional"
195 "--ignore=tests/integration"
196 ;; TypeError: 'Mock' object is not subscriptable.
197 "-k" "not test_no_groff_or_mandoc_exists")
198 #:phases
199 #~(modify-phases %standard-phases
200 (add-after 'unpack 'fix-reference-to-groff
201 (lambda _
202 ;; XXX: Consider to use wrap-program instead, it tries to parse
203 ;; the PATH.
204 (substitute* "awscli/help.py"
205 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
206 (("raise ExecutableNotFoundError\\('groff'\\)") "")
207 (("cmdline = \\['groff'")
208 (format #f "cmdline = ['~a/bin/groff'"
209 #$(this-package-input "groff-minimal"))))))
210 (add-before 'check 'set-environment
211 (lambda _
212 ;; PermissionError: [Errno 13] Permission denied:
213 ;; '/homeless-shelter'
214 (setenv "HOME" "/tmp"))))))
215 (native-inputs
216 (list python-pytest
217 python-pytest-xdist
218 python-setuptools
219 python-wheel))
220 (inputs
221 (list groff-minimal
222 python-botocore
223 python-colorama
224 python-docutils-0.19
225 python-pyyaml
226 python-rsa-for-awscli-1
227 python-s3transfer))
228 (home-page "https://aws.amazon.com/cli/")
229 (synopsis "Command line client for AWS")
230 (description
231 "AWS CLI provides a unified command line interface to the Amazon Web
232Services (AWS) API.")
233 (license license:asl2.0)))
234
235(define-public awscli-2
236 (package
237 (inherit awscli)
238 ;; Note: updating awscli-2 typically requires updating python-awscrt.
239 (name "awscli")
240 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
241 ;; any fresh one compatible with current state of dependencies in Guix.
242 (version "2.36.20")
243 (source
244 (origin
245 (method git-fetch)
246 (uri (git-reference
247 (url "https://github.com/aws/aws-cli")
248 (commit version)))
249 (file-name (git-file-name name version))
250 (sha256
251 (base32
252 "1hv2zs5pm86b5bd66j2kfb9r8gz13cqnf8x5hmfv0ddszf9vnfgp"))))
253 (build-system pyproject-build-system)
254 (arguments
255 (list
256 ;; When updating and checking locally be very patient as build phase may
257 ;; hang for 6-8 minutes but eventually passes through.
258 ;;
259 ;; tests: 4189 passed, 1 skipped, 2 warnings
260 #:test-flags
261 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
262 ;; Full test suite contains more than 70k tests; ignore network
263 ;; dependent, slow and compute intense tests, keep just unit
264 ;; tests.
265 "--ignore=tests/backends"
266 "--ignore=tests/dependencies"
267 "--ignore=tests/functional"
268 "--ignore=tests/integration"
269 "--ignore=tests/unit/botocore"
270 ;; Flaky, something to do with PATH disappearing from os.environ?
271 ;; Passes when run on its own, so maybe something else is
272 ;; modifying this during the test run.
273 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
274 ;; TypeError: 'Mock' object is not subscriptable
275 "-k" "not test_no_groff_or_mandoc_exists")
276 #:phases
277 #~(modify-phases %standard-phases
278 (add-after 'unpack 'ignore-deprecations
279 (lambda _
280 (substitute* "pyproject.toml"
281 (("\"error::") "\"ignore::"))))
282 (add-after 'unpack 'fix-reference-to-groff
283 (lambda* (#:key inputs #:allow-other-keys)
284 (substitute* "awscli/help.py"
285 (("if self._exists_on_path\\('groff'\\):") "if True:")
286 (("cmdline = \\['groff'")
287 (string-append "cmdline = ['"
288 (search-input-file inputs "bin/groff")
289 "'")))))
290 (add-before 'check 'pre-check
291 (lambda _ (setenv "HOME" "/tmp"))))))
292 (inputs
293 (list groff
294 ;; less
295 nss-certs-for-test
296 python-awscrt
297 python-colorama
298 python-dateutil
299 python-distro
300 python-docutils
301 python-jmespath
302 python-prompt-toolkit
303 python-ruamel.yaml
304 python-ruamel.yaml.clib
305 python-urllib3
306 python-wcwidth))
307 (native-inputs
308 (list python-flit-core
309 python-pytest
310 python-pytest-xdist))))
311
312;; XXX: This project missed maintainer upstream, see
313;; <https://github.com/joeyespo/grip/issues/387>.
314;; Consider to remove if it keeps failing to build.
315(define-public grip
316 (package
317 (name "grip")
318 (version "4.6.1")
319 (source
320 (origin
321 (method git-fetch)
322 (uri (git-reference
323 (url "https://github.com/joeyespo/grip")
324 (commit (string-append "v" version))))
325 (file-name (git-file-name name version))
326 (sha256
327 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
328 (build-system pyproject-build-system)
329 (arguments
330 (list
331 #:test-flags
332 ;; All tests fail requiring network access, ignore the whole file.
333 #~(list "--ignore=tests/test_github.py")
334 #:phases
335 #~(modify-phases %standard-phases
336 ;; This fixes the removal of `charset` attribute of requests from
337 ;; Werkzeug 2.3.0.
338 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
339 (add-after 'unpack 'fix-response-encoding
340 (lambda _
341 (substitute* "grip/app.py"
342 (("response.charset")
343 "getattr(response, 'charset', 'utf-8')")))))))
344 (native-inputs
345 (list nss-certs-for-test
346 python-pytest
347 python-responses
348 python-setuptools
349 python-wheel))
350 (propagated-inputs
351 (list python-docopt
352 python-flask
353 python-markdown
354 python-path-and-address
355 python-pygments
356 python-requests))
357 (home-page "https://github.com/joeyespo/grip")
358 (synopsis "Preview Markdown files using the GitHub API")
359 (description
360 "Grip is a command-line server application written in Python that uses
361the GitHub Markdown API to render a local Markdown file. The styles and
362rendering come directly from GitHub, so you'll know exactly how it will
363appear. Changes you make to the file will be instantly reflected in the
364browser without requiring a page refresh.")
365 (license license:expat)))
366
367(define-public gunicorn
368 (package
369 (name "gunicorn")
370 (version "25.3.0")
371 (source
372 (origin
373 (method url-fetch)
374 (uri (pypi-uri "gunicorn" version))
375 (sha256
376 (base32
377 "12g85w735s4dszjfidi4vh786rfxsa5rd60il0fcvxknkwpinkpp"))))
378 (outputs '("out" "doc"))
379 (build-system pyproject-build-system)
380 (arguments
381 `(#:test-flags
382 ;; Disable the geventlet tests because eventlet uses dnspython, which
383 ;; does not work in the build container due to lack of /etc/resolv.conf
384 '("--ignore=tests/workers/test_geventlet.py")
385 #:phases (modify-phases %standard-phases
386 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
387 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
388 ;; size. Override it to only add the essential entries.
389 (replace 'wrap
390 (lambda* (#:key native-inputs inputs outputs
391 #:allow-other-keys)
392 (let* ((out (assoc-ref outputs "out"))
393 (python (assoc-ref (or native-inputs inputs)
394 "python"))
395 (sitedir (string-append "/lib/python"
396 (python-version python)
397 "/site-packages")))
398 (wrap-program (string-append out "/bin/gunicorn")
399 `("PYTHONPATH" ":" prefix
400 ,(map (lambda (output)
401 (string-append output sitedir))
402 (list python out))))))))))
403 (inputs (list bash-minimal))
404 (native-inputs
405 (list binutils ;for ctypes.util.find_library()
406 python-eventlet
407 python-gevent
408 python-h2
409 python-httpx
410 python-pytest
411 python-pytest-asyncio
412 python-setuptools
413 python-uvloop))
414 (propagated-inputs
415 (list python-packaging
416 python-setuptools
417 python-wheel))
418 (home-page "https://gunicorn.org/")
419 (synopsis "Python WSGI HTTP Server for UNIX")
420 (description
421 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
422Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
423Unicorn project. The Gunicorn server is broadly compatible with
424various web frameworks, simply implemented, light on server resources,
425and fairly speedy.")
426 (license license:expat)))
427
428;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
429;; its tests
430(define-public gunicorn-bootstrap
431 (package
432 (inherit gunicorn)
433 (name "gunicorn")
434 (arguments `(#:tests? #f))
435 (properties '((hidden? . #t)))
436 (native-inputs `())))
437
438(define-public oauth2ms
439 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
440 (revision "0"))
441 (package
442 (name "oauth2ms")
443 (version (git-version "0.0.0" revision commit))
444 (source (origin
445 (method git-fetch)
446 (uri (git-reference
447 (url "https://github.com/harishkrupo/oauth2ms")
448 (commit commit)))
449 (file-name (git-file-name name version))
450 (sha256
451 (base32
452 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
453 (build-system copy-build-system)
454 (arguments
455 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
456 ("." #$(string-append "share/doc/" name "-"
457 version "/")
458 #:include-regexp ("\\.org$")))
459 #:phases #~(modify-phases %standard-phases
460 (add-after 'install 'wrap-pythonpath
461 (lambda* (#:key inputs outputs #:allow-other-keys)
462 (let ((path (getenv "GUIX_PYTHONPATH")))
463 (wrap-program (string-append #$output
464 "/bin/oauth2ms")
465 `("GUIX_PYTHONPATH" ":" prefix
466 (,path)))))))))
467 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
468 (home-page "https://github.com/harishkrupo/oauth2ms")
469 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
470 (description
471 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
472endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
473used as authentication in IMAP mail servers.")
474 (license license:asl2.0))))
475
476(define-public python-a2wsgi
477 (package
478 (name "python-a2wsgi")
479 (version "1.10.7")
480 (source (origin
481 (method url-fetch)
482 (uri (pypi-uri "a2wsgi" version))
483 (sha256
484 (base32
485 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
486 (build-system pyproject-build-system)
487 (arguments
488 (list
489 #:test-flags
490 #~(list "-k" (string-join
491 (list "not test_starlette_stream_response"
492 "test_starlette_base_http_middleware"
493 "test_baize_stream_response"
494 ;; Fails because of harmless whitespace differences.
495 "test_wsgi_post")
496 " and not "))
497 #:build-backend "pdm.backend"))
498 (native-inputs
499 (list python-pdm-backend
500 python-pytest
501 ;; python-baize ; not packed yet
502 python-httpx-bootstrap
503 ;; Cycle: python-a2wsgi->python-uvicorn->
504 ;; python-httpx->python-starlette->python-a2wsgi
505 ;; python-starlette
506 python-pytest-asyncio))
507 (home-page "https://github.com/abersheeran/a2wsgi")
508 (synopsis "Convert WSGI to ASGI or vice versa")
509 (description
510 "This program converts a WSGI program to an ASGI program or the other
511way around. It depends only on the Python standard library.")
512 (license license:asl2.0)))
513
514(define-public python-aioboto3
515 (package
516 (name "python-aioboto3")
517 (version "15.5.0")
518 (source
519 (origin
520 (method git-fetch)
521 (uri (git-reference
522 (url "https://github.com/terricain/aioboto3")
523 (commit (string-append "v" version))))
524 (file-name (git-file-name name version))
525 (sha256
526 (base32 "05644x17f9sl8mv9bp8l0rjcmw5x2ssyd5z1v3xmgcspk5qs6qn8"))))
527 (build-system pyproject-build-system)
528 (arguments
529 (list
530 #:tests? #f ;XXX: all tests faild
531 #:phases
532 #~(modify-phases %standard-phases
533 (add-after 'unpack 'relax-requirements
534 (lambda _
535 (substitute* "pyproject.toml"
536 (("aiobotocore\\[boto3\\]==2.25.1")
537 "aiobotocore >= 2.25.1")))))))
538 (native-inputs
539 (list python-setuptools
540 python-setuptools-scm))
541 (propagated-inputs
542 (list python-aiobotocore
543 python-aiofiles
544 ;; [optional]
545 python-boto3
546 python-cryptography))
547 (home-page "https://github.com/terricain/aioboto3")
548 (synopsis "Async boto3 wrapper")
549 (description
550 "This package is mostly just a wrapper combining the great work of boto3
551and aiobotocore.")
552 (license license:asl2.0)))
553
554(define-public python-aiobotocore
555 (package
556 (name "python-aiobotocore")
557 (version "3.0.0")
558 (source
559 (origin
560 (method url-fetch)
561 (uri (pypi-uri "aiobotocore" version))
562 (sha256
563 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
564 (build-system pyproject-build-system)
565 (arguments
566 ;; TODO: Tests need some setupt, see Makefile.
567 (list #:tests? #f))
568 (native-inputs
569 (list python-setuptools))
570 (propagated-inputs
571 (list python-aiohttp
572 python-aioitertools
573 python-botocore
574 python-dateutil
575 python-jmespath
576 python-multidict
577 python-typing-extensions
578 python-wrapt))
579 (home-page "https://github.com/aio-libs/aiobotocore")
580 (synopsis "Async client for AWS services using botocore and aiohttp")
581 (description "This package provides an async client for Amazon services
582using botocore and aiohttp/asyncio. This library is a mostly full featured
583asynchronous version of botocore.")
584 (license license:asl2.0)))
585
586(define-public python-aiocoap
587 (package
588 (name "python-aiocoap")
589 (version "0.4.14")
590 (source
591 (origin
592 (method git-fetch) ; tests miss data and module files in PyPI release
593 (uri (git-reference
594 (url "https://github.com/chrysn/aiocoap")
595 (commit version)))
596 (file-name (git-file-name name version))
597 (sha256
598 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
599 (build-system pyproject-build-system)
600 (arguments
601 (list
602 #:test-flags
603 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
604 ;; 8683, 0, 0): address already in use
605 #~(list "--ignore=tests/test_server.py"
606 "-k" (string-join
607 ;; TypeError: can only concatenate str (not "NoneType") to
608 ;; str
609 (list "not test_options"
610 "test_uri_parser"
611 "test_help" ; returned non-zero exit status 1.
612 "test_routing" ; address already in use
613 "test_tls")
614 " and not "))))
615 (native-inputs
616 (list openssl ;for tests/test_tls.py
617 python-pytest
618 python-setuptools
619 python-wheel))
620 (propagated-inputs
621 (list ;; python-cbor-diag
622 python-cbor2
623 python-cryptography
624 ;; python-dtlssocket
625 python-filelock
626 ;; python-ge25519
627 python-pygments
628 python-termcolor
629 python-websockets))
630 (home-page "https://github.com/chrysn/aiocoap")
631 (synopsis "Python CoAP library")
632 (description
633 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
634Constrained Application Protocol}, http://coap.space/}. It facilitates
635writing applications that talk to network enabled embedded
636@acronym{IoT,Internet of Things} devices.")
637 (license license:expat)))
638
639(define-public python-aiodns
640 (package
641 (name "python-aiodns")
642 (version "3.5.0")
643 (source
644 (origin
645 (method git-fetch)
646 (uri (git-reference
647 (url "https://github.com/saghul/aiodns")
648 (commit (string-append "v" version))))
649 (file-name (git-file-name name version))
650 (sha256
651 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
652 (build-system pyproject-build-system)
653 (arguments
654 (list
655 #:tests? #f)) ;tests require internet access
656 (native-inputs
657 (list python-pytest python-pytest-asyncio python-setuptools))
658 (propagated-inputs (list python-pycares))
659 (home-page "https://github.com/saghul/aiodns")
660 (synopsis "Simple DNS resolver for asyncio")
661 (description
662 "@code{aiodns} provides a simple way for doing asynchronous DNS
663resolutions with a synchronous looking interface by using
664@url{https://github.com/saghul/pycares,pycares}.")
665 (license license:expat)))
666
667(define-public python-aioftp
668 (package
669 (name "python-aioftp")
670 (version "0.27.2")
671 (source
672 (origin
673 (method git-fetch)
674 (uri (git-reference
675 (url "https://github.com/aio-libs/aioftp")
676 (commit version)))
677 (file-name (git-file-name name version))
678 (sha256
679 (base32 "1lshyac5zk1w4x7ygkim3726f8gbkvpvlyiqkn9cs6qjxhxn5bxc"))))
680 (build-system pyproject-build-system)
681 (arguments
682 (list
683 #:phases
684 #~(modify-phases %standard-phases
685 (add-after 'unpack 'use-default-asyncio
686 ;; async_timeout is deprecated, upstream recommends to use
687 ;; asyncio, available since Python 3.11.
688 (lambda _
689 (substitute* "tests/conftest.py"
690 (("async_timeout") "asyncio")))))))
691 (native-inputs
692 (list python-pytest
693 python-pytest-mock
694 python-pytest-asyncio
695 python-setuptools
696 python-siosocks
697 python-trustme))
698 (home-page "https://aioftp.readthedocs.io/")
699 (synopsis "FTP client/server for asyncio in Python")
700 (description
701 "FTP client and server for asyncio (Python 3) Library implementing FTP
702protocol, both client and server for Python asyncio module.
703
704 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
705 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
706 REST, LIST (as fallback).
707
708 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
709 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
710 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
711 (license license:asl2.0)))
712
713(define-public python-aiohappyeyeballs
714 (package
715 (name "python-aiohappyeyeballs")
716 (properties '((commit . "cc53cf8a1d31f7b460a0114214aac66956f0e2ed")
717 (revision . "0")))
718 (version (git-version "2.6.1"
719 (assoc-ref properties 'revision)
720 (assoc-ref properties 'commit)))
721 (source
722 (origin
723 (method git-fetch)
724 (uri (git-reference
725 (url "https://github.com/aio-libs/aiohappyeyeballs")
726 (commit (assoc-ref properties 'commit))))
727 (file-name (git-file-name name version))
728 (sha256
729 (base32 "0nc723f4sxryg5h9z8paysmy9dnqw2jy4srxp9axrxkv9qrawa7n"))))
730 (build-system pyproject-build-system)
731 (native-inputs
732 (list python-poetry-core
733 python-pytest
734 python-pytest-asyncio))
735 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
736 (synopsis "Happy Eyeballs for asyncio")
737 (description "This library exists to allow connecting with Happy
738Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
739DNS name.")
740 (license license:psfl)))
741
742(define-public python-aiohttp
743 (package
744 (name "python-aiohttp")
745 (version "3.13.5")
746 (source
747 (origin
748 (method git-fetch)
749 (uri (git-reference
750 (url "https://github.com/aio-libs/aiohttp/")
751 (commit (string-append "v" version))))
752 (file-name (git-file-name name version))
753 (sha256
754 (base32 "0l9jcmhqd2v97gy1bxvimwi3aajxhxqn6jkzzgg7cf42mpyza0vc"))
755 (snippet
756 #~(begin
757 (use-modules ((guix build utils)))
758 (delete-file-recursively "vendor")))))
759 (build-system pyproject-build-system)
760 (arguments
761 (list
762 ;; tests: 4003 passed, 80 skipped, 31 xfailed, 2 subtests passed
763 #:test-flags
764 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
765 ;; This tests requires the 'proxy.py' module, not yet packaged.
766 "--ignore=tests/test_proxy_functional.py"
767 ;; No benchamrks.
768 "--ignore-glob=tests/test_benchmarks_*"
769 "-k"
770 (string-join
771 ;; Combinatin of tests failing with similar errors:
772 ;; - Cannot connect to host example.com:443 ssl:default [Could
773 ;; not contact DNS servers].
774 ;; - aiohttp.http_exceptions.ContentEncodingError: 400.
775 ;; - Can not decode content-encoding: br
776 (list "not test_add_static_path_resolution"
777 "test_empty_header_name"
778 "test_http_payload_brotli"
779 "test_http_payload_zstandard"
780 "test_invalid_header_spacing"
781 "test_payload_decompress_size_limit_brotli"
782 "test_reject_obsolete_line_folding"
783 "test_response_with_precompressed_body_brotli"
784 "test_static_file_custom_content_type_compress"
785 "test_static_file_with_encoding_and_enable_compression"
786 "test_tcp_connector_ssl_shutdown_timeout_nonzero_passed"
787 "test_tcp_connector_ssl_shutdown_timeout_passed_to_"
788 "test_tcp_connector_ssl_shutdown_timeout_zero_not_")
789 " and not "))
790 #:phases
791 #~(modify-phases %standard-phases
792 (add-after 'unpack 'set-libllhtp-pkgconfig
793 (lambda _
794 ;; pkg-config can't find the libllhttp library.
795 (if (getenv "PKG_CONFIG_PATH")
796 (setenv "PKG_CONFIG_PATH"
797 (string-append
798 #$(this-package-input "llhttp") "/lib/pkgconfig"
799 (getenv "PKG_CONFIG_PATH")))
800 (setenv "PKG_CONFIG_PATH"
801 (string-append
802 #$(this-package-input "llhttp") "/lib/pkgconfig")))))
803 (add-after 'unpack 'fix-pytest-config
804 (lambda _
805 (substitute* "setup.cfg"
806 (("--numprocesses=auto") "")
807 (("-p pytest_cov") "")
808 (("--cov=aiohttp") "")
809 (("--cov=tests/") ""))))
810 (add-after 'unpack 'fix-tests
811 (lambda _
812 ;; Make sure the timestamp of this file is > 1990, because a few
813 ;; tests like test_static_file_if_modified_since_past_date
814 ;; depend on it.
815 (let ((late-90s (* 60 60 24 365 30)))
816 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
817 (add-before 'build 'pre-build
818 (lambda _
819 (setenv "USE_SYSTEM_DEPS" "true")
820 ;; Help setup.py to determine project's root.
821 (with-output-to-file ".git"
822 (lambda () (display "")))
823 (substitute* "Makefile"
824 (("cythonize: .install-cython") "cythonize:"))
825 (invoke "make" "cythonize")))
826 (add-before 'check 'remove-local-source
827 (lambda _
828 (delete-file-recursively "aiohttp"))))))
829 (native-inputs
830 (list gunicorn-bootstrap
831 python-freezegun
832 python-cython
833 python-pkgconfig
834 ;; python-proxy-py ;not packaged yet in Guix
835 python-pytest
836 python-pytest-mock
837 python-pytest-xdist
838 python-re-assert
839 python-setuptools
840 python-zlib-ng))
841 (inputs
842 (list llhttp))
843 (propagated-inputs
844 (list python-aiohappyeyeballs
845 python-aiosignal
846 python-attrs
847 python-frozenlist
848 python-multidict
849 python-propcache
850 python-yarl
851 ;; [optional]
852 python-aiodns
853 python-backports-zstd ;Python version < 3.14
854 python-brotli))
855 (home-page "https://github.com/aio-libs/aiohttp/")
856 (synopsis "Async HTTP client/server framework (asyncio)")
857 (description "@code{aiohttp} is an asynchronous HTTP client/server
858framework.
859
860Its main features are:
861@itemize
862@item Supports both client and server side of HTTP protocol.
863@item Supports both client and server Web-Sockets out-of-the-box without the
864Callback Hell.
865@item Web-server has middlewares and pluggable routing.
866@end itemize")
867 (license license:asl2.0)))
868
869(define-public python-aiohttp-client-cache
870 (package
871 (name "python-aiohttp-client-cache")
872 (version "0.14.3")
873 (source
874 (origin
875 (method git-fetch)
876 (uri (git-reference
877 (url "https://github.com/requests-cache/aiohttp-client-cache")
878 (commit (string-append "v" version))))
879 (file-name (git-file-name name version))
880 (sha256
881 (base32
882 "13xbmjjvcbzh3yh5z92mc0gwicwfjfq2av5jbqv09sbfzhggs92y"))))
883 (build-system pyproject-build-system)
884 (arguments
885 (list
886 #:test-flags #~(list "--ignore=test/integration/")))
887 (native-inputs
888 (list python-brotli
889 python-faker
890 python-hatchling
891 python-pytest
892 python-pytest-aiohttp
893 python-pytest-asyncio
894 python-types-aiofiles))
895 (propagated-inputs
896 (list python-aiohttp
897 python-attrs
898 python-itsdangerous
899 python-url-normalize
900 ;; [optional]
901 python-aioboto3
902 python-aiobotocore
903 python-aiofiles
904 python-aiosqlite
905 python-pymongo
906 python-redis))
907 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
908 (synopsis "Persistent cache for aiohttp requests")
909 (description
910 "This package is an asynchronous persistent caching library specifically
911designed for @samp{aiohttp} requests in Python. With support for various
912storage backends, it offers flexibility in how and where the cache is stored.
913Please note that MongoDB and DynamoDB backends are not currently supported due
914to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
915 (license license:expat)))
916
917(define-public python-aiohttp-cors
918 (package
919 (name "python-aiohttp-cors")
920 (version "0.8.1")
921 (source
922 (origin
923 (method url-fetch)
924 (uri (pypi-uri "aiohttp_cors" version))
925 (sha256
926 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
927 (build-system pyproject-build-system)
928 (arguments
929 (list
930 #:tests? #f)) ; network access is required to run tests
931 (native-inputs
932 (list python-setuptools
933 python-wheel))
934 (propagated-inputs
935 (list python-aiohttp))
936 (home-page "https://github.com/aio-libs/aiohttp-cors")
937 (synopsis "CORS support for aiohttp")
938 (description
939 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
940support for aiohttp asyncio-powered asynchronous HTTP server.")
941 (license license:asl2.0)))
942
943(define-public python-aiohttp-oauthlib
944 (package
945 (name "python-aiohttp-oauthlib")
946 (version "0.1.0")
947 (source
948 (origin
949 (method url-fetch)
950 (uri (pypi-uri "aiohttp-oauthlib" version))
951 (sha256
952 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
953 (build-system pyproject-build-system)
954 (arguments (list #:tests? #f)) ; none included
955 (propagated-inputs (list python-aiohttp python-oauthlib))
956 (native-inputs (list python-setuptools python-setuptools-scm))
957 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
958 (synopsis "OAuthlib authentication support for aiohttp")
959 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
960provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
961 (license license:isc)))
962
963(define-public python-aiohttp-retry
964 (package
965 (name "python-aiohttp-retry")
966 (version "2.9.1")
967 (source
968 (origin
969 (method git-fetch)
970 (uri (git-reference
971 (url "https://github.com/inyutin/aiohttp_retry")
972 (commit (string-append "v" version))))
973 (file-name (git-file-name name version))
974 (sha256
975 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
976 (build-system pyproject-build-system)
977 (native-inputs
978 (list python-pytest
979 python-pytest-aiohttp
980 python-setuptools))
981 (propagated-inputs
982 (list python-aiohttp))
983 (home-page "https://github.com/inyutin/aiohttp_retry")
984 (synopsis "Simple retry client for aiohttp")
985 (description
986 "This package implements @code{RetryClient} for @code{aiohttp} to retry
987connection to provided endpoint with timeouts logic or use:
988
989@itemize
990@item @code{ExponentialRetry} with exponential backoff
991@item @code{RandomRetry} for random backoff
992@item @code{ListRetry} with backoff you predefine by list
993@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
994@item @code{JitterRetry} exponential retry with a bit of randomness
995@end itemize")
996 (license license:expat)))
997
998(define-public python-aiohttp-socks
999 (package
1000 (name "python-aiohttp-socks")
1001 (version "0.10.1")
1002 (source
1003 (origin
1004 (method url-fetch)
1005 (uri (pypi-uri "aiohttp_socks" version))
1006 (sha256
1007 (base32
1008 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
1009 (build-system pyproject-build-system)
1010 (arguments (list #:tests? #false)) ;none included
1011 (propagated-inputs
1012 (list python-aiohttp python-socks))
1013 (native-inputs (list python-setuptools python-wheel))
1014 (home-page "https://github.com/romis2012/aiohttp-socks")
1015 (synopsis "SOCKS proxy connector for aiohttp")
1016 (description "This package provides a SOCKS proxy connector for
1017aiohttp. It supports SOCKS4(a) and SOCKS5.")
1018 (license license:asl2.0)))
1019
1020(define-public python-aioitertools
1021 (package
1022 (name "python-aioitertools")
1023 (version "0.12.0")
1024 (source
1025 (origin
1026 (method url-fetch)
1027 (uri (pypi-uri "aioitertools" version))
1028 (sha256
1029 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
1030 (build-system pyproject-build-system)
1031 (arguments
1032 (list #:test-backend #~'custom
1033 #:test-flags #~(list "-m" "aioitertools.tests")))
1034 (native-inputs
1035 (list python-flit-core))
1036 (home-page "https://pypi.org/project/aioitertools/")
1037 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
1038 (description
1039 "This package provides an implementation of itertools, builtins, and more
1040for AsyncIO and mixed-type iterables.")
1041 (license license:expat)))
1042
1043(define-public python-aioquic
1044 (package
1045 (name "python-aioquic")
1046 (version "1.3.0")
1047 (source
1048 (origin
1049 (method git-fetch)
1050 (uri (git-reference
1051 (url "https://github.com/aiortc/aioquic")
1052 (commit version)))
1053 (file-name (git-file-name name version))
1054 (sha256
1055 (base32 "0dyzh8xipxbd7fcykfz8g5bgri38prwg050szqawq2p0pg538dgb"))))
1056 (build-system pyproject-build-system)
1057 (native-inputs
1058 (list nss-certs-for-test
1059 python-pytest
1060 python-setuptools))
1061 (inputs
1062 (list openssl))
1063 (propagated-inputs
1064 (list python-certifi
1065 python-cryptography
1066 python-pylsqpack
1067 python-pyopenssl
1068 python-service-identity))
1069 (home-page "https://github.com/aiortc/aioquic")
1070 (synopsis "QUIC and HTTP3 implementation in Python")
1071 (description
1072 "@code{aioquic} is a library for the QUIC network protocol in Python.
1073It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
1074 (license license:bsd-3)))
1075
1076(define-public python-aiorpcx
1077 (package
1078 (name "python-aiorpcx")
1079 (version "0.25.0")
1080 (source
1081 (origin
1082 (method git-fetch)
1083 ;; PyPI misses the util.py file used for tests.
1084 (uri (git-reference
1085 (url "https://github.com/kyuupichan/aiorpcX")
1086 (commit version)))
1087 (file-name (git-file-name name version))
1088 (sha256
1089 (base32
1090 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
1091 (build-system pyproject-build-system)
1092 (arguments
1093 (list
1094 #:test-flags
1095 ;; This test opens a remote connection.
1096 #~(list "-k" "not test_create_connection_resolve_good")))
1097 (native-inputs (list python-pytest
1098 python-pytest-asyncio-0.26
1099 python-setuptools))
1100 (propagated-inputs
1101 (list python-attrs python-websockets))
1102 (home-page "https://github.com/kyuupichan/aiorpcX")
1103 (synopsis "Generic asyncio RPC implementation")
1104 (description
1105 "The aiorpcX library is a generic asyncio implementation of RPC suitable
1106for an application that is a client, server or both.
1107
1108The package includes a module with full coverage of JSON RPC versions 1.0 and
11092.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
1110comes with a SOCKS proxy client.")
1111 (license (list license:expat license:bsd-2))))
1112
1113(define-public python-aiosignal
1114 (package
1115 (name "python-aiosignal")
1116 (version "1.4.0")
1117 (source
1118 (origin
1119 (method url-fetch)
1120 (uri (pypi-uri "aiosignal" version))
1121 (sha256
1122 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
1123 (build-system pyproject-build-system)
1124 (arguments
1125 (list
1126 #:phases
1127 #~(modify-phases %standard-phases
1128 (add-after 'unpack 'avoid-pytest-cov-preload
1129 (lambda _
1130 (substitute* "pytest.ini"
1131 (("-p pytest_cov") "")))))))
1132 (native-inputs
1133 (list python-pytest
1134 python-pytest-asyncio
1135 python-setuptools))
1136 (propagated-inputs
1137 (list python-frozenlist))
1138 (home-page "https://github.com/aio-libs/aiosignal")
1139 (synopsis "Callback manager for Python @code{asyncio} projects")
1140 (description "This Python module provides @code{Signal}, an abstraction to
1141register asynchronous callbacks. The @code{Signal} abstraction can be used
1142for adding, removing and dropping callbacks.")
1143 (license license:asl2.0)))
1144
1145(define-public python-aiostream
1146 (package
1147 (name "python-aiostream")
1148 (version "0.7.0")
1149 (source
1150 (origin
1151 (method git-fetch) ;no tests in PyPI archive
1152 (uri (git-reference
1153 (url "https://github.com/vxgmichel/aiostream")
1154 (commit (string-append "v" version))))
1155 (file-name (git-file-name name version))
1156 (sha256
1157 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
1158 (build-system pyproject-build-system)
1159 (native-inputs
1160 (list python-pytest python-pytest-asyncio python-setuptools))
1161 (propagated-inputs
1162 (list python-typing-extensions))
1163 (home-page "https://github.com/vxgmichel/aiostream")
1164 (synopsis "Generator-based operators for asynchronous iteration")
1165 (description "@code{aiostream} provides a collection of stream operators that can
1166be combined to create asynchronous pipelines of operations. It can be seen as an
1167asynchronous version of @code{itertools}, although some aspects are slightly
1168different. All the provided operators return a unified interface called a stream. A
1169stream is an enhanced asynchronous iterable.")
1170 (license license:gpl3)))
1171
1172(define-public python-ajsonrpc
1173 (package
1174 (name "python-ajsonrpc")
1175 (version "1.2.0")
1176 (source
1177 (origin
1178 (method git-fetch)
1179 (uri (git-reference
1180 (url "https://github.com/pavlov99/ajsonrpc")
1181 (commit version)))
1182 (file-name (git-file-name name version))
1183 (sha256
1184 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
1185 (build-system pyproject-build-system)
1186 (arguments
1187 (list
1188 #:phases
1189 #~(modify-phases %standard-phases
1190 (add-after 'unpack 'set-version
1191 (lambda _
1192 (substitute* "ajsonrpc/__init__.py"
1193 (("^__version__ = .*")
1194 (string-append "__version__ = \"" #$version "\"\n"))))))))
1195 (native-inputs
1196 (list python-pytest
1197 python-setuptools))
1198 (propagated-inputs
1199 (list python-quart
1200 python-sanic
1201 python-tornado))
1202 (home-page "https://github.com/pavlov99/ajsonrpc")
1203 (synopsis "Async JSON-RPC 2.0 protocol and server")
1204 (description
1205 "This package provides a Python JSON-RPC 2.0 protocol and server powered
1206by asyncio.")
1207 (license license:expat)))
1208
1209(define-public python-alpaca-py
1210 (package
1211 (name "python-alpaca-py")
1212 (version "0.43.5")
1213 (source
1214 (origin
1215 (method git-fetch)
1216 (uri (git-reference
1217 (url "https://github.com/alpacahq/alpaca-py")
1218 (commit (string-append "v" version))))
1219 (file-name (git-file-name name version))
1220 (sha256
1221 (base32 "1kiq8b1v58yj7fypmnfn4mij1n96ym1i9lxsd4gmbv0cgpn10nqv"))))
1222 (build-system pyproject-build-system)
1223 (native-inputs
1224 (list python-poetry-core
1225 python-poetry-dynamic-versioning
1226 python-pytest
1227 python-pytest-asyncio
1228 python-requests-mock))
1229 (propagated-inputs
1230 (list python-msgpack
1231 python-pandas
1232 python-pydantic
1233 python-pytz
1234 python-requests
1235 python-sseclient-py
1236 python-websockets))
1237 (home-page "https://alpaca.markets/sdks/python/")
1238 (synopsis "Alpaca API official Python SDK")
1239 (description
1240 "Alpaca-py provides an interface to REST, WebSocket and SSE endpoints
1241that allow interaction with the @url{https://alpaca.markets/, Alpaca} API.")
1242 (license license:asl2.0)))
1243
1244(define-public python-anaconda-client
1245 (package
1246 (name "python-anaconda-client")
1247 (version "1.13.1")
1248 (source
1249 (origin
1250 (method git-fetch)
1251 (uri (git-reference
1252 (url "https://github.com/Anaconda-Platform/anaconda-client")
1253 (commit version)))
1254 (file-name (git-file-name name version))
1255 (sha256
1256 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
1257 (build-system pyproject-build-system)
1258 (arguments
1259 (list
1260 #:test-flags
1261 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
1262 "--deselect=tests/utils/test_conda.py::test_conda_vars")
1263 #:phases
1264 #~(modify-phases %standard-phases
1265 (add-after 'unpack 'fix-pytest-config
1266 (lambda _
1267 (substitute* "setup.cfg"
1268 (("addopts=.*") "addopts=\n")))))))
1269 (native-inputs
1270 (list python-freezegun
1271 python-pytest
1272 python-setuptools))
1273 (propagated-inputs
1274 (list python-anaconda-cli-base
1275 python-conda-package-handling
1276 python-conda-package-streaming
1277 python-dateutil
1278 python-defusedxml
1279 python-nbformat
1280 python-pillow
1281 python-platformdirs
1282 python-pytz
1283 python-pyyaml
1284 python-requests
1285 python-requests-toolbelt
1286 python-setuptools
1287 python-tqdm
1288 python-urllib3))
1289 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
1290 (synopsis "Anaconda Cloud command line client library")
1291 (description
1292 "Anaconda Cloud command line client library provides an interface to
1293Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
1294environments.")
1295 (license license:bsd-3)))
1296
1297(define-public python-apiron
1298 (package
1299 (name "python-apiron")
1300 (version "5.1.0")
1301 (source
1302 (origin
1303 (method url-fetch)
1304 (uri (pypi-uri "apiron" version))
1305 (sha256
1306 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
1307 (build-system pyproject-build-system)
1308 (arguments
1309 (list #:test-flags '(list "-k" "not test_call")))
1310 (propagated-inputs
1311 (list python-requests))
1312 (native-inputs
1313 (list python-pytest
1314 python-setuptools
1315 python-wheel))
1316 (home-page "https://github.com/ithaka/apiron")
1317 (synopsis "Python wrapper for interacting with RESTful APIs")
1318 (description
1319 "@code{apiron} provides a declarative, structured configuration of
1320services and endpoints with a unified interface for interacting with RESTful
1321APIs.")
1322 (license license:expat)))
1323
1324(define-public python-apprise
1325 (package
1326 (name "python-apprise")
1327 (version "1.9.4")
1328 (source
1329 (origin
1330 (method url-fetch)
1331 (uri (pypi-uri "apprise" version))
1332 (sha256
1333 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
1334 (build-system pyproject-build-system)
1335 (arguments
1336 (list
1337 ;; These tests used to be ran with --numprocesses, but that seems to have
1338 ;; made them non-deterministic.
1339 #:test-flags
1340 #~(list "--ignore=tests/test_plugin_macosx.py"
1341 "-k" "not test_plugin_glib_send_raises_generic")))
1342 (native-inputs
1343 (list python-babel
1344 python-pytest
1345 python-pytest-mock
1346 python-setuptools))
1347 (propagated-inputs
1348 (list python-certifi
1349 python-click
1350 python-markdown
1351 python-pygobject
1352 python-pyyaml
1353 python-requests
1354 python-requests-oauthlib))
1355 (home-page "https://github.com/caronc/apprise")
1356 (synopsis "Push notification library")
1357 (description
1358 "Apprise is a Python library that allows sending push notifications to a
1359broad range of notification services, such as Telegram, Discord, Slack, Amazon
1360SNS, Gotify, etc.")
1361 (license license:bsd-2)))
1362
1363(define-public python-arxiv
1364 (package
1365 (name "python-arxiv")
1366 (version "4.0.0")
1367 (source
1368 (origin
1369 (method git-fetch)
1370 (uri (git-reference
1371 (url "https://github.com/lukasschwab/arxiv.py")
1372 (commit version)))
1373 (file-name (git-file-name name version))
1374 (sha256
1375 (base32 "13363igvv3q5aj04jcrrc0cfliinlk8js84h2a9xhpwizsq96l4j"))))
1376 (build-system pyproject-build-system)
1377 (arguments
1378 (list #:test-flags
1379 #~(list "-k" ;to skip intenet connection tests
1380 (string-append "not (TestAPIBugs "
1381 "or TestClient "
1382 "or TestResult "
1383 "or TestDownload)"))
1384 #:phases
1385 #~(modify-phases %standard-phases
1386 (add-after 'unpack 'relax-dependencies
1387 (lambda _
1388 (substitute* "pyproject.toml"
1389 ;; pyproject.toml wants 6.10, guix has 6.02, seems fine
1390 (("\"lxml.*\"") "\"lxml\"")
1391 ;; artificial capped at <2.34 by dependabot
1392 (("\"requests.*\"") "\"requests\"")))))))
1393 (native-inputs
1394 (list python-pytest
1395 python-hatch-vcs
1396 python-hatchling))
1397 (propagated-inputs
1398 (list python-feedparser
1399 python-lxml
1400 python-requests))
1401 (home-page "https://github.com/lukasschwab/arxiv.py")
1402 (synopsis "Python wrapper for the arXiv API")
1403 (description "Python wrapper for the @code{arXiv} API.")
1404 (license license:expat)))
1405
1406(define-public python-asgi-csrf
1407 (package
1408 (name "python-asgi-csrf")
1409 (version "0.11")
1410 (source (origin
1411 (method git-fetch) ;for tests
1412 (uri (git-reference
1413 (url "https://github.com/simonw/asgi-csrf")
1414 (commit version)))
1415 (file-name (git-file-name name version))
1416 (sha256
1417 (base32
1418 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))
1419 (patches
1420 (search-patches "python-asgi-csrf-fix-formparser.patch"))))
1421 (build-system pyproject-build-system)
1422 (propagated-inputs (list python-itsdangerous python-multipart))
1423 (native-inputs (list python-asgi-lifespan
1424 python-httpx
1425 python-pytest
1426 python-pytest-asyncio
1427 python-starlette
1428 python-setuptools
1429 python-wheel))
1430 (home-page "https://github.com/simonw/asgi-csrf")
1431 (synopsis "ASGI middleware for protecting against CSRF attacks")
1432 (description "This Asynchronous Server Gateway Interface (ASGI)
1433middleware protects against Cross-site request forgery (CSRF) attacks.
1434It implements the Double Submit Cookie pattern, where a cookie is set
1435that is then compared to a @code{csrftoken} hidden form field or a
1436@code{x-csrftoken} HTTP header.")
1437 (license license:asl2.0)))
1438
1439(define-public python-asgi-lifespan
1440 (package
1441 (name "python-asgi-lifespan")
1442 (version "2.1.0")
1443 (source (origin
1444 (method git-fetch) ;for tests
1445 (uri (git-reference
1446 (url "https://github.com/florimondmanca/asgi-lifespan")
1447 (commit version)))
1448 (file-name (git-file-name name version))
1449 (sha256
1450 (base32
1451 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
1452 (build-system pyproject-build-system)
1453 (arguments
1454 (list
1455 #:test-flags
1456 '(list "-k"
1457 (string-append
1458 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
1459 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
1460 " or test_lifespan_manager[trio-None-BodyFailed-None]"
1461 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
1462 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
1463 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
1464 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
1465 " or test_lifespan_timeout[trio-slow_shutdown]"
1466 " or test_lifespan_not_supported[trio-http_only]"
1467 " or test_lifespan_not_supported[trio-http_no_assert]"
1468 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
1469 ")"))
1470 #:phases
1471 '(modify-phases %standard-phases
1472 (add-after 'unpack 'compatibility
1473 (lambda _
1474 ;; httpx version 0.28.0 removed the "app" shortcut.
1475 (substitute* "tests/test_manager.py"
1476 (("app=manager.app")
1477 "transport=httpx.ASGITransport(manager.app)")))))))
1478 (native-inputs (list python-httpx
1479 python-pytest
1480 python-pytest-asyncio
1481 python-pytest-trio
1482 python-starlette
1483 python-setuptools
1484 python-wheel))
1485 (propagated-inputs (list python-sniffio))
1486 (home-page "https://github.com/florimondmanca/asgi-lifespan")
1487 (synopsis "Programmatic startup/shutdown of ASGI apps")
1488 (description "Programmatically send startup/shutdown lifespan events
1489into Asynchronous Server Gateway Interface (ASGI) applications. When
1490used in combination with an ASGI-capable HTTP client such as HTTPX, this
1491allows mocking or testing ASGI applications without having to spin up an
1492ASGI server.")
1493 (license license:expat)))
1494
1495(define-public python-asgiref
1496 (package
1497 (name "python-asgiref")
1498 (version "3.11.1")
1499 (source
1500 (origin
1501 (method git-fetch)
1502 (uri (git-reference
1503 (url "https://github.com/django/asgiref/")
1504 (commit version)))
1505 (file-name (git-file-name name version))
1506 (sha256
1507 (base32 "19l03mx81dqhnnqa98073x1q243ndlknax0kva7azr9g12ixl69j"))))
1508 (build-system pyproject-build-system)
1509 (native-inputs
1510 (list python-pytest
1511 python-pytest-asyncio
1512 python-setuptools))
1513 (home-page "https://github.com/django/asgiref/")
1514 (synopsis "ASGI specs, helper code, and adapters")
1515 (description
1516 "ASGI is a standard for Python asynchronous web apps and servers to
1517communicate with each other, and positioned as an asynchronous successor to
1518WSGI. This package includes libraries for implementing ASGI servers.")
1519 (license license:bsd-3)))
1520
1521(define-public python-asyncer
1522 (package
1523 (name "python-asyncer")
1524 (version "0.0.17")
1525 (source
1526 (origin
1527 (method git-fetch)
1528 (uri (git-reference
1529 (url "https://github.com/fastapi/asyncer")
1530 (commit version)))
1531 (file-name (git-file-name name version))
1532 (sha256
1533 (base32 "1f4ids6sxwmz89yj98z0qc4qvfkklh0psbxv5px39k807g9aq7p2"))))
1534 (build-system pyproject-build-system)
1535 (native-inputs
1536 (list python-pdm-backend
1537 python-pytest))
1538 (propagated-inputs
1539 (list python-anyio
1540 python-sniffio
1541 python-typing-extensions))
1542 (home-page "https://asyncer.tiangolo.com/")
1543 (synopsis "Asyncer, async and await, focused on developer experience")
1544 (description
1545 "Asyncer is a small library built on top of
1546@url{https://anyio.readthedocs.io/en/stable/, AnyIO}.
1547
1548The main goal of Asyncer is to improve developer experience by providing
1549better support for autocompletion and inline errors in the editor, and more
1550certainty that the code is bug-free by providing better support for type
1551checking tools like mypy.")
1552 (license license:expat)))
1553
1554(define-public python-asyncudp
1555 (package
1556 (name "python-asyncudp")
1557 (version "0.11.0")
1558 (source
1559 (origin
1560 (method git-fetch)
1561 (uri (git-reference
1562 (url "https://github.com/eerimoq/asyncudp")
1563 (commit version)))
1564 (file-name (git-file-name name version))
1565 (sha256
1566 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
1567 (build-system pyproject-build-system)
1568 (native-inputs (list python-pytest python-setuptools))
1569 (home-page (git-reference-url (origin-uri source)))
1570 (synopsis "High level UDP sockets for asyncio")
1571 (description
1572 "This package provides a Python library offering high level UDP sockets
1573for asyncio. Import it alongside asyncio and use its API to send and receive
1574UDP packets.")
1575 (license license:expat)))
1576
1577(define-public python-authlib
1578 (package
1579 (name "python-authlib")
1580 (version "1.6.12")
1581 (source
1582 (origin
1583 (method git-fetch)
1584 (uri (git-reference
1585 (url "https://github.com/authlib/authlib")
1586 (commit (string-append "v" version))))
1587 (file-name (git-file-name name version))
1588 (sha256
1589 (base32 "0vh1kvmipxa8xp3x5jwqg1gzy4zac2skfj1mv5698jsmfzs2zd8w"))))
1590 (build-system pyproject-build-system)
1591 (arguments
1592 (list
1593 #:test-flags
1594 ;; httpx2 has succeed httpx in authlib 1.8.0 (2026-08-30) which requires
1595 ;; cryptography >= 45.0.1; leave it for the next python-team cycle and
1596 ;; ignore httpx tests for now.
1597 #~(list "--ignore=tests/clients/test_httpx/")
1598 #:phases
1599 #~(modify-phases %standard-phases
1600 (add-before 'check 'pre-check
1601 (lambda _
1602 (setenv "DJANGO_SETTINGS_MODULE" "tests.django_settings"))))))
1603 (propagated-inputs
1604 (list python-cryptography
1605 ;; [optional]
1606 python-anyio
1607 python-asgiref
1608 python-cachelib
1609 python-django
1610 python-flask
1611 python-flask-sqlalchemy
1612 python-httpx
1613 python-requests
1614 python-starlette))
1615 (native-inputs
1616 (list python-pytest
1617 python-pytest-asyncio
1618 python-pytest-django
1619 python-setuptools))
1620 (home-page "https://authlib.org/")
1621 (synopsis "Build OAuth and OpenID Connect servers and clients")
1622 (description
1623 "This is a Python library for building OAuth and OpenID Connect servers
1624and clients.")
1625 (license license:bsd-3)))
1626
1627(define-public python-autobahn
1628 (package
1629 (name "python-autobahn")
1630 (version "25.11.1")
1631 (source
1632 (origin
1633 (method url-fetch)
1634 (uri (pypi-uri "autobahn" version))
1635 (sha256
1636 (base32
1637 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
1638 (build-system pyproject-build-system)
1639 (arguments
1640 (list
1641 ;; The tests fail to run:
1642 ;; https://github.com/crossbario/autobahn-python/issues/1117
1643 #:tests? #f
1644 #:phases #~(modify-phases %standard-phases
1645 (add-after 'unpack 'relax-zope-interface
1646 (lambda _
1647 ;; python-zope-interface is a world rebuild package
1648 ;; and our one-digit lower minor version seems to be
1649 ;; fine.
1650 (substitute* "setup.py"
1651 (("zope.interface>=5.2.0")
1652 "zope.interface>=5.1.0"))))
1653 (add-after 'unpack 'strip-xbr
1654 (lambda _
1655 ;; Strip new XBR feature which isn't available in Guix.
1656 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
1657 (native-inputs (list python-setuptools python-wheel))
1658 (propagated-inputs (list python-cbor2
1659 python-cryptography
1660 python-hyperlink
1661 python-msgpack
1662 python-py-ubjson
1663 python-twisted
1664 python-txaio
1665 python-ujson))
1666 (home-page "https://github.com/crossbario/autobahn-python/")
1667 (synopsis "Web Application Messaging Protocol implementation")
1668 (description "This package provides an implementation of the @dfn{Web Application
1669Messaging Protocol} (WAMP). WAMP connects components in distributed
1670applications using Publish and Subscribe (PubSub) and routed Remote Procedure
1671Calls (rRPC). It is ideal for distributed, multi-client and server applications
1672such as IoT applications or multi-user database-driven business applications.")
1673 (license license:expat)))
1674
1675(define-public python-aws-sam-translator
1676 (package
1677 (name "python-aws-sam-translator")
1678 (version "1.107.0")
1679 (source
1680 (origin
1681 (method git-fetch) ; no tests in PyPI release
1682 (uri (git-reference
1683 (url "https://github.com/aws/serverless-application-model")
1684 (commit (string-append "v" version))))
1685 (file-name (git-file-name name version))
1686 (sha256
1687 (base32 "0bx9ha9k6zx6gl1hsgm6cpq4xrfn604v2g1d5dh2d5zq0463gwfq"))))
1688 (build-system pyproject-build-system)
1689 (arguments
1690 (list
1691 #:test-flags
1692 #~(list "--numprocesses" (number->string (parallel-job-count))
1693 "--ignore=tests/bin/test_public_interface.py"
1694 "tests")
1695 #:phases
1696 #~(modify-phases %standard-phases
1697 (add-before 'check 'pre-check
1698 (lambda _
1699 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
1700 (native-inputs
1701 (list python-pytest
1702 python-pytest-rerunfailures
1703 python-pytest-xdist
1704 python-parameterized
1705 python-pyyaml
1706 python-setuptools))
1707 (propagated-inputs
1708 (list python-boto3
1709 python-jsonschema
1710 python-pydantic
1711 python-typing-extensions))
1712 (home-page "https://github.com/aws/serverless-application-model")
1713 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
1714 (description
1715 "AWS SAM Translator is a library that transform @dfn{Serverless Application
1716Model} (SAM) templates into AWS CloudFormation templates.")
1717 (license license:asl2.0)))
1718
1719(define-public python-aws-xray-sdk
1720 (package
1721 (name "python-aws-xray-sdk")
1722 (version "2.14.0")
1723 (home-page "https://github.com/aws/aws-xray-sdk-python")
1724 (source (origin
1725 (method git-fetch)
1726 (uri (git-reference (url home-page) (commit version)))
1727 (file-name (git-file-name name version))
1728 (sha256
1729 (base32
1730 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
1731 (build-system pyproject-build-system)
1732 (arguments
1733 (list
1734 #:test-flags
1735 '(list ;; Tries to connect to external network resources
1736 "--ignore=tests/ext/aiohttp/test_client.py"
1737 "--ignore=tests/ext/httplib/test_httplib.py"
1738 "--ignore=tests/ext/httpx"
1739 "--ignore=tests/ext/requests/test_requests.py"
1740 ;; TODO: How to configure Django for these tests?
1741 "--ignore=tests/ext/django"
1742 ;; These tests require packages not yet in Guix.
1743 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
1744 "--ignore=tests/ext/aiohttp/test_middleware.py"
1745 "--ignore=tests/ext/pg8000/test_pg8000.py"
1746 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
1747 "--ignore=tests/ext/pymysql/test_pymysql.py"
1748 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
1749 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
1750 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
1751 "--ignore=tests/test_async_recorder.py"
1752 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
1753 "--ignore-glob=tests/ext/sqlalchemy*"
1754 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
1755 ;; FIXME: Why is this failing?
1756 "--ignore=tests/test_patcher.py"
1757 "--ignore=tests/test_lambda_context.py")
1758 #:phases
1759 '(modify-phases %standard-phases
1760 (add-before 'check 'pre-check
1761 (lambda _
1762 ;; Allow "import tests.utils" to work as expected.
1763 (setenv "PYTHONPATH" (getcwd)))))))
1764 (native-inputs
1765 (list ;; These are required for the test suite.
1766 python-aiohttp
1767 python-bottle
1768 python-flask
1769 python-flask-sqlalchemy
1770 python-httpx
1771 python-mock
1772 python-pymysql
1773 python-pytest
1774 python-pytest-asyncio-0.26
1775 python-pytest-benchmark
1776 python-setuptools
1777 python-sqlalchemy
1778 python-webtest))
1779 (propagated-inputs
1780 (list python-botocore
1781 python-jsonpickle
1782 python-requests
1783 python-wrapt))
1784 (synopsis "Profile applications on AWS X-Ray")
1785 (description
1786 "The AWS X-Ray SDK for Python enables Python developers to record and
1787emit information from within their applications to the AWS X-Ray service.")
1788 (license license:asl2.0)))
1789
1790(define-public python-awscrt
1791 (package
1792 (name "python-awscrt")
1793 (version "0.36.0")
1794 (source
1795 (origin
1796 (method url-fetch)
1797 (uri (pypi-uri "awscrt" version))
1798 (sha256
1799 (base32 "0jh6niq9kgv0canm11ad8zibywwirdfxg4bqyd8jhaiv3x39h8dd"))))
1800 (build-system pyproject-build-system)
1801 (arguments
1802 (list
1803 #:test-backend #~'unittest
1804 #:test-flags #~(list "discover" "--verbose")
1805 #:phases
1806 #~(modify-phases %standard-phases
1807 (add-after 'unpack 'disable-broken-tests
1808 (lambda _
1809 ;; Disable broken tests. These tests fail because they depend on
1810 ;; specific DNS configuration and/or AWS credentials, which isn't
1811 ;; available in this context.
1812 (substitute* "test/test_auth.py"
1813 (("def test_default_provider")
1814 "def _test_default_provider"))
1815 (substitute* "test/test_aiohttp_client.py"
1816 (("def test_h2_remote_end_stream_ordering")
1817 "def _test_h2_remote_end_stream_ordering")
1818 (("def test_cross_thread_http2_client")
1819 "def _test_cross_thread_http2_client")
1820 (("def test_h2_client")
1821 "def _test_h2_client")
1822 (("def test_h2_manual_write_exception")
1823 "def _test_h2_manual_write_exception"))
1824 (substitute* "test/test_http_client.py"
1825 (("def test_h2_client")
1826 "def _test_h2_client")
1827 (("def test_h2_remote_end_stream_ordering")
1828 "def _test_h2_remote_end_stream_ordering")
1829 (("def test_h2_manual_write_exception")
1830 "def _test_h2_manual_write_exception"))
1831 (substitute* "test/test_s3.py"
1832 (("def test_sanity")
1833 "def _test_sanity")
1834 (("def test_sanity_secure")
1835 "def _test_sanity_secure")
1836 (("def test_wait_shutdown")
1837 "def _test_wait_shutdown"))
1838 (substitute* "test/test_io.py"
1839 ;; This test seems specifically broken. It waits for a shutdown event
1840 ;; from a group of singletons that will never occur because several of
1841 ;; the singleton references are held beyond the lifetime of this test.
1842 (("def test_shutdown_complete_singleton")
1843 "def _test_shutdown_complete_singleton"))))
1844 (add-after 'unpack 'override-cert-bundle-location
1845 (lambda* (#:key inputs #:allow-other-keys)
1846 (let ((bundle (search-input-file inputs
1847 "/etc/ssl/certs/ca-certificates.crt")))
1848 (setenv "SSL_CERT_FILE" bundle)
1849 (substitute* "awscrt/io.py"
1850 (("( +)opt = TlsContextOptions\\(\\)" m indent)
1851 (string-append m "\n"
1852 indent "import os\n"
1853 indent "\
1854opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n"))
1855 (("^( +)self\\.no_certificate_revocation = False" all indent)
1856 (string-append all "\n"
1857 indent "import os as _os\n"
1858 indent "_ca_file = _os.environ.get('SSL_CERT_FILE')\n"
1859 indent "if _ca_file:\n"
1860 indent " self.override_default_trust_store(_read_binary_file(_ca_file))\n")))
1861 (substitute* "test/appexit_http.py"
1862 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
1863 (string-append m indent
1864 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
1865 bundle "')\n")))
1866 (substitute* "test/test_io.py"
1867 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
1868 (string-append m indent
1869 "opt.override_default_trust_store_from_path(None, '"
1870 bundle "')\n"))))))
1871 (add-after 'unpack 'use-system-libraries
1872 (lambda _
1873 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
1874 (inputs (list openssl))
1875 (native-inputs (list cmake-minimal
1876 nss-certs-for-test
1877 python-boto3
1878 python-setuptools
1879 python-websockets
1880 python-h2))
1881 (home-page "https://github.com/awslabs/aws-crt-python")
1882 (synopsis "Common runtime for AWS Python projects")
1883 (description
1884 "This package provides a common runtime for AWS Python projects.")
1885 (license license:asl2.0)))
1886
1887(define-public python-azure-common
1888 (package
1889 (name "python-azure-common")
1890 (version "1.1.28")
1891 (source
1892 (origin
1893 (method url-fetch)
1894 (uri (pypi-uri "azure-common" version ".zip"))
1895 (sha256
1896 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
1897 (build-system pyproject-build-system)
1898 (arguments
1899 (list #:tests? #f)) ;no tests in PyPI archive
1900 (propagated-inputs (list python-azure-nspkg))
1901 (native-inputs (list python-setuptools unzip))
1902 (home-page "https://github.com/Azure/azure-sdk-for-python")
1903 (synopsis "Microsoft Azure Client library for Python")
1904 (description "This package provides the Microsoft Azure Client library for
1905Python.")
1906 (license license:expat)))
1907
1908(define-public python-azure-core
1909 (package
1910 (name "python-azure-core")
1911 (version "1.32.0")
1912 (source
1913 (origin
1914 (method url-fetch)
1915 (uri (pypi-uri "azure_core" version))
1916 (sha256
1917 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
1918 (build-system pyproject-build-system)
1919 (arguments
1920 (list
1921 #:test-flags
1922 `(list ;; This fails because devtools_testutils doesn't exist.
1923 "--ignore=tests/test_connection_string_parsing.py"
1924 ;; These all need network access.
1925 "--ignore=samples"
1926 "--ignore=tests/async_tests/test_streaming_async.py"
1927 "--ignore=tests/test_streaming.py"
1928 "-m" "not asyncio and not live_test_only"
1929 "-k" ,(string-append
1930 "not test_decompress_plain_no_header"
1931 " and not test_compress_plain_no_header"
1932 " and not test_decompress_compressed_no_header"
1933 " and not test_requests_socket_timeout"))
1934 #:phases
1935 #~(modify-phases %standard-phases
1936 (add-before 'check 'add-test-pythonpath
1937 (lambda* (#:key tests? #:allow-other-keys)
1938 (when tests?
1939 (setenv "PYTHONPATH"
1940 (string-append
1941 (getcwd) "/tests/testserver_tests/coretestserver:"
1942 (getenv "GUIX_PYTHONPATH")))))))))
1943 (propagated-inputs
1944 (list python-aiohttp
1945 python-requests
1946 python-six
1947 python-typing-extensions))
1948 (native-inputs
1949 (list python-flask
1950 python-pytest-8
1951 python-pytest-aiohttp
1952 python-pytest-asyncio
1953 python-pytest-trio
1954 python-setuptools
1955 python-wheel))
1956 (home-page "https://github.com/Azure/azure-sdk-for-python")
1957 (synopsis "Microsoft Azure Core library for Python")
1958 (description "This package provides the Microsoft Azure Core library for
1959Python.")
1960 (license license:expat)))
1961
1962(define-public python-azure-nspkg
1963 (package
1964 (name "python-azure-nspkg")
1965 (version "3.0.2")
1966 (source
1967 (origin
1968 (method url-fetch)
1969 (uri (pypi-uri "azure-nspkg" version ".zip"))
1970 (sha256
1971 (base32
1972 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
1973 (build-system pyproject-build-system)
1974 (arguments (list #:tests? #f)) ;no tests in package
1975 (native-inputs (list unzip python-setuptools))
1976 (home-page "https://github.com/Azure/azure-sdk-for-python")
1977 (synopsis "Azure namespace internals")
1978 (description
1979 "This package is an internal Azure namespace package.")
1980 (license license:expat)))
1981
1982(define-public python-azure-storage-blob
1983 (package
1984 (name "python-azure-storage-blob")
1985 (version "12.27.0")
1986 (source
1987 (origin
1988 (method url-fetch)
1989 (uri (pypi-uri "azure_storage_blob" version))
1990 (sha256
1991 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
1992 (build-system pyproject-build-system)
1993 (arguments
1994 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
1995 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
1996 ;; it hard to package in Guix.
1997 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
1998 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
1999 (list #:tests? #f))
2000 (native-inputs
2001 (list python-setuptools))
2002 (propagated-inputs
2003 (list python-azure-core
2004 python-cryptography
2005 python-isodate
2006 python-typing-extensions))
2007 (home-page "https://github.com/Azure/azure-sdk-for-python/")
2008 (synopsis "Microsoft Azure Blob Storage client library for Python")
2009 (description "This package provides the Microsoft Azure Blob Storage
2010Client Library for Python.")
2011 (license license:expat)))
2012
2013(define-public python-azure-storage-file-datalake
2014 (package
2015 (name "python-azure-storage-file-datalake")
2016 (version "12.22.0")
2017 (source
2018 (origin
2019 (method url-fetch)
2020 (uri (pypi-uri "azure_storage_file_datalake" version))
2021 (sha256
2022 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
2023 (build-system pyproject-build-system)
2024 (arguments
2025 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
2026 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
2027 ;; it hard to package in Guix.
2028 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
2029 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
2030 (list #:tests? #f))
2031 (native-inputs
2032 (list python-setuptools))
2033 (propagated-inputs
2034 (list python-azure-core
2035 python-azure-storage-blob
2036 python-isodate
2037 python-typing-extensions))
2038 (home-page "https://github.com/Azure/azure-sdk-for-python")
2039 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
2040 (description
2041 "This package provides the Microsoft Azure File @code{DataLake} Storage
2042Client Library for Python.")
2043 (license license:expat)))
2044
2045(define-public python-azure-storage-nspkg
2046 (package
2047 (name "python-azure-storage-nspkg")
2048 (version "3.1.0")
2049 (source
2050 (origin
2051 (method url-fetch)
2052 (uri (pypi-uri "azure-storage-nspkg" version))
2053 (sha256
2054 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
2055 (build-system pyproject-build-system)
2056 (arguments
2057 (list #:tests? #f)) ;no tests in PyPI archive
2058 (native-inputs (list python-setuptools))
2059 (propagated-inputs (list python-azure-nspkg))
2060 (home-page "https://github.com/Azure/azure-storage-python")
2061 (synopsis "Microsoft Azure Storage Namespace package")
2062 (description
2063 "This project provides a client library in Python that makes it easy to
2064communicate with Microsoft Azure Storage services.")
2065 (license license:expat)))
2066
2067(define-public python-behave-web-api
2068 (package
2069 (name "python-behave-web-api")
2070 (version "2.3.0")
2071 (source
2072 (origin
2073 (method git-fetch)
2074 (uri (git-reference
2075 (url "https://github.com/jefersondaniel/behave-web-api")
2076 (commit (string-append "v" version))))
2077 (file-name (git-file-name name version))
2078 (sha256
2079 (base32 "1r8yx8gb5m599cpdqfvk6z9ax3qj26fpvczdr84z8jya0dxfch4p"))))
2080 (build-system pyproject-build-system)
2081 (native-inputs
2082 (list python-pytest
2083 python-setuptools))
2084 (propagated-inputs
2085 (list behave
2086 python-requests))
2087 (home-page "https://github.com/jefersondaniel/behave-web-api")
2088 (synopsis "Provides testing for JSON APIs with Behave for Python")
2089 (description "This package provides testing utility modules for testing
2090JSON APIs with Behave.")
2091 (license license:expat)))
2092
2093(define-public python-beren
2094 (package
2095 (name "python-beren")
2096 (version "0.7.0")
2097 (source
2098 (origin
2099 (method git-fetch)
2100 (uri (git-reference
2101 (url "https://github.com/teffalump/beren")
2102 (commit (string-append "v" version))))
2103 (file-name (git-file-name name version))
2104 (sha256
2105 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
2106 (build-system pyproject-build-system)
2107 (arguments
2108 ;; The test tries to open a connection to a remote server.
2109 `(#:tests? #f))
2110 (native-inputs (list python-setuptools))
2111 (propagated-inputs (list python-apiron))
2112 (home-page "https://github.com/teffalump/beren")
2113 (synopsis "REST client for Orthanc DICOM servers")
2114 (description
2115 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
2116 (license license:gpl3+)))
2117
2118(define-public python-betamax
2119 (package
2120 (name "python-betamax")
2121 (version "0.9.0")
2122 (source
2123 (origin
2124 (method url-fetch)
2125 (uri (pypi-uri "betamax" version))
2126 (sha256
2127 (base32
2128 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
2129 (build-system pyproject-build-system)
2130 (arguments
2131 (list
2132 #:test-flags
2133 #~(list "-k" (string-join
2134 ;; Tests require network access to http://httpbin.org/get.
2135 (list "not test_creates_new_cassettes"
2136 "test_placeholders_work"
2137 "test_post_start_hook"
2138 "test_pre_stop_hook"
2139 "test_preplayback_hook"
2140 "test_prerecord_hook"
2141 "test_prerecord_ignoring_hook"
2142 "test_records_new_events_with_existing_cassette"
2143 "test_records_new_interaction"
2144 "test_records_new_interactions"
2145 "test_replaces_old_interactions"
2146 "test_replays_response_from_cassette"
2147 "test_requests_with_json_body"
2148 "test_saves_content_as_gzip"
2149 "test_unicode_is_saved_properly")
2150 " and not "))))
2151 (native-inputs
2152 (list nss-certs-for-test
2153 python-pytest
2154 python-setuptools))
2155 (propagated-inputs
2156 (list python-requests))
2157 (home-page "https://github.com/sigmavirus24/betamax")
2158 (synopsis "Record HTTP interactions with python-requests")
2159 (description
2160 "Betamax will record your test suite's HTTP interactions and replay them
2161during future tests. It is designed to work with python-requests.")
2162 (license license:expat)))
2163
2164(define-public python-betamax-matchers
2165 (package
2166 (name "python-betamax-matchers")
2167 (version "0.4.0")
2168 (source
2169 (origin
2170 (method git-fetch)
2171 (uri (git-reference
2172 (url "https://github.com/sigmavirus24/betamax_matchers")
2173 (commit version)))
2174 (file-name (git-file-name name version))
2175 (sha256
2176 (base32 "0lyg3r91hwfvavyi5k6sddcla37igigycfv1mx40c32byqwl6pq5"))))
2177 (build-system pyproject-build-system)
2178 (native-inputs (list python-pytest python-setuptools))
2179 (propagated-inputs (list python-betamax python-requests-toolbelt))
2180 (home-page "https://github.com/sigmavirus24/betamax_matchers")
2181 (synopsis "VCR imitation for python-requests")
2182 (description "@code{betamax-matchers} provides a set of Matchers for
2183Betamax.")
2184 (license license:asl2.0)))
2185
2186(define-public python-betamax-serializers
2187 (package
2188 (name "python-betamax-serializers")
2189 (version "0.2.1")
2190 (source
2191 (origin
2192 (method git-fetch)
2193 (uri (git-reference
2194 (url "https://gitlab.com/betamax/serializers")
2195 (commit version)))
2196 (file-name (git-file-name name version))
2197 (sha256
2198 (base32 "1p2l5w3vwvjacs2ndahgcjq55qb53i37p8mz1zh85pjxyszdyw2l"))))
2199 (build-system pyproject-build-system)
2200 (arguments (list #:tests? #f)) ; No tests.
2201 (native-inputs (list python-setuptools))
2202 (propagated-inputs (list python-betamax python-pyyaml))
2203 (synopsis "Set of third-party serializers for Betamax")
2204 (description
2205 "Betamax-Serializers are an experimental set of Serializers for Betamax
2206that may possibly end up in the main package.")
2207 (home-page "https://gitlab.com/betamax/serializers")
2208 (license license:asl2.0)))
2209
2210(define-public python-blacksheep
2211 (package
2212 (name "python-blacksheep")
2213 (version "2.6.3")
2214 (source
2215 (origin
2216 (method git-fetch)
2217 (uri (git-reference
2218 (url "https://github.com/Neoteroi/BlackSheep")
2219 (commit (string-append "v" version))))
2220 (file-name (git-file-name name version))
2221 (sha256
2222 (base32 "1k6yqsqnh6nnhi8z5v2yqpxs7qsk35zwd7gcr7cdh825f2vrl7js"))))
2223 (build-system pyproject-build-system)
2224 (arguments
2225 (list
2226 ;; tests: 1821 passed
2227 ;;
2228 ;; Run all unit tests, but do not run integration tests from `itests`
2229 ;; directory.
2230 #:test-flags
2231 #~(list "tests")
2232 #:phases
2233 #~(modify-phases %standard-phases
2234 (add-before 'build 'cythonize
2235 (lambda _
2236 (with-directory-excursion "blacksheep"
2237 (for-each (lambda (file)
2238 (invoke "cython" "-3" file "-I" "."))
2239 (find-files "." ".*\\.pyx$"))))))))
2240 (native-inputs
2241 (list nss-certs-for-test
2242 python-cython
2243 python-defusedxml
2244 python-flask
2245 python-jinja2
2246 python-pydantic
2247 python-pyjwt
2248 python-pytest
2249 python-pytest-asyncio
2250 python-setuptools
2251 python-starlette))
2252 (propagated-inputs
2253 (list python-certifi
2254 python-essentials
2255 python-essentials-openapi
2256 python-guardpost
2257 python-httptools
2258 python-rodi
2259 python-itsdangerous))
2260 (home-page "https://github.com/Neoteroi/BlackSheep")
2261 (synopsis "Asynchronous framework to build event based web applications")
2262 (description
2263 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
2264
2265The framework offers
2266@itemize
2267@item A rich code API, based on dependency injection and inspired by Flask and
2268ASP.NET Core.
2269@item A typing-friendly codebase, which enables a comfortable development
2270experience thanks to hints when coding with IDEs.
2271@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
2272and JSON.
2273@item A cross-platform framework, using the most modern versions of Python.
2274@item Good performance.
2275@end itemize")
2276 (license license:expat)))
2277
2278(define-public python-bleach
2279 (package
2280 (name "python-bleach")
2281 (version "6.3.0")
2282 (source
2283 (origin
2284 (method git-fetch)
2285 (uri (git-reference
2286 (url "https://github.com/mozilla/bleach")
2287 (commit (string-append "v" version))))
2288 (file-name (git-file-name name version))
2289 (sha256
2290 (base32 "02abk9ixn010sqpbdsd7nxms0gv4prwv6d3nplb8giq85lpn1kkb"))
2291 (snippet
2292 #~(begin
2293 (use-modules (guix build utils))
2294 (substitute* (find-files "." "\\.py$")
2295 (("bleach\\._vendor\\.html5lib") "html5lib"))
2296 (delete-file-recursively "bleach/_vendor/html5lib")))))
2297 (build-system pyproject-build-system)
2298 (arguments
2299 (list
2300 ;; tests: 448 passed, 1 deselected, 3 xfailed
2301 #:test-flags
2302 #~(list (string-append "--deselect=tests/test_clean.py::"
2303 "test_self_closing_tags_self_close[wbr]"))
2304 #:phases
2305 #~(modify-phases %standard-phases
2306 (add-after 'unpack 'relax-requirements
2307 (lambda _
2308 ;; "tinycss2>=1.1.0,<1.5"
2309 ;; The 'sanity-check of python-nbclassic fails without this.
2310 (substitute* "setup.py"
2311 (("\"tinycss2.*") "")))))))
2312 (native-inputs
2313 (list python-pytest
2314 python-setuptools))
2315 (propagated-inputs
2316 (list python-html5lib
2317 python-tinycss2
2318 python-webencodings))
2319 (home-page "https://github.com/mozilla/bleach")
2320 (synopsis "Whitelist-based HTML-sanitizing tool")
2321 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
2322 (license license:asl2.0)))
2323
2324(define-public python-bottle
2325 (package
2326 (name "python-bottle")
2327 (version "0.13.4")
2328 (source
2329 (origin
2330 (method url-fetch)
2331 (uri (pypi-uri "bottle" version))
2332 (sha256
2333 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
2334 (build-system pyproject-build-system)
2335 (native-inputs (list python-pytest python-setuptools))
2336 (home-page "https://bottlepy.org/")
2337 (synopsis "WSGI framework for small web-applications")
2338 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
2339 (license license:expat)))
2340
2341(define-public python-branca
2342 (package
2343 (name "python-branca")
2344 (version "0.7.2")
2345 (source
2346 (origin
2347 (method git-fetch) ; no tests in PyPI
2348 (uri (git-reference
2349 (url "https://github.com/python-visualization/branca")
2350 (commit (string-append "v" version))))
2351 (file-name (git-file-name name version))
2352 (sha256
2353 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
2354 (build-system pyproject-build-system)
2355 (arguments
2356 ;; This file requires Selenium.
2357 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
2358 ;; This test passes but is very slow.
2359 "-k" "not test_color_brewer_extendability")))
2360 (propagated-inputs (list python-jinja2))
2361 (native-inputs
2362 (list python-numpy
2363 python-pytest
2364 python-setuptools
2365 python-setuptools-scm
2366 python-wheel))
2367 (home-page "https://github.com/python-visualization/branca")
2368 (synopsis "Generate complex HTML+JS pages with Python")
2369 (description "This library is a spinoff from @code{folium} that would host
2370the non-map-specific features. It can be used to generate HTML + JS.")
2371 (license license:expat)))
2372
2373(define-public python-btrees
2374 (package
2375 (name "python-btrees")
2376 (version "6.1")
2377 (source
2378 (origin
2379 (method git-fetch)
2380 (uri (git-reference
2381 (url "https://github.com/zopefoundation/BTrees")
2382 (commit version)))
2383 (file-name (git-file-name name version))
2384 (sha256
2385 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
2386 (build-system pyproject-build-system)
2387 (arguments
2388 (list
2389 #:phases
2390 #~(modify-phases %standard-phases
2391 (replace 'check
2392 (lambda* (#:key tests? #:allow-other-keys)
2393 (if tests?
2394 (invoke "zope-testrunner" "--test-path=src")
2395 (format #t "test suite not run~%")))))))
2396 (propagated-inputs (list python-persistent python-zope-interface))
2397 (native-inputs (list python-persistent python-transaction
2398 python-zope-testrunner python-setuptools))
2399 (home-page "https://github.com/zopefoundation/BTrees")
2400 (synopsis "Scalable persistent object containers")
2401 (description
2402 "This package contains a set of persistent object containers built around a
2403modified BTree data structure. The trees are optimized for use inside ZODB's
2404\"optimistic concurrency\" paradigm, and include explicit resolution of
2405conflicts detected by that mechanism.")
2406 (license license:zpl2.1)))
2407
2408(define-public python-cachecontrol
2409 (package
2410 (name "python-cachecontrol")
2411 (version "0.14.1")
2412 (source
2413 (origin
2414 (method git-fetch)
2415 (uri (git-reference
2416 (url "https://github.com/ionrock/cachecontrol")
2417 (commit (string-append "v" version))))
2418 (file-name (git-file-name name version))
2419 (sha256
2420 (base32
2421 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
2422 (build-system pyproject-build-system)
2423 (propagated-inputs
2424 (list python-filelock python-msgpack python-requests))
2425 (native-inputs
2426 (list python-cherrypy python-flit-core python-pytest))
2427 (home-page "https://github.com/ionrock/cachecontrol")
2428 (synopsis "The httplib2 caching algorithms for use with requests")
2429 (description "CacheControl is a port of the caching algorithms in
2430@code{httplib2} for use with @code{requests} session objects.")
2431 (license license:asl2.0)))
2432
2433(define-public python-canvasapi
2434 (package
2435 (name "python-canvasapi")
2436 (version "3.4.0")
2437 (source (origin
2438 (method git-fetch)
2439 (uri (git-reference
2440 (url "https://github.com/ucfopen/canvasapi")
2441 (commit (string-append "v" version))))
2442 (file-name (git-file-name name version))
2443 (sha256
2444 (base32
2445 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
2446 (build-system pyproject-build-system)
2447 (propagated-inputs (list python-arrow python-pytz python-requests))
2448 (native-inputs (list python-pytest
2449 python-requests-mock
2450 python-setuptools
2451 python-urllib3))
2452 (home-page "https://github.com/ucfopen/canvasapi")
2453 (synopsis "API wrapper for the Canvas LMS")
2454 (description
2455 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
2456The library enables developers to programmatically manage Canvas courses,
2457users, gradebooks, and more.")
2458 (license license:expat)))
2459
2460(define-public python-cbor2
2461 (package
2462 (name "python-cbor2")
2463 (version "5.4.2.post1")
2464 (source
2465 (origin
2466 (method url-fetch)
2467 (uri (pypi-uri "cbor2" version))
2468 (sha256
2469 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
2470 (build-system pyproject-build-system)
2471 (native-inputs
2472 (list python-pytest python-setuptools python-setuptools-scm))
2473 (home-page "https://github.com/agronholm/cbor2")
2474 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
2475 (description "This Python library provides encoding and decoding for the
2476Concise Binary Object
2477Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
24788949}) serialization format. The specification is fully compatible with the
2479original RFC 7049. Among its features are:
2480@itemize
2481@item Simple API like the @code{json} or @code{pickle} modules.
2482@item Support many CBOR tags with stdlib objects.
2483@item Generic tag decoding.
2484@item Shared value references including cyclic references.
2485@item String references compact encoding with repeated strings replaced with
2486indices.
2487@item Optional C module backend tested on big- and little-endian architectures.
2488@item Extensible tagged value handling using tag_hook and object_hook on
2489decode and default on encode.
2490@end itemize")
2491 (license license:expat)))
2492
2493(define-public python-cfn-lint
2494 (package
2495 (name "python-cfn-lint")
2496 (version "1.38.1")
2497 (source
2498 (origin
2499 (method git-fetch)
2500 (uri (git-reference
2501 (url "https://github.com/aws-cloudformation/cfn-lint")
2502 (commit (string-append "v" version))))
2503 (file-name (git-file-name name version))
2504 (sha256
2505 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
2506 (build-system pyproject-build-system)
2507 (arguments
2508 (list
2509 ;; tests: 2136 passed, 11 deselected, 1 warning
2510 #:test-flags
2511 #~(list "--ignore=test/integration/"
2512 "-k" (string-join
2513 ;; Tests failing on doctest or comparing diff.
2514 (list "not test_build_graph"
2515 "test_good_template"
2516 "test_success_run"
2517 "test_update_docs"
2518 ;; ImportError: Missing optional dependencies sarif
2519 "test_sarif_formatter")
2520 " and not "))
2521 #:phases
2522 #~(modify-phases %standard-phases
2523 (add-after 'unpack 'remove-deprecated
2524 (lambda _
2525 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
2526 (("deprecated\": \"2025")
2527 "deprecated\": \"2125")))))))
2528 (native-inputs
2529 (list python-defusedxml
2530 python-pydot
2531 python-pytest
2532 python-setuptools))
2533 (propagated-inputs
2534 (list python-aws-sam-translator
2535 python-jsonpatch
2536 python-networkx
2537 python-pyyaml
2538 python-regex
2539 python-sympy
2540 python-typing-extensions
2541 ;; [optional]
2542 python-junit-xml))
2543 (home-page "https://github.com/aws-cloudformation/cfn-lint")
2544 (synopsis "Validate CloudFormation templates")
2545 (description
2546 "This package lets you validate CloudFormation YAML/JSON templates against
2547the CloudFormation spec and additional checks. Includes checking valid values
2548for resource properties and best practices.")
2549 (license license:expat)))
2550
2551(define-public python-chalice
2552 (package
2553 (name "python-chalice")
2554 (version "1.33.0")
2555 (source
2556 (origin
2557 (method git-fetch)
2558 (uri (git-reference
2559 (url "https://github.com/aws/chalice")
2560 (commit version)))
2561 (file-name (git-file-name name version))
2562 (sha256
2563 (base32 "06vmwjhksb3nck1wpf7dj9hfnvl45fzzrpy9h1pij5aipj17773k"))))
2564 (build-system pyproject-build-system)
2565 (arguments
2566 (list
2567 ;; tests: 1387 passed, 16 skipped, 1 deselected, 29 warnings
2568 #:test-flags
2569 #~(list "--ignore=chalice/templates"
2570 "--ignore=docs/source/samples/todo-app/code/tests/test_db.py"
2571 ;; Network access and extra credentials are required.
2572 "--ignore=tests/aws/test_features.py"
2573 "--ignore=tests/aws/test_websockets.py"
2574 "--ignore=tests/integration/test_package.py"
2575 (string-append "--deselect=tests/functional/test_awsclient.py"
2576 "::TestUpdateDomainName"
2577 "::test_update_domain_name_failed"))))
2578 (native-inputs
2579 (list python-boto3
2580 python-pytest
2581 python-requests
2582 python-setuptools
2583 python-websocket-client))
2584 (propagated-inputs
2585 (list python-botocore
2586 python-click
2587 python-inquirer ;XXX: move to (gnu packages python-xyz)
2588 python-jmespath
2589 python-pip ;hard dependency
2590 python-pyyaml
2591 python-six)) ;hard dependency
2592 (home-page "https://github.com/aws/chalice")
2593 (synopsis "Python Serverless Microframework")
2594 (description
2595 "Chalice is a Python framework for building serverless applications with
2596AWS Lambda service, enabling quick prototyping and deployment.")
2597 (license license:asl2.0)))
2598
2599(define-public python-cheroot
2600 (package
2601 (name "python-cheroot")
2602 (version "11.1.2")
2603 (source
2604 (origin
2605 (method git-fetch)
2606 (uri (git-reference
2607 (url "https://github.com/cherrypy/cheroot")
2608 (commit (string-append "v" version))))
2609 (file-name (git-file-name name version))
2610 (sha256
2611 (base32 "02rhci01m5fcn8mqpvq3c35rs4n28gxlfvfw2if2f85rgwrji8y8"))
2612 ;; TODO: Remove this patch on next release.
2613 (patches (search-patches "python-cheroot-openssl-test.patch"))))
2614 (build-system pyproject-build-system)
2615 (arguments
2616 (list
2617 ;; tests: 150 passed, 3 xfailed, 7 warnings
2618 #:test-flags
2619 ;; To prevent dependency on python-pypytools which depends on python-py
2620 ;; both marked as deprecated by maintainers, see:
2621 ;; <https://codeberg.org/guix/guix/issues/7475>.
2622 #~(list "--ignore=cheroot/test/test_server.py")
2623 #:phases
2624 #~(modify-phases %standard-phases
2625 (add-after 'unpack 'fix-pytest-config
2626 (lambda _
2627 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
2628 (delete-file "pytest.ini"))))))
2629 (native-inputs
2630 (list python-portend
2631 python-pyopenssl
2632 python-pytest
2633 python-pytest-mock
2634 python-requests
2635 python-requests-toolbelt
2636 python-setuptools
2637 python-setuptools-scm
2638 python-trustme))
2639 (propagated-inputs
2640 (list python-jaraco-functools
2641 python-more-itertools))
2642 (home-page "https://cheroot.cherrypy.dev")
2643 (synopsis "Highly-optimized, pure-python HTTP server")
2644 (description
2645 "Cheroot is a high-performance, pure-Python HTTP server.")
2646 (license license:bsd-3)))
2647
2648(define-public python-cherrypy
2649 (package
2650 (name "python-cherrypy")
2651 (properties '((commit . "1f75bc9eed8e0e385f64f368bd69f58d96fb8c2b")
2652 (revision . "0")))
2653 (version (git-version "18.10.0"
2654 (assoc-ref properties 'revision)
2655 (assoc-ref properties 'commit)))
2656 (source
2657 (origin
2658 (method git-fetch)
2659 (uri (git-reference
2660 (url "https://github.com/cherrypy/cherrypy")
2661 (commit (assoc-ref properties 'commit))))
2662 (file-name (git-file-name name version))
2663 (sha256
2664 (base32 "1l01a4sbfm42s5xp6ngphgqf0yb65ksqbsb27kznvybblyaxfa9p"))))
2665 (build-system pyproject-build-system)
2666 (arguments
2667 (list
2668 ;; tests: 288 passed, 9 skipped, 1 xfailed, 2 xpassed, 15 warnings
2669 #:phases
2670 #~(modify-phases %standard-phases
2671 (add-after 'unpack 'fix-pytest-config
2672 (lambda _
2673 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
2674 (delete-file "pytest.ini")))
2675 (add-after 'unpack 'patch-pyproject
2676 (lambda _
2677 (substitute* "pyproject.toml"
2678 (("\"cherrypy.scaffold\",")
2679 (string-join
2680 (list "\"cherrypy.scaffold\""
2681 "\"cherrypy._private_api\""
2682 "\"cherrypy._private_api.compat\",")
2683 ",\n "))))))))
2684 (propagated-inputs
2685 (list python-cheroot
2686 python-filelock
2687 python-jaraco-collections
2688 python-more-itertools
2689 python-portend))
2690 (native-inputs
2691 (list python-path
2692 python-pytest
2693 python-pytest-services
2694 python-requests
2695 python-requests-toolbelt
2696 python-setuptools
2697 python-setuptools-scm))
2698 (home-page "https://www.cherrypy.dev")
2699 (synopsis "Object-Oriented HTTP framework")
2700 (description
2701 "CherryPy is a pythonic, object-oriented web framework. It helps in
2702building web applications in the same way any other object-oriented Python
2703program would be built.")
2704 (license license:bsd-3)))
2705
2706(define-public python-cloud-init
2707 (package
2708 (name "python-cloud-init")
2709 (version "24.2")
2710 (source
2711 (origin
2712 (method git-fetch)
2713 (uri (git-reference
2714 (url "https://github.com/canonical/cloud-init")
2715 (commit version)))
2716 (file-name (git-file-name name version))
2717 (sha256
2718 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
2719 (build-system pyproject-build-system)
2720 (arguments
2721 (list
2722 #:test-flags
2723 '(list
2724 ;; This requires usermod
2725 "--ignore=tests/unittests/distros/test_create_users.py"
2726 ;; This writes to /var
2727 "--ignore=tests/unittests/net/test_dhcp.py"
2728 "-k"
2729 (string-append
2730 ;; This test messes with PATH, so it cannot find mkdir
2731 "not test_path_env_gets_set_from_main"
2732 " and not test_apt_configure_sources_list_"
2733 ;; These all fail because /bin/sh doesn't exist. We cannot patch
2734 ;; this because the generated scripts must use /bin/sh as they are
2735 ;; supposed to be run on minimal systems.
2736 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
2737 " and not test_handler_runs_bootcmd_script_with_error"
2738 " and not test_subp_combined_stderr_stdout"
2739 " and not test_handle_part"))
2740 #:phases
2741 #~(modify-phases %standard-phases
2742 (add-after 'unpack 'patch-references
2743 (lambda _
2744 (substitute* "tests/unittests/cmd/test_clean.py"
2745 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
2746 (add-after 'install 'move-files
2747 (lambda* (#:key inputs outputs #:allow-other-keys)
2748 (for-each (lambda (dir)
2749 (let ((source (string-append (site-packages inputs outputs) "/" dir))
2750 (target (string-append #$output "/" (basename dir))))
2751 (copy-recursively source target)
2752 (delete-file-recursively source)))
2753 (list "etc" "lib" "usr/lib" "usr/share")))))))
2754 (propagated-inputs
2755 (list python-configobj
2756 python-jinja2
2757 python-jsonpatch
2758 python-jsonschema
2759 python-netifaces
2760 python-oauthlib
2761 python-pyserial
2762 python-pyyaml
2763 python-responses))
2764 (native-inputs
2765 (list procps ;for ps when running tests
2766 python-pytest
2767 python-pytest-mock
2768 python-passlib
2769 python-setuptools
2770 python-wheel))
2771 (home-page "https://github.com/canonical/cloud-init")
2772 (synopsis "Cloud instance initialization tools")
2773 (description
2774 "Cloud-init is the multi-distribution method for cross-platform cloud
2775instance initialization. It is supported across all major public cloud
2776providers, provisioning systems for private cloud infrastructure, and
2777bare-metal installations.")
2778 ;; Either license can be chosen
2779 (license (list license:asl2.0 license:gpl3))))
2780
2781(define-public python-cloudpathlib
2782 (package
2783 (name "python-cloudpathlib")
2784 (version "0.23.0")
2785 (source
2786 (origin
2787 (method git-fetch)
2788 (uri (git-reference
2789 (url "https://github.com/drivendataorg/cloudpathlib")
2790 (commit (string-append "v" version))))
2791 (file-name (git-file-name name version))
2792 (sha256
2793 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
2794 (build-system pyproject-build-system)
2795 (arguments
2796 (list
2797 ;; tests: 977 passed, 15 skipped, 8642 warnings
2798 #:test-flags
2799 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
2800 ;; TODO: Package azure-identity (required for this file)
2801 "--ignore=tests/test_azure_specific.py"
2802 ;; TypeError: Retry.__init__() got an unexpected keyword
2803 ;; argument 'timeout'
2804 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")))
2805 (native-inputs
2806 (list ;; python-azure-identity
2807 python-dotenv
2808 python-flit-core
2809 python-psutil
2810 python-pydantic
2811 python-pytest
2812 python-pytest-cases
2813 python-pytest-reportlog
2814 python-pytest-xdist
2815 python-shortuuid
2816 python-tenacity))
2817 (propagated-inputs
2818 (list python-azure-storage-blob
2819 python-azure-storage-file-datalake
2820 python-boto3
2821 python-google-cloud-storage
2822 python-typing-extensions))
2823 (home-page "https://github.com/drivendataorg/cloudpathlib")
2824 (synopsis "Pathlib-style classes for cloud storage services")
2825 (description
2826 "This package provides a Python library with classes that mimic
2827@code{pathlib.Path}'s interface for URIs from different cloud storage
2828services.")
2829 (license license:expat)))
2830
2831(define-public python-cloudscraper
2832 (package
2833 (name "python-cloudscraper")
2834 (version "3.0.0")
2835 (source
2836 (origin
2837 (method git-fetch)
2838 (uri (git-reference
2839 (url "https://github.com/VeNoMouS/cloudscraper")
2840 (commit version)))
2841 (file-name (git-file-name name version))
2842 (sha256
2843 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
2844 (modules '((guix build utils)))
2845 (snippet
2846 '(with-directory-excursion "cloudscraper"
2847 (for-each delete-file
2848 '("captcha/9kw.py" "captcha/anticaptcha.py"))
2849 (substitute* "__init__.py"
2850 ;; Perhaps it's a joke, but don't promote proprietary software.
2851 (("([Th]is feature is not available) in the .*'" _ prefix)
2852 (string-append prefix ".'")))))))
2853 (build-system pyproject-build-system)
2854 (arguments
2855 (list
2856 #:test-flags
2857 #~(list "-k" "not test_403_handling")
2858 #:phases
2859 #~(modify-phases %standard-phases
2860 (add-after 'unpack 'relax-requirements
2861 (lambda _
2862 ;; XXX: Relax brotli dependency.
2863 (substitute* "pyproject.toml"
2864 (("\"brotli>=.*\"")
2865 "\"brotli\""))
2866 ;; XXX: Dependencies, that have not yet been packaged
2867 ;; and cause an import error when included.
2868 (delete-file "cloudscraper/interpreters/v8.py")))
2869 (add-after 'unpack 'fix-references
2870 (lambda _
2871 (substitute* "cloudscraper/interpreters/nodejs.py"
2872 (("'node'")
2873 (string-append "'" (which "node") "'"))))))))
2874 (inputs (list node-lts))
2875 (propagated-inputs
2876 (list python-pycryptodome
2877 python-brotli
2878 python-js2py
2879 python-polling2
2880 python-requests
2881 python-requests-toolbelt
2882 python-responses
2883 python-pyparsing
2884 python-websocket-client))
2885 (native-inputs (list python-pytest python-setuptools))
2886 (home-page "https://github.com/venomous/cloudscraper")
2887 (synopsis "Cloudflare anti-bot bypass")
2888 (description
2889 "This module acts as a webbrowser solving Cloudflare's Javascript
2890challenges.")
2891 (license license:expat)))
2892
2893(define-public python-conda-package-handling
2894 (package
2895 (name "python-conda-package-handling")
2896 (version "2.4.0")
2897 (source
2898 (origin
2899 (method git-fetch)
2900 (uri (git-reference
2901 (url "https://github.com/conda/conda-package-handling/")
2902 (commit version)))
2903 (file-name (git-file-name name version))
2904 (sha256
2905 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
2906 (build-system pyproject-build-system)
2907 (native-inputs
2908 (list python-bottle
2909 python-mock
2910 python-pytest-8
2911 python-pytest-mock
2912 python-setuptools))
2913 (propagated-inputs
2914 (list python-conda-package-streaming))
2915 (home-page "https://conda.io")
2916 (synopsis "Create and extract conda packages of various formats")
2917 (description
2918 "This library is an abstraction of Conda package handling and a tool for
2919extracting, creating, and converting between formats.")
2920 (license license:bsd-3)))
2921
2922(define-public python-conda-package-streaming
2923 (package
2924 (name "python-conda-package-streaming")
2925 (version "0.12.0")
2926 (source
2927 (origin
2928 (method url-fetch)
2929 (uri (pypi-uri "conda_package_streaming" version))
2930 (sha256
2931 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
2932 (build-system pyproject-build-system)
2933 (arguments
2934 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
2935 (list #:tests? #f))
2936 (native-inputs
2937 (list python-flit-core))
2938 (propagated-inputs
2939 (list python-requests
2940 python-zstandard))
2941 (home-page "https://conda.github.io/conda-package-streaming/")
2942 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
2943 (description
2944 "This package provides an efficient library to read from new and old format
2945@code{.conda} and @code{.tar.bz2} conda packages.")
2946 (license license:bsd-3)))
2947
2948(define-public python-cross-web
2949 (package
2950 (name "python-cross-web")
2951 (version "0.7.0")
2952 (source
2953 (origin
2954 (method git-fetch)
2955 (uri (git-reference
2956 (url "https://github.com/usecross/cross-web")
2957 (commit version)))
2958 (file-name (git-file-name name version))
2959 (sha256
2960 (base32 "1yx0ii08cjnp311dq7336v02g501ap39kbfh2h62933v9m6k6717"))))
2961 (build-system pyproject-build-system)
2962 (arguments
2963 (list
2964 ;; tests: 114 passed, 1 skipped, 2 deselected
2965 #:test-flags
2966 ;; Tests fail with deprecation on Litestar side.
2967 #~(list (string-append
2968 "--deselect=tests/testing/"
2969 "clients/test_http_clients.py"
2970 "::test_request_adapter_json[http_client_config6]")
2971 (string-append
2972 "--deselect=tests/testing/clients/"
2973 "test_http_clients.py"
2974 "::test_request_adapter_form_data[http_client_config6]"))))
2975 (native-inputs
2976 (list python-django
2977 python-hatchling
2978 python-pytest
2979 python-pytest-asyncio
2980 python-pytest-django
2981 python-sanic-testing))
2982 (propagated-inputs
2983 (list python-typing-extensions
2984 ;; [optional]
2985 python-aiohttp
2986 python-chalice
2987 python-fastapi
2988 python-flask
2989 python-httpx
2990 python-litestar
2991 python-multipart ;PyPI python-mulipart
2992 python-quart
2993 python-sanic
2994 python-starlette
2995 python-werkzeug
2996 python-yarl))
2997 (home-page "https://github.com/usecross/cross-web")
2998 (synopsis "Library for working with web frameworks")
2999 (description
3000 "Cross provides a unified interface for common Python web framework
3001operations,allowing you to write framework-agnostic code that can be easily
3002adapted to work with FastAPI, Flask, Django, and other popular Python web
3003frameworks.")
3004 (license license:expat)))
3005
3006;; A bare minimal package to prevent pulling all bulky Web frameworks at once.
3007(define-public python-cross-web-minimal
3008 (package/inherit python-cross-web
3009 (name "python-cross-web-minimal")
3010 (arguments (list #:tests? #f))
3011 (native-inputs (list python-hatchling))
3012 (propagated-inputs (list python-typing-extensions))))
3013
3014(define-public python-css-html-js-minify
3015 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
3016 (revision "0"))
3017 (package
3018 (name "python-css-html-js-minify")
3019 (version (git-version "2.5.5" revision commit))
3020 (source
3021 (origin
3022 (method git-fetch)
3023 (uri (git-reference
3024 (url "https://github.com/juancarlospaco/css-html-js-minify")
3025 (commit commit)))
3026 (file-name (git-file-name name version))
3027 (sha256
3028 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
3029 (build-system pyproject-build-system)
3030 (arguments
3031 (list
3032 #:phases
3033 #~(modify-phases %standard-phases
3034 (add-after 'unpack 'relax-requirements
3035 (lambda _
3036 (substitute* "setup.cfg"
3037 (("^tests_require.*") "")))))))
3038 (native-inputs (list python-pytest python-setuptools))
3039 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
3040 (synopsis "CSS/HTML/JS minifier")
3041 (description
3042 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
3043 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
3044 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
3045 ;; looks like the user can choose a license.
3046 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
3047
3048(define-public python-css-parser
3049 (package
3050 (name "python-css-parser")
3051 (version "1.1.1")
3052 (source
3053 (origin
3054 (method git-fetch)
3055 (uri (git-reference
3056 (url "https://github.com/ebook-utils/css-parser")
3057 (commit (string-append "v" version))))
3058 (file-name (git-file-name name version))
3059 (sha256
3060 (base32 "0514g5a0r972lm883b3aja3b8jsxywmhxn4xpx7ksjpqmx38wga4"))))
3061 (build-system pyproject-build-system)
3062 (native-inputs
3063 (list python-pytest
3064 python-setuptools))
3065 (home-page "https://github.com/ebook-utils/css-parser")
3066 (synopsis "CSS related utilities for Python")
3067 (description
3068 "Css-parser is a Python package for parsing and building CSS
3069Cascading Style Sheets. Currently it provides a DOM only and no rendering
3070options.
3071
3072It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
3073cssutils not receiving updates as of 1.0.2.")
3074 (license license:lgpl3+)))
3075
3076(define-public python-cssmin
3077 (package
3078 (name "python-cssmin")
3079 (version "0.2.0")
3080 (source
3081 (origin
3082 (method git-fetch)
3083 (uri (git-reference
3084 (url "https://github.com/zacharyvoase/cssmin")
3085 (commit (string-append "v" version))))
3086 (file-name (git-file-name name version))
3087 (sha256
3088 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
3089 (build-system pyproject-build-system)
3090 (arguments (list #:tests? #f)) ; No tests.
3091 (native-inputs (list python-setuptools))
3092 (home-page "https://github.com/zacharyvoase/cssmin")
3093 (synopsis "Python port of the YUI CSS Compressor")
3094 (description "Python port of the YUI CSS Compressor.")
3095 (license (list license:expat license:bsd-3))))
3096
3097(define-public python-cssselect
3098 (package
3099 (name "python-cssselect")
3100 (version "1.4.0")
3101 (source
3102 (origin
3103 (method git-fetch)
3104 (uri (git-reference
3105 (url "https://github.com/scrapy/cssselect")
3106 (commit (string-append "v" version))))
3107 (file-name (git-file-name name version))
3108 (sha256
3109 (base32 "110l98x1mz1mxcal89xscsg28vg624sc0y6b5x1n2clwa19q5g4y"))))
3110 (build-system pyproject-build-system)
3111 (native-inputs
3112 (list python-hatchling python-lxml python-pytest))
3113 (home-page "https://github.com/scrapy/cssselect")
3114 (synopsis "CSS3 selector parser and translator to XPath 1.0")
3115 (description
3116 "Cssselect ia a Python module that parses CSS3 Selectors and translates
3117them to XPath 1.0 expressions. Such expressions can be used in lxml or
3118another XPath engine to find the matching elements in an XML or HTML document.")
3119 (license license:bsd-3)))
3120
3121(define-public python-cssselect2
3122 (package
3123 (name "python-cssselect2")
3124 (version "0.9.0")
3125 (source
3126 (origin
3127 (method git-fetch)
3128 (uri (git-reference
3129 (url "https://github.com/Kozea/cssselect2")
3130 (commit version)))
3131 (file-name (git-file-name name version))
3132 (sha256
3133 (base32 "1drvb83siq9s6dygyhab6kzk2v2ib6cv51ls42p4jrxs9q8cdiw0"))))
3134 (build-system pyproject-build-system)
3135 (propagated-inputs
3136 (list python-tinycss2))
3137 (native-inputs
3138 (list python-flit-core
3139 python-pytest))
3140 (home-page "https://doc.courtbouillon.org/cssselect2/stable/")
3141 (synopsis "CSS selectors for Python ElementTree")
3142 (description "@code{cssselect2} is a straightforward implementation of
3143CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
3144ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
3145
3146Unlike the Python package @code{cssselect}, it does not translate selectors to
3147XPath and therefore does not have all the correctness corner cases that are
3148hard or impossible to fix in cssselect.")
3149 (license license:bsd-3)))
3150
3151(define-public python-cssutils
3152 (package
3153 (name "python-cssutils")
3154 (version "2.15.0")
3155 (source
3156 (origin
3157 (method url-fetch)
3158 (uri (pypi-uri "cssutils" version))
3159 (sha256
3160 (base32 "08fhyw7x88xzhphm6jc6v72kw3i8iysw91x7rgd3fl4iycvr4wz9"))))
3161 (build-system pyproject-build-system)
3162 (arguments
3163 (list
3164 ;; tests: 399 passed, 2 skipped, 43 xfailed
3165 #:test-flags
3166 ;; Examples try to access http://cthedot.de/not-present.css.
3167 #~(list "--ignore=examples/")))
3168 (native-inputs
3169 (list python-cssselect
3170 python-jaraco-test
3171 python-pytest
3172 python-setuptools))
3173 (propagated-inputs
3174 (list python-encutils python-more-itertools))
3175 (home-page "https://github.com/jaraco/cssutils")
3176 (synopsis "CSS Cascading Style Sheets library for Python")
3177 (description
3178 "Cssutils is a Python package for parsing and building CSS Cascading
3179Style Sheets. Currently it provides a DOM only and no rendering options.")
3180 (license license:lgpl3+)))
3181
3182(define-public python-databricks-cli
3183 (package
3184 (name "python-databricks-cli")
3185 (version "0.18.0")
3186 (home-page "https://github.com/databricks/databricks-cli")
3187 (source (origin
3188 (method git-fetch)
3189 (uri (git-reference (url home-page) (commit version)))
3190 (file-name (git-file-name name version))
3191 (sha256
3192 (base32
3193 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
3194 (build-system pyproject-build-system)
3195 (arguments
3196 (list #:phases #~(modify-phases %standard-phases
3197 (replace 'check
3198 (lambda _
3199 (invoke "pytest" "tests" "-vv"))))))
3200 (native-inputs
3201 ;; For tests.
3202 (list python-decorator
3203 python-mock
3204 python-pytest
3205 python-requests-mock
3206 python-setuptools
3207 python-wheel))
3208 (propagated-inputs
3209 (list python-click
3210 python-oauthlib
3211 python-pyjwt
3212 python-requests
3213 python-six
3214 python-tabulate))
3215 (synopsis "Command line interface for Databricks")
3216 (description
3217 "The Databricks Command Line Interface is a tool which provides an easy
3218to use interface to the Databricks platform. The CLI is built on top of the
3219Databricks REST APIs.")
3220 (license license:asl2.0)))
3221
3222(define-public python-dependency-groups
3223 (package
3224 (name "python-dependency-groups")
3225 (version "1.3.1")
3226 (source
3227 (origin
3228 (method url-fetch)
3229 (uri (pypi-uri "dependency_groups" version))
3230 (sha256
3231 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
3232 (build-system pyproject-build-system)
3233 (propagated-inputs (list python-packaging python-tomli))
3234 (native-inputs (list python-flit-core python-pytest))
3235 (home-page "https://dependency-groups.readthedocs.io/")
3236 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
3237 (description
3238 "This package provides a library which is able to parse dependency groups (PEP
3239735), following includes, and provide that data as output.")
3240 (license license:expat)))
3241
3242(define-public python-devpi-client
3243 (package
3244 (name "python-devpi-client")
3245 (version "7.2.0")
3246 (source
3247 (origin
3248 (method url-fetch)
3249 (uri (pypi-uri "devpi-client" version))
3250 (sha256
3251 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
3252 (build-system pyproject-build-system)
3253 (arguments
3254 (list
3255 #:test-flags
3256 ;; This wants to use pip install
3257 '(list "--ignore=testing/test_upload.py"
3258 ;; These complain about finding distutils. It's not my fault,
3259 ;; mate, setuptools is right there, but you won't pick it!
3260 "--ignore=testing/test_list_remove.py"
3261 "--ignore=testing/test_main.py"
3262 "--ignore=testing/test_install.py"
3263 "--ignore=testing/test_functional.py"
3264 "--ignore=testing/test_test.py")
3265 #:phases
3266 '(modify-phases %standard-phases
3267 (add-after 'unpack 'patch-tests
3268 (lambda _
3269 ;; Do not replace the directory name of the store item.
3270 (substitute* "testing/conftest.py"
3271 (("\"devpi-server\", \"devpi-init\"")
3272 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
3273 (add-before 'check 'set-HOME
3274 ;; Some tests need this
3275 (lambda _ (setenv "HOME" "/tmp"))))))
3276 (propagated-inputs (list python-pypa-build
3277 python-check-manifest
3278 python-colorama
3279 python-devpi-common
3280 python-iniconfig
3281 python-pkginfo
3282 python-platformdirs
3283 python-pluggy
3284 python-pypitoken
3285 python-tomli))
3286 (native-inputs
3287 (list python-devpi-server
3288 python-pytest
3289 python-setuptools
3290 python-virtualenv))
3291 (home-page "https://github.com/devpi/devpi")
3292 (synopsis "Devpi upload/install/... commands for Python developers")
3293 (description
3294 "The devpi command line tool is typically used in conjunction with
3295devpi-server. It allows uploading, testing and installing packages from devpi
3296indexes.")
3297 (license license:expat)))
3298
3299(define-public python-devpi-common
3300 (package
3301 (name "python-devpi-common")
3302 (version "4.0.4")
3303 (source
3304 (origin
3305 (method url-fetch)
3306 (uri (pypi-uri "devpi_common" version))
3307 (sha256
3308 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
3309 (build-system pyproject-build-system)
3310 (propagated-inputs (list python-lazy python-packaging-legacy
3311 python-requests))
3312 (native-inputs
3313 (list python-pytest
3314 python-setuptools
3315 python-wheel))
3316 (home-page "https://github.com/devpi/devpi")
3317 (synopsis
3318 "Utilities jointly used by devpi-server, devpi-client and others")
3319 (description
3320 "This package provides utilities jointly used by devpi-server,
3321devpi-client and others.")
3322 (license license:expat)))
3323
3324(define-public python-devpi-process
3325 (package
3326 (name "python-devpi-process")
3327 (version "1.0.2")
3328 (source
3329 (origin
3330 (method url-fetch)
3331 (uri (pypi-uri "devpi_process" version))
3332 (sha256
3333 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
3334 (build-system pyproject-build-system)
3335 (arguments
3336 (list
3337 #:phases
3338 '(modify-phases %standard-phases
3339 (add-after 'unpack 'relax-requirements
3340 (lambda _
3341 ;; Our package is too old, sorry.
3342 (substitute* "pyproject.toml"
3343 (("typing-extensions>=4.12.2")
3344 "typing-extensions>=4.10.0"))))
3345 (add-after 'unpack 'patch-tool-locations
3346 (lambda* (#:key inputs #:allow-other-keys)
3347 (substitute* "src/devpi_process/__init__.py"
3348 (("_exe\\(\"devpi-init\"\\)")
3349 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
3350 (("_exe\\(\"devpi-server\"\\)")
3351 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
3352 (("_exe\\(\"devpi\"\\)")
3353 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
3354 (propagated-inputs (list python-devpi-client python-devpi-server
3355 python-typing-extensions))
3356 (native-inputs
3357 (list nss-certs-for-test
3358 python-hatchling
3359 python-hatch-vcs
3360 python-httpx
3361 python-pytest))
3362 (home-page "https://github.com/devpi/devpi")
3363 (synopsis "API to create and use a devpi server process")
3364 (description
3365 "This package provides a programmatic API to create and use a devpi
3366server process.")
3367 (license license:expat)))
3368
3369(define-public python-devpi-server
3370 (package
3371 (name "python-devpi-server")
3372 (version "6.20.3")
3373 (source
3374 (origin
3375 (method git-fetch)
3376 (uri (git-reference
3377 (url "https://github.com/devpi/devpi")
3378 (commit (string-append "server-" version))))
3379 (file-name (git-file-name name version))
3380 (sha256
3381 (base32 "11q1bnd8rl55gcv99xkmg10i8z9l91kvmgrvcz1803mwkcs0isp8"))))
3382 (build-system pyproject-build-system)
3383 (arguments
3384 (list
3385 ;; tests: 1134 passed, 53 skipped, 29 warnings
3386 #:phases
3387 #~(modify-phases %standard-phases
3388 (add-after 'unpack 'chdir
3389 (lambda _
3390 (chdir "server")))
3391 (add-after 'chdir 'relax-requirements
3392 (lambda _
3393 (substitute* "pyproject.toml"
3394 ;; It straggles to check argon2 in passlib on any versions
3395 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
3396 ;; such extra feature 'argon2'",).
3397 (("passlib\\[argon2\\]") "passlib")
3398 (("\"py>=1.4.23\",") ""))))
3399 (add-before 'check 'pre-check
3400 (lambda _
3401 (setenv "HOME" "/tmp"))))))
3402 (propagated-inputs (list python-argon2-cffi
3403 python-attrs
3404 python-defusedxml
3405 python-devpi-common
3406 python-httpx
3407 python-itsdangerous
3408 python-lazy
3409 python-passlib
3410 python-platformdirs
3411 python-pluggy
3412 python-pyramid
3413 python-repoze-lru
3414 python-requests
3415 python-ruamel.yaml-0.16 ;FIXME: rename
3416 python-strictyaml
3417 python-waitress))
3418 (native-inputs
3419 (list nss-certs-for-test
3420 python-execnet
3421 python-pytest
3422 python-pytest-asyncio
3423 python-pytest-timeout
3424 python-setuptools
3425 python-webtest))
3426 (home-page "https://devpi.net")
3427 (synopsis "Pypi.org caching server")
3428 (description "This package implements a reliable private and pypi.org
3429caching server.")
3430 (license license:expat)))
3431
3432(define-public python-dicomweb-client
3433 (package
3434 (name "python-dicomweb-client")
3435 (version "0.60.0")
3436 (source
3437 (origin
3438 (method git-fetch)
3439 (uri (git-reference
3440 (url "https://github.com/ImagingDataCommons/dicomweb-client")
3441 (commit (string-append "v" version))))
3442 (file-name (git-file-name name version))
3443 (sha256
3444 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
3445 (build-system pyproject-build-system)
3446 (arguments
3447 (list
3448 #:phases
3449 #~(modify-phases %standard-phases
3450 (add-after 'unpack 'remove-dynamic-versioning
3451 (lambda _
3452 (substitute* "pyproject.toml"
3453 ;; Dynamic versioning via 'uv-dynamic-versioning' is
3454 ;; not suitable for Guix.
3455 (("dynamic = \\[\"version\"\\]")
3456 (string-append "version = \""
3457 #$version "\""))))))))
3458 (native-inputs
3459 (list python-hatchling
3460 python-pytest
3461 python-pytest-localserver))
3462 (propagated-inputs
3463 (list python-numpy
3464 python-pillow
3465 python-pydicom
3466 python-requests
3467 python-retrying))
3468 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
3469 (synopsis "Python client for DICOMweb RESTful services")
3470 (description
3471 "@code{dicomweb_client} provides client interfaces for DICOMweb RESTful
3472services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
3473DICOM objects over the web, respectively.")
3474 (license license:expat)))
3475
3476(define-public python-dnslib
3477 (package
3478 (name "python-dnslib")
3479 (version "0.9.26")
3480 (source
3481 (origin
3482 (method git-fetch)
3483 (uri (git-reference
3484 (url "https://github.com/paulc/dnslib")
3485 (commit version)))
3486 (file-name (git-file-name name version))
3487 (sha256
3488 (base32 "1x1l727qx6x0kw7yhzhxhbm40wgrh367dr3y0vaix0wrhi30qsyk"))))
3489 (build-system pyproject-build-system)
3490 (arguments
3491 (list
3492 #:phases
3493 #~(modify-phases %standard-phases
3494 (replace 'check
3495 (lambda* (#:key tests? #:allow-other-keys)
3496 (when tests?
3497 (invoke "./run_tests.sh")))))))
3498 (native-inputs
3499 (list python-setuptools))
3500 (home-page "https://github.com/paulc/dnslib")
3501 (synopsis "Library to encode/decode DNS wire-format packets")
3502 (description
3503 "This package provides a simple Python library to encode/decode DNS
3504wire-format packets.")
3505 (license license:bsd-3)))
3506
3507(define-public python-docusign-esign
3508 (package
3509 (name "python-docusign-esign")
3510 (version "5.0.0")
3511 (source
3512 (origin
3513 (method url-fetch)
3514 (uri (pypi-uri "docusign-esign" version))
3515 (sha256
3516 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
3517 (build-system pyproject-build-system)
3518 ;; Testing requires undocumented setup changes with network access to
3519 ;; <demo.docusign.net>, and so testing is disabled here.
3520 (arguments `(#:tests? #f))
3521 (native-inputs
3522 (list python-setuptools
3523 python-wheel))
3524 (propagated-inputs
3525 (list python-certifi
3526 python-dateutil
3527 python-urllib3
3528 python-pyjwt
3529 python-cryptography))
3530 (home-page "https://developers.docusign.com/")
3531 (synopsis "DocuSign Python Client")
3532 (description
3533 "The Official DocuSign Python Client Library used to interact with the
3534eSign REST API. Send, sign, and approve documents using this client.")
3535 (license license:expat)))
3536
3537(define-public python-domain-connect
3538 (package
3539 (name "python-domain-connect")
3540 (version "0.0.11")
3541 (source
3542 (origin
3543 (method git-fetch) ;no tests in PyPI archive
3544 (uri (git-reference
3545 (url "https://github.com/Domain-Connect/domainconnect_python")
3546 (commit (string-append "v" version))))
3547 (file-name (git-file-name name version))
3548 (sha256
3549 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
3550 (build-system pyproject-build-system)
3551 (arguments
3552 (list
3553 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
3554 ;; present in container.
3555 #:tests? #f
3556 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
3557 (native-inputs
3558 (list python-setuptools))
3559 (propagated-inputs
3560 (list python-cryptography
3561 python-dnspython
3562 python-future
3563 python-publicsuffixlist))
3564 (home-page "https://github.com/Domain-Connect/domainconnect_python")
3565 (synopsis "Client library for Domain Connect protocol")
3566 (description
3567 "This package provides a Service Provider functionality in both Sync and
3568Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
3569 (license license:expat)))
3570
3571(define-public python-domain-connect-dyndns
3572 (package
3573 (name "python-domain-connect-dyndns")
3574 (version "0.0.9")
3575 (source
3576 (origin
3577 (method url-fetch)
3578 (uri (pypi-uri "domain-connect-dyndns" version))
3579 (sha256
3580 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
3581 (build-system pyproject-build-system)
3582 (arguments
3583 (list
3584 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
3585 ;; present in container.
3586 #:tests? #f
3587 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
3588 (native-inputs
3589 (list python-setuptools
3590 python-wheel))
3591 (propagated-inputs
3592 (list python-dnspython
3593 python-domain-connect
3594 python-requests
3595 python-validators))
3596 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
3597 (synopsis "Domain Connect Dynamic DNS in Python")
3598 ;; Project lacks meaningful description in README, see
3599 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
3600 (description
3601 "Python client library for Dynamic DNS using
3602@url{https://www.domainconnect.org/, Domain Connect} protocol.")
3603 (license license:expat)))
3604
3605(define-public python-dominate
3606 (package
3607 (name "python-dominate")
3608 (version "2.9.1")
3609 (source
3610 (origin
3611 (method git-fetch)
3612 (uri (git-reference
3613 (url "https://github.com/Knio/dominate")
3614 (commit version)))
3615 (file-name (git-file-name name version))
3616 (sha256
3617 (base32 "0kv5ly8w2026pwvgamfjxav1g58wmgim30nr9w9qfwcipfjxwn5c"))))
3618 (build-system pyproject-build-system)
3619 (native-inputs
3620 (list python-pytest
3621 python-setuptools))
3622 (home-page "https://github.com/Knio/dominate")
3623 (synopsis "Python library for creating and manipulating HTML documents")
3624 (description
3625 "Dominate is a Python library for creating and manipulating HTML
3626documents using an elegant DOM API.")
3627 (license license:lgpl3+)))
3628
3629(define-public python-dpkt
3630 (package
3631 (name "python-dpkt")
3632 (version "1.9.8")
3633 (source
3634 (origin
3635 (method git-fetch)
3636 (uri (git-reference
3637 (url "https://github.com/kbandla/dpkt")
3638 (commit (string-append "v" version))))
3639 (file-name (git-file-name name version))
3640 (sha256
3641 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
3642 (build-system pyproject-build-system)
3643 (arguments
3644 (list
3645 #:test-flags
3646 #~(list "--pyargs" "dpkt")))
3647 (native-inputs (list python-pytest python-setuptools))
3648 (home-page "https://github.com/kbandla/dpkt")
3649 (synopsis "Packet generator and parser for TCP/IP protocols")
3650 (description
3651 "The dpkt module is a fast, simple packet generator and parser for the
3652basic TCP/IP protocols.")
3653 (license license:bsd-3)))
3654
3655(define-public python-dropbox
3656 (package
3657 (name "python-dropbox")
3658 (version "12.0.2")
3659 (source
3660 (origin
3661 (method git-fetch) ; no tests in PyPI release
3662 (uri (git-reference
3663 (url "https://github.com/dropbox/dropbox-sdk-python")
3664 (commit (string-append "v" version))))
3665 (file-name (git-file-name name version))
3666 (sha256
3667 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
3668 (build-system pyproject-build-system)
3669 (arguments
3670 (list
3671 #:test-flags
3672 #~(list "-k" (string-join
3673 ;; Network access is required.
3674 (list "not test_bad_auth"
3675 "test_app_auth"
3676 "test_bad_pins"
3677 "test_bad_pins_session"
3678 "test_downscope"
3679 "test_multi_auth"
3680 "test_path_root"
3681 "test_path_root_err"
3682 "test_refresh"
3683 "test_rpc"
3684 "test_team"
3685 "test_upload_download"
3686 "test_versioned_route")
3687 " and not "))
3688 #:phases
3689 #~(modify-phases %standard-phases
3690 (add-after 'unpack 'relax-requirements
3691 (lambda _
3692 (substitute* "setup.py"
3693 ;; 'stone>=2,<3.3.3',
3694 ((">=2,<3.3.3") ">=2,<3.4.0"))))
3695 (add-before 'check 'pre-check
3696 (lambda _
3697 ;; Otherwise tests setup erroring.
3698 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
3699 (setenv "LEGACY_USER_CLIENT_ID" "guix")
3700 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
3701 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
3702 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
3703 (setenv "SCOPED_USER_CLIENT_ID" "guix")
3704 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
3705 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
3706 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
3707 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
3708 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
3709 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
3710 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
3711 (native-inputs
3712 (list nss-certs-for-test
3713 python-mock
3714 python-pytest
3715 python-pytest-mock
3716 python-setuptools
3717 python-wheel))
3718 (propagated-inputs
3719 (list python-requests python-six python-stone))
3720 (home-page "https://www.dropbox.com/developers")
3721 (synopsis "Official Dropbox API Client")
3722 (description "This package provides a Python SDK for integrating with the
3723Dropbox API v2.")
3724 (license license:expat)))
3725
3726(define-public python-dukpy
3727 (package
3728 (name "python-dukpy")
3729 (version "0.5.1")
3730 (source
3731 (origin
3732 (method git-fetch)
3733 (uri (git-reference
3734 (url "https://github.com/amol-/dukpy")
3735 (commit version)))
3736 (file-name (git-file-name name version))
3737 (sha256
3738 (base32 "1qsqfgy12frrdikjf353bsvhln11jixc3qs9rc1zra55k0569036"))))
3739 (build-system pyproject-build-system)
3740 (arguments
3741 (list
3742 #:test-flags
3743 #~(list #$@(map (lambda (test)
3744 (string-append "--deselect=tests/test_installer.py"
3745 "::TestPackageInstaller::"
3746 test))
3747 ;; Network access is required.
3748 (list "test_install_command"
3749 "test_install_command_latest_ver"
3750 "test_install_command_substrate_error"
3751 "test_install_command_without_dest"
3752 "test_install_react"
3753 "test_install_scoped_package"
3754 "test_install_unexisting_package"
3755 "test_install_unexisting_version")))))
3756 (native-inputs
3757 (list python-mock
3758 python-pytest
3759 python-setuptools
3760 python-webassets))
3761 (home-page "https://github.com/amol-/dukpy")
3762 (synopsis "Simple JavaScript interpreter for Python")
3763 (description
3764 "DukPy is a simple JavaScript interpreter for Python built on top of
3765duktape engine without any external dependency. It comes with a bunch of
3766common transpilers built-in for convenience:
3767@itemize
3768@item CoffeeScript
3769@item BabelJS
3770@item TypeScript
3771@item JSX
3772@item LESS
3773@end itemize")
3774 (license license:expat)))
3775
3776(define-public python-elastic-transport
3777 (package
3778 (name "python-elastic-transport")
3779 (version "9.1.0")
3780 (source
3781 (origin
3782 (method url-fetch)
3783 (uri (pypi-uri "elastic_transport" version))
3784 (sha256
3785 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
3786 (build-system pyproject-build-system)
3787 (arguments
3788 (list
3789 #:test-flags
3790 ;; Deselect failing tests (mostly due to network not reachable)
3791 #~(list "-k"
3792 (string-append
3793 "not .badssl.com"
3794 " and not test_assert_fingerprint_in_cert_chain_failure"))))
3795 (propagated-inputs (list python-certifi python-urllib3))
3796 (native-inputs (list nss-certs-for-test
3797 python-aiohttp
3798 ;; python-furo
3799 python-httpx
3800 python-opentelemetry-api
3801 python-opentelemetry-sdk
3802 python-orjson
3803 python-pytest
3804 python-pytest-asyncio-0.26
3805 ;; python-pytest-cov
3806 python-pytest-httpbin
3807 python-pytest-httpserver
3808 python-pytest-mock
3809 python-requests
3810 python-respx ;test
3811 python-setuptools
3812 ;; python-sphinx
3813 ;; python-sphinx-autodoc-typehints
3814 python-trustme
3815 python-wheel))
3816 (home-page "https://github.com/elastic/elastic-transport-python")
3817 (synopsis "Common library for Python Elastic client libraries")
3818 (description
3819 "This library was lifted from @code{elasticsearch-py} and then transformed to
3820be used across all Elastic services rather than only Elasticsearch. It
3821provides transport classes and utilities shared among Python Elastic client
3822libraries.")
3823 ;; Apache-2.0 in setup.py and LICENSE file.
3824 (license license:asl2.0)))
3825
3826(define-public python-elasticsearch
3827 (package
3828 (name "python-elasticsearch")
3829 (version "9.1.1")
3830 (source
3831 (origin
3832 (method git-fetch) ; no tests in PyPI release
3833 (uri (git-reference
3834 (url "https://github.com/elastic/elasticsearch-py")
3835 (commit (string-append "v" version))))
3836 (file-name (git-file-name name version))
3837 (sha256
3838 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
3839 (build-system pyproject-build-system)
3840 (native-inputs
3841 (list nss-certs-for-test
3842 python-aiohttp
3843 python-dateutil
3844 python-mock
3845 python-orjson
3846 python-pytest
3847 python-pytest-asyncio
3848 python-pytz
3849 python-pyyaml
3850 python-requests
3851 python-hatchling))
3852 (propagated-inputs
3853 (list python-certifi
3854 python-elastic-transport))
3855 (home-page "https://github.com/elastic/elasticsearch-py")
3856 (synopsis "Low-level client for Elasticsearch")
3857 (description "Official low-level client for Elasticsearch. Its goal is to
3858provide common ground for all Elasticsearch-related code in Python; because of
3859this it tries to be opinion-free and very extendable.")
3860 ;; Apache-2.0 in setup.py and LICENSE file.
3861 (license license:asl2.0)))
3862
3863(define-public python-engineio
3864 (package
3865 (name "python-engineio")
3866 (version "4.13.4")
3867 (source
3868 (origin
3869 (method git-fetch)
3870 (uri (git-reference
3871 (url "https://github.com/miguelgrinberg/python-engineio/")
3872 (commit (string-append "v" version))))
3873 (file-name (git-file-name name version))
3874 (sha256
3875 (base32 "1ndp68cqssjpvln958v236rg5jgpzy57vs3z45sz7xfscmbi893r"))))
3876 (build-system pyproject-build-system)
3877 (native-inputs
3878 (list python-pytest
3879 python-pytest-asyncio
3880 python-setuptools
3881 python-tornado))
3882 (propagated-inputs
3883 (list python-simple-websocket
3884 ;; [optional]
3885 python-aiohttp
3886 python-requests
3887 python-websocket-client))
3888 (home-page "https://github.com/miguelgrinberg/python-engineio/")
3889 (synopsis "Engine.IO server")
3890 (description "This package provides a Python implementation of the
3891@code{Engine.IO} realtime client and server.")
3892 (license license:expat)))
3893
3894(define-public python-enoslib
3895 (package
3896 (name "python-enoslib")
3897 (version "8.0.1")
3898 (source
3899 (origin
3900 (method git-fetch)
3901 (uri (git-reference
3902 (url "https://gitlab.inria.fr/discovery/enoslib")
3903 (commit (string-append "v" version))))
3904 (file-name (git-file-name name version))
3905 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
3906 (arguments
3907 (list
3908 #:test-flags
3909 #~(list "enoslib/tests/unit"
3910 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
3911 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
3912 #:phases
3913 #~(modify-phases %standard-phases
3914 (add-before 'check 'pre-check
3915 (lambda* (#:key tests? #:allow-other-keys)
3916 (when tests?
3917 ;; Otherwise Ansible fails to create its config directory.
3918 (setenv "HOME" "/tmp"))))
3919 ;; Disable the sanity check, which fails with the following error:
3920 ;;
3921 ;; ContextualVersionConflict(rich 12.4.1
3922 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
3923 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
3924 ;;
3925 ;; The optional jupyter dependency of rich isn't critical for
3926 ;; EnOSlib to work
3927 (delete 'sanity-check))))
3928 (build-system pyproject-build-system)
3929 (native-inputs
3930 (list python-ddt
3931 python-freezegun
3932 python-pytest
3933 python-setuptools
3934 python-wheel))
3935 (propagated-inputs
3936 (list ansible
3937 python-cryptography
3938 python-grid5000
3939 python-jsonschema
3940 python-netaddr
3941 python-packaging
3942 python-requests
3943 python-rich
3944 python-sshtunnel
3945 python-pytz))
3946 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
3947 (synopsis "Deploy distributed testbeds on a variety of platforms")
3948 (description
3949 "EnOSlib is a library to build experimental frameworks on various
3950scientific testbeds. It lets you deploy networks of machines on actual
3951hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
3952 (license license:gpl3+)))
3953
3954(define-public python-ephemeral-port-reserve
3955 (package
3956 (name "python-ephemeral-port-reserve")
3957 (version "1.1.4")
3958 (source
3959 (origin
3960 (method git-fetch)
3961 (uri (git-reference
3962 (url "https://github.com/Yelp/ephemeral-port-reserve")
3963 (commit (string-append "v" version))))
3964 (file-name (git-file-name name version))
3965 (sha256
3966 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
3967 (build-system pyproject-build-system)
3968 (native-inputs
3969 (list python-pytest
3970 python-setuptools))
3971 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
3972 (synopsis "Find an unused port, reliably")
3973 (description
3974 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
3975it.")
3976 (license license:expat)))
3977
3978(define-public python-essentials-openapi
3979 (package
3980 (name "python-essentials-openapi")
3981 (version "1.2.1")
3982 (source
3983 (origin
3984 (method git-fetch)
3985 (uri (git-reference
3986 (url "https://github.com/Neoteroi/essentials-openapi")
3987 (commit (string-append "v" version))))
3988 (file-name (git-file-name name version))
3989 (sha256
3990 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
3991 (build-system pyproject-build-system)
3992 (native-inputs
3993 (list python-flask
3994 python-hatchling
3995 python-pydantic
3996 python-pytest
3997 python-rich))
3998 (propagated-inputs
3999 (list python-essentials
4000 python-httpx
4001 python-jinja2
4002 python-markupsafe
4003 python-pyyaml))
4004 (home-page "https://github.com/Neoteroi/essentials-openapi/")
4005 (synopsis "Generator for OpenAPI Documentation")
4006 (description
4007 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
4008formats. Generator for other kinds of documents from OpenAPI Documentation
4009files.")
4010 (license license:expat)))
4011
4012(define-public python-eventlet
4013 (package
4014 (name "python-eventlet")
4015 (version "0.41.0")
4016 (source
4017 (origin
4018 (method git-fetch)
4019 (uri (git-reference
4020 (url "https://github.com/eventlet/eventlet")
4021 (commit version)))
4022 (file-name (git-file-name name version))
4023 (sha256
4024 (base32 "1rn8f5v08n48dh6aycdxfwz17w4xwkgny7bhy5llqn5dl0g2dw43"))))
4025 (build-system pyproject-build-system)
4026 (arguments
4027 (list
4028 ;; tests: 618 passed, 121 skipped, 20 deselected, 52 warnings
4029 #:test-flags
4030 #~(list
4031 #$@(map (lambda (test)
4032 (string-append "--deselect=tests/" test))
4033 (list
4034 ;; dns.resolver.NoResolverConfiguration: cannot open
4035 ;; /etc/resolv.conf
4036 "greendns_test.py::TestProxyResolver::test_clear"
4037 "greendns_test.py::TinyDNSTests::test_noraise_dns_tcp"
4038 "greendns_test.py::TinyDNSTests::test_raise_dns_tcp"
4039 ;; assert <built-in function gethostbyname> is <function
4040 ;; gethostbyname at 0x7ffff3491120>
4041 "socket_test.py::test_dns_methods_are_green"
4042 ;; socket.gaierror: [Errno -8] Servname not supported for
4043 ;; ai_socktype
4044 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo"
4045 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_idn"
4046 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_inet"
4047 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_inet6"
4048 "greendns_test.py::test_hosts_no_network"
4049 ;; AssertionError: Expected single line "pass" in stdout
4050 "asyncio_test.py::test_asyncio_does_not_use_greendns"
4051 "greendns_test.py::test_import_rdtypes_then_eventlet"
4052 "patcher_test.py::test_patcher_existing_logging_module_lock")))
4053 #:phases
4054 #~(modify-phases %standard-phases
4055 (add-after 'unpack 'avoid-OSError
4056 (lambda _
4057 ;; If eventlet tries to load greendns, an OSError is thrown when
4058 ;; getprotobyname is called. Thankfully there is an environment
4059 ;; variable to disable the greendns import, so use it. Note that
4060 ;; this error is propagated to child packages too, so enforce the
4061 ;; changed default.
4062 (substitute* "eventlet/green/socket.py"
4063 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
4064 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")"))))
4065 (add-before 'check 'pre-check
4066 (lambda _
4067 (setenv "EVENTLET_HUB" "asyncio"))))))
4068 (native-inputs
4069 (list python-hatchling
4070 python-hatch-vcs
4071 python-pytest
4072 python-pytest-aiohttp))
4073 (propagated-inputs
4074 (list python-dnspython
4075 python-greenlet))
4076 (home-page "https://eventlet.net")
4077 (synopsis "Concurrent networking library for Python")
4078 (description
4079 "Eventlet is a concurrent networking library for Python that
4080allows you to change how you run your code, not how you write it.
4081It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
4082Coroutines ensure that the developer uses a blocking style of programming
4083that is similar to threading, but provide the benefits of non-blocking I/O.
4084The event dispatch is implicit, which means you can easily use @code{Eventlet}
4085from the Python interpreter, or as a small part of a larger application.
4086
4087Note: In Guix, this package assumes the environment variable
4088@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
4089to anything else.")
4090 (license license:expat)))
4091
4092(define-public python-extruct
4093 (package
4094 (name "python-extruct")
4095 (version "0.18.0")
4096 (source (origin
4097 (method git-fetch) ;for tests
4098 (uri (git-reference
4099 (url "https://github.com/scrapinghub/extruct")
4100 (commit (string-append "v" version))))
4101 (file-name (git-file-name name version))
4102 (sha256
4103 (base32
4104 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
4105 (build-system pyproject-build-system)
4106 (arguments
4107 (list
4108 #:test-flags
4109 ;; 67 passed, 3 deselected
4110 ;; XXX: 3 tests fail with errors in assertion.
4111 #~(list "-k" (string-append
4112 "not test_microformat"
4113 " and not test_microformat"
4114 " and not test_umicroformat"))))
4115 (native-inputs
4116 (list python-pytest
4117 python-setuptools
4118 python-wheel))
4119 (propagated-inputs
4120 (list python-html-text
4121 python-jstyleson
4122 python-lxml
4123 python-mf2py
4124 python-pyrdfa3
4125 python-rdflib
4126 python-w3lib))
4127 (home-page "https://github.com/scrapinghub/extruct")
4128 (synopsis "Extract embedded metadata from HTML markup")
4129 (description "@code{extruct} is a Python library for extracting embedded
4130metadata from HTML markup. Currently, extruct supports:
4131@itemize
4132@item W3C's HTML Microdata
4133@item embedded JSON-LD
4134@item Microformat via mf2py
4135@item Facebook's Open Graph
4136@item (experimental) RDFa via rdflib
4137@item Dublin Core Metadata (DC-HTML-2003)
4138@end itemize")
4139 (license license:bsd-3)))
4140
4141(define-public python-feedgen
4142 (package
4143 (name "python-feedgen")
4144 (version "1.0.0")
4145 (source
4146 (origin
4147 (method git-fetch)
4148 (uri (git-reference
4149 (url "https://github.com/lkiesow/python-feedgen")
4150 (commit (string-append "v" version))))
4151 (file-name (git-file-name name version))
4152 (sha256
4153 (base32
4154 "1ppwxp9yck29pk2p2dlrrad6rz16l9h4fhcajp9yb7ns94fm5v3l"))))
4155 (build-system pyproject-build-system)
4156 (propagated-inputs
4157 (list python-dateutil
4158 python-lxml))
4159 (native-inputs
4160 (list python-pytest
4161 python-setuptools))
4162 (home-page "https://feedgen.kiesow.be")
4163 (synopsis "Atom and RSS feed generator")
4164 (description
4165 "This module can be used to generate web feeds in both Atom and RSS
4166format. It also extensible and comes with an extension to produce podcasts.")
4167 ;; The README says that this package is released under both licenses, and
4168 ;; permits the user to choose whichever is more convenient to them.
4169 (license (list license:bsd-2
4170 license:lgpl3+))))
4171
4172(define-public python-flask-caching
4173 (package
4174 (name "python-flask-caching")
4175 (version "2.3.1")
4176 (source
4177 (origin
4178 (method url-fetch)
4179 (uri (pypi-uri "flask_caching" version))
4180 (sha256
4181 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
4182 (build-system pyproject-build-system)
4183 (arguments
4184 (list
4185 #:test-flags
4186 ;; Tests requiring running Redis or dated python-cache.
4187 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
4188 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
4189 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
4190 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
4191 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
4192 "-k" "not test_client_override_reflected_on_cachelib_methods")))
4193 (native-inputs
4194 (list python-pytest
4195 python-pytest-asyncio
4196 python-pytest-xprocess
4197 python-setuptools))
4198 (propagated-inputs
4199 (list python-cachelib
4200 python-flask))
4201 (home-page "https://github.com/pallets-eco/flask-caching")
4202 (synopsis "Caching extension for Flask")
4203 (description
4204 "This package provides a caching support to Flask applications, it's a
4205fort ok https://github.com/thadeusb/flask-cache.")
4206 (license license:bsd-3)))
4207
4208(define-public python-flask-paginate
4209 (package
4210 (name "python-flask-paginate")
4211 (version "2024.4.12")
4212 (source
4213 (origin
4214 (method git-fetch)
4215 (uri (git-reference
4216 (url "https://github.com/lixxu/flask-paginate")
4217 (commit (string-append "v" version))))
4218 (file-name (git-file-name name version))
4219 (sha256
4220 (base32 "1q4ajwk0pzc6934g07gdryjcwi6rd9iqcwv5g5s718dfx2bj1831"))))
4221 (arguments
4222 (list #:test-backend #~'custom
4223 #:test-flags #~(list "tests/tests.py")))
4224 (build-system pyproject-build-system)
4225 (native-inputs
4226 (list python-pytest
4227 python-setuptools))
4228 (propagated-inputs
4229 (list python-flask))
4230 (home-page "https://github.com/lixxu/flask-paginate")
4231 (synopsis "Simple paginate support for Flask")
4232 (description
4233 "Flask-paginate is a simple pagination extension for Flask which is
4234inspired by Ruby's will_paginate library. It supports several CSS frameworks.")
4235 (license license:bsd-3)))
4236
4237(define-public python-flask-limiter
4238 (package
4239 (name "python-flask-limiter")
4240 (version "4.1.1")
4241 (source
4242 (origin
4243 (method git-fetch)
4244 (uri (git-reference
4245 (url "https://github.com/alisaifee/flask-limiter")
4246 (commit version)))
4247 (file-name (git-file-name name version))
4248 (sha256
4249 (base32 "18n12iayzw6qqys26824j5lfbphfcammpmyrvys1k0rn4xcbifln"))))
4250 (build-system pyproject-build-system)
4251 (arguments
4252 (list
4253 ;; tests: 155 passed, 620 deselected
4254 #:test-flags
4255 #~(list "-k" (simple-format #f "not (~a)"
4256 (string-join
4257 (append
4258 ;; The test suite spawns storages in Docker.
4259 '("memcache" "reset_unsupported")
4260 '("mongo")
4261 '("redis" "clear_limits"
4262 "constructor_arguments_over_config"
4263 "custom_key_prefix" "fallback_to_memory"))
4264 " or ")))
4265 #:phases
4266 #~(modify-phases %standard-phases
4267 (add-before 'check 'adjust-tests
4268 (lambda _
4269 (substitute* "pytest.ini"
4270 ((".*--cov=.*") ""))
4271 (substitute* (find-files "tests" "\\.py$")
4272 (("import pymemcache.*") "")
4273 (("import pymongo.*") "")
4274 (("import redis.*") "")))))))
4275 (native-inputs (list python-flask-restful
4276 python-hatch-vcs
4277 python-hatchling
4278 python-hiro
4279 python-pytest
4280 python-pytest-check
4281 python-pytest-mock))
4282 (propagated-inputs (list python-flask
4283 python-limits
4284 python-ordered-set
4285 python-rich))
4286 (home-page "https://flask-limiter.readthedocs.org/")
4287 (synopsis "Rate limiting for Flask applications")
4288 (description
4289 "Flask-Limiter adds rate limiting to Flask applications.
4290Rate limits can be configured at different levels such as:
4291
4292@itemize
4293@item Application wide global limits per user
4294@item Default limits per route
4295@item By blueprints
4296@item By class-based views
4297@item By individual routes
4298@end itemize")
4299 (license license:expat)))
4300
4301(define-public python-gdown
4302 (package
4303 (name "python-gdown")
4304 (version "5.2.0")
4305 (source
4306 (origin
4307 (method url-fetch)
4308 (uri (pypi-uri "gdown" version))
4309 (sha256
4310 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
4311 (build-system pyproject-build-system)
4312 (arguments (list #:tests? #f)) ;network access is required
4313 (native-inputs
4314 (list python-hatch-fancy-pypi-readme
4315 python-hatch-vcs
4316 python-hatchling))
4317 (propagated-inputs
4318 (list python-beautifulsoup4
4319 python-filelock
4320 python-requests
4321 python-tqdm))
4322 (home-page "https://github.com/wkentaro/gdown")
4323 (synopsis "Google Drive Public File/Folder Downloader")
4324 (description
4325 "This package implements a functionality to download large files
4326recursively from Google Drive with option to filter them by file
4327formats (PDF/XML/CSV).")
4328 (license license:expat)))
4329
4330(define-public python-globus-sdk
4331 (package
4332 (name "python-globus-sdk")
4333 (version "4.4.0")
4334 (source
4335 (origin
4336 (method git-fetch)
4337 (uri (git-reference
4338 (url "https://github.com/globus/globus-sdk-python")
4339 (commit version)))
4340 (file-name (git-file-name name version))
4341 (sha256
4342 (base32 "1d0zw9dkpdhsf9zdg3nk6b55gqwzc3v2rj76nj7999hjmq8350vh"))))
4343 (build-system pyproject-build-system)
4344 (arguments
4345 (list
4346 #:phases
4347 #~(modify-phases %standard-phases
4348 (add-before 'check 'pre-check
4349 (lambda _ (setenv "HOME" "/tmp"))))))
4350 (native-inputs
4351 (list python-flaky
4352 python-pytest
4353 python-pytest-randomly
4354 python-responses
4355 python-setuptools))
4356 (propagated-inputs
4357 (list python-cryptography
4358 python-importlib-resources
4359 python-pyjwt
4360 python-requests))
4361 (home-page "https://github.com/globus/globus-sdk-python")
4362 (synopsis "Globus SDK for Python")
4363 (description
4364 "This package provides a SDK for convenient Pythonic interface to
4365@url{https://www.globus.org/, Globus} APIs.")
4366 (license license:asl2.0)))
4367
4368(define-public python-guardpost
4369 (package
4370 (name "python-guardpost")
4371 (version "1.0.4")
4372 (source
4373 (origin
4374 (method git-fetch)
4375 (uri (git-reference
4376 (url "https://github.com/Neoteroi/guardpost")
4377 (commit (string-append "v" version))))
4378 (file-name (git-file-name name version))
4379 (sha256
4380 (base32 "1xsakqn36g2h1s5rnbaf1lasx1jn4skqhmb8kdl1k4pgxp5sczyy"))))
4381 (build-system pyproject-build-system)
4382 (arguments
4383 (list
4384 ;; Possible timing issue, see:
4385 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
4386 #:test-flags '(list "--ignore=tests/test_jwts.py")))
4387 (native-inputs
4388 (list python-flask
4389 python-hatchling
4390 python-pytest
4391 python-pytest-asyncio))
4392 (propagated-inputs
4393 (list python-rodi
4394 ;; [optional]
4395 python-cryptography
4396 python-essentials
4397 python-pyjwt))
4398 (home-page "https://github.com/Neoteroi/GuardPost/")
4399 (synopsis
4400 "Authentication and authorization framework for Python applications")
4401 (description
4402 "GuardPost is a framework to handle authentication and
4403authorization in asynchronous Python applications.
4404
4405Its features include
4406
4407@itemize
4408@item Strategy to implement authentication.
4409@item Strategy to implement authorization.
4410@item Support for dependency injection
4411@item Built-in support for JSON Web Tokens (JWTs) authentication.
4412@end itemize")
4413 (license license:expat)))
4414
4415(define-public python-habanero
4416 (package
4417 (name "python-habanero")
4418 (version "2.3.0")
4419 (source
4420 (origin
4421 (method git-fetch)
4422 (uri (git-reference
4423 (url "https://github.com/sckott/habanero")
4424 (commit (string-append "v" version))))
4425 (file-name (git-file-name name version))
4426 (sha256
4427 (base32 "1a842izcc8l4wb8004v92zsq1h4yc7qc2wi9am6x0f7idlx993sw"))))
4428 (build-system pyproject-build-system)
4429 (arguments
4430 ;; Run only a small portion of unit tests without network access
4431 ;; requirement.
4432 (list #:test-flags #~(list "test/test-filters.py")))
4433 (native-inputs
4434 (list python-hatchling
4435 python-pytest))
4436 (propagated-inputs
4437 (list python-httpx
4438 python-packaging
4439 python-tqdm
4440 python-urllib3))
4441 (home-page "https://github.com/sckott/habanero")
4442 (synopsis "Low Level Client for Crossref Search API")
4443 (description
4444 "Low Level Client for
4445@url{https://api.crossref.org/swagger-ui/index.html, Crossref Search API}.")
4446 (license license:expat)))
4447
4448(define-public python-hookdns
4449 (package
4450 (name "python-hookdns")
4451 (version "2.0.0")
4452 (source
4453 (origin
4454 (method url-fetch)
4455 (uri (pypi-uri "hookdns" version))
4456 (sha256
4457 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
4458 (build-system pyproject-build-system)
4459 (arguments
4460 (list
4461 #:test-flags
4462 #~(list "-k" (string-join
4463 ;; Tests requiring networking.
4464 (list
4465 "not test_patch_contextmanager_with_another_hostname"
4466 "test_patch_contextmanager_with_another_hostname_ipv6"
4467 "test_patch_contextmanager_with_ipv4"
4468 "test_patch_contextmanager_with_name"
4469 "test_patch_contextmanager_with_public_fqdn_and_"
4470 "test_patch_contextmanager_with_unknown_hostname"
4471 "test_patch_decorator_with_another_hostname"
4472 "test_patch_decorator_with_another_hostname_ipv6"
4473 "test_patch_decorator_with_ipv4"
4474 "test_patch_decorator_with_name"
4475 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
4476 "test_patch_decorator_with_unknown_hostname"
4477 "test_real_getaddrinfo_with_name_ipv6"
4478 "test_real_getaddrinfo_with_public_fqdn_ipv4"
4479 "test_real_getaddrinfo_with_public_fqdn_ipv6"
4480 "test_real_gethostbyname_ex_with_public_fqdn"
4481 "test_real_gethostbyname_with_public_fqdn"
4482 "test_real_requests_ip"
4483 "test_real_requests_name"
4484 "test_real_requests_with_public_fqdn"
4485 "test_reentrant")
4486 " and not "))))
4487 (native-inputs
4488 (list python-pytest
4489 python-requests
4490 python-setuptools
4491 python-wheel))
4492 (home-page "https://github.com/cle-b/hookdns")
4493 (synopsis "DNS resolution customization library")
4494 (description
4495 "HookDNS implements functionality that allows for modifying name
4496resolution in a Python script without any changes to the hosts file or the use
4497of a fake DNS resolver.")
4498 (license license:asl2.0)))
4499
4500(define-public python-httpcore2
4501 (package
4502 (name "python-httpcore2")
4503 (version "2.4.0")
4504 (source
4505 (origin
4506 (method git-fetch)
4507 (uri (git-reference
4508 (url "https://github.com/pydantic/httpx2")
4509 (commit (string-append "v" version))))
4510 (file-name (git-file-name name version))
4511 (sha256
4512 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
4513 (build-system pyproject-build-system)
4514 (arguments
4515 (list
4516 #:phases
4517 #~(modify-phases %standard-phases
4518 (add-after 'unpack 'preparation
4519 (lambda _
4520 (chdir "src/httpcore2")
4521 (copy-recursively "../../tests/httpcore2" "tests")
4522 (substitute* (find-files "tests" "\\.py$")
4523 (("tests\\.httpcore2") "tests")
4524 (("tests/httpcore2") "tests"))))
4525 (add-before 'build 'set-version
4526 (lambda _
4527 (substitute* "pyproject.toml"
4528 ((".*uv-dynamic-versioning>.*") "")
4529 (("source.*uv-dynamic-versioning.*") "source = 'vcs'"))
4530 (substitute* "httpcore2/__init__.py"
4531 ((".*= version\\(.*")
4532 (format #f "__version__ = ~s~%" #$version))))))))
4533 (native-inputs
4534 (list python-hatch-fancy-pypi-readme
4535 python-hatch-vcs
4536 python-hatchling
4537 python-pytest
4538 python-pytest-httpbin
4539 python-pytest-trio))
4540 (propagated-inputs
4541 (list python-h11
4542 python-truststore
4543 ;; [optional]
4544 python-anyio
4545 python-h2
4546 python-socksio
4547 python-trio))
4548 (home-page "https://github.com/pydantic/httpx2")
4549 (synopsis "Minimal low-level HTTP client")
4550 (description
4551 "The HTTP Core package provides a minimal low-level HTTP client, which
4552does one thing only. Sending HTTP requests.
4553
4554Some things HTTP Core does do:
4555@itemize
4556@item Sending HTTP requests.
4557@item Thread-safe / task-safe connection pooling.
4558@item HTTP(S) proxy & SOCKS proxy support.
4559@item Supports HTTP/1.1 and HTTP/2.
4560@item Provides both sync and async interfaces.
4561@item Async backend support for @code{asyncio} and @code{trio}.
4562@end itemize")
4563 (license license:bsd-3)))
4564
4565(define-public python-httpretty
4566 (package
4567 (name "python-httpretty")
4568 (version "1.1.4")
4569 (source
4570 (origin
4571 (method url-fetch)
4572 (uri (pypi-uri "httpretty" version))
4573 (sha256
4574 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
4575 (build-system pyproject-build-system)
4576 (arguments
4577 (list
4578 #:test-flags
4579 ;; Only run Unit tests.
4580 #~(list "--ignore=tests/bugfixes"
4581 "--ignore=tests/functional"
4582 "--ignore=tests/pyopenssl"
4583 "-k" (string-join
4584 ;; Tests pattern failing with one of these errors:
4585 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
4586 ;; has no attribute 'should'
4587 ;; AttributeError: 'function' object has no attribute
4588 ;; 'when'
4589 ;; AttributeError: 'AssertionBuilder' object has no
4590 ;; attribute 'should_not'
4591 (list "not fake_socket_passes_through"
4592 "fakesock_socket"
4593 "request_parse_body_when"
4594 "test_Entry_class_normalizes_headers"
4595 "test_has_request"
4596 "test_httpretty_should_raise_proper"
4597 "test_parse_request_line_connect"
4598 "test_request_parse_querystring"
4599 "test_request_string_representation"
4600 "test_request_stubs_internals")
4601 " and not "))))
4602 (native-inputs
4603 (list nss-certs-for-test
4604 python-freezegun
4605 python-mock
4606 python-pytest
4607 python-setuptools
4608 python-sure
4609 python-wheel))
4610 (home-page "https://httpretty.readthedocs.io")
4611 (synopsis "HTTP client mock for Python")
4612 (description
4613 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
4614@code{fakeweb}.")
4615 (license license:expat)))
4616
4617(define-public python-httpx2
4618 (package
4619 (name "python-httpx2")
4620 (version "2.4.0")
4621 (source
4622 (origin
4623 (method git-fetch)
4624 (uri (git-reference
4625 (url "https://github.com/pydantic/httpx2")
4626 (commit (string-append "v" version))))
4627 (file-name (git-file-name name version))
4628 (sha256
4629 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
4630 (arguments
4631 (list
4632 ;; tests: 1227 passed, 200 deselected
4633 #:test-flags
4634 ;; Networking tests.
4635 #~(list "-k" (string-join
4636 (list "not test_async_proxy_close[asyncio]"
4637 "test_async_proxy_close[trio]"
4638 "test_auth"
4639 "test_binary"
4640 "test_client_decode_text_using_autodetect"
4641 "test_client_decode_text_using_explicit_encoding"
4642 "test_follow_redirects"
4643 "test_get"
4644 "test_idna_url[http_with_custom_port]"
4645 "test_idna_url[http_with_port]"
4646 "test_idna_url[https_with_custom_port]"
4647 "test_idna_url[https_with_port]"
4648 "test_idna_url[https_without_port]"
4649 "test_idna_url[idna_label_after_ascii_label]"
4650 "test_idna_url[unicode_tr46_compat]"
4651 "test_json"
4652 "test_post"
4653 "test_redirects"
4654 "test_response_decode_text_using_autodetect"
4655 "test_sync_proxy_close"
4656 "test_url_malformed_idna_label_after_ascii_label"
4657 "test_url_mixed_valid_and_malformed_idna_labels"
4658 "test_verbose")
4659 " and not "))
4660 #:phases
4661 #~(modify-phases %standard-phases
4662 (add-after 'unpack 'preparation
4663 (lambda _
4664 (chdir "src/httpx2")
4665 (copy-recursively "../../tests/httpx2" "tests")
4666 (substitute* (find-files "tests" "\\.py$")
4667 (("tests\\.httpx2") "tests")
4668 (("tests/httpx2") "tests"))))
4669 (add-before 'build 'set-version
4670 (lambda _
4671 (substitute* "pyproject.toml"
4672 (("\"uv-dynamic-versioning>=0\\.8\\.0\"") "")
4673 (("source.*uv-dynamic-versioning.*") "source = 'vcs'")
4674 (("\\.uv-dynamic-versioning") ".vcs")))))))
4675 (build-system pyproject-build-system)
4676 (native-inputs
4677 (list python-chardet
4678 python-hatch-fancy-pypi-readme
4679 python-hatch-vcs
4680 python-hatchling
4681 python-pytest
4682 python-trustme
4683 python-uvicorn))
4684 (propagated-inputs
4685 (list python-anyio
4686 python-httpcore2
4687 python-idna
4688 python-truststore
4689 python-typing-extensions ;Python version < 3.13
4690 ;; [optional]
4691 python-brotli
4692 python-click
4693 python-h2
4694 python-pygments
4695 python-rich
4696 python-socksio
4697 python-zstandard))
4698 (home-page "https://github.com/pydantic/httpx2")
4699 (synopsis "The next generation HTTP client")
4700 (description
4701 "HTTPX2 is a fully featured HTTP client library for Python. It includes
4702an integrated command line client, has support for both HTTP/1.1 and HTTP/2,
4703and provides both sync and async APIs.")
4704 (license license:bsd-3)))
4705
4706(define-public python-jiter
4707 (package
4708 (name "python-jiter")
4709 (version "0.15.0")
4710 (source
4711 (origin
4712 (method git-fetch)
4713 (uri (git-reference
4714 (url "https://github.com/pydantic/jiter/")
4715 (commit (string-append "v" version))))
4716 (file-name (git-file-name name version))
4717 (sha256
4718 (base32 "1z2ljacsc64yykkxvjnq6rq4z56xwr8jhcw02ckv6b85kc66x63p"))))
4719 (build-system pyproject-build-system)
4720 (arguments
4721 (list
4722 #:imported-modules (append %cargo-build-system-modules
4723 %pyproject-build-system-modules)
4724 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4725 (guix build pyproject-build-system)
4726 (guix build utils))
4727 #:phases
4728 #~(modify-phases %standard-phases
4729 (add-after 'unpack 'prepare-cargo-build-system
4730 (lambda args
4731 (for-each (lambda (phase)
4732 (format #t "Running cargo phase: ~a~%" phase)
4733 (apply (assoc-ref cargo:%standard-phases phase)
4734 #:cargo-target #$(cargo-triplet)
4735 args))
4736 '(prepare-rust-crates
4737 unpack-rust-crates
4738 configure
4739 check-for-pregenerated-files
4740 patch-cargo-checksums))))
4741 (add-after 'prepare-cargo-build-system 'chdir
4742 (lambda _
4743 (chdir "crates/jiter-python"))))))
4744 (native-inputs
4745 (append (list maturin
4746 python-dirty-equals
4747 python-pytest
4748 rust
4749 `(,rust "cargo"))
4750 (or (and=> (%current-target-system)
4751 (compose list make-rust-sysroot))
4752 '())))
4753 (inputs (cargo-inputs 'jiter))
4754 (home-page "https://github.com/pydantic/jiter/")
4755 (synopsis "Iterable JSON parser")
4756 (description
4757 "This package provides a fast Python iterable JSON parser, backed by Rust
4758libraries.")
4759 (license license:bsd-3)))
4760
4761(define-public python-justhtml
4762 (package
4763 (name "python-justhtml")
4764 (version "1.13.0")
4765 (source
4766 (origin
4767 (method git-fetch)
4768 (uri (git-reference
4769 (url "https://github.com/emilstenstrom/justhtml")
4770 (commit (string-append "v" version))))
4771 (file-name (git-file-name name version))
4772 (sha256
4773 (base32 "1hy5w3lr08sj3pivs46nnlfsvrd9ynmicxcrjk4sxbpg7411lyj5"))))
4774 (build-system pyproject-build-system)
4775 (native-inputs
4776 (list python-hatchling))
4777 (home-page "https://github.com/emilstenstrom/justhtml")
4778 (synopsis "Pure Python HTML5 parser")
4779 (description
4780 "JustHTML is a pure Python HTML5 parser. It has a simple API and does
4781not require C extensions or system dependencies.")
4782 (license license:expat)))
4783
4784(define-public python-hf-xet
4785 (package
4786 (name "python-hf-xet")
4787 (version "1.5.1")
4788 (source
4789 (origin
4790 (method git-fetch)
4791 (uri (git-reference
4792 (url "https://github.com/huggingface/xet-core")
4793 (commit (string-append "v" version))))
4794 (file-name (git-file-name name version))
4795 (sha256
4796 (base32 "0bczy0a8g7fnscpz2plq2pq0b8vapx9q5sny13rs2fa04ypq992f"))
4797 (modules '((guix build utils)))
4798 (snippet #~(for-each delete-file
4799 (find-files "." "Cargo\\.lock$")))))
4800 (build-system pyproject-build-system)
4801 (arguments
4802 (list
4803 #:imported-modules (append %cargo-build-system-modules
4804 %pyproject-build-system-modules)
4805 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4806 (guix build pyproject-build-system)
4807 (guix build utils))
4808 #:phases
4809 #~(modify-phases %standard-phases
4810 (add-after 'unpack 'prepare-cargo-build-system
4811 (lambda args
4812 (for-each (lambda (phase)
4813 (format #t "Running cargo phase: ~a~%" phase)
4814 (apply (assoc-ref cargo:%standard-phases phase)
4815 #:cargo-target #$(cargo-triplet)
4816 args))
4817 '(prepare-rust-crates
4818 unpack-rust-crates
4819 configure
4820 check-for-pregenerated-files
4821 patch-cargo-checksums))))
4822 (add-after 'prepare-cargo-build-system 'chdir
4823 (lambda _
4824 (chdir "hf_xet"))))))
4825 (native-inputs
4826 (append (list maturin
4827 python-pytest
4828 rust
4829 `(,rust "cargo"))
4830 (or (and=> (%current-target-system)
4831 (compose list make-rust-sysroot))
4832 '())))
4833 (inputs (cargo-inputs 'hf_xet))
4834 (home-page "https://github.com/huggingface/xet-core")
4835 (synopsis "Transfer large files with the Hugging Face Hub")
4836 (description
4837 "This package enables @code{python-huggingface-hub} to utilize xet
4838storage for uploading and downloading to HF Hub. Xet storage provides
4839chunk-based deduplication, efficient storage/retrieval with local disk
4840caching, and backwards compatibility with Git LFS. This library is not meant
4841to be used directly, and is instead intended to be used from
4842@code{python-huggingface-hub}.")
4843 (license license:asl2.0)))
4844
4845(define-public python-huggingface-hub
4846 (package
4847 (name "python-huggingface-hub")
4848 (version "0.36.2")
4849 (source
4850 (origin
4851 (method git-fetch)
4852 (uri (git-reference
4853 (url "https://github.com/huggingface/huggingface_hub")
4854 (commit (string-append "v" version))))
4855 (file-name (git-file-name name version))
4856 (sha256
4857 (base32 "0hgdkfp7472sp0fjm5mwsx2rdlbr2ms8mzfzs0zr501gdwr7jjki"))))
4858 (build-system pyproject-build-system)
4859 (arguments
4860 (list
4861 #:test-flags
4862 ;; We don't have sentence_transformers...
4863 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
4864 ;; ...nor do we have InquirerPy...
4865 "--ignore=tests/test_command_delete_cache.py"
4866 ;; ...or timm...
4867 "--ignore=contrib/timm/test_timm.py"
4868 ;; ...or spacy_huggingface_hub
4869 "--ignore=contrib/spacy/test_spacy.py"
4870 ;; These all require internet access
4871 "--ignore=tests/test_cache_no_symlinks.py"
4872 "--ignore=tests/test_cache_layout.py"
4873 "--ignore=tests/test_commit_scheduler.py"
4874 "--ignore=tests/test_file_download.py"
4875 "--ignore=tests/test_hf_api.py"
4876 "--ignore=tests/test_hf_file_system.py"
4877 "--ignore=tests/test_inference_api.py"
4878 "--ignore=tests/test_inference_async_client.py"
4879 "--ignore=tests/test_inference_client.py"
4880 "--ignore=tests/test_inference_text_generation.py"
4881 "--ignore=tests/test_login_utils.py"
4882 "--ignore=tests/test_offline_utils.py"
4883 "--ignore=tests/test_repocard.py"
4884 "--ignore=tests/test_repository.py"
4885 "--ignore=tests/test_snapshot_download.py"
4886 "--ignore=tests/test_utils_cache.py"
4887 "--ignore=tests/test_utils_git_credentials.py"
4888 "--ignore=tests/test_utils_http.py"
4889 "--ignore=tests/test_utils_pagination.py"
4890 "--ignore=tests/test_webhooks_server.py"
4891 "-k" (string-append
4892 "not test_push_to_hub"
4893 " and not test_from_pretrained_model_id_only"
4894 " and not test_from_pretrained_model_id_and_revision"
4895 ;; These all require internet access
4896 " and not test_auth"
4897 " and not test_oauth"
4898 " and not test_utils_sha"
4899 " and not test_inference_providers"
4900 " and not test_xet"))
4901 #:phases
4902 '(modify-phases %standard-phases
4903 (add-before 'check 'pre-check
4904 ;; Some tests need to write to HOME.
4905 (lambda _ (setenv "HOME" "/tmp"))))))
4906 (propagated-inputs
4907 (list python-filelock
4908 python-fsspec
4909 python-hf-xet
4910 python-packaging
4911 python-pyyaml
4912 python-requests
4913 python-tqdm
4914 python-typing-extensions))
4915 (native-inputs
4916 (list python-aiohttp
4917 python-fastapi
4918 python-jedi
4919 python-jinja2
4920 python-numpy
4921 python-pillow
4922 python-pydantic
4923 python-pytest
4924 python-pytest-asyncio
4925 python-pytest-env
4926 python-pytest-mock
4927 python-pytest-rerunfailures
4928 python-pytest-vcr
4929 python-pytest-xdist
4930 python-setuptools
4931 python-types-requests
4932 python-types-toml
4933 python-types-urllib3
4934 python-typing-extensions
4935 python-urllib3))
4936 (home-page "https://huggingface.co/docs/huggingface_hub/")
4937 (synopsis "Client library for accessing the huggingface.co hub")
4938 (description
4939 "This package provides a client library to download and publish models,
4940datasets and other repos on the @url{huggingface.co} hub.")
4941 (license license:asl2.0)))
4942
4943(define-public python-kubernetes
4944 (package
4945 (name "python-kubernetes")
4946 (version "35.0.0")
4947 (source
4948 (origin
4949 (method url-fetch)
4950 (uri (pypi-uri "kubernetes" version))
4951 (sha256
4952 (base32 "1vh9bzq175fzv9av3v37lcfh37yzss2d9vxrb0a84fa2ji2d601x"))))
4953 (build-system pyproject-build-system)
4954 (arguments
4955 (list
4956 #:test-flags
4957 #~(list
4958 ;; The following tests expect a local running Kubernetes cluster.
4959 "--ignore=kubernetes/e2e_test"
4960 "--ignore=kubernetes/dynamic")))
4961 (native-inputs
4962 (list python-pytest
4963 python-setuptools))
4964 (propagated-inputs
4965 (list python-certifi
4966 python-dateutil
4967 python-durationpy
4968 python-google-auth
4969 python-pyyaml
4970 python-requests
4971 python-requests-oauthlib
4972 python-six ;XXX: hard dependency
4973 python-urllib3
4974 python-websocket-client))
4975 (home-page "https://github.com/kubernetes-client/python")
4976 (synopsis "Python client for Kubernetes")
4977 (description
4978 "This package provides an official Python client library for
4979@url{http://kubernetes.io, Kubernetes}.")
4980 (license license:asl2.0)))
4981
4982(define-public python-lazr-restfulclient
4983 (package
4984 (name "python-lazr-restfulclient")
4985 (version "0.14.6")
4986 (source
4987 (origin
4988 (method url-fetch)
4989 (uri (pypi-uri "lazr.restfulclient" version))
4990 (sha256
4991 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
4992 (build-system pyproject-build-system)
4993 (arguments
4994 (list
4995 #:phases
4996 #~(modify-phases %standard-phases
4997 ;; Disable part of the test suite to avoid the lazr.authentication
4998 ;; requirement, which requires 'oauth', a Python 2 only library.
4999 (add-after 'unpack 'remove-some-checks
5000 (lambda _
5001 (with-directory-excursion "src/lazr/restfulclient/tests"
5002 (for-each delete-file '("test_oauth.py" "test_docs.py")))
5003 (substitute* "setup.py"
5004 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
5005 ""))))
5006 (replace 'check
5007 (lambda* (#:key tests? #:allow-other-keys)
5008 (if tests?
5009 (invoke "zope-testrunner" "--test-path=src")
5010 (format #t "test suite not run~%")))))))
5011 (native-inputs
5012 (list python-setuptools
5013 python-testtools
5014 python-wheel
5015 python-wsgi-intercept
5016 python-zope-testrunner))
5017 (propagated-inputs
5018 (list python-distro
5019 python-httplib2
5020 python-oauthlib
5021 python-pyparsing
5022 python-setuptools
5023 python-six
5024 python-wadllib))
5025 (home-page "https://launchpad.net/lazr.restfulclient")
5026 (synopsis "Web client Python library extending wadlib")
5027 (description "This package provides a programmable client library that
5028adds functionality on top of @code{wadlib}.")
5029 (license license:lgpl3+)))
5030
5031(define-public python-launchpadlib
5032 (package
5033 (name "python-launchpadlib")
5034 (version "2.1.0")
5035 (source
5036 (origin
5037 (method url-fetch)
5038 (uri (pypi-uri "launchpadlib" version))
5039 (sha256
5040 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
5041 (build-system pyproject-build-system)
5042 (arguments
5043 (list #:phases #~(modify-phases %standard-phases
5044 (add-before 'check 'set-home
5045 (lambda _
5046 ;; Tests require a writable home.
5047 (setenv "HOME" "/tmp"))))))
5048 (propagated-inputs
5049 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
5050 (native-inputs (list python-pytest python-testresources python-wadllib
5051 python-setuptools python-wheel))
5052 (home-page "https://documentation.ubuntu.com/launchpad")
5053 (synopsis "Python client library for Launchpad's web service")
5054 (description "@code{launchpadlib} is a Python library that allows
5055scripting Launchpad via its the web service API.")
5056 (license license:lgpl3+)))
5057
5058(define-public python-lazr-uri
5059 (package
5060 (name "python-lazr-uri")
5061 (version "1.0.7")
5062 (source
5063 (origin
5064 (method url-fetch)
5065 (uri (pypi-uri "lazr_uri" version))
5066 (sha256
5067 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
5068 (build-system pyproject-build-system)
5069 (arguments
5070 (list
5071 #:phases
5072 #~(modify-phases %standard-phases
5073 (replace 'check
5074 (lambda* (#:key tests? #:allow-other-keys)
5075 (if tests?
5076 (invoke "zope-testrunner" "--test-path=src")
5077 (format #t "test suite not run~%")))))))
5078 (native-inputs (list python-setuptools python-zope-testrunner))
5079 (home-page "https://launchpad.net/lazr.uri")
5080 (synopsis "Python URI manipulation library")
5081 (description "This Python package provides a self-contained, easily
5082reusable library for parsing, manipulating, and generating URIs.")
5083 (license license:lgpl3)))
5084
5085(define-public python-ldaptor
5086 (package
5087 (name "python-ldaptor")
5088 (version "21.2.0")
5089 (source
5090 (origin
5091 (method url-fetch)
5092 (uri (pypi-uri "ldaptor" version))
5093 (sha256
5094 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
5095 (build-system pyproject-build-system)
5096 (arguments
5097 (list
5098 #:test-flags
5099 #~(list "-m" "twisted.trial"
5100 (string-append "-j" (number->string (parallel-job-count)))
5101 "ldaptor")
5102 #:phases
5103 #~(modify-phases %standard-phases
5104 (add-after 'unpack 'python-3.12-patch
5105 (lambda _
5106 (substitute* "ldaptor/config.py"
5107 (("SafeConfigParser")
5108 "ConfigParser"))))
5109 (add-before 'check 'disable-failing-tests
5110 (lambda _
5111 ;; Testing with Twisted 22.4 results in infinite loop creating
5112 ;; temporary config files, see
5113 ;; <https://github.com/twisted/ldaptor/issues/238>.
5114 (delete-file "ldaptor/test/test_config.py")))
5115 (replace 'check
5116 (lambda* (#:key tests? test-flags #:allow-other-keys)
5117 (when tests?
5118 (apply invoke "python" test-flags)))))))
5119 (native-inputs
5120 (list python-setuptools
5121 python-wheel))
5122 (propagated-inputs
5123 (list python-passlib
5124 python-pyopenssl
5125 python-service-identity ; to pass sanity check, for Twisted[tls]
5126 python-pyparsing
5127 python-twisted
5128 python-zope-interface))
5129 (home-page "https://github.com/twisted/ldaptor")
5130 (synopsis "Pure-Python Twisted library for LDAP")
5131 (description
5132 "This package provides a Python Twisted library for LDAP, which key
5133feaatures are:
5134@itemize
5135@item LDAP client logic
5136@item separately-accessible LDAP and BER protocol message generation/parsing
5137@item ASCII-format LDAP filter generation and parsing
5138@item LDIF format data generation
5139@item Samba password changing logic
5140@end itemize")
5141 (license license:expat)))
5142
5143(define-public python-legacy-cgi
5144 (package
5145 (name "python-legacy-cgi")
5146 (version "2.6.1")
5147 (source
5148 (origin
5149 (method url-fetch)
5150 (uri (pypi-uri "legacy_cgi" version))
5151 (sha256
5152 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
5153 (build-system pyproject-build-system)
5154 (native-inputs (list python-poetry-core python-pytest))
5155 (home-page "https://github.com/jackrosenthal/legacy-cgi")
5156 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
5157 (description
5158 "This is a fork of the standard library modules @code{cgi} and
5159@code{cgitb}. They are slated to be removed from the Python standard library
5160in Python 3.13 by PEP-594.")
5161 (license license:psfl)))
5162
5163(define-public python-librouteros
5164 (package
5165 (name "python-librouteros")
5166 (version "4.0.0")
5167 (source
5168 (origin
5169 (method git-fetch)
5170 (uri (git-reference
5171 (url "https://github.com/luqasz/librouteros")
5172 (commit version)))
5173 (file-name (git-file-name name version))
5174 (sha256
5175 (base32 "0in952b2idb5j8v6sxfm21gqbr5i5776w5ir0hdsxjrl2f29305v"))))
5176 (build-system pyproject-build-system)
5177 (arguments
5178 (list
5179 #:build-backend "hatchling.build"
5180 #:test-flags
5181 #~(list "tests/unit")))
5182 (native-inputs
5183 (list python-hatchling
5184 python-pytest
5185 python-pytest-asyncio
5186 python-stamina))
5187 (home-page "https://github.com/luqasz/librouteros")
5188 (synopsis "Python implementation of MikroTik RouterOS API")
5189 (description
5190 "This package implements MikroTik's @code{RouterOS} API.")
5191 (license license:gpl2+)))
5192
5193(define-public python-litestar
5194 (package
5195 (name "python-litestar")
5196 (version "2.24.0")
5197 (source
5198 (origin
5199 (method git-fetch)
5200 (uri (git-reference
5201 (url "https://github.com/litestar-org/litestar")
5202 (commit (string-append "v" version))))
5203 (file-name (git-file-name name version))
5204 (sha256
5205 (base32 "0yg49qjhhq2vv6qnn4b1sizp71vjl2qd16j44370n1af6fxzfssa"))))
5206 (build-system pyproject-build-system)
5207 (arguments
5208 (list
5209 ;; tests: 3332 passed, 45 skipped, 1 xfailed, 8 warnings, 3 rerun
5210 #:test-flags
5211 #~(list "--numprocesses" (number->string (parallel-job-count))
5212 "--timeout=10"
5213 "--reruns=3"
5214 "--ignore=tests/e2e/"
5215 "--ignore=tests/examples/"
5216 "--ignore=tests/unit/test_middleware/"
5217 "--ignore=tests/unit/test_plugins/"
5218 ;; Tests hang.
5219 "--ignore=tests/unit/test_testing/test_sub_client/"
5220 ;; Tests miss optional dependencies.
5221 "--ignore=tests/unit/test_app.py"
5222 "--ignore=tests/unit/test_channels/test_backends.py"
5223 "--ignore=tests/unit/test_contrib/test_minijinja.py"
5224 "--ignore=tests/unit/test_contrib/test_opentelemetry.py"
5225 "--ignore=tests/unit/test_contrib/test_prometheus.py"
5226 "--ignore=tests/unit/test_contrib/test_sqlalchemy.py"
5227 "--ignore=tests/unit/test_dto/test_factory/test_integration.py"
5228 "--ignore=tests/unit/test_repository/test_generic_mock_repository.py"
5229 "--ignore=tests/unit/test_template/test_built_in.py"
5230 "--ignore=tests/unit/test_template/test_builtin_functions.py"
5231 "--ignore=tests/unit/test_template/test_context.py"
5232 "--ignore=tests/unit/test_template/test_csrf_token.py"
5233 "--ignore=tests/unit/test_template/test_template.py"
5234 "--ignore=tests/unit/test_testing/test_test_client.py"
5235 ;; Tests require Docker.
5236 "--ignore=tests/docker_service_fixtures.py"
5237 ;; XXX: Tests need running Redis, PostgreSQL and Valkey.
5238 "--ignore=tests/unit/test_stores.py"
5239 "--ignore=tests/unit/test_channels/test_plugin.py"
5240 ;; Assert 'export namespace API.
5241 (string-append "--deselect=tests/unit/test_openapi/"
5242 "test_typescript_converter/"
5243 "test_converter.py"
5244 "::test_openapi_to_typescript_converter")
5245 ;; Tests fail find correct version or on deprecation warnings.
5246 #$@(map (lambda (ls) (string-append "--deselect=tests/unit/"
5247 (string-join ls "::")))
5248 '(("test_cli/test_suggestions.py"
5249 "test_suggest_version")
5250 ("test_connection/test_request.py"
5251 "test_request_headers")
5252 ("test_connection/test_websocket.py"
5253 "test_websocket_headers")
5254 ("test_deprecations.py"
5255 "test_contrib_minijnja_deprecation")
5256 ("test_deprecations.py"
5257 "test_minijinja_from_state_deprecation")))
5258 "tests")))
5259 (native-inputs
5260 (list python-aiosqlite
5261 python-asyncpg
5262 ;; python-beanie ;not packaged yet in Guix
5263 python-beautifulsoup4
5264 python-fsspec
5265 python-hatchling
5266 python-httpx-sse
5267 python-psutil
5268 python-psycopg
5269 python-pytest
5270 python-pytest-asyncio
5271 python-pytest-lazy-fixtures
5272 python-pytest-mock
5273 python-pytest-rerunfailures
5274 python-pytest-timeout
5275 python-pytest-xdist
5276 python-starlette
5277 python-time-machine-2
5278 python-trio))
5279 (propagated-inputs
5280 (list python-anyio
5281 python-click
5282 python-httpx
5283 python-litestar-htmx
5284 python-msgspec
5285 python-multidict
5286 python-multipart/defnull
5287 python-polyfactory
5288 python-pyyaml
5289 python-rich
5290 python-rich-click
5291 python-sniffio
5292 python-typing-extensions
5293 ;; [optional]
5294 python-advanced-alchemy
5295 python-annotated-types
5296 python-attrs
5297 python-brotli
5298 python-cryptography
5299 python-email-validator
5300 python-jinja2
5301 python-jsbeautifier
5302 python-mako
5303 ;; python-minijinja ;not packaged yet in Guix
5304 ;; python-opentelemetry-instrumentation-asgi
5305 python-opentelemetry-sdk
5306 python-piccolo
5307 python-pydantic
5308 python-pydantic-extra-types
5309 python-pyjwt
5310 python-redis
5311 python-structlog
5312 python-valkey
5313 python-uvicorn))
5314 (home-page "https://litestar.dev/")
5315 (synopsis "Light ASGI framework")
5316 (description
5317 "Litestar is a powerful,flexible yet opinionated ASGI framework, focused
5318on building APIs. It offers high-performance data validation, dependency
5319injection, first-class ORM integration, authorization primitives, a rich
5320plugin API, middleware, and much more that's needed to get applications up and
5321running.")
5322 (license license:expat)))
5323
5324;; A bare minimal package, mainly to use in tests and reduce closure size.
5325;; Tests are left out in the main package to slim down native-inputs and
5326;; propagated-inputs.
5327(define-public python-litestar-minimal
5328 (package/inherit python-litestar
5329 (name "python-litestar-minimal")
5330 (arguments (list #:tests? #f))
5331 (native-inputs
5332 (list python-hatchling))
5333 (propagated-inputs
5334 (list python-anyio
5335 python-click
5336 python-httpx
5337 python-litestar-htmx
5338 python-msgspec
5339 python-multidict
5340 python-multipart/defnull
5341 python-polyfactory
5342 python-pyyaml
5343 python-rich
5344 python-rich-click
5345 python-sniffio
5346 python-typing-extensions))))
5347
5348(define-public python-litestar-htmx
5349 (package
5350 (name "python-litestar-htmx")
5351 (version "0.5.0")
5352 (source
5353 (origin
5354 (method git-fetch)
5355 (uri (git-reference
5356 (url "https://github.com/litestar-org/litestar-htmx")
5357 (commit (string-append "v" version))))
5358 (file-name (git-file-name name version))
5359 (sha256
5360 (base32 "0brz2w2xk67v69rrj0cj0yd76x152vkyflq5cb6x3km2xn7cdgqw"))))
5361 (build-system pyproject-build-system)
5362 (arguments (list #:tests? #f)) ;cycles with python-litestar
5363 (native-inputs (list python-hatchling))
5364 (home-page "https://github.com/litestar-org/litestar-htmx")
5365 (synopsis "Litestar plugin for HTMX")
5366 (description
5367 "This package provides @url{https://htmx.org/, HTMX} Integration for
5368Litestar.")
5369 (license license:expat)))
5370
5371(define-public python-multipart/defnull
5372 (package
5373 (name "python-multipart-defnull")
5374 (version "2.0.1")
5375 (source
5376 (origin
5377 (method git-fetch)
5378 (uri (git-reference
5379 (url "https://github.com/defnull/multipart")
5380 (commit (string-append "v" version))))
5381 (file-name (git-file-name name version))
5382 (sha256
5383 (base32 "1kga8h03rk44nipks2dal9lrs455alfdh4rl1dmpr8q1l8fkcnia"))))
5384 (build-system pyproject-build-system)
5385 (native-inputs (list python-flit-core python-pytest))
5386 (home-page "https://multipart.readthedocs.io/")
5387 (synopsis "Multipart/form-data parser for Python")
5388 (description
5389 "This package provides a fast incremental non-blocking parser for
5390multipart/form-data [HTML5, @url{https://www.rfc-editor.org/rfc/rfc7578,
5391RFC7578}], as well as blocking alternatives for easier use in WSGI or CGI
5392applications:
5393
5394@itemize
5395@item PushMultipartParser: Fast SansIO (incremental, non-blocking) parser
5396suitable for ASGI, asyncio and other IO, time or memory constrained
5397environments.
5398
5399@item MultipartParser: Streaming parser that reads from a byte stream and
5400yields memory- or disk-buffered MultipartPart instances.
5401
5402@item WSGI Helper: High-level functions and containers for WSGI or CGI
5403applications with support for both multipart and urlencoded form submissions.
5404@end itemize
5405
5406It is hosted in PyPI as @url{https://pypi.org/project/multipart/,
5407multipart}.")
5408 (license license:expat)))
5409
5410(define-public python-opentelemetry-api
5411 (package
5412 (name "python-opentelemetry-api")
5413 (version "1.37.0")
5414 (source
5415 (origin
5416 (method url-fetch)
5417 (uri (pypi-uri "opentelemetry_api" version))
5418 (sha256
5419 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
5420 (build-system pyproject-build-system)
5421 (propagated-inputs (list python-importlib-metadata
5422 python-typing-extensions))
5423 (native-inputs (list python-hatchling
5424 python-opentelemetry-test-utils-bootstrap))
5425 (home-page "https://opentelemetry.io/docs/languages/python/")
5426 (synopsis "OpenTelemetry Python API")
5427 (description "@code{OpenTelemetry} Python API.")
5428 (license license:asl2.0)))
5429
5430(define-public python-opentelemetry-api-bootstrap
5431 (hidden-package
5432 (package/inherit python-opentelemetry-api
5433 (name "python-opentelemetry-api-bootstrap")
5434 (arguments
5435 (list
5436 #:tests? #f))
5437 (native-inputs (list python-hatchling)))))
5438
5439(define-public python-opentelemetry-sdk
5440 (package
5441 (name "python-opentelemetry-sdk")
5442 (version "1.37.0")
5443 (source
5444 (origin
5445 (method url-fetch)
5446 (uri (pypi-uri "opentelemetry_sdk" version))
5447 (sha256
5448 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
5449 (build-system pyproject-build-system)
5450 (propagated-inputs (list python-opentelemetry-api
5451 python-opentelemetry-semantic-conventions
5452 python-typing-extensions))
5453 (native-inputs (list python-hatchling
5454 python-opentelemetry-test-utils-bootstrap
5455 python-pytest))
5456 (home-page "https://opentelemetry.io/docs/languages/python/")
5457 (synopsis "OpenTelemetry Python SDK")
5458 (description "@code{OpenTelemetry} Python SDK.")
5459 (license license:asl2.0)))
5460
5461(define-public python-opentelemetry-sdk-bootstrap
5462 (hidden-package
5463 (package/inherit python-opentelemetry-sdk
5464 (name "python-opentelemetry-sdk-bootstrap")
5465 (arguments (list #:tests? #f))
5466 (propagated-inputs (list python-opentelemetry-api-bootstrap
5467 python-opentelemetry-semantic-conventions-bootstrap))
5468 (native-inputs (list python-hatchling)))))
5469
5470(define-public python-opentelemetry-semantic-conventions
5471 (package
5472 (name "python-opentelemetry-semantic-conventions")
5473 (version "0.58b0")
5474 (source
5475 (origin
5476 (method url-fetch)
5477 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
5478 (sha256
5479 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
5480 (build-system pyproject-build-system)
5481 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
5482 (native-inputs (list python-hatchling))
5483 (home-page "https://opentelemetry.io/docs/languages/python/")
5484 (synopsis "OpenTelemetry Semantic Conventions")
5485 (description "@code{OpenTelemetry} Semantic Conventions.")
5486 (license license:asl2.0)))
5487
5488(define-public python-opentelemetry-semantic-conventions-bootstrap
5489 (hidden-package
5490 (package/inherit python-opentelemetry-semantic-conventions
5491 (name "python-opentelemetry-semantic-conventions-bootstrap")
5492 (arguments
5493 (list
5494 #:tests? #f))
5495 (propagated-inputs (list python-opentelemetry-api-bootstrap
5496 python-typing-extensions)))))
5497
5498(define-public python-opentelemetry-test-utils
5499 (package
5500 (name "python-opentelemetry-test-utils")
5501 (version "0.58b0")
5502 (source
5503 (origin
5504 (method url-fetch)
5505 (uri (pypi-uri "opentelemetry_test_utils" version))
5506 (sha256
5507 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
5508 (build-system pyproject-build-system)
5509 (arguments (list #:tests? #f)) ; No tests in the wheel.
5510 (propagated-inputs
5511 (list python-asgiref
5512 python-opentelemetry-api
5513 python-opentelemetry-sdk))
5514 (native-inputs (list python-hatchling))
5515 (home-page "https://opentelemetry.io/docs/languages/python/")
5516 (synopsis "Test utilities for OpenTelemetry unit tests")
5517 (description "Test utilities for @code{OpenTelemetry} unit tests.")
5518 (license license:asl2.0)))
5519
5520(define-public python-opentelemetry-test-utils-bootstrap
5521 (hidden-package
5522 (package/inherit python-opentelemetry-test-utils
5523 (name "python-opentelemetry-test-utils-bootstrap")
5524 (propagated-inputs
5525 (list python-asgiref
5526 python-opentelemetry-api-bootstrap
5527 python-opentelemetry-sdk-bootstrap)))))
5528
5529(define-public python-pathy
5530 (package
5531 (name "python-pathy")
5532 (version "0.11.0")
5533 (source
5534 (origin
5535 (method url-fetch)
5536 (uri (pypi-uri "pathy" version))
5537 (sha256
5538 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
5539 (build-system pyproject-build-system)
5540 (native-inputs
5541 (list python-mock
5542 python-pytest
5543 python-setuptools))
5544 (propagated-inputs
5545 (list python-pathlib-abc-for-python-pathy
5546 python-smart-open-6
5547 python-typer))
5548 (home-page "https://github.com/justindujardin/pathy")
5549 (synopsis "Path interface for local and cloud bucket storage")
5550 (description "Pathy is a python package (with type annotations) for
5551working with Cloud Bucket storage providers using a @code{pathlib} interface.
5552It provides @code{pathlib.Path} subclasses for local and cloud bucket
5553storage.")
5554 (license license:asl2.0)))
5555
5556(define-public python-portend
5557 (package
5558 (name "python-portend")
5559 (version "3.2.1")
5560 (source
5561 (origin
5562 (method url-fetch)
5563 (uri (pypi-uri "portend" version))
5564 (sha256
5565 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
5566 (build-system pyproject-build-system)
5567 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
5568 ;; download dependencies.
5569 (arguments
5570 '(#:test-flags '("-k" "not project")))
5571 (native-inputs
5572 (list python-pytest
5573 python-setuptools
5574 python-setuptools-scm))
5575 (propagated-inputs
5576 (list python-tempora))
5577 (home-page "https://github.com/jaraco/portend")
5578 (synopsis "Monitor TCP ports for bound or unbound states")
5579 (description
5580 "@code{python-portend} can be used to monitor TCP ports for bound or
5581unbound states. For example, waiting for a port to be occupied or freed
5582within a set timeout. @code{python-portend} can also be used directly from
5583the command line.")
5584 (license license:expat)))
5585
5586(define-public python-prawcore
5587 (package
5588 (name "python-prawcore")
5589 (version "4.0.0")
5590 (source
5591 (origin
5592 (method git-fetch)
5593 (uri (git-reference
5594 (url "https://github.com/praw-dev/prawcore")
5595 (commit (string-append "v" version))))
5596 (file-name (git-file-name name version))
5597 (sha256
5598 (base32 "1kqqv1n9bibxfgagbyd8vl0yzrd4lr58xl59swz5v70w0kfap5fm"))))
5599 (build-system pyproject-build-system)
5600 (arguments
5601 (list
5602 ;; This test fails with a str rather than a bytes-like object.
5603 #:test-flags #~(list "-k" "not test_request__service_unavailable")))
5604 (native-inputs
5605 (list nss-certs-for-test
5606 python-betamax
5607 python-betamax-matchers
5608 python-betamax-serializers
5609 python-hatchling
5610 python-mock
5611 python-pytest
5612 python-testfixtures
5613 python-vcrpy))
5614 (propagated-inputs
5615 (list python-requests))
5616 (synopsis "Core component of PRAW")
5617 (description "PRAWcore is a low-level communication layer used by PRAW.")
5618 (home-page "https://praw.readthedocs.io/en/latest/")
5619 (license license:bsd-2)))
5620
5621(define-public python-praw
5622 (package
5623 (name "python-praw")
5624 (version "8.0.2")
5625 (source
5626 (origin
5627 (method git-fetch)
5628 (uri (git-reference
5629 (url "https://github.com/praw-dev/praw")
5630 (commit (string-append "v" version))))
5631 (file-name (git-file-name name version))
5632 (sha256
5633 (base32 "15kwvkc6ag83p3mrfnq6ffyvbw4d3njx0dl0vv00y7724b2rpqxw"))))
5634 (build-system pyproject-build-system)
5635 (arguments
5636 (list #:test-flags
5637 #~(list "--ignore=tests/units/models"
5638 "--ignore=tests/integration/models"
5639 "--ignore=tests/unit/test_config.py"
5640 "--ignore=tests/integration/test_reddit.py")))
5641 (native-inputs
5642 (list nss-certs-for-test
5643 python-betamax
5644 python-betamax-matchers
5645 python-hatchling
5646 python-pytest
5647 python-vcrpy))
5648 (propagated-inputs
5649 (list python-defusedxml
5650 python-prawcore
5651 python-update-checker
5652 python-websocket-client))
5653 (synopsis "Python Reddit API Wrapper")
5654 (description "PRAW is a Python package that allows for simple access to
5655Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
5656API rules.")
5657 (home-page "https://praw.readthedocs.io/en/latest/")
5658 (license license:bsd-2)))
5659
5660(define-public python-frozenlist
5661 (package
5662 (name "python-frozenlist")
5663 (version "1.8.0")
5664 (source
5665 (origin
5666 (method git-fetch)
5667 (uri (git-reference
5668 (url "https://github.com/aio-libs/frozenlist")
5669 (commit (string-append "v" version))))
5670 (file-name (git-file-name name version))
5671 (sha256
5672 (base32 "0r1kxf5b562zrn04nl912i6a8y1fyc891l1284v0zj9llb97limy"))))
5673 ;; XXX: Without "wheel", the 'install phase can't find the wheel.
5674 (outputs (list "out" "wheel"))
5675 (build-system pyproject-build-system)
5676 ;; The configuration contains explicit early calls to pytest_cov.
5677 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
5678 (native-inputs
5679 (list python-cython
5680 python-expandvars
5681 python-pytest
5682 python-setuptools
5683 python-tomli))
5684 (home-page "https://github.com/aio-libs/frozenlist")
5685 (synopsis "List-like data structure for Python")
5686 (description "@code{frozenlist.FrozenList} is a list-like structure which
5687implements @code{collections.abc.MutableSequence}. It can be made immutable
5688by calling @code{FrozenList.freeze}.")
5689 (license license:asl2.0)))
5690
5691(define-public python-httpauth
5692 (package
5693 (name "python-httpauth")
5694 (version "0.4.1")
5695 (source (origin
5696 (method url-fetch)
5697 (uri (pypi-uri "httpauth" version))
5698 (sha256
5699 (base32
5700 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
5701 (build-system pyproject-build-system)
5702 (native-inputs (list python-pytest python-setuptools python-wheel))
5703 (home-page "https://github.com/jonashaag/httpauth")
5704 (synopsis "WSGI HTTP Digest Authentication middleware")
5705 (description "@code{python-httpauth} is WSGI middleware that secures some/all
5706routes using HTTP Digest Authentication.")
5707 (license license:bsd-2)))
5708
5709(define-public python-publicsuffixlist
5710 (package
5711 (name "python-publicsuffixlist")
5712 (version "1.0.2.20250202")
5713 (source
5714 (origin
5715 (method url-fetch)
5716 (uri (pypi-uri "publicsuffixlist" version))
5717 (sha256
5718 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
5719 (build-system pyproject-build-system)
5720 (arguments (list #:test-backend #~'unittest))
5721 (native-inputs (list python-setuptools))
5722 (home-page "https://github.com/ko-zu/psl")
5723 (synopsis "Public suffix list for Python")
5724 (description
5725 "This package provides an implementation of
5726@url{https://publicsuffix.org/, Public Suffix List } as Python library.
5727
5728Features:
5729@itemize
5730@item supports IDN (unicode and punycoded)
5731@item shipped with built-in PSL and an updater script
5732@item written in Pure Python with no library dependencies
5733@end itemize")
5734 (license license:mpl2.0)))
5735
5736(define-public python-pycognito
5737 (package
5738 (name "python-pycognito")
5739 (version "2024.5.1")
5740 (source
5741 (origin
5742 (method url-fetch)
5743 (uri (pypi-uri "pycognito" version))
5744 (sha256
5745 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
5746 (build-system pyproject-build-system)
5747 (arguments
5748 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
5749 (list #:tests? #f))
5750 (native-inputs
5751 (list python-setuptools))
5752 (propagated-inputs
5753 (list python-boto3
5754 python-envs
5755 python-pyjwt
5756 python-requests))
5757 (home-page "https://github.com/pvizeli/pycognito")
5758 (synopsis "Python library for using AWS Cognito")
5759 (description
5760 "This package provides a Python class to integrate Boto3's Cognito
5761client so it is easy to login users, with @acronym{Secure Remote Password,
5762SRP} support.")
5763 (license license:asl2.0)))
5764
5765(define-public python-pydap
5766 (package
5767 (name "python-pydap")
5768 (version "3.5.10")
5769 (source
5770 (origin
5771 (method git-fetch)
5772 (uri (git-reference
5773 (url "https://github.com/pydap/pydap")
5774 (commit version)))
5775 (file-name (git-file-name name version))
5776 (sha256
5777 (base32 "000b7jqjpx71miwxhbi07amyjyijq925x9x3paa7kzrr268klc2z"))))
5778 (build-system pyproject-build-system)
5779 (arguments
5780 (list
5781 ;; tests: 435 passed, 6 skipped
5782 #:test-flags
5783 ;; Tests need extra packaging.
5784 #~(list "--ignore=src/pydap/tests/test_wsgi_functions.py"
5785 "--ignore=src/pydap/tests/test_wsgi_ssf.py"
5786 ;; Network access is required.
5787 "--ignore=src/pydap/tests/test_client.py"
5788 "--ignore=src/pydap/tests/test_handlers_dap.py"
5789 "--ignore=src/pydap/tests/test_open_dap4_url.py"
5790 "--ignore=src/pydap/tests/test_virtualizarr.py")))
5791 (native-inputs
5792 (list nss-certs-for-test
5793 python-requests-mock
5794 python-pytest
5795 python-setuptools
5796 python-setuptools-scm
5797 python-webtest))
5798 (propagated-inputs
5799 (list python-beautifulsoup4
5800 python-jinja2
5801 python-lxml
5802 python-numpy
5803 python-requests
5804 python-requests-cache
5805 python-scipy
5806 python-webob
5807 ;; [optional]
5808 gunicorn
5809 python-docopt-ng
5810 ;; python-coards ;not packaged yet in Guix
5811 python-fastparquet
5812 ;; python-gsw ;not packaged yet in Guix
5813 python-netcdf4
5814 python-openpyxl
5815 python-pastedeploy
5816 python-werkzeug))
5817 (home-page "https://pydap.github.io/pydap/en/intro.html")
5818 (synopsis "Data Access Protocol implementation in Python")
5819 (description
5820 "This package provides a pure Python implementation of the Data Access
5821Protocol (DAP, aka OPeNDAP).")
5822 (license license:expat)))
5823
5824(define-public python-pyrate-limiter
5825 (package
5826 (name "python-pyrate-limiter")
5827 (version "4.5.0")
5828 (source
5829 (origin
5830 (method git-fetch)
5831 (uri (git-reference
5832 (url "https://github.com/vutran1710/PyrateLimiter")
5833 (commit (string-append "v" version))))
5834 (file-name (git-file-name name version))
5835 (sha256
5836 (base32 "1hl1zv8r87dcpw68772xmy7x7q5nsb5bgdgk0iz9cwa2i5pmfhsi"))))
5837 (build-system pyproject-build-system)
5838 (arguments
5839 (list
5840 #:test-flags
5841 #~(list "--retries=0"
5842 ;; These tests have fragile timing assumptions and may fail or
5843 ;; hang under load.
5844 ;; See: <https://github.com/vutran1710/PyrateLimiter#247>.
5845 #$@(map (lambda (test)
5846 (string-append "--deselect=tests/" test))
5847 '("test_bucket_all.py::test_bucket_leak[create_sqlite_bucket]"
5848 "test_bucket_all.py::test_bucket_flush[create_sqlite_bucket]"
5849 "test_bucket_all.py::test_bucket_waiting"
5850 "test_bucket_factory.py::test_factory_leak[create_sqlite_bucket]"
5851 "test_limiter.py::test_limiter_01"
5852 "test_multiprocessing.py::test_bucket_full"
5853 "test_multiprocessing.py::test_limiter_delay"
5854 ;; Covers the other test_mp_bucket variants as well.
5855 "test_multiprocessing.py::test_mp_bucket"
5856 "test_multiprocessing.py::test_sqlite_filelock_bucket"))
5857 ;; Keep the separate weight-zero factory test enabled.
5858 "-k" (string-append "not test_limiter_async_factory_get"
5859 " or test_limiter_async_factory_get_weight0"))
5860 #:phases
5861 #~(modify-phases %standard-phases
5862 (add-before 'build 'set-version
5863 (lambda _
5864 (substitute* "pyproject.toml"
5865 ((".*uv-dynamic-versioning>.*") "")
5866 (("source.*uv-dynamic-versioning.*") "source = 'vcs'"))))
5867 (add-before 'check 'start-test-services
5868 (lambda* (#:key tests? #:allow-other-keys)
5869 (when tests?
5870 (invoke "redis-server" "--daemonize" "yes")
5871 (let ((dbdir (string-append (getcwd) "/pgdata")))
5872 (invoke "initdb" "-D" dbdir "-A" "trust" "-U" "postgres")
5873 (invoke "pg_ctl" "-D" dbdir
5874 "-o" "-h 127.0.0.1 -p 5432 -k /tmp"
5875 "-l" (string-append dbdir "/server.log")
5876 "start"))))))))
5877 (native-inputs
5878 (list postgresql
5879 python-hatchling
5880 python-hatch-vcs
5881 python-pytest
5882 python-pytest-asyncio
5883 python-pytest-retry
5884 python-schedule
5885 redis))
5886 (propagated-inputs
5887 (list python-aiohttp
5888 python-filelock
5889 python-httpx
5890 python-httpx2
5891 python-psycopg
5892 python-psycopg-pool
5893 python-redis
5894 python-requests))
5895 (home-page "https://github.com/vutran1710/PyrateLimiter")
5896 (synopsis "Rate limiting for Python applications")
5897 (description
5898 "PyrateLimiter implements rate limiting using a leaky bucket algorithm,
5899with support for multiple limits and storage backends.")
5900 (license license:expat)))
5901
5902(define-public python-python3-saml
5903 (package
5904 (name "python-python3-saml")
5905 (version "1.16.0")
5906 (source
5907 (origin
5908 (method git-fetch)
5909 (uri (git-reference
5910 (url "https://github.com/SAML-Toolkits/python3-saml")
5911 (commit (string-append "v" version))))
5912 (file-name (git-file-name name version))
5913 (sha256
5914 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
5915 (build-system pyproject-build-system)
5916 (arguments
5917 (list
5918 ;; 214 tests pass, 50 fail; many fail because of required Internet
5919 ;; access or because of assumptions about the location of test files.
5920 #:tests? #false))
5921 (native-inputs
5922 (list python-freezegun
5923 python-poetry-core))
5924 (inputs
5925 (list xmlsec-openssl))
5926 (propagated-inputs
5927 (list python-isodate
5928 python-lxml
5929 python-xmlsec))
5930 (home-page "https://github.com/SAML-Toolkits/python3-saml")
5931 (synopsis "Saml Python toolkit")
5932 (description
5933 "The SAML Python Toolkit lets you add SAML support to your Python
5934software.")
5935 (license license:expat)))
5936
5937(define-public python-ovh
5938 (package
5939 (name "python-ovh")
5940 (version "1.1.0")
5941 (source (origin
5942 (method url-fetch)
5943 (uri (pypi-uri "ovh" version))
5944 (sha256
5945 (base32
5946 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
5947 (build-system pyproject-build-system)
5948 (arguments (list #:tests? #f)) ; XXX: tests require networking
5949 (propagated-inputs (list python-requests))
5950 (native-inputs (list python-setuptools))
5951 (home-page "https://api.ovh.com")
5952 (synopsis "Interact with OVHcloud APIs")
5953 (description "This package provides the official module to perform HTTP requests
5954to the OVHcloud APIs.")
5955 (license license:bsd-3)))
5956
5957(define-public python-pyzabbix
5958 (package
5959 (name "python-pyzabbix")
5960 (version "1.3.1")
5961 (source
5962 (origin
5963 (method git-fetch)
5964 (uri (git-reference
5965 (url "https://github.com/lukecyca/pyzabbix")
5966 (commit version)))
5967 (file-name (git-file-name name version))
5968 (sha256
5969 (base32 "1dbs3bz1mjlvlg46ikhg5j7agwni61ljlpiziknklv95yp29n86v"))))
5970 (build-system pyproject-build-system)
5971 (arguments
5972 (list #:test-flags #~(list "tests")))
5973 (native-inputs
5974 (list python-pytest
5975 python-requests-mock
5976 python-setuptools))
5977 (propagated-inputs
5978 (list python-packaging
5979 python-requests))
5980 (home-page "https://github.com/lukecyca/pyzabbix")
5981 (synopsis "Python interface to the Zabbix API")
5982 (description
5983 "@code{pyzabbix} is a Python module for working with the Zabbix API.")
5984 (license license:lgpl2.1+)))
5985
5986(define-public python-requests-cache
5987 (package
5988 (name "python-requests-cache")
5989 (version "1.3.2")
5990 (source
5991 (origin
5992 (method git-fetch)
5993 (uri (git-reference
5994 (url "https://github.com/requests-cache/requests-cache")
5995 (commit (string-append "v" version))))
5996 (file-name (git-file-name name version))
5997 (sha256
5998 (base32 "1yhvidmmd02c95i1hamyy34rb3wfzgzxil2k8ay1p4r4kv7pjada"))))
5999 (build-system pyproject-build-system)
6000 (arguments
6001 (list
6002 ;; tests: 429 passed, 1051 warnings
6003 #:test-flags
6004 #~(list "--numprocesses" (number->string (parallel-job-count))
6005 ;; These tests require access to external services, e.g. MongoDB
6006 ;; and Redis.
6007 "--ignore=tests/integration")
6008 #:phases
6009 #~(modify-phases %standard-phases
6010 (add-before 'check 'pre-check
6011 (lambda _
6012 ;; PermissionError: [Errno 13] Permission denied:
6013 ;; '/homeless-shelter'
6014 (setenv "HOME" "/tmp"))))))
6015 (native-inputs
6016 (list python-hatchling
6017 python-pytest
6018 python-pytest-rerunfailures
6019 python-pytest-xdist
6020 python-requests-mock
6021 python-responses
6022 python-rich
6023 python-tenacity
6024 python-time-machine
6025 python-timeout-decorator))
6026 (propagated-inputs
6027 (list python-attrs
6028 python-cattrs
6029 python-platformdirs
6030 python-requests
6031 python-url-normalize
6032 python-urllib3
6033 ;; [optional]
6034 python-boto3
6035 python-botocore
6036 python-itsdangerous
6037 python-orjson ;Python version < 3.14
6038 python-pymongo
6039 python-pyyaml
6040 python-redis
6041 python-ujson))
6042 (home-page "https://github.com/requests-cache/requests-cache")
6043 (synopsis "Persistent HTTP cache for Python requests")
6044 (description
6045 "This package provides a drop-in replacement for @code{requests.Session}
6046with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
6047responses as planin JSON/YAML file or save responses as plain JSON/YAML
6048files.")
6049 (license license:bsd-2)))
6050
6051(define-public python-requests-futures
6052 (package
6053 (name "python-requests-futures")
6054 (version "1.0.2")
6055 (source
6056 (origin
6057 (method url-fetch)
6058 (uri (pypi-uri "requests_futures" version))
6059 (sha256
6060 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
6061 (build-system pyproject-build-system)
6062 (native-inputs
6063 (list python-greenlet
6064 python-pytest
6065 python-pytest-httpbin
6066 python-setuptools
6067 python-werkzeug))
6068 (propagated-inputs (list python-requests))
6069 (home-page "https://github.com/ross/requests-futures")
6070 (synopsis "Asynchronous Python HTTP for Humans")
6071 (description
6072 "This package provides and add-on the Python Requests HTTP library to run
6073code asynchronously.")
6074 (license license:asl2.0)))
6075
6076(define-public python-requests-ratelimiter
6077 (package
6078 (name "python-requests-ratelimiter")
6079 (version "0.10.0")
6080 (source
6081 (origin
6082 (method url-fetch)
6083 (uri (pypi-uri "requests_ratelimiter" version))
6084 (sha256
6085 (base32 "0cvs1rydmaca85508dcc5jz2klqnpld38v0s477mrakcckbph6lw"))))
6086 (build-system pyproject-build-system)
6087 (native-inputs
6088 (list python-hatchling
6089 python-pytest
6090 python-requests-cache
6091 python-requests-mock))
6092 (propagated-inputs
6093 (list python-pyrate-limiter
6094 python-requests))
6095 (home-page "https://github.com/JWCook/requests-ratelimiter")
6096 (synopsis "Rate limiting for Python Requests")
6097 (description
6098 "Requests-Ratelimiter adds per-host rate limiting to Python's Requests
6099library using PyrateLimiter.")
6100 (license license:expat)))
6101
6102(define-public python-requests-unixsocket
6103 (package
6104 (name "python-requests-unixsocket")
6105 (version "0.4.1")
6106 (source
6107 (origin
6108 (method git-fetch)
6109 (uri (git-reference
6110 (url "https://github.com/msabramo/requests-unixsocket")
6111 (commit (string-append "v" version))))
6112 (file-name (git-file-name name version))
6113 (sha256
6114 (base32 "1f0pi31xqzm3cdag4s4gpdj36x169jwc8ibqvcwqz6h9c0pklf3n"))))
6115 (build-system pyproject-build-system)
6116 (native-inputs
6117 (list python-pytest
6118 python-setuptools
6119 python-setuptools-scm
6120 python-waitress))
6121 (propagated-inputs
6122 (list python-requests))
6123 (home-page "https://github.com/msabramo/requests-unixsocket")
6124 (synopsis "Use requests to talk HTTP via a UNIX domain socket")
6125 (description
6126 "This package provides an extension to @code{requests} which let it talk
6127HTTP via a UNIX domain socket.")
6128 (license license:asl2.0)))
6129
6130(define-public python-s3path
6131 (package
6132 (name "python-s3path")
6133 (version "0.6.4")
6134 (source
6135 (origin
6136 (method url-fetch)
6137 (uri (pypi-uri "s3path" version))
6138 (sha256
6139 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
6140 (build-system pyproject-build-system)
6141 (arguments
6142 (list
6143 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
6144 #:tests? #f))
6145 (native-inputs
6146 (list python-setuptools
6147 python-wheel))
6148 (propagated-inputs
6149 (list python-boto3
6150 python-smart-open))
6151 (home-page "https://github.com/liormizr/s3path")
6152 (synopsis "Pathlib extension for AWS S3 Service")
6153 (description
6154 "S3Path provide a Python convenient File-System/Path like interface for
6155AWS S3 Service using boto3 S3 resource as a driver.")
6156 (license license:asl2.0)))
6157
6158(define-public python-falcon
6159 (package
6160 (name "python-falcon")
6161 (version "4.0.2")
6162 (source
6163 (origin
6164 ;; Use git, as there are some test files missing from the PyPI release,
6165 ;; such as 'examples' directory.
6166 (method git-fetch)
6167 (uri (git-reference
6168 (url "https://github.com/falconry/falcon")
6169 (commit version)))
6170 (file-name (git-file-name name version))
6171 (sha256
6172 (base32
6173 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
6174 (build-system pyproject-build-system)
6175 (arguments
6176 (list
6177 #:test-flags
6178 '(list "-k" "not slow"
6179 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
6180 #:phases
6181 '(modify-phases %standard-phases
6182 (add-before 'check 'pre-check
6183 (lambda _
6184 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
6185 (setenv "FALCON_TESTING_SESSION" "Y")
6186 (setenv "PYTHONASYNCIODEBUG" "1")
6187 (setenv "HOME" "/tmp"))))))
6188 (propagated-inputs
6189 (list python-mimeparse))
6190 (native-inputs
6191 (list python-aiofiles
6192 python-cbor2
6193 python-cython ;for faster binaries
6194 python-fakeredis
6195 python-httpx
6196 python-mujson
6197 python-msgpack
6198 python-orjson
6199 python-pecan
6200 python-pillow
6201 python-pytest
6202 python-pytest-asyncio
6203 python-pyyaml
6204 python-rapidjson
6205 python-requests
6206 python-setuptools
6207 python-testtools
6208 python-ujson
6209 python-websockets
6210 python-wheel))
6211 (home-page "https://falconframework.org")
6212 (synopsis "Web framework for building APIs and application backends")
6213 (description "Falcon is a web API framework for building microservices,
6214application backends and higher-level frameworks. Among its features are:
6215@itemize
6216@item Optimized and extensible code base
6217@item Routing via URI templates and REST-inspired resource
6218classes
6219@item Access to headers and bodies through request and response
6220classes
6221@item Request processing via middleware components and hooks
6222@item Idiomatic HTTP error responses
6223@item Straightforward exception handling
6224@item Unit testing support through WSGI helpers and mocks
6225@item Compatible with both CPython and PyPy
6226@item Cython support for better performance when used with CPython
6227@end itemize")
6228 (license license:asl2.0)))
6229
6230(define-public python-falcon-cors
6231 (package
6232 (name "python-falcon-cors")
6233 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
6234 (revision . "0")))
6235 (version (git-version "1.1.7"
6236 (assoc-ref properties 'revision)
6237 (assoc-ref properties 'commit)))
6238 (source
6239 (origin
6240 (method git-fetch)
6241 (uri (git-reference
6242 (url "https://github.com/lwcolton/falcon-cors")
6243 (commit (assoc-ref properties 'commit))))
6244 (file-name (git-file-name name version))
6245 (sha256
6246 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
6247 (build-system pyproject-build-system)
6248 (arguments
6249 (list
6250 ;; XXX: The last commit's tests are incompatible with the more recent
6251 ;; version of python-falcon.
6252 #:tests? #f))
6253 (native-inputs
6254 (list python-falcon python-mock python-pynose python-setuptools))
6255 (home-page "https://github.com/lwcolton/falcon-cors")
6256 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
6257 (description
6258 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
6259support for Falcon. It allows applying a specially crafted CORS object to the
6260incoming requests, enabling the ability to serve resources over a different
6261origin than that of the web application.")
6262 (license license:asl2.0)))
6263
6264(define-public python-furl
6265 (package
6266 (name "python-furl")
6267 (version "2.1.4")
6268 (source
6269 (origin
6270 (method url-fetch)
6271 (uri (pypi-uri "furl" version))
6272 (sha256
6273 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
6274 (build-system pyproject-build-system)
6275 (arguments
6276 (list #:test-flags
6277 #~(list "-k" (string-append "not test_hosts"
6278 " and not test_netloc"
6279 " and not test_odd_urls"))))
6280 (propagated-inputs
6281 (list python-orderedmultidict python-six))
6282 (native-inputs
6283 (list python-pytest python-setuptools python-wheel))
6284 (home-page "https://github.com/gruns/furl")
6285 (synopsis "URL manipulation in Python")
6286 (description "Furl provides an easy-to-use alternative to the
6287@code{urllib} and @code{urlparse} modules for manipulating URLs.")
6288 (license license:unlicense)))
6289
6290(define-public python-httplib2
6291 (package
6292 (name "python-httplib2")
6293 (version "0.31.2")
6294 (source
6295 (origin
6296 (method git-fetch)
6297 (uri (git-reference
6298 (url "https://github.com/httplib2/httplib2")
6299 (commit (string-append "v" version))))
6300 (file-name (git-file-name name version))
6301 (sha256
6302 (base32
6303 "0wdnf4rhw9ar8b15lzvif11ibnnpqkfif3alkhkfywy3ikk8nrxb"))))
6304 (build-system pyproject-build-system)
6305 (arguments
6306 (list
6307 #:phases
6308 #~(modify-phases %standard-phases
6309 (add-after 'unpack 'adjust-test-requirements
6310 (lambda _
6311 (substitute* "requirements-test.txt"
6312 (("==") ">=")))))))
6313 (propagated-inputs
6314 (list python-pyparsing
6315 python-pysocks))
6316 (native-inputs
6317 (list python-cryptography
6318 python-mock
6319 python-pytest
6320 python-pytest-randomly
6321 python-pytest-timeout
6322 python-setuptools))
6323 (home-page "https://github.com/httplib2/httplib2")
6324 (synopsis "Comprehensive HTTP client library")
6325 (description
6326 "A comprehensive HTTP client library supporting many features left out of
6327other HTTP libraries.")
6328 (license license:expat)))
6329
6330(define-public python-parfive
6331 (package
6332 (name "python-parfive")
6333 (version "2.3.1")
6334 (source
6335 (origin
6336 (method git-fetch)
6337 (uri (git-reference
6338 (url "https://github.com/Cadair/parfive")
6339 (commit (string-append "v" version))))
6340 (file-name (git-file-name name version))
6341 (sha256
6342 (base32 "09kkh7kp9qy8m26zk6p7zc84yrc81pjgsi594kaa1v1n83mprl4b"))))
6343 (build-system pyproject-build-system)
6344 (arguments
6345 (list
6346 #:test-flags
6347 ;; Disable tests requiring network access.
6348 #~(list "-k" (string-join
6349 (list "not test_ftp"
6350 "test_ftp_http"
6351 "test_ftp_pasv_command"
6352 "test_problematic_http_urls")
6353 " and not "))))
6354 (native-inputs
6355 (list python-aiofiles
6356 python-pytest
6357 python-pytest-asyncio
6358 python-pytest-localserver
6359 python-pytest-socket
6360 python-setuptools
6361 python-setuptools-scm))
6362 (propagated-inputs
6363 (list python-aiohttp
6364 python-tqdm
6365 ;; [optional]
6366 python-aioftp))
6367 (home-page "https://parfive.readthedocs.io/")
6368 (synopsis "HTTP and FTP parallel file downloader")
6369 (description
6370 "This package provides CLI tool and Python library @code{parallel} file
6371downloader using asyncio. parfive can handle downloading multiple files in
6372parallel as well as downloading each file in a number of chunks.
6373
6374asciicast demo of parfive parfive works by creating a downloader object,
6375appending files to it and then running the download. parfive has a synchronous
6376API, but uses asyncio to parallelise downloading the files.")
6377 (license license:expat)))
6378
6379(define-public python-html2text
6380 (package
6381 (name "python-html2text")
6382 (version "2020.1.16")
6383 (source
6384 (origin
6385 (method url-fetch)
6386 (uri (pypi-uri "html2text" version))
6387 (sha256
6388 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
6389 (build-system pyproject-build-system)
6390 (native-inputs (list python-pytest python-setuptools python-wheel))
6391 (home-page "https://github.com/Alir3z4/html2text")
6392 (synopsis "Convert HTML into plain text")
6393 (description
6394 "html2text takes HTML and converts it into plain ASCII text
6395which is also valid markdown. html2text was originally written by Aaron
6396Swartz.")
6397 (license license:gpl3+)))
6398
6399(define-public python-jose
6400 (package
6401 (name "python-jose")
6402 (version "3.5.0")
6403 (home-page "https://github.com/mpdavis/python-jose")
6404 (source (origin
6405 (method git-fetch)
6406 (uri (git-reference (url home-page) (commit version)))
6407 (file-name (git-file-name name version))
6408 (sha256
6409 (base32
6410 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
6411 (build-system pyproject-build-system)
6412 (native-inputs
6413 (list python-pyasn1 python-pytest python-setuptools))
6414 (propagated-inputs
6415 (list python-cryptography python-ecdsa python-rsa))
6416 (synopsis "JOSE implementation in Python")
6417 (description
6418 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
6419- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
6420JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
6421content using a variety of algorithms.")
6422 (license license:expat)))
6423
6424(define-public python-joserfc
6425 (package
6426 (name "python-joserfc")
6427 (version "1.5.0")
6428 (source
6429 (origin
6430 (method url-fetch)
6431 (uri (pypi-uri "joserfc" version))
6432 (sha256
6433 (base32 "0mhwx7znnhhvxfd6l1imwga2lid8vpb5v8b10lvivv08rxbxg22f"))))
6434 (build-system pyproject-build-system)
6435 (propagated-inputs (list python-cryptography))
6436 (native-inputs
6437 (list python-pycryptodome python-pytest python-setuptools))
6438 (home-page "https://github.com/authlib/joserfc")
6439 (synopsis "Python library for JOSE RFCs")
6440 (description
6441 "This package provides a Python library for JOSE RFCs, including JWS,
6442JWE, JWK, JWA, and JWT.")
6443 (license license:bsd-3)))
6444
6445(define-public python-jwcrypto
6446 (package
6447 (name "python-jwcrypto")
6448 (version "1.5.6")
6449 (source
6450 (origin
6451 (method url-fetch)
6452 (uri (pypi-uri "jwcrypto" version))
6453 (sha256
6454 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
6455 (build-system pyproject-build-system)
6456 (native-inputs
6457 (list python-pytest
6458 python-setuptools))
6459 (propagated-inputs
6460 (list python-cryptography
6461 python-typing-extensions))
6462 (home-page "https://github.com/latchset/jwcrypto")
6463 (synopsis "Implementation of JOSE Web standards")
6464 (description
6465 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
6466Encryption} (JOSE) Web Standards.")
6467 (license license:lgpl3+)))
6468
6469(define-public python-pypitoken
6470 (package
6471 (name "python-pypitoken")
6472 (version "7.0.1")
6473 (source
6474 (origin
6475 (method url-fetch)
6476 (uri (pypi-uri "pypitoken" version))
6477 (sha256
6478 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
6479 (build-system pyproject-build-system)
6480 ;; There are no tests.
6481 (arguments (list #:tests? #false))
6482 (propagated-inputs (list python-jsonschema python-pymacaroons
6483 python-typing-extensions))
6484 (native-inputs (list python-poetry-core))
6485 (home-page "https://pypitoken.readthedocs.io/en/latest/")
6486 (synopsis "Manipulate PyPI API tokens")
6487 (description "This package lets you manipulate PyPI API tokens.")
6488 (license license:expat)))
6489
6490(define-public python-jsonpickle
6491 (package
6492 (name "python-jsonpickle")
6493 (version "4.0.0")
6494 (source (origin
6495 (method url-fetch)
6496 (uri (pypi-uri "jsonpickle" version))
6497 (sha256
6498 (base32
6499 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
6500 (build-system pyproject-build-system)
6501 (arguments
6502 (list
6503 #:test-flags '(list "tests")
6504 #:phases
6505 '(modify-phases %standard-phases
6506 (add-before 'check 'pre-check
6507 (lambda* (#:key inputs #:allow-other-keys)
6508 (setenv "TZ" "UTC")
6509 (setenv "TZDIR"
6510 (search-input-directory inputs "share/zoneinfo")))))))
6511 (native-inputs
6512 (list python-bson
6513 python-ecdsa
6514 python-feedparser
6515 python-pymongo
6516 python-pytest
6517 python-pytest-benchmark
6518 python-pytest-enabler
6519 python-setuptools
6520 python-setuptools-scm
6521 python-simplejson
6522 python-sqlalchemy
6523 python-ujson
6524 python-wheel
6525 tzdata-for-tests))
6526 (home-page "https://jsonpickle.github.io/")
6527 (synopsis "Serialize object graphs into JSON")
6528 (description
6529 "This package provides a Python library for serializing any arbitrary
6530object graph to and from JSON.")
6531 (license license:bsd-3)))
6532
6533(define-public python-mcp
6534 (package
6535 (name "python-mcp")
6536 (version "1.25.0")
6537 (source
6538 (origin
6539 (method url-fetch)
6540 (uri (pypi-uri "mcp" version))
6541 (sha256
6542 (base32 "00k87bl4jvnh7hrmicwb2m715fwccvvlanwf8cnlwdphxdhh6can"))))
6543 (build-system pyproject-build-system)
6544 (arguments
6545 (list
6546 ;; XXX: 186 failed, 648 passed, 94 skipped, 54 errors
6547 ;; A lot of tests fail for unclear reasons.
6548 #:tests? #f))
6549 (propagated-inputs
6550 (list python-httpx
6551 python-httpx-sse
6552 python-pydantic
6553 python-sse-starlette))
6554 (native-inputs
6555 (list python-hatchling
6556 python-jsonschema
6557 python-pydantic-settings
6558 python-pytest
6559 python-pytest-examples
6560 python-pytest-xdist
6561 python-starlette
6562 python-typer
6563 python-typing-inspection
6564 python-uvicorn))
6565 (home-page "https://modelcontextprotocol.io")
6566 (synopsis "Model Context Protocol SDK")
6567 (description
6568 "This package provides a Python Software Development Kit for the Model
6569Context Protocol (MCP).")
6570 (license license:expat)))
6571
6572(define-public python-mechanicalsoup
6573 (package
6574 (name "python-mechanicalsoup")
6575 (version "1.4.0")
6576 (source
6577 (origin
6578 (method url-fetch)
6579 (uri (pypi-uri "mechanicalsoup" version))
6580 (sha256
6581 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
6582 (build-system pyproject-build-system)
6583 (arguments
6584 (list
6585 #:test-flags
6586 ;; Unclear why test fails.
6587 #~(list "-k" "not test_select_form_associated_elements")
6588 ;; The following dependencies are not directly required, the developer
6589 ;; only pinned versions because of vulnerabilities. They also break
6590 ;; sanity-check because it checks for a python-certifi version which is
6591 ;; more recent than the one available in Guix.
6592 #:phases #~(modify-phases %standard-phases
6593 (add-after 'unpack 'relax-dependencies
6594 (lambda _
6595 (substitute* "requirements.txt"
6596 (("certifi.*") "")
6597 (("urllib3.*") "")))))))
6598 (propagated-inputs
6599 (list python-beautifulsoup4 python-lxml python-requests))
6600 (native-inputs
6601 (list python-pytest
6602 python-pytest-flake8
6603 python-pytest-httpbin
6604 python-pytest-mock
6605 python-requests-mock
6606 python-setuptools
6607 python-wheel))
6608 (home-page "https://mechanicalsoup.readthedocs.io/")
6609 (synopsis "Python library for automating website interaction")
6610 (description
6611 "MechanicalSoup is a Python library for automating interaction with
6612websites. It automatically stores and sends cookies, follows redirects, and can
6613follow links and submit forms. It doesn’t do JavaScript.")
6614 (license license:expat)))
6615
6616(define-public python-hypercorn
6617 (package
6618 (name "python-hypercorn")
6619 (version "0.18.0")
6620 (source
6621 (origin
6622 (method git-fetch)
6623 (uri (git-reference
6624 (url "https://github.com/pgjones/hypercorn")
6625 (commit version)))
6626 (file-name (git-file-name name version))
6627 (sha256
6628 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
6629 (build-system pyproject-build-system)
6630 (propagated-inputs
6631 (list python-aioquic
6632 python-h11
6633 python-h2
6634 python-priority
6635 python-pydata-sphinx-theme
6636 python-sphinxcontrib-mermaid
6637 python-tomli
6638 python-trio
6639 python-typing-extensions
6640 python-uvloop
6641 python-wsproto))
6642 (native-inputs
6643 (list nss-certs-for-test
6644 python-httpx
6645 python-pdm-backend
6646 python-pytest
6647 python-pytest-asyncio
6648 python-pytest-cov
6649 python-pytest-trio))
6650 (home-page "https://github.com/pgjones/hypercorn")
6651 (synopsis "ASGI Server based on Hyper libraries")
6652 (description
6653 "This package provides an ASGI (Asynchronous Server Gateway Interface)
6654Server based on Hyper libraries and inspired by @code{python-gunicorn}.")
6655 (license license:expat)))
6656
6657(define-public python-hyperframe
6658 (package
6659 (name "python-hyperframe")
6660 (version "6.1.0")
6661 (source
6662 (origin
6663 (method url-fetch)
6664 (uri (pypi-uri "hyperframe" version))
6665 (sha256
6666 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
6667 (build-system pyproject-build-system)
6668 (native-inputs
6669 (list python-pytest python-setuptools))
6670 (home-page "https://github.com/python-hyper/hyperframe")
6671 (synopsis "HTTP/2 framing layer for Python")
6672 (description
6673 "This library contains the HTTP/2 framing code used in the hyper project.
6674It provides a pure-Python codebase that is capable of decoding a binary stream
6675into HTTP/2 frames.")
6676 (license license:expat)))
6677
6678(define-public python-hpack
6679 (package
6680 (name "python-hpack")
6681 (version "4.1.0")
6682 (source
6683 (origin
6684 ;; PyPI tarball is missing some files necessary for the tests.
6685 (method git-fetch)
6686 (uri (git-reference
6687 (url "https://github.com/python-hyper/hpack")
6688 (commit (string-append "v" version))))
6689 (file-name (git-file-name name version))
6690 (sha256
6691 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
6692 (build-system pyproject-build-system)
6693 (native-inputs
6694 (list python-pytest python-setuptools))
6695 (home-page "https://hyper.rtfd.org")
6696 (synopsis "Pure-Python HPACK header compression")
6697 (description
6698 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
6699for use in Python programs that implement HTTP/2.")
6700 (license license:expat)))
6701
6702(define-public python-h11
6703 (package
6704 (name "python-h11")
6705 (version "0.16.0")
6706 (source
6707 (origin
6708 (method url-fetch)
6709 (uri (pypi-uri "h11" version))
6710 (sha256
6711 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
6712 (build-system pyproject-build-system)
6713 (native-inputs
6714 (list python-pytest python-setuptools))
6715 (home-page "https://github.com/python-hyper/h11")
6716 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
6717 (description
6718 "This is a little HTTP/1.1 library written from scratch in Python, heavily
6719inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
6720code whatsoever. This means you can hook h11 up to your favorite network API,
6721and that could be anything you want.")
6722 (license license:expat)))
6723
6724(define-public python-h2
6725 (package
6726 (name "python-h2")
6727 (version "4.3.0")
6728 (source
6729 (origin
6730 (method git-fetch)
6731 (uri (git-reference
6732 (url "https://github.com/python-hyper/h2")
6733 (commit (string-append "v" version))))
6734 (file-name (git-file-name name version))
6735 (sha256
6736 (base32 "00rf0ii4xgdczx5xmv1k6b65q1axvxizbnl20d5vpr512zdix36k"))))
6737 (build-system pyproject-build-system)
6738 (arguments
6739 (list
6740 ;; tests: 1594 passed, 5 deselected
6741 ;; AssertionError: assert '<RemoteSettingsChanged
6742 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
6743 ;; new_value=32768)}>' == '<RemoteSettingsChanged
6744 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
6745 ;; original_value=65536, new_value=32768)}>'
6746 #:test-flags
6747 #~(list "-k"
6748 (string-join
6749 (list "not test_remotesettingschanged_repr"
6750 ;; This test exceededs the Hypothesis deadline.
6751 #$@(if (target-riscv64?)
6752 #~("test_changing_max_frame_size")
6753 #~())
6754 "test_streamreset_repr"
6755 "test_settingsacknowledged_repr"
6756 "test_connectionterminated_repr[None-None]"
6757 "test_connectionterminated_repr[some"
6758 "test_remotesettingschanged_repr"
6759 "test_streamreset_repr"
6760 "test_settingsacknowledged_repr"
6761 "test_connectionterminated_repr[None-None]"
6762 "test_connectionterminated_repr[some")
6763 " and not "))))
6764 (native-inputs
6765 (list python-pytest
6766 python-setuptools))
6767 (propagated-inputs
6768 (list python-hpack
6769 python-hyperframe))
6770 (home-page "https://github.com/python-hyper/h2")
6771 (synopsis "HTTP/2 State-Machine based protocol implementation")
6772 (description
6773 "This module contains a pure-Python implementation of a HTTP/2 protocol
6774stack. It does not provide a parsing layer, a network layer, or any rules
6775about concurrency. Instead, it's a purely in-memory solution, defined in
6776terms of data actions and HTTP/2 frames. This is one building block of a full
6777Python HTTP implementation.")
6778 (license license:expat)))
6779
6780(define-public python-slixmpp
6781 (package
6782 (name "python-slixmpp")
6783 (version "1.17.0")
6784 (source
6785 (origin
6786 (method git-fetch)
6787 (uri (git-reference
6788 (url "https://codeberg.org/poezio/slixmpp")
6789 (commit (string-append "slix-" version))))
6790 (file-name (git-file-name name version))
6791 (sha256
6792 (base32 "0ml590qs3siajz00f40pdxcz27d41i25ld30819qrf0n9ilqlc6n"))))
6793 (build-system pyproject-build-system)
6794 (arguments
6795 (list
6796 ;; Use the upstream runner: it collects only tests/, skips itests/
6797 ;; which need a live XMPP server, and additionally runs the doctests.
6798 #:test-backend #~'custom
6799 #:test-flags #~'("run_tests.py")
6800 #:phases
6801 #~(modify-phases %standard-phases
6802 (add-after 'unpack 'disable-rust-extension
6803 ;; Upstream marks the Rust JID implementation as optional; skip
6804 ;; it and use the pure Python one in slixmpp/jid.py to avoid
6805 ;; pulling in the Cargo dependency tree.
6806 (lambda _
6807 (substitute* "pyproject.toml"
6808 (("\"setuptools-rust\", ") "")
6809 (("\\[\\[tool\\.setuptools-rust\\.ext-modules\\]\\]")
6810 "[tool.slixmpp-rust-disabled]"))))
6811 (add-before 'build 'set-version
6812 ;; setuptools-scm cannot determine the version without .git.
6813 (lambda _
6814 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
6815 (native-inputs
6816 (list gnupg ; 'gnupg' is required by the XEP-0027 tests.
6817 python-setuptools
6818 python-setuptools-scm))
6819 (propagated-inputs
6820 (list python-aiodns
6821 python-aiohttp
6822 python-cryptography
6823 python-defusedxml
6824 python-emoji
6825 python-pyasn1
6826 python-pyasn1-modules))
6827 (home-page "https://codeberg.org/poezio/slixmpp")
6828 (synopsis "XMPP library without threads")
6829 (description
6830 "Slixmpp is a XMPP library for Python 3.11+. It is a fork of SleekXMPP.
6831Its goal is to only rewrite the core of the library (the low level socket
6832handling, the timers, the events dispatching) in order to remove all
6833threads.")
6834 (license license:expat)))
6835
6836(define-public python-sockjs-tornado
6837 (package
6838 (name "python-sockjs-tornado")
6839 (version "1.0.6")
6840 (source
6841 (origin
6842 (method git-fetch)
6843 (uri (git-reference
6844 (url "https://github.com/mrjoes/sockjs-tornado/")
6845 (commit (string-append "v" version))))
6846 (file-name (git-file-name name version))
6847 (sha256
6848 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
6849 (build-system pyproject-build-system)
6850 (arguments
6851 (list
6852 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
6853 (native-inputs (list python-setuptools))
6854 (propagated-inputs (list python-tornado))
6855 (home-page "https://github.com/mrjoes/sockjs-tornado/")
6856 (synopsis
6857 "SockJS Python server implementation on top of the Tornado framework")
6858 (description
6859 "SockJS-tornado provides the server-side counterpart to a SockJS client
6860library, through the Tornado framework.
6861
6862SockJS provides a low-latency, full-duplex, cross-domain communication channel
6863between a web browser and web server.")
6864 (license license:expat)))
6865
6866(define-public python-flask-assets
6867 ;; The latest release still depends on the abandoned flask-script, whereas
6868 ;; at this later commit (already 2 years old at the time of this writing)
6869 ;; the dependency has been lifted.
6870 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
6871 (revision "1"))
6872 (package
6873 (name "python-flask-assets")
6874 (version (git-version "2.1.0" revision commit))
6875 (source
6876 (origin
6877 (method git-fetch)
6878 (uri (git-reference
6879 (url "https://github.com/miracle2k/flask-assets/")
6880 (commit commit)))
6881 (file-name (git-file-name name version))
6882 (sha256
6883 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
6884 (build-system pyproject-build-system)
6885 (propagated-inputs
6886 (list python-flask python-webassets))
6887 (native-inputs
6888 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
6889 (home-page "https://github.com/miracle2k/flask-assets")
6890 (synopsis "Asset management for Flask")
6891 (description "This package integrates @code{webassets} with Flask, adding
6892support for merging, minifying and compiling CSS and Javascript files.")
6893 (license license:bsd-2))))
6894
6895(define-public python-flask-babel
6896 (package
6897 (name "python-flask-babel")
6898 (version "4.0.0")
6899 (source
6900 (origin
6901 (method git-fetch) ;no tests in pypi release
6902 (uri (git-reference
6903 (url "https://github.com/python-babel/flask-babel")
6904 (commit (string-append "v" version))))
6905 (sha256
6906 (base32
6907 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
6908 (build-system pyproject-build-system)
6909 (native-inputs
6910 (list python-poetry-core
6911 python-pytest
6912 python-pytest-mock))
6913 (propagated-inputs
6914 (list python-babel
6915 python-flask
6916 python-jinja2
6917 python-pytz))
6918 (home-page "https://github.com/python-babel/flask-babel")
6919 (synopsis "Add i18n/l10n support to Flask applications")
6920 (description "This package implements internationalization and localization
6921support for Flask. This is based on the Python babel module as well as pytz -
6922both of which are installed automatically if you install this library.")
6923 (license license:bsd-3)))
6924
6925(define-public python-flask-cors
6926 (package
6927 (name "python-flask-cors")
6928 (version "6.0.2")
6929 (source
6930 (origin
6931 (method git-fetch) ;no tests in PyPI archive
6932 (uri (git-reference
6933 (url "https://github.com/CoryDolphin/flask-cors")
6934 (commit version)))
6935 (file-name (git-file-name name version))
6936 (sha256
6937 (base32 "02y740h951dscgkm7ghsss1bc0m8ymsfdpsimm1j0nkl0zjl6sgm"))))
6938 (build-system pyproject-build-system)
6939 (arguments
6940 (list
6941 #:phases
6942 #~(modify-phases %standard-phases
6943 (add-after 'unpack 'fix-version
6944 (lambda _
6945 ;; Otherwise sanity-check of dependents will fail.
6946 (substitute* "pyproject.toml"
6947 (("version = \"0\\.0\\.1\"" all)
6948 (string-append "version = \"" #$version "\""))))))))
6949 (native-inputs
6950 (list python-pytest
6951 python-setuptools))
6952 (propagated-inputs
6953 (list python-flask
6954 python-werkzeug))
6955 (home-page "https://flask-cors.readthedocs.io/en/latest/")
6956 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
6957 (description
6958 "This package provides a Flask extension for handling @acronym{CORS,Cross
6959Origin Resource Sharing}, making cross-origin AJAX possible.")
6960 (license license:expat)))
6961
6962(define-public python-flask-markdown
6963 (package
6964 (name "python-flask-markdown")
6965 (version "0.3")
6966 (source
6967 (origin
6968 (method git-fetch)
6969 (uri (git-reference
6970 (url "https://github.com/dcolish/flask-markdown")
6971 (commit version)))
6972 (file-name (git-file-name name version))
6973 (sha256
6974 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
6975 (build-system pyproject-build-system)
6976 (arguments
6977 (list
6978 #:tests? #f ;Tests seem to be incompatible with latest python
6979 #:phases
6980 #~(modify-phases %standard-phases
6981 (add-after 'unpack 'set-version
6982 (lambda _
6983 (substitute* "setup.py"
6984 (("dev")
6985 #$version)))))))
6986 (propagated-inputs (list python-markdown python-flask))
6987 (native-inputs (list python-pynose python-setuptools))
6988 (home-page "https://github.com/dcolish/flask-markdown")
6989 (synopsis "Small extension to help with using Markdown in Flask")
6990 (description
6991 "Flask-Markdown supports several extensions for Markdown and integrates
6992into Jinja2 by default.")
6993 (license license:bsd-3)))
6994
6995(define-public python-flask-session
6996 (package
6997 (name "python-flask-session")
6998 (version "0.8.0")
6999 (source
7000 (origin
7001 (method url-fetch)
7002 (uri (pypi-uri "flask_session" version))
7003 (sha256
7004 (base32
7005 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
7006 (build-system pyproject-build-system)
7007 (arguments
7008 '(#:tests? #f)) ; Tests require the various storage backends to be present
7009 (native-inputs (list python-flit-core))
7010 (propagated-inputs
7011 (list python-cachelib python-flask python-msgspec))
7012 (home-page "https://github.com/pallets-eco/flask-session")
7013 (synopsis "Adds server-side session support to your Flask application")
7014 (description
7015 "Flask-Session is an extension for Flask that adds support for
7016Server-side sessions, with a variety of different backends for session
7017storage.")
7018 (license license:bsd-3)))
7019
7020(define-public python-html5lib
7021 (package
7022 (name "python-html5lib")
7023 (version "1.1")
7024 (source
7025 (origin
7026 (method url-fetch)
7027 (uri (pypi-uri "html5lib" version))
7028 (sha256
7029 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
7030 (build-system pyproject-build-system)
7031 (arguments
7032 '(#:tests? #f)) ;tests depend on dated pytest-expect
7033 (native-inputs
7034 (list python-setuptools))
7035 (propagated-inputs
7036 (list python-six
7037 python-webencodings
7038 ;; Required by Calibre 5.
7039 python-chardet))
7040 (home-page "https://github.com/html5lib/html5lib-python")
7041 (synopsis "Python HTML parser based on the WHATWG HTML specification")
7042 (description
7043 "Html5lib is an HTML parser based on the WHATWG HTML specification
7044and written in Python.")
7045 (license license:expat)))
7046
7047(define-public python-html5-parser
7048 (package
7049 (name "python-html5-parser")
7050 (version "0.4.12")
7051 (source
7052 (origin
7053 (method git-fetch)
7054 (uri (git-reference
7055 (url "https://github.com/kovidgoyal/html5-parser")
7056 (commit (string-append "v" version))))
7057 (file-name (git-file-name name version))
7058 (sha256
7059 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
7060 (build-system pyproject-build-system)
7061 (arguments
7062 (list
7063 #:phases
7064 #~(modify-phases %standard-phases
7065 (add-before 'build 'set-configure-flags
7066 (lambda _
7067 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
7068 (native-inputs (list pkg-config python-setuptools))
7069 (inputs (list libxml2))
7070 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
7071 (home-page "https://html5-parser.readthedocs.io")
7072 (synopsis "Fast C-based HTML5 parsing for Python")
7073 (description
7074 "This package provides a fast implementation of the HTML5 parsing spec
7075for Python. Parsing is done in C using a variant of the gumbo parser. The
7076gumbo parse tree is then transformed into an lxml tree, also in C, yielding
7077parse times that can be a thirtieth of the html5lib parse times.")
7078 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
7079 ;; indicate ASL2.0, including the LICENSE file for the whole project.
7080 (license (list license:asl2.0 license:gpl3))))
7081
7082(define-public python-html5tagger
7083 (package
7084 (name "python-html5tagger")
7085 (version "2.0.0")
7086 (source (origin
7087 (method url-fetch)
7088 (uri (pypi-uri "html5tagger" version))
7089 (sha256
7090 (base32
7091 "090nmjhr0yj3x5iy9zmbmv07dpxn234dqpi2lglk0fa4aj83rvhd"))))
7092 (build-system pyproject-build-system)
7093 (arguments
7094 (list #:tests? #f)) ;no tests in PyPI or Git
7095 (native-inputs
7096 (list python-hatch-vcs python-hatchling))
7097 (home-page "https://github.com/sanic-org/html5tagger")
7098 (synopsis "Create HTML documents from Python")
7099 (description
7100 "@code{html5tagger} provides a simplified HTML5 syntax that can
7101be written directly in Python without templates.")
7102 (license license:unlicense)))
7103
7104(define-public python-minio
7105 (package
7106 (name "python-minio")
7107 (version "7.1.9")
7108 (source
7109 (origin
7110 (method git-fetch)
7111 (uri (git-reference
7112 (url "https://github.com/minio/minio-py")
7113 (commit version)))
7114 (file-name (git-file-name name version))
7115 (sha256
7116 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
7117 (build-system pyproject-build-system)
7118 (arguments
7119 (list
7120 #:test-flags
7121 ;; XXX: requires network access.
7122 #~(list "--ignore=tests/unit/credentials_test.py")))
7123 (native-inputs (list python-pytest python-setuptools))
7124 (propagated-inputs
7125 (list python-certifi python-dateutil python-pytz python-urllib3))
7126 (home-page "https://github.com/minio/minio-py")
7127 (synopsis "Programmatically access Amazon S3 from Python")
7128 (description
7129 "This package provides a Python library for interacting with any
7130Amazon S3 compatible object storage server.")
7131 (license license:asl2.0)))
7132
7133(define-public python-pycrdt
7134 (package
7135 (name "python-pycrdt")
7136 (version "0.13.0")
7137 (source
7138 (origin
7139 (method git-fetch)
7140 (uri (git-reference
7141 (url "https://github.com/y-crdt/pycrdt")
7142 (commit version)))
7143 (file-name (git-file-name name version))
7144 (sha256
7145 (base32 "18mnjbxdlra1w3jl42bf1jb25z9j3inh6s61qighqrvnylgxvxc1"))))
7146 (build-system pyproject-build-system)
7147 (arguments
7148 (list
7149 #:imported-modules `(,@%cargo-build-system-modules
7150 ,@%pyproject-build-system-modules)
7151 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
7152 (guix build pyproject-build-system)
7153 (guix build utils))
7154 #:test-flags #~(list "--ignore=tests/test_types.py")
7155 #:phases
7156 #~(modify-phases %standard-phases
7157 (add-after 'unpack 'relax-requirements
7158 (lambda _
7159 (substitute* "pyproject.toml"
7160 (("requires = \\[\"maturin>=.*\"\\]")
7161 "requires = [\"maturin\"]"))))
7162 (add-after 'unpack 'prepare-cargo-build-system
7163 (lambda args
7164 (for-each
7165 (lambda (phase)
7166 (format #t "Running cargo phase: ~a~%" phase)
7167 (apply (assoc-ref cargo:%standard-phases phase)
7168 #:cargo-target #$(cargo-triplet)
7169 args))
7170 '(unpack-rust-crates
7171 configure
7172 check-for-pregenerated-files
7173 patch-cargo-checksums)))))))
7174 (propagated-inputs
7175 (list python-anyio
7176 python-typing-extensions))
7177 (inputs (cargo-inputs 'pycrdt))
7178 (native-inputs
7179 (append
7180 (list maturin
7181 python-pydantic
7182 python-pytest
7183 rust
7184 `(,rust "cargo"))
7185 (or (and=> (%current-target-system)
7186 (compose list make-rust-sysroot))
7187 '())))
7188 (home-page "https://github.com/y-crdt/pycrdt")
7189 (synopsis "Python CRDTs library ported from Yjs framework")
7190 (description
7191 "Conflict-free Replicated Data Types (CRDTs) allow creating shared
7192documents that can automatically merge changes made concurrently on different
7193copies of the data. When the data lives on different machines, they make it
7194possible to build distributed systems that work with local data, leaving the
7195synchronization and conflict resolution with remote data to the CRDT
7196algorithm, which ensures that all data replicas eventually converge to the
7197same state.
7198
7199This is a Python CRDT library that provides bindings for Yrs, the Rust port of
7200the Yjs framework.")
7201 (license license:expat)))
7202
7203(define-public python-pycrdt-store
7204 (package
7205 (name "python-pycrdt-store")
7206 (version "0.1.3")
7207 (source
7208 (origin
7209 (method git-fetch)
7210 (uri (git-reference
7211 (url "https://github.com/y-crdt/pycrdt-store")
7212 (commit version)))
7213 (file-name (git-file-name name version))
7214 (sha256
7215 (base32 "18yvv5lgxb4v0qlbi8bbkcm1666nxbkmhbx445sxpzab7027fl1a"))))
7216 (build-system pyproject-build-system)
7217 (propagated-inputs
7218 (list python-anyio
7219 python-pycrdt
7220 python-sqlite-anyio))
7221 (native-inputs
7222 (list python-hatchling
7223 python-pytest
7224 python-pytest-rerunfailures
7225 python-trio))
7226 (home-page "https://github.com/y-crdt/pycrdt-store")
7227 (synopsis "Persistent storage for pycrdt")
7228 (description
7229 "This package provides a persistent storage feature for
7230@code{python-pycrdt}.")
7231 (license license:expat)))
7232
7233(define-public python-pycrdt-websocket
7234 (package
7235 (name "python-pycrdt-websocket")
7236 (version "0.16.0")
7237 (source
7238 (origin
7239 (method git-fetch)
7240 (uri (git-reference
7241 (url "https://github.com/y-crdt/pycrdt-websocket")
7242 (commit version)))
7243 (file-name (git-file-name name version))
7244 (sha256
7245 (base32 "1bcxivdra0v5fwlz3hcz98vxi61884bfvcwifsdp3mji28iprv22"))))
7246 (build-system pyproject-build-system)
7247 (arguments
7248 (list
7249 ;; These tests require the unpackaged Yjs.
7250 #:test-flags #~(list "--deselect=tests/test_pycrdt_yjs.py")))
7251 (propagated-inputs
7252 (list python-anyio
7253 python-pycrdt
7254 python-pycrdt-store))
7255 (native-inputs
7256 (list nss-certs-for-test
7257 python-hatchling
7258 python-hypercorn
7259 python-httpx-ws
7260 python-pytest))
7261 (home-page "https://github.com/y-crdt/pycrdt-websocket")
7262 (synopsis "WebSocket connector for pycrdt")
7263 (description "This package provides an asynchronous @code{WebSocket}
7264connector for @code{python-pycrdt}.")
7265 (license license:expat)))
7266
7267(define-public python-pycurl
7268 (package
7269 (name "python-pycurl")
7270 (version "7.48.0")
7271 (source
7272 (origin
7273 (method git-fetch)
7274 (uri (git-reference
7275 (url "https://github.com/pycurl/pycurl")
7276 (commit (string-append
7277 "REL_" (string-replace-substring version "." "_")))))
7278 (file-name (git-file-name name version))
7279 (sha256
7280 (base32 "06d6fji6qmiimfnfgfxqnq4hj245q5ipcfvr1csm53ly1sa3jcfy"))))
7281 (build-system pyproject-build-system)
7282 (arguments
7283 '(#:test-flags
7284 ;; The test suite is not thread safe:
7285 ;; - some tests want to use the same port: address already in use
7286 ;; - some tests use signal.Signal, i.e. main-thread only
7287 (list "-k" (string-append
7288 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
7289 ;; open shared object file: No such file or directory
7290 "not test_libcurl_ssl_gnutls"
7291 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
7292 ;; open shared object file: No such file or directory
7293 " and not test_libcurl_ssl_nss"
7294 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
7295 ;; open shared object file: No such file or directory
7296 " and not test_libcurl_ssl_openssl"
7297 ;; AssertionError: proc.returncode == 130
7298 " and not test_sigint"))
7299 #:phases (modify-phases %standard-phases
7300 (add-before 'build 'configure-tls-backend
7301 (lambda _
7302 ;; XXX: PycURL fails to automatically determine which
7303 ;; TLS backend to use when cURL is built with
7304 ;; --disable-static. See setup.py and
7305 ;; <https://github.com/pycurl/pycurl/pull/147>.
7306 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
7307 (native-inputs
7308 (list python-bottle
7309 python-flaky
7310 python-flask
7311 python-numpy
7312 python-pytest
7313 python-setuptools
7314 python-websockets))
7315 (inputs
7316 (list curl gnutls))
7317 (home-page "https://pycurl.github.io/")
7318 (synopsis "Lightweight Python wrapper around libcurl")
7319 (description "Pycurl is a lightweight wrapper around libcurl. It provides
7320high-speed transfers via libcurl and frequently outperforms alternatives.")
7321
7322 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
7323 ;; under the terms of LGPLv2.1+ or Expat.
7324 (license (list license:lgpl2.1+ license:expat))))
7325
7326(define-public python-stamina
7327 (package
7328 (name "python-stamina")
7329 (version "25.2.0")
7330 (source
7331 (origin
7332 (method git-fetch)
7333 (uri (git-reference
7334 (url "https://github.com/hynek/stamina")
7335 (commit version)))
7336 (file-name (git-file-name name version))
7337 (sha256
7338 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
7339 (build-system pyproject-build-system)
7340 (native-inputs
7341 (list python-pytest
7342 python-anyio
7343 python-dirty-equals
7344 python-hatch-fancy-pypi-readme
7345 python-hatch-vcs
7346 python-hatchling
7347 python-structlog))
7348 (propagated-inputs
7349 (list python-tenacity
7350 python-typing-extensions))
7351 (home-page "https://github.com/hynek/stamina")
7352 (synopsis "Retries library for Python")
7353 (description
7354 "@code{stamina} is an opinionated wrapper around the
7355@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
7356 (license license:expat)))
7357
7358(define-public python-stripe
7359 (package
7360 (name "python-stripe")
7361 (version "13.2.0")
7362 (source
7363 (origin
7364 (method git-fetch)
7365 (uri (git-reference
7366 (url "https://github.com/stripe/stripe-python")
7367 (commit (string-append "v" version))))
7368 (file-name (git-file-name name version))
7369 (sha256
7370 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
7371 (build-system pyproject-build-system)
7372 (arguments
7373 '(#:tests? #f)) ;; tests require network
7374 (native-inputs
7375 (list python-flit-core))
7376 (propagated-inputs
7377 (list python-httpx
7378 python-requests))
7379 (home-page "https://github.com/stripe/stripe-python")
7380 (synopsis "Python bindings for the Stripe financial services' API")
7381 (description "This package provides access to the Stripe financial
7382services' API. It includes a pre-defined set of classes for API resources
7383that initialize themselves dynamically from API responses which makes it
7384compatible with a wide range of versions of the Stripe API.")
7385 (license license:expat)))
7386
7387(define-public python-stripe-12
7388 (hidden-package
7389 (package/inherit python-stripe
7390 (name "python-stripe")
7391 (version "12.5.1")
7392 (source
7393 (origin
7394 (inherit (package-source python-stripe))
7395 (uri (git-reference
7396 (url "https://github.com/stripe/stripe-python")
7397 (commit (string-append "v" version))))
7398 (file-name (git-file-name name version))
7399 (sha256 (base32
7400 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
7401 (native-inputs
7402 (list python-setuptools)))))
7403
7404(define-public python-tldextract
7405 (package
7406 (name "python-tldextract")
7407 (version "5.3.0")
7408 (source
7409 (origin
7410 (method url-fetch)
7411 (uri (pypi-uri "tldextract" version))
7412 (sha256
7413 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
7414 (build-system pyproject-build-system)
7415 (arguments
7416 (list
7417 #:phases
7418 #~(modify-phases %standard-phases
7419 (add-after 'unpack 'relax-requirements
7420 (lambda _
7421 (substitute* "pyproject.toml"
7422 (("\"requests-file.*\",")
7423 "\"requests-file\",")))))))
7424 (native-inputs
7425 (list nss-certs-for-test
7426 python-pytest
7427 python-pytest-mock
7428 python-responses
7429 python-setuptools
7430 python-setuptools-scm
7431 python-syrupy))
7432 (propagated-inputs
7433 (list python-filelock
7434 python-idna
7435 python-requests
7436 python-requests-file))
7437 (home-page "https://github.com/john-kurkowski/tldextract")
7438 (synopsis
7439 "Separate the TLD from the registered domain and subdomains of a URL")
7440 (description
7441 "TLDExtract accurately separates the TLD from the registered domain and
7442subdomains of a URL, using the Public Suffix List. By default, this includes
7443the public ICANN TLDs and their exceptions. It can optionally support the
7444Public Suffix List's private domains as well.")
7445 (license license:bsd-3)))
7446
7447(define-public python-tracerite
7448 (package
7449 (name "python-tracerite")
7450 (version "2.5.2")
7451 (source
7452 (origin
7453 (method url-fetch)
7454 (uri (pypi-uri "tracerite" version))
7455 (sha256
7456 (base32 "087i51ybbj62nx5jzx8znhqb6cd7279mi7v9j6lrxf8lhb81nr3r"))))
7457 (build-system pyproject-build-system)
7458 (arguments
7459 (list #:tests? #f)) ;no tests in PyPI or Git
7460 (native-inputs
7461 (list python-hatch-vcs python-hatchling))
7462 (propagated-inputs
7463 (list python-html5tagger))
7464 (home-page "https://github.com/sanic-org/tracerite")
7465 (synopsis "Human-readable HTML tracebacks")
7466 (description
7467 "@code{tracerite} converts Python tracebacks into useful error messages
7468in human-readable HTML format.")
7469 (license license:unlicense)))
7470
7471(define-public python-trio-websocket
7472 (package
7473 (name "python-trio-websocket")
7474 (version "0.12.2")
7475 (source
7476 (origin
7477 (method git-fetch)
7478 (uri (git-reference
7479 (url "https://github.com/HyperionGray/trio-websocket")
7480 (commit version)))
7481 (file-name (git-file-name name version))
7482 (sha256
7483 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
7484 (build-system pyproject-build-system)
7485 (native-inputs
7486 (list python-pytest
7487 python-pytest-trio
7488 python-setuptools
7489 python-trustme))
7490 (propagated-inputs
7491 (list python-outcome
7492 python-trio
7493 python-wsproto))
7494 (home-page "https://github.com/HyperionGray/trio-websocket")
7495 (synopsis "WebSocket library for Trio")
7496 (description "This library implements both server and client aspects of
7497the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
7498striving for safety, correctness, and ergonomics. It is based on the
7499@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
7500@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
7501the majority of the WebSocket protocol, including framing, codecs, and events.
7502This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
7503the Trio framework}.")
7504 (license license:expat)))
7505
7506(define-public python-txacme
7507 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
7508 ;; compatibility with twisted, use the latest commit from trunk branch.
7509 ;;
7510 ;;See: <https://github.com/twisted/txacme/issues/165>.
7511 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
7512 (revision "0"))
7513 (package
7514 (name "python-txacme")
7515 (version (git-version "0.9.3" revision commit))
7516 (source
7517 (origin
7518 (method git-fetch) ;no fresh release in PyPI
7519 (uri (git-reference
7520 (url "https://github.com/twisted/txacme")
7521 (commit commit)))
7522 (file-name (git-file-name name version))
7523 (sha256
7524 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
7525 (build-system pyproject-build-system)
7526 (arguments
7527 (list #:test-backend #~'custom
7528 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
7529 (native-inputs
7530 (list python-setuptools))
7531 (propagated-inputs
7532 (list python-acme
7533 python-attrs
7534 python-eliot
7535 python-josepy
7536 python-pem
7537 python-treq
7538 python-twisted
7539 python-txsni))
7540 (home-page "https://github.com/twisted/txacme")
7541 (synopsis "Twisted implexmentation of the ACME protocol")
7542 (description
7543 "ACME is Automatic Certificate Management Environment, a protocol that
7544allows clients and certificate authorities to automate verification and
7545certificate issuance. The ACME protocol is used by the free Let's Encrypt
7546Certificate Authority.
7547
7548txacme is an implementation of the protocol for Twisted, the event-driven
7549networking engine for Python.")
7550 (license license:expat))))
7551
7552(define-public python-txaio
7553 (package
7554 (name "python-txaio")
7555 (version "25.9.2")
7556 (source
7557 (origin
7558 (method url-fetch)
7559 (uri (pypi-uri "txaio" version))
7560 (sha256
7561 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
7562 (build-system pyproject-build-system)
7563 (native-inputs
7564 (list python-pytest
7565 python-setuptools))
7566 (home-page "https://github.com/crossbario/txaio")
7567 (synopsis "Compatibility layer between Python asyncio and Twisted")
7568 (description
7569 "Txaio provides a compatibility layer between the Python @code{asyncio}
7570 bsmodule and @code{Twisted}.")
7571 (license license:expat)))
7572
7573;; XXX: Potentially abandonware since 2017, consider to remove when nothing
7574;; depends on it or fails to build.
7575(define-public python-txamqp
7576 (package
7577 (name "python-txamqp")
7578 (version "0.8.2")
7579 (source
7580 (origin
7581 (method url-fetch)
7582 (uri (pypi-uri "txAMQP" version))
7583 (sha256
7584 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
7585 (build-system pyproject-build-system)
7586 (arguments
7587 (list #:tests? #f)) ;all tests failed
7588 (native-inputs
7589 (list python-setuptools))
7590 (propagated-inputs
7591 (list python-six python-twisted))
7592 (home-page "https://github.com/txamqp/txamqp")
7593 (synopsis "Communicate with AMQP peers and brokers using Twisted")
7594 (description
7595 "This package provides a Python library for communicating with AMQP peers
7596and brokers using the asynchronous networking framework Twisted. It contains
7597all the necessary code to connect, send and receive messages to/from an
7598AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
7599also includes support for using Thrift RPC over AMQP in Twisted
7600applications.")
7601 (license license:asl2.0)))
7602
7603(define-public python-txsni
7604 (package
7605 (name "python-txsni")
7606 (version "0.2.0")
7607 (source
7608 (origin
7609 (method git-fetch)
7610 (uri (git-reference
7611 (url "https://github.com/glyph/txsni")
7612 (commit (string-append "v" version))))
7613 (file-name (git-file-name name version))
7614 (sha256
7615 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
7616 (build-system pyproject-build-system)
7617 (arguments
7618 (list #:test-backend #~'custom
7619 #:test-flags #~(list "-m" "twisted.trial"
7620 "--temp-directory=/tmp/_trial_temp"
7621 "txsni")))
7622 (native-inputs
7623 (list python-setuptools))
7624 (propagated-inputs
7625 (list python-pyopenssl
7626 python-service-identity
7627 python-twisted))
7628 (home-page "https://github.com/glyph/txsni")
7629 (synopsis "Run TLS servers with Twisted")
7630 (description
7631 "This package provides an easy-to-use SNI endpoint for use with the
7632Twisted web framework.")
7633 (license license:expat)))
7634
7635(define-public python-txtorcon
7636 (package
7637 (name "python-txtorcon")
7638 (version "24.8.0")
7639 (source
7640 (origin
7641 (method url-fetch)
7642 (uri (pypi-uri "txtorcon" version))
7643 (sha256
7644 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
7645 (build-system pyproject-build-system)
7646 (native-inputs
7647 (list python-pytest
7648 python-setuptools
7649 python-wheel))
7650 (inputs
7651 (list lsof))
7652 (propagated-inputs
7653 (list python-automat
7654 python-idna
7655 python-incremental
7656 python-pyopenssl
7657 python-service-identity
7658 python-twisted
7659 python-zope-interface))
7660 (home-page "https://github.com/meejah/txtorcon")
7661 (synopsis "Twisted-based Tor controller client")
7662 (description
7663 "This package provides a Twisted-based Tor controller client,with
7664state-tracking and configuration abstractions.")
7665 (license license:expat)))
7666
7667(define-public python-url-normalize
7668 (package
7669 (name "python-url-normalize")
7670 (version "2.2.1")
7671 (source
7672 (origin
7673 (method git-fetch) ; no tests in PyPI release
7674 (uri (git-reference
7675 (url "https://github.com/niksite/url-normalize")
7676 (commit (string-append "v" version))))
7677 (file-name (git-file-name name version))
7678 (sha256
7679 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
7680 (build-system pyproject-build-system)
7681 (arguments
7682 (list
7683 #:test-flags #~(list "--ignore=tests/test_cli.py")))
7684 (native-inputs
7685 (list python-pytest python-pytest-socket python-setuptools))
7686 (propagated-inputs
7687 (list python-idna))
7688 (home-page "https://github.com/niksite/url-normalize")
7689 (synopsis "URL normalization for Python")
7690 (description
7691 "This package provides a URI Normalization function with following
7692features:
7693@itemize
7694@item take care of IDN domains
7695@item always provide the URI scheme in lowercase characters
7696@item always provide the host, if any, in lowercase characters
7697@item only perform percent-encoding where it is essential
7698@item always use uppercase A-through-F characters when percent-encoding
7699@item prevent dot-segments appearing in non-relative URI paths
7700@item for schemes that define a default authority, use an empty authority if
7701the default is desired
7702@item for schemes that define an empty path to be equivalent to a path of
7703@code{/}, use @code{/}
7704@item for schemes that define a port, use an empty port if the default is
7705desired
7706@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
7707@end itemize")
7708 (license license:expat)))
7709
7710(define-public python-waitress
7711 (package
7712 (name "python-waitress")
7713 (version "3.0.2")
7714 (source
7715 (origin
7716 (method url-fetch)
7717 (uri (pypi-uri "waitress" version))
7718 (sha256
7719 (base32
7720 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
7721 (build-system pyproject-build-system)
7722 (arguments
7723 (list
7724 ;; https://github.com/Pylons/waitress/issues/443
7725 #:test-flags #~(list "-k" "not test_service_port")))
7726 (native-inputs (list python-pytest python-setuptools))
7727 (home-page "https://github.com/Pylons/waitress")
7728 (synopsis "Waitress WSGI server")
7729 (description
7730 "Waitress is meant to be a production-quality pure-Python WSGI server
7731with very acceptable performance.")
7732 (license license:zpl2.1)))
7733
7734(define-public python-weasel
7735 (package
7736 (name "python-weasel")
7737 (version "1.0.0")
7738 (source
7739 (origin
7740 (method git-fetch)
7741 (uri (git-reference
7742 (url "https://github.com/explosion/weasel/")
7743 (commit (string-append "release-v" version))))
7744 (file-name (git-file-name name version))
7745 (sha256
7746 (base32 "1sxcxri9hl9rs1kvdrv81g6mlg7lifhq9xacskracz63v4nyh8na"))))
7747 (build-system pyproject-build-system)
7748 (arguments
7749 (list
7750 #:test-flags
7751 ;; This test raises an error, but not the one expected by pytest.
7752 #~(list (string-append "--deselect=weasel/tests/test_validation.py::"
7753 "test_project_config_interpolation[10_0]")
7754 ;; Network access is required.
7755 #$@(map (lambda (test) (string-append "--deselect="
7756 "weasel/tests/cli/"
7757 test))
7758 (list "test_cli.py::test_project_git_dir_asset"
7759 "test_cli.py::test_project_git_file_asset"
7760 "test_cli_app.py::test_project_assets")))))
7761 (native-inputs
7762 (list python-pytest
7763 python-setuptools))
7764 (propagated-inputs
7765 (list python-cloudpathlib
7766 python-confection
7767 python-httpx
7768 python-packaging
7769 python-pydantic
7770 python-smart-open
7771 python-srsly
7772 python-typer
7773 python-wasabi))
7774 (home-page "https://github.com/explosion/weasel/")
7775 (synopsis "Small and easy workflow system")
7776 (description
7777 "This package provides a minimalistic workflow system to manage and
7778share end-to-end workflows for different use cases and domains.")
7779 (license license:expat)))
7780
7781(define-public python-webencodings
7782 (package
7783 (name "python-webencodings")
7784 (version "0.5.1")
7785 (source
7786 (origin
7787 (method url-fetch)
7788 (uri (pypi-uri "webencodings" version))
7789 (sha256
7790 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
7791 (build-system pyproject-build-system)
7792 (arguments
7793 (list #:test-flags #~(list "webencodings/tests.py")))
7794 (native-inputs
7795 (list python-pytest python-setuptools))
7796 (home-page "https://github.com/SimonSapin/python-webencodings")
7797 (synopsis "Character encoding aliases for legacy web content")
7798 (description
7799 "In order to be compatible with legacy web content when interpreting
7800something like @code{Content-Type: text/html; charset=latin1}, tools need to
7801use a particular set of aliases for encoding labels as well as some overriding
7802rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
7803actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
7804BOM takes precedence over any other encoding declaration. The WHATWG
7805@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
7806details so that implementations do not have to reverse-engineer each other.
7807
7808This module implements the Encoding standard and has encoding labels and BOM
7809detection, but the actual implementation for encoders and decoders is
7810Python’s.")
7811 (license license:bsd-3)))
7812
7813(define-public python-omnipath
7814 (package
7815 (name "python-omnipath")
7816 (version "1.0.10")
7817 (source
7818 (origin
7819 (method git-fetch)
7820 (uri (git-reference
7821 (url "https://github.com/saezlab/omnipath/")
7822 (commit (string-append "v" version))))
7823 (file-name (git-file-name name version))
7824 (sha256
7825 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
7826 (build-system pyproject-build-system)
7827 (arguments
7828 (list
7829 #:test-flags '(list "-k"
7830 (string-append
7831 ;; These require internet access
7832 "not test_download_homologene"
7833 " and not test_complex_genes"
7834 ;; These tests are not compatible with pandas 3
7835 " and not test_no_dtype_conversion"
7836 " and not test_strip_resource_label_no_func"
7837 " and not test_split_unique_join_no_func"
7838 " and not test_auto_dtype"))
7839 #:phases
7840 #~(modify-phases %standard-phases
7841 (add-after 'unpack 'set-home
7842 (lambda _
7843 (setenv "HOME" "/tmp"))))))
7844 (propagated-inputs (list python-attrs
7845 python-docrep
7846 python-inflect
7847 python-networkx
7848 python-packaging
7849 python-pandas
7850 python-requests
7851 python-tqdm
7852 python-typing-extensions
7853 python-urllib3
7854 python-wrapt))
7855 (native-inputs (list nss-certs-for-test
7856 python-bump2version
7857 python-hatchling
7858 python-pytest
7859 python-pytest-mock
7860 python-pytest-socket
7861 python-requests-mock))
7862 (home-page "https://omnipathdb.org/")
7863 (synopsis "Python client for the OmniPath web service")
7864 (description "This package provides a Python client for the OmniPath web
7865service.")
7866 (license license:expat)))
7867
7868(define-public python-openai
7869 (package
7870 (name "python-openai")
7871 (version "2.42.0")
7872 (source
7873 (origin
7874 (method git-fetch)
7875 (uri (git-reference
7876 (url "https://github.com/openai/openai-python")
7877 (commit (string-append "v" version))))
7878 (file-name (git-file-name name version))
7879 (sha256
7880 (base32 "1p0vzy34cx2gfkhsqg2kxzam51cjlpa99q0skzj4426sx2hsw3g6"))))
7881 (build-system pyproject-build-system)
7882 (arguments
7883 (list
7884 #:test-flags
7885 ;; These require internet access and an openai API key.
7886 #~(list "--ignore=openai/tests/asyncio/test_endpoints.py"
7887 "--ignore=openai/tests/test_endpoints.py"
7888 "--ignore-glob=tests/api_resources/*")))
7889 (propagated-inputs
7890 (list python-aiohttp
7891 python-distro
7892 python-httpx
7893 python-jiter
7894 python-pydantic
7895 python-requests
7896 python-tqdm
7897 python-typing-extensions))
7898 (native-inputs
7899 (list nss-certs-for-test
7900 python-dirty-equals
7901 python-hatchling
7902 python-hatch-fancy-pypi-readme
7903 python-inline-snapshot
7904 python-pytest
7905 python-pytest-asyncio
7906 python-pytest-mock
7907 python-pytest-xdist
7908 python-respx
7909 python-rich
7910 python-setuptools))
7911 (home-page "https://github.com/openai/openai-python")
7912 (synopsis "Python client library for the OpenAI API")
7913 (description "This package provides a Python client library for the
7914OpenAI API.")
7915 (license license:expat)))
7916
7917(define-public python-openapi-schema-validator
7918 (package
7919 (name "python-openapi-schema-validator")
7920 (version "0.6.2")
7921 (source
7922 (origin
7923 (method git-fetch) ;no tests in pypi release
7924 (uri (git-reference
7925 (url "https://github.com/p1c2u/openapi-schema-validator")
7926 (commit version)))
7927 (file-name (git-file-name name version))
7928 (sha256
7929 (base32
7930 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
7931 (build-system pyproject-build-system)
7932 (arguments
7933 (list
7934 #:test-flags
7935 ;; This one returns 5 instead of 4 elements
7936 '(list "-k" "not test_array_prefixitems_invalid")
7937 #:phases
7938 #~(modify-phases %standard-phases
7939 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
7940 (add-after 'unpack 'relax-requirements
7941 (lambda _
7942 (substitute* "pyproject.toml"
7943 (("jsonschema-specifications.*")
7944 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
7945 (native-inputs (list python-poetry-core python-pytest))
7946 (propagated-inputs
7947 (list python-isodate
7948 python-jsonschema
7949 python-rfc3339-validator
7950 python-strict-rfc3339))
7951 (home-page "https://github.com/p1c2u/openapi-schema-validator")
7952 (synopsis "OpenAPI schema validation library for Python")
7953 (description "Openapi-schema-validator is a Python library that validates
7954a schema against:
7955@itemize
7956@item OpenAPI Schema Specification v3.0 which is an extended subset of the
7957JSON Schema Specification Wright Draft 00.
7958@item OpenAPI Schema Specification v3.1 which is an extended superset of the
7959JSON Schema Specification Draft 2020-12.
7960@end itemize")
7961 (license license:bsd-3)))
7962
7963(define-public python-openapi-spec-validator
7964 (package
7965 (name "python-openapi-spec-validator")
7966 (version "0.7.1")
7967 (source
7968 (origin
7969 (method git-fetch) ;no tests in pypi release
7970 (uri (git-reference
7971 (url "https://github.com/p1c2u/openapi-spec-validator")
7972 (commit version)))
7973 (file-name (git-file-name name version))
7974 (sha256
7975 (base32
7976 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
7977 (build-system pyproject-build-system)
7978 (arguments
7979 (list
7980 ;; These tests attempt to fetch resources from the Internet
7981 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
7982 "-k" "not example")))
7983 (native-inputs
7984 (list python-poetry-core
7985 python-pytest))
7986 (propagated-inputs
7987 (list python-jsonschema
7988 python-jsonschema-path
7989 python-lazy-object-proxy
7990 python-openapi-schema-validator
7991 python-pyyaml
7992 python-requests
7993 python-setuptools))
7994 (home-page "https://github.com/p1c2u/openapi-spec-validator")
7995 (synopsis "OpenAPI spec validator")
7996 (description "OpenAPI Spec Validator is a Python library that validates an
7997OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
79983.0 and OpenAPI 3.1 specifications. The validator aims to check for full
7999compliance with the specification.")
8000 (license license:asl2.0)))
8001
8002(define-public python-openapi-core
8003 (package
8004 (name "python-openapi-core")
8005 (version "0.19.4")
8006 (source
8007 (origin
8008 (method git-fetch)
8009 (uri (git-reference
8010 (url "https://github.com/p1c2u/openapi-core")
8011 (commit version)))
8012 (file-name (git-file-name name version))
8013 (sha256
8014 (base32
8015 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
8016 (build-system pyproject-build-system)
8017 (arguments
8018 (list
8019 #:test-flags
8020 '(list "tests/unit"
8021 "-k" "not test_chars_valid")))
8022 (native-inputs (list python-django
8023 python-falcon
8024 python-flask
8025 python-mock
8026 python-poetry-core
8027 python-pytest
8028 python-pytest-asyncio
8029 python-responses))
8030 (propagated-inputs
8031 (list python-attrs
8032 python-aiohttp
8033 python-isodate
8034 python-jsonschema
8035 python-lazy-object-proxy
8036 python-more-itertools
8037 python-openapi-schema-validator
8038 python-openapi-spec-validator
8039 python-parse
8040 python-six
8041 python-werkzeug))
8042 (home-page "https://github.com/p1c2u/openapi-core")
8043 (synopsis "OpenAPI core library")
8044 (description "Openapi-core is a Python library that adds client-side and
8045server-side support for the OpenAPI Specification v3. It has features such
8046as:
8047@itemize
8048@item Validation of requests and responses
8049@item Schema casting and unmarshalling
8050@item Media type and parameters deserialization
8051@item Security providers (API keys, Cookie, Basic and Bearer HTTP
8052authentications)
8053@item Custom deserializers and formats
8054@item Integration with libraries and frameworks.
8055@end itemize")
8056 (license license:bsd-3)))
8057
8058(define-public python-openid
8059 (package
8060 (name "python-openid")
8061 (version "3.2.0")
8062 (source
8063 (origin
8064 (method git-fetch)
8065 (uri (git-reference
8066 (url "https://github.com/necaris/python3-openid")
8067 (commit (string-append "v" version))))
8068 (file-name (git-file-name name version))
8069 (sha256
8070 (base32 "1b50wmwb7k5k61zlc7d2b982i20410vp472zgl2yx8gxdnfvn8g1"))))
8071 (build-system pyproject-build-system)
8072 (arguments
8073 (list #:test-backend #~'unittest
8074 #:test-flags #~(list "openid.test.test_suite")))
8075 (propagated-inputs
8076 (list python-defusedxml))
8077 (native-inputs
8078 (list python-psycopg2 python-django python-setuptools))
8079 (home-page "https://github.com/necaris/python3-openid")
8080 (synopsis "OpenID support for servers and consumers")
8081 (description "This library provides OpenID authentication for Python, both
8082for clients and servers.")
8083 (license license:asl2.0)))
8084
8085(define-public python-openid-cla
8086 ;; XXX: Last updated in 2015.
8087 (package
8088 (name "python-openid-cla")
8089 (version "1.2")
8090 (source
8091 (origin
8092 (method url-fetch)
8093 (uri (pypi-uri "python-openid-cla" version))
8094 (sha256
8095 (base32
8096 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
8097 (build-system pyproject-build-system)
8098 (arguments '(#:tests? #f)) ; No tests.
8099 (native-inputs (list python-setuptools python-wheel))
8100 (propagated-inputs (list python-openid python-six))
8101 (home-page "https://github.com/puiterwijk/python-openid-cla/")
8102 (synopsis "Implementation of the OpenID CLA extension for python-openid")
8103 (description "@code{openid-cla} is an implementation of the OpenID
8104contributor license agreement extension for python-openid.")
8105 (license license:bsd-3)))
8106
8107(define-public python-openid-teams
8108 ;; XXX: Last updated in 2018.
8109 (package
8110 (name "python-openid-teams")
8111 (version "1.1")
8112 (source
8113 (origin
8114 (method url-fetch)
8115 (uri (pypi-uri "python-openid-teams" version))
8116 (sha256
8117 (base32
8118 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
8119 (build-system pyproject-build-system)
8120 (arguments '(#:tests? #f)) ; No tests.
8121 (native-inputs (list python-setuptools python-wheel))
8122 (propagated-inputs (list python-openid python-six))
8123 (home-page "https://github.com/puiterwijk/python-openid-teams/")
8124 (synopsis "Implementation of the OpenID teams extension for python-openid")
8125 (description
8126 "@code{openid-teams} is an implementation of the OpenID
8127teams extension for python-openid.")
8128 (license license:bsd-3)))
8129
8130(define-public python-priority
8131 (package
8132 (name "python-priority")
8133 (version "2.0.0")
8134 (source
8135 (origin
8136 (method url-fetch)
8137 (uri (pypi-uri "priority" version))
8138 (sha256
8139 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
8140 (build-system pyproject-build-system)
8141 (native-inputs
8142 (list python-pytest python-setuptools python-wheel))
8143 (home-page "https://python-hyper.org/projects/priority/en/latest/")
8144 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
8145 (description
8146 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
8147set out in RFC 7540 Section 5.3 (Stream Priority).")
8148 (license license:expat)))
8149
8150(define-public python-weblate-language-data
8151 (package
8152 (name "python-weblate-language-data")
8153 (version "2025.8")
8154 (source
8155 (origin
8156 (method url-fetch)
8157 (uri (pypi-uri "weblate_language_data" version))
8158 (sha256
8159 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
8160 (build-system pyproject-build-system)
8161 (arguments (list #:tests? #f)) ;not tests, just data files
8162 (native-inputs
8163 (list python-setuptools))
8164 (propagated-inputs
8165 (list python-translate-toolkit))
8166 (home-page "https://github.com/WeblateOrg/language-data")
8167 (synopsis "Language definitions for Weblate")
8168 (description
8169 "This package provides language definitions used by
8170@url{https://weblate.org/, Weblate}i.")
8171 (license license:expat)))
8172
8173(define-public python-wikidata
8174 (package
8175 (name "python-wikidata")
8176 (version "0.8.1")
8177 (source
8178 (origin
8179 (method git-fetch)
8180 (uri (git-reference
8181 (url "https://github.com/dahlia/wikidata")
8182 (commit version)))
8183 (file-name (git-file-name name version))
8184 (sha256
8185 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
8186 (build-system pyproject-build-system)
8187 (native-inputs
8188 (list python-pytest python-setuptools))
8189 (home-page "https://github.com/dahlia/wikidata")
8190 (synopsis "Wikidata client library")
8191 (description
8192 "This package provides a Python interface to @url{https://www.wikidata.org/,
8193Wikidata}.")
8194 (license license:gpl3+)))
8195
8196(define-public python-wsproto
8197 (package
8198 (name "python-wsproto")
8199 (version "1.3.2")
8200 (source
8201 (origin
8202 (method git-fetch)
8203 (uri (git-reference
8204 (url "https://github.com/python-hyper/wsproto/")
8205 (commit version)))
8206 (file-name (git-file-name name version))
8207 (sha256
8208 (base32 "1n67xnnq3mvnxp61r4d8730hh8hzrq8i9bdrv8jivhj369fhndn9"))))
8209 (build-system pyproject-build-system)
8210 (native-inputs
8211 (list python-pytest
8212 python-setuptools))
8213 (propagated-inputs
8214 (list python-h11))
8215 (home-page "https://github.com/python-hyper/wsproto/")
8216 (synopsis "WebSockets state-machine based protocol implementation")
8217 (description
8218 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
8219stack. It's written from the ground up to be embeddable in whatever program
8220you choose to use, ensuring that you can communicate via WebSockets, as
8221defined in RFC6455, regardless of your programming paradigm.")
8222 (license license:expat)))
8223
8224(define-public hypercorn
8225 (package
8226 (name "hypercorn")
8227 (version "0.18.0")
8228 (source
8229 (origin
8230 (method git-fetch) ;PyPI does not have tests
8231 (uri (git-reference
8232 (url "https://github.com/pgjones/hypercorn")
8233 (commit version)))
8234 (file-name (git-file-name name version))
8235 (sha256
8236 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
8237 (build-system pyproject-build-system)
8238 ;; Propagate because Hypercorn also exposes functionality over a module.
8239 (propagated-inputs (list python-h11
8240 python-h2
8241 python-priority
8242 python-tomli
8243 python-wsproto))
8244 (native-inputs (list nss-certs-for-test
8245 python-httpx
8246 python-pdm-backend
8247 python-poetry-core
8248 python-pytest
8249 python-pytest-asyncio
8250 python-pytest-trio
8251 python-trio))
8252 (home-page "https://gitlab.com/pgjones/hypercorn/")
8253 (synopsis "ASGI Server based on Hyper libraries")
8254 (description
8255 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
8256wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
8257WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
8258can utilise asyncio, uvloop, or trio worker types.")
8259 (license license:expat)))
8260
8261(define-public python-querystring-parser
8262 (package
8263 (name "python-querystring-parser")
8264 (version "1.2.4")
8265 (source
8266 (origin
8267 (method git-fetch)
8268 (uri (git-reference
8269 (url "https://github.com/bernii/querystring-parser")
8270 (commit version)))
8271 (file-name (git-file-name name version))
8272 (sha256
8273 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
8274 (build-system pyproject-build-system)
8275 (arguments
8276 (list
8277 #:test-backend #~'custom
8278 #:test-flags #~(list "querystring_parser/tests.py")
8279 #:phases
8280 #~(modify-phases %standard-phases
8281 (add-after 'unpack 'fix-python-incompatibilities
8282 (lambda _
8283 (substitute* "querystring_parser/tests.py"
8284 ;; XXX FIXME: This test is broken with Python 3.7:
8285 ;; https://github.com/bernii/querystring-parser/issues/35
8286 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
8287 "True")
8288 ;; Removed in Python 3.12.
8289 (("assertEquals")
8290 "assertEqual")))))))
8291 (native-inputs (list python-setuptools))
8292 (propagated-inputs (list python-six))
8293 (home-page "https://github.com/bernii/querystring-parser")
8294 (synopsis "QueryString parser that correctly handles nested dictionaries")
8295 (description
8296 "This package provides a query string parser for Python and Django
8297projects that correctly creates nested dictionaries from sent form/querystring
8298data.")
8299 (license license:expat)))
8300
8301(define-public python-tornado
8302 (package
8303 (name "python-tornado")
8304 (version "6.4.2")
8305 (source
8306 (origin
8307 (method url-fetch)
8308 (uri (pypi-uri "tornado" version))
8309 (sha256
8310 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
8311 (build-system pyproject-build-system)
8312 (arguments
8313 (list
8314 #:test-flags
8315 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
8316 #~(list "--ignore=tornado/test/iostream_test.py")))
8317 (native-inputs
8318 (list python-certifi
8319 python-pytest
8320 python-setuptools))
8321 (home-page "https://www.tornadoweb.org/")
8322 (synopsis "Python web framework and asynchronous networking library")
8323 (description
8324 "Tornado is a Python web framework and asynchronous networking library,
8325originally developed at FriendFeed. By using non-blocking network I/O,
8326Tornado can scale to tens of thousands of open connections, making it ideal
8327for long polling, WebSockets, and other applications that require a long-lived
8328connection to each user.")
8329 (license license:asl2.0)))
8330
8331(define-public python-tornado-http-auth
8332 (package
8333 (name "python-tornado-http-auth")
8334 (version "1.1.1")
8335 (source
8336 (origin
8337 (method git-fetch)
8338 (uri (git-reference
8339 (url "https://github.com/gvalkov/tornado-http-auth")
8340 (commit (string-append "v" version))))
8341 (file-name (git-file-name name version))
8342 (sha256
8343 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
8344 (build-system pyproject-build-system)
8345 ;; XXX: This version is incompatible with current tornado.testing.
8346 (arguments (list #:tests? #f))
8347 (native-inputs (list python-setuptools))
8348 (propagated-inputs (list python-tornado))
8349 (home-page "https://github.com/gvalkov/tornado-http-auth")
8350 (synopsis "Digest and basic authentication module for Tornado")
8351 (description
8352 "Provides support for adding authentication to services using the Tornado
8353web framework, either via the basic or digest authentication schemes.")
8354 (license license:asl2.0)))
8355
8356(define-public python-wsgi-intercept
8357 (package
8358 (name "python-wsgi-intercept")
8359 (version "1.13.1")
8360 (source (origin
8361 (method url-fetch)
8362 (uri (pypi-uri "wsgi_intercept" version))
8363 (sha256
8364 (base32
8365 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
8366 (build-system pyproject-build-system)
8367 (arguments
8368 (list
8369 ;; XXX: tests required internet access
8370 #:tests? #f))
8371 (propagated-inputs
8372 (list python-six))
8373 (native-inputs
8374 (list python-httplib2
8375 python-pytest
8376 python-requests
8377 python-setuptools
8378 python-urllib3
8379 python-wheel))
8380 (synopsis "Puts a WSGI application in place of a real URI for testing")
8381 (description "Wsgi_intercept installs a WSGI application in place of a real
8382URI for testing. Testing a WSGI application normally involves starting a
8383server at a local host and port, then pointing your test code to that address.
8384Instead, this library lets you intercept calls to any specific host/port
8385combination and redirect them into a WSGI application importable by your test
8386program. Thus, you can avoid spawning multiple processes or threads to test
8387your Web app.")
8388 (home-page "https://github.com/cdent/wsgi-intercept")
8389 (license license:expat)))
8390
8391(define-public python-webob
8392 (package
8393 (name "python-webob")
8394 (version "1.8.10")
8395 (source
8396 (origin
8397 (method url-fetch)
8398 (uri (pypi-uri "webob" version))
8399 (sha256
8400 (base32
8401 "0avwfsqqva46aix1p61jbwjsw7kh6zkxvfds9xi3zg07yc8km5hw"))))
8402 (build-system pyproject-build-system)
8403 ;; tests: 2394 passed, 9 skipped, 1 xfailed, 35 warnings
8404 (native-inputs
8405 (list python-pytest
8406 python-setuptools))
8407 (home-page "https://webob.org/")
8408 (synopsis "WSGI request and response object")
8409 (description
8410 "WebOb provides wrappers around the WSGI request environment, and an
8411object to help create WSGI responses.")
8412 (license license:expat)))
8413
8414(define-public python-yewtube-search
8415 (package
8416 (name "python-yewtube-search")
8417 ;; Original repository for python-youtube-search package is archived, see:
8418 ;; <https://github.com/alexmercerind/youtube-search-python/issues/189>.
8419 ;; The most promising fork was
8420 ;; <https://github.com/ahmedayyad-dev/youtube-search-python-fork> which is
8421 ;; archived since <2026-04-04>. This is another fork with a different PyPI
8422 ;; name for python-yewtube.
8423 (version "1.6.7")
8424 (source
8425 (origin
8426 (method url-fetch)
8427 (uri (pypi-uri "yewtube_search_python" version))
8428 (sha256
8429 (base32 "0vjh4wrlqx4lv9qi6572jx2d0rsp6gkvaqf0f2ar4npdz0ldgl47"))))
8430 (build-system pyproject-build-system)
8431 (arguments (list #:tests? #f)) ;no tests in repository
8432 (native-inputs
8433 (list python-setuptools))
8434 (propagated-inputs
8435 (list python-httpx))
8436 (home-page "https://github.com/iamtalhaasghar/youtube-search-python")
8437 (synopsis "Search for YouTube videos, channels & playlists")
8438 (description
8439 "This package provides tools to search for @code{YouTube} videos,
8440channels and playlists; as well as getting video metadata from links. This
8441package does not rely on the @code{YouTube} Data API v3.")
8442 (license license:expat)))
8443
8444(define-public python-zc-lockfile
8445 (package
8446 (name "python-zc-lockfile")
8447 (version "4.0")
8448 (source
8449 (origin
8450 (method git-fetch)
8451 (uri (git-reference
8452 (url "https://github.com/zopefoundation/zc.lockfile")
8453 (commit version)))
8454 (file-name (git-file-name name version))
8455 (sha256
8456 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
8457 (build-system pyproject-build-system)
8458 (arguments
8459 (list
8460 #:phases
8461 #~(modify-phases %standard-phases
8462 (replace 'check
8463 (lambda* (#:key tests? #:allow-other-keys)
8464 (if tests?
8465 (invoke "zope-testrunner" "--test-path=src")
8466 (format #t "test suite not run~%")))))))
8467 (native-inputs (list python-zope-testing python-zope-testrunner
8468 python-setuptools))
8469 (home-page "https://github.com/zopefoundation/zc.lockfile")
8470 (synopsis "Interprocess locks using lock files")
8471 (description
8472 "This package provides an implementation of interprocess locks using lock
8473files. These locks can also be used to mediate access to other files.")
8474 (license license:zpl2.1)))
8475
8476(define-public python-zconfig
8477 (package
8478 (name "python-zconfig")
8479 (version "4.3")
8480 (source
8481 (origin
8482 (method git-fetch)
8483 (uri (git-reference
8484 (url "https://github.com/zopefoundation/ZConfig/")
8485 (commit version)))
8486 (file-name (git-file-name name version))
8487 (sha256
8488 (base32 "06c4vffk51fw03q87r31s81b0xbxg2qqvjfmcl2z4hg21fr088c2"))))
8489 (build-system pyproject-build-system)
8490 (arguments
8491 (list
8492 #:phases
8493 #~(modify-phases %standard-phases
8494 (replace 'check
8495 (lambda* (#:key tests? #:allow-other-keys)
8496 (if tests?
8497 (begin
8498 ;; This test assumes we still have setup.py in the
8499 ;; directory from which we import zconfig, which
8500 ;; does not work after installing the package.
8501 (delete-file-recursively
8502 "src/ZConfig/tests/test_readme.py")
8503 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
8504 (format #t "test suite not run~%")))))))
8505 (native-inputs (list python-docutils python-manuel python-zope-exceptions
8506 python-zope-testrunner python-setuptools))
8507 (home-page "https://github.com/zopefoundation/ZConfig/")
8508 (synopsis "Structured configuration library intended for general use")
8509 (description
8510 "@code{zconfig} is a configuration library intended for general use. It
8511supports a hierarchical schema-driven configuration model that allows a schema
8512to specify data conversion routines written in Python. Its model is very
8513different from the model supported by the @code{configparser} module found in
8514Python's standard library, and is more suitable to configuration-intensive
8515applications.")
8516 (license license:zpl2.1)))
8517
8518(define-public python-zodb
8519 (package
8520 (name "python-zodb")
8521 (version "6.0.1")
8522 (source
8523 (origin
8524 (method url-fetch)
8525 (uri (pypi-uri "zodb" version))
8526 (sha256
8527 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
8528 (build-system pyproject-build-system)
8529 (arguments
8530 (list
8531 #:phases
8532 #~(modify-phases %standard-phases
8533 (replace 'check
8534 (lambda* (#:key tests? #:allow-other-keys)
8535 (if tests?
8536 (begin
8537 ;; This test does not work after installing the
8538 ;; package, since it expects the ZODB source code
8539 ;; to reside in the src/ directory.
8540 (delete-file-recursively
8541 "src/ZODB/tests/testdocumentation.py")
8542 (invoke "zope-testrunner" "-vv" "--test-path=src"
8543 "--all"))
8544 (format #t "test suite not run~%")))))))
8545 (native-inputs
8546 (list python-manuel
8547 python-wheel
8548 python-zope-testing
8549 python-zope-testrunner))
8550 (propagated-inputs
8551 (list python-btrees
8552 python-persistent
8553 python-transaction
8554 python-zc-lockfile
8555 python-zconfig
8556 python-zodbpickle
8557 python-zope-interface))
8558 (home-page "http://zodb-docs.readthedocs.io")
8559 (synopsis "Object-oriented database for Python")
8560 (description
8561 "@code{ZODB} provides an object-oriented and @acronym{ACID,
8562Atomicity Consistency Isolation Durability} compliant database for Python with
8563a high degree of transparency. @code{ZODB} is an object-oriented database,
8564not an object-relational mapping. This comes with several advantaged:
8565
8566@itemize
8567@item no separate language for database operations
8568@item very little impact on your code to make objects persistent
8569@item no database mapper that partially hides the database.
8570@item almost no seam between code and database.
8571@end itemize")
8572 (license license:zpl2.1)))
8573
8574(define-public python-zodbpickle
8575 (package
8576 (name "python-zodbpickle")
8577 (version "3.2")
8578 (source
8579 (origin
8580 (method url-fetch)
8581 (uri (pypi-uri "zodbpickle" version))
8582 (sha256
8583 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
8584 (build-system pyproject-build-system)
8585 (arguments
8586 '(#:phases (modify-phases %standard-phases
8587 (replace 'check
8588 (lambda* (#:key tests? #:allow-other-keys)
8589 (if tests?
8590 (invoke "zope-testrunner" "-vv" "--test-path=src"
8591 "--all")
8592 (format #t "test suite not run~%")))))))
8593 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
8594 (home-page "https://github.com/zopefoundation/zodbpickle")
8595 (synopsis "Uniform pickling interface for @code{zodb}")
8596 (description
8597 "This package is a fork of the @code{pickle} module (and the
8598supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
8599support for the @code{noload} operations used by @code{zodb}.")
8600 (license (list license:psfl license:zpl2.1))))
8601
8602(define-public python-zope-dottedname
8603 (package
8604 (name "python-zope-dottedname")
8605 (version "7.0")
8606 (source
8607 (origin
8608 (method git-fetch)
8609 (uri (git-reference
8610 (url "https://github.com/zopefoundation/zope.dottedname")
8611 (commit version)))
8612 (file-name (git-file-name name version))
8613 (sha256
8614 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
8615 (build-system pyproject-build-system)
8616 (arguments
8617 (list #:test-backend #~'custom
8618 #:test-flags #~(list "src/zope/dottedname/tests.py")))
8619 (native-inputs (list python-setuptools))
8620 (home-page "https://zopedottedname.readthedocs.io")
8621 (synopsis "Resolver for Python dotted names")
8622 (description
8623 "This package provides a @code{resolve()} function that resolves strings
8624containing dotted names into the appropriate Python object.")
8625 (license license:zpl2.1)))
8626
8627(define-public python-zope-event
8628 (package
8629 (name "python-zope-event")
8630 (version "6.0")
8631 (source
8632 (origin
8633 (method git-fetch)
8634 (uri (git-reference
8635 (url "https://github.com/zopefoundation/zope.event")
8636 (commit version)))
8637 (file-name (git-file-name name version))
8638 (sha256
8639 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
8640 (build-system pyproject-build-system)
8641 (arguments
8642 (list
8643 #:test-flags
8644 #~(list "src/zope/event/tests.py")))
8645 (native-inputs (list python-pytest python-setuptools))
8646 (home-page "https://zopeevent.readthedocs.io/en/latest/")
8647 (synopsis "Event publishing system for Python")
8648 (description
8649 "Zope.event provides an event publishing API, intended for use by
8650applications which are unaware of any subscribers to their events. It is a
8651simple event-dispatching system on which more sophisticated event dispatching
8652systems can be built.")
8653 (license license:zpl2.1)))
8654
8655(define-public python-zope-interface
8656 (package
8657 (name "python-zope-interface")
8658 (version "7.2")
8659 (source
8660 (origin
8661 (method git-fetch)
8662 (uri (git-reference
8663 (url "https://github.com/zopefoundation/zope.interface")
8664 (commit version)))
8665 (file-name (git-file-name name version))
8666 (sha256
8667 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
8668 (build-system pyproject-build-system)
8669 (arguments
8670 ;; XXX: test suite can't find python-zope-testing
8671 (list #:tests? #f))
8672 (native-inputs (list python-setuptools))
8673 (home-page "https://zopeinterface.readthedocs.io")
8674 (synopsis "\"Design by contract\" methodology in Python")
8675 (description
8676 "Zope.interface provides an implementation of \"object interfaces\" for
8677Python. Interfaces are a mechanism for labeling objects as conforming to a
8678given API or contract.")
8679 (license license:zpl2.1)))
8680
8681(define-public python-zope-exceptions
8682 (package
8683 (name "python-zope-exceptions")
8684 (version "6.0")
8685 (source
8686 (origin
8687 (method git-fetch)
8688 (uri (git-reference
8689 (url "https://github.com/zopefoundation/zope.exceptions")
8690 (commit version)))
8691 (file-name (git-file-name name version))
8692 (sha256
8693 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
8694 (build-system pyproject-build-system)
8695 (arguments
8696 (list
8697 #:phases
8698 #~(modify-phases %standard-phases
8699 (replace 'check
8700 (lambda* (#:key tests? #:allow-other-keys)
8701 (if tests?
8702 (invoke "zope-testrunner" "--test-path=src")
8703 (format #t "test suite not run~%")))))))
8704 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
8705 (propagated-inputs (list python-zope-interface))
8706 (home-page "https://github.com/zopefoundation/zope.exceptions")
8707 (synopsis "Zope exceptions")
8708 (description
8709 "Zope.exceptions provides general-purpose exception types that have uses
8710outside of the Zope framework.")
8711 (license license:zpl2.1)))
8712
8713(define (python-zope-bootstrap-package orig)
8714 (package
8715 (inherit orig)
8716 (name (string-append (package-name orig) "-bootstrap"))
8717 (arguments
8718 (if (null? (package-arguments orig))
8719 (list
8720 #:tests? #f
8721 #:phases #~(modify-phases %standard-phases
8722 (delete 'sanity-check)))
8723 (substitute-keyword-arguments arguments
8724 ((#:tests? _ #f) #f)
8725 ((#:phases phases '%standard-phases)
8726 #~(modify-phases #$phases
8727 (delete 'sanity-check))))))
8728 (propagated-inputs `())
8729 (native-inputs (list python-setuptools))
8730 (properties `((hidden? . #t)))))
8731
8732(define-public python-zope-exceptions-bootstrap
8733 (python-zope-bootstrap-package python-zope-exceptions))
8734
8735(define-public python-zope-testing
8736 (package
8737 (name "python-zope-testing")
8738 (version "6.0")
8739 (source
8740 (origin
8741 (method git-fetch)
8742 (uri (git-reference
8743 (url "https://github.com/zopefoundation/zope.testing")
8744 (commit version)))
8745 (file-name (git-file-name name version))
8746 (sha256
8747 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
8748 (build-system pyproject-build-system)
8749 (arguments
8750 (list
8751 #:phases
8752 #~(modify-phases %standard-phases
8753 (replace 'check
8754 (lambda* (#:key tests? #:allow-other-keys)
8755 (if tests?
8756 (invoke "zope-testrunner" "--test-path=src")
8757 (format #t "test suite not run~%")))))))
8758 (native-inputs (list python-setuptools
8759 python-zope-interface
8760 python-zope-testrunner-bootstrap))
8761 (home-page "https://zopetesting.readthedocs.io/")
8762 (synopsis "Zope testing helpers")
8763 (description
8764 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
8765servers, regular expressions, and more.")
8766 (license license:zpl2.1)))
8767
8768(define-public python-zope-testrunner
8769 (package
8770 (name "python-zope-testrunner")
8771 (version "7.4")
8772 (source
8773 (origin
8774 (method git-fetch)
8775 (uri (git-reference
8776 (url "https://github.com/zopefoundation/zope.testrunner")
8777 (commit version)))
8778 (file-name (git-file-name name version))
8779 (sha256
8780 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
8781 (build-system pyproject-build-system)
8782 (arguments
8783 (list
8784 #:phases
8785 #~(modify-phases %standard-phases
8786 (add-after 'unpack 'remove-problematic-test
8787 (lambda _
8788 ;; This test contains invalid syntax, which breaks bytecode
8789 ;; compilation. For simplicity just remove it.
8790 (delete-file
8791 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
8792 (replace 'check
8793 (lambda* (#:key tests? #:allow-other-keys)
8794 (if tests?
8795 (invoke "zope-testrunner" "--test-path=src")
8796 (format #t "test suite not run~%")))))))
8797 (native-inputs (list python-setuptools python-zope-testing))
8798 (propagated-inputs (list python-zope-exceptions python-zope-interface))
8799 (home-page "https://zopetestrunner.readthedocs.io")
8800 (synopsis "Zope testrunner script")
8801 (description "This package provides a script for running Python tests.")
8802 (license license:zpl2.1)))
8803
8804(define-public python-zope-testrunner-bootstrap
8805 (package
8806 (inherit (python-zope-bootstrap-package python-zope-testrunner))
8807 (propagated-inputs
8808 (list python-six python-zope-exceptions-bootstrap))
8809 (properties `((hidden? . #t)))))
8810
8811(define-public python-zope-i18nmessageid
8812 (package
8813 (name "python-zope-i18nmessageid")
8814 (version "7.0")
8815 (source
8816 (origin
8817 (method git-fetch)
8818 (uri (git-reference
8819 (url "https://github.com/zopefoundation/zope.i18nmessageid")
8820 (commit version)))
8821 (file-name (git-file-name name version))
8822 (sha256
8823 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
8824 (build-system pyproject-build-system)
8825 (arguments
8826 (list
8827 #:phases
8828 #~(modify-phases %standard-phases
8829 (replace 'check
8830 (lambda* (#:key tests? #:allow-other-keys)
8831 (if tests?
8832 (invoke "zope-testrunner" "--test-path=src")
8833 (format #t "test suite not run~%")))))))
8834 (native-inputs (list python-setuptools python-zope-testrunner))
8835 (home-page "https://zopei18nmessageid.readthedocs.io")
8836 (synopsis "Message identifiers for internationalization")
8837 (description "Zope.i18nmessageid provides facilities for declaring
8838internationalized messages within program source text.")
8839 (license license:zpl2.1)))
8840
8841(define-public python-zope-schema
8842 (package
8843 (name "python-zope-schema")
8844 (version "7.0.1")
8845 (source
8846 (origin
8847 (method git-fetch)
8848 (uri (git-reference
8849 (url "https://github.com/zopefoundation/zope.schema")
8850 (commit version)))
8851 (file-name (git-file-name name version))
8852 (sha256
8853 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
8854 (build-system pyproject-build-system)
8855 (arguments
8856 (list
8857 #:phases
8858 #~(modify-phases %standard-phases
8859 (replace 'check
8860 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8861 (add-installed-pythonpath inputs outputs)
8862 (if tests?
8863 (invoke "zope-testrunner" "--test-path=src")
8864 (format #t "test suite not run.~%")))))))
8865 (propagated-inputs (list python-zope-event python-zope-interface))
8866 (native-inputs (list python-zope-i18nmessageid python-zope-testing
8867 python-zope-testrunner python-setuptools))
8868 (home-page "https://zopeschema.readthedocs.io")
8869 (synopsis "Zope data schemas")
8870 (description "Zope.scheme provides extensions to zope.interface for
8871defining data schemas.")
8872 (license license:zpl2.1)))
8873
8874(define-public python-zope-sqlalchemy
8875 (package
8876 (name "python-zope-sqlalchemy")
8877 (version "1.6")
8878 (source
8879 (origin
8880 (method git-fetch)
8881 (uri (git-reference
8882 (url "https://github.com/zopefoundation/zope.sqlalchemy")
8883 (commit version)))
8884 (file-name (git-file-name name version))
8885 (sha256
8886 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
8887 (build-system pyproject-build-system)
8888 (arguments
8889 (list
8890 #:phases
8891 #~(modify-phases %standard-phases
8892 (replace 'check
8893 (lambda* (#:key tests? #:allow-other-keys)
8894 (if tests?
8895 (invoke "zope-testrunner" "--test-path=src")
8896 (format #t "test suite not run~%")))))))
8897 (propagated-inputs (list python-sqlalchemy python-transaction
8898 python-zope-interface))
8899 (native-inputs (list python-zope-testing python-zope-testrunner
8900 python-setuptools))
8901 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
8902 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
8903 (description
8904 "The aim of this package is to unify the plethora of existing packages
8905integrating SQLAlchemy with Zope's transaction management. As such,it only
8906provides a data manager and makes no attempt to define a @i{zopeish} way to
8907configure engines.")
8908 (license license:zpl2.1)))
8909
8910(define-public python-zope-configuration
8911 (package
8912 (name "python-zope-configuration")
8913 (version "7.0")
8914 (source
8915 (origin
8916 (method git-fetch)
8917 (uri (git-reference
8918 (url "https://github.com/zopefoundation/zope.configuration")
8919 (commit version)))
8920 (file-name (git-file-name name version))
8921 (sha256
8922 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
8923 (build-system pyproject-build-system)
8924 (arguments
8925 (list
8926 #:phases
8927 #~(modify-phases %standard-phases
8928 (replace 'check
8929 (lambda* (#:key tests? #:allow-other-keys)
8930 (if tests?
8931 (invoke "zope-testrunner" "--test-path=src")
8932 (format #t "test suite not run~%")))))))
8933 (native-inputs (list python-manuel python-setuptools python-zope-testing
8934 python-zope-testrunner))
8935 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
8936 python-zope-schema))
8937 (home-page "https://zopeconfiguration.readthedocs.io")
8938 (synopsis "Zope Configuration Markup Language")
8939 (description "Zope.configuration implements ZCML, the Zope Configuration
8940Markup Language.")
8941 (license license:zpl2.1)))
8942
8943(define-public python-zope-configuration-bootstrap
8944 (python-zope-bootstrap-package python-zope-configuration))
8945
8946(define-public python-zope-copy
8947 (package
8948 (name "python-zope-copy")
8949 (version "6.0")
8950 (source
8951 (origin
8952 (method git-fetch)
8953 (uri (git-reference
8954 (url "https://github.com/zopefoundation/zope.copy")
8955 (commit version)))
8956 (file-name (git-file-name name version))
8957 (sha256
8958 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
8959 (build-system pyproject-build-system)
8960 (arguments
8961 (list
8962 #:phases
8963 #~(modify-phases %standard-phases
8964 (replace 'check
8965 (lambda* (#:key tests? #:allow-other-keys)
8966 (if tests?
8967 (invoke "zope-testrunner" "--test-path=src")
8968 (format #t "test suite not run~%")))))))
8969 (propagated-inputs (list python-zope-interface))
8970 (native-inputs
8971 (list python-zodbpickle
8972 python-zope-component-bootstrap
8973 python-zope-location-bootstrap
8974 python-zope-proxy
8975 python-zope-schema
8976 python-zope-testing
8977 python-zope-testrunner
8978 python-setuptools))
8979 (home-page "https://zopecopy.readthedocs.io")
8980 (synopsis "Pluggable object copying mechanism")
8981 (description
8982 "This package provides a pluggable mechanism for copying persistent objects.")
8983 (license license:zpl2.1)))
8984
8985(define-public python-zope-proxy
8986 (package
8987 (name "python-zope-proxy")
8988 (version "7.0")
8989 (source
8990 (origin
8991 (method git-fetch)
8992 (uri (git-reference
8993 (url "https://github.com/zopefoundation/zope.proxy")
8994 (commit version)))
8995 (file-name (git-file-name name version))
8996 (sha256
8997 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
8998 (build-system pyproject-build-system)
8999 (arguments
9000 (list
9001 #:phases
9002 #~(modify-phases %standard-phases
9003 (replace 'check
9004 (lambda* (#:key tests? #:allow-other-keys)
9005 (if tests?
9006 (invoke "zope-testrunner" "--test-path=src")
9007 (format #t "test suite not run~%")))))))
9008 (native-inputs
9009 (list python-zope-location-bootstrap
9010 python-zope-security-bootstrap
9011 python-zope-testrunner
9012 python-setuptools))
9013 (propagated-inputs (list python-zope-interface))
9014 (home-page "https://zopeproxy.readthedocs.io")
9015 (synopsis "Generic, transparent proxies")
9016 (description
9017 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
9018special objects which serve as mostly-transparent wrappers around another
9019object, intervening in the apparent behavior of the wrapped object only when
9020necessary to apply the policy (e.g., access checking, location brokering,
9021etc.) for which the proxy is responsible.")
9022 (license license:zpl2.1)))
9023
9024(define-public python-zope-proxy-bootstrap
9025 (python-zope-bootstrap-package python-zope-proxy))
9026
9027(define-public python-zope-hookable
9028 (package
9029 (name "python-zope-hookable")
9030 (version "7.0")
9031 (source
9032 (origin
9033 (method git-fetch)
9034 (uri (git-reference
9035 (url "https://github.com/zopefoundation/zope.hookable")
9036 (commit version)))
9037 (file-name (git-file-name name version))
9038 (sha256
9039 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
9040 (build-system pyproject-build-system)
9041 (arguments
9042 (list
9043 #:phases
9044 #~(modify-phases %standard-phases
9045 (replace 'check
9046 (lambda* (#:key tests? #:allow-other-keys)
9047 (if tests?
9048 (invoke "zope-testrunner" "--test-path=src")
9049 (format #t "test suite not run~%")))))))
9050 (native-inputs (list python-zope-testing python-zope-testrunner
9051 python-setuptools))
9052 (home-page "https://zopehookable.readthedocs.io")
9053 (synopsis "Zope hookable")
9054 (description
9055 "This package supports the efficient creation of hookable objects, which
9056are callable objects that are meant to be optionally replaced. The idea is
9057that you create a function that does some default thing and make i hookable.
9058Later, someone can modify what it does by calling its sethook method and
9059changing its implementation. All users of the function, including those that
9060imported it, will see the change.")
9061 (license license:zpl2.1)))
9062
9063(define-public python-zope-location
9064 (package
9065 (name "python-zope-location")
9066 (version "6.0")
9067 (source
9068 (origin
9069 (method git-fetch)
9070 (uri (git-reference
9071 (url "https://github.com/zopefoundation/zope.location")
9072 (commit version)))
9073 (file-name (git-file-name name version))
9074 (sha256
9075 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
9076 (build-system pyproject-build-system)
9077 (arguments
9078 (list
9079 #:phases
9080 #~(modify-phases %standard-phases
9081 (replace 'check
9082 (lambda* (#:key tests? #:allow-other-keys)
9083 (if tests?
9084 (invoke "zope-testrunner" "--test-path=src")
9085 (format #t "test suite not run~%")))))))
9086 (native-inputs (list python-zope-testrunner python-setuptools))
9087 (propagated-inputs (list python-zope-interface python-zope-proxy
9088 python-zope-schema))
9089 (home-page "https://zopelocation.readthedocs.io")
9090 (synopsis "Zope location library")
9091 (description
9092 "Zope.location implements the concept of \"locations\" in Zope3, which
9093are are special objects that have a structural location.")
9094 (license license:zpl2.1)))
9095
9096(define-public python-zope-location-bootstrap
9097 (python-zope-bootstrap-package python-zope-location))
9098
9099(define-public python-zope-security
9100 (package
9101 (name "python-zope-security")
9102 (version "7.3")
9103 (source
9104 (origin
9105 (method git-fetch)
9106 (uri (git-reference
9107 (url "https://github.com/zopefoundation/zope.security")
9108 (commit version)))
9109 (file-name (git-file-name name version))
9110 (sha256
9111 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
9112 (build-system pyproject-build-system)
9113 (arguments
9114 (list
9115 #:phases
9116 #~(modify-phases %standard-phases
9117 (replace 'check
9118 (lambda* (#:key tests? #:allow-other-keys)
9119 (if tests?
9120 (invoke "zope-testrunner" "--test-path=src")
9121 (format #t "test suite not run~%")))))))
9122 (propagated-inputs
9123 (list python-zope-component
9124 python-zope-i18nmessageid
9125 python-zope-interface
9126 python-zope-location
9127 python-zope-proxy
9128 python-zope-schema))
9129 (native-inputs
9130 (list python-btrees
9131 python-zope-component-bootstrap
9132 python-zope-configuration-bootstrap
9133 python-zope-location-bootstrap
9134 python-zope-testing
9135 python-zope-testrunner
9136 python-setuptools))
9137 (home-page "https://zopesecurity.readthedocs.io")
9138 (synopsis "Zope security framework")
9139 (description "Zope.security provides a generic mechanism to implement
9140security policies on Python objects.")
9141 (license license:zpl2.1)))
9142
9143(define-public python-zope-security-bootstrap
9144 (package
9145 (inherit (python-zope-bootstrap-package python-zope-security))
9146 (propagated-inputs
9147 (list python-zope-i18nmessageid
9148 python-zope-interface
9149 python-zope-proxy-bootstrap
9150 python-zope-schema))))
9151
9152(define-public python-zope-component
9153 (package
9154 (name "python-zope-component")
9155 (version "7.0")
9156 (source
9157 (origin
9158 (method git-fetch)
9159 (uri (git-reference
9160 (url "https://github.com/zopefoundation/zope.component")
9161 (commit version)))
9162 (file-name (git-file-name name version))
9163 (sha256
9164 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
9165 (build-system pyproject-build-system)
9166 (arguments
9167 (list
9168 #:phases
9169 #~(modify-phases %standard-phases
9170 (replace 'check
9171 (lambda* (#:key tests? #:allow-other-keys)
9172 (if tests?
9173 (invoke "zope-testrunner" "--test-path=src")
9174 (format #t "test suite not run~%")))))))
9175 (native-inputs
9176 (list python-persistent
9177 python-zope-configuration-bootstrap
9178 python-zope-i18nmessageid
9179 python-zope-location-bootstrap
9180 python-zope-proxy-bootstrap
9181 python-zope-security-bootstrap
9182 python-zope-testing
9183 python-zope-testrunner
9184 python-setuptools))
9185 (propagated-inputs
9186 (list python-zope-deferredimport python-zope-deprecation
9187 python-zope-event python-zope-hookable python-zope-interface))
9188 (home-page "https://zopecomponent.readthedocs.io")
9189 (synopsis "Zope Component Architecture")
9190 (description
9191 "Zope.component represents the core of the Zope Component Architecture.
9192Together with the zope.interface package, it provides facilities for defining,
9193registering and looking up components.")
9194 (license license:zpl2.1)))
9195
9196(define-public python-zope-component-bootstrap
9197 (python-zope-bootstrap-package python-zope-component))
9198
9199(define-public python-zope-deferredimport
9200 (package
9201 (name "python-zope-deferredimport")
9202 (version "6.0")
9203 (source
9204 (origin
9205 (method git-fetch)
9206 (uri (git-reference
9207 (url "https://github.com/zopefoundation/zope.deferredimport")
9208 (commit version)))
9209 (file-name (git-file-name name version))
9210 (sha256
9211 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
9212 (build-system pyproject-build-system)
9213 (arguments
9214 (list
9215 #:phases
9216 #~(modify-phases %standard-phases
9217 (replace 'check
9218 (lambda* (#:key tests? #:allow-other-keys)
9219 (if tests?
9220 (invoke "zope-testrunner" "--test-path=src")
9221 (format #t "test suite not run~%")))))))
9222 (propagated-inputs (list python-zope-proxy))
9223 (native-inputs (list python-zope-testrunner python-setuptools))
9224 (home-page "https://zopedeferredimport.readthedocs.io")
9225 (synopsis "Defer imports until used by code")
9226 (description
9227 "Often, especially for package modules, you want to import names for
9228convenience, but not actually perform the imports until necessary. The
9229@code{zope.deferredimport} package provided facilities for defining names in
9230modules that will be imported from somewhere else when used. You can also cause
9231deprecation warnings to be issued when a variable is used.")
9232 (license license:zpl2.1)))
9233
9234(define-public python-ndg-httpsclient
9235 (package
9236 (name "python-ndg-httpsclient")
9237 (version "0.5.1")
9238 (source
9239 (origin
9240 (method git-fetch)
9241 (uri (git-reference
9242 (url "https://github.com/cedadev/ndg_httpsclient/")
9243 (commit version)))
9244 (file-name (git-file-name name version))
9245 (sha256
9246 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
9247 (build-system pyproject-build-system)
9248 (arguments
9249 (list
9250 #:tests? #f)) ;Tests appear to require networking.
9251 (native-inputs (list python-setuptools))
9252 (propagated-inputs (list python-pyasn1 python-pyopenssl))
9253 (synopsis "HTTPS support for Python's httplib and urllib2")
9254 (description
9255 "This is a HTTPS client implementation for httplib and urllib2 based on
9256PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
9257the default provided with Python and, importantly, enables full verification
9258of the SSL peer.")
9259 (home-page "https://github.com/cedadev/ndg_httpsclient/")
9260 (license license:bsd-3)))
9261
9262(define-public python-netaddr
9263 (package
9264 (name "python-netaddr")
9265 (version "1.3.0")
9266 (source
9267 (origin
9268 (method url-fetch)
9269 (uri (pypi-uri "netaddr" version))
9270 (sha256
9271 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
9272 (build-system pyproject-build-system)
9273 (native-inputs (list python-poetry-core
9274 python-pytest
9275 python-setuptools
9276 python-wheel))
9277 (home-page "https://netaddr.readthedocs.io")
9278 (synopsis "Pythonic manipulation of network addresses")
9279 (description
9280 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
9281and MAC network addresses.")
9282 (license license:bsd-3)))
9283
9284(define-public python-nh3
9285 (package
9286 (name "python-nh3")
9287 (version "0.2.20")
9288 (source
9289 (origin
9290 (method url-fetch)
9291 (uri (pypi-uri "nh3" version))
9292 (sha256
9293 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
9294 (build-system pyproject-build-system)
9295 (arguments
9296 (list
9297 #:imported-modules `(,@%cargo-build-system-modules
9298 ,@%pyproject-build-system-modules)
9299 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
9300 (guix build pyproject-build-system)
9301 (guix build utils))
9302 #:phases
9303 #~(modify-phases %standard-phases
9304 (add-after 'unpack 'prepare-cargo-build-system
9305 (lambda args
9306 (for-each
9307 (lambda (phase)
9308 (format #t "Running cargo phase: ~a~%" phase)
9309 (apply (assoc-ref cargo:%standard-phases phase)
9310 #:cargo-target #$(cargo-triplet)
9311 args))
9312 '(unpack-rust-crates
9313 configure
9314 check-for-pregenerated-files
9315 patch-cargo-checksums)))))))
9316 (native-inputs
9317 (append
9318 (list maturin python-pytest rust `(,rust "cargo"))
9319 (or (and=> (%current-target-system)
9320 (compose list make-rust-sysroot))
9321 '())))
9322 (inputs (cargo-inputs 'python-nh3))
9323 (home-page "https://nh3.readthedocs.io")
9324 (synopsis "Python bindings to Ammonia HTML sanitization library")
9325 (description "This package provides Python bindings to Ammonia HTML
9326sanitizer Rust crate.")
9327 (license license:expat)))
9328
9329(define-public python-noiseprotocol
9330 (package
9331 (name "python-noiseprotocol")
9332 (version "0.3.1")
9333 (source
9334 (origin
9335 (method git-fetch)
9336 (uri (git-reference
9337 (url "https://github.com/plizonczyk/noiseprotocol")
9338 (commit (string-append "v" version))))
9339 (file-name (git-file-name name version))
9340 (sha256
9341 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
9342 (build-system pyproject-build-system)
9343 (propagated-inputs (list python-cryptography))
9344 (native-inputs (list python-setuptools python-pytest))
9345 (home-page "https://github.com/plizonczyk/noiseprotocol")
9346 (synopsis "Implementation of Noise Protocol Framework")
9347 (description
9348 "This package provides an implementation of Noise Protocol Framework.")
9349 (license license:expat)))
9350
9351(define-public python-webrtcvad-wheels
9352 (package
9353 (name "python-webrtcvad-wheels")
9354 (version "2.0.14")
9355 (source
9356 (origin
9357 (method git-fetch)
9358 (uri (git-reference
9359 (url "https://github.com/daanzu/py-webrtcvad-wheels")
9360 (commit (string-append "v" version))))
9361 (file-name (git-file-name name version))
9362 (sha256
9363 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
9364 (build-system pyproject-build-system)
9365 (native-inputs (list python-psutil python-pytest python-setuptools))
9366 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
9367 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
9368 (description
9369 "This package provides a Python interface to the Google
9370@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
9371 (license license:expat)))
9372
9373(define-public python-websocket-client
9374 (package
9375 (name "python-websocket-client")
9376 (version "1.8.0")
9377 (source
9378 (origin
9379 (method url-fetch)
9380 (uri (pypi-uri "websocket_client" version))
9381 (sha256
9382 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
9383 (build-system pyproject-build-system)
9384 (arguments
9385 (list
9386 #:test-flags
9387 ;; This test requires networking.
9388 '(list "-k" "not testConnect")))
9389 (native-inputs
9390 (list python-pysocks
9391 python-pytest
9392 python-setuptools
9393 python-websockets
9394 python-wheel))
9395 (home-page "https://github.com/websocket-client/websocket-client")
9396 (synopsis "WebSocket client for Python")
9397 (description "The Websocket-client module provides the low level APIs for
9398WebSocket usage in Python programs.")
9399 (license license:lgpl2.1+)))
9400
9401(define-public python-websocket-client-0.59
9402 (package
9403 (inherit python-websocket-client)
9404 (version "0.59.0")
9405 (source
9406 (origin
9407 (method url-fetch)
9408 (uri (pypi-uri "websocket-client" version))
9409 (sha256
9410 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
9411 (native-inputs
9412 (modify-inputs native-inputs
9413 (append python-six)))))
9414
9415(define-public python-purl
9416 (package
9417 (name "python-purl")
9418 (version "1.6")
9419 (source
9420 (origin
9421 (method git-fetch)
9422 (uri (git-reference
9423 (url "https://github.com/codeinthehole/purl")
9424 (commit version)))
9425 (file-name (git-file-name name version))
9426 (sha256
9427 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
9428 (build-system pyproject-build-system)
9429 (arguments
9430 (list
9431 #:test-flags #~(list "--pyargs" "./tests")))
9432 (native-inputs (list python-pytest python-setuptools))
9433 (propagated-inputs (list python-six))
9434 (home-page "https://github.com/codeinthehole/purl")
9435 (synopsis "Python package for URL manipulation")
9436 (description "Purl is a Python package for handling URLs.")
9437 (license license:expat)))
9438
9439(define-public python-requests
9440 (package
9441 (name "python-requests")
9442 (version "2.34.2")
9443 (source (origin
9444 (method url-fetch)
9445 (uri (pypi-uri "requests" version))
9446 (sha256
9447 (base32
9448 "1vdrc3lq9x848760n7mdhn8whsfslk30pmnnk0v4caafmr69527j"))))
9449 (build-system pyproject-build-system)
9450 (arguments
9451 (list #:test-flags
9452 ;; These require internet access
9453 '(list "--ignore=tests/test_requests.py"
9454 "-k" (string-append "not test_use_proxy_from_environment"
9455 " and not requests.sessions.Session"
9456 " and not requests.models.PreparedRequest"
9457 " and not requests.api.request")
9458 "tests/")))
9459 (propagated-inputs
9460 (list python-certifi
9461 python-charset-normalizer
9462 python-idna
9463 python-urllib3))
9464 (native-inputs
9465 (list python-pytest
9466 python-pytest-mock
9467 python-setuptools))
9468 (home-page "https://requests.readthedocs.io/")
9469 (synopsis "Python HTTP library")
9470 (description
9471 "Requests is a Python HTTP client library. It aims to be easier to use
9472than Python’s urllib2 library.")
9473 (license license:asl2.0)))
9474
9475(define-public python-requests-kerberos
9476 (package
9477 (name "python-requests-kerberos")
9478 (version "0.14.0")
9479 ;; No tests in the PyPI tarball.
9480 (source
9481 (origin
9482 (method git-fetch)
9483 (uri (git-reference
9484 (url "https://github.com/requests/requests-kerberos")
9485 (commit (string-append "v" version))))
9486 (file-name (git-file-name name version))
9487 (sha256
9488 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
9489 (build-system pyproject-build-system)
9490 (propagated-inputs (list python-cryptography
9491 python-pyspnego
9492 python-requests))
9493 (native-inputs (list python-pytest python-pytest-mock python-setuptools
9494 python-wheel))
9495 (home-page "https://github.com/requests/requests-kerberos")
9496 (synopsis "Kerberos authentication handler for python-requests")
9497 (description "This package provides a Kerberos authentication handler for
9498python-requests.")
9499 (license license:isc)))
9500
9501(define-public python-requests-unixsocket2
9502 (package
9503 (name "python-requests-unixsocket2")
9504 (version "1.0.1")
9505 (source
9506 (origin
9507 (method git-fetch)
9508 (uri (git-reference
9509 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
9510 (commit (string-append "v" version))))
9511 (sha256
9512 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
9513 (build-system pyproject-build-system)
9514 (native-inputs
9515 (list nss-certs-for-test
9516 python-hatchling
9517 python-pytest
9518 python-waitress))
9519 (propagated-inputs
9520 (list python-requests
9521 python-urllib3))
9522 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
9523 (synopsis "Talk HTTP via a UNIX domain socket")
9524 (description
9525 "This Python package lets you use the @code{requests} library to talk
9526HTTP via a UNIX domain socket.")
9527 (license license:asl2.0)))
9528
9529(define-public python-requests-ntlm
9530 (package
9531 (name "python-requests-ntlm")
9532 (version "1.3.0")
9533 (source
9534 (origin
9535 (method git-fetch)
9536 (uri (git-reference
9537 (url "https://github.com/requests/requests-ntlm")
9538 (commit (string-append "v" version))))
9539 (file-name (git-file-name name version))
9540 (sha256
9541 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
9542 (build-system pyproject-build-system)
9543 (arguments
9544 (list
9545 #:test-flags
9546 ;; XXX: Connection refused.
9547 #~(list "-k" (string-join
9548 (list "not test_ntlm_http_with_cbt"
9549 "test_ntlm_http_without_cbt"
9550 "test_ntlm_https_with_cbt"
9551 "test_ntlm_https_without_cbt")
9552 " and not "))
9553 #:phases
9554 #~(modify-phases %standard-phases
9555 (add-before 'check 'spawn-test-server
9556 (lambda _
9557 ;; Taken from .github/workflows/ci.yml.
9558 (spawn "python"
9559 (list "python" "-m" "tests.test_server")))))))
9560 (propagated-inputs
9561 (list python-cryptography python-pyspnego python-requests))
9562 (native-inputs (list python-flask python-pytest python-setuptools))
9563 (home-page "https://github.com/requests/requests-ntlm")
9564 (synopsis "NTLM authentication support for Requests")
9565 (description
9566 "This package allows for HTTP NTLM authentication using the requests
9567library.")
9568 (license license:isc)))
9569
9570(define-public python-requests-mock
9571 (package
9572 (name "python-requests-mock")
9573 (version "1.12.1")
9574 (source
9575 (origin
9576 (method url-fetch)
9577 (uri (pypi-uri "requests-mock" version))
9578 (sha256
9579 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
9580 (build-system pyproject-build-system)
9581 (native-inputs
9582 (list python-purl
9583 python-pytest
9584 python-requests-futures
9585 python-setuptools
9586 python-setuptools-scm
9587 python-testtools))
9588 (propagated-inputs
9589 (list python-requests))
9590 (home-page "https://requests-mock.readthedocs.org/")
9591 (synopsis "Mock out responses from the requests package")
9592 (description
9593 "This module provides a building block to stub out the HTTP requests
9594portions of your testing code.")
9595 (license license:asl2.0)))
9596
9597(define-public python-requests-toolbelt
9598 (package
9599 (name "python-requests-toolbelt")
9600 (version "1.0.0")
9601 (source
9602 (origin
9603 (method url-fetch)
9604 (uri (pypi-uri "requests-toolbelt" version))
9605 (sha256
9606 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
9607 (build-system pyproject-build-system)
9608 (arguments
9609 (list
9610 #:test-flags
9611 ;; Requiring networking or fail due not valid certs: AttributeError:
9612 ;; 'MockHTTPResponse' object has no attribute 'close'
9613 #~(list "-k" (string-append "not test_dump_all"
9614 " and not test_dump_response"
9615 " and not test_prepared_request_override_base"
9616 " and not test_prepared_request_with_base"
9617 " and not test_request_override_base"
9618 " and not test_request_with_base"))))
9619 (native-inputs
9620 (list python-betamax
9621 python-mock
9622 python-pyopenssl
9623 python-pytest
9624 python-setuptools
9625 python-trustme
9626 python-wheel))
9627 (propagated-inputs
9628 (list python-requests))
9629 (synopsis "Extensions to python-requests")
9630 (description "This is a toolbelt of useful classes and functions to be used
9631with python-requests.")
9632 (home-page "https://github.com/requests/toolbelt/")
9633 (license license:asl2.0)))
9634
9635(define-public python-requests-ftp
9636 (package
9637 (name "python-requests-ftp")
9638 (version "0.3.1")
9639 (source
9640 (origin
9641 (method git-fetch)
9642 (uri (git-reference
9643 (url "https://github.com/Lukasa/requests-ftp")
9644 (commit (string-append "v" version))))
9645 (file-name (git-file-name name version))
9646 (sha256
9647 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
9648 (build-system pyproject-build-system)
9649 (arguments
9650 ;; XXX: No connection adapters found.
9651 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
9652 (native-inputs
9653 (list python-pyftpdlib python-pytest python-setuptools python-six))
9654 (propagated-inputs (list python-requests))
9655 (home-page "https://github.com/Lukasa/requests-ftp")
9656 (synopsis "FTP Transport Adapter for Requests")
9657 (description "Requests-FTP is an implementation of a simple FTP transport
9658adapter for use with the Requests library.")
9659 (license license:asl2.0)))
9660
9661(define-public python-mohawk
9662 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
9663 (revision "0"))
9664 (package
9665 (name "python-mohawk")
9666 (version (git-version "1.1.0" revision commit))
9667 (source
9668 (origin
9669 (method git-fetch)
9670 (uri (git-reference
9671 (url "https://github.com/kumar303/mohawk")
9672 (commit commit)))
9673 (file-name (git-file-name name version))
9674 (sha256
9675 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
9676 (patches
9677 (search-patches "python-mohawk-pytest.patch"))))
9678 (build-system pyproject-build-system)
9679 (arguments
9680 (list #:test-flags #~(list "mohawk/tests.py")))
9681 (native-inputs (list python-pytest python-setuptools))
9682 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
9683 ;python-six is removed?
9684 (home-page "https://github.com/kumar303/mohawk")
9685 (synopsis "Library for Hawk HTTP authorization")
9686 (description
9687 "Mohawk is an alternate Python implementation of the Hawk HTTP
9688authorization scheme.")
9689 (license license:bsd-3))))
9690
9691(define-public python-msal
9692 (package
9693 (name "python-msal")
9694 (version "1.34.0")
9695 (home-page
9696 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
9697 (source
9698 (origin
9699 (method git-fetch)
9700 (uri (git-reference
9701 (url home-page)
9702 (commit version)))
9703 (file-name (git-file-name name version))
9704 (sha256
9705 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
9706 (patches (search-patches "python-msal-requests.patch"))))
9707 (build-system pyproject-build-system)
9708 (arguments
9709 (list
9710 #:test-flags
9711 #~(list
9712 "--ignore=tests/test_benchmark.py"
9713 ;; XXX: Ignoring cryptography version scheme tests.
9714 "-k"
9715 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
9716 ;; XXX: These tests try to access the network.
9717 "--ignore=tests/test_application.py"
9718 "--ignore=tests/test_ccs.py"
9719 ;; XXX: These tests assume they are run on Windows.
9720 "--ignore=tests/test_mi.py")
9721 #:phases
9722 #~(modify-phases %standard-phases
9723 (add-after 'unpack 'set-cryptography-version
9724 (lambda _
9725 (substitute* "tests/test_cryptography.py"
9726 (("^latest_cryptography_version = @version@")
9727 (format #f "latest_cryptography_version = ~s"
9728 #$(package-version
9729 (this-package-input "python-cryptography")))))))
9730 (add-before 'check 'configure-tests
9731 (lambda* (#:key tests? #:allow-other-keys)
9732 (when tests?
9733 (setenv "TRAVIS_TAG" "1")))))))
9734 (native-inputs
9735 (list nss-certs-for-test python-mock python-pytest python-setuptools))
9736 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
9737 (synopsis "Microsoft Authentication Library (MSAL) for Python")
9738 (description
9739 "The Microsoft Authentication Library for Python enables applications to
9740integrate with the Microsoft identity platform. It allows you to sign in
9741users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
9742Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
9743Microsoft Graph or your own APIs registered with the Microsoft identity
9744platform. It is built using industry standard OAuth2 and OpenID Connect
9745protocols.")
9746 (license license:expat)))
9747
9748(define-public python-oauthlib
9749 (package
9750 (name "python-oauthlib")
9751 (version "3.3.1")
9752 (source
9753 (origin
9754 (method git-fetch)
9755 (uri (git-reference
9756 (url "https://github.com/oauthlib/oauthlib")
9757 (commit (string-append "v" version))))
9758 (file-name (git-file-name name version))
9759 (sha256
9760 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
9761 (build-system pyproject-build-system)
9762 (native-inputs (list python-pytest python-mock python-setuptools))
9763 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
9764 (home-page "https://github.com/oauthlib/oauthlib")
9765 (synopsis "OAuth implementation for Python")
9766 (description
9767 "Oauthlib is a generic, spec-compliant, thorough implementation of the
9768OAuth request-signing logic.")
9769 (license license:bsd-3)))
9770
9771(define-public python-urllib3
9772 (package
9773 (name "python-urllib3")
9774 (version "2.7.0")
9775 (source
9776 (origin
9777 (method url-fetch)
9778 (uri (pypi-uri "urllib3" version))
9779 (sha256
9780 (base32
9781 "0k2za0kdl4y8mdhay0wbnf6522n4ybr61gk7gik19srwnv1hw7i3"))))
9782 (build-system pyproject-build-system)
9783 (arguments `(#:tests? #f))
9784 (native-inputs
9785 (list python-hatch-vcs
9786 python-hatchling
9787 python-setuptools-scm))
9788 (propagated-inputs
9789 (append
9790 ;; These 5 inputs are used to build urrlib3[secure]
9791 (list python-certifi
9792 python-idna
9793 python-pysocks)
9794 (if (member (%current-system)
9795 (package-transitive-supported-systems python-cryptography))
9796 (list python-cryptography)
9797 '())
9798 (if (member (%current-system)
9799 (package-transitive-supported-systems python-pyopenssl))
9800 (list python-pyopenssl)
9801 '())))
9802 (home-page "https://urllib3.readthedocs.io/")
9803 (synopsis "HTTP library with thread-safe connection pooling")
9804 (description
9805 "Urllib3 supports features left out of urllib and urllib2 libraries. It
9806can reuse the same socket connection for multiple requests, it can POST files,
9807supports url redirection and retries, and also gzip and deflate decoding.")
9808 (license license:expat)))
9809
9810(define-public python-urllib3-1.26
9811 (package
9812 (inherit python-urllib3)
9813 (version "1.26.17")
9814 (source
9815 (origin
9816 (method url-fetch)
9817 (uri (pypi-uri "urllib3" version))
9818 (sha256
9819 (base32
9820 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
9821 (native-inputs
9822 (list python-setuptools
9823 python-wheel))))
9824
9825(define-public python-wsgiproxy2
9826 (package
9827 (name "python-wsgiproxy2")
9828 (version "0.5.1")
9829 (source
9830 (origin
9831 (method git-fetch)
9832 (uri (git-reference
9833 (url "https://github.com/gawel/WSGIProxy2/")
9834 (commit version)))
9835 (file-name (git-file-name name version))
9836 (sha256
9837 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
9838 (build-system pyproject-build-system)
9839 (arguments (list #:test-backend #~'unittest))
9840 (native-inputs (list python-webtest python-setuptools))
9841 (propagated-inputs (list python-requests python-six python-urllib3
9842 python-webob))
9843 (home-page "https://github.com/gawel/WSGIProxy2/")
9844 (synopsis "WSGI Proxy with various http client backends")
9845 (description
9846 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
9847function calls into HTTP requests. It also includes code to sign requests and
9848pass private data, and to spawn subprocesses to handle requests.")
9849 (license license:expat)))
9850
9851(define-public python-pastedeploy
9852 (package
9853 (name "python-pastedeploy")
9854 (version "3.1.0")
9855 (source
9856 (origin
9857 (method url-fetch)
9858 (uri (pypi-uri "PasteDeploy" version))
9859 (sha256
9860 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
9861 (build-system pyproject-build-system)
9862 (native-inputs (list python-pytest python-setuptools))
9863 (home-page "https://pylonsproject.org/")
9864 (synopsis "Load, configure, and compose WSGI applications and servers")
9865 (description
9866 "This tool provides code to load WSGI applications and servers from URIs;
9867these URIs can refer to Python Eggs for INI-style configuration files. Paste
9868Script provides commands to serve applications based on this configuration
9869file.")
9870 (license license:expat)))
9871
9872(define-public python-webtest
9873 (package
9874 (name "python-webtest")
9875 (version "3.0.6")
9876 (source
9877 (origin
9878 (method url-fetch)
9879 (uri (pypi-uri "webtest" version))
9880 (sha256
9881 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
9882 (build-system pyproject-build-system)
9883 (arguments
9884 ;; Tests require python-pyquery, which creates a circular dependency.
9885 `(#:tests? #f))
9886 (native-inputs
9887 (list python-setuptools))
9888 (propagated-inputs
9889 (list python-beautifulsoup4
9890 python-waitress
9891 python-webob))
9892 (home-page "https://docs.pylonsproject.org/projects/webtest/")
9893 (synopsis "Helper to test WSGI applications")
9894 (description
9895 "Webtest allows you to test your Python web applications without
9896starting an HTTP server. It supports anything that supports the minimum of
9897WSGI.")
9898 (license license:expat)))
9899
9900(define-public python-flask
9901 (package
9902 (name "python-flask")
9903 (version "3.1.3")
9904 (source
9905 (origin
9906 (method git-fetch)
9907 (uri (git-reference
9908 (url "https://github.com/pallets/flask")
9909 (commit version)))
9910 (file-name (git-file-name name version))
9911 (sha256
9912 (base32 "006s5rm4syg48ymmwlnrkx8f8j758waksvhdsfiqx51zv52c0p8l"))))
9913 (build-system pyproject-build-system)
9914 (arguments
9915 (list
9916 #:test-flags
9917 ;; assert 404 == 400
9918 ;; This test is removed on master branch.
9919 #~(list (string-append "--deselect=tests/test_reqctx.py"
9920 "::test_bad_environ_raises_bad_request"))))
9921 (native-inputs
9922 (list python-flit-core
9923 python-pytest))
9924 (propagated-inputs
9925 (list python-blinker
9926 python-click
9927 python-itsdangerous
9928 python-jinja2
9929 python-markupsafe
9930 python-werkzeug
9931 ;; [optional]
9932 python-asgiref
9933 python-dotenv))
9934 (home-page "https://palletsprojects.com/p/flask/")
9935 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
9936 (description "Flask is a micro web framework based on the Werkzeug toolkit
9937and Jinja2 template engine. It is called a micro framework because it does not
9938presume or force a developer to use a particular tool or library.")
9939 (license license:bsd-3)))
9940
9941(define-public python-flask-compress
9942 (package
9943 (name "python-flask-compress")
9944 (version "1.24")
9945 (source
9946 (origin
9947 (method git-fetch)
9948 (uri (git-reference
9949 (url "https://github.com/colour-science/flask-compress")
9950 (commit (string-append "v" version))))
9951 (file-name (git-file-name name version))
9952 (sha256
9953 (base32 "0mid5c34r75vax1r7l2l5sjjhs6bl8rbsdmhc7kz39snq6xw3cr5"))))
9954 (build-system pyproject-build-system)
9955 (native-inputs
9956 (list python-flask-caching
9957 python-pytest
9958 python-setuptools
9959 python-setuptools-scm))
9960 (propagated-inputs
9961 (list python-backports-zstd
9962 python-brotli
9963 python-flask))
9964 (home-page "https://github.com/colour-science/flask-compress")
9965 (synopsis "Compress responses in a Flask app")
9966 (description
9967 "This package lets you compress Flask application responses and static
9968files with gzip, deflate or brotli. Flask-Compress both adds the various
9969headers required for a compressed response and compresses the response data.")
9970 (license license:expat)))
9971
9972(define-public python-flask-seasurf
9973 (package
9974 (name "python-flask-seasurf")
9975 (version "2.0.0")
9976 (source (origin
9977 (method url-fetch)
9978 (uri (pypi-uri "Flask-SeaSurf" version))
9979 (sha256
9980 (base32
9981 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
9982 (build-system pyproject-build-system)
9983 (arguments
9984 (list #:tests? #false)) ;there are none
9985 (propagated-inputs (list python-flask))
9986 (native-inputs (list python-setuptools python-wheel))
9987 (home-page "https://github.com/maxcountryman/flask-seasurf/")
9988 (synopsis "CSRF extension for Flask")
9989 (description "SeaSurf is a Flask extension for preventing cross-site
9990request forgery (CSRF). CSRF attacks are problematic because the mechanism
9991they use is relatively easy to exploit. This extension attempts to aid you in
9992securing your application from such attacks. This extension is based on the
9993Django middleware.")
9994 (license license:bsd-3)))
9995
9996(define-public python-flask-wtf
9997 (package
9998 (name "python-flask-wtf")
9999 (version "1.2.2")
10000 (source
10001 (origin
10002 (method url-fetch)
10003 (uri (pypi-uri "Flask-WTF" version))
10004 (sha256
10005 (base32
10006 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
10007 (build-system pyproject-build-system)
10008 (propagated-inputs
10009 (list python-flask python-flask python-itsdangerous python-wtforms))
10010 (native-inputs
10011 (list python-hatchling python-pytest))
10012 (home-page "https://github.com/lepture/flask-wtf")
10013 (synopsis "Simple integration of Flask and WTForms")
10014 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
10015upload, and reCAPTCHA.")
10016 (license license:bsd-3)))
10017
10018(define-public python-flask-multistatic
10019 (package
10020 (name "python-flask-multistatic")
10021 (version "1.0")
10022 (source
10023 (origin
10024 (method url-fetch)
10025 (uri (pypi-uri "flask-multistatic" version))
10026 (sha256
10027 (base32
10028 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
10029 (build-system pyproject-build-system)
10030 (arguments (list #:tests? #f)) ; No tests upstream.
10031 (native-inputs (list python-setuptools))
10032 (propagated-inputs (list python-flask))
10033 (home-page "https://pagure.io/flask-multistatic")
10034 (synopsis "Flask plugin to allow overriding static files")
10035 (description "@code{flask-multistatic} is a flask plugin that adds support
10036for overriding static files.")
10037 (license license:gpl3+)))
10038
10039(define-public python-responses
10040 (package
10041 (name "python-responses")
10042 (version "0.25.3")
10043 (source (origin
10044 (method url-fetch)
10045 (uri (pypi-uri "responses" version))
10046 (sha256
10047 (base32
10048 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
10049 (build-system pyproject-build-system)
10050 (native-inputs
10051 (list python-pytest
10052 python-pytest-asyncio
10053 python-pytest-httpserver
10054 python-setuptools
10055 python-tomli
10056 python-tomli-w
10057 python-wheel))
10058 (propagated-inputs
10059 (list python-requests
10060 python-pyyaml
10061 python-urllib3))
10062 (home-page "https://github.com/getsentry/responses")
10063 (synopsis "Utility for mocking out the `requests` Python library")
10064 (description "A utility library for mocking out the `requests` Python
10065library.")
10066 (license license:asl2.0)))
10067
10068(define-public python-grequests
10069 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
10070 (revision "0"))
10071 (package
10072 (name "python-grequests")
10073 (version (git-version "0.7.0" revision commit))
10074 (source
10075 (origin
10076 (method git-fetch)
10077 (uri (git-reference
10078 (url "https://github.com/kennethreitz/grequests")
10079 (commit commit)))
10080 (file-name (git-file-name name version))
10081 (sha256
10082 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
10083 (build-system pyproject-build-system)
10084 (arguments
10085 (list
10086 ;; XXX: Most failing tests seem to be caused by network access,
10087 ;; but there is no easy/flag way to disable tests selectively.
10088 #:tests? #f
10089 #:test-backend #~'unittest
10090 #:test-flags #~(list "tests.py")))
10091 (propagated-inputs (list python-gevent python-requests))
10092 (native-inputs (list python-setuptools))
10093 (home-page "https://github.com/kennethreitz/grequests")
10094 (synopsis "Python library for asynchronous HTTP requests")
10095 (description
10096 "GRequests is a Python library that allows you to use @code{Requests}
10097with @code{Gevent} to make asynchronous HTTP Requests easily.")
10098 (license license:bsd-2))))
10099
10100(define-public python-gwebsockets
10101 (package
10102 (name "python-gwebsockets")
10103 (version "0.7")
10104 (source
10105 (origin
10106 (method git-fetch)
10107 (uri (git-reference
10108 (url "https://github.com/sugarlabs/gwebsockets")
10109 (commit (string-append "v" version))))
10110 (file-name (git-file-name name version))
10111 (sha256
10112 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
10113 (build-system pyproject-build-system)
10114 (arguments (list #:tests? #f)) ; No tests upstream.
10115 (native-inputs (list python-setuptools))
10116 (propagated-inputs (list python-pygobject))
10117 (home-page "https://github.com/sugarlabs/gwebsockets")
10118 (synopsis "GLib based websockets server")
10119 (description
10120 "This package provides a websocket server written in Python. It uses GIO
10121for network communication and hence it easily integrates with the GLib
10122mainloop.")
10123 (license license:asl2.0)))
10124
10125(define-public python-geventhttpclient
10126 (package
10127 (name "python-geventhttpclient")
10128 (version "2.3.9")
10129 (source (origin
10130 (method git-fetch)
10131 (uri (git-reference
10132 (url "https://github.com/geventhttpclient/geventhttpclient")
10133 (commit version)
10134 (recursive? #true)))
10135 (file-name (git-file-name name version))
10136 (sha256
10137 (base32
10138 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
10139 (build-system pyproject-build-system)
10140 (arguments
10141 (list
10142 #:test-flags
10143 ;; Disable network tests.
10144 '(list "-k"
10145 (string-append "not test_client_simple"
10146 " and not test_client_ssl"
10147 " and not test_client_with_default_headers"
10148 " and not test_client_without_leading_slash"
10149 " and not test_download"
10150 " and not test_fail_invalid_ca_certificate"
10151 " and not test_httpbin_multipart"
10152 " and not test_multi_queries_greenlet_safe"
10153 " and not test_no_form_encode_header"
10154 " and not test_no_form_encoded_header"
10155 " and not test_request_with_headers"
10156 " and not test_response_context_manager"
10157 " and not test_urllib_request"))))
10158 (native-inputs (list nss-certs-for-test
10159 python-dpkt python-pytest python-requests
10160 python-setuptools python-wheel))
10161 (propagated-inputs (list python-brotli python-certifi python-gevent
10162 python-urllib3))
10163 (home-page "https://github.com/geventhttpclient/geventhttpclient")
10164 (synopsis "HTTP client library for gevent")
10165 (description "@code{python-geventhttpclient} is a high performance,
10166concurrent HTTP client library for python using @code{gevent}.")
10167 (license license:expat)))
10168
10169(define-public python-gevent-websocket
10170 (package
10171 (name "python-gevent-websocket")
10172 (version "0.10.1")
10173 (source
10174 (origin
10175 (method url-fetch)
10176 (uri (pypi-uri "gevent-websocket" version))
10177 (sha256
10178 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
10179 (build-system pyproject-build-system)
10180 (arguments
10181 (list #:tests? #f)) ; no tests in PyPI or git
10182 (native-inputs
10183 (list python-setuptools
10184 python-wheel))
10185 (propagated-inputs
10186 (list python-gevent))
10187 (home-page "https://gitlab.com/noppo/gevent-websocket")
10188 (synopsis "Websocket handler for the gevent pywsgi server")
10189 (description
10190 "Websocket handler for the gevent pywsgi server, a Python network
10191library.
10192
10193Features include:
10194@itemize
10195@item integration on both socket level or using an abstract interface
10196@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
10197Protocol, WAMP}
10198@item easily extendible using a simple WebSocket protocol plugin API
10199@end itemize")
10200 (license license:asl2.0)))
10201
10202(define-public python-requests-oauthlib
10203 (package
10204 (name "python-requests-oauthlib")
10205 (version "2.0.0")
10206 (source
10207 (origin
10208 (method git-fetch)
10209 (uri (git-reference (url
10210 "https://github.com/requests/requests-oauthlib")
10211 (commit (string-append "v" version))))
10212 (file-name (git-file-name name version))
10213 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
10214 (build-system pyproject-build-system)
10215 (arguments
10216 (list
10217 #:test-flags
10218 #~(list
10219 "--ignore=tests/test_core.py" ; requires network access.
10220 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
10221 "-k" "not test_fetch_access_token"))) ; flaky tests.
10222 (native-inputs
10223 (list python-requests-mock python-pytest python-setuptools))
10224 (propagated-inputs
10225 (list python-oauthlib python-requests))
10226 (home-page "https://github.com/requests/requests-oauthlib")
10227 (synopsis "OAuthlib authentication support for Requests")
10228 (description
10229 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
10230provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
10231 (license license:isc)))
10232
10233(define-public python-s3fs
10234 (package
10235 (name "python-s3fs")
10236 (version "2026.1.0")
10237 (source
10238 (origin
10239 (method url-fetch)
10240 (uri (pypi-uri "s3fs" version))
10241 (sha256
10242 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
10243 (build-system pyproject-build-system)
10244 ;; TODO: Many tests fail with "No such file or directory" raised by the
10245 ;; HTTP client.
10246 (arguments (list #:tests? #false))
10247 (native-inputs
10248 (list python-setuptools))
10249 (propagated-inputs
10250 (list python-aiobotocore
10251 python-aiohttp
10252 python-fsspec))
10253 (home-page "https://github.com/fsspec/s3fs/")
10254 (synopsis "Convenient filesystem interface over S3")
10255 (description "This package provides a convenient filesystem interface over
10256S3.")
10257 (license license:bsd-3)))
10258
10259(define-public python-s3transfer
10260 (package
10261 (name "python-s3transfer")
10262 (version "0.16.0")
10263 (source
10264 (origin
10265 (method url-fetch)
10266 (uri (pypi-uri "s3transfer" version))
10267 (sha256
10268 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
10269 (build-system pyproject-build-system)
10270 (arguments
10271 (list
10272 ;; tests: 630 passed, 51 skipped
10273 #:test-flags
10274 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
10275 ;; Tests require networking.
10276 "--ignore" "tests/integration")))
10277 (native-inputs
10278 (list python-pytest
10279 python-pytest-xdist
10280 python-setuptools))
10281 (propagated-inputs
10282 (list python-botocore))
10283 (home-page "https://github.com/boto/s3transfer")
10284 (synopsis "Amazon S3 Transfer Manager")
10285 (description
10286 "S3transfer is a Python library for managing Amazon S3 transfers.")
10287 (license license:asl2.0)))
10288
10289(define-public python-flask-restful
10290 (package
10291 (name "python-flask-restful")
10292 (version "0.3.10")
10293 (source
10294 (origin
10295 (method url-fetch)
10296 (uri (pypi-uri "Flask-RESTful" version))
10297 (sha256
10298 (base32
10299 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
10300 (build-system pyproject-build-system)
10301 (arguments
10302 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
10303 (list #:tests? #f))
10304 (propagated-inputs
10305 (list python-aniso8601 python-flask python-pytz))
10306 (native-inputs
10307 (list python-blinker
10308 python-mock
10309 python-pytest
10310 python-setuptools
10311 python-six))
10312 (home-page "https://github.com/flask-restful/flask-restful/")
10313 (synopsis "Flask module for creating REST APIs")
10314 (description
10315 "This package contains a Flask module for creating REST APIs.")
10316 (license license:bsd-3)))
10317
10318(define-public python-flask-sqlalchemy
10319 (package
10320 (name "python-flask-sqlalchemy")
10321 ;; Released version fails tests in Python 3.12.
10322 (properties '((commit . "168cb4b7b50fe5176307a10d873781bfafc6eeda")
10323 (revision . "0")))
10324 (version (git-version "3.1.1"
10325 (assoc-ref properties 'revision)
10326 (assoc-ref properties 'commit)))
10327 (source
10328 (origin
10329 (method git-fetch)
10330 (uri (git-reference
10331 (url "https://github.com/pallets-eco/flask-sqlalchemy")
10332 (commit (assoc-ref properties 'commit))))
10333 (file-name (git-file-name name version))
10334 (sha256
10335 (base32
10336 "0xw8v1540m21x9crpgb0i3rxyhh1d24ldg354vndw9cif74ls5p6"))))
10337 (build-system pyproject-build-system)
10338 (arguments
10339 (list
10340 #:test-flags
10341 #~(list "-k" (string-append "not test_explicit_table[db2]"
10342 " and not test_explicit_table[db4]")
10343 "-W" "ignore::DeprecationWarning")))
10344 (native-inputs
10345 (list python-flit-core
10346 python-pytest))
10347 (propagated-inputs
10348 (list python-flask
10349 python-sqlalchemy-2))
10350 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
10351 (synopsis "Module adding SQLAlchemy support to your Flask application")
10352 (description
10353 "This package adds SQLAlchemy support to your Flask application.")
10354 (license license:bsd-3)))
10355
10356(define-public python-flask-restful-swagger
10357 (package
10358 (name "python-flask-restful-swagger")
10359 (version "0.20.1")
10360 ;; XXX: Unbundle minified javascript.
10361 (source
10362 (origin
10363 (method git-fetch)
10364 (uri (git-reference
10365 (url "https://github.com/rantav/flask-restful-swagger")
10366 (commit version)))
10367 (file-name (git-file-name name version))
10368 (sha256
10369 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
10370 (build-system pyproject-build-system)
10371 (arguments (list #:tests? #f)) ; No tests.
10372 (native-inputs (list python-setuptools))
10373 (propagated-inputs (list python-flask-restful python-six))
10374 (home-page "https://github.com/rantav/flask-restful-swagger")
10375 (synopsis "Extract Swagger specs from Flask-Restful projects")
10376 (description "This package lets you extract Swagger API documentation
10377specs from your Flask-Restful projects.")
10378 (license license:expat)))
10379
10380(define-public python-htmlmin
10381 (package
10382 (name "python-htmlmin")
10383 (version "0.1.12")
10384 (source
10385 (origin
10386 (method url-fetch)
10387 (uri (pypi-uri "htmlmin" version))
10388 (sha256
10389 (base32
10390 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
10391 (build-system pyproject-build-system)
10392 (arguments
10393 (list #:tests? #f)) ; no tests
10394 (native-inputs (list python-setuptools))
10395 (home-page "https://htmlmin.readthedocs.org/en/latest/")
10396 (synopsis "HTML minifier")
10397 (description "@code{htmlmin} is an HTML minifier that just works.
10398It comes with safe defaults and easily configurable options.")
10399 (license license:bsd-3)))
10400
10401;; XXX: Forked renamed and updated version.
10402(define-public python-htmlmin2
10403 (package/inherit python-htmlmin
10404 (name "python-htmlmin2")
10405 (version "0.1.13")
10406 (source
10407 (origin
10408 (method git-fetch)
10409 (uri (git-reference
10410 (url "https://github.com/wilhelmer/htmlmin")
10411 (commit (string-append "v" version))))
10412 (file-name (git-file-name name version))
10413 (sha256
10414 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
10415 (build-system pyproject-build-system)
10416 (arguments (list #:test-backend #~'unittest))
10417 (native-inputs (list python-setuptools))
10418 (home-page "https://github.com/wilhelmer/htmlmin")
10419 (description
10420 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
10421defaults and easily configurable options. This variant is an updated fork of
10422the original @code{python-htmlmin}.")
10423 (license license:bsd-3)))
10424
10425(define-public python-flask-htmlmin
10426 (package
10427 (name "python-flask-htmlmin")
10428 (version "3.0.0")
10429 (source
10430 (origin
10431 (method git-fetch)
10432 (uri (git-reference
10433 (url "https://github.com/hamidfzm/Flask-HTMLmin")
10434 (commit (string-append "v" version))))
10435 (file-name (git-file-name name version))
10436 (sha256
10437 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
10438 (build-system pyproject-build-system)
10439 (native-inputs (list python-pytest python-setuptools))
10440 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
10441 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
10442 (synopsis "HTML response minifier for Flask")
10443 (description
10444 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
10445 (license license:bsd-3)))
10446
10447(define-public python-jsmin
10448 (package
10449 (name "python-jsmin")
10450 (version "3.0.1")
10451 (source
10452 (origin
10453 (method url-fetch)
10454 (uri (pypi-uri "jsmin" version))
10455 (sha256
10456 (base32
10457 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
10458 (build-system pyproject-build-system)
10459 (arguments (list #:test-backend #~'unittest))
10460 (native-inputs
10461 (list python-setuptools))
10462 (home-page "https://github.com/tikitu/jsmin/")
10463 (synopsis "Python JavaScript minifier")
10464 (description
10465 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
10466on the command line.")
10467 (license license:expat)))
10468
10469(define-public python-flask-login
10470 (let ((commit "c8bba84b9ba6768e878317fc46c54bd13fa1ac07")
10471 (revision "0"))
10472 (package
10473 (name "python-flask-login")
10474 (version (git-version "0.6.3" revision commit))
10475 (source
10476 (origin
10477 (method git-fetch)
10478 (uri (git-reference
10479 (url "https://github.com/maxcountryman/flask-login")
10480 (commit commit)))
10481 (file-name (git-file-name name version))
10482 (sha256
10483 (base32 "0q0ga1zwm06kvpnsf50ckmsc77959i1spx7z2y3jkbwaa4klsyli"))))
10484 (build-system pyproject-build-system)
10485 (propagated-inputs
10486 (list python-flask))
10487 (native-inputs
10488 ;; For tests.
10489 (list python-blinker
10490 python-flit-core
10491 python-mock
10492 python-pytest
10493 python-semantic-version
10494 python-werkzeug))
10495 (home-page "https://github.com/maxcountryman/flask-login")
10496 (synopsis "User session management for Flask")
10497 (description
10498 "@code{Flask-Login} provides user session management for Flask. It
10499handles the common tasks of logging in, logging out, and remembering your
10500users' sessions over extended periods of time.")
10501 (license license:expat))))
10502
10503(define-public python-oauth2client
10504 (package
10505 (name "python-oauth2client")
10506 (version "4.1.3")
10507 (source
10508 (origin
10509 (method git-fetch)
10510 (uri (git-reference
10511 (url "https://github.com/google/oauth2client/")
10512 (commit (string-append "v" version))))
10513 (file-name (git-file-name name version))
10514 (sha256
10515 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
10516 (build-system pyproject-build-system)
10517 (arguments
10518 (list #:tests? #f))
10519 (native-inputs
10520 (list python-setuptools))
10521 (propagated-inputs
10522 (list python-httplib2
10523 python-pyasn1
10524 python-pyasn1-modules
10525 python-pyparsing
10526 python-rsa
10527 python-six))
10528 (home-page "https://github.com/google/oauth2client/")
10529 (synopsis "OAuth 2.0 client library")
10530 (description "@code{python-oauth2client} provides an OAuth 2.0 client
10531library for Python")
10532 (license license:asl2.0)))
10533
10534(define-public python-flask-oidc
10535 ;; XXX: Project is unmaintained since 2022, see:
10536 ;; <https://github.com/puiterwijk/flask-oidc/issues/146>.
10537 (package
10538 (name "python-flask-oidc")
10539 (version "2.4.0")
10540 (source
10541 (origin
10542 (method url-fetch)
10543 (uri (pypi-uri "flask_oidc" version))
10544 (sha256
10545 (base32
10546 "0lr15s5y61qkgic54pln1j82l2c32wgscdj8hymwr44gxby7h8z7"))))
10547 (build-system pyproject-build-system)
10548 (arguments
10549 (list
10550 #:test-flags
10551 #~(list (string-append "--deselect=tests/test_flask_oidc.py"
10552 "::test_accept_token_no_token"))))
10553 (propagated-inputs
10554 (list python-authlib
10555 python-blinker
10556 python-flask
10557 python-requests
10558 python-responses))
10559 (native-inputs
10560 (list python-pytest python-poetry-core))
10561 (home-page "https://github.com/puiterwijk/flask-oidc")
10562 (synopsis "OpenID Connect extension for Flask")
10563 (description "@code{python-flask-oidc} provides an OpenID Connect extension
10564for Flask.")
10565 (license license:bsd-2)))
10566
10567(define-public python-webassets
10568 (package
10569 (name "python-webassets")
10570 (version "3.0.0")
10571 (source
10572 (origin
10573 (method git-fetch)
10574 (uri (git-reference
10575 (url "https://github.com/miracle2k/webassets")
10576 (commit version)))
10577 (file-name (git-file-name name version))
10578 (sha256
10579 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
10580 (build-system pyproject-build-system)
10581 (propagated-inputs (list python-pyyaml python-zope-dottedname))
10582 (native-inputs (list python-hatchling python-pytest))
10583 (home-page "https://github.com/miracle2k/webassets")
10584 (synopsis "Media asset management")
10585 (description
10586 "This package provides utilities to merge, minify and compress Javascript
10587and CSS files,supporting a variety of different filters, including YUI, jsmin,
10588jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
10589 (license license:bsd-2)))
10590
10591(define-public python-flask-migrate
10592 (package
10593 (name "python-flask-migrate")
10594 (version "4.1.0")
10595 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
10596 (source (origin
10597 (method git-fetch)
10598 (uri (git-reference (url home-page)
10599 (commit (string-append "v" version))))
10600 (file-name (git-file-name name version))
10601 (sha256
10602 (base32
10603 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
10604 (build-system pyproject-build-system)
10605 (propagated-inputs
10606 (list python-flask python-alembic python-flask-sqlalchemy))
10607 (native-inputs
10608 (list python-pytest python-setuptools python-wheel))
10609 (synopsis "SQLAlchemy database migrations for Flask programs using
10610Alembic")
10611 (description "This package contains SQLAlchemy database migration tools
10612for Flask programs that are using @code{python-alembic}.")
10613 (license license:expat)))
10614
10615(define-public python-genshi
10616 (package
10617 (name "python-genshi")
10618 (version "0.7.10")
10619 (source
10620 (origin
10621 (method git-fetch)
10622 (uri (git-reference
10623 (url "https://github.com/edgewall/genshi")
10624 (commit version)))
10625 (file-name (git-file-name name version))
10626 (sha256
10627 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
10628 (build-system pyproject-build-system)
10629 (arguments (list #:test-backend #~'unittest))
10630 (native-inputs (list python-setuptools))
10631 (propagated-inputs (list python-six))
10632 (home-page "https://genshi.edgewall.org/")
10633 (synopsis "Toolkit for generation of output for the web")
10634 (description "Genshi is a Python library that provides an integrated set
10635of components for parsing, generating, and processing HTML, XML or other
10636textual content for output generation on the web.")
10637 (license license:bsd-3)))
10638
10639(define-public python-flask-principal
10640 (package
10641 (name "python-flask-principal")
10642 (version "0.4.0")
10643 (source
10644 (origin
10645 (method git-fetch)
10646 (uri (git-reference
10647 (url "https://github.com/pallets-eco/flask-principal")
10648 (commit version)))
10649 (file-name (git-file-name name version))
10650 (sha256
10651 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
10652 (build-system pyproject-build-system)
10653 (propagated-inputs (list python-blinker))
10654 (native-inputs (list python-flask python-pynose python-setuptools))
10655 (home-page "https://github.com/pallets-eco/flask-principal")
10656 (synopsis "Identity management for Flask")
10657 (description
10658 "@code{flask_principal} is a identity management library for Flask. It
10659supports managing both authentication and authorization data in a thread-local
10660variable.")
10661 (license license:expat)))
10662
10663(define-public python-flask-httpauth
10664 (package
10665 (name "python-flask-httpauth")
10666 (version "4.8.0")
10667 (source
10668 (origin
10669 (method url-fetch)
10670 (uri (pypi-uri "Flask-HTTPAuth" version))
10671 (sha256
10672 (base32
10673 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
10674 (build-system pyproject-build-system)
10675 (propagated-inputs (list python-flask))
10676 (native-inputs
10677 (list nss-certs-for-test
10678 python-pytest
10679 python-setuptools
10680 python-wheel))
10681 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
10682 (synopsis "Basic and Digest HTTP authentication for Flask routes")
10683 (description "@code{flask_httpauth} provides Basic and Digest HTTP
10684authentication for Flask routes.")
10685 (license license:expat)))
10686
10687(define-public python-uritemplate
10688 (package
10689 (name "python-uritemplate")
10690 (version "4.2.0")
10691 (source
10692 (origin
10693 (method url-fetch)
10694 (uri (pypi-uri "uritemplate" version))
10695 (sha256
10696 (base32
10697 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
10698 (build-system pyproject-build-system)
10699 (native-inputs (list python-pytest python-setuptools))
10700 (home-page "https://uritemplate.readthedocs.io/")
10701 (synopsis "Library to deal with URI Templates")
10702 (description "@code{uritemplate} provides Python library to deal with URI
10703Templates.")
10704 ;; The software is made available under the terms of *either* of the
10705 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
10706 ;; are made under *both* licenses (excerpt from the LICENSE file).
10707 (license (list license:bsd-2 license:asl2.0))))
10708
10709(define-public python-uritemplate-3
10710 (package
10711 (inherit python-uritemplate)
10712 (name "python-uritemplate")
10713 (version "3.0.1")
10714 (source (origin
10715 (method url-fetch)
10716 (uri (pypi-uri "uritemplate" version))
10717 (sha256
10718 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
10719
10720(define-public python-publicsuffix2
10721 (package
10722 (name "python-publicsuffix2")
10723 (version "2.2019-12-21")
10724 (source
10725 (origin
10726 (method git-fetch)
10727 (uri (git-reference
10728 (url "https://github.com/pombredanne/python-publicsuffix2")
10729 (commit (string-append "release-" version))))
10730 (file-name (git-file-name name version))
10731 (sha256
10732 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
10733 (build-system pyproject-build-system)
10734 (arguments
10735 (list
10736 #:tests? #f ;the test suite requires network access
10737 #:phases
10738 #~(modify-phases %standard-phases
10739 (add-after 'unpack 'ignore-maintainer-inputs
10740 (lambda _
10741 ;; Comment out a demand for python-requests, which is used only by
10742 ;; the unused ‘update_psl’ helper command.
10743 (substitute* "setup.py"
10744 (("'requests " match)
10745 (format #f "# ~a" match))))))))
10746 (native-inputs (list python-setuptools))
10747 (home-page "https://github.com/pombredanne/python-publicsuffix2")
10748 (synopsis
10749 "Get a public suffix for a domain name using the Public Suffix List")
10750 (description
10751 "Get a public suffix for a domain name using the Public Suffix List.
10752Forked from and using the same API as the publicsuffix package.")
10753 (license (list license:expat license:mpl2.0))))
10754
10755(define-public python-werkzeug
10756 (package
10757 (name "python-werkzeug")
10758 (version "3.1.8")
10759 (source
10760 (origin
10761 (method git-fetch)
10762 (uri (git-reference
10763 (url "https://github.com/pallets/werkzeug")
10764 (commit version)))
10765 (file-name (git-file-name name version))
10766 (sha256
10767 (base32 "1jwrrjv50n5rcfzax4qf0237znkcpcafd17hx0r77f997yv3ghlv"))))
10768 (build-system pyproject-build-system)
10769 (arguments
10770 (list
10771 #:test-flags
10772 #~(list "-m" "not dev_server")))
10773 (native-inputs
10774 (list python-ephemeral-port-reserve
10775 python-flit-core
10776 python-pytest
10777 python-pytest-timeout
10778 python-watchdog))
10779 (propagated-inputs
10780 (list python-markupsafe))
10781 (home-page "https://palletsprojects.com/p/werkzeug/")
10782 (synopsis "Utilities for WSGI applications")
10783 (description "One of the most advanced WSGI utility modules. It includes a
10784powerful debugger, full-featured request and response objects, HTTP utilities to
10785handle entity tags, cache control headers, HTTP dates, cookie handling, file
10786uploads, a powerful URL routing system and a bunch of community-contributed
10787addon modules.")
10788 (license license:x11)))
10789
10790(define-public python-werkzeug-1.0
10791 (package
10792 (inherit python-werkzeug)
10793 (version "1.0.1")
10794 (source (origin
10795 (method url-fetch)
10796 (uri (pypi-uri "Werkzeug" version))
10797 (sha256
10798 (base32
10799 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
10800 (patches (search-patches "python-werkzeug-tests.patch"))))
10801 (arguments
10802 (list
10803 #:phases
10804 '(modify-phases %standard-phases
10805 (add-after 'unpack 'ignore-warnings
10806 (lambda _
10807 (substitute* "setup.cfg"
10808 ((" error.*") "")))))))
10809 (propagated-inputs
10810 (list python-requests))
10811 (native-inputs
10812 (list python-pytest python-pytest-timeout python-setuptools
10813 python-wheel))))
10814
10815(define-public python-wtforms
10816 (package
10817 (name "python-wtforms")
10818 (version "3.2.2")
10819 (source
10820 (origin
10821 (method url-fetch)
10822 (uri (pypi-uri "wtforms" version))
10823 (sha256
10824 (base32 "14qbayp2gfmahaqn5migwyz2h1cq3gcdr4q2vd75vwvhhqzwf03v"))))
10825 (build-system pyproject-build-system)
10826 (native-inputs
10827 (list python-babel
10828 python-email-validator
10829 python-hatchling
10830 python-pytest
10831 python-setuptools))
10832 (propagated-inputs (list python-markupsafe))
10833 (home-page "https://wtforms.readthedocs.io/")
10834 (synopsis
10835 "Form validation and rendering library for Python web development")
10836 (description
10837 "WTForms is a flexible forms validation and rendering library
10838for Python web development. It is very similar to the web form API
10839available in Django, but is a standalone package.")
10840 (license license:bsd-3)))
10841
10842(define-public python-wtforms-sqlalchemy
10843 (package
10844 (name "python-wtforms-sqlalchemy")
10845 (version "0.4.1")
10846 (source
10847 (origin
10848 (method url-fetch)
10849 (uri (pypi-uri "WTForms-SQLAlchemy" version))
10850 (sha256
10851 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
10852 (build-system pyproject-build-system)
10853 (native-inputs (list python-pytest python-setuptools python-wheel))
10854 (propagated-inputs (list python-sqlalchemy python-wtforms))
10855 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
10856 (synopsis "SQLAlchemy tools for WTForms")
10857 (description
10858 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
10859package from WTForms. The package has been renamed to
10860@code{wtforms_sqlalchemy} but otherwise should function the same as
10861@code{wtforms.ext.sqlalchemy} did.")
10862 (license license:bsd-3)))
10863
10864(define-public python-urlgrabber
10865 (package
10866 (name "python-urlgrabber")
10867 (version "4.1.0")
10868 (source
10869 (origin
10870 (method url-fetch)
10871 (uri (pypi-uri "urlgrabber" version))
10872 (sha256
10873 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
10874 (build-system pyproject-build-system)
10875 (arguments
10876 (list
10877 #:tests? #f ; Most tests require network access.
10878 #:phases
10879 #~(modify-phases %standard-phases
10880 (replace 'check
10881 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
10882 (when tests?
10883 (invoke "python" "test/runtests.py")))))))
10884 (native-inputs (list python-setuptools))
10885 (propagated-inputs
10886 (list python-pycurl python-setuptools python-six))
10887 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
10888 (synopsis "High-level cross protocol url-grabber")
10889 (description
10890 "@code{urlgrabber} is a library that unifies access to files available on
10891the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
10892supports features like HTTP keep-alive, reget, throttling and more.")
10893 (license license:lgpl2.1+)))
10894
10895(define-public python-pycares
10896 (package
10897 (name "python-pycares")
10898 (version "4.11.0")
10899 (source
10900 (origin
10901 (method git-fetch)
10902 (uri (git-reference
10903 (url "https://github.com/saghul/pycares")
10904 (commit (string-append "v" version))))
10905 (file-name (git-file-name name version))
10906 (sha256
10907 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
10908 (snippet #~(begin
10909 (rmdir "deps/c-ares")))))
10910 (build-system pyproject-build-system)
10911 (arguments
10912 (list
10913 ;; XXX: Half of the tests require internet access
10914 ;; There is currently no markers to avoid running them.
10915 #:tests? #f
10916 #:phases
10917 #~(modify-phases %standard-phases
10918 (add-after 'unpack 'configure-system-lib
10919 (lambda _
10920 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
10921 (native-inputs (list python-pytest python-setuptools))
10922 (inputs (list c-ares))
10923 (propagated-inputs (list python-cffi))
10924 (home-page "https://github.com/saghul/pycares")
10925 (synopsis "Python interface for @code{c-ares}")
10926 (description
10927 "@code{pycares} is a Python module which provides an interface to
10928@code{c-ares}, a C library that performs DNS requests and name resolutions
10929asynchronously.")
10930 (license license:expat)))
10931
10932(define-public python-yarl
10933 (package
10934 (name "python-yarl")
10935 (version "1.18.3")
10936 (source
10937 (origin
10938 (method url-fetch)
10939 (uri (pypi-uri "yarl" version))
10940 (sha256
10941 (base32
10942 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
10943 (build-system pyproject-build-system)
10944 (arguments
10945 (list
10946 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
10947 #:phases
10948 '(modify-phases %standard-phases
10949 (add-after 'unpack 'avoid-pytest-cov-preload
10950 (lambda _
10951 (substitute* "pytest.ini"
10952 (("-p pytest_cov") ""))))
10953 (add-after 'unpack 'patch-build-system
10954 (lambda _
10955 ;; XXX: I don't know how to tell it to build the extensions in
10956 ;; place.
10957 (substitute* "packaging/pep517_backend/_backend.py"
10958 (("build_inplace=False") "build_inplace=True")))))))
10959 (native-inputs
10960 (list python-cython
10961 python-expandvars
10962 python-pytest
10963 python-pytest-xdist
10964 python-setuptools
10965 python-tomli))
10966 (propagated-inputs
10967 (list python-packaging python-idna python-multidict python-propcache))
10968 (home-page "https://github.com/aio-libs/yarl/")
10969 (synopsis "Yet another URL library")
10970 (description "@code{yarl} module provides handy @code{URL} class
10971for URL parsing and changing.")
10972 (license license:asl2.0)))
10973
10974(define-public python-google
10975 (package
10976 (name "python-google")
10977 (version "3.0.0")
10978 (source
10979 (origin
10980 (method url-fetch)
10981 (uri (pypi-uri "google" version))
10982 (sha256
10983 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
10984 (build-system pyproject-build-system)
10985 (arguments (list #:tests? #f)) ;There are no tests.
10986 (native-inputs (list python-setuptools))
10987 (propagated-inputs (list python-beautifulsoup4))
10988 (home-page "https://breakingcode.wordpress.com/")
10989 (synopsis "Python bindings to the Google search engine")
10990 (description
10991 "This package provides Python bindings for using the Google search
10992engine. Its module is called @code{googlesearch}.")
10993 (license license:bsd-3)))
10994
10995(define-public python-google-api-client
10996 (package
10997 (name "python-google-api-client")
10998 (version "2.198.0")
10999 (source
11000 (origin
11001 (method git-fetch)
11002 (uri (git-reference
11003 (url "https://github.com/google/google-api-python-client")
11004 (commit (string-append "v" version))))
11005 (file-name (git-file-name name version))
11006 (sha256
11007 (base32 "1adjr3ylp8bwbvywxm11hs4y913pvaga0dn6nwmb3622y62zxfhg"))))
11008 (build-system pyproject-build-system)
11009 (arguments
11010 (list
11011 #:test-flags
11012 #~(list
11013 "-k"
11014 (string-join
11015 (list
11016 ;; XXX: Deprecated behavior.
11017 "not test_client_options_universe_configured_with_mtls"
11018 "test_universe_env_var_configured_with_mtls"
11019 ;; XXX: Requires CA certificates.
11020 "test_credentials_and_credentials_file_mutually_exclusive")
11021 " and not ")
11022 "tests")))
11023 (native-inputs
11024 (list python-parameterized
11025 python-pytest
11026 python-setuptools))
11027 (propagated-inputs
11028 (list python-google-api-core
11029 python-google-auth
11030 python-google-auth-httplib2
11031 python-httplib2
11032 python-pyparsing
11033 python-uritemplate-3))
11034 (home-page "https://github.com/google/google-api-python-client")
11035 (synopsis "Core Python library for accessing Google APIs")
11036 (description "Python client library for Google's discovery based APIs")
11037 (license license:asl2.0)))
11038
11039(define-public python-google-auth-httplib2
11040 (package
11041 (name "python-google-auth-httplib2")
11042 (version "0.4.0")
11043 (source (origin
11044 (method url-fetch)
11045 (uri (pypi-uri "google_auth_httplib2" version))
11046 (sha256
11047 (base32 "0dgdzy2ps3z71dc2b4s1fhmyx094nq0sg75sagav995p0ji31c6m"))))
11048 (build-system pyproject-build-system)
11049 (propagated-inputs
11050 (list python-google-auth python-httplib2))
11051 (native-inputs
11052 (list python-pytest
11053 python-pyparsing
11054 python-pytest-localserver
11055 python-flask
11056 python-setuptools))
11057 (home-page "https://github.com/googleapis/google-cloud-python")
11058 (synopsis "Google Authentication Library: httplib2 transport")
11059 (description "This package provides a Google Authentication Library plugin
11060for httplib2 transport.")
11061 (license license:asl2.0)))
11062
11063(define-public python-google-auth-oauthlib
11064 (package
11065 (name "python-google-auth-oauthlib")
11066 (version "1.2.4")
11067 (home-page
11068 "https://github.com/GoogleCloudPlatform/\
11069google-auth-library-python-oauthlib")
11070 (source
11071 (origin
11072 (method git-fetch)
11073 (uri (git-reference
11074 (url home-page)
11075 (commit (string-append "v" version))))
11076 (file-name (git-file-name name version))
11077 (sha256
11078 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
11079 (build-system pyproject-build-system)
11080 (propagated-inputs (list python-google-auth python-requests-oauthlib))
11081 (native-inputs
11082 (list python-click python-mock python-pytest python-setuptools))
11083 (synopsis "Google Authentication Library: oauthlib")
11084 (description "This package provides a Google Authentication Library plugin
11085with oauthlib.")
11086 (license license:asl2.0)))
11087
11088(define-public whoogle-search
11089 (package
11090 (name "whoogle-search")
11091 (version "0.8.4")
11092 (source (origin
11093 (method url-fetch)
11094 (uri (pypi-uri "whoogle-search" version))
11095 (sha256
11096 (base32
11097 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
11098 (build-system pyproject-build-system)
11099 (arguments
11100 (list
11101 ;; The tests need network access
11102 #:tests? #f))
11103 (propagated-inputs
11104 (list python-beautifulsoup4
11105 python-brotli
11106 python-cryptography
11107 python-cssutils
11108 python-defusedxml
11109 python-flask
11110 python-dotenv
11111 python-requests
11112 python-stem
11113 python-validators
11114 python-waitress))
11115 (native-inputs (list python-setuptools python-wheel))
11116 (home-page "https://github.com/benbusby/whoogle-search")
11117 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
11118 (description
11119 "Get Google results, but without any ads, javascript, AMP links,
11120cookies, or IP address tracking. Quick and simple to implement as a primary
11121search engine replacement on both desktop and mobile.")
11122 (license license:expat)))
11123
11124(define-public python-hawkauthlib
11125 (package
11126 (name "python-hawkauthlib")
11127 (version "2.0.0")
11128 (source
11129 (origin
11130 (method git-fetch)
11131 (uri (git-reference
11132 (url "https://github.com/mozilla-services/hawkauthlib")
11133 (commit (string-append "v" version))))
11134 (file-name (git-file-name name version))
11135 (sha256
11136 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
11137 (build-system pyproject-build-system)
11138 (arguments
11139 (list
11140 #:test-backend #~'unittest
11141 #:phases
11142 #~(modify-phases %standard-phases
11143 (add-after 'unpack 'fix-python-incompatibilities
11144 (lambda _
11145 (substitute* (find-files "hawkauthlib/tests" "\\.py$")
11146 (("assertEquals") "assertEqual")))))))
11147 (native-inputs (list python-setuptools))
11148 (propagated-inputs (list python-requests python-webob))
11149 (home-page "https://github.com/mozilla-services/hawkauthlib")
11150 (synopsis "Hawk Access Authentication protocol")
11151 (description
11152 "This is a low-level Python library for implementing Hawk Access
11153Authentication, a simple HTTP request-signing scheme.")
11154 (license license:mpl2.0)))
11155
11156(define-public python-pybrowserid
11157 (package
11158 (name "python-pybrowserid")
11159 (version "0.14.0")
11160 (source
11161 (origin
11162 (method git-fetch)
11163 (uri (git-reference
11164 (url "https://github.com/mozilla/PyBrowserID")
11165 (commit version)))
11166 (file-name (git-file-name name version))
11167 (sha256
11168 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
11169 (build-system pyproject-build-system)
11170 (arguments
11171 (list
11172 #:test-backend #~'unittest
11173 #:phases
11174 #~(modify-phases %standard-phases
11175 (add-after 'unpack 'python-3.12-compatibility
11176 (lambda _
11177 (substitute* (find-files "browserid/tests" "\\.py")
11178 (("assertEquals") "assertEqual")))))))
11179 (propagated-inputs (list python-requests))
11180 (native-inputs (list python-mock python-setuptools))
11181 (home-page "https://github.com/mozilla/PyBrowserID")
11182 (synopsis "Python library for the BrowserID protocol")
11183 (description
11184 "This is a Python client library for the BrowserID protocol that
11185underlies Mozilla Persona.")
11186 (license license:mpl2.0)))
11187
11188(define-public python-pyfxa
11189 (package
11190 (name "python-pyfxa")
11191 (version "0.8.1")
11192 (source
11193 (origin
11194 (method git-fetch)
11195 (uri (git-reference
11196 (url "https://github.com/mozilla/PyFxA")
11197 (commit (string-append "v" version))))
11198 (file-name (git-file-name name version))
11199 (sha256
11200 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
11201 (build-system pyproject-build-system)
11202 (arguments
11203 (list
11204 ;; These tests require network access
11205 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
11206 (propagated-inputs
11207 (list python-cryptography
11208 python-pyjwt
11209 python-parameterized
11210 python-hawkauthlib
11211 python-requests))
11212 (native-inputs
11213 (list python-grequests
11214 python-hatchling
11215 python-mock
11216 python-pytest
11217 python-responses))
11218 (home-page "https://github.com/mozilla/PyFxA")
11219 (synopsis "Firefox Accounts client library for Python")
11220 (description
11221 "This is a Python library for interacting with the Firefox Accounts
11222ecosystem.")
11223 (license license:mpl2.0)))
11224
11225(define-public python-hyperlink
11226 (package
11227 (name "python-hyperlink")
11228 (version "21.0.0")
11229 (source
11230 (origin
11231 (method url-fetch)
11232 (uri (pypi-uri "hyperlink" version))
11233 (sha256
11234 (base32
11235 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
11236 (build-system pyproject-build-system)
11237 (arguments
11238 (list #:phases
11239 #~(modify-phases %standard-phases
11240 (add-before 'check 'pretend-to-be-CI
11241 (lambda _
11242 ;; Pretend to be a CI system to skip flaky tests.
11243 (setenv "CI" "true"))))))
11244 (native-inputs
11245 (list python-pytest python-setuptools python-wheel))
11246 (propagated-inputs
11247 (list python-idna))
11248 (home-page "https://github.com/python-hyper/hyperlink")
11249 (synopsis "Python module to create immutable URLs according to spec")
11250 (description "This package provides a Python module to create immutable, and
11251correct URLs for Python according to RFCs 3986 and 3987.")
11252 (license license:expat)))
11253
11254(define-public python-treq
11255 (package
11256 (name "python-treq")
11257 (version "24.9.1")
11258 (source
11259 (origin
11260 (method url-fetch)
11261 (uri (pypi-uri "treq" version))
11262 (sha256
11263 (base32
11264 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
11265 (build-system pyproject-build-system)
11266 (native-inputs
11267 (list python-httpbin
11268 python-pytest
11269 python-service-identity
11270 python-setuptools
11271 python-wheel))
11272 (propagated-inputs
11273 (list python-attrs
11274 python-hyperlink
11275 python-incremental
11276 python-requests
11277 python-twisted
11278 python-typing-extensions))
11279 (home-page "https://github.com/twisted/treq")
11280 (synopsis "Requests-like API built on top of twisted.web's Agent")
11281 (description "This package provides an HTTP library inspired by
11282@code{requests} but written on top of Twisted's @code{Agents}. It offers a
11283high level API for making HTTP requests when using Twisted.")
11284 (license license:expat)))
11285
11286(define-public python-ws4py
11287 (package
11288 (name "python-ws4py")
11289 (version "0.6.0")
11290 (source
11291 (origin
11292 (method git-fetch)
11293 (uri (git-reference
11294 (url "https://github.com/Lawouach/WebSocket-for-Python")
11295 (commit version)))
11296 (file-name (git-file-name name version))
11297 (sha256
11298 (base32
11299 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
11300 (build-system pyproject-build-system)
11301 (arguments
11302 (list
11303 #:phases
11304 #~(modify-phases %standard-phases
11305 (add-after 'unpack 'remove-cherrypy-support
11306 (lambda _
11307 (delete-file "ws4py/server/cherrypyserver.py")
11308 (delete-file "test/test_cherrypy.py"))))))
11309 (native-inputs (list python-setuptools python-pytest))
11310 (propagated-inputs
11311 (list python-gevent python-tornado))
11312 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
11313 (synopsis "WebSocket client and server library")
11314 (description
11315 "This package provides a WebSocket client and server library for Python.")
11316 (license license:bsd-3)))
11317
11318(define-public python-slowapi
11319 (package
11320 (name "python-slowapi")
11321 (version "0.1.9")
11322 (source
11323 (origin
11324 (method git-fetch)
11325 (uri (git-reference
11326 (url "https://github.com/laurents/slowapi")
11327 (commit (string-append "v" version))))
11328 (file-name (git-file-name name version))
11329 (sha256
11330 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
11331 (build-system pyproject-build-system)
11332 (arguments
11333 (list
11334 #:test-flags
11335 ;; These tests fail because the timestamp contains more decimal points
11336 ;; than expected, so a simple equality comparison fails.
11337 '(list "-k" (string-append "not test_headers_no_breach"
11338 " and not test_headers_breach"))))
11339 (propagated-inputs (list python-limits python-redis))
11340 (native-inputs
11341 (list python-fastapi
11342 python-hiro
11343 python-mock
11344 python-poetry-core
11345 python-pytest))
11346 (home-page "https://github.com/laurents/slowapi")
11347 (synopsis "Rate limiting extension for Starlette and Fastapi")
11348 (description
11349 "This package provides a rate limiting extension for Starlette and
11350Fastapi.")
11351 (license license:expat)))
11352
11353(define-public python-slugify
11354 (package
11355 (name "python-slugify")
11356 (version "8.0.4")
11357 (source
11358 (origin
11359 (method git-fetch)
11360 (uri (git-reference
11361 (url "https://github.com/un33k/python-slugify")
11362 (commit (string-append "v" version))))
11363 (file-name (git-file-name name version))
11364 (sha256
11365 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
11366 (build-system pyproject-build-system)
11367 (arguments (list #:test-backend #~'unittest))
11368 (native-inputs (list python-setuptools))
11369 (propagated-inputs (list python-unidecode python-text-unidecode))
11370 (home-page "https://github.com/un33k/python-slugify")
11371 (synopsis "Python Slugify application that handles Unicode")
11372 (description "This package provides a @command{slufigy} command and
11373library to create slugs from unicode strings while keeping it DRY.")
11374 (license license:expat)))
11375
11376(define-public python-tinycss2
11377 (package
11378 (name "python-tinycss2")
11379 (version "1.5.1")
11380 (source
11381 (origin
11382 (method git-fetch)
11383 (uri (git-reference
11384 (url "https://github.com/Kozea/tinycss2")
11385 (commit (string-append "v" version))
11386 (recursive? #true)))
11387 (file-name (git-file-name name version))
11388 (sha256
11389 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
11390 (build-system pyproject-build-system)
11391 (native-inputs
11392 (list python-flit-core
11393 python-pytest))
11394 (propagated-inputs
11395 (list python-webencodings))
11396 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
11397 (synopsis "Low-level CSS parser for Python")
11398 (description "@code{tinycss2} can parse strings, return Python objects
11399representing tokens and blocks, and generate CSS strings corresponding to
11400these objects.
11401
11402Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
11403grammar of CSS but doesn’t know specific rules, properties or values supported
11404in various CSS modules.")
11405 (license license:bsd-3)))
11406
11407(define-public python-tinyhtml5
11408 (package
11409 (name "python-tinyhtml5")
11410 (version "2.1.0")
11411 (source
11412 (origin
11413 (method git-fetch)
11414 (uri (git-reference
11415 (url "https://github.com/CourtBouillon/tinyhtml5")
11416 (commit version)))
11417 (file-name (git-file-name name version))
11418 (sha256
11419 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
11420 (build-system pyproject-build-system)
11421 (propagated-inputs
11422 (list python-webencodings))
11423 (native-inputs
11424 (list python-flit-core
11425 python-pytest))
11426 (home-page "https://github.com/CourtBouillon/tinyhtml5")
11427 (synopsis "Small HTML parser based on the WHATWG HTML specification")
11428 (description "This Python module is a HTML5 parser that transforms a
11429possibly malformed HTML document into an ElementTree tree. This module is a
11430simplified fork of html5lib.")
11431 (license license:expat)))
11432
11433(define-public python-uvloop
11434 (package
11435 (name "python-uvloop")
11436 (version "0.22.1")
11437 (source
11438 (origin
11439 (method git-fetch)
11440 (uri (git-reference
11441 (url "https://github.com/MagicStack/uvloop")
11442 (commit (string-append "v" version))))
11443 (file-name (git-file-name name version))
11444 (sha256
11445 (base32 "1qbykwwz4ac3f7472g22z4i5rrd5kcr8hmxn5kswmja57j1nxlpl"))
11446 (modules '((guix build utils)))
11447 (snippet
11448 '(begin
11449 (delete-file-recursively "vendor")))))
11450 (build-system pyproject-build-system)
11451 (arguments
11452 (list
11453 ;; tests: 470 passed, 32 skipped, 8 deselected, 5 warnings, 104 subtests passed
11454 #:test-flags
11455 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
11456 ;; to get a meaningful idea about where.
11457 #~(list "--timeout=300"
11458 "--timeout-method=thread"
11459 "-k" (string-join
11460 (list
11461 ;; Timeout, because SIGINT cannot be sent to child.
11462 "not test_signals_sigint_pycode_continue"
11463 "test_signals_sigint_pycode_stop"
11464 "test_signals_sigint_uvcode"
11465 "test_signals_sigint_uvcode_two_loop_runs"
11466 #$@(if (target-riscv64?)
11467 `("test_renegotiation")
11468 `()))
11469 " and not "))
11470 #:phases
11471 #~(modify-phases %standard-phases
11472 (add-after 'unpack 'preparations
11473 (lambda _
11474 ;; Use packaged libuv.
11475 (substitute* "setup.py" (("self.use_system_libuv = False")
11476 "self.use_system_libuv = True"))
11477 ;; Replace hardcoded shell command.
11478 (substitute* "uvloop/loop.pyx"
11479 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))
11480 (substitute* "tests/test_process.py"
11481 (("'env'") (string-append "'" (which "env") "'")))))
11482 #$@(if (target-riscv64?)
11483 `((add-after 'unpack 'adjust-test-timeouts
11484 (lambda _
11485 (substitute* '("tests/test_tcp.py"
11486 "tests/test_unix.py")
11487 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
11488 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
11489 '())
11490 (add-before 'check 'pre-check
11491 (lambda* (#:key tests? #:allow-other-keys)
11492 (when tests?
11493 ;; Remove Python module, which conflicts with the installed
11494 ;; version, but lacks the built C module.
11495 (delete-file-recursively "uvloop")))))))
11496 (native-inputs
11497 (list python-aiohttp
11498 python-cython
11499 python-psutil
11500 python-pyopenssl
11501 python-pytest
11502 python-pytest-timeout
11503 python-setuptools))
11504 (inputs
11505 (list libuv))
11506 (home-page "https://github.com/MagicStack/uvloop")
11507 (synopsis "Fast implementation of asyncio event loop on top of libuv")
11508 (description
11509 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
11510event loop. It is implemented in Cython and uses libuv under the hood.")
11511 (license license:expat)))
11512
11513(define-public python-httptools
11514 (package
11515 (name "python-httptools")
11516 (version "0.7.1")
11517 (source
11518 (origin
11519 ;; PyPI tarball comes with a vendored http-parser and no tests.
11520 (method git-fetch)
11521 (uri (git-reference
11522 (url "https://github.com/MagicStack/httptools")
11523 (commit (string-append "v" version))))
11524 (file-name (git-file-name name version))
11525 (sha256
11526 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
11527 (modules '((guix build utils)))
11528 (snippet
11529 #~(begin (delete-file-recursively "vendor")))))
11530 (build-system pyproject-build-system)
11531 (arguments
11532 (list
11533 #:test-flags
11534 ;; XXX: AssertionError: HttpParserError not raised.
11535 #~(list "-k" "not test_parser_response_leninent_headers_1")
11536 #:phases
11537 #~(modify-phases %standard-phases
11538 (add-after 'unpack 'configure-build-ext
11539 (lambda _
11540 (with-output-to-file "setup.cfg"
11541 (lambda ()
11542 (display "\
11543[build_ext]
11544use_system_llhttp = true
11545use_system_http_parser = true
11546cython_always = true"))))))))
11547 (native-inputs
11548 (list python-cython
11549 python-pytest
11550 python-setuptools))
11551 (inputs
11552 (list http-parser
11553 llhttp))
11554 (home-page "https://github.com/MagicStack/httptools")
11555 (synopsis "Collection of framework independent HTTP protocol utils")
11556 (description
11557 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
11558 (license license:expat)))
11559
11560(define-public python-uvicorn
11561 (package
11562 (name "python-uvicorn")
11563 ;; 0.49.0 (2026-06-03), release does not work with python-websockets 16.0,
11564 ;; see: <https://github.com/Kludex/uvicorn/pull/2985>.
11565 (properties '((commit . "e8a31bca03254b8457c4c89596e310282cc33edc")
11566 (revision . "0")))
11567 (version (git-version "0.49.0"
11568 (assoc-ref properties 'revision)
11569 (assoc-ref properties 'commit)))
11570 (source
11571 (origin
11572 (method git-fetch)
11573 (uri (git-reference
11574 (url "https://github.com/encode/uvicorn")
11575 (commit (assoc-ref properties 'commit))))
11576 (file-name (git-file-name name version))
11577 (sha256
11578 (base32 "1vd1680a1k3jcdgc3jd5p3a6zmhz4r8bgzb7v7zhpxrkkdsisrxj"))))
11579 (build-system pyproject-build-system)
11580 (arguments
11581 (list
11582 #:test-flags
11583 #~(list "--ignore=tests/benchmarks"
11584 #$@(cond
11585 ((or (target-aarch64?)
11586 (target-riscv64?))
11587 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
11588 (#t '())))))
11589 (native-inputs
11590 (list nss-certs-for-test
11591 python-a2wsgi
11592 python-hatchling
11593 python-httpx-bootstrap
11594 python-pytest
11595 python-pytest-asyncio
11596 python-pytest-mock
11597 python-pytest-xdist
11598 python-requests
11599 python-trustme
11600 python-wsproto))
11601 (propagated-inputs
11602 (list python-a2wsgi
11603 python-click
11604 python-dotenv
11605 python-h11
11606 python-httptools
11607 python-pyyaml
11608 python-uvloop
11609 python-watchfiles
11610 python-websockets))
11611 (home-page "https://github.com/encode/uvicorn")
11612 (synopsis "Fast ASGI server implementation")
11613 (description
11614 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
11615and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
11616for HTTP/2 is planned.")
11617 (license license:bsd-3)))
11618
11619(define-public python-translation-finder
11620 (package
11621 (name "python-translation-finder")
11622 (version "2.22")
11623 (source
11624 (origin
11625 (method url-fetch)
11626 (uri (pypi-uri "translation_finder" version))
11627 (sha256
11628 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
11629 (build-system pyproject-build-system)
11630 (arguments
11631 (list
11632 #:test-flags
11633 ;; AssertionError: 31 != 30 : Mismatched count of results
11634 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
11635 (native-inputs
11636 (list python-pytest
11637 python-setuptools))
11638 (propagated-inputs
11639 (list python-charset-normalizer
11640 python-ruamel.yaml
11641 python-weblate-language-data))
11642 (home-page "https://weblate.org/")
11643 (synopsis "Translation file finder for Weblate")
11644 (description "This package provides a function to find translation file in
11645the source code of a project. It supports many translation file formats and
11646is part of the Weblate translation platform.")
11647 (license license:gpl3+)))
11648
11649(define-public python-gitlab
11650 (package
11651 (name "python-gitlab")
11652 (version "7.0.0")
11653 (source
11654 (origin
11655 (method git-fetch)
11656 (uri (git-reference
11657 (url "https://github.com/python-gitlab/python-gitlab")
11658 (commit (string-append "v" version))))
11659 (file-name (git-file-name name version))
11660 (sha256
11661 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
11662 (build-system pyproject-build-system)
11663 (arguments
11664 (list
11665 #:test-flags
11666 #~(list "--ignore=tests/unit/test_graphql.py"
11667 ;; XXX: Missing helper script.
11668 "-k" "not test_data_from_helper" "tests/unit")))
11669 (native-inputs
11670 (list python-anyio
11671 python-pytest
11672 python-responses
11673 python-setuptools))
11674 (propagated-inputs (list python-requests python-requests-toolbelt))
11675 (home-page "https://github.com/python-gitlab/python-gitlab")
11676 (synopsis "Interact with GitLab API")
11677 (description "This package provides an extended library for interacting
11678with GitLab instances through their API.")
11679 (license license:lgpl3+)))
11680
11681(define-public python-path-and-address
11682 (package
11683 (name "python-path-and-address")
11684 (version "2.0.1")
11685 (source
11686 (origin
11687 (method git-fetch)
11688 (uri (git-reference
11689 (url "https://github.com/joeyespo/path-and-address")
11690 (commit (string-append "v" version))))
11691 (file-name (git-file-name name version))
11692 (sha256
11693 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
11694 (build-system pyproject-build-system)
11695 (native-inputs
11696 (list python-pytest python-setuptools))
11697 (home-page "https://github.com/joeyespo/path-and-address")
11698 (synopsis "Functions for command-line server tools used by humans")
11699 (description "Path-and-address resolves ambiguities of command-line
11700interfaces, inferring which argument is the path, and which is the address.")
11701 (license license:expat)))
11702
11703(define-public python-port-for
11704 (package
11705 (name "python-port-for")
11706 (version "0.7.4")
11707 (source
11708 (origin
11709 (method url-fetch)
11710 (uri (pypi-uri "port_for" version))
11711 (sha256
11712 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
11713 (build-system pyproject-build-system)
11714 (propagated-inputs
11715 (list python-urllib3))
11716 (native-inputs
11717 (list python-pytest python-setuptools python-wheel))
11718 (home-page "https://github.com/kmike/port-for/")
11719 (synopsis "TCP localhost port finder and association manager")
11720 (description
11721 "This package provides a utility that helps with local TCP ports
11722management. It can find an unused TCP localhost port and remember the
11723association.")
11724 (license license:expat)))
11725
11726(define-public python-livereload
11727 (package
11728 (name "python-livereload")
11729 (version "2.7.1")
11730 (source
11731 (origin
11732 (method git-fetch)
11733 (uri (git-reference
11734 (url "https://github.com/lepture/python-livereload")
11735 (commit (string-append "v" version))))
11736 (file-name (git-file-name name version))
11737 (sha256
11738 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
11739 (build-system pyproject-build-system)
11740 (arguments (list #:test-backend #~'unittest))
11741 (native-inputs (list python-django-minimal python-setuptools))
11742 (propagated-inputs (list python-tornado))
11743 (home-page "https://github.com/lepture/python-livereload")
11744 (synopsis "Python LiveReload")
11745 (description
11746 "Python LiveReload provides a command line utility, @command{livereload},
11747for starting a web server in a directory. It can trigger arbitrary commands
11748and serve updated contents upon changes to the directory.")
11749 (license license:bsd-3)))
11750
11751(define-public python-vf-1
11752 (package
11753 (name "python-vf-1")
11754 (version "1.0.0")
11755 (source
11756 (origin
11757 (method git-fetch)
11758 (uri (git-reference
11759 (url "https://git.sr.ht/~solderpunk/VF-1")
11760 (commit (string-append "v" version))))
11761 (file-name (git-file-name name version))
11762 (sha256
11763 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
11764 (build-system pyproject-build-system)
11765 (arguments (list #:tests? #f)) ; No tests.
11766 (native-inputs (list python-setuptools))
11767 (home-page "https://git.sr.ht/~solderpunk/VF-1")
11768 (synopsis "Command line gopher client")
11769 (description "@code{VF-1} is a command line gopher client with
11770@acronym{TLS, Transport Layer Security} support.")
11771 (license license:bsd-2)))
11772
11773(define-public python-httpcore
11774 (package
11775 (name "python-httpcore")
11776 (version "1.0.9")
11777 (source
11778 (origin
11779 ;; PyPI tarball does not contain tests.
11780 (method git-fetch)
11781 (uri (git-reference
11782 (url "https://github.com/encode/httpcore")
11783 (commit version)))
11784 (file-name (git-file-name name version))
11785 (sha256
11786 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
11787 (build-system pyproject-build-system)
11788 (native-inputs
11789 (list nss-certs-for-test
11790 python-hatch-fancy-pypi-readme
11791 python-hatchling
11792 python-pytest
11793 python-pytest-asyncio
11794 python-pytest-httpbin
11795 python-pytest-trio
11796 python-uvicorn
11797 python-trustme))
11798 (propagated-inputs
11799 (list python-anyio
11800 python-certifi
11801 python-h11
11802 python-h2
11803 python-sniffio
11804 python-socksio
11805 python-trio
11806 python-trio-typing))
11807 (home-page "https://github.com/encode/httpcore")
11808 (synopsis "Minimal, low-level HTTP client")
11809 (description
11810 "HTTP Core provides a minimal and low-level HTTP client, which does one
11811thing only: send HTTP requests.
11812
11813Some things HTTP Core does do:
11814
11815@itemize
11816@item Sending HTTP requests.
11817@item Provides both sync and async interfaces.
11818@item Supports HTTP/1.1 and HTTP/2.
11819@item Async backend support for asyncio and trio.
11820@item Automatic connection pooling.
11821@item HTTP(S) proxy support.
11822@end itemize")
11823 (license license:bsd-3)))
11824
11825;;; Variant used to break a cycle between python-httpx and python-uvicorn.
11826(define-public python-httpcore-bootstrap
11827 (hidden-package
11828 (package/inherit python-httpcore
11829 (name "python-httpcore-bootstrap")
11830 (arguments (list #:tests? #f))
11831 (native-inputs (list python-hatchling
11832 python-hatch-fancy-pypi-readme)))))
11833
11834(define-public python-httpx
11835 (package
11836 (name "python-httpx")
11837 (version "0.28.1")
11838 (source
11839 (origin
11840 ;; PyPI tarball does not contain tests.
11841 (method git-fetch)
11842 (uri (git-reference
11843 (url "https://github.com/encode/httpx")
11844 (commit version)))
11845 (file-name (git-file-name name version))
11846 (sha256
11847 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
11848 (build-system pyproject-build-system)
11849 (arguments
11850 (list
11851 ;; 1401 passed, 1 skipped, 5 deselected
11852 #:test-flags
11853 #~(list "-o" "asyncio_mode=auto"
11854 ;; CLI tests are broken.
11855 "--ignore=tests/test_main.py"
11856 "-k" (string-join
11857 ;; These tests try to open an outgoing connection.
11858 (list "not test_async_proxy_close"
11859 "test_sync_proxy_clos"
11860 "test_write_timeout")
11861 " and not "))))
11862 (native-inputs
11863 (list nss-certs-for-test
11864 python-chardet
11865 python-cryptography
11866 python-hatch-fancy-pypi-readme
11867 python-hatchling
11868 python-pytest
11869 python-pytest-asyncio
11870 python-pytest-trio
11871 python-setuptools
11872 python-trio
11873 python-trustme
11874 python-uvicorn))
11875 (propagated-inputs
11876 (list python-anyio
11877 python-certifi
11878 python-httpcore
11879 python-idna
11880 ;; [brotli]
11881 python-brotli
11882 ;; [http2]
11883 python-h2
11884 ;; [socks]
11885 python-socksio
11886 ;; [zstd]
11887 python-zstandard
11888 ;; For trio, see:
11889 ;; <https://github.com/python-trio/trio/issues/2802>.
11890 python-sniffio))
11891 (home-page "https://www.python-httpx.org/")
11892 (synopsis "HTTP client for Python")
11893 (description
11894 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
11895and async APIs, and support for both HTTP/1.1 and HTTP/2.
11896
11897HTTPX builds on the well-established usability of requests, and gives you:
11898
11899@itemize
11900@item A broadly requests-compatible API.
11901@item Standard synchronous interface, but with async support if you need it.
11902@item HTTP/1.1 and HTTP/2 support.
11903@item Ability to make requests directly to WSGI applications or ASGI applications.
11904@item Strict timeouts everywhere.
11905@item Fully type annotated.
11906@item 99% test coverage.
11907@end itemize
11908
11909Plus all the standard features of requests:
11910
11911@itemize
11912@item International Domains and URLs
11913@item Keep-Alive & Connection Pooling
11914@item Sessions with Cookie Persistence
11915@item Browser-style SSL Verification
11916@item Basic/Digest Authentication
11917@item Elegant Key/Value Cookies
11918@item Automatic Decompression
11919@item Automatic Content Decoding
11920@item Unicode Response Bodies
11921@item Multipart File Uploads
11922@item HTTP(S) Proxy Support
11923@item Connection Timeouts
11924@item Streaming Downloads
11925@item .netrc Support
11926@item Chunked Requests
11927@end itemize")
11928 (license license:bsd-3)))
11929
11930;;; Variant used to break a cycle with python-uvicorn.
11931(define-public python-httpx-bootstrap
11932 (hidden-package
11933 (package/inherit python-httpx
11934 (name "python-httpx-bootstrap")
11935 (arguments (list #:tests? #f))
11936 (native-inputs
11937 (list python-hatchling
11938 python-hatch-fancy-pypi-readme))
11939 (propagated-inputs
11940 (modify-inputs propagated-inputs
11941 (replace "python-httpcore" python-httpcore-bootstrap))))))
11942
11943(define-public python-httpx-sse
11944 (package
11945 (name "python-httpx-sse")
11946 (version "0.4.3")
11947 (source
11948 (origin
11949 (method git-fetch)
11950 (uri (git-reference
11951 (url "https://github.com/florimondmanca/httpx-sse")
11952 (commit version)))
11953 (file-name (git-file-name name version))
11954 (sha256
11955 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
11956 (build-system pyproject-build-system)
11957 (native-inputs
11958 (list python-pytest
11959 python-pytest-asyncio
11960 python-setuptools
11961 python-setuptools-scm
11962 python-sse-starlette))
11963 (propagated-inputs (list python-httpx))
11964 (home-page "https://github.com/florimondmanca/httpx-sse")
11965 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
11966 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
11967 (license license:expat)))
11968
11969(define-public python-httpx-ws
11970 (package
11971 (name "python-httpx-ws")
11972 (version "0.9.0")
11973 (source
11974 (origin
11975 (method git-fetch)
11976 (uri (git-reference
11977 (url "https://github.com/frankie567/httpx-ws")
11978 (commit (string-append "v" version))))
11979 (file-name (git-file-name name version))
11980 (sha256
11981 (base32 "1hin6fndvfnx3mjgy30x0ghgjalikxavyj24klcknnly9sqzg83v"))))
11982 (build-system pyproject-build-system)
11983 (propagated-inputs
11984 (list python-anyio
11985 python-httpcore
11986 python-httpx
11987 python-wsproto))
11988 (native-inputs
11989 (list nss-certs-for-test
11990 python-hatch-regex-commit
11991 python-hatchling
11992 python-pytest
11993 python-pytest-cov
11994 python-starlette
11995 python-uvicorn))
11996 (home-page "https://github.com/frankie567/httpx-ws")
11997 (synopsis "WebSockets support for HTTPX")
11998 (description "This package provides @code{WebSockets} support for HTTPX.")
11999 (license license:expat)))
12000
12001(define-public python-wsgiprox
12002 (package
12003 (name "python-wsgiprox")
12004 (version "1.5.2")
12005 (source
12006 (origin
12007 (method url-fetch)
12008 (uri (pypi-uri "wsgiprox" version))
12009 (sha256
12010 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
12011 (build-system pyproject-build-system)
12012 (arguments
12013 ;; The test suite hangs (see:
12014 ;; https://github.com/webrecorder/wsgiprox/issues/6).
12015 (list
12016 #:tests? #f
12017 #:phases
12018 #~(modify-phases %standard-phases
12019 (add-after 'unpack 'fix-pytest-argument
12020 (lambda _
12021 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
12022 (substitute* "setup.py"
12023 (("--doctest-module")
12024 "--doctest-modules")))))))
12025 (propagated-inputs
12026 (list python-certauth
12027 python-gevent
12028 python-six
12029 python-websocket-client))
12030 (native-inputs
12031 (list python-mock python-waitress python-setuptools))
12032 (home-page "https://github.com/webrecorder/wsgiprox")
12033 (synopsis "HTTP/S proxy with WebSockets over WSGI")
12034 (description
12035 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
12036middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
12037The library accepts HTTP and HTTPS proxy connections, and routes them to a
12038designated prefix.")
12039 (license license:asl2.0)))
12040
12041(define-public python-warcio
12042 ;; The PyPI release is missing some test support files (see:
12043 ;; https://github.com/webrecorder/warcio/issues/132).
12044 (package
12045 (name "python-warcio")
12046 (version "1.8.1")
12047 (source
12048 (origin
12049 (method git-fetch)
12050 (uri (git-reference
12051 (url "https://github.com/webrecorder/warcio")
12052 (commit (string-append "v" version))))
12053 (file-name (git-file-name name version))
12054 (sha256
12055 (base32
12056 "19wwg7zmx33c942dbahdkng1byiwr4c9cd1ayrsh13f818n17zps"))))
12057 (build-system pyproject-build-system)
12058 (arguments
12059 (list
12060 #:test-flags ; These tests fail due to networking requirements.
12061 '(list "-k" (format #f "not ~a"
12062 (string-join
12063 '("test_post_chunked"
12064 "test_remote"
12065 "test_capture_http_proxy"
12066 "test_capture_https_proxy"
12067 "test_capture_https_proxy_same_session")
12068 " and not "))
12069 ; The following test requires the hookdns package.
12070 "--ignore=test/test_capture_http_proxy.py")))
12071 (native-inputs
12072 (list python-httpbin
12073 python-pytest
12074 python-requests
12075 python-setuptools
12076 python-wsgiprox))
12077 (home-page "https://github.com/webrecorder/warcio")
12078 (synopsis "Streaming web archival archive (WARC) library")
12079 (description "warcio is a Python library to read and write the WARC format
12080commonly used in Web archives. It is designed for fast, low-level access to
12081web archival content, oriented around a stream of WARC records rather than
12082files.")
12083 (license license:asl2.0)))
12084
12085(define-public python-websockets
12086 (package
12087 (name "python-websockets")
12088 (version "16.0")
12089 (source
12090 (origin
12091 (method git-fetch)
12092 (uri (git-reference
12093 (url "https://github.com/aaugustin/websockets")
12094 (commit version)))
12095 (file-name (git-file-name name version))
12096 (sha256
12097 (base32
12098 "1f71siwmjxn8b671x8lkkxx56q3xm99f2kmjqpzfcv3air9n94gg"))))
12099 (build-system pyproject-build-system)
12100 (arguments
12101 (list #:test-backend #~'unittest
12102 #:phases
12103 #~(modify-phases %standard-phases
12104 (add-before 'check 'extend-test-timeout
12105 (lambda _
12106 ;; Some architectures need an even longer timeout. Make it
12107 ;; long enough that it should never fail due to timeout.
12108 #$@(if (target-riscv64?)
12109 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
12110 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
12111 (native-inputs
12112 (list python-setuptools))
12113 (home-page "https://github.com/aaugustin/websockets")
12114 (synopsis
12115 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
12116 (description
12117 "@code{websockets} is a library for building WebSocket servers and clients
12118in Python with a focus on correctness and simplicity.
12119
12120Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
12121it provides an elegant coroutine-based API.")
12122 (license license:bsd-3)))
12123
12124(define-public selenium-manager
12125 (package
12126 (name "selenium-manager")
12127 (version "4.34.2")
12128 (source
12129 (origin
12130 (method git-fetch)
12131 (uri (git-reference
12132 (url "https://github.com/SeleniumHQ/selenium")
12133 (commit (string-append "selenium-" version "-python"))))
12134 (file-name (git-file-name name version))
12135 (sha256
12136 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
12137 (build-system cargo-build-system)
12138 (arguments
12139 (list
12140 ;; XXX: Almost all tests require either browsers or network access.
12141 #:tests? #f
12142 #:install-source? #f ; Most likely intended as a leaf.
12143 #:phases
12144 #~(modify-phases %standard-phases
12145 (add-after 'unpack 'chdir
12146 (lambda _
12147 (chdir "rust"))))))
12148 (native-inputs (list pkg-config))
12149 (inputs (cons* (list zstd "lib") xz
12150 (cargo-inputs 'selenium-manager)))
12151 (home-page "https://www.selenium.dev")
12152 (synopsis "CLI tool to manager the browser test infrastructure")
12153 (description
12154 "Selenium simplifies web browser automation. It specifically provides
12155infrastructure for the W3C WebDriver specification — a platform and
12156language-neutral coding interface compatible with all major web browsers.
12157
12158Selenium Manager is a CLI tool that automatically manages the browser/driver
12159infrastructure required by Selenium.")
12160 (license license:asl2.0)))
12161
12162(define-public python-selenium
12163 (package/inherit selenium-manager
12164 (name "python-selenium")
12165 (build-system pyproject-build-system)
12166 (arguments
12167 (list
12168 ;; XXX: Disable failing tests.
12169 #:test-flags
12170 #~(list "--ignore-glob=test/selenium/webdriver/*"
12171 ;; Probably requires those.
12172 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
12173 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
12174 ;; XXX: SSL certificates access.
12175 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
12176 "-k" "not test_missing_cdp_devtools_version_falls_back")
12177 #:phases
12178 #~(modify-phases %standard-phases
12179 (add-after 'unpack 'chdir
12180 (lambda _
12181 (chdir "py")))
12182 (add-after 'chdir 'inject-selenium-manager-binary
12183 (lambda* (#:key inputs #:allow-other-keys)
12184 (substitute* "selenium/webdriver/common/selenium_manager.py"
12185 (("compiled_path = Path.*")
12186 (format #f "return Path(~s)~%"
12187 (search-input-file inputs "bin/selenium-manager"))))
12188 (substitute* "pyproject.toml"
12189 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
12190 "")
12191 (("target = \"selenium\\.webdriver\\.common.*\"")
12192 ""))))
12193 (add-after 'chdir 'relax-requirements
12194 (lambda _
12195 (substitute* "pyproject.toml"
12196 (("\"(typing_extensions|trio|urllib3.*)~=.*\"," _ target)
12197 (format #f "~s," target))))))))
12198 (propagated-inputs (list python-certifi
12199 python-trio
12200 python-trio-websocket
12201 python-typing-extensions
12202 python-urllib3
12203 python-websocket-client))
12204 (inputs (list selenium-manager))
12205 (native-inputs (list python-filetype
12206 python-pytest
12207 python-pytest-mock
12208 python-pytest-trio
12209 python-setuptools
12210 python-setuptools-rust))
12211 (synopsis "Python bindings for Selenium")
12212 (description
12213 "Selenium enables web browser automation. It specifically provides
12214infrastructure for the W3C WebDriver specification — a platform and
12215language-neutral coding interface compatible with all major web browsers.")))
12216
12217(define-public python-rapidjson
12218 (package
12219 (name "python-rapidjson")
12220 (version "1.23")
12221 (source
12222 (origin
12223 (method git-fetch)
12224 (uri (git-reference
12225 (url "https://github.com/python-rapidjson/python-rapidjson")
12226 (commit (string-append "v" version))))
12227 (file-name (git-file-name name version))
12228 (sha256
12229 (base32 "0ajf919gg3qmi68jb0m6v80al2n65cn2ac36qz46s0h6zh92cl86"))
12230 (modules '((guix build utils)))
12231 (snippet
12232 '(delete-file-recursively "rapidjson"))))
12233 (build-system pyproject-build-system)
12234 (arguments
12235 (list
12236 #:test-flags '(list "tests")
12237 #:phases
12238 #~(modify-phases %standard-phases
12239 ;; We cannot seem to use #:configure-flags with the
12240 ;; pyproject-build-system to override rj_include_dir.
12241 (add-after 'unpack 'override-rapidjson-sources
12242 (lambda _
12243 (substitute* "setup.py"
12244 (("^rj_include_dir =.*")
12245 (string-append "rj_include_dir = '"
12246 #$(this-package-native-input "rapidjson")
12247 "/include/rapidjson" "'"))
12248 (("if not os.path.isdir.*") "if False:")))))))
12249 (native-inputs
12250 (list rapidjson python-pytest python-pytz python-setuptools))
12251 (home-page "https://github.com/python-rapidjson/python-rapidjson")
12252 (synopsis "Python wrapper around rapidjson")
12253 (description "This package provides a python wrapper around rapidjson.")
12254 (license license:expat)))
12255
12256(define-public python-venusian
12257 (package
12258 (name "python-venusian")
12259 (version "3.1.1")
12260 (source
12261 (origin
12262 (method url-fetch)
12263 (uri (pypi-uri "venusian" version))
12264 (sha256
12265 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
12266 (build-system pyproject-build-system)
12267 (native-inputs
12268 (list python-pytest
12269 python-setuptools))
12270 (home-page "https://docs.pylonsproject.org/projects/venusian")
12271 (synopsis "Library for deferring decorator actions")
12272 (description
12273 "Venusian is a library which allows framework authors to defer decorator
12274actions. Instead of taking actions when a function (or class) decorator is
12275executed at import time, you can defer the action usually taken by the
12276decorator until a separate scan phase.")
12277 (license license:repoze)))
12278
12279(define-public python-zope-deprecation
12280 (package
12281 (name "python-zope-deprecation")
12282 (version "6.0")
12283 (source (origin
12284 (method url-fetch)
12285 (uri (pypi-uri "zope_deprecation" version))
12286 (sha256
12287 (base32
12288 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
12289 (build-system pyproject-build-system)
12290 (arguments
12291 (list #:tests? #f)) ;no tests in PyPI
12292 (native-inputs
12293 (list python-setuptools))
12294 (home-page "https://zopedeprecation.readthedocs.io/")
12295 (synopsis "Function for marking deprecations")
12296 (description "The @code{zope.deprecation} module provides a function for
12297marking modules, classes, functions, methods and properties as deprecated,
12298displaying warnings when usaged in application code.")
12299 (license license:zpl2.1)))
12300
12301(define-public python-translationstring
12302 (package
12303 (name "python-translationstring")
12304 (version "1.4")
12305 (source (origin
12306 (method url-fetch)
12307 (uri (pypi-uri "translationstring" version))
12308 (sha256
12309 (base32
12310 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
12311 (build-system pyproject-build-system)
12312 (native-inputs
12313 (list python-pytest
12314 python-setuptools))
12315 (home-page "https://docs.pylonsproject.org/projects/translationstring")
12316 (synopsis "Internationalization tooling for the Pylons project")
12317 (description "This package provides a library used by various Pylons
12318project packages for internationalization (i18n) duties related to
12319translation.")
12320 (license license:repoze)))
12321
12322(define-public python-plaster
12323 (package
12324 (name "python-plaster")
12325 (version "1.1.2")
12326 (source (origin
12327 (method url-fetch)
12328 (uri (pypi-uri "plaster" version))
12329 (sha256
12330 (base32
12331 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
12332 (build-system pyproject-build-system)
12333 (native-inputs
12334 (list python-pytest
12335 python-setuptools))
12336 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
12337 (synopsis "Configuration loader for multiple config file formats")
12338 (description
12339 "Plaster is a loader interface around multiple config file formats. It
12340exists to define a common API for applications to use when they wish to load
12341configuration. The library itself does not aim to handle anything except a
12342basic API that applications may use to find and load configuration settings.
12343Any specific constraints should be implemented in a pluggable loader which can
12344be registered via an entrypoint.")
12345 (license license:repoze)))
12346
12347(define-public python-plaster-pastedeploy
12348 (package
12349 (name "python-plaster-pastedeploy")
12350 (version "1.0.1")
12351 (source (origin
12352 (method url-fetch)
12353 (uri (pypi-uri "plaster_pastedeploy" version))
12354 (sha256
12355 (base32
12356 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
12357 (build-system pyproject-build-system)
12358 (native-inputs
12359 (list python-pytest
12360 python-setuptools))
12361 (propagated-inputs
12362 (list python-plaster python-pastedeploy))
12363 (home-page "https://github.com/Pylons/plaster_pastedeploy")
12364 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
12365 (description
12366 "This plugin for @code{python-plaster} adds support for PasteDeploy
12367syntax, it provides a plaster @code{Loader} object that can parse ini files
12368according to the standard set by PasteDeploy")
12369 (license license:expat)))
12370
12371(define-public python-hupper
12372 (package
12373 (name "python-hupper")
12374 (version "1.12.1")
12375 (source
12376 (origin
12377 (method url-fetch)
12378 (uri (pypi-uri "hupper" version))
12379 (sha256
12380 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
12381 (build-system pyproject-build-system)
12382 (arguments
12383 (list
12384 ;; RuntimeError: timeout waiting for change to
12385 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
12386 #:test-flags #~(list "--ignore=tests/test_it.py")))
12387 (native-inputs
12388 (list python-pytest python-setuptools python-wheel))
12389 (propagated-inputs
12390 (list python-watchdog))
12391 (home-page "https://readthedocs.org/projects/hupper")
12392 (synopsis "Integrated process monitor tracking changes to imported Python files")
12393 (description
12394 "Hupper is an integrated process monitor that will track changes to any
12395imported Python files in sys.modules as well as custom paths. When files are
12396changed the process is restarted.")
12397 (license license:expat)))
12398
12399(define-public python-pyowm
12400 (package
12401 (name "python-pyowm")
12402 (version "3.3.0")
12403 (source
12404 (origin
12405 (method git-fetch)
12406 (uri (git-reference
12407 (url "https://github.com/csparpa/pyowm")
12408 (commit version)))
12409 (file-name (git-file-name name version))
12410 (sha256
12411 (base32
12412 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
12413 (build-system pyproject-build-system)
12414 (arguments (list #:test-flags #~(list "tests/unit")))
12415 (native-inputs (list python-pytest python-setuptools python-wheel))
12416 (propagated-inputs
12417 (list python-geojson-for-pyowm
12418 python-pysocks
12419 python-requests))
12420 (home-page "https://github.com/csparpa/pyowm")
12421 (synopsis "Python wrapper around OpenWeatherMap web APIs")
12422 (description
12423 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
12424 (license license:expat)))
12425
12426(define-public python-pyramid
12427 (package
12428 (name "python-pyramid")
12429 (version "2.1")
12430 (source
12431 (origin
12432 (method git-fetch)
12433 (uri (git-reference
12434 (url "https://github.com/Pylons/pyramid")
12435 (commit version)))
12436 (file-name (git-file-name name version))
12437 (sha256
12438 (base32 "0my03b81009w9zqx5cdn9qixh0jah49hr0379n98kx2j3b8cfk1p"))))
12439 (build-system pyproject-build-system)
12440 (native-inputs
12441 (list python-pytest
12442 python-setuptools
12443 python-webtest
12444 python-zope-component))
12445 (propagated-inputs
12446 (list python-hupper
12447 python-plaster
12448 python-plaster-pastedeploy
12449 python-translationstring
12450 python-venusian
12451 python-webob
12452 python-zope-deprecation
12453 python-zope-interface))
12454 (home-page "https://trypyramid.com/")
12455 (synopsis "Python web-framework suitable for small and large sites")
12456 (description
12457 "Pyramid makes it easy to write web applications. From minimal
12458request/response web apps to larger, grown applications.")
12459 (license license:repoze)))
12460
12461(define-public python-pyramid-chameleon
12462 ;; PyPI lacks a fresh release, use the latest commit associated with
12463 ;; unrleased version, see:
12464 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
12465 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
12466 (revision "0"))
12467 (package
12468 (name "python-pyramid-chameleon")
12469 (version (git-version "0.4.dev0" revision commit))
12470 (source
12471 (origin
12472 (method git-fetch)
12473 (uri (git-reference
12474 (url "https://github.com/Pylons/pyramid_chameleon")
12475 (commit commit)))
12476 (file-name (git-file-name name version))
12477 (sha256
12478 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
12479 (build-system pyproject-build-system)
12480 (native-inputs
12481 (list python-pytest
12482 python-setuptools))
12483 (propagated-inputs
12484 (list python-chameleon
12485 python-pyramid))
12486 (home-page "https://github.com/Pylons/pyramid_chameleon")
12487 (synopsis "Chameleon template compiler for pyramid")
12488 (description
12489 "These package provides bindings for the Chameleon templating system
12490 for the Pyramid web framework.")
12491 (license license:repoze))))
12492
12493(define-public python-pyramid-debugtoolbar
12494 (package
12495 (name "python-pyramid-debugtoolbar")
12496 (version "4.12.1")
12497 (source
12498 (origin
12499 (method git-fetch)
12500 (uri (git-reference
12501 (url "https://github.com/Pylons/pyramid_debugtoolbar")
12502 (commit version)))
12503 (file-name (git-file-name name version))
12504 (sha256
12505 (base32 "0kalb5rsrlcz62zv9a39kp28mvwg9j6gymvzxbybdnvk51v9if56"))))
12506 (build-system pyproject-build-system)
12507 (arguments
12508 (list
12509 #:test-flags
12510 ;; Large diff assertion not equal faileurs.
12511 #~(list #$@(map (lambda (test)
12512 (string-append "--deselect=tests"
12513 "/test_panels/test_sqla.py::" test))
12514 (list "TestSimpleSelect::test_panel"
12515 "TestTransactionCommit::test_panel"
12516 "TestTransactionRollback::test_panel")))))
12517 (native-inputs
12518 (list python-pytest
12519 python-setuptools
12520 python-webtest))
12521 (propagated-inputs
12522 (list python-pyramid
12523 python-pyramid-chameleon
12524 python-pyramid-jinja2
12525 python-pyramid-mako
12526 python-selenium
12527 python-sqlalchemy
12528 python-waitress))
12529 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
12530 (synopsis "Pyramid debug toolbar")
12531 (description
12532 "This package provides an interactive HTML debugger for Pyramid
12533application development.")
12534 (license license:bsd-3)))
12535
12536(define-public python-pyramid-jinja2
12537 (package
12538 (name "python-pyramid-jinja2")
12539 (version "2.10.1")
12540 (source
12541 (origin
12542 (method url-fetch)
12543 (uri (pypi-uri "pyramid_jinja2" version))
12544 (sha256
12545 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
12546 (build-system pyproject-build-system)
12547 (arguments
12548 (list
12549 #:test-flags
12550 ;; Two tests failed with assertion not equal.
12551 #~(list "-k" "not test_it_relative_to_package and not test_options")))
12552 (native-inputs
12553 (list python-pytest
12554 python-setuptools
12555 python-webtest))
12556 (propagated-inputs
12557 (list python-jinja2
12558 python-markupsafe
12559 python-pyramid
12560 python-zope-deprecation))
12561 (home-page "https://github.com/Pylons/pyramid_jinja2")
12562 (synopsis "Jinja2 template bindings for the Pyramid web framework")
12563 (description "This package provides Jinja2 template bindings for the
12564Pyramid web framework.")
12565 (license license:repoze)))
12566
12567(define-public python-pyramid-mako
12568 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
12569 ;; master, us the latest commit for now.
12570 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
12571 (revision "0"))
12572 (package
12573 (name "python-pyramid-mako")
12574 (version (git-version "1.1.0" revision commit))
12575 (source
12576 (origin
12577 (method git-fetch)
12578 (uri (git-reference
12579 (url "https://github.com/Pylons/pyramid_mako")
12580 (commit commit)))
12581 (file-name (git-file-name name version))
12582 (sha256
12583 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
12584 (build-system pyproject-build-system)
12585 (native-inputs
12586 (list python-pytest
12587 python-setuptools))
12588 (propagated-inputs
12589 (list python-mako
12590 python-pyramid))
12591 (home-page "https://github.com/Pylons/pyramid_mako")
12592 (synopsis "Mako template bindings for the Pyramid web framework")
12593 (description
12594 "This package provides Mako template bindings for the Pyramid web
12595framework.")
12596 (license license:repoze))))
12597
12598(define-public python-pyramid-retry
12599 (package
12600 (name "python-pyramid-retry")
12601 (version "2.1.1")
12602 (source
12603 (origin
12604 (method url-fetch)
12605 (uri (pypi-uri "pyramid_retry" version))
12606 (sha256
12607 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
12608 (build-system pyproject-build-system)
12609 (native-inputs
12610 (list python-pytest
12611 python-setuptools
12612 python-webtest))
12613 (propagated-inputs
12614 (list python-pyramid
12615 python-zope-interface))
12616 (home-page "https://github.com/Pylons/pyramid_retry")
12617 (synopsis "Pyramid execution policy supporting retrying failed requests")
12618 (description
12619 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
12620and can retry them a configurable number of times under certain \"retryable\"
12621error conditions before indicating a failure to the client.")
12622 (license license:expat)))
12623
12624(define-public python-pyramid-tm
12625 (package
12626 (name "python-pyramid-tm")
12627 (version "2.6")
12628 (source
12629 (origin
12630 (method url-fetch)
12631 (uri (pypi-uri "pyramid_tm" version))
12632 (sha256
12633 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
12634 (build-system pyproject-build-system)
12635 (native-inputs
12636 (list python-pytest
12637 python-setuptools
12638 python-webtest))
12639 (propagated-inputs
12640 (list python-pyramid
12641 python-transaction))
12642 (home-page "https://github.com/Pylons/pyramid_tm")
12643 (synopsis "Centralized transaction management for Pyramid")
12644 (description
12645 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
12646active @url{https://pypi.org/project/transaction/, transaction} as provided by
12647the Python transaction package.")
12648 (license license:repoze)))
12649
12650(define-public python-random-user-agent
12651 (package
12652 (name "python-random-user-agent")
12653 (version "1.0.1")
12654 (source
12655 (origin
12656 (method url-fetch)
12657 (uri (pypi-uri "random_user_agent" version))
12658 (sha256
12659 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
12660 (build-system pyproject-build-system)
12661 (arguments (list #:tests? #f)) ; No tests.
12662 (native-inputs (list python-setuptools))
12663 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
12664 (synopsis "List of user agents")
12665 (description
12666 "This package provides a list of user agents, from a collection of more
12667than 326,000 known user-agents. Users can pick a random one, or select one
12668based on filters.")
12669 (license license:expat)))
12670
12671(define-public python-rangehttpserver
12672 (package
12673 (name "python-rangehttpserver")
12674 (version "1.4.0")
12675 (source
12676 (origin
12677 (method git-fetch)
12678 (uri (git-reference
12679 (url "https://github.com/danvk/RangeHTTPServer")
12680 (commit version)))
12681 (file-name (git-file-name name version))
12682 (sha256
12683 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
12684 (build-system pyproject-build-system)
12685 (native-inputs
12686 (list python-pytest
12687 python-requests
12688 python-setuptools))
12689 (home-page "https://github.com/danvk/RangeHTTPServer")
12690 (synopsis "SimpleHTTPServer with support for range requests")
12691 (description
12692 "This tool provides a simple HTTP server with support for Range
12693requests.")
12694 (license license:asl2.0)))
12695
12696(define-public python-flask-restx
12697 (package
12698 (name "python-flask-restx")
12699 (version "1.3.0")
12700 (source
12701 (origin
12702 (method git-fetch) ;no tests in PyPI archive
12703 (uri (git-reference
12704 (url "https://github.com/python-restx/flask-restx")
12705 (commit version)))
12706 (file-name (git-file-name name version))
12707 (sha256
12708 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
12709 (build-system pyproject-build-system)
12710 (arguments
12711 (list
12712 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
12713 #:test-flags
12714 #~(list "--benchmark-skip"
12715 ;; ValueError: http://www.google.com is not a valid URL. Domain
12716 ;; does not exists.
12717 "--deselect=tests/test_inputs.py::URLTest::test_check"
12718 "-k" (string-join
12719 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
12720 (list "not test_rfc822_value"
12721 "test_iso8601_value"
12722 ;; assert 404 == 2000
12723 "test_specs_endpoint_host_and_subdomain"
12724 ;; ValueError: [email protected] is not a valid email
12725 "test_valid_value_check")
12726 " and not "))))
12727 (native-inputs
12728 (list python-blinker
12729 python-faker
12730 python-pytest
12731 python-pytest-benchmark
12732 python-pytest-flask
12733 python-pytest-mock
12734 python-setuptools))
12735 (propagated-inputs
12736 (list python-aniso8601
12737 python-flask
12738 python-importlib-resources
12739 python-jsonschema
12740 python-pytz
12741 python-werkzeug))
12742 (home-page "https://github.com/python-restx/flask-restx")
12743 (synopsis
12744 "Framework for fast, easy and documented API development with Flask")
12745 (description
12746 "Flask-RESTX is an extension for Flask that adds support for quickly building
12747REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
12748 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
12749decorators and tools to describe your API and expose its documentation properly using
12750Swagger.")
12751 (license license:bsd-3)))
12752
12753(define-public python-flask-socketio
12754 (package
12755 (name "python-flask-socketio")
12756 (version "5.6.1")
12757 (source
12758 (origin
12759 (method git-fetch)
12760 (uri (git-reference
12761 (url "https://github.com/miguelgrinberg/Flask-SocketIO/")
12762 (commit (string-append "v" version))))
12763 (file-name (git-file-name name version))
12764 (sha256
12765 (base32 "1bs594bxggwn78yhf86whv6bcs8gb7mhrm5dnk5x4c3jb20nhfmm"))))
12766 (build-system pyproject-build-system)
12767 (native-inputs
12768 (list python-pytest
12769 python-redis
12770 python-setuptools))
12771 (propagated-inputs
12772 (list python-flask
12773 python-socketio))
12774 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
12775 (synopsis "Socket.IO integration for Flask applications")
12776 (description "Socket.IO integration for Flask applications")
12777 (license license:expat)))
12778
12779(define-public python-manuel
12780 (package
12781 (name "python-manuel")
12782 (version "1.13.0")
12783 (source
12784 (origin
12785 (method url-fetch)
12786 (uri (pypi-uri "manuel" version))
12787 (sha256
12788 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
12789 (build-system pyproject-build-system)
12790 (arguments
12791 (list
12792 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
12793 #:tests? #f))
12794 (propagated-inputs
12795 (list python-setuptools)) ;install requires
12796 (home-page "https://pypi.org/project/manuel/")
12797 (synopsis "Build tested documentation")
12798 (description
12799 "Manuel lets you mix and match traditional doctests with custom test syntax.")
12800 (license license:asl2.0)))
12801
12802(define-public python-marshmallow-jsonapi
12803 (package
12804 (name "python-marshmallow-jsonapi")
12805 (version "0.26.0")
12806 (source
12807 (origin
12808 (method git-fetch)
12809 (uri (git-reference
12810 ;; XXX: Deprecated upstream: This repository has been archived
12811 ;; by the owner on Jun 6, 2024. It is now read-only.
12812 ;; Using a maintained fork. The pypi name of this fork
12813 ;; is marshmallow-jsonapi-minfork.
12814 (url "https://github.com/tadams42/marshmallow-jsonapi")
12815 (commit version)))
12816 (file-name (git-file-name name version))
12817 (sha256
12818 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
12819 (build-system pyproject-build-system)
12820 (native-inputs
12821 (list python-faker
12822 python-flask
12823 python-pytest
12824 python-setuptools))
12825 (propagated-inputs (list python-marshmallow))
12826 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
12827 (synopsis "JSON:API 1.0 formatting with Marshmallow")
12828 (description
12829 "The marshmallow-jsonapi package provides a simple way to produce
12830@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
12831framework. It includes optional utilities to integrate with Flask. This is a
12832forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
12833 (license license:expat)))
12834
12835(define-public python-pecan
12836 (package
12837 (name "python-pecan")
12838 (version "1.8.0")
12839 (source
12840 (origin
12841 (method git-fetch)
12842 (uri (git-reference
12843 (url "https://github.com/pecan/pecan")
12844 (commit version)))
12845 (file-name (git-file-name name version))
12846 (sha256
12847 (base32 "0w693jpnjy358992f3jrrlf31knkqn0jvz2jx0iz7ziikprc61p8"))))
12848 (build-system pyproject-build-system)
12849 (arguments
12850 (list
12851 #:test-flags '(list "--pyargs" "pecan")))
12852 (native-inputs
12853 (list gunicorn
12854 python-genshi
12855 python-jinja2
12856 python-pytest
12857 python-sqlalchemy-2
12858 python-webtest))
12859 (propagated-inputs
12860 (list python-mako
12861 python-webob))
12862 (home-page "http://github.com/pecan/pecan")
12863 (synopsis "WSGI object-dispatching web framework")
12864 (description "This package provides a WSGI object-dispatching web
12865framework, designed to be lean and fast, with few dependencies.")
12866 (license license:bsd-3)))
12867
12868(define-public python-persistent
12869 (package
12870 (name "python-persistent")
12871 (version "6.1.1")
12872 (source
12873 (origin
12874 (method git-fetch)
12875 (uri (git-reference
12876 (url "https://github.com/zopefoundation/persistent/")
12877 (commit version)))
12878 (file-name (git-file-name name version))
12879 (sha256
12880 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
12881 (build-system pyproject-build-system)
12882 (arguments
12883 (list
12884 #:phases
12885 #~(modify-phases %standard-phases
12886 (replace 'check
12887 (lambda* (#:key tests? #:allow-other-keys)
12888 (if tests?
12889 (invoke "zope-testrunner" "--test-path=src"
12890 ;; XXX: Ignore doc tests.
12891 "!persistent.tests.test_docs")
12892 (format #t "test suite not run~%")))))))
12893 (propagated-inputs
12894 (list python-cffi
12895 python-zope-deferredimport
12896 python-zope-interface
12897 python-zope-testrunner))
12898 (native-inputs
12899 (list python-manuel python-zope-testrunner python-setuptools))
12900 (home-page "https://github.com/zopefoundation/persistent/")
12901 (synopsis "Translucent persistent objects")
12902 (description
12903 "This package contains a generic persistence implementation for Python.
12904It forms the core protocol for making objects interact \"transparently\" with
12905a database such as the ZODB.")
12906 (license license:zpl2.1)))
12907
12908(define-public python-transaction
12909 (package
12910 (name "python-transaction")
12911 (version "5.0")
12912 (source
12913 (origin
12914 (method url-fetch)
12915 (uri (pypi-uri "transaction" version))
12916 (sha256
12917 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
12918 (build-system pyproject-build-system)
12919 (native-inputs
12920 (list python-pytest
12921 python-setuptools))
12922 (propagated-inputs
12923 (list python-zope-interface))
12924 (home-page "https://github.com/zopefoundation/transaction")
12925 (synopsis "Transaction management for Python")
12926 (description "This package contains a generic transaction implementation
12927for Python. It is mainly used by the ZODB.")
12928 (license license:zpl2.1)))
12929
12930(define-public python-truststore
12931 (package
12932 (name "python-truststore")
12933 (version "0.10.4")
12934 (source
12935 (origin
12936 (method url-fetch)
12937 (uri (pypi-uri "truststore" version))
12938 (sha256
12939 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
12940 (build-system pyproject-build-system)
12941 (arguments
12942 (list #:tests? #f)) ;all tests require Internet access
12943 (native-inputs
12944 (list python-flit-core))
12945 (home-page "https://github.com/sethmlarson/truststore")
12946 (synopsis "Verify certificates using native system trust stores")
12947 (description
12948 "Truststore is a library which exposes native system certificate stores (ie
12949\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
12950Python applications no longer need to rely on certifi as a root certificate
12951store.")
12952 (license license:expat)))
12953
12954(define-public python-robot-detection
12955 (package
12956 (name "python-robot-detection")
12957 (version "0.4.0")
12958 (source
12959 (origin
12960 (method git-fetch)
12961 (uri (git-reference
12962 (url "https://github.com/rory/robot-detection")
12963 (commit (string-append "v" version))))
12964 (file-name (git-file-name name version))
12965 (sha256
12966 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
12967 (build-system pyproject-build-system)
12968 (arguments (list #:test-backend #~'unittest))
12969 (native-inputs (list python-setuptools))
12970 (propagated-inputs (list python-six))
12971 (home-page "https://github.com/rory/robot-detection")
12972 (synopsis "Detect web crawlers")
12973 (description
12974 "@code{robot_detection} is a python module to detect if a given HTTP User
12975Agent is a web crawler. It uses the list of registered robots from
12976@url{http://www.robotstxt.org}.")
12977 (license license:gpl3+)))
12978
12979(define-public python-robotframework-requests
12980 (package
12981 (name "python-robotframework-requests")
12982 (version "0.9.7")
12983 (source
12984 (origin
12985 (method git-fetch) ; no tests in PyPI release
12986 (uri (git-reference
12987 (url "https://github.com/MarketSquare/robotframework-requests")
12988 (commit (string-append "v" version))))
12989 (file-name (git-file-name name version))
12990 (sha256
12991 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
12992 (build-system pyproject-build-system)
12993 (native-inputs
12994 (list python-pytest
12995 python-setuptools
12996 python-wheel))
12997 (propagated-inputs
12998 (list python-requests
12999 python-robotframework))
13000 (home-page "https://github.com/MarketSquare/robotframework-requests")
13001 (synopsis "Robot Framework keyword library wrapper around requests")
13002 (description
13003 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
13004Framework} library aimed to provide HTTP API testing functionalities by
13005wrapping the @code{requests} Python library.")
13006 (license license:expat)))
13007
13008(define-public python-pysolr
13009 (package
13010 (name "python-pysolr")
13011 (version "3.10.0")
13012 (source
13013 (origin
13014 (method url-fetch)
13015 (uri (pypi-uri "pysolr" version))
13016 (sha256
13017 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
13018 (build-system pyproject-build-system)
13019 (arguments
13020 '(#:tests? #f)) ; Tests require network access.
13021 (native-inputs
13022 (list python-setuptools
13023 python-setuptools-scm
13024 python-wheel))
13025 (propagated-inputs
13026 (list python-requests))
13027 (home-page "https://github.com/django-haystack/pysolr/")
13028 (synopsis "Lightweight python wrapper for Apache Solr")
13029 (description
13030 "This module provides an interface that queries the Apache Solr server
13031using a pure Python implementation.")
13032 (license license:bsd-3)))
13033
13034(define-public python-pyjsparser
13035 ;; XXX: This project is potentially abandonware, consider to remove in next
13036 ;; refresh cycle, see:
13037 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
13038 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
13039 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
13040 (package
13041 (name "python-pyjsparser")
13042 (version "2.7.1")
13043 (source
13044 (origin
13045 (method url-fetch)
13046 (uri (pypi-uri "pyjsparser" version))
13047 (sha256
13048 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
13049 (build-system pyproject-build-system)
13050 (arguments
13051 '(#:tests? #f)) ;no tests in PyPI
13052 (native-inputs (list python-setuptools))
13053 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
13054 (synopsis "Fast JavaScript parser")
13055 (description
13056 "This package provides a fast JavaScript parser (based on esprima.js)")
13057 (license license:expat)))
13058
13059(define-public python-js2py
13060 (package
13061 (name "python-js2py")
13062 (properties '((commit . "2e017b86e2f18a6c8a842293b1687f2ce7baa12e")
13063 (revision . "0")))
13064 (version (git-version "0.74"
13065 (assoc-ref properties 'revision)
13066 (assoc-ref properties 'commit)))
13067 (source
13068 (origin
13069 (method git-fetch)
13070 (uri (git-reference
13071 (url "https://github.com/PiotrDabkowski/Js2Py")
13072 (commit (assoc-ref properties 'commit))))
13073 (file-name (git-file-name name version))
13074 (sha256
13075 (base32 "0rsac03shkm0yxq91hzxdvhb96wy168bxdw8azi25bvlm8s3l27p"))
13076 (patches
13077 (list
13078 (origin
13079 (method url-fetch)
13080 (uri (string-append "https://github.com/PiotrDabkowski/Js2Py/commit"
13081 "/fd7df4a91fb08060914c7b1d9e94583d18f3371b"
13082 ".patch"))
13083 (file-name (string-append name "-" version "-pull-327.patch"))
13084 (sha256
13085 (base32 "14v89v8qqrsq0d63xbilkvx19l1rk59mlrbxvd4sj138lk7160ki")))))))
13086 (build-system pyproject-build-system)
13087 (arguments
13088 (list #:tests? #f)) ; tests require Node
13089 (native-inputs
13090 (list python-setuptools))
13091 (propagated-inputs
13092 (list python-pyjsparser
13093 python-six
13094 python-tzlocal))
13095 (home-page "https://github.com/PiotrDabkowski/Js2Py")
13096 (synopsis "JavaScript to Python translator")
13097 (description
13098 "This package provides a JavaScript to Python translator and a JavaScript
13099interpreter written in pure Python.")
13100 (license license:expat)))
13101
13102(define-public python-http-ece
13103 (package
13104 (name "python-http-ece")
13105 (version "1.2.1")
13106 (source
13107 (origin
13108 (method git-fetch)
13109 (uri (git-reference
13110 (url "https://github.com/web-push-libs/encrypted-content-encoding")
13111 (commit (string-append "v" version))))
13112 (file-name (git-file-name name version))
13113 (sha256
13114 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
13115 (build-system pyproject-build-system)
13116 (arguments
13117 `(#:phases
13118 (modify-phases %standard-phases
13119 (add-after 'unpack 'change-directory
13120 (lambda _ (chdir "python") #t)))))
13121 (native-inputs
13122 (list python-pytest python-setuptools))
13123 (propagated-inputs
13124 (list python-cryptography))
13125 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
13126 (synopsis "Encrypted Content Encoding for HTTP")
13127 (description
13128 "This package provides a simple implementation of Encrypted Content
13129Encoding for HTTP.")
13130 (license license:expat)))
13131
13132(define-public python-imap-tools
13133 (package
13134 (name "python-imap-tools")
13135 (version "1.9.0")
13136 (source
13137 (origin
13138 (method git-fetch) ; no tests in PyPI release
13139 (uri (git-reference
13140 (url "https://github.com/ikvk/imap_tools")
13141 (commit (string-append "v" version))))
13142 (file-name (git-file-name name version))
13143 (sha256
13144 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
13145 (arguments
13146 (list
13147 #:test-flags
13148 ;; Tests require a network connection
13149 #~(list "-k" (string-append "not test_action"
13150 " and not test_attributes"
13151 " and not test_connection"
13152 " and not test_folders"
13153 " and not test_idle"
13154 " and not test_live"))))
13155 (build-system pyproject-build-system)
13156 (native-inputs
13157 (list python-pytest python-setuptools python-wheel))
13158 (home-page "https://github.com/ikvk/imap_tools")
13159 (synopsis "Work with email and mailbox by IMAP")
13160 (description
13161 "This Python library provides tools to deal with email and mailboxes
13162over IMAP:
13163
13164@itemize
13165@item Parsed email message attributes
13166@item Query builder for searching emails
13167@item Work with emails in folders (copy, delete, flag, move, seen)
13168@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
13169@end itemize")
13170 (license license:asl2.0)))
13171
13172(define-public python-giturlparse
13173 (package
13174 (name "python-giturlparse")
13175 (version "0.12.0")
13176 (source
13177 (origin
13178 (method git-fetch)
13179 (uri (git-reference
13180 (url "https://github.com/nephila/giturlparse")
13181 (commit version)))
13182 (file-name (git-file-name name version))
13183 (sha256
13184 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
13185 (build-system pyproject-build-system)
13186 (native-inputs (list python-pytest python-setuptools))
13187 (home-page "https://github.com/nephila/giturlparse")
13188 (synopsis "Git URL parsing module")
13189 (description
13190 "This package provides a git URL parsing module which supports parsing
13191and rewriting of remote git URLs from various hosting providers.")
13192 (license license:asl2.0)))
13193
13194(define-public python-hstspreload
13195 (package
13196 (name "python-hstspreload")
13197 (version "2025.1.1")
13198 (source
13199 (origin
13200 (method git-fetch)
13201 (uri (git-reference
13202 (url "https://github.com/sethmlarson/hstspreload")
13203 (commit version)))
13204 (file-name (git-file-name name version))
13205 (sha256
13206 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
13207 (build-system pyproject-build-system)
13208 (arguments (list #:tests? #f)) ; tests require external resources.
13209 (native-inputs (list python-setuptools))
13210 (home-page "https://github.com/sethmlarson/hstspreload")
13211 (synopsis "Chromium HSTS Preload list as a Python package")
13212 (description
13213 "@code{python-hstspreload} contains Chromium HSTS Preload list
13214as a Python package.")
13215 (license license:bsd-3)))
13216
13217(define-public python-sanic-routing
13218 (package
13219 (name "python-sanic-routing")
13220 (version "23.12.0")
13221 (source
13222 (origin
13223 (method url-fetch)
13224 (uri (pypi-uri "sanic-routing" version))
13225 (sha256
13226 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
13227 (build-system pyproject-build-system)
13228 (arguments
13229 ;; PyPi sources does not contain tests, recursive dependency on
13230 ;; python-sanic.
13231 (list #:tests? #f))
13232 (native-inputs (list python-setuptools python-wheel))
13233 (home-page "https://github.com/sanic-org/sanic-routing/")
13234 (synopsis "Routing component for Sanic")
13235 (description "Internal package for @code{python-sanic}, which provides
13236the @code{BasicRouter}.")
13237 (license license:expat)))
13238
13239(define-public python-sanic-testing
13240 (package
13241 (name "python-sanic-testing")
13242 (version "24.6.0")
13243 (source
13244 (origin
13245 (method git-fetch)
13246 (uri (git-reference
13247 (url "https://github.com/sanic-org/sanic-testing/")
13248 (commit (string-append "v" version))))
13249 (file-name (git-file-name name version))
13250 (sha256
13251 (base32 "0jk8ji3zjkb0jz15jxmn98yydvzk8djqm2iwcg0d281cmp2j09bf"))))
13252 (build-system pyproject-build-system)
13253 (propagated-inputs (list python-httpx))
13254 (native-inputs
13255 (list python-pytest
13256 python-pytest-asyncio
13257 python-sanic-minimal
13258 python-setuptools))
13259 (home-page "https://github.com/sanic-org/sanic-testing/")
13260 (synopsis "Test clients for Sanic")
13261 (description "Internal package for @code{python-sanic}, which is
13262meant to be the core testing utility and clients for testing Sanic
13263applications.")
13264 (license license:expat)))
13265
13266(define-public python-sanic
13267 (package
13268 (name "python-sanic")
13269 (version "25.12.1")
13270 (source
13271 (origin
13272 (method url-fetch)
13273 (uri (pypi-uri "sanic" version))
13274 (sha256
13275 (base32 "0zxll83cvmcpiad3rri7cn9y8wi8xn7x0b00dimg0c20irhbylbv"))
13276 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
13277 (modules '((guix build utils)))
13278 (snippet #~(substitute* "setup.py"
13279 (("setuptools>=[0-9.]*")
13280 "setuptools")))))
13281 (build-system pyproject-build-system)
13282 (arguments
13283 (list
13284 #:test-flags
13285 #~(list "--asyncio-mode=auto"
13286 "--ignore=tests/benchmark/"
13287 "--ignore=tests/typing/test_typing.py"
13288 ;; Most tests hang or fail
13289 "--ignore=tests/test_cli.py"
13290 "--ignore=tests/worker/test_worker_serve.py"
13291 "-k"
13292 (string-append
13293 ;; PyPi sources lack examples module.
13294 "not test_gunicorn_"
13295 ;; Does not expect brotli and reordered headers.
13296 " and not test_raw_headers"
13297 ;; These look like buggy testcases.
13298 " and not test_zero_downtime"
13299 " and not test_non_default_uvloop_config_raises_warning"
13300 " and not test_listeners_triggered"
13301 " and not test_keep_alive_connection_context"
13302 " and not test_keep_alive_client_timeout"
13303 " and not test_conflicting_body_methods_overload"
13304 " and not test_unix_connection"
13305 ;; Unclear why they fail since core-updates merge.
13306 " and not test_missing_sni"
13307 " and not test_no_matching_cert"
13308 " and not test_wildcards"
13309 ;; These tests fail because subprotocols appear to be
13310 ;; parameterized as None
13311 " and not test_websocket_route_with_subprotocols"
13312 ;; AF_UNIX path too long
13313 " and not test_setup_and_teardown_unix"
13314 " and not test_configure_socket"
13315 ;; Freezes
13316 " and not test_server_run_with_repl"
13317 " and not test_server_run"
13318 " and not test_no_workers"
13319 ;; Raises DaemonError: Group 'root' does not exist
13320 " and not test_validate_user_sets_uid_and_gid"
13321 " and not test_validate_group_sets_gid"
13322 ;; Raises AssertionError:
13323 ;; assert 'text/xml; charset=utf-8' == 'application/xml'
13324 " and not test_guess_content_type"
13325 ;; Don't know.
13326 " and not test_chained_exception_handler"))))
13327 (propagated-inputs
13328 (list python-aiofiles
13329 python-aioquic
13330 python-html5tagger
13331 python-httptools
13332 python-multidict
13333 python-sanic-routing
13334 python-tracerite
13335 python-typing-extensions
13336 python-ujson
13337 python-uvloop
13338 python-websockets))
13339 (native-inputs
13340 (list python-bandit
13341 python-beautifulsoup4
13342 python-chardet
13343 python-cryptography
13344 python-docutils
13345 python-pygments
13346 python-pytest
13347 python-pytest-asyncio
13348 python-pytest-benchmark
13349 python-pytest-sanic
13350 python-pytest-xdist
13351 python-sanic-testing
13352 python-setuptools
13353 python-slotscheck
13354 python-towncrier
13355 python-types-ujson
13356 python-uvicorn))
13357 (home-page "https://github.com/sanic-org/sanic/")
13358 (synopsis "Async Python web server/framework")
13359 (description
13360 "Sanic is a Python web server and web framework that's written to go
13361fast. It allows the usage of the @code{async/await} syntax added in Python
133623.5, which makes your code non-blocking and speedy.")
13363 (license license:expat)))
13364
13365;; A bare minimal package, mainly to use in tests and reduce closure size.
13366;; Tests are left out in the main package to slim down native-inputs and
13367;; propagated-inputs.
13368(define-public python-sanic-minimal
13369 (package/inherit python-sanic
13370 (name "python-sanic-minimal")
13371 (arguments (list #:tests? #f))
13372 (native-inputs (list python-setuptools))
13373 (propagated-inputs
13374 (list python-aiofiles
13375 python-html5tagger
13376 python-httptools
13377 python-multidict
13378 python-sanic-routing
13379 python-tracerite
13380 python-typing-extensions
13381 python-ujson
13382 python-uvloop
13383 python-websockets))))
13384
13385;;; Deprecated on <2026-10-08>.
13386(define-deprecated-package python-sanic-bootstrap python-sanic-minimal)
13387
13388(define-public python-socketio
13389 (package
13390 (name "python-socketio")
13391 (version "5.16.4")
13392 (source
13393 (origin
13394 (method git-fetch)
13395 (uri (git-reference
13396 (url "https://github.com/miguelgrinberg/python-socketio/")
13397 (commit (string-append "v" version))))
13398 (file-name (git-file-name name version))
13399 (sha256
13400 (base32 "0695mq1nijlljkmpgn3nk6gfv34rzpgxrdsld1l1vix6gxyxna0y"))))
13401 (build-system pyproject-build-system)
13402 (arguments
13403 (list
13404 ;; tests: 642 passed, 5 warnings
13405 #:test-flags
13406 ;; Tests freeze.
13407 #~(list "--ignore=tests/async/test_admin.py"
13408 "--ignore=tests/common/test_admin.py")))
13409 (native-inputs
13410 (list python-msgpack
13411 python-pytest
13412 python-pytest-asyncio
13413 python-pytest-timeout
13414 python-redis
13415 python-setuptools
13416 python-uvicorn
13417 python-valkey))
13418 (propagated-inputs
13419 (list python-bidict
13420 python-engineio
13421 ;; [optional]
13422 python-aiohttp
13423 python-requests
13424 python-websocket-client))
13425 (home-page "https://github.com/miguelgrinberg/python-socketio/")
13426 (synopsis "Python Socket.IO server")
13427 (description
13428 "This package provides a Python implementation of the @code{Socket.IO}
13429realtime client and server.")
13430 (license license:expat)))
13431
13432(define-public python-socks
13433 (package
13434 (name "python-socks")
13435 (version "2.8.1")
13436 (source
13437 (origin
13438 (method git-fetch)
13439 (uri (git-reference
13440 (url "https://github.com/romis2012/python-socks")
13441 (commit (string-append "v" version))))
13442 (file-name (git-file-name name version))
13443 (sha256
13444 (base32 "1x95i9w3izivdgz6hadh5kiil12i4ljk4ashgh3g0rjv2rw33vhj"))))
13445 (build-system pyproject-build-system)
13446 (propagated-inputs (list python-trio))
13447 (native-inputs
13448 (list python-anyio
13449 python-flask
13450 python-pytest
13451 python-pytest-asyncio
13452 python-pytest-trio
13453 python-setuptools
13454 python-tiny-proxy
13455 python-trustme
13456 python-yarl))
13457 (home-page "https://github.com/romis2012/python-socks")
13458 (synopsis
13459 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
13460 (description
13461 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
13462 functionality.")
13463 (license license:asl2.0)))
13464
13465(define-public python-socksio
13466 (package
13467 (name "python-socksio")
13468 (version "1.0.0")
13469 (source
13470 (origin
13471 (method url-fetch)
13472 (uri (pypi-uri "socksio" version))
13473 (sha256
13474 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
13475 (build-system pyproject-build-system)
13476 (native-inputs
13477 (list python-flit-core python-pytest))
13478 (home-page "https://github.com/sethmlarson/socksio")
13479 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
13480 (description "The @code{socksio} Python module is a client-side sans-I/O
13481SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
13482@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
13483means the library itself does not handle the actual sending of the bytes
13484through the network, it only deals with the implementation details of the
13485SOCKS protocols. It can be paired with any I/O library.")
13486 (license license:expat)))
13487
13488(define-public python-simple-websocket
13489 (package
13490 (name "python-simple-websocket")
13491 (version "1.1.0")
13492 (source
13493 (origin
13494 (method url-fetch)
13495 (uri (pypi-uri "simple_websocket" version))
13496 (sha256
13497 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
13498 (build-system pyproject-build-system)
13499 (arguments
13500 ;; Requires Internet access to resolve example.com
13501 (list #:test-flags '(list "--ignore=tests/test_client.py")))
13502 (propagated-inputs (list python-wsproto))
13503 (native-inputs (list python-pytest
13504 python-setuptools))
13505 (home-page "https://github.com/miguelgrinberg/simple-websocket")
13506 (synopsis "Simple WebSocket server and client for Python")
13507 (description "This package provides a simple @code{WebSocket} server and
13508client for Python.")
13509 (license license:expat)))
13510
13511(define-public python-siosocks
13512 (package
13513 (name "python-siosocks")
13514 (version "0.3.0")
13515 (source
13516 (origin
13517 (method git-fetch)
13518 (uri (git-reference
13519 (url "https://github.com/pohmelie/siosocks")
13520 (commit (string-append "v" version))))
13521 (file-name (git-file-name name version))
13522 (sha256
13523 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
13524 (build-system pyproject-build-system)
13525 (native-inputs
13526 (list python-pytest
13527 python-pytest-asyncio
13528 python-pytest-trio
13529 python-setuptools))
13530 (propagated-inputs (list python-trio))
13531 (home-page "https://github.com/pohmelie/siosocks")
13532 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
13533 (description
13534 "This package provides a Python module and framework for sans-io socks proxy
13535client/server with couple io backends.
13536
13537Features:
13538@itemize
13539@item Only TCP connect (no BIND, no UDP)
13540@item Both client and server
13541@item SOCKS versions: 4, 4a, 5
13542@item SOCKSv5 auth: no auth, username/password
13543@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
13544@item One-shot socks server (@code{python -m siosocks})
13545@end itemize")
13546 (license license:expat)))
13547
13548(define-public python-tiny-proxy
13549 (package
13550 (name "python-tiny-proxy")
13551 (version "0.2.1")
13552 (source
13553 (origin
13554 (method url-fetch)
13555 (uri (pypi-uri "tiny_proxy" version))
13556 (sha256
13557 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
13558 (build-system pyproject-build-system)
13559 ;; There are only a handful of tests and they require the as yet
13560 ;; unpackaged httpx_socks.
13561 (arguments (list #:tests? #false))
13562 (propagated-inputs (list python-anyio))
13563 (native-inputs
13564 (list python-httpx
13565 python-pytest
13566 python-setuptools
13567 python-wheel))
13568 (home-page "https://github.com/romis2012/tiny-proxy")
13569 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
13570 (description "This package provides a simple proxy server (SOCKS4(a),
13571SOCKS5(h), HTTP tunnel).")
13572 (license license:asl2.0)))
13573
13574(define-public python-google-auth
13575 (package
13576 (name "python-google-auth")
13577 (version "2.56.0")
13578 (source
13579 (origin
13580 (method url-fetch)
13581 (uri (pypi-uri "google_auth" version))
13582 (sha256
13583 (base32 "0lx5cw49lfjqvd9vx1vlslrxyh9q0xd6d46np5a2dab9nlqa03zr"))))
13584 (build-system pyproject-build-system)
13585 (propagated-inputs
13586 (list python-aiohttp
13587 python-cryptography
13588 python-pyasn1-modules
13589 python-requests
13590 python-rsa
13591 python-urllib3))
13592 (native-inputs
13593 (list nss-certs-for-test
13594 python-aiohttp
13595 python-aioresponses
13596 python-flask
13597 python-freezegun
13598 python-grpcio
13599 python-oauth2client
13600 python-packaging
13601 python-pyjwt
13602 python-pyopenssl
13603 python-pytest
13604 python-pytest-asyncio
13605 python-pytest-localserver
13606 python-pyu2f
13607 python-requests
13608 python-responses
13609 python-rsa
13610 python-setuptools
13611 python-urllib3))
13612 (home-page "https://github.com/googleapis/google-auth-library-python")
13613 (synopsis "Google Authentication Library")
13614 (description "This library simplifies using Google's various
13615server-to-server authentication mechanisms to access Google APIs.")
13616 (license license:asl2.0)))
13617
13618(define-public python-google-resumable-media
13619 (package
13620 (name "python-google-resumable-media")
13621 (version "2.8.0")
13622 (source
13623 (origin
13624 (method git-fetch)
13625 (uri (git-reference
13626 (url
13627 "https://github.com/googleapis/google-resumable-media-python")
13628 (commit (string-append "v" version))))
13629 (file-name (git-file-name name version))
13630 (sha256
13631 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
13632 (build-system pyproject-build-system)
13633 (arguments
13634 (list
13635 #:test-flags
13636 #~(list
13637 ;; XXX: Missing test_utils.retry.
13638 "--ignore-glob=tests*/system/"
13639 ;; XXX: md5_hash is not mock.sentinel.md5_hash
13640 "-k" (string-join
13641 (list "not test_brotli"
13642 "test_constructor"
13643 "test_decompress")
13644 " and not "))))
13645 (propagated-inputs (list python-google-crc32c))
13646 (native-inputs
13647 (list python-google-auth
13648 python-mock
13649 python-pytest
13650 python-pytest-asyncio
13651 python-setuptools
13652 python-test-utils))
13653 (home-page "https://github.com/googleapis/google-resumable-media-python")
13654 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
13655 (description "This package provides utilities for Google Media Downloads
13656and Resumable Uploads.")
13657 (license license:asl2.0)))
13658
13659(define-public python-googleapis-common-protos
13660 (package
13661 (name "python-googleapis-common-protos")
13662 (version "1.66.0")
13663 (source
13664 (origin
13665 (method git-fetch)
13666 (uri (git-reference
13667 (url "https://github.com/googleapis/python-api-common-protos")
13668 (commit (string-append "v" version))))
13669 (file-name (git-file-name name version))
13670 (sha256
13671 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
13672 (build-system pyproject-build-system)
13673 (propagated-inputs (list python-protobuf))
13674 (native-inputs (list python-pytest python-setuptools))
13675 (home-page "https://github.com/googleapis/python-api-common-protos")
13676 (synopsis "Common protobufs used in Google APIs")
13677 (description
13678 "This package contains Python classes generated from the common protos in
13679the @code{googleapis/api-common-protos} repository.")
13680 (license license:asl2.0)))
13681
13682(define-public python-google-api-core
13683 (package
13684 (name "python-google-api-core")
13685 (version "2.29.0")
13686 (source
13687 (origin
13688 (method git-fetch)
13689 (uri (git-reference
13690 (url "https://github.com/googleapis/python-api-core")
13691 (commit (string-append "v" version))))
13692 (file-name (git-file-name name version))
13693 (sha256
13694 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
13695 (build-system pyproject-build-system)
13696 (arguments
13697 (list
13698 #:test-flags
13699 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13700 ;; deprecated and scheduled for removal in a future version. Use
13701 ;; timezone-aware objects to represent datetimes in UTC:
13702 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13703 #~(list "-W" "ignore::DeprecationWarning")))
13704 (propagated-inputs
13705 (list python-google-auth
13706 python-googleapis-common-protos
13707 python-protobuf
13708 python-proto-plus
13709 python-requests))
13710 (native-inputs
13711 (list python-mock
13712 python-pytest
13713 python-pytest-asyncio
13714 python-pytest-mock
13715 python-setuptools))
13716 (home-page "https://github.com/googleapis/python-api-core")
13717 (synopsis "Google API client core library")
13718 (description
13719 "This library defines common helpers used by all Google API clients.")
13720 (license license:asl2.0)))
13721
13722(define-public python-google-cloud-core
13723 (package
13724 (name "python-google-cloud-core")
13725 (version "2.5.0")
13726 (source
13727 (origin
13728 (method git-fetch)
13729 (uri (git-reference
13730 (url "https://github.com/googleapis/python-cloud-core")
13731 (commit (string-append "v" version))))
13732 (file-name (git-file-name name version))
13733 (sha256
13734 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
13735 (build-system pyproject-build-system)
13736 (arguments
13737 (list
13738 #:test-flags
13739 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13740 ;; deprecated and scheduled for removal in a future version. Use
13741 ;; timezone-aware objects to represent datetimes in UTC:
13742 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13743 #~(list "-W" "ignore::DeprecationWarning")))
13744 (propagated-inputs (list python-google-api-core python-google-auth))
13745 (native-inputs
13746 (list python-grpcio
13747 python-grpcio-status
13748 python-pytest
13749 python-setuptools))
13750 (home-page "https://github.com/googleapis/python-cloud-core")
13751 (synopsis "Google Cloud API client core library")
13752 (description
13753 "This library defines common helpers (e.g. base @code{Client} classes)
13754used by all of the @code{google-cloud-*} packages.")
13755 (license license:asl2.0)))
13756
13757(define-public python-google-cloud-storage
13758 (package
13759 (name "python-google-cloud-storage")
13760 (version "2.19.0")
13761 (source
13762 (origin
13763 (method git-fetch)
13764 (uri (git-reference
13765 (url "https://github.com/googleapis/python-storage")
13766 (commit (string-append "v" version))))
13767 (file-name (git-file-name name version))
13768 (sha256
13769 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
13770 (build-system pyproject-build-system)
13771 (arguments
13772 (list
13773 #:test-flags
13774 #~(list
13775 ;; XXX: Missing test_utils.retry.
13776 "--ignore=tests/system/"
13777 ;; Needs docker.
13778 "--ignore=tests/conformance/"
13779 ;; XXX: Deprecations.
13780 "-k" (string-join
13781 (list "not test_set_api_request_attr"
13782 "test_create_bucket_w_custom_endpoint"
13783 "test_ctor_w_api_endpoint_override"
13784 "test_ctor_w_custom_endpoint_use_auth"
13785 "test_list_buckets_w_custom_endpoint")
13786 " and not ")
13787 "tests")))
13788 (native-inputs
13789 (list python-googleapis-common-protos
13790 python-mock
13791 python-pytest
13792 python-test-utils
13793 python-setuptools))
13794 (propagated-inputs
13795 (list python-google-api-core
13796 python-google-auth
13797 python-google-cloud-core
13798 python-google-resumable-media
13799 python-protobuf
13800 python-requests))
13801 (home-page "https://github.com/googleapis/python-storage")
13802 (synopsis "Google Cloud Storage API client library")
13803 (description
13804 "Google Cloud Storage allows you to store data on Google infrastructure,
13805and it can be used to distribute large data objects to users via direct
13806download. This package provides a Google Cloud Storage API client library for
13807Python.")
13808 (license license:asl2.0)))
13809
13810(define-public python-smart-open
13811 (package
13812 (name "python-smart-open")
13813 (version "7.3.0")
13814 (source
13815 (origin
13816 (method git-fetch) ;no tests in PyPI archive
13817 (uri (git-reference
13818 (url "https://github.com/piskvorky/smart_open")
13819 (commit (string-append "v" version))))
13820 (file-name (git-file-name name version))
13821 (sha256
13822 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
13823 (build-system pyproject-build-system)
13824 (arguments
13825 (list
13826 #:test-flags
13827 #~(list "--ignore=ci_helpers/"
13828 "--ignore=integration-tests/"
13829 ;; FIXME: Enable when guix/guix#1436 is resolved.
13830 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
13831 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
13832 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
13833 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
13834 "--ignore=tests/test_gcs.py")))
13835 (propagated-inputs
13836 (list python-azure-common
13837 python-azure-core
13838 python-azure-storage-blob
13839 python-boto3
13840 ;; python-google-cloud-storage ;see guix/guix#1436
13841 python-paramiko
13842 python-requests
13843 python-wrapt
13844 python-zstandard))
13845 (native-inputs
13846 (list python-numpy
13847 python-moto
13848 python-pytest
13849 python-pytest-rerunfailures
13850 python-responses
13851 python-setuptools
13852 python-setuptools-scm
13853 python-wheel))
13854 (home-page "https://github.com/piskvorky/smart_open")
13855 (synopsis "Utilities for streaming large files")
13856 (description
13857 "This package provides utilities for streaming large files (S3, HDFS,
13858GCS, Azure Blob Storage, gzip, bz2, etc.)")
13859 (license license:expat)))
13860
13861(define-public python-smart-open-6
13862 (package
13863 (inherit python-smart-open)
13864 (name "python-smart-open")
13865 (version "6.4.0")
13866 (source
13867 (origin
13868 (method git-fetch)
13869 (uri (git-reference
13870 (url "https://github.com/piskvorky/smart_open")
13871 (commit (string-append "v" version))))
13872 (file-name (git-file-name name version))
13873 (sha256
13874 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
13875 (arguments
13876 (list
13877 ;; XXX: Tests need some older native inputs, disable for now.
13878 #:tests? #f))))
13879
13880(define-public python-w3lib
13881 (package
13882 (name "python-w3lib")
13883 (version "2.3.1")
13884 (source
13885 (origin
13886 (method url-fetch)
13887 (uri (pypi-uri "w3lib" version))
13888 (sha256
13889 (base32
13890 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
13891 (build-system pyproject-build-system)
13892 (native-inputs
13893 (list python-pytest python-setuptools python-wheel))
13894 (home-page "https://github.com/scrapy/w3lib")
13895 (synopsis "Python library of web-related functions")
13896 (description
13897 "This is a Python library of web-related functions, such as: remove
13898comments, or tags from HTML snippets, extract base url from HTML snippets,
13899translate entities on HTML strings, among other things.")
13900 (license license:bsd-3)))
13901
13902(define-public python-webcolors
13903 (package
13904 (name "python-webcolors")
13905 (version "25.10.0")
13906 (source
13907 (origin
13908 (method git-fetch)
13909 (uri (git-reference
13910 (url "https://github.com/ubernostrum/webcolors")
13911 (commit version)))
13912 (sha256
13913 (base32 "1wknzir5252y30wcpwxb04ngmrdw1llzqmrpiajyhkm81x2lgrym"))))
13914 (build-system pyproject-build-system)
13915 (native-inputs
13916 (list python-pdm-backend python-pytest))
13917 (home-page "https://github.com/ubernostrum/webcolors")
13918 (synopsis "HTML/CSS color definitions library")
13919 (description "@code{python-webcolors} is a module for working with
13920HTML/CSS color definitions. Normalizing and converting between the following
13921formats is supported.
13922@itemize
13923@item Specification-defined color names
13924@item Six-digit hexadecimal
13925@item Three-digit hexadecimal
13926@item Integer rgb() triplet
13927@item Percentage rgb() triplet
13928@end itemize
13929Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
13930can be handled by the @code{colorsys} module in the Python standard library.")
13931 (license license:bsd-3)))
13932
13933(define-public python-woob
13934 ;; TODO: woob requires backends which are currently installed on the fly in
13935 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
13936 ;; them in the store instead. Many modules are included in the modules
13937 ;; directory in the source tree, but it is unclear how to install them.
13938 ;; Many modules require extra dependencies though, so maybe they should be
13939 ;; packaged independently of woob itself.
13940 (package
13941 (name "python-woob")
13942 (version "3.7")
13943 (source
13944 (origin
13945 (method git-fetch)
13946 (uri (git-reference
13947 (url "https://gitlab.com/woob/woob.git")
13948 (commit version)))
13949 (file-name (git-file-name name version))
13950 (sha256
13951 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
13952 (build-system pyproject-build-system)
13953 (arguments
13954 (list
13955 #:test-flags
13956 ;; Deselect tests that require DNS lookup.
13957 #~(list
13958 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
13959 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
13960 #:phases
13961 #~(modify-phases %standard-phases
13962 (add-before 'build 'relax-requirements
13963 (lambda _
13964 (substitute* "pyproject.toml"
13965 ;; packaging ~= 23.0
13966 (("\"packaging .*\",")
13967 "")
13968 ;; rich~=13.0
13969 (("\"rich .*\",")
13970 "\"rich\",")))))))
13971 (native-inputs
13972 (list nss-certs-for-test
13973 python-pytest
13974 python-setuptools))
13975 (propagated-inputs
13976 (list python-babel
13977 python-colorama
13978 python-cssselect
13979 python-dateutil
13980 python-feedparser
13981 python-html2text
13982 python-lxml
13983 python-packaging
13984 python-pillow
13985 python-prettytable
13986 python-pycountry
13987 python-pyyaml
13988 python-requests
13989 python-responses
13990 python-rich
13991 python-termcolor
13992 python-unidecode))
13993 (home-page "https://woob.tech/")
13994 (synopsis "Woob, Web Outside Of Browsers")
13995 (description
13996 "Woob is a collection of applications able to interact with
13997websites, without requiring the user to open them in a browser. It also
13998provides well-defined APIs to talk to websites lacking one.")
13999 (license license:lgpl3+)))
14000
14001(define-public python-flask-combo-jsonapi
14002 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
14003 (revision "0"))
14004 (package
14005 (name "python-flask-combo-jsonapi")
14006 (version (git-version "1.1.0" revision commit))
14007 (source
14008 (origin
14009 (method git-fetch)
14010 (uri (git-reference
14011 (url "https://github.com/AdCombo/flask-combo-jsonapi")
14012 (commit commit)))
14013 (file-name (git-file-name name version))
14014 (sha256
14015 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
14016 (build-system pyproject-build-system)
14017 (arguments
14018 (list
14019 #:test-flags
14020 #~(list
14021 "-k"
14022 (string-join
14023 (list
14024 ;; XXX: This tests a feature that doesn't make sense when dropping
14025 ;; marshmallow < 3 support.
14026 "not test_compute_schema_propagate_context"
14027 ;; The following tests fail for unknown reasons (see:
14028 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
14029 "test_get_list_with_simple_filter_relationship_custom_qs_api"
14030 "test_get_list_with_simple_filter_relationship_error")
14031 " and not "))
14032 #:phases
14033 #~(modify-phases %standard-phases
14034 (add-after 'unpack 'loosen-requirements
14035 (lambda _
14036 ;; Don't pin specific versions of dependencies.
14037 (substitute* "requirements.txt"
14038 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
14039 (string-append dep "\n"))
14040 (("^marshmallow_jsonapi[=<>].*")
14041 "marshmallow_jsonapi_minfork\n"))
14042 ;; Drop support for marshmallow < 3.
14043 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
14044 "flask_combo_jsonapi/schema.py")
14045 (("from marshmallow\\.base import SchemaABC")
14046 "from marshmallow import Schema")
14047 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
14048 "if isinstance(related_schema_cls, Schema):"))
14049 (substitute* "tests/test_sqlalchemy_data_layer.py"
14050 (("default=None")
14051 "dump_default=None")
14052 (("missing=")
14053 "load_default=")))))))
14054 (propagated-inputs
14055 (list python-flask
14056 python-marshmallow
14057 python-marshmallow-jsonapi
14058 python-simplejson
14059 python-sqlalchemy
14060 python-apispec
14061 python-simplejson
14062 python-six))
14063 (native-inputs
14064 (list python-pytest python-setuptools))
14065 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
14066 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
14067 (description
14068 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
14069APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
14070specification.
14071
14072It tries to combine the power of Flask-Restless with the flexibility of
14073Flask-RESTful to quickly build APIs that fit the complexity of existing
14074real-life projects with legacy data and diverse storage providers.")
14075 (license license:expat))))
14076
14077(define-public python-mwparserfromhell
14078 (package
14079 (name "python-mwparserfromhell")
14080 (version "0.7.2")
14081 (source
14082 (origin
14083 (method git-fetch)
14084 (uri (git-reference
14085 (url "https://github.com/earwig/mwparserfromhell")
14086 (commit (string-append "v" version))))
14087 (file-name (git-file-name name version))
14088 (sha256
14089 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
14090 (build-system pyproject-build-system)
14091 (native-inputs (list python-pytest python-setuptools))
14092 (home-page "https://github.com/earwig/mwparserfromhell")
14093 (synopsis "Python parser for MediaWiki wikicode")
14094 (description
14095 "The MediaWiki Parser From Hell is a python library package that provides
14096a parser for MediaWiki.
14097
14098It exposes parses as normal string objects with additional methods giving
14099access to the special Wikicode features it contains (hyperlinks, tags,
14100templates…). The parser doesn't interpolate strings at all, it remains at a
14101purely formal level.
14102
14103Full documentation may be found at
14104@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
14105 (license license:expat)))
14106
14107(define-public python-tweepy
14108 (package
14109 (name "python-tweepy")
14110 (version "4.16.0")
14111 (source
14112 (origin
14113 (method git-fetch)
14114 (uri
14115 (git-reference
14116 (url "https://github.com/tweepy/tweepy")
14117 (commit (string-append "v" version))))
14118 (file-name (git-file-name name version))
14119 (sha256
14120 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
14121 (build-system pyproject-build-system)
14122 (arguments
14123 ;; tests: 149 passed, 3 skipped, 1 warning
14124 (list #:test-backend #~'unittest
14125 #:test-flags #~(list "discover" "tests")))
14126 (native-inputs
14127 (list nss-certs-for-test
14128 python-flit-core
14129 python-urllib3-1.26
14130 python-vcrpy))
14131 (propagated-inputs
14132 (list python-aiohttp
14133 python-async-lru
14134 python-oauthlib
14135 python-requests
14136 python-requests-oauthlib))
14137 (home-page "https://www.tweepy.org/")
14138 (synopsis "Twitter library for Python")
14139 (description
14140 "This package provides @code{Tweepy}, an easy-to-use Python library for
14141accessing the Twitter API.")
14142 (license license:expat)))
14143
14144(define-public python-quart
14145 (package
14146 (name "python-quart")
14147 (version "0.20.0")
14148 (source
14149 (origin
14150 (method git-fetch)
14151 (uri (git-reference
14152 (url "https://github.com/pallets/quart")
14153 (commit version)))
14154 (file-name (git-file-name name version))
14155 (sha256
14156 (base32 "1gk6vg2cwpn70aald3m50xibjqjamgpz7an11h82w1fig6zmw2il"))))
14157 (build-system pyproject-build-system)
14158 (arguments
14159 (list
14160 #:test-flags
14161 ;; Not sure why test fails; related to a change in dependencies.
14162 #~(list "-k" "not test_cli_blueprints[cli_group2-args2]")))
14163 (native-inputs
14164 (list python-flit-core
14165 python-pytest
14166 python-pytest-asyncio))
14167 (propagated-inputs
14168 (list hypercorn
14169 python-aiofiles
14170 python-blinker
14171 python-click
14172 python-dotenv
14173 python-flask
14174 python-itsdangerous
14175 python-jinja2
14176 python-markupsafe
14177 python-toml
14178 python-werkzeug))
14179 (home-page "https://gitlab.com/pgjones/quart/")
14180 (synopsis "Python ASGI web microframework with the same API as Flask")
14181 (description
14182 "This package provides a Python ASGI web microframework with the same API
14183as Flask.")
14184 (license license:expat)))
14185
14186(define-public python-quart-trio
14187 (package
14188 (name "python-quart-trio")
14189 (version "0.12.0")
14190 (source
14191 (origin
14192 (method url-fetch)
14193 (uri (pypi-uri "quart_trio" version))
14194 (sha256
14195 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
14196 (build-system pyproject-build-system)
14197 (arguments
14198 (list
14199 #:phases
14200 #~(modify-phases %standard-phases
14201 (add-after 'unpack 'remove-coverage-pytest-options
14202 (lambda _
14203 (substitute* "pyproject.toml"
14204 (("--no-cov-on-fail") "")))))))
14205 (native-inputs
14206 (list python-pdm-backend
14207 python-pytest
14208 python-pytest-sugar
14209 python-pytest-trio))
14210 (propagated-inputs
14211 (list hypercorn
14212 python-quart
14213 python-trio))
14214 (home-page "https://github.com/pgjones/quart-trio")
14215 (synopsis "Extension for Quart to support the Trio event loop")
14216 (description
14217 "This package provides a Quart extension to provide Trio support. This
14218is an alternative to using the asyncio event loop present in the Python
14219standard library and supported by default in Quart.")
14220 (license license:expat)))
14221
14222(define-public python-protego
14223 (package
14224 (name "python-protego")
14225 (version "0.4.0")
14226 (source
14227 (origin
14228 (method url-fetch)
14229 (uri (pypi-uri "protego" version))
14230 (sha256
14231 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
14232 (build-system pyproject-build-system)
14233 (native-inputs (list python-pytest python-setuptools python-wheel))
14234 (home-page "https://github.com/scrapy/protego")
14235 (synopsis "Python robots.txt parser with support for modern conventions")
14236 (description "Protego is a pure-Python @file{robots.txt} parser with support
14237for modern conventions.")
14238 (license license:bsd-3)))
14239
14240(define-public python-parsel
14241 (package
14242 (name "python-parsel")
14243 (version "1.10.0")
14244 (source
14245 (origin
14246 (method url-fetch)
14247 (uri (pypi-uri "parsel" version))
14248 (sha256
14249 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
14250 (build-system pyproject-build-system)
14251 (propagated-inputs
14252 (list python-cssselect
14253 python-jmespath
14254 python-lxml
14255 python-typing-extensions
14256 python-w3lib))
14257 (native-inputs
14258 (list python-psutil python-pytest python-setuptools python-wheel))
14259 (home-page "https://github.com/scrapy/parsel")
14260 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
14261 (description "Parsel is a library to extract and remove data from
14262HTML and XML using XPath and CSS selectors, optionally combined with
14263regular expressions.")
14264 (license license:bsd-3)))
14265
14266(define-public python-scrapy
14267 (package
14268 (name "python-scrapy")
14269 (version "2.13.3")
14270 (source
14271 (origin
14272 (method url-fetch)
14273 (uri (pypi-uri "scrapy" version))
14274 (sha256
14275 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
14276 (build-system pyproject-build-system)
14277 (arguments
14278 (list #:test-flags
14279 #~(list "--numprocesses" (number->string (parallel-job-count))
14280 "-k" (string-join
14281 ;; ConnectionRefusedError: [Errno 111] Connection
14282 ;; refused
14283 (list "not test_append"
14284 "test_append_active_mode"
14285 "test_overwrite"
14286 "test_overwrite_active_mode"
14287 "test_persist"
14288 ;; AssertionError
14289 "test_start_deprecated_super")
14290 " and not ")
14291 ;; Skip documentation testing.
14292 "--ignore=docs")
14293 #:phases
14294 #~(modify-phases %standard-phases
14295 (add-before 'check 'prepare-test-environment
14296 (lambda _
14297 (setenv "HOME" "/tmp"))))))
14298 (propagated-inputs
14299 (list python-cryptography
14300 python-cssselect
14301 python-defusedxml
14302 python-itemadapter
14303 python-itemloaders
14304 python-lxml
14305 python-packaging
14306 python-parsel
14307 python-protego
14308 python-pydispatcher
14309 python-pyopenssl
14310 python-pypydispatcher
14311 python-queuelib
14312 python-service-identity
14313 python-tldextract
14314 python-twisted
14315 python-w3lib
14316 python-zope-interface))
14317 (native-inputs
14318 (list nss-certs-for-test
14319 python-hatchling
14320 python-pexpect
14321 python-pytest
14322 python-pytest-xdist
14323 python-setuptools
14324 python-sybil
14325 python-testfixtures))
14326 (home-page "https://scrapy.org")
14327 (synopsis "High-level Web crawling and Web scraping framework")
14328 (description "Scrapy is a fast high-level web crawling and web
14329scraping framework, used to crawl websites and extract structured data
14330from their pages. It can be used for a wide range of purposes, from data
14331mining to monitoring and automated testing.")
14332 (license license:bsd-3)))
14333
14334(define sdmx-test-data
14335 (let* ((commit "cd7899341b46e179e9f19b638478d70197e12c74")
14336 (revision "1")
14337 (name "sdmx-test-data")
14338 (version (git-version "0" revision commit)))
14339 (origin
14340 (method git-fetch)
14341 (uri (git-reference
14342 (url "https://github.com/khaeru/sdmx-test-data")
14343 (commit commit)))
14344 (file-name (git-file-name name version))
14345 (sha256
14346 (base32 "1n9y83raxxpgljbi0wjj27lhmyn19fnc2325a6cchwsa3b65ywv7")))))
14347
14348(define-public python-sdmx1
14349 (package
14350 (name "python-sdmx1")
14351 (version "2.26.0")
14352 (source
14353 (origin
14354 (method git-fetch)
14355 (uri (git-reference
14356 (url "https://github.com/khaeru/sdmx")
14357 (commit (string-append "v" version))))
14358 (file-name (git-file-name name version))
14359 (sha256
14360 (base32 "096c60pxzcw71bc9fj3hpjprrdiia365rqalapxx56g6g1vkgka9"))))
14361 (build-system pyproject-build-system)
14362 (arguments
14363 (list
14364 #:test-flags
14365 #~(list
14366 ;; 804 passed, 122 skipped, 28 deselected, 23 xfailed, 1 xpassed, 3 warnings
14367 ;; XXX: 'Version' object has no attribute 'pre'
14368 "--ignore=sdmx/tests/model/test_version.py"
14369 ;; Most of these tests require network connection.
14370 "--ignore=sdmx/tests/test_client.py"
14371 "--ignore=sdmx/tests/test_sources.py"
14372 "--ignore=sdmx/tests/test_docs.py"
14373 "--ignore=sdmx/tests/test_session.py"
14374 "--ignore=sdmx/tests/writer/test_xml.py"
14375 "--ignore=sdmx/tests/reader/test_xml_v21.py"
14376 "--deselect=sdmx/tests/convert/test_pandas.py::test_dataset_constraint"
14377 ;; Wrong python-flaky version
14378 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas_in_user_cache"
14379 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas"
14380 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v2_1_samples"
14381 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v3_0_samples"
14382 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_doc"
14383 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_message_type"
14384 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_max_errors"
14385 ;; sqlite3.OperationalError
14386 "--deselect=sdmx/tests/util/test_requests.py::TestOfflineAdapter::test_raises")
14387 #:phases
14388 #~(modify-phases %standard-phases
14389 (add-after 'unpack 'fix-version
14390 (lambda _
14391 ;; versioningit needs git tags; patch pyproject.toml to use
14392 ;; static version and create _version.py directly.
14393 (substitute* "pyproject.toml"
14394 (("version.source = \"versioningit\"")
14395 "
14396[tool.hatch.version]
14397path = \"sdmx/_version.py\"")
14398 ((", \"versioningit\"")
14399 ""))
14400 (call-with-output-file "sdmx/_version.py"
14401 (lambda (port)
14402 (format port "__version__ = \"~a\"~%" #$version)))))
14403 (add-before 'check 'pre-check
14404 (lambda _
14405 (setenv "SDMX_TEST_DATA" #$sdmx-test-data)
14406 (setenv "HOME" (dirname (getcwd))))))))
14407 (propagated-inputs
14408 (list python-dateutil
14409 python-lxml
14410 python-pandas
14411 python-platformdirs
14412 python-requests))
14413 (native-inputs
14414 (list python-filelock
14415 python-flaky
14416 python-hatchling
14417 python-jinja2
14418 python-pyarrow
14419 python-pytest
14420 python-pytest-cov
14421 python-pytest-xdist
14422 python-requests-mock
14423 python-requests-cache
14424 python-responses))
14425 (home-page "https://sdmx1.readthedocs.io")
14426 (synopsis "Statistical Data and Metadata eXchange (SDMX) for Python")
14427 (description "This package provides a Python implementation of the
14428SDMX 2.1 and 3.0 standards for Statistical Data and Metadata eXchange.
14429These standards are developed and used by statistical agencies and
14430international organisations. This package can be used to:
14431@itemize
14432@item Explore and retrieve data available from SDMX-REST web services
14433operated by providers including the World Bank, International Monetary
14434Fund, Eurostat, OECD, and United Nations;
14435@item Read and write data and metadata in file formats including
14436SDMX-ML (XML), SDMX-JSON, and SDMX-CSV;
14437@item Convert data and metadata into @code{python-pandas} objects, for
14438use with the analysis, plotting, and other tools in the Python data
14439science ecosystem;
14440@item Apply the SDMX information model (IM) to structure and publish
14441your own data.
14442@end itemize")
14443 (license license:asl2.0)))
14444
14445(define-public python-jstyleson
14446 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
14447 (revision "0"))
14448 (package
14449 (name "python-jstyleson")
14450 (version (git-version "0.0.2" revision commit))
14451 (source
14452 (origin
14453 (method git-fetch)
14454 (uri (git-reference
14455 (url "https://github.com/linjackson78/jstyleson")
14456 (commit commit)))
14457 (file-name (git-file-name name version))
14458 (sha256
14459 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
14460 (build-system pyproject-build-system)
14461 (native-inputs (list python-pytest python-setuptools))
14462 (home-page "https://github.com/linjackson78/jstyleson")
14463 (synopsis "JSON parser supporting js-style comments")
14464 (description
14465 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
14466standard Python @code{json} library, it understands js-style comments.
14467Trailing comma is also supported.")
14468 (license license:expat))))
14469
14470(define-public python-html-text
14471 (package
14472 (name "python-html-text")
14473 (version "0.7.0")
14474 (source
14475 (origin
14476 (method url-fetch)
14477 (uri (pypi-uri "html_text" version))
14478 (sha256
14479 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
14480 (build-system pyproject-build-system)
14481 (native-inputs
14482 (list python-pytest
14483 python-setuptools
14484 python-wheel))
14485 (propagated-inputs
14486 (list python-lxml
14487 python-lxml-html-clean))
14488 (home-page "https://github.com/TeamHG-Memex/html-text")
14489 (synopsis "Extract text from HTML")
14490 (description "HTML to Text is a Python library for extract text from HTML.
14491Contrary to other solution such as LXML or Beautiful Soup, the text extracted
14492with @code{html_text} does not contain elements such as JavaScript or inline
14493styles not normally visible to users. It also normalizes white space
14494characters in a smarter, more visually pleasing style.")
14495 (license license:expat)))
14496
14497(define-public python-mf2py
14498 (package
14499 (name "python-mf2py")
14500 (version "2.0.1")
14501 (source
14502 (origin
14503 (method git-fetch)
14504 (uri (git-reference
14505 (url "https://github.com/microformats/mf2py")
14506 (commit (string-append "v" version))))
14507 (file-name (git-file-name name version))
14508 (sha256
14509 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
14510 (build-system pyproject-build-system)
14511 (native-inputs (list python-mock python-poetry-core python-pytest))
14512 (propagated-inputs
14513 (list python-beautifulsoup4 python-html5lib python-requests))
14514 (home-page "https://github.com/microformats/mf2py")
14515 (synopsis "Python Microformats2 parser")
14516 (description
14517 "This Python library provides a Microformats2 parser implementing the
14518full Microformats2 (mf2) specification, including backward compatibility with
14519Microformats1 (mf1).")
14520 (license license:expat)))
14521
14522(define-public python-wadllib
14523 (package
14524 (name "python-wadllib")
14525 (version "2.0.0")
14526 (source
14527 (origin
14528 (method url-fetch)
14529 (uri (pypi-uri "wadllib" version))
14530 (sha256
14531 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
14532 (build-system pyproject-build-system)
14533 (arguments
14534 (list
14535 ;; XXX: Doctests are currently failing.
14536 #:tests? #f
14537 #:phases
14538 #~(modify-phases %standard-phases
14539 (replace 'check
14540 (lambda* (#:key tests? #:allow-other-keys)
14541 (if tests?
14542 (invoke "zope-testrunner" "--test-path=src")
14543 (format #t "test suite not run~%")))))))
14544 (native-inputs
14545 (list python-multipart python-setuptools python-zope-testrunner))
14546 (propagated-inputs (list python-lazr-uri))
14547 (home-page "https://launchpad.net/wadllib")
14548 (synopsis "Web Application Description Language (WADL) navigation library")
14549 (description "The @code{wadllib} Python library allows navigating HTTP
14550resources using Web Application Description Language (WADL) files as guides.")
14551 (license license:lgpl3)))
14552
14553(define-public python-zeep
14554 (package
14555 (name "python-zeep")
14556 (version "4.3.1")
14557 (source
14558 (origin
14559 (method url-fetch)
14560 (uri (pypi-uri "zeep" version))
14561 (sha256
14562 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
14563 (build-system pyproject-build-system)
14564 (arguments
14565 (list
14566 #:phases
14567 '(modify-phases %standard-phases
14568 (add-after 'unpack 'compatibility
14569 (lambda _
14570 ;; Relax requests-file requirement.
14571 (substitute* "pyproject.toml"
14572 (("\"requests-file.*\",")
14573 "\"requests-file\","))
14574 ;; httpx removed the "proxies" keyword. It's now either "mounts"
14575 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
14576 (substitute* "src/zeep/transports.py"
14577 (("proxies=") "proxy="))))
14578 ;; One test requires write access
14579 (add-before 'check 'set-HOME
14580 (lambda _ (setenv "HOME" (getcwd)))))))
14581 (propagated-inputs
14582 (list python-attrs
14583 python-isodate
14584 python-lxml
14585 python-platformdirs
14586 python-pytz
14587 python-requests
14588 python-requests-file
14589 python-requests-toolbelt))
14590 (native-inputs
14591 (list nss-certs-for-test
14592 python-freezegun
14593 python-pretend
14594 python-pytest
14595 python-pytest-asyncio
14596 python-pytest-httpx
14597 python-requests-mock
14598 python-setuptools
14599 python-wheel))
14600 (home-page "https://docs.python-zeep.org/en/stable/")
14601 (synopsis "Python SOAP client based on lxml / requests")
14602 (description "Zeep is a Python SOAP client. Highlights:
14603
14604@itemize
14605@item Build on top of @code{lxml} and @code{requests}.
14606@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
14607@item Support for WS-Addressing headers.
14608@item Support for WSSE (UserNameToken / x.509 signing).
14609@item Support for @code{asyncio} via @code{httpx}.
14610@item Experimental support for XOP messages.
14611@end itemize")
14612 (license license:expat)))
14613
14614(define-public python-http-client
14615 (package
14616 (name "python-http-client")
14617 (version "3.3.7")
14618 (source
14619 (origin
14620 (method git-fetch)
14621 (uri (git-reference
14622 (url "https://github.com/sendgrid/python-http-client")
14623 (commit version)))
14624 (file-name (git-file-name name version))
14625 (sha256
14626 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
14627 (build-system pyproject-build-system)
14628 (arguments
14629 (list
14630 #:test-backend #~'unittest
14631 #:phases
14632 #~(modify-phases %standard-phases
14633 (add-after 'unpack 'fix-tests
14634 (lambda _
14635 ;; The test expects the copyright to be updated each year.
14636 (substitute* "tests/test_daterange.py"
14637 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
14638 (native-inputs
14639 (list python-setuptools))
14640 (home-page "https://github.com/sendgrid/python-http-client")
14641 (synopsis "HTTP REST client for Python")
14642 (description
14643 "This package provides access to any RESTful or RESTful-like API.")
14644 (license license:expat)))
14645
14646(define-public python-sendgrid
14647 (package
14648 (name "python-sendgrid")
14649 (version "6.9.7")
14650 (source
14651 (origin
14652 (method git-fetch)
14653 (uri (git-reference
14654 (url "https://github.com/sendgrid/sendgrid-python")
14655 (commit version)))
14656 (file-name (git-file-name name version))
14657 (sha256
14658 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
14659 (build-system pyproject-build-system)
14660 (arguments
14661 (list
14662 #:test-flags
14663 #~(list "--ignore=test/integ"
14664 ;; Network access is required.
14665 "--ignore=live_test.py")))
14666 (native-inputs
14667 (list python-pytest
14668 python-setuptools))
14669 (propagated-inputs
14670 (list python-cryptography
14671 python-http-client
14672 python-flask
14673 python-pyyaml
14674 python-six ;hard dependency
14675 python-starkbank-ecdsa
14676 python-werkzeug))
14677 (home-page "https://github.com/sendgrid/sendgrid-python/")
14678 (synopsis "SendGrid API library for Python")
14679 (description
14680 "The @code{sendgrid} Python library allows access to the
14681SendGrid Web API v3. Version 3+ of the library provides full support for all
14682SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
14683 (license license:expat)))
14684
14685(define-public python-sse-starlette
14686 (package
14687 (name "python-sse-starlette")
14688 (version "3.4.4")
14689 (source
14690 (origin
14691 (method git-fetch)
14692 (uri (git-reference
14693 (url "https://github.com/sysid/sse-starlette")
14694 (commit (string-append "v" version))))
14695 (file-name (git-file-name name version))
14696 (sha256
14697 (base32 "0jzy3mjszl7fr524cggyf8k97x6jpykvmxldmm2ckmrqjpyj8jmz"))))
14698 (build-system pyproject-build-system)
14699 (arguments
14700 (list
14701 #:test-flags
14702 #~(list
14703 ;; XXX: Server fails to start.
14704 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
14705 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
14706 ;; XXX: Missing test dependency - testcontainers, Docker is required.
14707 "--ignore=tests/integration/test_multiple_consumers.py")))
14708 (native-inputs
14709 (list python-asgi-lifespan
14710 python-httpx
14711 python-portend
14712 python-pytest
14713 python-pytest-asyncio
14714 python-psutil
14715 python-setuptools
14716 python-tenacity
14717 python-uvicorn))
14718 (propagated-inputs
14719 (list python-anyio
14720 python-starlette))
14721 (home-page "https://github.com/sysid/sse-starlette")
14722 (synopsis "SSE plugin for Starlette")
14723 (description
14724 "This package provides SSE plugin for Starlette.")
14725 (license license:bsd-3)))
14726
14727(define-public python-sseclient-py
14728 (package
14729 (name "python-sseclient-py")
14730 (version "1.9.0")
14731 (source
14732 (origin
14733 (method git-fetch)
14734 (uri (git-reference
14735 (url "https://github.com/mpetazzoni/sseclient")
14736 (commit (string-append "sseclient-py-" version))))
14737 (file-name (git-file-name name version))
14738 (sha256
14739 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
14740 (build-system pyproject-build-system)
14741 (native-inputs (list python-hatchling python-pytest))
14742 (arguments
14743 (list
14744 #:test-backend #~'unittest
14745 #:test-flags #~'("discover" "--verbose" "tests")))
14746 (home-page "https://github.com/mpetazzoni/sseclient")
14747 (synopsis "Pure-Python Server Side Events (SSE) client")
14748 (description
14749 "This package provides a Python client for SSE event sources that
14750seamlessly integrates with @code{urllib3} and @code{requests}.")
14751 (license license:asl2.0)))
14752
14753(define-public python-starlette
14754 (package
14755 (name "python-starlette")
14756 (version "0.49.1")
14757 (source (origin
14758 (method git-fetch)
14759 (uri (git-reference
14760 (url "https://github.com/encode/starlette")
14761 (commit version)))
14762 (file-name (git-file-name name version))
14763 (sha256
14764 (base32
14765 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
14766 (build-system pyproject-build-system)
14767 (propagated-inputs (list python-anyio
14768 python-typing-extensions
14769 ;; [all] extra dependencies:
14770 python-itsdangerous
14771 python-jinja2
14772 python-multipart
14773 python-pyyaml
14774 python-requests))
14775 (native-inputs (list python-hatchling
14776 python-httpx
14777 python-pytest
14778 python-typing-extensions))
14779 (home-page "https://github.com/encode/starlette")
14780 (synopsis "Little ASGI library")
14781 (description
14782 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
14783Interface) framework/toolkit for building async web services in Python.")
14784 (license license:bsd-3)))
14785
14786(define-public python-starsessions
14787 (package
14788 (name "python-starsessions")
14789 (version "1.3.0")
14790 (source (origin
14791 (method git-fetch)
14792 (uri (git-reference
14793 (url "https://github.com/alex-oleshkevich/starsessions")
14794 (commit (string-append "v" version))))
14795 (file-name (git-file-name name version))
14796 (sha256
14797 (base32
14798 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
14799 (build-system pyproject-build-system)
14800 (arguments
14801 (list
14802 #:test-flags
14803 ;; These tests require a running redis server
14804 '(list "--ignore=tests/backends/test_redis.py"
14805 ;; XXX: this failure indicates a real compatibility problem, but
14806 ;; it seems restricted to the tests only.
14807 ;; AttributeError: 'Cookies' object has no attribute
14808 ;; 'clear_session_cookies'
14809 "-k"
14810 (string-append "not test_session_clears_on_tab_close"
14811 ;; This fails because an error is not raised.
14812 " and not test_session_wants_secret_key"))
14813 #:phases
14814 '(modify-phases %standard-phases
14815 (add-after 'unpack 'compatibilitiy
14816 (lambda _
14817 ;; aioredis has been renamed
14818 (substitute* "starsessions/backends/redis.py"
14819 (("aioredis") "redis")))))))
14820 (propagated-inputs
14821 (list python-redis
14822 python-itsdangerous
14823 python-starlette))
14824 (native-inputs
14825 (list python-httpx
14826 python-poetry-core
14827 python-pytest
14828 python-pytest-asyncio
14829 python-requests))
14830 (home-page "https://github.com/alex-oleshkevich/starsessions")
14831 (synopsis "Pluggable session support for Starlette and FastAPI")
14832 (description
14833 "This package adds pluggable session backends and ships default
14834@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
14835and FastAPI.")
14836 (license license:expat)))
14837
14838(define-public python-whereismyip
14839 (package
14840 (name "python-whereismyip")
14841 (version "0.1.0")
14842 (source
14843 (origin
14844 (method url-fetch)
14845 (uri (pypi-uri "whereismyip" version))
14846 (sha256
14847 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
14848 (build-system pyproject-build-system)
14849 (arguments (list #:tests? #false)) ; There are no tests.
14850 (native-inputs (list python-setuptools))
14851 (home-page "https://pypi.org/project/whereismyip/")
14852 (synopsis "Queries multiple geolocation services until one succeeds")
14853 (description
14854 "This package provides a simple Python library that queries multiple geolocation
14855services until one succeeds.")
14856 (license license:gpl3)))
14857
14858(define-public python-whitenoise
14859 (package
14860 (name "python-whitenoise")
14861 (version "6.12.0")
14862 (source
14863 (origin
14864 (method git-fetch)
14865 (uri (git-reference
14866 (url "https://github.com/evansd/whitenoise")
14867 (commit version)))
14868 (file-name (git-file-name name version))
14869 (sha256
14870 (base32 "1v4hdglf0zhvc1d6h836myz8pnxyp3x2r6j1amvqvxq8gbzrmp58"))))
14871 (build-system pyproject-build-system)
14872 (arguments
14873 (list
14874 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
14875 (native-inputs
14876 (list python-brotli
14877 python-django-minimal
14878 python-requests
14879 python-pytest
14880 python-setuptools))
14881 (home-page "https://github.com/evansd/whitenoise")
14882 (synopsis "Static file serving for WSGI applications")
14883 (description
14884 "WhiteNoise allows your web app to serve its own static files, making it
14885a self-contained unit that can be deployed anywhere without relying on nginx,
14886Amazon S3 or any other external service.")
14887 (license license:expat)))
14888
14889(define-public python-suds
14890 (package
14891 (name "python-suds")
14892 (version "1.2.0")
14893 (source
14894 (origin
14895 (method url-fetch)
14896 (uri (pypi-uri "suds" version))
14897 (sha256
14898 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
14899 (build-system pyproject-build-system)
14900 (arguments
14901 (list #:phases
14902 #~(modify-phases %standard-phases
14903 ;; XXX: chirp expects suds instead of suds_community
14904 (add-after 'install 'add-custom-dist-info
14905 (lambda _
14906 (for-each
14907 (lambda (dir)
14908 (with-directory-excursion (dirname dir)
14909 (symlink
14910 (basename dir)
14911 (string-append "suds-" #$version ".dist-info"))))
14912 (find-files #$output
14913 (lambda (file stat)
14914 (string-suffix? ".dist-info" file))
14915 #:directories? #t)))))))
14916 (native-inputs
14917 (list python-pytest
14918 python-setuptools
14919 python-wheel))
14920 (home-page "https://github.com/suds-community/suds")
14921 (synopsis "Lightweight SOAP python client for consuming Web Services")
14922 (description
14923 "Suds is a lightweight SOAP-based web service client for Python.")
14924 (license license:lgpl3+)))
14925
14926(define-public python-fastapi
14927 (package
14928 (name "python-fastapi")
14929 (version "0.137.1")
14930 (source
14931 (origin
14932 (method url-fetch)
14933 (uri (pypi-uri "fastapi" version))
14934 (sha256
14935 (base32 "072lzn48rwf9rjix4nqb5ym6hnaj2fb3jxclilym7n9h89q608w2"))))
14936 (build-system pyproject-build-system)
14937 (arguments
14938 (list
14939 ;; tests: 1126 passed, 12 skipped, 2 deselected
14940 #:test-backend #~'custom
14941 #:test-flags
14942 #~(list
14943 ;; Cannot import 'scripts' with just 'pytest'.
14944 "-m" "pytest"
14945 ;; Needs strawberry and sqlmodel.
14946 "--ignore=tests/test_tutorial/"
14947 ;; Fails due to failure to capture stdout.
14948 "--ignore=tests/test_fastapi_cli.py")))
14949 (native-inputs
14950 (list python-anyio
14951 python-dirty-equals
14952 python-flask
14953 python-inline-snapshot
14954 python-pdm-backend
14955 ;; python-pwdlib
14956 python-pyjwt
14957 python-pytest
14958 python-pytest-timeout
14959 python-pytest-xdist
14960 python-sqlalchemy-2
14961 ;; python-sqlmodel
14962 python-types-orjson
14963 python-types-ujson))
14964 (propagated-inputs
14965 (list python-starlette
14966 python-pydantic
14967 python-typing-extensions
14968 python-annotated-doc
14969 ;; [optional]
14970 python-email-validator
14971 python-fastapi-cli
14972 ;; python-fastar
14973 python-httpx
14974 python-itsdangerous
14975 python-jinja2
14976 python-multipart
14977 python-orjson
14978 python-pydantic
14979 python-pydantic-extra-types
14980 python-pydantic-settings
14981 python-pyyaml
14982 python-ujson
14983 python-uvicorn))
14984 (home-page "https://github.com/fastapi/fastapi")
14985 (synopsis "Web framework based on type hints")
14986 (description "FastAPI provides a web API framework based on pydantic and
14987starlette.")
14988 (license license:expat)))
14989
14990;; A bare minimal package, mainly to use in tests and reduce closure size.
14991;; Tests are left out in the main package to slim down native-inputs and
14992;; propagated-inputs.
14993(define-public python-fastapi-minimal
14994 (package/inherit python-fastapi
14995 (name "python-fastapi-minimal")
14996 (arguments
14997 (substitute-keyword-arguments arguments
14998 ((#:tests? #t #t) #f)))
14999 (native-inputs
15000 (list python-pdm-backend))
15001 (propagated-inputs
15002 (list python-annotated-doc
15003 python-opentelemetry-api
15004 python-pydantic
15005 python-starlette
15006 python-typing-extensions
15007 python-typing-inspection))))
15008
15009(define-public python-fastapi-csrf-protect
15010 (package
15011 (name "python-fastapi-csrf-protect")
15012 (version "0.3.3")
15013 (source (origin
15014 (method git-fetch)
15015 (uri (git-reference
15016 (url "https://github.com/aekasitt/fastapi-csrf-protect")
15017 (commit (string-append "v" version))))
15018 (file-name (git-file-name name version))
15019 (sha256
15020 (base32
15021 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
15022 (build-system pyproject-build-system)
15023 (propagated-inputs
15024 (list python-fastapi python-itsdangerous
15025 python-pydantic))
15026 (native-inputs
15027 (list python-poetry-core
15028 python-pytest))
15029 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
15030 (synopsis "Cross-Site Request Forgery (XSRF) protection")
15031 (description
15032 "This package provides a stateless implementation of @dfn{Cross-Site
15033Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
15034pattern.")
15035 (license license:expat)))
15036
15037(define-public python-fastapi-pagination-minimal
15038 (package
15039 (name "python-fastapi-pagination-minimal")
15040 (version "0.15.15")
15041 (source (origin
15042 (method git-fetch)
15043 (uri (git-reference
15044 (url "https://github.com/uriyyo/fastapi-pagination")
15045 (commit version)))
15046 (file-name (git-file-name name version))
15047 (sha256
15048 (base32
15049 "0jfmk5m2yrki9rw9izci2fxamam45mk36gl77rwbd5hnngkqbahv"))))
15050 (build-system pyproject-build-system)
15051 ;; We run the tests in python-fastapi-pagination only.
15052 (arguments (list #:tests? #false))
15053 ;; These are the only required dependencies,
15054 ;; please add all optional dependencies to the
15055 ;; full python-fastapi-pagination below.
15056 (propagated-inputs (list python-fastapi python-pydantic))
15057 (native-inputs (list python-hatchling))
15058 (home-page "https://github.com/uriyyo/fastapi-pagination")
15059 (synopsis "FastAPI pagination library")
15060 (description "@code{fastapi-pagination} is a Python library designed to
15061simplify pagination in FastAPI applications. It provides a set of utility
15062functions and data models to help you paginate your database queries and
15063return paginated responses to your clients.")
15064 (license license:expat)))
15065
15066(define-public python-fastapi-pagination
15067 (package
15068 (inherit python-fastapi-pagination-minimal)
15069 (name "python-fastapi-pagination")
15070 (arguments
15071 (list
15072 #:test-flags
15073 #~(list "--asyncio-mode=auto"
15074 "--ignore=tests/ext"
15075 ;; Netwok access is required.
15076 "-k" (string-join
15077 (list "not test_optional_params[postgres-default]"
15078 "test_optional_params[postgres-limit-offset]"
15079 "test_optional_params[sqlite-default]"
15080 "test_optional_params[sqlite-limit-offset]")
15081 " and not "))
15082 #:phases
15083 '(modify-phases %standard-phases
15084 (add-after 'unpack 'patch-tests
15085 (lambda _
15086 ;; We don't have a package for python-cassandra or motor, but we
15087 ;; also don't need them as we only run the unit tests anyway.
15088 (substitute* "tests/conftest.py"
15089 (("from cassandra.*") "")
15090 (("from motor.*") "")))))))
15091 (propagated-inputs
15092 (modify-inputs (package-propagated-inputs
15093 python-fastapi-pagination-minimal)
15094 (prepend python-asyncpg
15095 python-databases
15096 python-django
15097 python-fastapi
15098 python-pydantic
15099 python-sqlalchemy
15100 (package
15101 (inherit python-tortoise-orm)
15102 (arguments
15103 (substitute-keyword-arguments (package-arguments
15104 python-tortoise-orm)
15105 ((#:phases phases '%standard-phases)
15106 `(modify-phases ,phases
15107 (delete 'sanity-check)))))
15108 (propagated-inputs
15109 (modify-inputs propagated-inputs
15110 (replace "python-aiosqlite" python-aiosqlite)))))))
15111 (native-inputs
15112 (list python-aiosqlite
15113 python-asgi-lifespan
15114 python-asyncpg
15115 python-dirty-equals
15116 python-faker
15117 python-hatchling
15118 python-httpx
15119 python-pytest
15120 python-pytest-asyncio
15121 python-sqlalchemy
15122 python-typing-extensions))
15123 (description
15124 (string-append (package-description python-fastapi-pagination-minimal)
15125 "
15126
15127This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
15128all available optional dependencies supported by mainline
15129@code{fastapi-pagination}."))))
15130
15131(define-public python-fastapi-cli
15132 (package
15133 (name "python-fastapi-cli")
15134 (version "0.0.7")
15135 (source
15136 (origin
15137 (method url-fetch)
15138 (uri (pypi-uri "fastapi_cli" version))
15139 (sha256
15140 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
15141 (build-system pyproject-build-system)
15142 ;; Tests require fastapi, which depends on this package.
15143 (arguments (list #:tests? #false))
15144 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
15145 (native-inputs
15146 (list python-inline-snapshot python-pdm-backend python-pytest))
15147 (home-page "https://pypi.org/project/fastapi-cli/")
15148 (synopsis
15149 "Run and manage FastAPI apps from the command line with FastAPI CLI")
15150 (description
15151 "FastAPI CLI is a command line program fastapi that you can use to serve
15152your FastAPI app, manage your FastAPI project, and more.")
15153 (license license:expat)))
15154
15155(define-public python-pyactiveresource
15156 (package
15157 (name "python-pyactiveresource")
15158 (version "2.2.2")
15159 (source
15160 (origin
15161 (method git-fetch)
15162 (uri (git-reference
15163 (url "https://github.com/Shopify/pyactiveresource")
15164 (commit (string-append "v" version))))
15165 (file-name (git-file-name name version))
15166 (sha256
15167 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
15168 (build-system pyproject-build-system)
15169 ;; XXX: The package is fine, but the tests started failing on [email protected].
15170 ;; The package is not actively maintained, consider removing it once leaf.
15171 (arguments (list #:tests? #f))
15172 (native-inputs
15173 (list python-dateutil python-pytest python-pyyaml python-setuptools))
15174 (propagated-inputs (list python-six))
15175 (home-page "https://github.com/Shopify/pyactiveresource/")
15176 (synopsis "ActiveResource for Python")
15177 (description
15178 "This package provides a Python port of the ActiveResource project.
15179
15180Active Resource attempts to provide a coherent wrapper object-relational
15181mapping for REST web services. It follows the same philosophy as Active
15182Record, in that one of its prime aims is to reduce the amount of code needed
15183to map to these resources. This is made possible by relying on a number of
15184code- and protocol-based conventions that make it easy for Active Resource to
15185infer complex relations and structures.")
15186 (license license:expat)))
15187
15188(define-public python-shopifyapi
15189 (package
15190 (name "python-shopifyapi")
15191 (version "12.7.0")
15192 (source
15193 (origin
15194 (method git-fetch)
15195 (uri (git-reference
15196 (url "https://github.com/Shopify/shopify_python_api")
15197 (commit (string-append "v" version))))
15198 (file-name (git-file-name name version))
15199 (sha256
15200 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
15201 (build-system pyproject-build-system)
15202 (arguments
15203 (list
15204 #:test-flags
15205 #~'("-k"
15206 ;; Disable a failing test.
15207 "not test_raises_if_aud_doesnt_match_api_key")))
15208 (native-inputs (list python-mock python-pytest python-setuptools))
15209 (propagated-inputs (list python-pyactiveresource python-pyjwt
15210 python-pyyaml python-six))
15211 (home-page "https://github.com/Shopify/shopify_python_api")
15212 (synopsis "Shopify API for Python")
15213 (description
15214 "This package provides the Shopify API for Python.
15215
15216The ShopifyAPI library allows Python developers to programmatically access the
15217admin section of stores using an ActiveResource-like interface similar the
15218ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
15219list, create, update, or delete resources (e.g. Order, Product, Collection).")
15220 (license license:expat)))
15221
15222(define-public python-pybadges
15223 (package
15224 (name "python-pybadges")
15225 (version "3.0.1")
15226 (source (origin
15227 (method git-fetch)
15228 (uri (git-reference
15229 (url "https://github.com/google/pybadges")
15230 (commit version)))
15231 (file-name (git-file-name name version))
15232 (sha256
15233 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
15234 (build-system pyproject-build-system)
15235 (arguments
15236 (list
15237 #:test-flags
15238 #~'("-k"
15239 ;; Disable network dependent tests.
15240 "not test_changes and not test_not_image_url and not test_http_url")))
15241 (propagated-inputs (list python-jinja2 python-requests python-setuptools))
15242 (native-inputs (list python-flask
15243 python-fonttools
15244 python-pillow
15245 python-pytest
15246 python-wheel
15247 python-xmldiff))
15248 (home-page "https://github.com/google/pybadges")
15249 (synopsis "Generate Github-style badges on the command-line")
15250 (description
15251 "This package provides @code{python-pybadges}: a library and command-line
15252tool for generating Github-style badges as SVG images.")
15253 (license license:asl2.0)))
15254
15255(define-public python-grid5000
15256 (package
15257 (name "python-grid5000")
15258 (version "1.2.4")
15259 (source (origin
15260 (method git-fetch)
15261 (uri (git-reference
15262 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
15263 (commit (string-append "v" version))))
15264 (file-name (git-file-name name version))
15265 (sha256
15266 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
15267 (build-system pyproject-build-system)
15268 (arguments
15269 (list #:tests? #f)) ; No tests.
15270 (native-inputs (list python-setuptools))
15271 (propagated-inputs (list python-requests python-ipython python-pyyaml))
15272 (home-page "https://pypi.org/project/python-grid5000/")
15273 (synopsis "Grid5000 python client")
15274 (description
15275 "python-grid5000 is a python package wrapping the Grid5000 REST API.
15276You can use it as a library in your python project or you can explore the
15277Grid5000 resources interactively using the embedded shell.")
15278 (license license:gpl3+)))
15279
15280(define-public python-pynetbox
15281 (package
15282 (name "python-pynetbox")
15283 (version "7.4.1")
15284 (source (origin
15285 (method url-fetch)
15286 (uri (pypi-uri "pynetbox" version))
15287 (sha256
15288 (base32
15289 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
15290 (build-system pyproject-build-system)
15291 (arguments
15292 (list
15293 #:test-flags
15294 ;; Integration tests depend on docker.
15295 '(list "--ignore=tests/integration")))
15296 (propagated-inputs (list python-packaging python-requests))
15297 (native-inputs
15298 (list python-pytest
15299 python-setuptools
15300 python-setuptools-scm
15301 python-wheel))
15302 (home-page "https://github.com/netbox-community/pynetbox")
15303 (synopsis "NetBox API client library")
15304 (description "Python module to query and edit data stored in a
15305@url{https://netbox.dev,NetBox} instance.")
15306 (license license:asl2.0)))
15307
15308(define-public python-waybackpack
15309 (package
15310 (name "python-waybackpack")
15311 (version "0.6.4")
15312 (source
15313 (origin
15314 (method url-fetch)
15315 (uri (pypi-uri "waybackpack" version))
15316 (sha256
15317 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
15318 (build-system pyproject-build-system)
15319 (arguments
15320 (list #:tests? #f)) ; would require network (and SSL certificates)
15321 (propagated-inputs (list python-requests))
15322 (native-inputs (list python-pytest python-setuptools python-wheel))
15323 (home-page "https://github.com/jsvine/waybackpack")
15324 (synopsis
15325 "Download the entire Wayback Machine archive for a given URL")
15326 (description
15327 "This package provides a library and a command-line tool that lets
15328you download the entire Wayback Machine archive for a given URL.")
15329 (license license:expat)))
15330
15331(define-public python-xyzservices
15332 (package
15333 (name "python-xyzservices")
15334 (version "2025.4.0")
15335 (source
15336 (origin
15337 (method url-fetch)
15338 (uri (pypi-uri "xyzservices" version))
15339 (sha256
15340 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
15341 (build-system pyproject-build-system)
15342 (arguments
15343 (list
15344 #:test-flags #~(list "-m" "not request")))
15345 (native-inputs
15346 (list python-pytest
15347 python-mercantile
15348 python-requests
15349 python-setuptools
15350 python-setuptools-scm))
15351 (home-page "https://github.com/geopandas/xyzservices")
15352 (synopsis "Source of XYZ tiles providers")
15353 (description "@code{xyzservices} is a lightweight library providing a
15354repository of available XYZ services offering raster basemap tiles. The
15355repository is provided via Python API and as a compressed JSON file.")
15356 (license license:bsd-3)))
15357
15358(define-public s3cmd
15359 (package
15360 (name "s3cmd")
15361 (version "2.4.0")
15362 (source
15363 (origin
15364 (method git-fetch)
15365 (uri (git-reference
15366 (url "https://github.com/s3tools/s3cmd")
15367 (commit (string-append "v" version))))
15368 (file-name (git-file-name name version))
15369 (sha256
15370 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
15371 (build-system pyproject-build-system)
15372 (arguments
15373 (list
15374 #:tests? #f ; XXX: Tests require network access.
15375 #:phases
15376 #~(modify-phases %standard-phases
15377 (add-after 'unpack 'hide-wrapping
15378 (lambda _
15379 (substitute* "S3/MultiPart.py"
15380 (("sys\\.argv\\[0\\]")
15381 "\"s3cmd\""))
15382 (substitute* "s3cmd"
15383 (("optparser\\.get_prog_name\\(\\)")
15384 "\"s3cmd\"")))))))
15385 (native-inputs (list python-setuptools))
15386 (inputs (list python-dateutil python-magic))
15387 (home-page "https://s3tools.org/s3cmd")
15388 (synopsis "Command line tool for S3-compatible storage services")
15389 (description
15390 "S3cmd is a command line tool for uploading, retrieving and managing data
15391in storage services that are compatible with the Amazon Simple Storage
15392Service (S3) protocol, including S3 itself. It supports rsync-like backup,
15393GnuPG encryption, and more. It also supports management of Amazon's
15394CloudFront content delivery network.")
15395 (license license:gpl2+)))