projects/guix·blob r-team · refs

14963 lines · 541.3 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 node)
133 #:use-module (gnu packages nss)
134 #:use-module (gnu packages openstack)
135 #:use-module (gnu packages pcre)
136 #:use-module (gnu packages pkg-config)
137 #:use-module (gnu packages protobuf)
138 #:use-module (gnu packages python)
139 #:use-module (gnu packages python-build)
140 #:use-module (gnu packages python-check)
141 #:use-module (gnu packages python-compression)
142 #:use-module (gnu packages python-crypto)
143 #:use-module (gnu packages python-science)
144 #:use-module (gnu packages python-xyz)
145 #:use-module (gnu packages qt)
146 #:use-module (gnu packages rdf)
147 #:use-module (gnu packages rpc)
148 #:use-module (gnu packages rust)
149 #:use-module (gnu packages serialization)
150 #:use-module (gnu packages sphinx)
151 #:use-module (gnu packages texinfo)
152 #:use-module (gnu packages time)
153 #:use-module (gnu packages tls)
154 #:use-module (gnu packages version-control)
155 #:use-module (gnu packages web)
156 #:use-module (gnu packages xml)
157 #:use-module (gnu packages)
158 #:use-module (guix build-system cargo)
159 #:use-module (guix build-system copy)
160 #:use-module (guix build-system pyproject)
161 #:use-module (guix deprecation)
162 #:use-module (guix download)
163 #:use-module (guix gexp)
164 #:use-module (guix git-download)
165 #:use-module ((guix licenses) #:prefix license:)
166 #:use-module (guix packages)
167 #:use-module (guix utils)
168 #:use-module (srfi srfi-1))
169
170(define-public awscli
171 (package
172 ;; Note: updating awscli typically requires updating botocore as well.
173 (name "awscli")
174 (version "1.43.11")
175 (source
176 (origin
177 (method git-fetch)
178 (uri (git-reference
179 (url "https://github.com/aws/aws-cli")
180 (commit version)))
181 (file-name (git-file-name name version))
182 (sha256
183 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
184 (build-system pyproject-build-system)
185 (arguments
186 (list
187 ;; tests: 2715 passed, 32 warnings
188 #:test-flags
189 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
190 ;; Complete test suite is huge and compute hungry, run just unit
191 ;; tests.
192 "--ignore=tests/dependencies"
193 "--ignore=tests/functional"
194 "--ignore=tests/integration"
195 ;; TypeError: 'Mock' object is not subscriptable.
196 "-k" "not test_no_groff_or_mandoc_exists")
197 #:phases
198 #~(modify-phases %standard-phases
199 (add-after 'unpack 'fix-reference-to-groff
200 (lambda _
201 ;; XXX: Consider to use wrap-program instead, it tries to parse
202 ;; the PATH.
203 (substitute* "awscli/help.py"
204 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
205 (("raise ExecutableNotFoundError\\('groff'\\)") "")
206 (("cmdline = \\['groff'")
207 (format #f "cmdline = ['~a/bin/groff'"
208 #$(this-package-input "groff-minimal"))))))
209 (add-before 'check 'set-environment
210 (lambda _
211 ;; PermissionError: [Errno 13] Permission denied:
212 ;; '/homeless-shelter'
213 (setenv "HOME" "/tmp"))))))
214 (native-inputs
215 (list python-pytest
216 python-pytest-xdist
217 python-setuptools
218 python-wheel))
219 (inputs
220 (list groff-minimal
221 python-botocore
222 python-colorama
223 python-docutils-0.19
224 python-pyyaml
225 python-rsa-for-awscli-1
226 python-s3transfer))
227 (home-page "https://aws.amazon.com/cli/")
228 (synopsis "Command line client for AWS")
229 (description
230 "AWS CLI provides a unified command line interface to the Amazon Web
231Services (AWS) API.")
232 (license license:asl2.0)))
233
234(define-public awscli-2
235 (package
236 (inherit awscli)
237 ;; Note: updating awscli-2 typically requires updating python-awscrt.
238 (name "awscli")
239 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
240 ;; any fresh one compatible with current state of dependencies in Guix.
241 (version "2.36.20")
242 (source
243 (origin
244 (method git-fetch)
245 (uri (git-reference
246 (url "https://github.com/aws/aws-cli")
247 (commit version)))
248 (file-name (git-file-name name version))
249 (sha256
250 (base32
251 "1hv2zs5pm86b5bd66j2kfb9r8gz13cqnf8x5hmfv0ddszf9vnfgp"))))
252 (build-system pyproject-build-system)
253 (arguments
254 (list
255 ;; When updating and checking locally be very patient as build phase may
256 ;; hang for 6-8 minutes but eventually passes through.
257 ;;
258 ;; tests: 4189 passed, 1 skipped, 2 warnings
259 #:test-flags
260 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
261 ;; Full test suite contains more than 70k tests; ignore network
262 ;; dependent, slow and compute intense tests, keep just unit
263 ;; tests.
264 "--ignore=tests/backends"
265 "--ignore=tests/dependencies"
266 "--ignore=tests/functional"
267 "--ignore=tests/integration"
268 "--ignore=tests/unit/botocore"
269 ;; Flaky, something to do with PATH disappearing from os.environ?
270 ;; Passes when run on its own, so maybe something else is
271 ;; modifying this during the test run.
272 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
273 ;; TypeError: 'Mock' object is not subscriptable
274 "-k" "not test_no_groff_or_mandoc_exists")
275 #:phases
276 #~(modify-phases %standard-phases
277 (add-after 'unpack 'ignore-deprecations
278 (lambda _
279 (substitute* "pyproject.toml"
280 (("\"error::") "\"ignore::"))))
281 (add-after 'unpack 'fix-reference-to-groff
282 (lambda* (#:key inputs #:allow-other-keys)
283 (substitute* "awscli/help.py"
284 (("if self._exists_on_path\\('groff'\\):") "if True:")
285 (("cmdline = \\['groff'")
286 (string-append "cmdline = ['"
287 (search-input-file inputs "bin/groff")
288 "'")))))
289 (add-before 'check 'pre-check
290 (lambda _ (setenv "HOME" "/tmp"))))))
291 (inputs
292 (list groff
293 ;; less
294 nss-certs-for-test
295 python-awscrt
296 python-colorama
297 python-dateutil
298 python-distro
299 python-docutils
300 python-jmespath
301 python-prompt-toolkit
302 python-ruamel.yaml
303 python-ruamel.yaml.clib
304 python-urllib3
305 python-wcwidth))
306 (native-inputs
307 (list python-flit-core
308 python-pytest
309 python-pytest-xdist))))
310
311;; XXX: This project missed maintainer upstream, see
312;; <https://github.com/joeyespo/grip/issues/387>.
313;; Consider to remove if it keeps failing to build.
314(define-public grip
315 (package
316 (name "grip")
317 (version "4.6.1")
318 (source
319 (origin
320 (method git-fetch)
321 (uri (git-reference
322 (url "https://github.com/joeyespo/grip")
323 (commit (string-append "v" version))))
324 (file-name (git-file-name name version))
325 (sha256
326 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
327 (build-system pyproject-build-system)
328 (arguments
329 (list
330 #:test-flags
331 ;; All tests fail requiring network access, ignore the whole file.
332 #~(list "--ignore=tests/test_github.py")
333 #:phases
334 #~(modify-phases %standard-phases
335 ;; This fixes the removal of `charset` attribute of requests from
336 ;; Werkzeug 2.3.0.
337 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
338 (add-after 'unpack 'fix-response-encoding
339 (lambda _
340 (substitute* "grip/app.py"
341 (("response.charset")
342 "getattr(response, 'charset', 'utf-8')")))))))
343 (native-inputs
344 (list nss-certs-for-test
345 python-pytest
346 python-responses
347 python-setuptools
348 python-wheel))
349 (propagated-inputs
350 (list python-docopt
351 python-flask
352 python-markdown
353 python-path-and-address
354 python-pygments
355 python-requests))
356 (home-page "https://github.com/joeyespo/grip")
357 (synopsis "Preview Markdown files using the GitHub API")
358 (description
359 "Grip is a command-line server application written in Python that uses
360the GitHub Markdown API to render a local Markdown file. The styles and
361rendering come directly from GitHub, so you'll know exactly how it will
362appear. Changes you make to the file will be instantly reflected in the
363browser without requiring a page refresh.")
364 (license license:expat)))
365
366(define-public gunicorn
367 (package
368 (name "gunicorn")
369 (version "25.3.0")
370 (source
371 (origin
372 (method url-fetch)
373 (uri (pypi-uri "gunicorn" version))
374 (sha256
375 (base32
376 "12g85w735s4dszjfidi4vh786rfxsa5rd60il0fcvxknkwpinkpp"))))
377 (outputs '("out" "doc"))
378 (build-system pyproject-build-system)
379 (arguments
380 `(#:test-flags
381 ;; Disable the geventlet tests because eventlet uses dnspython, which
382 ;; does not work in the build container due to lack of /etc/resolv.conf
383 '("--ignore=tests/workers/test_geventlet.py")
384 #:phases (modify-phases %standard-phases
385 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
386 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
387 ;; size. Override it to only add the essential entries.
388 (replace 'wrap
389 (lambda* (#:key native-inputs inputs outputs
390 #:allow-other-keys)
391 (let* ((out (assoc-ref outputs "out"))
392 (python (assoc-ref (or native-inputs inputs)
393 "python"))
394 (sitedir (string-append "/lib/python"
395 (python-version python)
396 "/site-packages")))
397 (wrap-program (string-append out "/bin/gunicorn")
398 `("PYTHONPATH" ":" prefix
399 ,(map (lambda (output)
400 (string-append output sitedir))
401 (list python out))))))))))
402 (inputs (list bash-minimal))
403 (native-inputs
404 (list binutils ;for ctypes.util.find_library()
405 python-eventlet
406 python-gevent
407 python-h2
408 python-httpx
409 python-pytest
410 python-pytest-asyncio
411 python-setuptools
412 python-uvloop))
413 (propagated-inputs
414 (list python-packaging
415 python-setuptools
416 python-wheel))
417 (home-page "https://gunicorn.org/")
418 (synopsis "Python WSGI HTTP Server for UNIX")
419 (description
420 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
421Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
422Unicorn project. The Gunicorn server is broadly compatible with
423various web frameworks, simply implemented, light on server resources,
424and fairly speedy.")
425 (license license:expat)))
426
427;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
428;; its tests
429(define-public gunicorn-bootstrap
430 (package
431 (inherit gunicorn)
432 (name "gunicorn")
433 (arguments `(#:tests? #f))
434 (properties '((hidden? . #t)))
435 (native-inputs `())))
436
437(define-public oauth2ms
438 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
439 (revision "0"))
440 (package
441 (name "oauth2ms")
442 (version (git-version "0.0.0" revision commit))
443 (source (origin
444 (method git-fetch)
445 (uri (git-reference
446 (url "https://github.com/harishkrupo/oauth2ms")
447 (commit commit)))
448 (file-name (git-file-name name version))
449 (sha256
450 (base32
451 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
452 (build-system copy-build-system)
453 (arguments
454 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
455 ("." #$(string-append "share/doc/" name "-"
456 version "/")
457 #:include-regexp ("\\.org$")))
458 #:phases #~(modify-phases %standard-phases
459 (add-after 'install 'wrap-pythonpath
460 (lambda* (#:key inputs outputs #:allow-other-keys)
461 (let ((path (getenv "GUIX_PYTHONPATH")))
462 (wrap-program (string-append #$output
463 "/bin/oauth2ms")
464 `("GUIX_PYTHONPATH" ":" prefix
465 (,path)))))))))
466 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
467 (home-page "https://github.com/harishkrupo/oauth2ms")
468 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
469 (description
470 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
471endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
472used as authentication in IMAP mail servers.")
473 (license license:asl2.0))))
474
475(define-public python-a2wsgi
476 (package
477 (name "python-a2wsgi")
478 (version "1.10.7")
479 (source (origin
480 (method url-fetch)
481 (uri (pypi-uri "a2wsgi" version))
482 (sha256
483 (base32
484 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
485 (build-system pyproject-build-system)
486 (arguments
487 (list
488 #:test-flags
489 #~(list "-k" (string-join
490 (list "not test_starlette_stream_response"
491 "test_starlette_base_http_middleware"
492 "test_baize_stream_response"
493 ;; Fails because of harmless whitespace differences.
494 "test_wsgi_post")
495 " and not "))
496 #:build-backend "pdm.backend"))
497 (native-inputs
498 (list python-pdm-backend
499 python-pytest
500 ;; python-baize ; not packed yet
501 python-httpx-bootstrap
502 ;; Cycle: python-a2wsgi->python-uvicorn->
503 ;; python-httpx->python-starlette->python-a2wsgi
504 ;; python-starlette
505 python-pytest-asyncio))
506 (home-page "https://github.com/abersheeran/a2wsgi")
507 (synopsis "Convert WSGI to ASGI or vice versa")
508 (description
509 "This program converts a WSGI program to an ASGI program or the other
510way around. It depends only on the Python standard library.")
511 (license license:asl2.0)))
512
513(define-public python-aioboto3
514 (package
515 (name "python-aioboto3")
516 (version "15.5.0")
517 (source
518 (origin
519 (method git-fetch)
520 (uri (git-reference
521 (url "https://github.com/terricain/aioboto3")
522 (commit (string-append "v" version))))
523 (file-name (git-file-name name version))
524 (sha256
525 (base32 "05644x17f9sl8mv9bp8l0rjcmw5x2ssyd5z1v3xmgcspk5qs6qn8"))))
526 (build-system pyproject-build-system)
527 (arguments
528 (list
529 #:tests? #f ;XXX: all tests faild
530 #:phases
531 #~(modify-phases %standard-phases
532 (add-after 'unpack 'relax-requirements
533 (lambda _
534 (substitute* "pyproject.toml"
535 (("aiobotocore\\[boto3\\]==2.25.1")
536 "aiobotocore >= 2.25.1")))))))
537 (native-inputs
538 (list python-setuptools
539 python-setuptools-scm))
540 (propagated-inputs
541 (list python-aiobotocore
542 python-aiofiles
543 ;; [optional]
544 python-boto3
545 python-cryptography))
546 (home-page "https://github.com/terricain/aioboto3")
547 (synopsis "Async boto3 wrapper")
548 (description
549 "This package is mostly just a wrapper combining the great work of boto3
550and aiobotocore.")
551 (license license:asl2.0)))
552
553(define-public python-aiobotocore
554 (package
555 (name "python-aiobotocore")
556 (version "3.0.0")
557 (source
558 (origin
559 (method url-fetch)
560 (uri (pypi-uri "aiobotocore" version))
561 (sha256
562 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
563 (build-system pyproject-build-system)
564 (arguments
565 ;; TODO: Tests need some setupt, see Makefile.
566 (list #:tests? #f))
567 (native-inputs
568 (list python-setuptools))
569 (propagated-inputs
570 (list python-aiohttp
571 python-aioitertools
572 python-botocore
573 python-dateutil
574 python-jmespath
575 python-multidict
576 python-typing-extensions
577 python-wrapt))
578 (home-page "https://github.com/aio-libs/aiobotocore")
579 (synopsis "Async client for AWS services using botocore and aiohttp")
580 (description "This package provides an async client for Amazon services
581using botocore and aiohttp/asyncio. This library is a mostly full featured
582asynchronous version of botocore.")
583 (license license:asl2.0)))
584
585(define-public python-aiocoap
586 (package
587 (name "python-aiocoap")
588 (version "0.4.14")
589 (source
590 (origin
591 (method git-fetch) ; tests miss data and module files in PyPI release
592 (uri (git-reference
593 (url "https://github.com/chrysn/aiocoap")
594 (commit version)))
595 (file-name (git-file-name name version))
596 (sha256
597 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
598 (build-system pyproject-build-system)
599 (arguments
600 (list
601 #:test-flags
602 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
603 ;; 8683, 0, 0): address already in use
604 #~(list "--ignore=tests/test_server.py"
605 "-k" (string-join
606 ;; TypeError: can only concatenate str (not "NoneType") to
607 ;; str
608 (list "not test_options"
609 "test_uri_parser"
610 "test_help" ; returned non-zero exit status 1.
611 "test_routing" ; address already in use
612 "test_tls")
613 " and not "))))
614 (native-inputs
615 (list openssl ;for tests/test_tls.py
616 python-pytest
617 python-setuptools
618 python-wheel))
619 (propagated-inputs
620 (list ;; python-cbor-diag
621 python-cbor2
622 python-cryptography
623 ;; python-dtlssocket
624 python-filelock
625 ;; python-ge25519
626 python-pygments
627 python-termcolor
628 python-websockets))
629 (home-page "https://github.com/chrysn/aiocoap")
630 (synopsis "Python CoAP library")
631 (description
632 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
633Constrained Application Protocol}, http://coap.space/}. It facilitates
634writing applications that talk to network enabled embedded
635@acronym{IoT,Internet of Things} devices.")
636 (license license:expat)))
637
638(define-public python-aiodns
639 (package
640 (name "python-aiodns")
641 (version "3.5.0")
642 (source
643 (origin
644 (method git-fetch)
645 (uri (git-reference
646 (url "https://github.com/saghul/aiodns")
647 (commit (string-append "v" version))))
648 (file-name (git-file-name name version))
649 (sha256
650 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
651 (build-system pyproject-build-system)
652 (arguments
653 (list
654 #:tests? #f)) ;tests require internet access
655 (native-inputs
656 (list python-pytest python-pytest-asyncio python-setuptools))
657 (propagated-inputs (list python-pycares))
658 (home-page "https://github.com/saghul/aiodns")
659 (synopsis "Simple DNS resolver for asyncio")
660 (description
661 "@code{aiodns} provides a simple way for doing asynchronous DNS
662resolutions with a synchronous looking interface by using
663@url{https://github.com/saghul/pycares,pycares}.")
664 (license license:expat)))
665
666(define-public python-aioftp
667 (package
668 (name "python-aioftp")
669 (version "0.27.2")
670 (source
671 (origin
672 (method git-fetch)
673 (uri (git-reference
674 (url "https://github.com/aio-libs/aioftp")
675 (commit version)))
676 (file-name (git-file-name name version))
677 (sha256
678 (base32 "1lshyac5zk1w4x7ygkim3726f8gbkvpvlyiqkn9cs6qjxhxn5bxc"))))
679 (build-system pyproject-build-system)
680 (arguments
681 (list
682 #:phases
683 #~(modify-phases %standard-phases
684 (add-after 'unpack 'use-default-asyncio
685 ;; async_timeout is deprecated, upstream recommends to use
686 ;; asyncio, available since Python 3.11.
687 (lambda _
688 (substitute* "tests/conftest.py"
689 (("async_timeout") "asyncio")))))))
690 (native-inputs
691 (list python-pytest
692 python-pytest-mock
693 python-pytest-asyncio
694 python-setuptools
695 python-siosocks
696 python-trustme))
697 (home-page "https://aioftp.readthedocs.io/")
698 (synopsis "FTP client/server for asyncio in Python")
699 (description
700 "FTP client and server for asyncio (Python 3) Library implementing FTP
701protocol, both client and server for Python asyncio module.
702
703 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
704 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
705 REST, LIST (as fallback).
706
707 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
708 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
709 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
710 (license license:asl2.0)))
711
712(define-public python-aiohappyeyeballs
713 (package
714 (name "python-aiohappyeyeballs")
715 (properties '((commit . "cc53cf8a1d31f7b460a0114214aac66956f0e2ed")
716 (revision . "0")))
717 (version (git-version "2.6.1"
718 (assoc-ref properties 'revision)
719 (assoc-ref properties 'commit)))
720 (source
721 (origin
722 (method git-fetch)
723 (uri (git-reference
724 (url "https://github.com/aio-libs/aiohappyeyeballs")
725 (commit (assoc-ref properties 'commit))))
726 (file-name (git-file-name name version))
727 (sha256
728 (base32 "0nc723f4sxryg5h9z8paysmy9dnqw2jy4srxp9axrxkv9qrawa7n"))))
729 (build-system pyproject-build-system)
730 (native-inputs
731 (list python-poetry-core
732 python-pytest
733 python-pytest-asyncio))
734 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
735 (synopsis "Happy Eyeballs for asyncio")
736 (description "This library exists to allow connecting with Happy
737Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
738DNS name.")
739 (license license:psfl)))
740
741(define-public python-aiohttp
742 (package
743 (name "python-aiohttp")
744 (version "3.13.5")
745 (source
746 (origin
747 (method git-fetch)
748 (uri (git-reference
749 (url "https://github.com/aio-libs/aiohttp/")
750 (commit (string-append "v" version))))
751 (file-name (git-file-name name version))
752 (sha256
753 (base32 "0l9jcmhqd2v97gy1bxvimwi3aajxhxqn6jkzzgg7cf42mpyza0vc"))
754 (snippet
755 #~(begin
756 (use-modules ((guix build utils)))
757 (delete-file-recursively "vendor")))))
758 (build-system pyproject-build-system)
759 (arguments
760 (list
761 ;; tests: 4003 passed, 80 skipped, 31 xfailed, 2 subtests passed
762 #:test-flags
763 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
764 ;; This tests requires the 'proxy.py' module, not yet packaged.
765 "--ignore=tests/test_proxy_functional.py"
766 ;; No benchamrks.
767 "--ignore-glob=tests/test_benchmarks_*"
768 "-k"
769 (string-join
770 ;; Combinatin of tests failing with similar errors:
771 ;; - Cannot connect to host example.com:443 ssl:default [Could
772 ;; not contact DNS servers].
773 ;; - aiohttp.http_exceptions.ContentEncodingError: 400.
774 ;; - Can not decode content-encoding: br
775 (list "not test_add_static_path_resolution"
776 "test_empty_header_name"
777 "test_http_payload_brotli"
778 "test_http_payload_zstandard"
779 "test_invalid_header_spacing"
780 "test_payload_decompress_size_limit_brotli"
781 "test_reject_obsolete_line_folding"
782 "test_response_with_precompressed_body_brotli"
783 "test_static_file_custom_content_type_compress"
784 "test_static_file_with_encoding_and_enable_compression"
785 "test_tcp_connector_ssl_shutdown_timeout_nonzero_passed"
786 "test_tcp_connector_ssl_shutdown_timeout_passed_to_"
787 "test_tcp_connector_ssl_shutdown_timeout_zero_not_")
788 " and not "))
789 #:phases
790 #~(modify-phases %standard-phases
791 (add-after 'unpack 'set-libllhtp-pkgconfig
792 (lambda _
793 ;; pkg-config can't find the libllhttp library.
794 (if (getenv "PKG_CONFIG_PATH")
795 (setenv "PKG_CONFIG_PATH"
796 (string-append
797 #$(this-package-input "llhttp") "/lib/pkgconfig"
798 (getenv "PKG_CONFIG_PATH")))
799 (setenv "PKG_CONFIG_PATH"
800 (string-append
801 #$(this-package-input "llhttp") "/lib/pkgconfig")))))
802 (add-after 'unpack 'fix-pytest-config
803 (lambda _
804 (substitute* "setup.cfg"
805 (("--numprocesses=auto") "")
806 (("-p pytest_cov") "")
807 (("--cov=aiohttp") "")
808 (("--cov=tests/") ""))))
809 (add-after 'unpack 'fix-tests
810 (lambda _
811 ;; Make sure the timestamp of this file is > 1990, because a few
812 ;; tests like test_static_file_if_modified_since_past_date
813 ;; depend on it.
814 (let ((late-90s (* 60 60 24 365 30)))
815 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
816 (add-before 'build 'pre-build
817 (lambda _
818 (setenv "USE_SYSTEM_DEPS" "true")
819 ;; Help setup.py to determine project's root.
820 (with-output-to-file ".git"
821 (lambda () (display "")))
822 (substitute* "Makefile"
823 (("cythonize: .install-cython") "cythonize:"))
824 (invoke "make" "cythonize")))
825 (add-before 'check 'remove-local-source
826 (lambda _
827 (delete-file-recursively "aiohttp"))))))
828 (native-inputs
829 (list gunicorn-bootstrap
830 python-freezegun
831 python-cython
832 python-pkgconfig
833 ;; python-proxy-py ;not packaged yet in Guix
834 python-pytest
835 python-pytest-mock
836 python-pytest-xdist
837 python-re-assert
838 python-setuptools
839 python-zlib-ng))
840 (inputs
841 (list llhttp))
842 (propagated-inputs
843 (list python-aiohappyeyeballs
844 python-aiosignal
845 python-attrs
846 python-frozenlist
847 python-multidict
848 python-propcache
849 python-yarl
850 ;; [optional]
851 python-aiodns
852 python-backports-zstd ;Python version < 3.14
853 python-brotli))
854 (home-page "https://github.com/aio-libs/aiohttp/")
855 (synopsis "Async HTTP client/server framework (asyncio)")
856 (description "@code{aiohttp} is an asynchronous HTTP client/server
857framework.
858
859Its main features are:
860@itemize
861@item Supports both client and server side of HTTP protocol.
862@item Supports both client and server Web-Sockets out-of-the-box without the
863Callback Hell.
864@item Web-server has middlewares and pluggable routing.
865@end itemize")
866 (license license:asl2.0)))
867
868(define-public python-aiohttp-client-cache
869 (package
870 (name "python-aiohttp-client-cache")
871 (version "0.14.3")
872 (source
873 (origin
874 (method git-fetch)
875 (uri (git-reference
876 (url "https://github.com/requests-cache/aiohttp-client-cache")
877 (commit (string-append "v" version))))
878 (file-name (git-file-name name version))
879 (sha256
880 (base32
881 "13xbmjjvcbzh3yh5z92mc0gwicwfjfq2av5jbqv09sbfzhggs92y"))))
882 (build-system pyproject-build-system)
883 (arguments
884 (list
885 #:test-flags #~(list "--ignore=test/integration/")))
886 (native-inputs
887 (list python-brotli
888 python-faker
889 python-hatchling
890 python-pytest
891 python-pytest-aiohttp
892 python-pytest-asyncio
893 python-types-aiofiles))
894 (propagated-inputs
895 (list python-aiohttp
896 python-attrs
897 python-itsdangerous
898 python-url-normalize
899 ;; [optional]
900 python-aioboto3
901 python-aiobotocore
902 python-aiofiles
903 python-aiosqlite
904 python-pymongo
905 python-redis))
906 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
907 (synopsis "Persistent cache for aiohttp requests")
908 (description
909 "This package is an asynchronous persistent caching library specifically
910designed for @samp{aiohttp} requests in Python. With support for various
911storage backends, it offers flexibility in how and where the cache is stored.
912Please note that MongoDB and DynamoDB backends are not currently supported due
913to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
914 (license license:expat)))
915
916(define-public python-aiohttp-cors
917 (package
918 (name "python-aiohttp-cors")
919 (version "0.8.1")
920 (source
921 (origin
922 (method url-fetch)
923 (uri (pypi-uri "aiohttp_cors" version))
924 (sha256
925 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
926 (build-system pyproject-build-system)
927 (arguments
928 (list
929 #:tests? #f)) ; network access is required to run tests
930 (native-inputs
931 (list python-setuptools
932 python-wheel))
933 (propagated-inputs
934 (list python-aiohttp))
935 (home-page "https://github.com/aio-libs/aiohttp-cors")
936 (synopsis "CORS support for aiohttp")
937 (description
938 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
939support for aiohttp asyncio-powered asynchronous HTTP server.")
940 (license license:asl2.0)))
941
942(define-public python-aiohttp-oauthlib
943 (package
944 (name "python-aiohttp-oauthlib")
945 (version "0.1.0")
946 (source
947 (origin
948 (method url-fetch)
949 (uri (pypi-uri "aiohttp-oauthlib" version))
950 (sha256
951 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
952 (build-system pyproject-build-system)
953 (arguments (list #:tests? #f)) ; none included
954 (propagated-inputs (list python-aiohttp python-oauthlib))
955 (native-inputs (list python-setuptools python-setuptools-scm))
956 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
957 (synopsis "OAuthlib authentication support for aiohttp")
958 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
959provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
960 (license license:isc)))
961
962(define-public python-aiohttp-retry
963 (package
964 (name "python-aiohttp-retry")
965 (version "2.9.1")
966 (source
967 (origin
968 (method git-fetch)
969 (uri (git-reference
970 (url "https://github.com/inyutin/aiohttp_retry")
971 (commit (string-append "v" version))))
972 (file-name (git-file-name name version))
973 (sha256
974 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
975 (build-system pyproject-build-system)
976 (native-inputs
977 (list python-pytest
978 python-pytest-aiohttp
979 python-setuptools))
980 (propagated-inputs
981 (list python-aiohttp))
982 (home-page "https://github.com/inyutin/aiohttp_retry")
983 (synopsis "Simple retry client for aiohttp")
984 (description
985 "This package implements @code{RetryClient} for @code{aiohttp} to retry
986connection to provided endpoint with timeouts logic or use:
987
988@itemize
989@item @code{ExponentialRetry} with exponential backoff
990@item @code{RandomRetry} for random backoff
991@item @code{ListRetry} with backoff you predefine by list
992@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
993@item @code{JitterRetry} exponential retry with a bit of randomness
994@end itemize")
995 (license license:expat)))
996
997(define-public python-aiohttp-socks
998 (package
999 (name "python-aiohttp-socks")
1000 (version "0.10.1")
1001 (source
1002 (origin
1003 (method url-fetch)
1004 (uri (pypi-uri "aiohttp_socks" version))
1005 (sha256
1006 (base32
1007 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
1008 (build-system pyproject-build-system)
1009 (arguments (list #:tests? #false)) ;none included
1010 (propagated-inputs
1011 (list python-aiohttp python-socks))
1012 (native-inputs (list python-setuptools python-wheel))
1013 (home-page "https://github.com/romis2012/aiohttp-socks")
1014 (synopsis "SOCKS proxy connector for aiohttp")
1015 (description "This package provides a SOCKS proxy connector for
1016aiohttp. It supports SOCKS4(a) and SOCKS5.")
1017 (license license:asl2.0)))
1018
1019(define-public python-aioitertools
1020 (package
1021 (name "python-aioitertools")
1022 (version "0.12.0")
1023 (source
1024 (origin
1025 (method url-fetch)
1026 (uri (pypi-uri "aioitertools" version))
1027 (sha256
1028 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
1029 (build-system pyproject-build-system)
1030 (arguments
1031 (list #:test-backend #~'custom
1032 #:test-flags #~(list "-m" "aioitertools.tests")))
1033 (native-inputs
1034 (list python-flit-core))
1035 (home-page "https://pypi.org/project/aioitertools/")
1036 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
1037 (description
1038 "This package provides an implementation of itertools, builtins, and more
1039for AsyncIO and mixed-type iterables.")
1040 (license license:expat)))
1041
1042(define-public python-aioquic
1043 (package
1044 (name "python-aioquic")
1045 (version "1.3.0")
1046 (source
1047 (origin
1048 (method git-fetch)
1049 (uri (git-reference
1050 (url "https://github.com/aiortc/aioquic")
1051 (commit version)))
1052 (file-name (git-file-name name version))
1053 (sha256
1054 (base32 "0dyzh8xipxbd7fcykfz8g5bgri38prwg050szqawq2p0pg538dgb"))))
1055 (build-system pyproject-build-system)
1056 (native-inputs
1057 (list nss-certs-for-test
1058 python-pytest
1059 python-setuptools))
1060 (inputs
1061 (list openssl))
1062 (propagated-inputs
1063 (list python-certifi
1064 python-cryptography
1065 python-pylsqpack
1066 python-pyopenssl
1067 python-service-identity))
1068 (home-page "https://github.com/aiortc/aioquic")
1069 (synopsis "QUIC and HTTP3 implementation in Python")
1070 (description
1071 "@code{aioquic} is a library for the QUIC network protocol in Python.
1072It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
1073 (license license:bsd-3)))
1074
1075(define-public python-aiorpcx
1076 (package
1077 (name "python-aiorpcx")
1078 (version "0.25.0")
1079 (source
1080 (origin
1081 (method git-fetch)
1082 ;; PyPI misses the util.py file used for tests.
1083 (uri (git-reference
1084 (url "https://github.com/kyuupichan/aiorpcX")
1085 (commit version)))
1086 (file-name (git-file-name name version))
1087 (sha256
1088 (base32
1089 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
1090 (build-system pyproject-build-system)
1091 (arguments
1092 (list
1093 #:test-flags
1094 ;; This test opens a remote connection.
1095 #~(list "-k" "not test_create_connection_resolve_good")))
1096 (native-inputs (list python-pytest
1097 python-pytest-asyncio-0.26
1098 python-setuptools))
1099 (propagated-inputs
1100 (list python-attrs python-websockets))
1101 (home-page "https://github.com/kyuupichan/aiorpcX")
1102 (synopsis "Generic asyncio RPC implementation")
1103 (description
1104 "The aiorpcX library is a generic asyncio implementation of RPC suitable
1105for an application that is a client, server or both.
1106
1107The package includes a module with full coverage of JSON RPC versions 1.0 and
11082.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
1109comes with a SOCKS proxy client.")
1110 (license (list license:expat license:bsd-2))))
1111
1112(define-public python-aiosignal
1113 (package
1114 (name "python-aiosignal")
1115 (version "1.4.0")
1116 (source
1117 (origin
1118 (method url-fetch)
1119 (uri (pypi-uri "aiosignal" version))
1120 (sha256
1121 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
1122 (build-system pyproject-build-system)
1123 (arguments
1124 (list
1125 #:phases
1126 #~(modify-phases %standard-phases
1127 (add-after 'unpack 'avoid-pytest-cov-preload
1128 (lambda _
1129 (substitute* "pytest.ini"
1130 (("-p pytest_cov") "")))))))
1131 (native-inputs
1132 (list python-pytest
1133 python-pytest-asyncio
1134 python-setuptools))
1135 (propagated-inputs
1136 (list python-frozenlist))
1137 (home-page "https://github.com/aio-libs/aiosignal")
1138 (synopsis "Callback manager for Python @code{asyncio} projects")
1139 (description "This Python module provides @code{Signal}, an abstraction to
1140register asynchronous callbacks. The @code{Signal} abstraction can be used
1141for adding, removing and dropping callbacks.")
1142 (license license:asl2.0)))
1143
1144(define-public python-aiostream
1145 (package
1146 (name "python-aiostream")
1147 (version "0.7.0")
1148 (source
1149 (origin
1150 (method git-fetch) ;no tests in PyPI archive
1151 (uri (git-reference
1152 (url "https://github.com/vxgmichel/aiostream")
1153 (commit (string-append "v" version))))
1154 (file-name (git-file-name name version))
1155 (sha256
1156 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
1157 (build-system pyproject-build-system)
1158 (native-inputs
1159 (list python-pytest python-pytest-asyncio python-setuptools))
1160 (propagated-inputs
1161 (list python-typing-extensions))
1162 (home-page "https://github.com/vxgmichel/aiostream")
1163 (synopsis "Generator-based operators for asynchronous iteration")
1164 (description "@code{aiostream} provides a collection of stream operators that can
1165be combined to create asynchronous pipelines of operations. It can be seen as an
1166asynchronous version of @code{itertools}, although some aspects are slightly
1167different. All the provided operators return a unified interface called a stream. A
1168stream is an enhanced asynchronous iterable.")
1169 (license license:gpl3)))
1170
1171(define-public python-ajsonrpc
1172 (package
1173 (name "python-ajsonrpc")
1174 (version "1.2.0")
1175 (source
1176 (origin
1177 (method git-fetch)
1178 (uri (git-reference
1179 (url "https://github.com/pavlov99/ajsonrpc")
1180 (commit version)))
1181 (file-name (git-file-name name version))
1182 (sha256
1183 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
1184 (build-system pyproject-build-system)
1185 (arguments
1186 (list
1187 #:phases
1188 #~(modify-phases %standard-phases
1189 (add-after 'unpack 'set-version
1190 (lambda _
1191 (substitute* "ajsonrpc/__init__.py"
1192 (("^__version__ = .*")
1193 (string-append "__version__ = \"" #$version "\"\n"))))))))
1194 (native-inputs
1195 (list python-pytest
1196 python-setuptools))
1197 (propagated-inputs
1198 (list python-quart
1199 python-sanic
1200 python-tornado))
1201 (home-page "https://github.com/pavlov99/ajsonrpc")
1202 (synopsis "Async JSON-RPC 2.0 protocol and server")
1203 (description
1204 "This package provides a Python JSON-RPC 2.0 protocol and server powered
1205by asyncio.")
1206 (license license:expat)))
1207
1208(define-public python-alpaca-py
1209 (package
1210 (name "python-alpaca-py")
1211 (version "0.43.5")
1212 (source
1213 (origin
1214 (method git-fetch)
1215 (uri (git-reference
1216 (url "https://github.com/alpacahq/alpaca-py")
1217 (commit (string-append "v" version))))
1218 (file-name (git-file-name name version))
1219 (sha256
1220 (base32 "1kiq8b1v58yj7fypmnfn4mij1n96ym1i9lxsd4gmbv0cgpn10nqv"))))
1221 (build-system pyproject-build-system)
1222 (native-inputs
1223 (list python-poetry-core
1224 python-poetry-dynamic-versioning
1225 python-pytest
1226 python-pytest-asyncio
1227 python-requests-mock))
1228 (propagated-inputs
1229 (list python-msgpack
1230 python-pandas
1231 python-pydantic
1232 python-pytz
1233 python-requests
1234 python-sseclient-py
1235 python-websockets))
1236 (home-page "https://alpaca.markets/sdks/python/")
1237 (synopsis "Alpaca API official Python SDK")
1238 (description
1239 "Alpaca-py provides an interface to REST, WebSocket and SSE endpoints
1240that allow interaction with the @url{https://alpaca.markets/, Alpaca} API.")
1241 (license license:asl2.0)))
1242
1243(define-public python-anaconda-client
1244 (package
1245 (name "python-anaconda-client")
1246 (version "1.13.1")
1247 (source
1248 (origin
1249 (method git-fetch)
1250 (uri (git-reference
1251 (url "https://github.com/Anaconda-Platform/anaconda-client")
1252 (commit version)))
1253 (file-name (git-file-name name version))
1254 (sha256
1255 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
1256 (build-system pyproject-build-system)
1257 (arguments
1258 (list
1259 #:test-flags
1260 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
1261 "--deselect=tests/utils/test_conda.py::test_conda_vars")
1262 #:phases
1263 #~(modify-phases %standard-phases
1264 (add-after 'unpack 'fix-pytest-config
1265 (lambda _
1266 (substitute* "setup.cfg"
1267 (("addopts=.*") "addopts=\n")))))))
1268 (native-inputs
1269 (list python-freezegun
1270 python-pytest
1271 python-setuptools))
1272 (propagated-inputs
1273 (list python-anaconda-cli-base
1274 python-conda-package-handling
1275 python-conda-package-streaming
1276 python-dateutil
1277 python-defusedxml
1278 python-nbformat
1279 python-pillow
1280 python-platformdirs
1281 python-pytz
1282 python-pyyaml
1283 python-requests
1284 python-requests-toolbelt
1285 python-setuptools
1286 python-tqdm
1287 python-urllib3))
1288 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
1289 (synopsis "Anaconda Cloud command line client library")
1290 (description
1291 "Anaconda Cloud command line client library provides an interface to
1292Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
1293environments.")
1294 (license license:bsd-3)))
1295
1296(define-public python-apiron
1297 (package
1298 (name "python-apiron")
1299 (version "5.1.0")
1300 (source
1301 (origin
1302 (method url-fetch)
1303 (uri (pypi-uri "apiron" version))
1304 (sha256
1305 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
1306 (build-system pyproject-build-system)
1307 (arguments
1308 (list #:test-flags '(list "-k" "not test_call")))
1309 (propagated-inputs
1310 (list python-requests))
1311 (native-inputs
1312 (list python-pytest
1313 python-setuptools
1314 python-wheel))
1315 (home-page "https://github.com/ithaka/apiron")
1316 (synopsis "Python wrapper for interacting with RESTful APIs")
1317 (description
1318 "@code{apiron} provides a declarative, structured configuration of
1319services and endpoints with a unified interface for interacting with RESTful
1320APIs.")
1321 (license license:expat)))
1322
1323(define-public python-apprise
1324 (package
1325 (name "python-apprise")
1326 (version "1.9.4")
1327 (source
1328 (origin
1329 (method url-fetch)
1330 (uri (pypi-uri "apprise" version))
1331 (sha256
1332 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
1333 (build-system pyproject-build-system)
1334 (arguments
1335 (list
1336 ;; These tests used to be ran with --numprocesses, but that seems to have
1337 ;; made them non-deterministic.
1338 #:test-flags
1339 #~(list "--ignore=tests/test_plugin_macosx.py"
1340 "-k" "not test_plugin_glib_send_raises_generic")))
1341 (native-inputs
1342 (list python-babel
1343 python-pytest
1344 python-pytest-mock
1345 python-setuptools))
1346 (propagated-inputs
1347 (list python-certifi
1348 python-click
1349 python-markdown
1350 python-pygobject
1351 python-pyyaml
1352 python-requests
1353 python-requests-oauthlib))
1354 (home-page "https://github.com/caronc/apprise")
1355 (synopsis "Push notification library")
1356 (description
1357 "Apprise is a Python library that allows sending push notifications to a
1358broad range of notification services, such as Telegram, Discord, Slack, Amazon
1359SNS, Gotify, etc.")
1360 (license license:bsd-2)))
1361
1362(define-public python-arxiv
1363 (package
1364 (name "python-arxiv")
1365 (version "4.0.0")
1366 (source
1367 (origin
1368 (method git-fetch)
1369 (uri (git-reference
1370 (url "https://github.com/lukasschwab/arxiv.py")
1371 (commit version)))
1372 (file-name (git-file-name name version))
1373 (sha256
1374 (base32 "13363igvv3q5aj04jcrrc0cfliinlk8js84h2a9xhpwizsq96l4j"))))
1375 (build-system pyproject-build-system)
1376 (arguments
1377 (list #:test-flags
1378 #~(list "-k" ;to skip intenet connection tests
1379 (string-append "not (TestAPIBugs "
1380 "or TestClient "
1381 "or TestResult "
1382 "or TestDownload)"))
1383 #:phases
1384 #~(modify-phases %standard-phases
1385 (add-after 'unpack 'relax-dependencies
1386 (lambda _
1387 (substitute* "pyproject.toml"
1388 ;; pyproject.toml wants 6.10, guix has 6.02, seems fine
1389 (("\"lxml.*\"") "\"lxml\"")
1390 ;; artificial capped at <2.34 by dependabot
1391 (("\"requests.*\"") "\"requests\"")))))))
1392 (native-inputs
1393 (list python-pytest
1394 python-hatch-vcs
1395 python-hatchling))
1396 (propagated-inputs
1397 (list python-feedparser
1398 python-lxml
1399 python-requests))
1400 (home-page "https://github.com/lukasschwab/arxiv.py")
1401 (synopsis "Python wrapper for the arXiv API")
1402 (description "Python wrapper for the @code{arXiv} API.")
1403 (license license:expat)))
1404
1405(define-public python-asgi-csrf
1406 (package
1407 (name "python-asgi-csrf")
1408 (version "0.11")
1409 (source (origin
1410 (method git-fetch) ;for tests
1411 (uri (git-reference
1412 (url "https://github.com/simonw/asgi-csrf")
1413 (commit version)))
1414 (file-name (git-file-name name version))
1415 (sha256
1416 (base32
1417 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))
1418 (patches
1419 (search-patches "python-asgi-csrf-fix-formparser.patch"))))
1420 (build-system pyproject-build-system)
1421 (propagated-inputs (list python-itsdangerous python-multipart))
1422 (native-inputs (list python-asgi-lifespan
1423 python-httpx
1424 python-pytest
1425 python-pytest-asyncio
1426 python-starlette
1427 python-setuptools
1428 python-wheel))
1429 (home-page "https://github.com/simonw/asgi-csrf")
1430 (synopsis "ASGI middleware for protecting against CSRF attacks")
1431 (description "This Asynchronous Server Gateway Interface (ASGI)
1432middleware protects against Cross-site request forgery (CSRF) attacks.
1433It implements the Double Submit Cookie pattern, where a cookie is set
1434that is then compared to a @code{csrftoken} hidden form field or a
1435@code{x-csrftoken} HTTP header.")
1436 (license license:asl2.0)))
1437
1438(define-public python-asgi-lifespan
1439 (package
1440 (name "python-asgi-lifespan")
1441 (version "2.1.0")
1442 (source (origin
1443 (method git-fetch) ;for tests
1444 (uri (git-reference
1445 (url "https://github.com/florimondmanca/asgi-lifespan")
1446 (commit version)))
1447 (file-name (git-file-name name version))
1448 (sha256
1449 (base32
1450 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
1451 (build-system pyproject-build-system)
1452 (arguments
1453 (list
1454 #:test-flags
1455 '(list "-k"
1456 (string-append
1457 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
1458 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
1459 " or test_lifespan_manager[trio-None-BodyFailed-None]"
1460 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
1461 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
1462 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
1463 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
1464 " or test_lifespan_timeout[trio-slow_shutdown]"
1465 " or test_lifespan_not_supported[trio-http_only]"
1466 " or test_lifespan_not_supported[trio-http_no_assert]"
1467 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
1468 ")"))
1469 #:phases
1470 '(modify-phases %standard-phases
1471 (add-after 'unpack 'compatibility
1472 (lambda _
1473 ;; httpx version 0.28.0 removed the "app" shortcut.
1474 (substitute* "tests/test_manager.py"
1475 (("app=manager.app")
1476 "transport=httpx.ASGITransport(manager.app)")))))))
1477 (native-inputs (list python-httpx
1478 python-pytest
1479 python-pytest-asyncio
1480 python-pytest-trio
1481 python-starlette
1482 python-setuptools
1483 python-wheel))
1484 (propagated-inputs (list python-sniffio))
1485 (home-page "https://github.com/florimondmanca/asgi-lifespan")
1486 (synopsis "Programmatic startup/shutdown of ASGI apps")
1487 (description "Programmatically send startup/shutdown lifespan events
1488into Asynchronous Server Gateway Interface (ASGI) applications. When
1489used in combination with an ASGI-capable HTTP client such as HTTPX, this
1490allows mocking or testing ASGI applications without having to spin up an
1491ASGI server.")
1492 (license license:expat)))
1493
1494(define-public python-asgiref
1495 (package
1496 (name "python-asgiref")
1497 (version "3.11.1")
1498 (source
1499 (origin
1500 (method git-fetch)
1501 (uri (git-reference
1502 (url "https://github.com/django/asgiref/")
1503 (commit version)))
1504 (file-name (git-file-name name version))
1505 (sha256
1506 (base32 "19l03mx81dqhnnqa98073x1q243ndlknax0kva7azr9g12ixl69j"))))
1507 (build-system pyproject-build-system)
1508 (native-inputs
1509 (list python-pytest
1510 python-pytest-asyncio
1511 python-setuptools))
1512 (home-page "https://github.com/django/asgiref/")
1513 (synopsis "ASGI specs, helper code, and adapters")
1514 (description
1515 "ASGI is a standard for Python asynchronous web apps and servers to
1516communicate with each other, and positioned as an asynchronous successor to
1517WSGI. This package includes libraries for implementing ASGI servers.")
1518 (license license:bsd-3)))
1519
1520(define-public python-asyncer
1521 (package
1522 (name "python-asyncer")
1523 (version "0.0.17")
1524 (source
1525 (origin
1526 (method git-fetch)
1527 (uri (git-reference
1528 (url "https://github.com/fastapi/asyncer")
1529 (commit version)))
1530 (file-name (git-file-name name version))
1531 (sha256
1532 (base32 "1f4ids6sxwmz89yj98z0qc4qvfkklh0psbxv5px39k807g9aq7p2"))))
1533 (build-system pyproject-build-system)
1534 (native-inputs
1535 (list python-pdm-backend
1536 python-pytest))
1537 (propagated-inputs
1538 (list python-anyio
1539 python-sniffio
1540 python-typing-extensions))
1541 (home-page "https://asyncer.tiangolo.com/")
1542 (synopsis "Asyncer, async and await, focused on developer experience")
1543 (description
1544 "Asyncer is a small library built on top of
1545@url{https://anyio.readthedocs.io/en/stable/, AnyIO}.
1546
1547The main goal of Asyncer is to improve developer experience by providing
1548better support for autocompletion and inline errors in the editor, and more
1549certainty that the code is bug-free by providing better support for type
1550checking tools like mypy.")
1551 (license license:expat)))
1552
1553(define-public python-asyncudp
1554 (package
1555 (name "python-asyncudp")
1556 (version "0.11.0")
1557 (source
1558 (origin
1559 (method git-fetch)
1560 (uri (git-reference
1561 (url "https://github.com/eerimoq/asyncudp")
1562 (commit version)))
1563 (file-name (git-file-name name version))
1564 (sha256
1565 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
1566 (build-system pyproject-build-system)
1567 (native-inputs (list python-pytest python-setuptools))
1568 (home-page (git-reference-url (origin-uri source)))
1569 (synopsis "High level UDP sockets for asyncio")
1570 (description
1571 "This package provides a Python library offering high level UDP sockets
1572for asyncio. Import it alongside asyncio and use its API to send and receive
1573UDP packets.")
1574 (license license:expat)))
1575
1576(define-public python-authlib
1577 (package
1578 (name "python-authlib")
1579 (version "1.6.12")
1580 (source
1581 (origin
1582 (method git-fetch)
1583 (uri (git-reference
1584 (url "https://github.com/authlib/authlib")
1585 (commit (string-append "v" version))))
1586 (file-name (git-file-name name version))
1587 (sha256
1588 (base32 "0vh1kvmipxa8xp3x5jwqg1gzy4zac2skfj1mv5698jsmfzs2zd8w"))))
1589 (build-system pyproject-build-system)
1590 (arguments
1591 (list
1592 #:test-flags
1593 ;; httpx2 has succeed httpx in authlib 1.8.0 (2026-08-30) which requires
1594 ;; cryptography >= 45.0.1; leave it for the next python-team cycle and
1595 ;; ignore httpx tests for now.
1596 #~(list "--ignore=tests/clients/test_httpx/")
1597 #:phases
1598 #~(modify-phases %standard-phases
1599 (add-before 'check 'pre-check
1600 (lambda _
1601 (setenv "DJANGO_SETTINGS_MODULE" "tests.django_settings"))))))
1602 (propagated-inputs
1603 (list python-cryptography
1604 ;; [optional]
1605 python-anyio
1606 python-asgiref
1607 python-cachelib
1608 python-django
1609 python-flask
1610 python-flask-sqlalchemy
1611 python-httpx
1612 python-requests
1613 python-starlette))
1614 (native-inputs
1615 (list python-pytest
1616 python-pytest-asyncio
1617 python-pytest-django
1618 python-setuptools))
1619 (home-page "https://authlib.org/")
1620 (synopsis "Build OAuth and OpenID Connect servers and clients")
1621 (description
1622 "This is a Python library for building OAuth and OpenID Connect servers
1623and clients.")
1624 (license license:bsd-3)))
1625
1626(define-public python-autobahn
1627 (package
1628 (name "python-autobahn")
1629 (version "25.11.1")
1630 (source
1631 (origin
1632 (method url-fetch)
1633 (uri (pypi-uri "autobahn" version))
1634 (sha256
1635 (base32
1636 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
1637 (build-system pyproject-build-system)
1638 (arguments
1639 (list
1640 ;; The tests fail to run:
1641 ;; https://github.com/crossbario/autobahn-python/issues/1117
1642 #:tests? #f
1643 #:phases #~(modify-phases %standard-phases
1644 (add-after 'unpack 'relax-zope-interface
1645 (lambda _
1646 ;; python-zope-interface is a world rebuild package
1647 ;; and our one-digit lower minor version seems to be
1648 ;; fine.
1649 (substitute* "setup.py"
1650 (("zope.interface>=5.2.0")
1651 "zope.interface>=5.1.0"))))
1652 (add-after 'unpack 'strip-xbr
1653 (lambda _
1654 ;; Strip new XBR feature which isn't available in Guix.
1655 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
1656 (native-inputs (list python-setuptools python-wheel))
1657 (propagated-inputs (list python-cbor2
1658 python-cryptography
1659 python-hyperlink
1660 python-msgpack
1661 python-py-ubjson
1662 python-twisted
1663 python-txaio
1664 python-ujson))
1665 (home-page "https://github.com/crossbario/autobahn-python/")
1666 (synopsis "Web Application Messaging Protocol implementation")
1667 (description "This package provides an implementation of the @dfn{Web Application
1668Messaging Protocol} (WAMP). WAMP connects components in distributed
1669applications using Publish and Subscribe (PubSub) and routed Remote Procedure
1670Calls (rRPC). It is ideal for distributed, multi-client and server applications
1671such as IoT applications or multi-user database-driven business applications.")
1672 (license license:expat)))
1673
1674(define-public python-aws-sam-translator
1675 (package
1676 (name "python-aws-sam-translator")
1677 (version "1.107.0")
1678 (source
1679 (origin
1680 (method git-fetch) ; no tests in PyPI release
1681 (uri (git-reference
1682 (url "https://github.com/aws/serverless-application-model")
1683 (commit (string-append "v" version))))
1684 (file-name (git-file-name name version))
1685 (sha256
1686 (base32 "0bx9ha9k6zx6gl1hsgm6cpq4xrfn604v2g1d5dh2d5zq0463gwfq"))))
1687 (build-system pyproject-build-system)
1688 (arguments
1689 (list
1690 #:test-flags
1691 #~(list "--numprocesses" (number->string (parallel-job-count))
1692 "--ignore=tests/bin/test_public_interface.py"
1693 "tests")
1694 #:phases
1695 #~(modify-phases %standard-phases
1696 (add-before 'check 'pre-check
1697 (lambda _
1698 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
1699 (native-inputs
1700 (list python-pytest
1701 python-pytest-rerunfailures
1702 python-pytest-xdist
1703 python-parameterized
1704 python-pyyaml
1705 python-setuptools))
1706 (propagated-inputs
1707 (list python-boto3
1708 python-jsonschema
1709 python-pydantic
1710 python-typing-extensions))
1711 (home-page "https://github.com/aws/serverless-application-model")
1712 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
1713 (description
1714 "AWS SAM Translator is a library that transform @dfn{Serverless Application
1715Model} (SAM) templates into AWS CloudFormation templates.")
1716 (license license:asl2.0)))
1717
1718(define-public python-aws-xray-sdk
1719 (package
1720 (name "python-aws-xray-sdk")
1721 (version "2.14.0")
1722 (home-page "https://github.com/aws/aws-xray-sdk-python")
1723 (source (origin
1724 (method git-fetch)
1725 (uri (git-reference (url home-page) (commit version)))
1726 (file-name (git-file-name name version))
1727 (sha256
1728 (base32
1729 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
1730 (build-system pyproject-build-system)
1731 (arguments
1732 (list
1733 #:test-flags
1734 '(list ;; Tries to connect to external network resources
1735 "--ignore=tests/ext/aiohttp/test_client.py"
1736 "--ignore=tests/ext/httplib/test_httplib.py"
1737 "--ignore=tests/ext/httpx"
1738 "--ignore=tests/ext/requests/test_requests.py"
1739 ;; TODO: How to configure Django for these tests?
1740 "--ignore=tests/ext/django"
1741 ;; These tests require packages not yet in Guix.
1742 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
1743 "--ignore=tests/ext/aiohttp/test_middleware.py"
1744 "--ignore=tests/ext/pg8000/test_pg8000.py"
1745 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
1746 "--ignore=tests/ext/pymysql/test_pymysql.py"
1747 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
1748 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
1749 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
1750 "--ignore=tests/test_async_recorder.py"
1751 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
1752 "--ignore-glob=tests/ext/sqlalchemy*"
1753 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
1754 ;; FIXME: Why is this failing?
1755 "--ignore=tests/test_patcher.py"
1756 "--ignore=tests/test_lambda_context.py")
1757 #:phases
1758 '(modify-phases %standard-phases
1759 (add-before 'check 'pre-check
1760 (lambda _
1761 ;; Allow "import tests.utils" to work as expected.
1762 (setenv "PYTHONPATH" (getcwd)))))))
1763 (native-inputs
1764 (list ;; These are required for the test suite.
1765 python-aiohttp
1766 python-bottle
1767 python-flask
1768 python-flask-sqlalchemy
1769 python-httpx
1770 python-mock
1771 python-pymysql
1772 python-pytest
1773 python-pytest-asyncio-0.26
1774 python-pytest-benchmark
1775 python-setuptools
1776 python-sqlalchemy
1777 python-webtest))
1778 (propagated-inputs
1779 (list python-botocore
1780 python-jsonpickle
1781 python-requests
1782 python-wrapt))
1783 (synopsis "Profile applications on AWS X-Ray")
1784 (description
1785 "The AWS X-Ray SDK for Python enables Python developers to record and
1786emit information from within their applications to the AWS X-Ray service.")
1787 (license license:asl2.0)))
1788
1789(define-public python-awscrt
1790 (package
1791 (name "python-awscrt")
1792 (version "0.36.0")
1793 (source
1794 (origin
1795 (method url-fetch)
1796 (uri (pypi-uri "awscrt" version))
1797 (sha256
1798 (base32 "0jh6niq9kgv0canm11ad8zibywwirdfxg4bqyd8jhaiv3x39h8dd"))))
1799 (build-system pyproject-build-system)
1800 (arguments
1801 (list
1802 #:test-backend #~'unittest
1803 #:test-flags #~(list "discover" "--verbose")
1804 #:phases
1805 #~(modify-phases %standard-phases
1806 (add-after 'unpack 'disable-broken-tests
1807 (lambda _
1808 ;; Disable broken tests. These tests fail because they depend on
1809 ;; specific DNS configuration and/or AWS credentials, which isn't
1810 ;; available in this context.
1811 (substitute* "test/test_auth.py"
1812 (("def test_default_provider")
1813 "def _test_default_provider"))
1814 (substitute* "test/test_aiohttp_client.py"
1815 (("def test_h2_remote_end_stream_ordering")
1816 "def _test_h2_remote_end_stream_ordering")
1817 (("def test_cross_thread_http2_client")
1818 "def _test_cross_thread_http2_client")
1819 (("def test_h2_client")
1820 "def _test_h2_client")
1821 (("def test_h2_manual_write_exception")
1822 "def _test_h2_manual_write_exception"))
1823 (substitute* "test/test_http_client.py"
1824 (("def test_h2_client")
1825 "def _test_h2_client")
1826 (("def test_h2_remote_end_stream_ordering")
1827 "def _test_h2_remote_end_stream_ordering")
1828 (("def test_h2_manual_write_exception")
1829 "def _test_h2_manual_write_exception"))
1830 (substitute* "test/test_s3.py"
1831 (("def test_sanity")
1832 "def _test_sanity")
1833 (("def test_sanity_secure")
1834 "def _test_sanity_secure")
1835 (("def test_wait_shutdown")
1836 "def _test_wait_shutdown"))
1837 (substitute* "test/test_io.py"
1838 ;; This test seems specifically broken. It waits for a shutdown event
1839 ;; from a group of singletons that will never occur because several of
1840 ;; the singleton references are held beyond the lifetime of this test.
1841 (("def test_shutdown_complete_singleton")
1842 "def _test_shutdown_complete_singleton"))))
1843 (add-after 'unpack 'override-cert-bundle-location
1844 (lambda* (#:key inputs #:allow-other-keys)
1845 (let ((bundle (search-input-file inputs
1846 "/etc/ssl/certs/ca-certificates.crt")))
1847 (setenv "SSL_CERT_FILE" bundle)
1848 (substitute* "awscrt/io.py"
1849 (("( +)opt = TlsContextOptions\\(\\)" m indent)
1850 (string-append m "\n"
1851 indent "import os\n"
1852 indent "\
1853opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n"))
1854 (("^( +)self\\.no_certificate_revocation = False" all indent)
1855 (string-append all "\n"
1856 indent "import os as _os\n"
1857 indent "_ca_file = _os.environ.get('SSL_CERT_FILE')\n"
1858 indent "if _ca_file:\n"
1859 indent " self.override_default_trust_store(_read_binary_file(_ca_file))\n")))
1860 (substitute* "test/appexit_http.py"
1861 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
1862 (string-append m indent
1863 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
1864 bundle "')\n")))
1865 (substitute* "test/test_io.py"
1866 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
1867 (string-append m indent
1868 "opt.override_default_trust_store_from_path(None, '"
1869 bundle "')\n"))))))
1870 (add-after 'unpack 'use-system-libraries
1871 (lambda _
1872 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
1873 (inputs (list openssl))
1874 (native-inputs (list cmake-minimal
1875 nss-certs-for-test
1876 python-boto3
1877 python-setuptools
1878 python-websockets
1879 python-h2))
1880 (home-page "https://github.com/awslabs/aws-crt-python")
1881 (synopsis "Common runtime for AWS Python projects")
1882 (description
1883 "This package provides a common runtime for AWS Python projects.")
1884 (license license:asl2.0)))
1885
1886(define-public python-azure-common
1887 (package
1888 (name "python-azure-common")
1889 (version "1.1.28")
1890 (source
1891 (origin
1892 (method url-fetch)
1893 (uri (pypi-uri "azure-common" version ".zip"))
1894 (sha256
1895 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
1896 (build-system pyproject-build-system)
1897 (arguments
1898 (list #:tests? #f)) ;no tests in PyPI archive
1899 (propagated-inputs (list python-azure-nspkg))
1900 (native-inputs (list python-setuptools unzip))
1901 (home-page "https://github.com/Azure/azure-sdk-for-python")
1902 (synopsis "Microsoft Azure Client library for Python")
1903 (description "This package provides the Microsoft Azure Client library for
1904Python.")
1905 (license license:expat)))
1906
1907(define-public python-azure-core
1908 (package
1909 (name "python-azure-core")
1910 (version "1.32.0")
1911 (source
1912 (origin
1913 (method url-fetch)
1914 (uri (pypi-uri "azure_core" version))
1915 (sha256
1916 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
1917 (build-system pyproject-build-system)
1918 (arguments
1919 (list
1920 #:test-flags
1921 `(list ;; This fails because devtools_testutils doesn't exist.
1922 "--ignore=tests/test_connection_string_parsing.py"
1923 ;; These all need network access.
1924 "--ignore=samples"
1925 "--ignore=tests/async_tests/test_streaming_async.py"
1926 "--ignore=tests/test_streaming.py"
1927 "-m" "not asyncio and not live_test_only"
1928 "-k" ,(string-append
1929 "not test_decompress_plain_no_header"
1930 " and not test_compress_plain_no_header"
1931 " and not test_decompress_compressed_no_header"
1932 " and not test_requests_socket_timeout"))
1933 #:phases
1934 #~(modify-phases %standard-phases
1935 (add-before 'check 'add-test-pythonpath
1936 (lambda* (#:key tests? #:allow-other-keys)
1937 (when tests?
1938 (setenv "PYTHONPATH"
1939 (string-append
1940 (getcwd) "/tests/testserver_tests/coretestserver:"
1941 (getenv "GUIX_PYTHONPATH")))))))))
1942 (propagated-inputs
1943 (list python-aiohttp
1944 python-requests
1945 python-six
1946 python-typing-extensions))
1947 (native-inputs
1948 (list python-flask
1949 python-pytest-8
1950 python-pytest-aiohttp
1951 python-pytest-asyncio
1952 python-pytest-trio
1953 python-setuptools
1954 python-wheel))
1955 (home-page "https://github.com/Azure/azure-sdk-for-python")
1956 (synopsis "Microsoft Azure Core library for Python")
1957 (description "This package provides the Microsoft Azure Core library for
1958Python.")
1959 (license license:expat)))
1960
1961(define-public python-azure-nspkg
1962 (package
1963 (name "python-azure-nspkg")
1964 (version "3.0.2")
1965 (source
1966 (origin
1967 (method url-fetch)
1968 (uri (pypi-uri "azure-nspkg" version ".zip"))
1969 (sha256
1970 (base32
1971 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
1972 (build-system pyproject-build-system)
1973 (arguments (list #:tests? #f)) ;no tests in package
1974 (native-inputs (list unzip python-setuptools))
1975 (home-page "https://github.com/Azure/azure-sdk-for-python")
1976 (synopsis "Azure namespace internals")
1977 (description
1978 "This package is an internal Azure namespace package.")
1979 (license license:expat)))
1980
1981(define-public python-azure-storage-blob
1982 (package
1983 (name "python-azure-storage-blob")
1984 (version "12.27.0")
1985 (source
1986 (origin
1987 (method url-fetch)
1988 (uri (pypi-uri "azure_storage_blob" version))
1989 (sha256
1990 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
1991 (build-system pyproject-build-system)
1992 (arguments
1993 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
1994 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
1995 ;; it hard to package in Guix.
1996 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
1997 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
1998 (list #:tests? #f))
1999 (native-inputs
2000 (list python-setuptools))
2001 (propagated-inputs
2002 (list python-azure-core
2003 python-cryptography
2004 python-isodate
2005 python-typing-extensions))
2006 (home-page "https://github.com/Azure/azure-sdk-for-python/")
2007 (synopsis "Microsoft Azure Blob Storage client library for Python")
2008 (description "This package provides the Microsoft Azure Blob Storage
2009Client Library for Python.")
2010 (license license:expat)))
2011
2012(define-public python-azure-storage-file-datalake
2013 (package
2014 (name "python-azure-storage-file-datalake")
2015 (version "12.22.0")
2016 (source
2017 (origin
2018 (method url-fetch)
2019 (uri (pypi-uri "azure_storage_file_datalake" version))
2020 (sha256
2021 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
2022 (build-system pyproject-build-system)
2023 (arguments
2024 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
2025 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
2026 ;; it hard to package in Guix.
2027 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
2028 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
2029 (list #:tests? #f))
2030 (native-inputs
2031 (list python-setuptools))
2032 (propagated-inputs
2033 (list python-azure-core
2034 python-azure-storage-blob
2035 python-isodate
2036 python-typing-extensions))
2037 (home-page "https://github.com/Azure/azure-sdk-for-python")
2038 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
2039 (description
2040 "This package provides the Microsoft Azure File @code{DataLake} Storage
2041Client Library for Python.")
2042 (license license:expat)))
2043
2044(define-public python-azure-storage-nspkg
2045 (package
2046 (name "python-azure-storage-nspkg")
2047 (version "3.1.0")
2048 (source
2049 (origin
2050 (method url-fetch)
2051 (uri (pypi-uri "azure-storage-nspkg" version))
2052 (sha256
2053 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
2054 (build-system pyproject-build-system)
2055 (arguments
2056 (list #:tests? #f)) ;no tests in PyPI archive
2057 (native-inputs (list python-setuptools))
2058 (propagated-inputs (list python-azure-nspkg))
2059 (home-page "https://github.com/Azure/azure-storage-python")
2060 (synopsis "Microsoft Azure Storage Namespace package")
2061 (description
2062 "This project provides a client library in Python that makes it easy to
2063communicate with Microsoft Azure Storage services.")
2064 (license license:expat)))
2065
2066(define-public python-behave-web-api
2067 (package
2068 (name "python-behave-web-api")
2069 (version "2.3.0")
2070 (source
2071 (origin
2072 (method git-fetch)
2073 (uri (git-reference
2074 (url "https://github.com/jefersondaniel/behave-web-api")
2075 (commit (string-append "v" version))))
2076 (file-name (git-file-name name version))
2077 (sha256
2078 (base32 "1r8yx8gb5m599cpdqfvk6z9ax3qj26fpvczdr84z8jya0dxfch4p"))))
2079 (build-system pyproject-build-system)
2080 (native-inputs
2081 (list python-pytest
2082 python-setuptools))
2083 (propagated-inputs
2084 (list behave
2085 python-requests))
2086 (home-page "https://github.com/jefersondaniel/behave-web-api")
2087 (synopsis "Provides testing for JSON APIs with Behave for Python")
2088 (description "This package provides testing utility modules for testing
2089JSON APIs with Behave.")
2090 (license license:expat)))
2091
2092(define-public python-beren
2093 (package
2094 (name "python-beren")
2095 (version "0.7.0")
2096 (source
2097 (origin
2098 (method git-fetch)
2099 (uri (git-reference
2100 (url "https://github.com/teffalump/beren")
2101 (commit (string-append "v" version))))
2102 (file-name (git-file-name name version))
2103 (sha256
2104 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
2105 (build-system pyproject-build-system)
2106 (arguments
2107 ;; The test tries to open a connection to a remote server.
2108 `(#:tests? #f))
2109 (native-inputs (list python-setuptools))
2110 (propagated-inputs (list python-apiron))
2111 (home-page "https://github.com/teffalump/beren")
2112 (synopsis "REST client for Orthanc DICOM servers")
2113 (description
2114 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
2115 (license license:gpl3+)))
2116
2117(define-public python-betamax
2118 (package
2119 (name "python-betamax")
2120 (version "0.9.0")
2121 (source
2122 (origin
2123 (method url-fetch)
2124 (uri (pypi-uri "betamax" version))
2125 (sha256
2126 (base32
2127 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
2128 (build-system pyproject-build-system)
2129 (arguments
2130 (list
2131 #:test-flags
2132 #~(list "-k" (string-join
2133 ;; Tests require network access to http://httpbin.org/get.
2134 (list "not test_creates_new_cassettes"
2135 "test_placeholders_work"
2136 "test_post_start_hook"
2137 "test_pre_stop_hook"
2138 "test_preplayback_hook"
2139 "test_prerecord_hook"
2140 "test_prerecord_ignoring_hook"
2141 "test_records_new_events_with_existing_cassette"
2142 "test_records_new_interaction"
2143 "test_records_new_interactions"
2144 "test_replaces_old_interactions"
2145 "test_replays_response_from_cassette"
2146 "test_requests_with_json_body"
2147 "test_saves_content_as_gzip"
2148 "test_unicode_is_saved_properly")
2149 " and not "))))
2150 (native-inputs
2151 (list nss-certs-for-test
2152 python-pytest
2153 python-setuptools))
2154 (propagated-inputs
2155 (list python-requests))
2156 (home-page "https://github.com/sigmavirus24/betamax")
2157 (synopsis "Record HTTP interactions with python-requests")
2158 (description
2159 "Betamax will record your test suite's HTTP interactions and replay them
2160during future tests. It is designed to work with python-requests.")
2161 (license license:expat)))
2162
2163(define-public python-betamax-matchers
2164 (package
2165 (name "python-betamax-matchers")
2166 (version "0.4.0")
2167 (source
2168 (origin
2169 (method git-fetch)
2170 (uri (git-reference
2171 (url "https://github.com/sigmavirus24/betamax_matchers")
2172 (commit version)))
2173 (file-name (git-file-name name version))
2174 (sha256
2175 (base32 "0lyg3r91hwfvavyi5k6sddcla37igigycfv1mx40c32byqwl6pq5"))))
2176 (build-system pyproject-build-system)
2177 (native-inputs (list python-pytest python-setuptools))
2178 (propagated-inputs (list python-betamax python-requests-toolbelt))
2179 (home-page "https://github.com/sigmavirus24/betamax_matchers")
2180 (synopsis "VCR imitation for python-requests")
2181 (description "@code{betamax-matchers} provides a set of Matchers for
2182Betamax.")
2183 (license license:asl2.0)))
2184
2185(define-public python-betamax-serializers
2186 (package
2187 (name "python-betamax-serializers")
2188 (version "0.2.1")
2189 (source
2190 (origin
2191 (method git-fetch)
2192 (uri (git-reference
2193 (url "https://gitlab.com/betamax/serializers")
2194 (commit version)))
2195 (file-name (git-file-name name version))
2196 (sha256
2197 (base32 "1p2l5w3vwvjacs2ndahgcjq55qb53i37p8mz1zh85pjxyszdyw2l"))))
2198 (build-system pyproject-build-system)
2199 (arguments (list #:tests? #f)) ; No tests.
2200 (native-inputs (list python-setuptools))
2201 (propagated-inputs (list python-betamax python-pyyaml))
2202 (synopsis "Set of third-party serializers for Betamax")
2203 (description
2204 "Betamax-Serializers are an experimental set of Serializers for Betamax
2205that may possibly end up in the main package.")
2206 (home-page "https://gitlab.com/betamax/serializers")
2207 (license license:asl2.0)))
2208
2209(define-public python-blacksheep
2210 (package
2211 (name "python-blacksheep")
2212 (version "2.6.3")
2213 (source
2214 (origin
2215 (method git-fetch)
2216 (uri (git-reference
2217 (url "https://github.com/Neoteroi/BlackSheep")
2218 (commit (string-append "v" version))))
2219 (file-name (git-file-name name version))
2220 (sha256
2221 (base32 "1k6yqsqnh6nnhi8z5v2yqpxs7qsk35zwd7gcr7cdh825f2vrl7js"))))
2222 (build-system pyproject-build-system)
2223 (arguments
2224 (list
2225 ;; tests: 1821 passed
2226 ;;
2227 ;; Run all unit tests, but do not run integration tests from `itests`
2228 ;; directory.
2229 #:test-flags
2230 #~(list "tests")
2231 #:phases
2232 #~(modify-phases %standard-phases
2233 (add-before 'build 'cythonize
2234 (lambda _
2235 (with-directory-excursion "blacksheep"
2236 (for-each (lambda (file)
2237 (invoke "cython" "-3" file "-I" "."))
2238 (find-files "." ".*\\.pyx$"))))))))
2239 (native-inputs
2240 (list nss-certs-for-test
2241 python-cython
2242 python-defusedxml
2243 python-flask
2244 python-jinja2
2245 python-pydantic
2246 python-pyjwt
2247 python-pytest
2248 python-pytest-asyncio
2249 python-setuptools
2250 python-starlette))
2251 (propagated-inputs
2252 (list python-certifi
2253 python-essentials
2254 python-essentials-openapi
2255 python-guardpost
2256 python-httptools
2257 python-rodi
2258 python-itsdangerous))
2259 (home-page "https://github.com/Neoteroi/BlackSheep")
2260 (synopsis "Asynchronous framework to build event based web applications")
2261 (description
2262 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
2263
2264The framework offers
2265@itemize
2266@item A rich code API, based on dependency injection and inspired by Flask and
2267ASP.NET Core.
2268@item A typing-friendly codebase, which enables a comfortable development
2269experience thanks to hints when coding with IDEs.
2270@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
2271and JSON.
2272@item A cross-platform framework, using the most modern versions of Python.
2273@item Good performance.
2274@end itemize")
2275 (license license:expat)))
2276
2277(define-public python-bleach
2278 (package
2279 (name "python-bleach")
2280 (version "6.3.0")
2281 (source
2282 (origin
2283 (method git-fetch)
2284 (uri (git-reference
2285 (url "https://github.com/mozilla/bleach")
2286 (commit (string-append "v" version))))
2287 (file-name (git-file-name name version))
2288 (sha256
2289 (base32 "02abk9ixn010sqpbdsd7nxms0gv4prwv6d3nplb8giq85lpn1kkb"))
2290 (snippet
2291 #~(begin
2292 (use-modules (guix build utils))
2293 (substitute* (find-files "." "\\.py$")
2294 (("bleach\\._vendor\\.html5lib") "html5lib"))
2295 (delete-file-recursively "bleach/_vendor/html5lib")))))
2296 (build-system pyproject-build-system)
2297 (arguments
2298 (list
2299 ;; tests: 448 passed, 1 deselected, 3 xfailed
2300 #:test-flags
2301 #~(list (string-append "--deselect=tests/test_clean.py::"
2302 "test_self_closing_tags_self_close[wbr]"))
2303 #:phases
2304 #~(modify-phases %standard-phases
2305 (add-after 'unpack 'relax-requirements
2306 (lambda _
2307 ;; "tinycss2>=1.1.0,<1.5"
2308 ;; The 'sanity-check of python-nbclassic fails without this.
2309 (substitute* "setup.py"
2310 (("\"tinycss2.*") "")))))))
2311 (native-inputs
2312 (list python-pytest
2313 python-setuptools))
2314 (propagated-inputs
2315 (list python-html5lib
2316 python-tinycss2
2317 python-webencodings))
2318 (home-page "https://github.com/mozilla/bleach")
2319 (synopsis "Whitelist-based HTML-sanitizing tool")
2320 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
2321 (license license:asl2.0)))
2322
2323(define-public python-bottle
2324 (package
2325 (name "python-bottle")
2326 (version "0.13.4")
2327 (source
2328 (origin
2329 (method url-fetch)
2330 (uri (pypi-uri "bottle" version))
2331 (sha256
2332 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
2333 (build-system pyproject-build-system)
2334 (native-inputs (list python-pytest python-setuptools))
2335 (home-page "https://bottlepy.org/")
2336 (synopsis "WSGI framework for small web-applications")
2337 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
2338 (license license:expat)))
2339
2340(define-public python-branca
2341 (package
2342 (name "python-branca")
2343 (version "0.7.2")
2344 (source
2345 (origin
2346 (method git-fetch) ; no tests in PyPI
2347 (uri (git-reference
2348 (url "https://github.com/python-visualization/branca")
2349 (commit (string-append "v" version))))
2350 (file-name (git-file-name name version))
2351 (sha256
2352 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
2353 (build-system pyproject-build-system)
2354 (arguments
2355 ;; This file requires Selenium.
2356 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
2357 ;; This test passes but is very slow.
2358 "-k" "not test_color_brewer_extendability")))
2359 (propagated-inputs (list python-jinja2))
2360 (native-inputs
2361 (list python-numpy
2362 python-pytest
2363 python-setuptools
2364 python-setuptools-scm
2365 python-wheel))
2366 (home-page "https://github.com/python-visualization/branca")
2367 (synopsis "Generate complex HTML+JS pages with Python")
2368 (description "This library is a spinoff from @code{folium} that would host
2369the non-map-specific features. It can be used to generate HTML + JS.")
2370 (license license:expat)))
2371
2372(define-public python-btrees
2373 (package
2374 (name "python-btrees")
2375 (version "6.1")
2376 (source
2377 (origin
2378 (method git-fetch)
2379 (uri (git-reference
2380 (url "https://github.com/zopefoundation/BTrees")
2381 (commit version)))
2382 (file-name (git-file-name name version))
2383 (sha256
2384 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
2385 (build-system pyproject-build-system)
2386 (arguments
2387 (list
2388 #:phases
2389 #~(modify-phases %standard-phases
2390 (replace 'check
2391 (lambda* (#:key tests? #:allow-other-keys)
2392 (if tests?
2393 (invoke "zope-testrunner" "--test-path=src")
2394 (format #t "test suite not run~%")))))))
2395 (propagated-inputs (list python-persistent python-zope-interface))
2396 (native-inputs (list python-persistent python-transaction
2397 python-zope-testrunner python-setuptools))
2398 (home-page "https://github.com/zopefoundation/BTrees")
2399 (synopsis "Scalable persistent object containers")
2400 (description
2401 "This package contains a set of persistent object containers built around a
2402modified BTree data structure. The trees are optimized for use inside ZODB's
2403\"optimistic concurrency\" paradigm, and include explicit resolution of
2404conflicts detected by that mechanism.")
2405 (license license:zpl2.1)))
2406
2407(define-public python-cachecontrol
2408 (package
2409 (name "python-cachecontrol")
2410 (version "0.14.1")
2411 (source
2412 (origin
2413 (method git-fetch)
2414 (uri (git-reference
2415 (url "https://github.com/ionrock/cachecontrol")
2416 (commit (string-append "v" version))))
2417 (file-name (git-file-name name version))
2418 (sha256
2419 (base32
2420 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
2421 (build-system pyproject-build-system)
2422 (propagated-inputs
2423 (list python-filelock python-msgpack python-requests))
2424 (native-inputs
2425 (list python-cherrypy python-flit-core python-pytest))
2426 (home-page "https://github.com/ionrock/cachecontrol")
2427 (synopsis "The httplib2 caching algorithms for use with requests")
2428 (description "CacheControl is a port of the caching algorithms in
2429@code{httplib2} for use with @code{requests} session objects.")
2430 (license license:asl2.0)))
2431
2432(define-public python-canvasapi
2433 (package
2434 (name "python-canvasapi")
2435 (version "3.4.0")
2436 (source (origin
2437 (method git-fetch)
2438 (uri (git-reference
2439 (url "https://github.com/ucfopen/canvasapi")
2440 (commit (string-append "v" version))))
2441 (file-name (git-file-name name version))
2442 (sha256
2443 (base32
2444 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
2445 (build-system pyproject-build-system)
2446 (propagated-inputs (list python-arrow python-pytz python-requests))
2447 (native-inputs (list python-pytest
2448 python-requests-mock
2449 python-setuptools
2450 python-urllib3))
2451 (home-page "https://github.com/ucfopen/canvasapi")
2452 (synopsis "API wrapper for the Canvas LMS")
2453 (description
2454 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
2455The library enables developers to programmatically manage Canvas courses,
2456users, gradebooks, and more.")
2457 (license license:expat)))
2458
2459(define-public python-cbor2
2460 (package
2461 (name "python-cbor2")
2462 (version "5.4.2.post1")
2463 (source
2464 (origin
2465 (method url-fetch)
2466 (uri (pypi-uri "cbor2" version))
2467 (sha256
2468 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
2469 (build-system pyproject-build-system)
2470 (native-inputs
2471 (list python-pytest python-setuptools python-setuptools-scm))
2472 (home-page "https://github.com/agronholm/cbor2")
2473 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
2474 (description "This Python library provides encoding and decoding for the
2475Concise Binary Object
2476Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
24778949}) serialization format. The specification is fully compatible with the
2478original RFC 7049. Among its features are:
2479@itemize
2480@item Simple API like the @code{json} or @code{pickle} modules.
2481@item Support many CBOR tags with stdlib objects.
2482@item Generic tag decoding.
2483@item Shared value references including cyclic references.
2484@item String references compact encoding with repeated strings replaced with
2485indices.
2486@item Optional C module backend tested on big- and little-endian architectures.
2487@item Extensible tagged value handling using tag_hook and object_hook on
2488decode and default on encode.
2489@end itemize")
2490 (license license:expat)))
2491
2492(define-public python-cfn-lint
2493 (package
2494 (name "python-cfn-lint")
2495 (version "1.38.1")
2496 (source
2497 (origin
2498 (method git-fetch)
2499 (uri (git-reference
2500 (url "https://github.com/aws-cloudformation/cfn-lint")
2501 (commit (string-append "v" version))))
2502 (file-name (git-file-name name version))
2503 (sha256
2504 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
2505 (build-system pyproject-build-system)
2506 (arguments
2507 (list
2508 ;; tests: 2136 passed, 11 deselected, 1 warning
2509 #:test-flags
2510 #~(list "--ignore=test/integration/"
2511 "-k" (string-join
2512 ;; Tests failing on doctest or comparing diff.
2513 (list "not test_build_graph"
2514 "test_good_template"
2515 "test_success_run"
2516 "test_update_docs"
2517 ;; ImportError: Missing optional dependencies sarif
2518 "test_sarif_formatter")
2519 " and not "))
2520 #:phases
2521 #~(modify-phases %standard-phases
2522 (add-after 'unpack 'remove-deprecated
2523 (lambda _
2524 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
2525 (("deprecated\": \"2025")
2526 "deprecated\": \"2125")))))))
2527 (native-inputs
2528 (list python-defusedxml
2529 python-pydot
2530 python-pytest
2531 python-setuptools))
2532 (propagated-inputs
2533 (list python-aws-sam-translator
2534 python-jsonpatch
2535 python-networkx
2536 python-pyyaml
2537 python-regex
2538 python-sympy
2539 python-typing-extensions
2540 ;; [optional]
2541 python-junit-xml))
2542 (home-page "https://github.com/aws-cloudformation/cfn-lint")
2543 (synopsis "Validate CloudFormation templates")
2544 (description
2545 "This package lets you validate CloudFormation YAML/JSON templates against
2546the CloudFormation spec and additional checks. Includes checking valid values
2547for resource properties and best practices.")
2548 (license license:expat)))
2549
2550(define-public python-cheroot
2551 (package
2552 (name "python-cheroot")
2553 (version "11.1.2")
2554 (source
2555 (origin
2556 (method git-fetch)
2557 (uri (git-reference
2558 (url "https://github.com/cherrypy/cheroot")
2559 (commit (string-append "v" version))))
2560 (file-name (git-file-name name version))
2561 (sha256
2562 (base32 "02rhci01m5fcn8mqpvq3c35rs4n28gxlfvfw2if2f85rgwrji8y8"))
2563 ;; TODO: Remove this patch on next release.
2564 (patches (search-patches "python-cheroot-openssl-test.patch"))))
2565 (build-system pyproject-build-system)
2566 (arguments
2567 (list
2568 ;; tests: 150 passed, 3 xfailed, 7 warnings
2569 #:test-flags
2570 ;; To prevent dependency on python-pypytools which depends on python-py
2571 ;; both marked as deprecated by maintainers, see:
2572 ;; <https://codeberg.org/guix/guix/issues/7475>.
2573 #~(list "--ignore=cheroot/test/test_server.py")
2574 #:phases
2575 #~(modify-phases %standard-phases
2576 (add-after 'unpack 'fix-pytest-config
2577 (lambda _
2578 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
2579 (delete-file "pytest.ini"))))))
2580 (native-inputs
2581 (list python-portend
2582 python-pyopenssl
2583 python-pytest
2584 python-pytest-mock
2585 python-requests
2586 python-requests-toolbelt
2587 python-setuptools
2588 python-setuptools-scm
2589 python-trustme))
2590 (propagated-inputs
2591 (list python-jaraco-functools
2592 python-more-itertools))
2593 (home-page "https://cheroot.cherrypy.dev")
2594 (synopsis "Highly-optimized, pure-python HTTP server")
2595 (description
2596 "Cheroot is a high-performance, pure-Python HTTP server.")
2597 (license license:bsd-3)))
2598
2599(define-public python-cherrypy
2600 (package
2601 (name "python-cherrypy")
2602 (properties '((commit . "1f75bc9eed8e0e385f64f368bd69f58d96fb8c2b")
2603 (revision . "0")))
2604 (version (git-version "18.10.0"
2605 (assoc-ref properties 'revision)
2606 (assoc-ref properties 'commit)))
2607 (source
2608 (origin
2609 (method git-fetch)
2610 (uri (git-reference
2611 (url "https://github.com/cherrypy/cherrypy")
2612 (commit (assoc-ref properties 'commit))))
2613 (file-name (git-file-name name version))
2614 (sha256
2615 (base32 "1l01a4sbfm42s5xp6ngphgqf0yb65ksqbsb27kznvybblyaxfa9p"))))
2616 (build-system pyproject-build-system)
2617 (arguments
2618 (list
2619 ;; tests: 288 passed, 9 skipped, 1 xfailed, 2 xpassed, 15 warnings
2620 #:phases
2621 #~(modify-phases %standard-phases
2622 (add-after 'unpack 'fix-pytest-config
2623 (lambda _
2624 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
2625 (delete-file "pytest.ini")))
2626 (add-after 'unpack 'patch-pyproject
2627 (lambda _
2628 (substitute* "pyproject.toml"
2629 (("\"cherrypy.scaffold\",")
2630 (string-join
2631 (list "\"cherrypy.scaffold\""
2632 "\"cherrypy._private_api\""
2633 "\"cherrypy._private_api.compat\",")
2634 ",\n "))))))))
2635 (propagated-inputs
2636 (list python-cheroot
2637 python-filelock
2638 python-jaraco-collections
2639 python-more-itertools
2640 python-portend))
2641 (native-inputs
2642 (list python-path
2643 python-pytest
2644 python-pytest-services
2645 python-requests
2646 python-requests-toolbelt
2647 python-setuptools
2648 python-setuptools-scm))
2649 (home-page "https://www.cherrypy.dev")
2650 (synopsis "Object-Oriented HTTP framework")
2651 (description
2652 "CherryPy is a pythonic, object-oriented web framework. It helps in
2653building web applications in the same way any other object-oriented Python
2654program would be built.")
2655 (license license:bsd-3)))
2656
2657(define-public python-cloud-init
2658 (package
2659 (name "python-cloud-init")
2660 (version "24.2")
2661 (source
2662 (origin
2663 (method git-fetch)
2664 (uri (git-reference
2665 (url "https://github.com/canonical/cloud-init")
2666 (commit version)))
2667 (file-name (git-file-name name version))
2668 (sha256
2669 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
2670 (build-system pyproject-build-system)
2671 (arguments
2672 (list
2673 #:test-flags
2674 '(list
2675 ;; This requires usermod
2676 "--ignore=tests/unittests/distros/test_create_users.py"
2677 ;; This writes to /var
2678 "--ignore=tests/unittests/net/test_dhcp.py"
2679 "-k"
2680 (string-append
2681 ;; This test messes with PATH, so it cannot find mkdir
2682 "not test_path_env_gets_set_from_main"
2683 " and not test_apt_configure_sources_list_"
2684 ;; These all fail because /bin/sh doesn't exist. We cannot patch
2685 ;; this because the generated scripts must use /bin/sh as they are
2686 ;; supposed to be run on minimal systems.
2687 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
2688 " and not test_handler_runs_bootcmd_script_with_error"
2689 " and not test_subp_combined_stderr_stdout"
2690 " and not test_handle_part"))
2691 #:phases
2692 #~(modify-phases %standard-phases
2693 (add-after 'unpack 'patch-references
2694 (lambda _
2695 (substitute* "tests/unittests/cmd/test_clean.py"
2696 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
2697 (add-after 'install 'move-files
2698 (lambda* (#:key inputs outputs #:allow-other-keys)
2699 (for-each (lambda (dir)
2700 (let ((source (string-append (site-packages inputs outputs) "/" dir))
2701 (target (string-append #$output "/" (basename dir))))
2702 (copy-recursively source target)
2703 (delete-file-recursively source)))
2704 (list "etc" "lib" "usr/lib" "usr/share")))))))
2705 (propagated-inputs
2706 (list python-configobj
2707 python-jinja2
2708 python-jsonpatch
2709 python-jsonschema
2710 python-netifaces
2711 python-oauthlib
2712 python-pyserial
2713 python-pyyaml
2714 python-responses))
2715 (native-inputs
2716 (list procps ;for ps when running tests
2717 python-pytest
2718 python-pytest-mock
2719 python-passlib
2720 python-setuptools
2721 python-wheel))
2722 (home-page "https://github.com/canonical/cloud-init")
2723 (synopsis "Cloud instance initialization tools")
2724 (description
2725 "Cloud-init is the multi-distribution method for cross-platform cloud
2726instance initialization. It is supported across all major public cloud
2727providers, provisioning systems for private cloud infrastructure, and
2728bare-metal installations.")
2729 ;; Either license can be chosen
2730 (license (list license:asl2.0 license:gpl3))))
2731
2732(define-public python-cloudpathlib
2733 (package
2734 (name "python-cloudpathlib")
2735 (version "0.23.0")
2736 (source
2737 (origin
2738 (method git-fetch)
2739 (uri (git-reference
2740 (url "https://github.com/drivendataorg/cloudpathlib")
2741 (commit (string-append "v" version))))
2742 (file-name (git-file-name name version))
2743 (sha256
2744 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
2745 (build-system pyproject-build-system)
2746 (arguments
2747 (list
2748 ;; tests: 977 passed, 15 skipped, 8642 warnings
2749 #:test-flags
2750 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
2751 ;; TODO: Package azure-identity (required for this file)
2752 "--ignore=tests/test_azure_specific.py"
2753 ;; TypeError: Retry.__init__() got an unexpected keyword
2754 ;; argument 'timeout'
2755 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")))
2756 (native-inputs
2757 (list ;; python-azure-identity
2758 python-dotenv
2759 python-flit-core
2760 python-psutil
2761 python-pydantic
2762 python-pytest
2763 python-pytest-cases
2764 python-pytest-reportlog
2765 python-pytest-xdist
2766 python-shortuuid
2767 python-tenacity))
2768 (propagated-inputs
2769 (list python-azure-storage-blob
2770 python-azure-storage-file-datalake
2771 python-boto3
2772 python-google-cloud-storage
2773 python-typing-extensions))
2774 (home-page "https://github.com/drivendataorg/cloudpathlib")
2775 (synopsis "Pathlib-style classes for cloud storage services")
2776 (description
2777 "This package provides a Python library with classes that mimic
2778@code{pathlib.Path}'s interface for URIs from different cloud storage
2779services.")
2780 (license license:expat)))
2781
2782(define-public python-cloudscraper
2783 (package
2784 (name "python-cloudscraper")
2785 (version "3.0.0")
2786 (source
2787 (origin
2788 (method git-fetch)
2789 (uri (git-reference
2790 (url "https://github.com/VeNoMouS/cloudscraper")
2791 (commit version)))
2792 (file-name (git-file-name name version))
2793 (sha256
2794 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
2795 (modules '((guix build utils)))
2796 (snippet
2797 '(with-directory-excursion "cloudscraper"
2798 (for-each delete-file
2799 '("captcha/9kw.py" "captcha/anticaptcha.py"))
2800 (substitute* "__init__.py"
2801 ;; Perhaps it's a joke, but don't promote proprietary software.
2802 (("([Th]is feature is not available) in the .*'" _ prefix)
2803 (string-append prefix ".'")))))))
2804 (build-system pyproject-build-system)
2805 (arguments
2806 (list
2807 #:test-flags
2808 #~(list "-k" "not test_403_handling")
2809 #:phases
2810 #~(modify-phases %standard-phases
2811 (add-after 'unpack 'relax-requirements
2812 (lambda _
2813 ;; XXX: Relax brotli dependency.
2814 (substitute* "pyproject.toml"
2815 (("\"brotli>=.*\"")
2816 "\"brotli\""))
2817 ;; XXX: Dependencies, that have not yet been packaged
2818 ;; and cause an import error when included.
2819 (delete-file "cloudscraper/interpreters/v8.py")))
2820 (add-after 'unpack 'fix-references
2821 (lambda _
2822 (substitute* "cloudscraper/interpreters/nodejs.py"
2823 (("'node'")
2824 (string-append "'" (which "node") "'"))))))))
2825 (inputs (list node-lts))
2826 (propagated-inputs
2827 (list python-pycryptodome
2828 python-brotli
2829 python-js2py
2830 python-polling2
2831 python-requests
2832 python-requests-toolbelt
2833 python-responses
2834 python-pyparsing
2835 python-websocket-client))
2836 (native-inputs (list python-pytest python-setuptools))
2837 (home-page "https://github.com/venomous/cloudscraper")
2838 (synopsis "Cloudflare anti-bot bypass")
2839 (description
2840 "This module acts as a webbrowser solving Cloudflare's Javascript
2841challenges.")
2842 (license license:expat)))
2843
2844(define-public python-conda-package-handling
2845 (package
2846 (name "python-conda-package-handling")
2847 (version "2.4.0")
2848 (source
2849 (origin
2850 (method git-fetch)
2851 (uri (git-reference
2852 (url "https://github.com/conda/conda-package-handling/")
2853 (commit version)))
2854 (file-name (git-file-name name version))
2855 (sha256
2856 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
2857 (build-system pyproject-build-system)
2858 (native-inputs
2859 (list python-bottle
2860 python-mock
2861 python-pytest-8
2862 python-pytest-mock
2863 python-setuptools))
2864 (propagated-inputs
2865 (list python-conda-package-streaming))
2866 (home-page "https://conda.io")
2867 (synopsis "Create and extract conda packages of various formats")
2868 (description
2869 "This library is an abstraction of Conda package handling and a tool for
2870extracting, creating, and converting between formats.")
2871 (license license:bsd-3)))
2872
2873(define-public python-conda-package-streaming
2874 (package
2875 (name "python-conda-package-streaming")
2876 (version "0.12.0")
2877 (source
2878 (origin
2879 (method url-fetch)
2880 (uri (pypi-uri "conda_package_streaming" version))
2881 (sha256
2882 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
2883 (build-system pyproject-build-system)
2884 (arguments
2885 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
2886 (list #:tests? #f))
2887 (native-inputs
2888 (list python-flit-core))
2889 (propagated-inputs
2890 (list python-requests
2891 python-zstandard))
2892 (home-page "https://conda.github.io/conda-package-streaming/")
2893 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
2894 (description
2895 "This package provides an efficient library to read from new and old format
2896@code{.conda} and @code{.tar.bz2} conda packages.")
2897 (license license:bsd-3)))
2898
2899(define-public python-css-html-js-minify
2900 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
2901 (revision "0"))
2902 (package
2903 (name "python-css-html-js-minify")
2904 (version (git-version "2.5.5" revision commit))
2905 (source
2906 (origin
2907 (method git-fetch)
2908 (uri (git-reference
2909 (url "https://github.com/juancarlospaco/css-html-js-minify")
2910 (commit commit)))
2911 (file-name (git-file-name name version))
2912 (sha256
2913 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
2914 (build-system pyproject-build-system)
2915 (arguments
2916 (list
2917 #:phases
2918 #~(modify-phases %standard-phases
2919 (add-after 'unpack 'relax-requirements
2920 (lambda _
2921 (substitute* "setup.cfg"
2922 (("^tests_require.*") "")))))))
2923 (native-inputs (list python-pytest python-setuptools))
2924 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
2925 (synopsis "CSS/HTML/JS minifier")
2926 (description
2927 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
2928 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
2929 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
2930 ;; looks like the user can choose a license.
2931 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
2932
2933(define-public python-css-parser
2934 (package
2935 (name "python-css-parser")
2936 (version "1.1.1")
2937 (source
2938 (origin
2939 (method git-fetch)
2940 (uri (git-reference
2941 (url "https://github.com/ebook-utils/css-parser")
2942 (commit (string-append "v" version))))
2943 (file-name (git-file-name name version))
2944 (sha256
2945 (base32 "0514g5a0r972lm883b3aja3b8jsxywmhxn4xpx7ksjpqmx38wga4"))))
2946 (build-system pyproject-build-system)
2947 (native-inputs
2948 (list python-pytest
2949 python-setuptools))
2950 (home-page "https://github.com/ebook-utils/css-parser")
2951 (synopsis "CSS related utilities for Python")
2952 (description
2953 "Css-parser is a Python package for parsing and building CSS
2954Cascading Style Sheets. Currently it provides a DOM only and no rendering
2955options.
2956
2957It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
2958cssutils not receiving updates as of 1.0.2.")
2959 (license license:lgpl3+)))
2960
2961(define-public python-cssmin
2962 (package
2963 (name "python-cssmin")
2964 (version "0.2.0")
2965 (source
2966 (origin
2967 (method git-fetch)
2968 (uri (git-reference
2969 (url "https://github.com/zacharyvoase/cssmin")
2970 (commit (string-append "v" version))))
2971 (file-name (git-file-name name version))
2972 (sha256
2973 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
2974 (build-system pyproject-build-system)
2975 (arguments (list #:tests? #f)) ; No tests.
2976 (native-inputs (list python-setuptools))
2977 (home-page "https://github.com/zacharyvoase/cssmin")
2978 (synopsis "Python port of the YUI CSS Compressor")
2979 (description "Python port of the YUI CSS Compressor.")
2980 (license (list license:expat license:bsd-3))))
2981
2982(define-public python-cssselect
2983 (package
2984 (name "python-cssselect")
2985 (version "1.4.0")
2986 (source
2987 (origin
2988 (method git-fetch)
2989 (uri (git-reference
2990 (url "https://github.com/scrapy/cssselect")
2991 (commit (string-append "v" version))))
2992 (file-name (git-file-name name version))
2993 (sha256
2994 (base32 "110l98x1mz1mxcal89xscsg28vg624sc0y6b5x1n2clwa19q5g4y"))))
2995 (build-system pyproject-build-system)
2996 (native-inputs
2997 (list python-hatchling python-lxml python-pytest))
2998 (home-page "https://github.com/scrapy/cssselect")
2999 (synopsis "CSS3 selector parser and translator to XPath 1.0")
3000 (description
3001 "Cssselect ia a Python module that parses CSS3 Selectors and translates
3002them to XPath 1.0 expressions. Such expressions can be used in lxml or
3003another XPath engine to find the matching elements in an XML or HTML document.")
3004 (license license:bsd-3)))
3005
3006(define-public python-cssselect2
3007 (package
3008 (name "python-cssselect2")
3009 (version "0.9.0")
3010 (source
3011 (origin
3012 (method git-fetch)
3013 (uri (git-reference
3014 (url "https://github.com/Kozea/cssselect2")
3015 (commit version)))
3016 (file-name (git-file-name name version))
3017 (sha256
3018 (base32 "1drvb83siq9s6dygyhab6kzk2v2ib6cv51ls42p4jrxs9q8cdiw0"))))
3019 (build-system pyproject-build-system)
3020 (propagated-inputs
3021 (list python-tinycss2))
3022 (native-inputs
3023 (list python-flit-core
3024 python-pytest))
3025 (home-page "https://doc.courtbouillon.org/cssselect2/stable/")
3026 (synopsis "CSS selectors for Python ElementTree")
3027 (description "@code{cssselect2} is a straightforward implementation of
3028CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
3029ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
3030
3031Unlike the Python package @code{cssselect}, it does not translate selectors to
3032XPath and therefore does not have all the correctness corner cases that are
3033hard or impossible to fix in cssselect.")
3034 (license license:bsd-3)))
3035
3036(define-public python-cssutils
3037 (package
3038 (name "python-cssutils")
3039 (version "2.15.0")
3040 (source
3041 (origin
3042 (method url-fetch)
3043 (uri (pypi-uri "cssutils" version))
3044 (sha256
3045 (base32 "08fhyw7x88xzhphm6jc6v72kw3i8iysw91x7rgd3fl4iycvr4wz9"))))
3046 (build-system pyproject-build-system)
3047 (arguments
3048 (list
3049 ;; tests: 399 passed, 2 skipped, 43 xfailed
3050 #:test-flags
3051 ;; Examples try to access http://cthedot.de/not-present.css.
3052 #~(list "--ignore=examples/")))
3053 (native-inputs
3054 (list python-cssselect
3055 python-jaraco-test
3056 python-pytest
3057 python-setuptools))
3058 (propagated-inputs
3059 (list python-encutils python-more-itertools))
3060 (home-page "https://github.com/jaraco/cssutils")
3061 (synopsis "CSS Cascading Style Sheets library for Python")
3062 (description
3063 "Cssutils is a Python package for parsing and building CSS Cascading
3064Style Sheets. Currently it provides a DOM only and no rendering options.")
3065 (license license:lgpl3+)))
3066
3067(define-public python-databricks-cli
3068 (package
3069 (name "python-databricks-cli")
3070 (version "0.18.0")
3071 (home-page "https://github.com/databricks/databricks-cli")
3072 (source (origin
3073 (method git-fetch)
3074 (uri (git-reference (url home-page) (commit version)))
3075 (file-name (git-file-name name version))
3076 (sha256
3077 (base32
3078 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
3079 (build-system pyproject-build-system)
3080 (arguments
3081 (list #:phases #~(modify-phases %standard-phases
3082 (replace 'check
3083 (lambda _
3084 (invoke "pytest" "tests" "-vv"))))))
3085 (native-inputs
3086 ;; For tests.
3087 (list python-decorator
3088 python-mock
3089 python-pytest
3090 python-requests-mock
3091 python-setuptools
3092 python-wheel))
3093 (propagated-inputs
3094 (list python-click
3095 python-oauthlib
3096 python-pyjwt
3097 python-requests
3098 python-six
3099 python-tabulate))
3100 (synopsis "Command line interface for Databricks")
3101 (description
3102 "The Databricks Command Line Interface is a tool which provides an easy
3103to use interface to the Databricks platform. The CLI is built on top of the
3104Databricks REST APIs.")
3105 (license license:asl2.0)))
3106
3107(define-public python-dependency-groups
3108 (package
3109 (name "python-dependency-groups")
3110 (version "1.3.1")
3111 (source
3112 (origin
3113 (method url-fetch)
3114 (uri (pypi-uri "dependency_groups" version))
3115 (sha256
3116 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
3117 (build-system pyproject-build-system)
3118 (propagated-inputs (list python-packaging python-tomli))
3119 (native-inputs (list python-flit-core python-pytest))
3120 (home-page "https://dependency-groups.readthedocs.io/")
3121 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
3122 (description
3123 "This package provides a library which is able to parse dependency groups (PEP
3124735), following includes, and provide that data as output.")
3125 (license license:expat)))
3126
3127(define-public python-devpi-client
3128 (package
3129 (name "python-devpi-client")
3130 (version "7.2.0")
3131 (source
3132 (origin
3133 (method url-fetch)
3134 (uri (pypi-uri "devpi-client" version))
3135 (sha256
3136 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
3137 (build-system pyproject-build-system)
3138 (arguments
3139 (list
3140 #:test-flags
3141 ;; This wants to use pip install
3142 '(list "--ignore=testing/test_upload.py"
3143 ;; These complain about finding distutils. It's not my fault,
3144 ;; mate, setuptools is right there, but you won't pick it!
3145 "--ignore=testing/test_list_remove.py"
3146 "--ignore=testing/test_main.py"
3147 "--ignore=testing/test_install.py"
3148 "--ignore=testing/test_functional.py"
3149 "--ignore=testing/test_test.py")
3150 #:phases
3151 '(modify-phases %standard-phases
3152 (add-after 'unpack 'patch-tests
3153 (lambda _
3154 ;; Do not replace the directory name of the store item.
3155 (substitute* "testing/conftest.py"
3156 (("\"devpi-server\", \"devpi-init\"")
3157 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
3158 (add-before 'check 'set-HOME
3159 ;; Some tests need this
3160 (lambda _ (setenv "HOME" "/tmp"))))))
3161 (propagated-inputs (list python-pypa-build
3162 python-check-manifest
3163 python-colorama
3164 python-devpi-common
3165 python-iniconfig
3166 python-pkginfo
3167 python-platformdirs
3168 python-pluggy
3169 python-pypitoken
3170 python-tomli))
3171 (native-inputs
3172 (list python-devpi-server
3173 python-pytest
3174 python-setuptools
3175 python-virtualenv))
3176 (home-page "https://github.com/devpi/devpi")
3177 (synopsis "Devpi upload/install/... commands for Python developers")
3178 (description
3179 "The devpi command line tool is typically used in conjunction with
3180devpi-server. It allows uploading, testing and installing packages from devpi
3181indexes.")
3182 (license license:expat)))
3183
3184(define-public python-devpi-common
3185 (package
3186 (name "python-devpi-common")
3187 (version "4.0.4")
3188 (source
3189 (origin
3190 (method url-fetch)
3191 (uri (pypi-uri "devpi_common" version))
3192 (sha256
3193 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
3194 (build-system pyproject-build-system)
3195 (propagated-inputs (list python-lazy python-packaging-legacy
3196 python-requests))
3197 (native-inputs
3198 (list python-pytest
3199 python-setuptools
3200 python-wheel))
3201 (home-page "https://github.com/devpi/devpi")
3202 (synopsis
3203 "Utilities jointly used by devpi-server, devpi-client and others")
3204 (description
3205 "This package provides utilities jointly used by devpi-server,
3206devpi-client and others.")
3207 (license license:expat)))
3208
3209(define-public python-devpi-process
3210 (package
3211 (name "python-devpi-process")
3212 (version "1.0.2")
3213 (source
3214 (origin
3215 (method url-fetch)
3216 (uri (pypi-uri "devpi_process" version))
3217 (sha256
3218 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
3219 (build-system pyproject-build-system)
3220 (arguments
3221 (list
3222 #:phases
3223 '(modify-phases %standard-phases
3224 (add-after 'unpack 'relax-requirements
3225 (lambda _
3226 ;; Our package is too old, sorry.
3227 (substitute* "pyproject.toml"
3228 (("typing-extensions>=4.12.2")
3229 "typing-extensions>=4.10.0"))))
3230 (add-after 'unpack 'patch-tool-locations
3231 (lambda* (#:key inputs #:allow-other-keys)
3232 (substitute* "src/devpi_process/__init__.py"
3233 (("_exe\\(\"devpi-init\"\\)")
3234 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
3235 (("_exe\\(\"devpi-server\"\\)")
3236 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
3237 (("_exe\\(\"devpi\"\\)")
3238 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
3239 (propagated-inputs (list python-devpi-client python-devpi-server
3240 python-typing-extensions))
3241 (native-inputs
3242 (list nss-certs-for-test
3243 python-hatchling
3244 python-hatch-vcs
3245 python-httpx
3246 python-pytest))
3247 (home-page "https://github.com/devpi/devpi")
3248 (synopsis "API to create and use a devpi server process")
3249 (description
3250 "This package provides a programmatic API to create and use a devpi
3251server process.")
3252 (license license:expat)))
3253
3254(define-public python-devpi-server
3255 (package
3256 (name "python-devpi-server")
3257 (version "6.20.3")
3258 (source
3259 (origin
3260 (method git-fetch)
3261 (uri (git-reference
3262 (url "https://github.com/devpi/devpi")
3263 (commit (string-append "server-" version))))
3264 (file-name (git-file-name name version))
3265 (sha256
3266 (base32 "11q1bnd8rl55gcv99xkmg10i8z9l91kvmgrvcz1803mwkcs0isp8"))))
3267 (build-system pyproject-build-system)
3268 (arguments
3269 (list
3270 ;; tests: 1134 passed, 53 skipped, 29 warnings
3271 #:phases
3272 #~(modify-phases %standard-phases
3273 (add-after 'unpack 'chdir
3274 (lambda _
3275 (chdir "server")))
3276 (add-after 'chdir 'relax-requirements
3277 (lambda _
3278 (substitute* "pyproject.toml"
3279 ;; It straggles to check argon2 in passlib on any versions
3280 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
3281 ;; such extra feature 'argon2'",).
3282 (("passlib\\[argon2\\]") "passlib")
3283 (("\"py>=1.4.23\",") ""))))
3284 (add-before 'check 'pre-check
3285 (lambda _
3286 (setenv "HOME" "/tmp"))))))
3287 (propagated-inputs (list python-argon2-cffi
3288 python-attrs
3289 python-defusedxml
3290 python-devpi-common
3291 python-httpx
3292 python-itsdangerous
3293 python-lazy
3294 python-passlib
3295 python-platformdirs
3296 python-pluggy
3297 python-pyramid
3298 python-repoze-lru
3299 python-requests
3300 python-ruamel.yaml-0.16 ;FIXME: rename
3301 python-strictyaml
3302 python-waitress))
3303 (native-inputs
3304 (list nss-certs-for-test
3305 python-execnet
3306 python-pytest
3307 python-pytest-asyncio
3308 python-pytest-timeout
3309 python-setuptools
3310 python-webtest))
3311 (home-page "https://devpi.net")
3312 (synopsis "Pypi.org caching server")
3313 (description "This package implements a reliable private and pypi.org
3314caching server.")
3315 (license license:expat)))
3316
3317(define-public python-dicomweb-client
3318 (package
3319 (name "python-dicomweb-client")
3320 (version "0.60.0")
3321 (source
3322 (origin
3323 (method git-fetch)
3324 (uri (git-reference
3325 (url "https://github.com/ImagingDataCommons/dicomweb-client")
3326 (commit (string-append "v" version))))
3327 (file-name (git-file-name name version))
3328 (sha256
3329 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
3330 (build-system pyproject-build-system)
3331 (arguments
3332 (list
3333 #:phases
3334 #~(modify-phases %standard-phases
3335 (add-after 'unpack 'remove-dynamic-versioning
3336 (lambda _
3337 (substitute* "pyproject.toml"
3338 ;; Dynamic versioning via 'uv-dynamic-versioning' is
3339 ;; not suitable for Guix.
3340 (("dynamic = \\[\"version\"\\]")
3341 (string-append "version = \""
3342 #$version "\""))))))))
3343 (native-inputs
3344 (list python-hatchling
3345 python-pytest
3346 python-pytest-localserver))
3347 (propagated-inputs
3348 (list python-numpy
3349 python-pillow
3350 python-pydicom
3351 python-requests
3352 python-retrying))
3353 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
3354 (synopsis "Python client for DICOMweb RESTful services")
3355 (description
3356 "@code{dicomweb_client} provides client interfaces for DICOMweb RESTful
3357services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
3358DICOM objects over the web, respectively.")
3359 (license license:expat)))
3360
3361(define-public python-dnslib
3362 (package
3363 (name "python-dnslib")
3364 (version "0.9.26")
3365 (source
3366 (origin
3367 (method git-fetch)
3368 (uri (git-reference
3369 (url "https://github.com/paulc/dnslib")
3370 (commit version)))
3371 (file-name (git-file-name name version))
3372 (sha256
3373 (base32 "1x1l727qx6x0kw7yhzhxhbm40wgrh367dr3y0vaix0wrhi30qsyk"))))
3374 (build-system pyproject-build-system)
3375 (arguments
3376 (list
3377 #:phases
3378 #~(modify-phases %standard-phases
3379 (replace 'check
3380 (lambda* (#:key tests? #:allow-other-keys)
3381 (when tests?
3382 (invoke "./run_tests.sh")))))))
3383 (native-inputs
3384 (list python-setuptools))
3385 (home-page "https://github.com/paulc/dnslib")
3386 (synopsis "Library to encode/decode DNS wire-format packets")
3387 (description
3388 "This package provides a simple Python library to encode/decode DNS
3389wire-format packets.")
3390 (license license:bsd-3)))
3391
3392(define-public python-docusign-esign
3393 (package
3394 (name "python-docusign-esign")
3395 (version "5.0.0")
3396 (source
3397 (origin
3398 (method url-fetch)
3399 (uri (pypi-uri "docusign-esign" version))
3400 (sha256
3401 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
3402 (build-system pyproject-build-system)
3403 ;; Testing requires undocumented setup changes with network access to
3404 ;; <demo.docusign.net>, and so testing is disabled here.
3405 (arguments `(#:tests? #f))
3406 (native-inputs
3407 (list python-setuptools
3408 python-wheel))
3409 (propagated-inputs
3410 (list python-certifi
3411 python-dateutil
3412 python-urllib3
3413 python-pyjwt
3414 python-cryptography))
3415 (home-page "https://developers.docusign.com/")
3416 (synopsis "DocuSign Python Client")
3417 (description
3418 "The Official DocuSign Python Client Library used to interact with the
3419eSign REST API. Send, sign, and approve documents using this client.")
3420 (license license:expat)))
3421
3422(define-public python-domain-connect
3423 (package
3424 (name "python-domain-connect")
3425 (version "0.0.11")
3426 (source
3427 (origin
3428 (method git-fetch) ;no tests in PyPI archive
3429 (uri (git-reference
3430 (url "https://github.com/Domain-Connect/domainconnect_python")
3431 (commit (string-append "v" version))))
3432 (file-name (git-file-name name version))
3433 (sha256
3434 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
3435 (build-system pyproject-build-system)
3436 (arguments
3437 (list
3438 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
3439 ;; present in container.
3440 #:tests? #f
3441 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
3442 (native-inputs
3443 (list python-setuptools))
3444 (propagated-inputs
3445 (list python-cryptography
3446 python-dnspython
3447 python-future
3448 python-publicsuffixlist))
3449 (home-page "https://github.com/Domain-Connect/domainconnect_python")
3450 (synopsis "Client library for Domain Connect protocol")
3451 (description
3452 "This package provides a Service Provider functionality in both Sync and
3453Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
3454 (license license:expat)))
3455
3456(define-public python-domain-connect-dyndns
3457 (package
3458 (name "python-domain-connect-dyndns")
3459 (version "0.0.9")
3460 (source
3461 (origin
3462 (method url-fetch)
3463 (uri (pypi-uri "domain-connect-dyndns" version))
3464 (sha256
3465 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
3466 (build-system pyproject-build-system)
3467 (arguments
3468 (list
3469 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
3470 ;; present in container.
3471 #:tests? #f
3472 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
3473 (native-inputs
3474 (list python-setuptools
3475 python-wheel))
3476 (propagated-inputs
3477 (list python-dnspython
3478 python-domain-connect
3479 python-requests
3480 python-validators))
3481 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
3482 (synopsis "Domain Connect Dynamic DNS in Python")
3483 ;; Project lacks meaningful description in README, see
3484 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
3485 (description
3486 "Python client library for Dynamic DNS using
3487@url{https://www.domainconnect.org/, Domain Connect} protocol.")
3488 (license license:expat)))
3489
3490(define-public python-dominate
3491 (package
3492 (name "python-dominate")
3493 (version "2.9.1")
3494 (source
3495 (origin
3496 (method git-fetch)
3497 (uri (git-reference
3498 (url "https://github.com/Knio/dominate")
3499 (commit version)))
3500 (file-name (git-file-name name version))
3501 (sha256
3502 (base32 "0kv5ly8w2026pwvgamfjxav1g58wmgim30nr9w9qfwcipfjxwn5c"))))
3503 (build-system pyproject-build-system)
3504 (native-inputs
3505 (list python-pytest
3506 python-setuptools))
3507 (home-page "https://github.com/Knio/dominate")
3508 (synopsis "Python library for creating and manipulating HTML documents")
3509 (description
3510 "Dominate is a Python library for creating and manipulating HTML
3511documents using an elegant DOM API.")
3512 (license license:lgpl3+)))
3513
3514(define-public python-dpkt
3515 (package
3516 (name "python-dpkt")
3517 (version "1.9.8")
3518 (source
3519 (origin
3520 (method git-fetch)
3521 (uri (git-reference
3522 (url "https://github.com/kbandla/dpkt")
3523 (commit (string-append "v" version))))
3524 (file-name (git-file-name name version))
3525 (sha256
3526 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
3527 (build-system pyproject-build-system)
3528 (arguments
3529 (list
3530 #:test-flags
3531 #~(list "--pyargs" "dpkt")))
3532 (native-inputs (list python-pytest python-setuptools))
3533 (home-page "https://github.com/kbandla/dpkt")
3534 (synopsis "Packet generator and parser for TCP/IP protocols")
3535 (description
3536 "The dpkt module is a fast, simple packet generator and parser for the
3537basic TCP/IP protocols.")
3538 (license license:bsd-3)))
3539
3540(define-public python-dropbox
3541 (package
3542 (name "python-dropbox")
3543 (version "12.0.2")
3544 (source
3545 (origin
3546 (method git-fetch) ; no tests in PyPI release
3547 (uri (git-reference
3548 (url "https://github.com/dropbox/dropbox-sdk-python")
3549 (commit (string-append "v" version))))
3550 (file-name (git-file-name name version))
3551 (sha256
3552 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
3553 (build-system pyproject-build-system)
3554 (arguments
3555 (list
3556 #:test-flags
3557 #~(list "-k" (string-join
3558 ;; Network access is required.
3559 (list "not test_bad_auth"
3560 "test_app_auth"
3561 "test_bad_pins"
3562 "test_bad_pins_session"
3563 "test_downscope"
3564 "test_multi_auth"
3565 "test_path_root"
3566 "test_path_root_err"
3567 "test_refresh"
3568 "test_rpc"
3569 "test_team"
3570 "test_upload_download"
3571 "test_versioned_route")
3572 " and not "))
3573 #:phases
3574 #~(modify-phases %standard-phases
3575 (add-after 'unpack 'relax-requirements
3576 (lambda _
3577 (substitute* "setup.py"
3578 ;; 'stone>=2,<3.3.3',
3579 ((">=2,<3.3.3") ">=2,<3.4.0"))))
3580 (add-before 'check 'pre-check
3581 (lambda _
3582 ;; Otherwise tests setup erroring.
3583 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
3584 (setenv "LEGACY_USER_CLIENT_ID" "guix")
3585 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
3586 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
3587 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
3588 (setenv "SCOPED_USER_CLIENT_ID" "guix")
3589 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
3590 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
3591 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
3592 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
3593 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
3594 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
3595 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
3596 (native-inputs
3597 (list nss-certs-for-test
3598 python-mock
3599 python-pytest
3600 python-pytest-mock
3601 python-setuptools
3602 python-wheel))
3603 (propagated-inputs
3604 (list python-requests python-six python-stone))
3605 (home-page "https://www.dropbox.com/developers")
3606 (synopsis "Official Dropbox API Client")
3607 (description "This package provides a Python SDK for integrating with the
3608Dropbox API v2.")
3609 (license license:expat)))
3610
3611(define-public python-dukpy
3612 (package
3613 (name "python-dukpy")
3614 (version "0.5.1")
3615 (source
3616 (origin
3617 (method git-fetch)
3618 (uri (git-reference
3619 (url "https://github.com/amol-/dukpy")
3620 (commit version)))
3621 (file-name (git-file-name name version))
3622 (sha256
3623 (base32 "1qsqfgy12frrdikjf353bsvhln11jixc3qs9rc1zra55k0569036"))))
3624 (build-system pyproject-build-system)
3625 (arguments
3626 (list
3627 #:test-flags
3628 #~(list #$@(map (lambda (test)
3629 (string-append "--deselect=tests/test_installer.py"
3630 "::TestPackageInstaller::"
3631 test))
3632 ;; Network access is required.
3633 (list "test_install_command"
3634 "test_install_command_latest_ver"
3635 "test_install_command_substrate_error"
3636 "test_install_command_without_dest"
3637 "test_install_react"
3638 "test_install_scoped_package"
3639 "test_install_unexisting_package"
3640 "test_install_unexisting_version")))))
3641 (native-inputs
3642 (list python-mock
3643 python-pytest
3644 python-setuptools
3645 python-webassets))
3646 (home-page "https://github.com/amol-/dukpy")
3647 (synopsis "Simple JavaScript interpreter for Python")
3648 (description
3649 "DukPy is a simple JavaScript interpreter for Python built on top of
3650duktape engine without any external dependency. It comes with a bunch of
3651common transpilers built-in for convenience:
3652@itemize
3653@item CoffeeScript
3654@item BabelJS
3655@item TypeScript
3656@item JSX
3657@item LESS
3658@end itemize")
3659 (license license:expat)))
3660
3661(define-public python-elastic-transport
3662 (package
3663 (name "python-elastic-transport")
3664 (version "9.1.0")
3665 (source
3666 (origin
3667 (method url-fetch)
3668 (uri (pypi-uri "elastic_transport" version))
3669 (sha256
3670 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
3671 (build-system pyproject-build-system)
3672 (arguments
3673 (list
3674 #:test-flags
3675 ;; Deselect failing tests (mostly due to network not reachable)
3676 #~(list "-k"
3677 (string-append
3678 "not .badssl.com"
3679 " and not test_assert_fingerprint_in_cert_chain_failure"))))
3680 (propagated-inputs (list python-certifi python-urllib3))
3681 (native-inputs (list nss-certs-for-test
3682 python-aiohttp
3683 ;; python-furo
3684 python-httpx
3685 python-opentelemetry-api
3686 python-opentelemetry-sdk
3687 python-orjson
3688 python-pytest
3689 python-pytest-asyncio-0.26
3690 ;; python-pytest-cov
3691 python-pytest-httpbin
3692 python-pytest-httpserver
3693 python-pytest-mock
3694 python-requests
3695 python-respx ;test
3696 python-setuptools
3697 ;; python-sphinx
3698 ;; python-sphinx-autodoc-typehints
3699 python-trustme
3700 python-wheel))
3701 (home-page "https://github.com/elastic/elastic-transport-python")
3702 (synopsis "Common library for Python Elastic client libraries")
3703 (description
3704 "This library was lifted from @code{elasticsearch-py} and then transformed to
3705be used across all Elastic services rather than only Elasticsearch. It
3706provides transport classes and utilities shared among Python Elastic client
3707libraries.")
3708 ;; Apache-2.0 in setup.py and LICENSE file.
3709 (license license:asl2.0)))
3710
3711(define-public python-elasticsearch
3712 (package
3713 (name "python-elasticsearch")
3714 (version "9.1.1")
3715 (source
3716 (origin
3717 (method git-fetch) ; no tests in PyPI release
3718 (uri (git-reference
3719 (url "https://github.com/elastic/elasticsearch-py")
3720 (commit (string-append "v" version))))
3721 (file-name (git-file-name name version))
3722 (sha256
3723 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
3724 (build-system pyproject-build-system)
3725 (native-inputs
3726 (list nss-certs-for-test
3727 python-aiohttp
3728 python-dateutil
3729 python-mock
3730 python-orjson
3731 python-pytest
3732 python-pytest-asyncio
3733 python-pytz
3734 python-pyyaml
3735 python-requests
3736 python-hatchling))
3737 (propagated-inputs
3738 (list python-certifi
3739 python-elastic-transport))
3740 (home-page "https://github.com/elastic/elasticsearch-py")
3741 (synopsis "Low-level client for Elasticsearch")
3742 (description "Official low-level client for Elasticsearch. Its goal is to
3743provide common ground for all Elasticsearch-related code in Python; because of
3744this it tries to be opinion-free and very extendable.")
3745 ;; Apache-2.0 in setup.py and LICENSE file.
3746 (license license:asl2.0)))
3747
3748(define-public python-engineio
3749 (package
3750 (name "python-engineio")
3751 (version "4.13.4")
3752 (source
3753 (origin
3754 (method git-fetch)
3755 (uri (git-reference
3756 (url "https://github.com/miguelgrinberg/python-engineio/")
3757 (commit (string-append "v" version))))
3758 (file-name (git-file-name name version))
3759 (sha256
3760 (base32 "1ndp68cqssjpvln958v236rg5jgpzy57vs3z45sz7xfscmbi893r"))))
3761 (build-system pyproject-build-system)
3762 (native-inputs
3763 (list python-pytest
3764 python-pytest-asyncio
3765 python-setuptools
3766 python-tornado))
3767 (propagated-inputs
3768 (list python-simple-websocket
3769 ;; [optional]
3770 python-aiohttp
3771 python-requests
3772 python-websocket-client))
3773 (home-page "https://github.com/miguelgrinberg/python-engineio/")
3774 (synopsis "Engine.IO server")
3775 (description "This package provides a Python implementation of the
3776@code{Engine.IO} realtime client and server.")
3777 (license license:expat)))
3778
3779(define-public python-enoslib
3780 (package
3781 (name "python-enoslib")
3782 (version "8.0.1")
3783 (source
3784 (origin
3785 (method git-fetch)
3786 (uri (git-reference
3787 (url "https://gitlab.inria.fr/discovery/enoslib")
3788 (commit (string-append "v" version))))
3789 (file-name (git-file-name name version))
3790 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
3791 (arguments
3792 (list
3793 #:test-flags
3794 #~(list "enoslib/tests/unit"
3795 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
3796 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
3797 #:phases
3798 #~(modify-phases %standard-phases
3799 (add-before 'check 'pre-check
3800 (lambda* (#:key tests? #:allow-other-keys)
3801 (when tests?
3802 ;; Otherwise Ansible fails to create its config directory.
3803 (setenv "HOME" "/tmp"))))
3804 ;; Disable the sanity check, which fails with the following error:
3805 ;;
3806 ;; ContextualVersionConflict(rich 12.4.1
3807 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
3808 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
3809 ;;
3810 ;; The optional jupyter dependency of rich isn't critical for
3811 ;; EnOSlib to work
3812 (delete 'sanity-check))))
3813 (build-system pyproject-build-system)
3814 (native-inputs
3815 (list python-ddt
3816 python-freezegun
3817 python-pytest
3818 python-setuptools
3819 python-wheel))
3820 (propagated-inputs
3821 (list ansible
3822 python-cryptography
3823 python-grid5000
3824 python-jsonschema
3825 python-netaddr
3826 python-packaging
3827 python-requests
3828 python-rich
3829 python-sshtunnel
3830 python-pytz))
3831 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
3832 (synopsis "Deploy distributed testbeds on a variety of platforms")
3833 (description
3834 "EnOSlib is a library to build experimental frameworks on various
3835scientific testbeds. It lets you deploy networks of machines on actual
3836hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
3837 (license license:gpl3+)))
3838
3839(define-public python-ephemeral-port-reserve
3840 (package
3841 (name "python-ephemeral-port-reserve")
3842 (version "1.1.4")
3843 (source
3844 (origin
3845 (method git-fetch)
3846 (uri (git-reference
3847 (url "https://github.com/Yelp/ephemeral-port-reserve")
3848 (commit (string-append "v" version))))
3849 (file-name (git-file-name name version))
3850 (sha256
3851 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
3852 (build-system pyproject-build-system)
3853 (native-inputs
3854 (list python-pytest
3855 python-setuptools))
3856 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
3857 (synopsis "Find an unused port, reliably")
3858 (description
3859 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
3860it.")
3861 (license license:expat)))
3862
3863(define-public python-essentials-openapi
3864 (package
3865 (name "python-essentials-openapi")
3866 (version "1.2.1")
3867 (source
3868 (origin
3869 (method git-fetch)
3870 (uri (git-reference
3871 (url "https://github.com/Neoteroi/essentials-openapi")
3872 (commit (string-append "v" version))))
3873 (file-name (git-file-name name version))
3874 (sha256
3875 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
3876 (build-system pyproject-build-system)
3877 (native-inputs
3878 (list python-flask
3879 python-hatchling
3880 python-pydantic
3881 python-pytest
3882 python-rich))
3883 (propagated-inputs
3884 (list python-essentials
3885 python-httpx
3886 python-jinja2
3887 python-markupsafe
3888 python-pyyaml))
3889 (home-page "https://github.com/Neoteroi/essentials-openapi/")
3890 (synopsis "Generator for OpenAPI Documentation")
3891 (description
3892 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
3893formats. Generator for other kinds of documents from OpenAPI Documentation
3894files.")
3895 (license license:expat)))
3896
3897(define-public python-eventlet
3898 (package
3899 (name "python-eventlet")
3900 (version "0.41.0")
3901 (source
3902 (origin
3903 (method git-fetch)
3904 (uri (git-reference
3905 (url "https://github.com/eventlet/eventlet")
3906 (commit version)))
3907 (file-name (git-file-name name version))
3908 (sha256
3909 (base32 "1rn8f5v08n48dh6aycdxfwz17w4xwkgny7bhy5llqn5dl0g2dw43"))))
3910 (build-system pyproject-build-system)
3911 (arguments
3912 (list
3913 ;; tests: 618 passed, 121 skipped, 20 deselected, 52 warnings
3914 #:test-flags
3915 #~(list
3916 #$@(map (lambda (test)
3917 (string-append "--deselect=tests/" test))
3918 (list
3919 ;; dns.resolver.NoResolverConfiguration: cannot open
3920 ;; /etc/resolv.conf
3921 "greendns_test.py::TestProxyResolver::test_clear"
3922 "greendns_test.py::TinyDNSTests::test_noraise_dns_tcp"
3923 "greendns_test.py::TinyDNSTests::test_raise_dns_tcp"
3924 ;; assert <built-in function gethostbyname> is <function
3925 ;; gethostbyname at 0x7ffff3491120>
3926 "socket_test.py::test_dns_methods_are_green"
3927 ;; socket.gaierror: [Errno -8] Servname not supported for
3928 ;; ai_socktype
3929 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo"
3930 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_idn"
3931 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_inet"
3932 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_inet6"
3933 "greendns_test.py::test_hosts_no_network"
3934 ;; AssertionError: Expected single line "pass" in stdout
3935 "asyncio_test.py::test_asyncio_does_not_use_greendns"
3936 "greendns_test.py::test_import_rdtypes_then_eventlet"
3937 "patcher_test.py::test_patcher_existing_logging_module_lock")))
3938 #:phases
3939 #~(modify-phases %standard-phases
3940 (add-after 'unpack 'avoid-OSError
3941 (lambda _
3942 ;; If eventlet tries to load greendns, an OSError is thrown when
3943 ;; getprotobyname is called. Thankfully there is an environment
3944 ;; variable to disable the greendns import, so use it. Note that
3945 ;; this error is propagated to child packages too, so enforce the
3946 ;; changed default.
3947 (substitute* "eventlet/green/socket.py"
3948 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
3949 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")"))))
3950 (add-before 'check 'pre-check
3951 (lambda _
3952 (setenv "EVENTLET_HUB" "asyncio"))))))
3953 (native-inputs
3954 (list python-hatchling
3955 python-hatch-vcs
3956 python-pytest
3957 python-pytest-aiohttp))
3958 (propagated-inputs
3959 (list python-dnspython
3960 python-greenlet))
3961 (home-page "https://eventlet.net")
3962 (synopsis "Concurrent networking library for Python")
3963 (description
3964 "Eventlet is a concurrent networking library for Python that
3965allows you to change how you run your code, not how you write it.
3966It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
3967Coroutines ensure that the developer uses a blocking style of programming
3968that is similar to threading, but provide the benefits of non-blocking I/O.
3969The event dispatch is implicit, which means you can easily use @code{Eventlet}
3970from the Python interpreter, or as a small part of a larger application.
3971
3972Note: In Guix, this package assumes the environment variable
3973@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
3974to anything else.")
3975 (license license:expat)))
3976
3977(define-public python-extruct
3978 (package
3979 (name "python-extruct")
3980 (version "0.18.0")
3981 (source (origin
3982 (method git-fetch) ;for tests
3983 (uri (git-reference
3984 (url "https://github.com/scrapinghub/extruct")
3985 (commit (string-append "v" version))))
3986 (file-name (git-file-name name version))
3987 (sha256
3988 (base32
3989 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
3990 (build-system pyproject-build-system)
3991 (arguments
3992 (list
3993 #:test-flags
3994 ;; 67 passed, 3 deselected
3995 ;; XXX: 3 tests fail with errors in assertion.
3996 #~(list "-k" (string-append
3997 "not test_microformat"
3998 " and not test_microformat"
3999 " and not test_umicroformat"))))
4000 (native-inputs
4001 (list python-pytest
4002 python-setuptools
4003 python-wheel))
4004 (propagated-inputs
4005 (list python-html-text
4006 python-jstyleson
4007 python-lxml
4008 python-mf2py
4009 python-pyrdfa3
4010 python-rdflib
4011 python-w3lib))
4012 (home-page "https://github.com/scrapinghub/extruct")
4013 (synopsis "Extract embedded metadata from HTML markup")
4014 (description "@code{extruct} is a Python library for extracting embedded
4015metadata from HTML markup. Currently, extruct supports:
4016@itemize
4017@item W3C's HTML Microdata
4018@item embedded JSON-LD
4019@item Microformat via mf2py
4020@item Facebook's Open Graph
4021@item (experimental) RDFa via rdflib
4022@item Dublin Core Metadata (DC-HTML-2003)
4023@end itemize")
4024 (license license:bsd-3)))
4025
4026(define-public python-feedgen
4027 (package
4028 (name "python-feedgen")
4029 (version "1.0.0")
4030 (source
4031 (origin
4032 (method git-fetch)
4033 (uri (git-reference
4034 (url "https://github.com/lkiesow/python-feedgen")
4035 (commit (string-append "v" version))))
4036 (file-name (git-file-name name version))
4037 (sha256
4038 (base32
4039 "1ppwxp9yck29pk2p2dlrrad6rz16l9h4fhcajp9yb7ns94fm5v3l"))))
4040 (build-system pyproject-build-system)
4041 (propagated-inputs
4042 (list python-dateutil
4043 python-lxml))
4044 (native-inputs
4045 (list python-pytest
4046 python-setuptools))
4047 (home-page "https://feedgen.kiesow.be")
4048 (synopsis "Atom and RSS feed generator")
4049 (description
4050 "This module can be used to generate web feeds in both Atom and RSS
4051format. It also extensible and comes with an extension to produce podcasts.")
4052 ;; The README says that this package is released under both licenses, and
4053 ;; permits the user to choose whichever is more convenient to them.
4054 (license (list license:bsd-2
4055 license:lgpl3+))))
4056
4057(define-public python-flask-caching
4058 (package
4059 (name "python-flask-caching")
4060 (version "2.3.1")
4061 (source
4062 (origin
4063 (method url-fetch)
4064 (uri (pypi-uri "flask_caching" version))
4065 (sha256
4066 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
4067 (build-system pyproject-build-system)
4068 (arguments
4069 (list
4070 #:test-flags
4071 ;; Tests requiring running Redis or dated python-cache.
4072 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
4073 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
4074 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
4075 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
4076 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
4077 "-k" "not test_client_override_reflected_on_cachelib_methods")))
4078 (native-inputs
4079 (list python-pytest
4080 python-pytest-asyncio
4081 python-pytest-xprocess
4082 python-setuptools))
4083 (propagated-inputs
4084 (list python-cachelib
4085 python-flask))
4086 (home-page "https://github.com/pallets-eco/flask-caching")
4087 (synopsis "Caching extension for Flask")
4088 (description
4089 "This package provides a caching support to Flask applications, it's a
4090fort ok https://github.com/thadeusb/flask-cache.")
4091 (license license:bsd-3)))
4092
4093(define-public python-flask-paginate
4094 (package
4095 (name "python-flask-paginate")
4096 (version "2024.4.12")
4097 (source
4098 (origin
4099 (method git-fetch)
4100 (uri (git-reference
4101 (url "https://github.com/lixxu/flask-paginate")
4102 (commit (string-append "v" version))))
4103 (file-name (git-file-name name version))
4104 (sha256
4105 (base32 "1q4ajwk0pzc6934g07gdryjcwi6rd9iqcwv5g5s718dfx2bj1831"))))
4106 (arguments
4107 (list #:test-backend #~'custom
4108 #:test-flags #~(list "tests/tests.py")))
4109 (build-system pyproject-build-system)
4110 (native-inputs
4111 (list python-pytest
4112 python-setuptools))
4113 (propagated-inputs
4114 (list python-flask))
4115 (home-page "https://github.com/lixxu/flask-paginate")
4116 (synopsis "Simple paginate support for Flask")
4117 (description
4118 "Flask-paginate is a simple pagination extension for Flask which is
4119inspired by Ruby's will_paginate library. It supports several CSS frameworks.")
4120 (license license:bsd-3)))
4121
4122(define-public python-flask-limiter
4123 (package
4124 (name "python-flask-limiter")
4125 (version "4.1.1")
4126 (source
4127 (origin
4128 (method git-fetch)
4129 (uri (git-reference
4130 (url "https://github.com/alisaifee/flask-limiter")
4131 (commit version)))
4132 (file-name (git-file-name name version))
4133 (sha256
4134 (base32 "18n12iayzw6qqys26824j5lfbphfcammpmyrvys1k0rn4xcbifln"))))
4135 (build-system pyproject-build-system)
4136 (arguments
4137 (list
4138 ;; tests: 155 passed, 620 deselected
4139 #:test-flags
4140 #~(list "-k" (simple-format #f "not (~a)"
4141 (string-join
4142 (append
4143 ;; The test suite spawns storages in Docker.
4144 '("memcache" "reset_unsupported")
4145 '("mongo")
4146 '("redis" "clear_limits"
4147 "constructor_arguments_over_config"
4148 "custom_key_prefix" "fallback_to_memory"))
4149 " or ")))
4150 #:phases
4151 #~(modify-phases %standard-phases
4152 (add-before 'check 'adjust-tests
4153 (lambda _
4154 (substitute* "pytest.ini"
4155 ((".*--cov=.*") ""))
4156 (substitute* (find-files "tests" "\\.py$")
4157 (("import pymemcache.*") "")
4158 (("import pymongo.*") "")
4159 (("import redis.*") "")))))))
4160 (native-inputs (list python-flask-restful
4161 python-hatch-vcs
4162 python-hatchling
4163 python-hiro
4164 python-pytest
4165 python-pytest-check
4166 python-pytest-mock))
4167 (propagated-inputs (list python-flask
4168 python-limits
4169 python-ordered-set
4170 python-rich))
4171 (home-page "https://flask-limiter.readthedocs.org/")
4172 (synopsis "Rate limiting for Flask applications")
4173 (description
4174 "Flask-Limiter adds rate limiting to Flask applications.
4175Rate limits can be configured at different levels such as:
4176
4177@itemize
4178@item Application wide global limits per user
4179@item Default limits per route
4180@item By blueprints
4181@item By class-based views
4182@item By individual routes
4183@end itemize")
4184 (license license:expat)))
4185
4186(define-public python-gdown
4187 (package
4188 (name "python-gdown")
4189 (version "5.2.0")
4190 (source
4191 (origin
4192 (method url-fetch)
4193 (uri (pypi-uri "gdown" version))
4194 (sha256
4195 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
4196 (build-system pyproject-build-system)
4197 (arguments (list #:tests? #f)) ;network access is required
4198 (native-inputs
4199 (list python-hatch-fancy-pypi-readme
4200 python-hatch-vcs
4201 python-hatchling))
4202 (propagated-inputs
4203 (list python-beautifulsoup4
4204 python-filelock
4205 python-requests
4206 python-tqdm))
4207 (home-page "https://github.com/wkentaro/gdown")
4208 (synopsis "Google Drive Public File/Folder Downloader")
4209 (description
4210 "This package implements a functionality to download large files
4211recursively from Google Drive with option to filter them by file
4212formats (PDF/XML/CSV).")
4213 (license license:expat)))
4214
4215(define-public python-globus-sdk
4216 (package
4217 (name "python-globus-sdk")
4218 (version "4.4.0")
4219 (source
4220 (origin
4221 (method git-fetch)
4222 (uri (git-reference
4223 (url "https://github.com/globus/globus-sdk-python")
4224 (commit version)))
4225 (file-name (git-file-name name version))
4226 (sha256
4227 (base32 "1d0zw9dkpdhsf9zdg3nk6b55gqwzc3v2rj76nj7999hjmq8350vh"))))
4228 (build-system pyproject-build-system)
4229 (arguments
4230 (list
4231 #:phases
4232 #~(modify-phases %standard-phases
4233 (add-before 'check 'pre-check
4234 (lambda _ (setenv "HOME" "/tmp"))))))
4235 (native-inputs
4236 (list python-flaky
4237 python-pytest
4238 python-pytest-randomly
4239 python-responses
4240 python-setuptools))
4241 (propagated-inputs
4242 (list python-cryptography
4243 python-importlib-resources
4244 python-pyjwt
4245 python-requests))
4246 (home-page "https://github.com/globus/globus-sdk-python")
4247 (synopsis "Globus SDK for Python")
4248 (description
4249 "This package provides a SDK for convenient Pythonic interface to
4250@url{https://www.globus.org/, Globus} APIs.")
4251 (license license:asl2.0)))
4252
4253(define-public python-guardpost
4254 (package
4255 (name "python-guardpost")
4256 (version "1.0.4")
4257 (source
4258 (origin
4259 (method git-fetch)
4260 (uri (git-reference
4261 (url "https://github.com/Neoteroi/guardpost")
4262 (commit (string-append "v" version))))
4263 (file-name (git-file-name name version))
4264 (sha256
4265 (base32 "1xsakqn36g2h1s5rnbaf1lasx1jn4skqhmb8kdl1k4pgxp5sczyy"))))
4266 (build-system pyproject-build-system)
4267 (arguments
4268 (list
4269 ;; Possible timing issue, see:
4270 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
4271 #:test-flags '(list "--ignore=tests/test_jwts.py")))
4272 (native-inputs
4273 (list python-flask
4274 python-hatchling
4275 python-pytest
4276 python-pytest-asyncio))
4277 (propagated-inputs
4278 (list python-rodi
4279 ;; [optional]
4280 python-cryptography
4281 python-essentials
4282 python-pyjwt))
4283 (home-page "https://github.com/Neoteroi/GuardPost/")
4284 (synopsis
4285 "Authentication and authorization framework for Python applications")
4286 (description
4287 "GuardPost is a framework to handle authentication and
4288authorization in asynchronous Python applications.
4289
4290Its features include
4291
4292@itemize
4293@item Strategy to implement authentication.
4294@item Strategy to implement authorization.
4295@item Support for dependency injection
4296@item Built-in support for JSON Web Tokens (JWTs) authentication.
4297@end itemize")
4298 (license license:expat)))
4299
4300(define-public python-habanero
4301 (package
4302 (name "python-habanero")
4303 (version "2.3.0")
4304 (source
4305 (origin
4306 (method git-fetch)
4307 (uri (git-reference
4308 (url "https://github.com/sckott/habanero")
4309 (commit (string-append "v" version))))
4310 (file-name (git-file-name name version))
4311 (sha256
4312 (base32 "1a842izcc8l4wb8004v92zsq1h4yc7qc2wi9am6x0f7idlx993sw"))))
4313 (build-system pyproject-build-system)
4314 (arguments
4315 ;; Run only a small portion of unit tests without network access
4316 ;; requirement.
4317 (list #:test-flags #~(list "test/test-filters.py")))
4318 (native-inputs
4319 (list python-hatchling
4320 python-pytest))
4321 (propagated-inputs
4322 (list python-httpx
4323 python-packaging
4324 python-tqdm
4325 python-urllib3))
4326 (home-page "https://github.com/sckott/habanero")
4327 (synopsis "Low Level Client for Crossref Search API")
4328 (description
4329 "Low Level Client for
4330@url{https://api.crossref.org/swagger-ui/index.html, Crossref Search API}.")
4331 (license license:expat)))
4332
4333(define-public python-hookdns
4334 (package
4335 (name "python-hookdns")
4336 (version "2.0.0")
4337 (source
4338 (origin
4339 (method url-fetch)
4340 (uri (pypi-uri "hookdns" version))
4341 (sha256
4342 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
4343 (build-system pyproject-build-system)
4344 (arguments
4345 (list
4346 #:test-flags
4347 #~(list "-k" (string-join
4348 ;; Tests requiring networking.
4349 (list
4350 "not test_patch_contextmanager_with_another_hostname"
4351 "test_patch_contextmanager_with_another_hostname_ipv6"
4352 "test_patch_contextmanager_with_ipv4"
4353 "test_patch_contextmanager_with_name"
4354 "test_patch_contextmanager_with_public_fqdn_and_"
4355 "test_patch_contextmanager_with_unknown_hostname"
4356 "test_patch_decorator_with_another_hostname"
4357 "test_patch_decorator_with_another_hostname_ipv6"
4358 "test_patch_decorator_with_ipv4"
4359 "test_patch_decorator_with_name"
4360 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
4361 "test_patch_decorator_with_unknown_hostname"
4362 "test_real_getaddrinfo_with_name_ipv6"
4363 "test_real_getaddrinfo_with_public_fqdn_ipv4"
4364 "test_real_getaddrinfo_with_public_fqdn_ipv6"
4365 "test_real_gethostbyname_ex_with_public_fqdn"
4366 "test_real_gethostbyname_with_public_fqdn"
4367 "test_real_requests_ip"
4368 "test_real_requests_name"
4369 "test_real_requests_with_public_fqdn"
4370 "test_reentrant")
4371 " and not "))))
4372 (native-inputs
4373 (list python-pytest
4374 python-requests
4375 python-setuptools
4376 python-wheel))
4377 (home-page "https://github.com/cle-b/hookdns")
4378 (synopsis "DNS resolution customization library")
4379 (description
4380 "HookDNS implements functionality that allows for modifying name
4381resolution in a Python script without any changes to the hosts file or the use
4382of a fake DNS resolver.")
4383 (license license:asl2.0)))
4384
4385(define-public python-httpcore2
4386 (package
4387 (name "python-httpcore2")
4388 (version "2.4.0")
4389 (source
4390 (origin
4391 (method git-fetch)
4392 (uri (git-reference
4393 (url "https://github.com/pydantic/httpx2")
4394 (commit (string-append "v" version))))
4395 (file-name (git-file-name name version))
4396 (sha256
4397 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
4398 (build-system pyproject-build-system)
4399 (arguments
4400 (list
4401 #:phases
4402 #~(modify-phases %standard-phases
4403 (add-after 'unpack 'preparation
4404 (lambda _
4405 (chdir "src/httpcore2")
4406 (copy-recursively "../../tests/httpcore2" "tests")
4407 (substitute* (find-files "tests" "\\.py$")
4408 (("tests\\.httpcore2") "tests")
4409 (("tests/httpcore2") "tests"))))
4410 (add-before 'build 'set-version
4411 (lambda _
4412 (substitute* "pyproject.toml"
4413 ((".*uv-dynamic-versioning>.*") "")
4414 (("source.*uv-dynamic-versioning.*") "source = 'vcs'"))
4415 (substitute* "httpcore2/__init__.py"
4416 ((".*= version\\(.*")
4417 (format #f "__version__ = ~s~%" #$version))))))))
4418 (native-inputs
4419 (list python-hatch-fancy-pypi-readme
4420 python-hatch-vcs
4421 python-hatchling
4422 python-pytest
4423 python-pytest-httpbin
4424 python-pytest-trio))
4425 (propagated-inputs
4426 (list python-h11
4427 python-truststore
4428 ;; [optional]
4429 python-anyio
4430 python-h2
4431 python-socksio
4432 python-trio))
4433 (home-page "https://github.com/pydantic/httpx2")
4434 (synopsis "Minimal low-level HTTP client")
4435 (description
4436 "The HTTP Core package provides a minimal low-level HTTP client, which
4437does one thing only. Sending HTTP requests.
4438
4439Some things HTTP Core does do:
4440@itemize
4441@item Sending HTTP requests.
4442@item Thread-safe / task-safe connection pooling.
4443@item HTTP(S) proxy & SOCKS proxy support.
4444@item Supports HTTP/1.1 and HTTP/2.
4445@item Provides both sync and async interfaces.
4446@item Async backend support for @code{asyncio} and @code{trio}.
4447@end itemize")
4448 (license license:bsd-3)))
4449
4450(define-public python-httpretty
4451 (package
4452 (name "python-httpretty")
4453 (version "1.1.4")
4454 (source
4455 (origin
4456 (method url-fetch)
4457 (uri (pypi-uri "httpretty" version))
4458 (sha256
4459 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
4460 (build-system pyproject-build-system)
4461 (arguments
4462 (list
4463 #:test-flags
4464 ;; Only run Unit tests.
4465 #~(list "--ignore=tests/bugfixes"
4466 "--ignore=tests/functional"
4467 "--ignore=tests/pyopenssl"
4468 "-k" (string-join
4469 ;; Tests pattern failing with one of these errors:
4470 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
4471 ;; has no attribute 'should'
4472 ;; AttributeError: 'function' object has no attribute
4473 ;; 'when'
4474 ;; AttributeError: 'AssertionBuilder' object has no
4475 ;; attribute 'should_not'
4476 (list "not fake_socket_passes_through"
4477 "fakesock_socket"
4478 "request_parse_body_when"
4479 "test_Entry_class_normalizes_headers"
4480 "test_has_request"
4481 "test_httpretty_should_raise_proper"
4482 "test_parse_request_line_connect"
4483 "test_request_parse_querystring"
4484 "test_request_string_representation"
4485 "test_request_stubs_internals")
4486 " and not "))))
4487 (native-inputs
4488 (list nss-certs-for-test
4489 python-freezegun
4490 python-mock
4491 python-pytest
4492 python-setuptools
4493 python-sure
4494 python-wheel))
4495 (home-page "https://httpretty.readthedocs.io")
4496 (synopsis "HTTP client mock for Python")
4497 (description
4498 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
4499@code{fakeweb}.")
4500 (license license:expat)))
4501
4502(define-public python-httpx2
4503 (package
4504 (name "python-httpx2")
4505 (version "2.4.0")
4506 (source
4507 (origin
4508 (method git-fetch)
4509 (uri (git-reference
4510 (url "https://github.com/pydantic/httpx2")
4511 (commit (string-append "v" version))))
4512 (file-name (git-file-name name version))
4513 (sha256
4514 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
4515 (arguments
4516 (list
4517 ;; tests: 1227 passed, 200 deselected
4518 #:test-flags
4519 ;; Networking tests.
4520 #~(list "-k" (string-join
4521 (list "not test_async_proxy_close[asyncio]"
4522 "test_async_proxy_close[trio]"
4523 "test_auth"
4524 "test_binary"
4525 "test_client_decode_text_using_autodetect"
4526 "test_client_decode_text_using_explicit_encoding"
4527 "test_follow_redirects"
4528 "test_get"
4529 "test_idna_url[http_with_custom_port]"
4530 "test_idna_url[http_with_port]"
4531 "test_idna_url[https_with_custom_port]"
4532 "test_idna_url[https_with_port]"
4533 "test_idna_url[https_without_port]"
4534 "test_idna_url[idna_label_after_ascii_label]"
4535 "test_idna_url[unicode_tr46_compat]"
4536 "test_json"
4537 "test_post"
4538 "test_redirects"
4539 "test_response_decode_text_using_autodetect"
4540 "test_sync_proxy_close"
4541 "test_url_malformed_idna_label_after_ascii_label"
4542 "test_url_mixed_valid_and_malformed_idna_labels"
4543 "test_verbose")
4544 " and not "))
4545 #:phases
4546 #~(modify-phases %standard-phases
4547 (add-after 'unpack 'preparation
4548 (lambda _
4549 (chdir "src/httpx2")
4550 (copy-recursively "../../tests/httpx2" "tests")
4551 (substitute* (find-files "tests" "\\.py$")
4552 (("tests\\.httpx2") "tests")
4553 (("tests/httpx2") "tests"))))
4554 (add-before 'build 'set-version
4555 (lambda _
4556 (substitute* "pyproject.toml"
4557 (("\"uv-dynamic-versioning>=0\\.8\\.0\"") "")
4558 (("source.*uv-dynamic-versioning.*") "source = 'vcs'")
4559 (("\\.uv-dynamic-versioning") ".vcs")))))))
4560 (build-system pyproject-build-system)
4561 (native-inputs
4562 (list python-chardet
4563 python-hatch-fancy-pypi-readme
4564 python-hatch-vcs
4565 python-hatchling
4566 python-pytest
4567 python-trustme
4568 python-uvicorn))
4569 (propagated-inputs
4570 (list python-anyio
4571 python-httpcore2
4572 python-idna
4573 python-truststore
4574 python-typing-extensions ;Python version < 3.13
4575 ;; [optional]
4576 python-brotli
4577 python-click
4578 python-h2
4579 python-pygments
4580 python-rich
4581 python-socksio
4582 python-zstandard))
4583 (home-page "https://github.com/pydantic/httpx2")
4584 (synopsis "The next generation HTTP client")
4585 (description
4586 "HTTPX2 is a fully featured HTTP client library for Python. It includes
4587an integrated command line client, has support for both HTTP/1.1 and HTTP/2,
4588and provides both sync and async APIs.")
4589 (license license:bsd-3)))
4590
4591(define-public python-jiter
4592 (package
4593 (name "python-jiter")
4594 (version "0.15.0")
4595 (source
4596 (origin
4597 (method git-fetch)
4598 (uri (git-reference
4599 (url "https://github.com/pydantic/jiter/")
4600 (commit (string-append "v" version))))
4601 (file-name (git-file-name name version))
4602 (sha256
4603 (base32 "1z2ljacsc64yykkxvjnq6rq4z56xwr8jhcw02ckv6b85kc66x63p"))))
4604 (build-system pyproject-build-system)
4605 (arguments
4606 (list
4607 #:imported-modules (append %cargo-build-system-modules
4608 %pyproject-build-system-modules)
4609 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4610 (guix build pyproject-build-system)
4611 (guix build utils))
4612 #:phases
4613 #~(modify-phases %standard-phases
4614 (add-after 'unpack 'prepare-cargo-build-system
4615 (lambda args
4616 (for-each (lambda (phase)
4617 (format #t "Running cargo phase: ~a~%" phase)
4618 (apply (assoc-ref cargo:%standard-phases phase)
4619 #:cargo-target #$(cargo-triplet)
4620 args))
4621 '(prepare-rust-crates
4622 unpack-rust-crates
4623 configure
4624 check-for-pregenerated-files
4625 patch-cargo-checksums))))
4626 (add-after 'prepare-cargo-build-system 'chdir
4627 (lambda _
4628 (chdir "crates/jiter-python"))))))
4629 (native-inputs
4630 (append (list maturin
4631 python-dirty-equals
4632 python-pytest
4633 rust
4634 `(,rust "cargo"))
4635 (or (and=> (%current-target-system)
4636 (compose list make-rust-sysroot))
4637 '())))
4638 (inputs (cargo-inputs 'jiter))
4639 (home-page "https://github.com/pydantic/jiter/")
4640 (synopsis "Iterable JSON parser")
4641 (description
4642 "This package provides a fast Python iterable JSON parser, backed by Rust
4643libraries.")
4644 (license license:bsd-3)))
4645
4646(define-public python-justhtml
4647 (package
4648 (name "python-justhtml")
4649 (version "1.13.0")
4650 (source
4651 (origin
4652 (method git-fetch)
4653 (uri (git-reference
4654 (url "https://github.com/emilstenstrom/justhtml")
4655 (commit (string-append "v" version))))
4656 (file-name (git-file-name name version))
4657 (sha256
4658 (base32 "1hy5w3lr08sj3pivs46nnlfsvrd9ynmicxcrjk4sxbpg7411lyj5"))))
4659 (build-system pyproject-build-system)
4660 (native-inputs
4661 (list python-hatchling))
4662 (home-page "https://github.com/emilstenstrom/justhtml")
4663 (synopsis "Pure Python HTML5 parser")
4664 (description
4665 "JustHTML is a pure Python HTML5 parser. It has a simple API and does
4666not require C extensions or system dependencies.")
4667 (license license:expat)))
4668
4669(define-public python-hf-xet
4670 (package
4671 (name "python-hf-xet")
4672 (version "1.5.1")
4673 (source
4674 (origin
4675 (method git-fetch)
4676 (uri (git-reference
4677 (url "https://github.com/huggingface/xet-core")
4678 (commit (string-append "v" version))))
4679 (file-name (git-file-name name version))
4680 (sha256
4681 (base32 "0bczy0a8g7fnscpz2plq2pq0b8vapx9q5sny13rs2fa04ypq992f"))
4682 (modules '((guix build utils)))
4683 (snippet #~(for-each delete-file
4684 (find-files "." "Cargo\\.lock$")))))
4685 (build-system pyproject-build-system)
4686 (arguments
4687 (list
4688 #:imported-modules (append %cargo-build-system-modules
4689 %pyproject-build-system-modules)
4690 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4691 (guix build pyproject-build-system)
4692 (guix build utils))
4693 #:phases
4694 #~(modify-phases %standard-phases
4695 (add-after 'unpack 'prepare-cargo-build-system
4696 (lambda args
4697 (for-each (lambda (phase)
4698 (format #t "Running cargo phase: ~a~%" phase)
4699 (apply (assoc-ref cargo:%standard-phases phase)
4700 #:cargo-target #$(cargo-triplet)
4701 args))
4702 '(prepare-rust-crates
4703 unpack-rust-crates
4704 configure
4705 check-for-pregenerated-files
4706 patch-cargo-checksums))))
4707 (add-after 'prepare-cargo-build-system 'chdir
4708 (lambda _
4709 (chdir "hf_xet"))))))
4710 (native-inputs
4711 (append (list maturin
4712 python-pytest
4713 rust
4714 `(,rust "cargo"))
4715 (or (and=> (%current-target-system)
4716 (compose list make-rust-sysroot))
4717 '())))
4718 (inputs (cargo-inputs 'hf_xet))
4719 (home-page "https://github.com/huggingface/xet-core")
4720 (synopsis "Transfer large files with the Hugging Face Hub")
4721 (description
4722 "This package enables @code{python-huggingface-hub} to utilize xet
4723storage for uploading and downloading to HF Hub. Xet storage provides
4724chunk-based deduplication, efficient storage/retrieval with local disk
4725caching, and backwards compatibility with Git LFS. This library is not meant
4726to be used directly, and is instead intended to be used from
4727@code{python-huggingface-hub}.")
4728 (license license:asl2.0)))
4729
4730(define-public python-huggingface-hub
4731 (package
4732 (name "python-huggingface-hub")
4733 (version "0.36.2")
4734 (source
4735 (origin
4736 (method git-fetch)
4737 (uri (git-reference
4738 (url "https://github.com/huggingface/huggingface_hub")
4739 (commit (string-append "v" version))))
4740 (file-name (git-file-name name version))
4741 (sha256
4742 (base32 "0hgdkfp7472sp0fjm5mwsx2rdlbr2ms8mzfzs0zr501gdwr7jjki"))))
4743 (build-system pyproject-build-system)
4744 (arguments
4745 (list
4746 #:test-flags
4747 ;; We don't have sentence_transformers...
4748 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
4749 ;; ...nor do we have InquirerPy...
4750 "--ignore=tests/test_command_delete_cache.py"
4751 ;; ...or timm...
4752 "--ignore=contrib/timm/test_timm.py"
4753 ;; ...or spacy_huggingface_hub
4754 "--ignore=contrib/spacy/test_spacy.py"
4755 ;; These all require internet access
4756 "--ignore=tests/test_cache_no_symlinks.py"
4757 "--ignore=tests/test_cache_layout.py"
4758 "--ignore=tests/test_commit_scheduler.py"
4759 "--ignore=tests/test_file_download.py"
4760 "--ignore=tests/test_hf_api.py"
4761 "--ignore=tests/test_hf_file_system.py"
4762 "--ignore=tests/test_inference_api.py"
4763 "--ignore=tests/test_inference_async_client.py"
4764 "--ignore=tests/test_inference_client.py"
4765 "--ignore=tests/test_inference_text_generation.py"
4766 "--ignore=tests/test_login_utils.py"
4767 "--ignore=tests/test_offline_utils.py"
4768 "--ignore=tests/test_repocard.py"
4769 "--ignore=tests/test_repository.py"
4770 "--ignore=tests/test_snapshot_download.py"
4771 "--ignore=tests/test_utils_cache.py"
4772 "--ignore=tests/test_utils_git_credentials.py"
4773 "--ignore=tests/test_utils_http.py"
4774 "--ignore=tests/test_utils_pagination.py"
4775 "--ignore=tests/test_webhooks_server.py"
4776 "-k" (string-append
4777 "not test_push_to_hub"
4778 " and not test_from_pretrained_model_id_only"
4779 " and not test_from_pretrained_model_id_and_revision"
4780 ;; These all require internet access
4781 " and not test_auth"
4782 " and not test_oauth"
4783 " and not test_utils_sha"
4784 " and not test_inference_providers"
4785 " and not test_xet"))
4786 #:phases
4787 '(modify-phases %standard-phases
4788 (add-before 'check 'pre-check
4789 ;; Some tests need to write to HOME.
4790 (lambda _ (setenv "HOME" "/tmp"))))))
4791 (propagated-inputs
4792 (list python-filelock
4793 python-fsspec
4794 python-hf-xet
4795 python-packaging
4796 python-pyyaml
4797 python-requests
4798 python-tqdm
4799 python-typing-extensions))
4800 (native-inputs
4801 (list python-aiohttp
4802 python-fastapi
4803 python-jedi
4804 python-jinja2
4805 python-numpy
4806 python-pillow
4807 python-pydantic
4808 python-pytest
4809 python-pytest-asyncio
4810 python-pytest-env
4811 python-pytest-mock
4812 python-pytest-rerunfailures
4813 python-pytest-vcr
4814 python-pytest-xdist
4815 python-setuptools
4816 python-types-requests
4817 python-types-toml
4818 python-types-urllib3
4819 python-typing-extensions
4820 python-urllib3))
4821 (home-page "https://huggingface.co/docs/huggingface_hub/")
4822 (synopsis "Client library for accessing the huggingface.co hub")
4823 (description
4824 "This package provides a client library to download and publish models,
4825datasets and other repos on the @url{huggingface.co} hub.")
4826 (license license:asl2.0)))
4827
4828(define-public python-kubernetes
4829 (package
4830 (name "python-kubernetes")
4831 (version "35.0.0")
4832 (source
4833 (origin
4834 (method url-fetch)
4835 (uri (pypi-uri "kubernetes" version))
4836 (sha256
4837 (base32 "1vh9bzq175fzv9av3v37lcfh37yzss2d9vxrb0a84fa2ji2d601x"))))
4838 (build-system pyproject-build-system)
4839 (arguments
4840 (list
4841 #:test-flags
4842 #~(list
4843 ;; The following tests expect a local running Kubernetes cluster.
4844 "--ignore=kubernetes/e2e_test"
4845 "--ignore=kubernetes/dynamic")))
4846 (native-inputs
4847 (list python-pytest
4848 python-setuptools))
4849 (propagated-inputs
4850 (list python-certifi
4851 python-dateutil
4852 python-durationpy
4853 python-google-auth
4854 python-pyyaml
4855 python-requests
4856 python-requests-oauthlib
4857 python-six ;XXX: hard dependency
4858 python-urllib3
4859 python-websocket-client))
4860 (home-page "https://github.com/kubernetes-client/python")
4861 (synopsis "Python client for Kubernetes")
4862 (description
4863 "This package provides an official Python client library for
4864@url{http://kubernetes.io, Kubernetes}.")
4865 (license license:asl2.0)))
4866
4867(define-public python-lazr-restfulclient
4868 (package
4869 (name "python-lazr-restfulclient")
4870 (version "0.14.6")
4871 (source
4872 (origin
4873 (method url-fetch)
4874 (uri (pypi-uri "lazr.restfulclient" version))
4875 (sha256
4876 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
4877 (build-system pyproject-build-system)
4878 (arguments
4879 (list
4880 #:phases
4881 #~(modify-phases %standard-phases
4882 ;; Disable part of the test suite to avoid the lazr.authentication
4883 ;; requirement, which requires 'oauth', a Python 2 only library.
4884 (add-after 'unpack 'remove-some-checks
4885 (lambda _
4886 (with-directory-excursion "src/lazr/restfulclient/tests"
4887 (for-each delete-file '("test_oauth.py" "test_docs.py")))
4888 (substitute* "setup.py"
4889 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
4890 ""))))
4891 (replace 'check
4892 (lambda* (#:key tests? #:allow-other-keys)
4893 (if tests?
4894 (invoke "zope-testrunner" "--test-path=src")
4895 (format #t "test suite not run~%")))))))
4896 (native-inputs
4897 (list python-setuptools
4898 python-testtools
4899 python-wheel
4900 python-wsgi-intercept
4901 python-zope-testrunner))
4902 (propagated-inputs
4903 (list python-distro
4904 python-httplib2
4905 python-oauthlib
4906 python-pyparsing
4907 python-setuptools
4908 python-six
4909 python-wadllib))
4910 (home-page "https://launchpad.net/lazr.restfulclient")
4911 (synopsis "Web client Python library extending wadlib")
4912 (description "This package provides a programmable client library that
4913adds functionality on top of @code{wadlib}.")
4914 (license license:lgpl3+)))
4915
4916(define-public python-launchpadlib
4917 (package
4918 (name "python-launchpadlib")
4919 (version "2.1.0")
4920 (source
4921 (origin
4922 (method url-fetch)
4923 (uri (pypi-uri "launchpadlib" version))
4924 (sha256
4925 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
4926 (build-system pyproject-build-system)
4927 (arguments
4928 (list #:phases #~(modify-phases %standard-phases
4929 (add-before 'check 'set-home
4930 (lambda _
4931 ;; Tests require a writable home.
4932 (setenv "HOME" "/tmp"))))))
4933 (propagated-inputs
4934 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
4935 (native-inputs (list python-pytest python-testresources python-wadllib
4936 python-setuptools python-wheel))
4937 (home-page "https://documentation.ubuntu.com/launchpad")
4938 (synopsis "Python client library for Launchpad's web service")
4939 (description "@code{launchpadlib} is a Python library that allows
4940scripting Launchpad via its the web service API.")
4941 (license license:lgpl3+)))
4942
4943(define-public python-lazr-uri
4944 (package
4945 (name "python-lazr-uri")
4946 (version "1.0.7")
4947 (source
4948 (origin
4949 (method url-fetch)
4950 (uri (pypi-uri "lazr_uri" version))
4951 (sha256
4952 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
4953 (build-system pyproject-build-system)
4954 (arguments
4955 (list
4956 #:phases
4957 #~(modify-phases %standard-phases
4958 (replace 'check
4959 (lambda* (#:key tests? #:allow-other-keys)
4960 (if tests?
4961 (invoke "zope-testrunner" "--test-path=src")
4962 (format #t "test suite not run~%")))))))
4963 (native-inputs (list python-setuptools python-zope-testrunner))
4964 (home-page "https://launchpad.net/lazr.uri")
4965 (synopsis "Python URI manipulation library")
4966 (description "This Python package provides a self-contained, easily
4967reusable library for parsing, manipulating, and generating URIs.")
4968 (license license:lgpl3)))
4969
4970(define-public python-ldaptor
4971 (package
4972 (name "python-ldaptor")
4973 (version "21.2.0")
4974 (source
4975 (origin
4976 (method url-fetch)
4977 (uri (pypi-uri "ldaptor" version))
4978 (sha256
4979 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
4980 (build-system pyproject-build-system)
4981 (arguments
4982 (list
4983 #:test-flags
4984 #~(list "-m" "twisted.trial"
4985 (string-append "-j" (number->string (parallel-job-count)))
4986 "ldaptor")
4987 #:phases
4988 #~(modify-phases %standard-phases
4989 (add-after 'unpack 'python-3.12-patch
4990 (lambda _
4991 (substitute* "ldaptor/config.py"
4992 (("SafeConfigParser")
4993 "ConfigParser"))))
4994 (add-before 'check 'disable-failing-tests
4995 (lambda _
4996 ;; Testing with Twisted 22.4 results in infinite loop creating
4997 ;; temporary config files, see
4998 ;; <https://github.com/twisted/ldaptor/issues/238>.
4999 (delete-file "ldaptor/test/test_config.py")))
5000 (replace 'check
5001 (lambda* (#:key tests? test-flags #:allow-other-keys)
5002 (when tests?
5003 (apply invoke "python" test-flags)))))))
5004 (native-inputs
5005 (list python-setuptools
5006 python-wheel))
5007 (propagated-inputs
5008 (list python-passlib
5009 python-pyopenssl
5010 python-service-identity ; to pass sanity check, for Twisted[tls]
5011 python-pyparsing
5012 python-twisted
5013 python-zope-interface))
5014 (home-page "https://github.com/twisted/ldaptor")
5015 (synopsis "Pure-Python Twisted library for LDAP")
5016 (description
5017 "This package provides a Python Twisted library for LDAP, which key
5018feaatures are:
5019@itemize
5020@item LDAP client logic
5021@item separately-accessible LDAP and BER protocol message generation/parsing
5022@item ASCII-format LDAP filter generation and parsing
5023@item LDIF format data generation
5024@item Samba password changing logic
5025@end itemize")
5026 (license license:expat)))
5027
5028(define-public python-legacy-cgi
5029 (package
5030 (name "python-legacy-cgi")
5031 (version "2.6.1")
5032 (source
5033 (origin
5034 (method url-fetch)
5035 (uri (pypi-uri "legacy_cgi" version))
5036 (sha256
5037 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
5038 (build-system pyproject-build-system)
5039 (native-inputs (list python-poetry-core python-pytest))
5040 (home-page "https://github.com/jackrosenthal/legacy-cgi")
5041 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
5042 (description
5043 "This is a fork of the standard library modules @code{cgi} and
5044@code{cgitb}. They are slated to be removed from the Python standard library
5045in Python 3.13 by PEP-594.")
5046 (license license:psfl)))
5047
5048(define-public python-librouteros
5049 (package
5050 (name "python-librouteros")
5051 (version "4.0.0")
5052 (source
5053 (origin
5054 (method git-fetch)
5055 (uri (git-reference
5056 (url "https://github.com/luqasz/librouteros")
5057 (commit version)))
5058 (file-name (git-file-name name version))
5059 (sha256
5060 (base32 "0in952b2idb5j8v6sxfm21gqbr5i5776w5ir0hdsxjrl2f29305v"))))
5061 (build-system pyproject-build-system)
5062 (arguments
5063 (list
5064 #:build-backend "hatchling.build"
5065 #:test-flags
5066 #~(list "tests/unit")))
5067 (native-inputs
5068 (list python-hatchling
5069 python-pytest
5070 python-pytest-asyncio
5071 python-stamina))
5072 (home-page "https://github.com/luqasz/librouteros")
5073 (synopsis "Python implementation of MikroTik RouterOS API")
5074 (description
5075 "This package implements MikroTik's @code{RouterOS} API.")
5076 (license license:gpl2+)))
5077
5078(define-public python-multipart/defnull
5079 (package
5080 (name "python-multipart-defnull")
5081 (version "2.0.1")
5082 (source
5083 (origin
5084 (method git-fetch)
5085 (uri (git-reference
5086 (url "https://github.com/defnull/multipart")
5087 (commit (string-append "v" version))))
5088 (file-name (git-file-name name version))
5089 (sha256
5090 (base32 "1kga8h03rk44nipks2dal9lrs455alfdh4rl1dmpr8q1l8fkcnia"))))
5091 (build-system pyproject-build-system)
5092 (native-inputs (list python-flit-core python-pytest))
5093 (home-page "https://multipart.readthedocs.io/")
5094 (synopsis "Multipart/form-data parser for Python")
5095 (description
5096 "This package provides a fast incremental non-blocking parser for
5097multipart/form-data [HTML5, @url{https://www.rfc-editor.org/rfc/rfc7578,
5098RFC7578}], as well as blocking alternatives for easier use in WSGI or CGI
5099applications:
5100
5101@itemize
5102@item PushMultipartParser: Fast SansIO (incremental, non-blocking) parser
5103suitable for ASGI, asyncio and other IO, time or memory constrained
5104environments.
5105
5106@item MultipartParser: Streaming parser that reads from a byte stream and
5107yields memory- or disk-buffered MultipartPart instances.
5108
5109@item WSGI Helper: High-level functions and containers for WSGI or CGI
5110applications with support for both multipart and urlencoded form submissions.
5111@end itemize
5112
5113It is hosted in PyPI as @url{https://pypi.org/project/multipart/,
5114multipart}.")
5115 (license license:expat)))
5116
5117(define-public python-opentelemetry-api
5118 (package
5119 (name "python-opentelemetry-api")
5120 (version "1.37.0")
5121 (source
5122 (origin
5123 (method url-fetch)
5124 (uri (pypi-uri "opentelemetry_api" version))
5125 (sha256
5126 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
5127 (build-system pyproject-build-system)
5128 (propagated-inputs (list python-importlib-metadata
5129 python-typing-extensions))
5130 (native-inputs (list python-hatchling
5131 python-opentelemetry-test-utils-bootstrap))
5132 (home-page "https://opentelemetry.io/docs/languages/python/")
5133 (synopsis "OpenTelemetry Python API")
5134 (description "@code{OpenTelemetry} Python API.")
5135 (license license:asl2.0)))
5136
5137(define-public python-opentelemetry-api-bootstrap
5138 (hidden-package
5139 (package/inherit python-opentelemetry-api
5140 (name "python-opentelemetry-api-bootstrap")
5141 (arguments
5142 (list
5143 #:tests? #f))
5144 (native-inputs (list python-hatchling)))))
5145
5146(define-public python-opentelemetry-sdk
5147 (package
5148 (name "python-opentelemetry-sdk")
5149 (version "1.37.0")
5150 (source
5151 (origin
5152 (method url-fetch)
5153 (uri (pypi-uri "opentelemetry_sdk" version))
5154 (sha256
5155 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
5156 (build-system pyproject-build-system)
5157 (propagated-inputs (list python-opentelemetry-api
5158 python-opentelemetry-semantic-conventions
5159 python-typing-extensions))
5160 (native-inputs (list python-hatchling
5161 python-opentelemetry-test-utils-bootstrap
5162 python-pytest))
5163 (home-page "https://opentelemetry.io/docs/languages/python/")
5164 (synopsis "OpenTelemetry Python SDK")
5165 (description "@code{OpenTelemetry} Python SDK.")
5166 (license license:asl2.0)))
5167
5168(define-public python-opentelemetry-sdk-bootstrap
5169 (hidden-package
5170 (package/inherit python-opentelemetry-sdk
5171 (name "python-opentelemetry-sdk-bootstrap")
5172 (arguments (list #:tests? #f))
5173 (propagated-inputs (list python-opentelemetry-api-bootstrap
5174 python-opentelemetry-semantic-conventions-bootstrap))
5175 (native-inputs (list python-hatchling)))))
5176
5177(define-public python-opentelemetry-semantic-conventions
5178 (package
5179 (name "python-opentelemetry-semantic-conventions")
5180 (version "0.58b0")
5181 (source
5182 (origin
5183 (method url-fetch)
5184 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
5185 (sha256
5186 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
5187 (build-system pyproject-build-system)
5188 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
5189 (native-inputs (list python-hatchling))
5190 (home-page "https://opentelemetry.io/docs/languages/python/")
5191 (synopsis "OpenTelemetry Semantic Conventions")
5192 (description "@code{OpenTelemetry} Semantic Conventions.")
5193 (license license:asl2.0)))
5194
5195(define-public python-opentelemetry-semantic-conventions-bootstrap
5196 (hidden-package
5197 (package/inherit python-opentelemetry-semantic-conventions
5198 (name "python-opentelemetry-semantic-conventions-bootstrap")
5199 (arguments
5200 (list
5201 #:tests? #f))
5202 (propagated-inputs (list python-opentelemetry-api-bootstrap
5203 python-typing-extensions)))))
5204
5205(define-public python-opentelemetry-test-utils
5206 (package
5207 (name "python-opentelemetry-test-utils")
5208 (version "0.58b0")
5209 (source
5210 (origin
5211 (method url-fetch)
5212 (uri (pypi-uri "opentelemetry_test_utils" version))
5213 (sha256
5214 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
5215 (build-system pyproject-build-system)
5216 (arguments (list #:tests? #f)) ; No tests in the wheel.
5217 (propagated-inputs
5218 (list python-asgiref
5219 python-opentelemetry-api
5220 python-opentelemetry-sdk))
5221 (native-inputs (list python-hatchling))
5222 (home-page "https://opentelemetry.io/docs/languages/python/")
5223 (synopsis "Test utilities for OpenTelemetry unit tests")
5224 (description "Test utilities for @code{OpenTelemetry} unit tests.")
5225 (license license:asl2.0)))
5226
5227(define-public python-opentelemetry-test-utils-bootstrap
5228 (hidden-package
5229 (package/inherit python-opentelemetry-test-utils
5230 (name "python-opentelemetry-test-utils-bootstrap")
5231 (propagated-inputs
5232 (list python-asgiref
5233 python-opentelemetry-api-bootstrap
5234 python-opentelemetry-sdk-bootstrap)))))
5235
5236(define-public python-pathy
5237 (package
5238 (name "python-pathy")
5239 (version "0.11.0")
5240 (source
5241 (origin
5242 (method url-fetch)
5243 (uri (pypi-uri "pathy" version))
5244 (sha256
5245 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
5246 (build-system pyproject-build-system)
5247 (native-inputs
5248 (list python-mock
5249 python-pytest
5250 python-setuptools))
5251 (propagated-inputs
5252 (list python-pathlib-abc-for-python-pathy
5253 python-smart-open-6
5254 python-typer))
5255 (home-page "https://github.com/justindujardin/pathy")
5256 (synopsis "Path interface for local and cloud bucket storage")
5257 (description "Pathy is a python package (with type annotations) for
5258working with Cloud Bucket storage providers using a @code{pathlib} interface.
5259It provides @code{pathlib.Path} subclasses for local and cloud bucket
5260storage.")
5261 (license license:asl2.0)))
5262
5263(define-public python-portend
5264 (package
5265 (name "python-portend")
5266 (version "3.2.1")
5267 (source
5268 (origin
5269 (method url-fetch)
5270 (uri (pypi-uri "portend" version))
5271 (sha256
5272 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
5273 (build-system pyproject-build-system)
5274 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
5275 ;; download dependencies.
5276 (arguments
5277 '(#:test-flags '("-k" "not project")))
5278 (native-inputs
5279 (list python-pytest
5280 python-setuptools
5281 python-setuptools-scm))
5282 (propagated-inputs
5283 (list python-tempora))
5284 (home-page "https://github.com/jaraco/portend")
5285 (synopsis "Monitor TCP ports for bound or unbound states")
5286 (description
5287 "@code{python-portend} can be used to monitor TCP ports for bound or
5288unbound states. For example, waiting for a port to be occupied or freed
5289within a set timeout. @code{python-portend} can also be used directly from
5290the command line.")
5291 (license license:expat)))
5292
5293(define-public python-prawcore
5294 (package
5295 (name "python-prawcore")
5296 (version "4.0.0")
5297 (source
5298 (origin
5299 (method git-fetch)
5300 (uri (git-reference
5301 (url "https://github.com/praw-dev/prawcore")
5302 (commit (string-append "v" version))))
5303 (file-name (git-file-name name version))
5304 (sha256
5305 (base32 "1kqqv1n9bibxfgagbyd8vl0yzrd4lr58xl59swz5v70w0kfap5fm"))))
5306 (build-system pyproject-build-system)
5307 (arguments
5308 (list
5309 ;; This test fails with a str rather than a bytes-like object.
5310 #:test-flags #~(list "-k" "not test_request__service_unavailable")))
5311 (native-inputs
5312 (list nss-certs-for-test
5313 python-betamax
5314 python-betamax-matchers
5315 python-betamax-serializers
5316 python-hatchling
5317 python-mock
5318 python-pytest
5319 python-testfixtures
5320 python-vcrpy))
5321 (propagated-inputs
5322 (list python-requests))
5323 (synopsis "Core component of PRAW")
5324 (description "PRAWcore is a low-level communication layer used by PRAW.")
5325 (home-page "https://praw.readthedocs.io/en/latest/")
5326 (license license:bsd-2)))
5327
5328(define-public python-praw
5329 (package
5330 (name "python-praw")
5331 (version "8.0.2")
5332 (source
5333 (origin
5334 (method git-fetch)
5335 (uri (git-reference
5336 (url "https://github.com/praw-dev/praw")
5337 (commit (string-append "v" version))))
5338 (file-name (git-file-name name version))
5339 (sha256
5340 (base32 "15kwvkc6ag83p3mrfnq6ffyvbw4d3njx0dl0vv00y7724b2rpqxw"))))
5341 (build-system pyproject-build-system)
5342 (arguments
5343 (list #:test-flags
5344 #~(list "--ignore=tests/units/models"
5345 "--ignore=tests/integration/models"
5346 "--ignore=tests/unit/test_config.py"
5347 "--ignore=tests/integration/test_reddit.py")))
5348 (native-inputs
5349 (list nss-certs-for-test
5350 python-betamax
5351 python-betamax-matchers
5352 python-hatchling
5353 python-pytest
5354 python-vcrpy))
5355 (propagated-inputs
5356 (list python-defusedxml
5357 python-prawcore
5358 python-update-checker
5359 python-websocket-client))
5360 (synopsis "Python Reddit API Wrapper")
5361 (description "PRAW is a Python package that allows for simple access to
5362Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
5363API rules.")
5364 (home-page "https://praw.readthedocs.io/en/latest/")
5365 (license license:bsd-2)))
5366
5367(define-public python-frozenlist
5368 (package
5369 (name "python-frozenlist")
5370 (version "1.8.0")
5371 (source
5372 (origin
5373 (method git-fetch)
5374 (uri (git-reference
5375 (url "https://github.com/aio-libs/frozenlist")
5376 (commit (string-append "v" version))))
5377 (file-name (git-file-name name version))
5378 (sha256
5379 (base32 "0r1kxf5b562zrn04nl912i6a8y1fyc891l1284v0zj9llb97limy"))))
5380 ;; XXX: Without "wheel", the 'install phase can't find the wheel.
5381 (outputs (list "out" "wheel"))
5382 (build-system pyproject-build-system)
5383 ;; The configuration contains explicit early calls to pytest_cov.
5384 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
5385 (native-inputs
5386 (list python-cython
5387 python-expandvars
5388 python-pytest
5389 python-setuptools
5390 python-tomli))
5391 (home-page "https://github.com/aio-libs/frozenlist")
5392 (synopsis "List-like data structure for Python")
5393 (description "@code{frozenlist.FrozenList} is a list-like structure which
5394implements @code{collections.abc.MutableSequence}. It can be made immutable
5395by calling @code{FrozenList.freeze}.")
5396 (license license:asl2.0)))
5397
5398(define-public python-httpauth
5399 (package
5400 (name "python-httpauth")
5401 (version "0.4.1")
5402 (source (origin
5403 (method url-fetch)
5404 (uri (pypi-uri "httpauth" version))
5405 (sha256
5406 (base32
5407 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
5408 (build-system pyproject-build-system)
5409 (native-inputs (list python-pytest python-setuptools python-wheel))
5410 (home-page "https://github.com/jonashaag/httpauth")
5411 (synopsis "WSGI HTTP Digest Authentication middleware")
5412 (description "@code{python-httpauth} is WSGI middleware that secures some/all
5413routes using HTTP Digest Authentication.")
5414 (license license:bsd-2)))
5415
5416(define-public python-publicsuffixlist
5417 (package
5418 (name "python-publicsuffixlist")
5419 (version "1.0.2.20250202")
5420 (source
5421 (origin
5422 (method url-fetch)
5423 (uri (pypi-uri "publicsuffixlist" version))
5424 (sha256
5425 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
5426 (build-system pyproject-build-system)
5427 (arguments (list #:test-backend #~'unittest))
5428 (native-inputs (list python-setuptools))
5429 (home-page "https://github.com/ko-zu/psl")
5430 (synopsis "Public suffix list for Python")
5431 (description
5432 "This package provides an implementation of
5433@url{https://publicsuffix.org/, Public Suffix List } as Python library.
5434
5435Features:
5436@itemize
5437@item supports IDN (unicode and punycoded)
5438@item shipped with built-in PSL and an updater script
5439@item written in Pure Python with no library dependencies
5440@end itemize")
5441 (license license:mpl2.0)))
5442
5443(define-public python-pycognito
5444 (package
5445 (name "python-pycognito")
5446 (version "2024.5.1")
5447 (source
5448 (origin
5449 (method url-fetch)
5450 (uri (pypi-uri "pycognito" version))
5451 (sha256
5452 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
5453 (build-system pyproject-build-system)
5454 (arguments
5455 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
5456 (list #:tests? #f))
5457 (native-inputs
5458 (list python-setuptools))
5459 (propagated-inputs
5460 (list python-boto3
5461 python-envs
5462 python-pyjwt
5463 python-requests))
5464 (home-page "https://github.com/pvizeli/pycognito")
5465 (synopsis "Python library for using AWS Cognito")
5466 (description
5467 "This package provides a Python class to integrate Boto3's Cognito
5468client so it is easy to login users, with @acronym{Secure Remote Password,
5469SRP} support.")
5470 (license license:asl2.0)))
5471
5472(define-public python-pydap
5473 (package
5474 (name "python-pydap")
5475 (version "3.5.10")
5476 (source
5477 (origin
5478 (method git-fetch)
5479 (uri (git-reference
5480 (url "https://github.com/pydap/pydap")
5481 (commit version)))
5482 (file-name (git-file-name name version))
5483 (sha256
5484 (base32 "000b7jqjpx71miwxhbi07amyjyijq925x9x3paa7kzrr268klc2z"))))
5485 (build-system pyproject-build-system)
5486 (arguments
5487 (list
5488 ;; tests: 435 passed, 6 skipped
5489 #:test-flags
5490 ;; Tests need extra packaging.
5491 #~(list "--ignore=src/pydap/tests/test_wsgi_functions.py"
5492 "--ignore=src/pydap/tests/test_wsgi_ssf.py"
5493 ;; Network access is required.
5494 "--ignore=src/pydap/tests/test_client.py"
5495 "--ignore=src/pydap/tests/test_handlers_dap.py"
5496 "--ignore=src/pydap/tests/test_open_dap4_url.py"
5497 "--ignore=src/pydap/tests/test_virtualizarr.py")))
5498 (native-inputs
5499 (list nss-certs-for-test
5500 python-requests-mock
5501 python-pytest
5502 python-setuptools
5503 python-setuptools-scm
5504 python-webtest))
5505 (propagated-inputs
5506 (list python-beautifulsoup4
5507 python-jinja2
5508 python-lxml
5509 python-numpy
5510 python-requests
5511 python-requests-cache
5512 python-scipy
5513 python-webob
5514 ;; [optional]
5515 gunicorn
5516 python-docopt-ng
5517 ;; python-coards ;not packaged yet in Guix
5518 python-fastparquet
5519 ;; python-gsw ;not packaged yet in Guix
5520 python-netcdf4
5521 python-openpyxl
5522 python-pastedeploy
5523 python-werkzeug))
5524 (home-page "https://pydap.github.io/pydap/en/intro.html")
5525 (synopsis "Data Access Protocol implementation in Python")
5526 (description
5527 "This package provides a pure Python implementation of the Data Access
5528Protocol (DAP, aka OPeNDAP).")
5529 (license license:expat)))
5530
5531(define-public python-python3-saml
5532 (package
5533 (name "python-python3-saml")
5534 (version "1.16.0")
5535 (source
5536 (origin
5537 (method git-fetch)
5538 (uri (git-reference
5539 (url "https://github.com/SAML-Toolkits/python3-saml")
5540 (commit (string-append "v" version))))
5541 (file-name (git-file-name name version))
5542 (sha256
5543 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
5544 (build-system pyproject-build-system)
5545 (arguments
5546 (list
5547 ;; 214 tests pass, 50 fail; many fail because of required Internet
5548 ;; access or because of assumptions about the location of test files.
5549 #:tests? #false))
5550 (native-inputs
5551 (list python-freezegun
5552 python-poetry-core))
5553 (inputs
5554 (list xmlsec-openssl))
5555 (propagated-inputs
5556 (list python-isodate
5557 python-lxml
5558 python-xmlsec))
5559 (home-page "https://github.com/SAML-Toolkits/python3-saml")
5560 (synopsis "Saml Python toolkit")
5561 (description
5562 "The SAML Python Toolkit lets you add SAML support to your Python
5563software.")
5564 (license license:expat)))
5565
5566(define-public python-ovh
5567 (package
5568 (name "python-ovh")
5569 (version "1.1.0")
5570 (source (origin
5571 (method url-fetch)
5572 (uri (pypi-uri "ovh" version))
5573 (sha256
5574 (base32
5575 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
5576 (build-system pyproject-build-system)
5577 (arguments (list #:tests? #f)) ; XXX: tests require networking
5578 (propagated-inputs (list python-requests))
5579 (native-inputs (list python-setuptools))
5580 (home-page "https://api.ovh.com")
5581 (synopsis "Interact with OVHcloud APIs")
5582 (description "This package provides the official module to perform HTTP requests
5583to the OVHcloud APIs.")
5584 (license license:bsd-3)))
5585
5586(define-public python-pyzabbix
5587 (package
5588 (name "python-pyzabbix")
5589 (version "1.3.1")
5590 (source
5591 (origin
5592 (method git-fetch)
5593 (uri (git-reference
5594 (url "https://github.com/lukecyca/pyzabbix")
5595 (commit version)))
5596 (file-name (git-file-name name version))
5597 (sha256
5598 (base32 "1dbs3bz1mjlvlg46ikhg5j7agwni61ljlpiziknklv95yp29n86v"))))
5599 (build-system pyproject-build-system)
5600 (arguments
5601 (list #:test-flags #~(list "tests")))
5602 (native-inputs
5603 (list python-pytest
5604 python-requests-mock
5605 python-setuptools))
5606 (propagated-inputs
5607 (list python-packaging
5608 python-requests))
5609 (home-page "https://github.com/lukecyca/pyzabbix")
5610 (synopsis "Python interface to the Zabbix API")
5611 (description
5612 "@code{pyzabbix} is a Python module for working with the Zabbix API.")
5613 (license license:lgpl2.1+)))
5614
5615(define-public python-requests-cache
5616 (package
5617 (name "python-requests-cache")
5618 (version "1.3.2")
5619 (source
5620 (origin
5621 (method git-fetch)
5622 (uri (git-reference
5623 (url "https://github.com/requests-cache/requests-cache")
5624 (commit (string-append "v" version))))
5625 (file-name (git-file-name name version))
5626 (sha256
5627 (base32 "1yhvidmmd02c95i1hamyy34rb3wfzgzxil2k8ay1p4r4kv7pjada"))))
5628 (build-system pyproject-build-system)
5629 (arguments
5630 (list
5631 ;; tests: 429 passed, 1051 warnings
5632 #:test-flags
5633 #~(list "--numprocesses" (number->string (parallel-job-count))
5634 ;; These tests require access to external services, e.g. MongoDB
5635 ;; and Redis.
5636 "--ignore=tests/integration")
5637 #:phases
5638 #~(modify-phases %standard-phases
5639 (add-before 'check 'pre-check
5640 (lambda _
5641 ;; PermissionError: [Errno 13] Permission denied:
5642 ;; '/homeless-shelter'
5643 (setenv "HOME" "/tmp"))))))
5644 (native-inputs
5645 (list python-hatchling
5646 python-pytest
5647 python-pytest-rerunfailures
5648 python-pytest-xdist
5649 python-requests-mock
5650 python-responses
5651 python-rich
5652 python-tenacity
5653 python-time-machine
5654 python-timeout-decorator))
5655 (propagated-inputs
5656 (list python-attrs
5657 python-cattrs
5658 python-platformdirs
5659 python-requests
5660 python-url-normalize
5661 python-urllib3
5662 ;; [optional]
5663 python-boto3
5664 python-botocore
5665 python-itsdangerous
5666 python-orjson ;Python version < 3.14
5667 python-pymongo
5668 python-pyyaml
5669 python-redis
5670 python-ujson))
5671 (home-page "https://github.com/requests-cache/requests-cache")
5672 (synopsis "Persistent HTTP cache for Python requests")
5673 (description
5674 "This package provides a drop-in replacement for @code{requests.Session}
5675with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
5676responses as planin JSON/YAML file or save responses as plain JSON/YAML
5677files.")
5678 (license license:bsd-2)))
5679
5680(define-public python-requests-futures
5681 (package
5682 (name "python-requests-futures")
5683 (version "1.0.2")
5684 (source
5685 (origin
5686 (method url-fetch)
5687 (uri (pypi-uri "requests_futures" version))
5688 (sha256
5689 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
5690 (build-system pyproject-build-system)
5691 (native-inputs
5692 (list python-greenlet
5693 python-pytest
5694 python-pytest-httpbin
5695 python-setuptools
5696 python-werkzeug))
5697 (propagated-inputs (list python-requests))
5698 (home-page "https://github.com/ross/requests-futures")
5699 (synopsis "Asynchronous Python HTTP for Humans")
5700 (description
5701 "This package provides and add-on the Python Requests HTTP library to run
5702code asynchronously.")
5703 (license license:asl2.0)))
5704
5705(define-public python-requests-unixsocket
5706 (package
5707 (name "python-requests-unixsocket")
5708 (version "0.4.1")
5709 (source
5710 (origin
5711 (method git-fetch)
5712 (uri (git-reference
5713 (url "https://github.com/msabramo/requests-unixsocket")
5714 (commit (string-append "v" version))))
5715 (file-name (git-file-name name version))
5716 (sha256
5717 (base32 "1f0pi31xqzm3cdag4s4gpdj36x169jwc8ibqvcwqz6h9c0pklf3n"))))
5718 (build-system pyproject-build-system)
5719 (native-inputs
5720 (list python-pytest
5721 python-setuptools
5722 python-setuptools-scm
5723 python-waitress))
5724 (propagated-inputs
5725 (list python-requests))
5726 (home-page "https://github.com/msabramo/requests-unixsocket")
5727 (synopsis "Use requests to talk HTTP via a UNIX domain socket")
5728 (description
5729 "This package provides an extension to @code{requests} which let it talk
5730HTTP via a UNIX domain socket.")
5731 (license license:asl2.0)))
5732
5733(define-public python-s3path
5734 (package
5735 (name "python-s3path")
5736 (version "0.6.4")
5737 (source
5738 (origin
5739 (method url-fetch)
5740 (uri (pypi-uri "s3path" version))
5741 (sha256
5742 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
5743 (build-system pyproject-build-system)
5744 (arguments
5745 (list
5746 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
5747 #:tests? #f))
5748 (native-inputs
5749 (list python-setuptools
5750 python-wheel))
5751 (propagated-inputs
5752 (list python-boto3
5753 python-smart-open))
5754 (home-page "https://github.com/liormizr/s3path")
5755 (synopsis "Pathlib extension for AWS S3 Service")
5756 (description
5757 "S3Path provide a Python convenient File-System/Path like interface for
5758AWS S3 Service using boto3 S3 resource as a driver.")
5759 (license license:asl2.0)))
5760
5761(define-public python-falcon
5762 (package
5763 (name "python-falcon")
5764 (version "4.0.2")
5765 (source
5766 (origin
5767 ;; Use git, as there are some test files missing from the PyPI release,
5768 ;; such as 'examples' directory.
5769 (method git-fetch)
5770 (uri (git-reference
5771 (url "https://github.com/falconry/falcon")
5772 (commit version)))
5773 (file-name (git-file-name name version))
5774 (sha256
5775 (base32
5776 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
5777 (build-system pyproject-build-system)
5778 (arguments
5779 (list
5780 #:test-flags
5781 '(list "-k" "not slow"
5782 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
5783 #:phases
5784 '(modify-phases %standard-phases
5785 (add-before 'check 'pre-check
5786 (lambda _
5787 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
5788 (setenv "FALCON_TESTING_SESSION" "Y")
5789 (setenv "PYTHONASYNCIODEBUG" "1")
5790 (setenv "HOME" "/tmp"))))))
5791 (propagated-inputs
5792 (list python-mimeparse))
5793 (native-inputs
5794 (list python-aiofiles
5795 python-cbor2
5796 python-cython ;for faster binaries
5797 python-fakeredis
5798 python-httpx
5799 python-mujson
5800 python-msgpack
5801 python-orjson
5802 python-pecan
5803 python-pillow
5804 python-pytest
5805 python-pytest-asyncio
5806 python-pyyaml
5807 python-rapidjson
5808 python-requests
5809 python-setuptools
5810 python-testtools
5811 python-ujson
5812 python-websockets
5813 python-wheel))
5814 (home-page "https://falconframework.org")
5815 (synopsis "Web framework for building APIs and application backends")
5816 (description "Falcon is a web API framework for building microservices,
5817application backends and higher-level frameworks. Among its features are:
5818@itemize
5819@item Optimized and extensible code base
5820@item Routing via URI templates and REST-inspired resource
5821classes
5822@item Access to headers and bodies through request and response
5823classes
5824@item Request processing via middleware components and hooks
5825@item Idiomatic HTTP error responses
5826@item Straightforward exception handling
5827@item Unit testing support through WSGI helpers and mocks
5828@item Compatible with both CPython and PyPy
5829@item Cython support for better performance when used with CPython
5830@end itemize")
5831 (license license:asl2.0)))
5832
5833(define-public python-falcon-cors
5834 (package
5835 (name "python-falcon-cors")
5836 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
5837 (revision . "0")))
5838 (version (git-version "1.1.7"
5839 (assoc-ref properties 'revision)
5840 (assoc-ref properties 'commit)))
5841 (source
5842 (origin
5843 (method git-fetch)
5844 (uri (git-reference
5845 (url "https://github.com/lwcolton/falcon-cors")
5846 (commit (assoc-ref properties 'commit))))
5847 (file-name (git-file-name name version))
5848 (sha256
5849 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
5850 (build-system pyproject-build-system)
5851 (arguments
5852 (list
5853 ;; XXX: The last commit's tests are incompatible with the more recent
5854 ;; version of python-falcon.
5855 #:tests? #f))
5856 (native-inputs
5857 (list python-falcon python-mock python-pynose python-setuptools))
5858 (home-page "https://github.com/lwcolton/falcon-cors")
5859 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
5860 (description
5861 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
5862support for Falcon. It allows applying a specially crafted CORS object to the
5863incoming requests, enabling the ability to serve resources over a different
5864origin than that of the web application.")
5865 (license license:asl2.0)))
5866
5867(define-public python-furl
5868 (package
5869 (name "python-furl")
5870 (version "2.1.4")
5871 (source
5872 (origin
5873 (method url-fetch)
5874 (uri (pypi-uri "furl" version))
5875 (sha256
5876 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
5877 (build-system pyproject-build-system)
5878 (arguments
5879 (list #:test-flags
5880 #~(list "-k" (string-append "not test_hosts"
5881 " and not test_netloc"
5882 " and not test_odd_urls"))))
5883 (propagated-inputs
5884 (list python-orderedmultidict python-six))
5885 (native-inputs
5886 (list python-pytest python-setuptools python-wheel))
5887 (home-page "https://github.com/gruns/furl")
5888 (synopsis "URL manipulation in Python")
5889 (description "Furl provides an easy-to-use alternative to the
5890@code{urllib} and @code{urlparse} modules for manipulating URLs.")
5891 (license license:unlicense)))
5892
5893(define-public python-httplib2
5894 (package
5895 (name "python-httplib2")
5896 (version "0.31.2")
5897 (source
5898 (origin
5899 (method git-fetch)
5900 (uri (git-reference
5901 (url "https://github.com/httplib2/httplib2")
5902 (commit (string-append "v" version))))
5903 (file-name (git-file-name name version))
5904 (sha256
5905 (base32
5906 "0wdnf4rhw9ar8b15lzvif11ibnnpqkfif3alkhkfywy3ikk8nrxb"))))
5907 (build-system pyproject-build-system)
5908 (arguments
5909 (list
5910 #:phases
5911 #~(modify-phases %standard-phases
5912 (add-after 'unpack 'adjust-test-requirements
5913 (lambda _
5914 (substitute* "requirements-test.txt"
5915 (("==") ">=")))))))
5916 (propagated-inputs
5917 (list python-pyparsing
5918 python-pysocks))
5919 (native-inputs
5920 (list python-cryptography
5921 python-mock
5922 python-pytest
5923 python-pytest-randomly
5924 python-pytest-timeout
5925 python-setuptools))
5926 (home-page "https://github.com/httplib2/httplib2")
5927 (synopsis "Comprehensive HTTP client library")
5928 (description
5929 "A comprehensive HTTP client library supporting many features left out of
5930other HTTP libraries.")
5931 (license license:expat)))
5932
5933(define-public python-parfive
5934 (package
5935 (name "python-parfive")
5936 (version "2.3.1")
5937 (source
5938 (origin
5939 (method git-fetch)
5940 (uri (git-reference
5941 (url "https://github.com/Cadair/parfive")
5942 (commit (string-append "v" version))))
5943 (file-name (git-file-name name version))
5944 (sha256
5945 (base32 "09kkh7kp9qy8m26zk6p7zc84yrc81pjgsi594kaa1v1n83mprl4b"))))
5946 (build-system pyproject-build-system)
5947 (arguments
5948 (list
5949 #:test-flags
5950 ;; Disable tests requiring network access.
5951 #~(list "-k" (string-join
5952 (list "not test_ftp"
5953 "test_ftp_http"
5954 "test_ftp_pasv_command"
5955 "test_problematic_http_urls")
5956 " and not "))))
5957 (native-inputs
5958 (list python-aiofiles
5959 python-pytest
5960 python-pytest-asyncio
5961 python-pytest-localserver
5962 python-pytest-socket
5963 python-setuptools
5964 python-setuptools-scm))
5965 (propagated-inputs
5966 (list python-aiohttp
5967 python-tqdm
5968 ;; [optional]
5969 python-aioftp))
5970 (home-page "https://parfive.readthedocs.io/")
5971 (synopsis "HTTP and FTP parallel file downloader")
5972 (description
5973 "This package provides CLI tool and Python library @code{parallel} file
5974downloader using asyncio. parfive can handle downloading multiple files in
5975parallel as well as downloading each file in a number of chunks.
5976
5977asciicast demo of parfive parfive works by creating a downloader object,
5978appending files to it and then running the download. parfive has a synchronous
5979API, but uses asyncio to parallelise downloading the files.")
5980 (license license:expat)))
5981
5982(define-public python-html2text
5983 (package
5984 (name "python-html2text")
5985 (version "2020.1.16")
5986 (source
5987 (origin
5988 (method url-fetch)
5989 (uri (pypi-uri "html2text" version))
5990 (sha256
5991 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
5992 (build-system pyproject-build-system)
5993 (native-inputs (list python-pytest python-setuptools python-wheel))
5994 (home-page "https://github.com/Alir3z4/html2text")
5995 (synopsis "Convert HTML into plain text")
5996 (description
5997 "html2text takes HTML and converts it into plain ASCII text
5998which is also valid markdown. html2text was originally written by Aaron
5999Swartz.")
6000 (license license:gpl3+)))
6001
6002(define-public python-jose
6003 (package
6004 (name "python-jose")
6005 (version "3.5.0")
6006 (home-page "https://github.com/mpdavis/python-jose")
6007 (source (origin
6008 (method git-fetch)
6009 (uri (git-reference (url home-page) (commit version)))
6010 (file-name (git-file-name name version))
6011 (sha256
6012 (base32
6013 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
6014 (build-system pyproject-build-system)
6015 (native-inputs
6016 (list python-pyasn1 python-pytest python-setuptools))
6017 (propagated-inputs
6018 (list python-cryptography python-ecdsa python-rsa))
6019 (synopsis "JOSE implementation in Python")
6020 (description
6021 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
6022- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
6023JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
6024content using a variety of algorithms.")
6025 (license license:expat)))
6026
6027(define-public python-joserfc
6028 (package
6029 (name "python-joserfc")
6030 (version "1.5.0")
6031 (source
6032 (origin
6033 (method url-fetch)
6034 (uri (pypi-uri "joserfc" version))
6035 (sha256
6036 (base32 "0mhwx7znnhhvxfd6l1imwga2lid8vpb5v8b10lvivv08rxbxg22f"))))
6037 (build-system pyproject-build-system)
6038 (propagated-inputs (list python-cryptography))
6039 (native-inputs
6040 (list python-pycryptodome python-pytest python-setuptools))
6041 (home-page "https://github.com/authlib/joserfc")
6042 (synopsis "Python library for JOSE RFCs")
6043 (description
6044 "This package provides a Python library for JOSE RFCs, including JWS,
6045JWE, JWK, JWA, and JWT.")
6046 (license license:bsd-3)))
6047
6048(define-public python-jwcrypto
6049 (package
6050 (name "python-jwcrypto")
6051 (version "1.5.6")
6052 (source
6053 (origin
6054 (method url-fetch)
6055 (uri (pypi-uri "jwcrypto" version))
6056 (sha256
6057 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
6058 (build-system pyproject-build-system)
6059 (native-inputs
6060 (list python-pytest
6061 python-setuptools))
6062 (propagated-inputs
6063 (list python-cryptography
6064 python-typing-extensions))
6065 (home-page "https://github.com/latchset/jwcrypto")
6066 (synopsis "Implementation of JOSE Web standards")
6067 (description
6068 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
6069Encryption} (JOSE) Web Standards.")
6070 (license license:lgpl3+)))
6071
6072(define-public python-pypitoken
6073 (package
6074 (name "python-pypitoken")
6075 (version "7.0.1")
6076 (source
6077 (origin
6078 (method url-fetch)
6079 (uri (pypi-uri "pypitoken" version))
6080 (sha256
6081 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
6082 (build-system pyproject-build-system)
6083 ;; There are no tests.
6084 (arguments (list #:tests? #false))
6085 (propagated-inputs (list python-jsonschema python-pymacaroons
6086 python-typing-extensions))
6087 (native-inputs (list python-poetry-core))
6088 (home-page "https://pypitoken.readthedocs.io/en/latest/")
6089 (synopsis "Manipulate PyPI API tokens")
6090 (description "This package lets you manipulate PyPI API tokens.")
6091 (license license:expat)))
6092
6093(define-public python-jsonpickle
6094 (package
6095 (name "python-jsonpickle")
6096 (version "4.0.0")
6097 (source (origin
6098 (method url-fetch)
6099 (uri (pypi-uri "jsonpickle" version))
6100 (sha256
6101 (base32
6102 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
6103 (build-system pyproject-build-system)
6104 (arguments
6105 (list
6106 #:test-flags '(list "tests")
6107 #:phases
6108 '(modify-phases %standard-phases
6109 (add-before 'check 'pre-check
6110 (lambda* (#:key inputs #:allow-other-keys)
6111 (setenv "TZ" "UTC")
6112 (setenv "TZDIR"
6113 (search-input-directory inputs "share/zoneinfo")))))))
6114 (native-inputs
6115 (list python-bson
6116 python-ecdsa
6117 python-feedparser
6118 python-pymongo
6119 python-pytest
6120 python-pytest-benchmark
6121 python-pytest-enabler
6122 python-setuptools
6123 python-setuptools-scm
6124 python-simplejson
6125 python-sqlalchemy
6126 python-ujson
6127 python-wheel
6128 tzdata-for-tests))
6129 (home-page "https://jsonpickle.github.io/")
6130 (synopsis "Serialize object graphs into JSON")
6131 (description
6132 "This package provides a Python library for serializing any arbitrary
6133object graph to and from JSON.")
6134 (license license:bsd-3)))
6135
6136(define-public python-mcp
6137 (package
6138 (name "python-mcp")
6139 (version "1.25.0")
6140 (source
6141 (origin
6142 (method url-fetch)
6143 (uri (pypi-uri "mcp" version))
6144 (sha256
6145 (base32 "00k87bl4jvnh7hrmicwb2m715fwccvvlanwf8cnlwdphxdhh6can"))))
6146 (build-system pyproject-build-system)
6147 (arguments
6148 (list
6149 ;; XXX: 186 failed, 648 passed, 94 skipped, 54 errors
6150 ;; A lot of tests fail for unclear reasons.
6151 #:tests? #f))
6152 (propagated-inputs
6153 (list python-httpx
6154 python-httpx-sse
6155 python-pydantic
6156 python-sse-starlette))
6157 (native-inputs
6158 (list python-hatchling
6159 python-jsonschema
6160 python-pydantic-settings
6161 python-pytest
6162 python-pytest-examples
6163 python-pytest-xdist
6164 python-starlette
6165 python-typer
6166 python-typing-inspection
6167 python-uvicorn))
6168 (home-page "https://modelcontextprotocol.io")
6169 (synopsis "Model Context Protocol SDK")
6170 (description
6171 "This package provides a Python Software Development Kit for the Model
6172Context Protocol (MCP).")
6173 (license license:expat)))
6174
6175(define-public python-mechanicalsoup
6176 (package
6177 (name "python-mechanicalsoup")
6178 (version "1.4.0")
6179 (source
6180 (origin
6181 (method url-fetch)
6182 (uri (pypi-uri "mechanicalsoup" version))
6183 (sha256
6184 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
6185 (build-system pyproject-build-system)
6186 (arguments
6187 (list
6188 #:test-flags
6189 ;; Unclear why test fails.
6190 #~(list "-k" "not test_select_form_associated_elements")
6191 ;; The following dependencies are not directly required, the developer
6192 ;; only pinned versions because of vulnerabilities. They also break
6193 ;; sanity-check because it checks for a python-certifi version which is
6194 ;; more recent than the one available in Guix.
6195 #:phases #~(modify-phases %standard-phases
6196 (add-after 'unpack 'relax-dependencies
6197 (lambda _
6198 (substitute* "requirements.txt"
6199 (("certifi.*") "")
6200 (("urllib3.*") "")))))))
6201 (propagated-inputs
6202 (list python-beautifulsoup4 python-lxml python-requests))
6203 (native-inputs
6204 (list python-pytest
6205 python-pytest-flake8
6206 python-pytest-httpbin
6207 python-pytest-mock
6208 python-requests-mock
6209 python-setuptools
6210 python-wheel))
6211 (home-page "https://mechanicalsoup.readthedocs.io/")
6212 (synopsis "Python library for automating website interaction")
6213 (description
6214 "MechanicalSoup is a Python library for automating interaction with
6215websites. It automatically stores and sends cookies, follows redirects, and can
6216follow links and submit forms. It doesn’t do JavaScript.")
6217 (license license:expat)))
6218
6219(define-public python-hypercorn
6220 (package
6221 (name "python-hypercorn")
6222 (version "0.18.0")
6223 (source
6224 (origin
6225 (method git-fetch)
6226 (uri (git-reference
6227 (url "https://github.com/pgjones/hypercorn")
6228 (commit version)))
6229 (file-name (git-file-name name version))
6230 (sha256
6231 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
6232 (build-system pyproject-build-system)
6233 (propagated-inputs
6234 (list python-aioquic
6235 python-h11
6236 python-h2
6237 python-priority
6238 python-pydata-sphinx-theme
6239 python-sphinxcontrib-mermaid
6240 python-tomli
6241 python-trio
6242 python-typing-extensions
6243 python-uvloop
6244 python-wsproto))
6245 (native-inputs
6246 (list nss-certs-for-test
6247 python-httpx
6248 python-pdm-backend
6249 python-pytest
6250 python-pytest-asyncio
6251 python-pytest-cov
6252 python-pytest-trio))
6253 (home-page "https://github.com/pgjones/hypercorn")
6254 (synopsis "ASGI Server based on Hyper libraries")
6255 (description
6256 "This package provides an ASGI (Asynchronous Server Gateway Interface)
6257Server based on Hyper libraries and inspired by @code{python-gunicorn}.")
6258 (license license:expat)))
6259
6260(define-public python-hyperframe
6261 (package
6262 (name "python-hyperframe")
6263 (version "6.1.0")
6264 (source
6265 (origin
6266 (method url-fetch)
6267 (uri (pypi-uri "hyperframe" version))
6268 (sha256
6269 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
6270 (build-system pyproject-build-system)
6271 (native-inputs
6272 (list python-pytest python-setuptools))
6273 (home-page "https://github.com/python-hyper/hyperframe")
6274 (synopsis "HTTP/2 framing layer for Python")
6275 (description
6276 "This library contains the HTTP/2 framing code used in the hyper project.
6277It provides a pure-Python codebase that is capable of decoding a binary stream
6278into HTTP/2 frames.")
6279 (license license:expat)))
6280
6281(define-public python-hpack
6282 (package
6283 (name "python-hpack")
6284 (version "4.1.0")
6285 (source
6286 (origin
6287 ;; PyPI tarball is missing some files necessary for the tests.
6288 (method git-fetch)
6289 (uri (git-reference
6290 (url "https://github.com/python-hyper/hpack")
6291 (commit (string-append "v" version))))
6292 (file-name (git-file-name name version))
6293 (sha256
6294 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
6295 (build-system pyproject-build-system)
6296 (native-inputs
6297 (list python-pytest python-setuptools))
6298 (home-page "https://hyper.rtfd.org")
6299 (synopsis "Pure-Python HPACK header compression")
6300 (description
6301 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
6302for use in Python programs that implement HTTP/2.")
6303 (license license:expat)))
6304
6305(define-public python-h11
6306 (package
6307 (name "python-h11")
6308 (version "0.16.0")
6309 (source
6310 (origin
6311 (method url-fetch)
6312 (uri (pypi-uri "h11" version))
6313 (sha256
6314 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
6315 (build-system pyproject-build-system)
6316 (native-inputs
6317 (list python-pytest python-setuptools))
6318 (home-page "https://github.com/python-hyper/h11")
6319 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
6320 (description
6321 "This is a little HTTP/1.1 library written from scratch in Python, heavily
6322inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
6323code whatsoever. This means you can hook h11 up to your favorite network API,
6324and that could be anything you want.")
6325 (license license:expat)))
6326
6327(define-public python-h2
6328 (package
6329 (name "python-h2")
6330 (version "4.3.0")
6331 (source
6332 (origin
6333 (method git-fetch)
6334 (uri (git-reference
6335 (url "https://github.com/python-hyper/h2")
6336 (commit (string-append "v" version))))
6337 (file-name (git-file-name name version))
6338 (sha256
6339 (base32 "00rf0ii4xgdczx5xmv1k6b65q1axvxizbnl20d5vpr512zdix36k"))))
6340 (build-system pyproject-build-system)
6341 (arguments
6342 (list
6343 ;; tests: 1594 passed, 5 deselected
6344 ;; AssertionError: assert '<RemoteSettingsChanged
6345 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
6346 ;; new_value=32768)}>' == '<RemoteSettingsChanged
6347 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
6348 ;; original_value=65536, new_value=32768)}>'
6349 #:test-flags
6350 #~(list "-k"
6351 (string-join
6352 (list "not test_remotesettingschanged_repr"
6353 ;; This test exceededs the Hypothesis deadline.
6354 #$@(if (target-riscv64?)
6355 #~("test_changing_max_frame_size")
6356 #~())
6357 "test_streamreset_repr"
6358 "test_settingsacknowledged_repr"
6359 "test_connectionterminated_repr[None-None]"
6360 "test_connectionterminated_repr[some"
6361 "test_remotesettingschanged_repr"
6362 "test_streamreset_repr"
6363 "test_settingsacknowledged_repr"
6364 "test_connectionterminated_repr[None-None]"
6365 "test_connectionterminated_repr[some")
6366 " and not "))))
6367 (native-inputs
6368 (list python-pytest
6369 python-setuptools))
6370 (propagated-inputs
6371 (list python-hpack
6372 python-hyperframe))
6373 (home-page "https://github.com/python-hyper/h2")
6374 (synopsis "HTTP/2 State-Machine based protocol implementation")
6375 (description
6376 "This module contains a pure-Python implementation of a HTTP/2 protocol
6377stack. It does not provide a parsing layer, a network layer, or any rules
6378about concurrency. Instead, it's a purely in-memory solution, defined in
6379terms of data actions and HTTP/2 frames. This is one building block of a full
6380Python HTTP implementation.")
6381 (license license:expat)))
6382
6383(define-public python-slixmpp
6384 (package
6385 (name "python-slixmpp")
6386 (version "1.17.0")
6387 (source
6388 (origin
6389 (method git-fetch)
6390 (uri (git-reference
6391 (url "https://codeberg.org/poezio/slixmpp")
6392 (commit (string-append "slix-" version))))
6393 (file-name (git-file-name name version))
6394 (sha256
6395 (base32 "0ml590qs3siajz00f40pdxcz27d41i25ld30819qrf0n9ilqlc6n"))))
6396 (build-system pyproject-build-system)
6397 (arguments
6398 (list
6399 ;; Use the upstream runner: it collects only tests/, skips itests/
6400 ;; which need a live XMPP server, and additionally runs the doctests.
6401 #:test-backend #~'custom
6402 #:test-flags #~'("run_tests.py")
6403 #:phases
6404 #~(modify-phases %standard-phases
6405 (add-after 'unpack 'disable-rust-extension
6406 ;; Upstream marks the Rust JID implementation as optional; skip
6407 ;; it and use the pure Python one in slixmpp/jid.py to avoid
6408 ;; pulling in the Cargo dependency tree.
6409 (lambda _
6410 (substitute* "pyproject.toml"
6411 (("\"setuptools-rust\", ") "")
6412 (("\\[\\[tool\\.setuptools-rust\\.ext-modules\\]\\]")
6413 "[tool.slixmpp-rust-disabled]"))))
6414 (add-before 'build 'set-version
6415 ;; setuptools-scm cannot determine the version without .git.
6416 (lambda _
6417 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
6418 (native-inputs
6419 (list gnupg ; 'gnupg' is required by the XEP-0027 tests.
6420 python-setuptools
6421 python-setuptools-scm))
6422 (propagated-inputs
6423 (list python-aiodns
6424 python-aiohttp
6425 python-cryptography
6426 python-defusedxml
6427 python-emoji
6428 python-pyasn1
6429 python-pyasn1-modules))
6430 (home-page "https://codeberg.org/poezio/slixmpp")
6431 (synopsis "XMPP library without threads")
6432 (description
6433 "Slixmpp is a XMPP library for Python 3.11+. It is a fork of SleekXMPP.
6434Its goal is to only rewrite the core of the library (the low level socket
6435handling, the timers, the events dispatching) in order to remove all
6436threads.")
6437 (license license:expat)))
6438
6439(define-public python-sockjs-tornado
6440 (package
6441 (name "python-sockjs-tornado")
6442 (version "1.0.6")
6443 (source
6444 (origin
6445 (method git-fetch)
6446 (uri (git-reference
6447 (url "https://github.com/mrjoes/sockjs-tornado/")
6448 (commit (string-append "v" version))))
6449 (file-name (git-file-name name version))
6450 (sha256
6451 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
6452 (build-system pyproject-build-system)
6453 (arguments
6454 (list
6455 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
6456 (native-inputs (list python-setuptools))
6457 (propagated-inputs (list python-tornado))
6458 (home-page "https://github.com/mrjoes/sockjs-tornado/")
6459 (synopsis
6460 "SockJS Python server implementation on top of the Tornado framework")
6461 (description
6462 "SockJS-tornado provides the server-side counterpart to a SockJS client
6463library, through the Tornado framework.
6464
6465SockJS provides a low-latency, full-duplex, cross-domain communication channel
6466between a web browser and web server.")
6467 (license license:expat)))
6468
6469(define-public python-flask-assets
6470 ;; The latest release still depends on the abandoned flask-script, whereas
6471 ;; at this later commit (already 2 years old at the time of this writing)
6472 ;; the dependency has been lifted.
6473 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
6474 (revision "1"))
6475 (package
6476 (name "python-flask-assets")
6477 (version (git-version "2.1.0" revision commit))
6478 (source
6479 (origin
6480 (method git-fetch)
6481 (uri (git-reference
6482 (url "https://github.com/miracle2k/flask-assets/")
6483 (commit commit)))
6484 (file-name (git-file-name name version))
6485 (sha256
6486 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
6487 (build-system pyproject-build-system)
6488 (propagated-inputs
6489 (list python-flask python-webassets))
6490 (native-inputs
6491 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
6492 (home-page "https://github.com/miracle2k/flask-assets")
6493 (synopsis "Asset management for Flask")
6494 (description "This package integrates @code{webassets} with Flask, adding
6495support for merging, minifying and compiling CSS and Javascript files.")
6496 (license license:bsd-2))))
6497
6498(define-public python-flask-babel
6499 (package
6500 (name "python-flask-babel")
6501 (version "4.0.0")
6502 (source
6503 (origin
6504 (method git-fetch) ;no tests in pypi release
6505 (uri (git-reference
6506 (url "https://github.com/python-babel/flask-babel")
6507 (commit (string-append "v" version))))
6508 (sha256
6509 (base32
6510 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
6511 (build-system pyproject-build-system)
6512 (native-inputs
6513 (list python-poetry-core
6514 python-pytest
6515 python-pytest-mock))
6516 (propagated-inputs
6517 (list python-babel
6518 python-flask
6519 python-jinja2
6520 python-pytz))
6521 (home-page "https://github.com/python-babel/flask-babel")
6522 (synopsis "Add i18n/l10n support to Flask applications")
6523 (description "This package implements internationalization and localization
6524support for Flask. This is based on the Python babel module as well as pytz -
6525both of which are installed automatically if you install this library.")
6526 (license license:bsd-3)))
6527
6528(define-public python-flask-cors
6529 (package
6530 (name "python-flask-cors")
6531 (version "6.0.2")
6532 (source
6533 (origin
6534 (method git-fetch) ;no tests in PyPI archive
6535 (uri (git-reference
6536 (url "https://github.com/CoryDolphin/flask-cors")
6537 (commit version)))
6538 (file-name (git-file-name name version))
6539 (sha256
6540 (base32 "02y740h951dscgkm7ghsss1bc0m8ymsfdpsimm1j0nkl0zjl6sgm"))))
6541 (build-system pyproject-build-system)
6542 (arguments
6543 (list
6544 #:phases
6545 #~(modify-phases %standard-phases
6546 (add-after 'unpack 'fix-version
6547 (lambda _
6548 ;; Otherwise sanity-check of dependents will fail.
6549 (substitute* "pyproject.toml"
6550 (("version = \"0\\.0\\.1\"" all)
6551 (string-append "version = \"" #$version "\""))))))))
6552 (native-inputs
6553 (list python-pytest
6554 python-setuptools))
6555 (propagated-inputs
6556 (list python-flask
6557 python-werkzeug))
6558 (home-page "https://flask-cors.readthedocs.io/en/latest/")
6559 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
6560 (description
6561 "This package provides a Flask extension for handling @acronym{CORS,Cross
6562Origin Resource Sharing}, making cross-origin AJAX possible.")
6563 (license license:expat)))
6564
6565(define-public python-flask-markdown
6566 (package
6567 (name "python-flask-markdown")
6568 (version "0.3")
6569 (source
6570 (origin
6571 (method git-fetch)
6572 (uri (git-reference
6573 (url "https://github.com/dcolish/flask-markdown")
6574 (commit version)))
6575 (file-name (git-file-name name version))
6576 (sha256
6577 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
6578 (build-system pyproject-build-system)
6579 (arguments
6580 (list
6581 #:tests? #f ;Tests seem to be incompatible with latest python
6582 #:phases
6583 #~(modify-phases %standard-phases
6584 (add-after 'unpack 'set-version
6585 (lambda _
6586 (substitute* "setup.py"
6587 (("dev")
6588 #$version)))))))
6589 (propagated-inputs (list python-markdown python-flask))
6590 (native-inputs (list python-pynose python-setuptools))
6591 (home-page "https://github.com/dcolish/flask-markdown")
6592 (synopsis "Small extension to help with using Markdown in Flask")
6593 (description
6594 "Flask-Markdown supports several extensions for Markdown and integrates
6595into Jinja2 by default.")
6596 (license license:bsd-3)))
6597
6598(define-public python-flask-session
6599 (package
6600 (name "python-flask-session")
6601 (version "0.8.0")
6602 (source
6603 (origin
6604 (method url-fetch)
6605 (uri (pypi-uri "flask_session" version))
6606 (sha256
6607 (base32
6608 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
6609 (build-system pyproject-build-system)
6610 (arguments
6611 '(#:tests? #f)) ; Tests require the various storage backends to be present
6612 (native-inputs (list python-flit-core))
6613 (propagated-inputs
6614 (list python-cachelib python-flask python-msgspec))
6615 (home-page "https://github.com/pallets-eco/flask-session")
6616 (synopsis "Adds server-side session support to your Flask application")
6617 (description
6618 "Flask-Session is an extension for Flask that adds support for
6619Server-side sessions, with a variety of different backends for session
6620storage.")
6621 (license license:bsd-3)))
6622
6623(define-public python-html5lib
6624 (package
6625 (name "python-html5lib")
6626 (version "1.1")
6627 (source
6628 (origin
6629 (method url-fetch)
6630 (uri (pypi-uri "html5lib" version))
6631 (sha256
6632 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
6633 (build-system pyproject-build-system)
6634 (arguments
6635 '(#:tests? #f)) ;tests depend on dated pytest-expect
6636 (native-inputs
6637 (list python-setuptools))
6638 (propagated-inputs
6639 (list python-six
6640 python-webencodings
6641 ;; Required by Calibre 5.
6642 python-chardet))
6643 (home-page "https://github.com/html5lib/html5lib-python")
6644 (synopsis "Python HTML parser based on the WHATWG HTML specification")
6645 (description
6646 "Html5lib is an HTML parser based on the WHATWG HTML specification
6647and written in Python.")
6648 (license license:expat)))
6649
6650(define-public python-html5-parser
6651 (package
6652 (name "python-html5-parser")
6653 (version "0.4.12")
6654 (source
6655 (origin
6656 (method git-fetch)
6657 (uri (git-reference
6658 (url "https://github.com/kovidgoyal/html5-parser")
6659 (commit (string-append "v" version))))
6660 (file-name (git-file-name name version))
6661 (sha256
6662 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
6663 (build-system pyproject-build-system)
6664 (arguments
6665 (list
6666 #:phases
6667 #~(modify-phases %standard-phases
6668 (add-before 'build 'set-configure-flags
6669 (lambda _
6670 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
6671 (native-inputs (list pkg-config python-setuptools))
6672 (inputs (list libxml2))
6673 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
6674 (home-page "https://html5-parser.readthedocs.io")
6675 (synopsis "Fast C-based HTML5 parsing for Python")
6676 (description
6677 "This package provides a fast implementation of the HTML5 parsing spec
6678for Python. Parsing is done in C using a variant of the gumbo parser. The
6679gumbo parse tree is then transformed into an lxml tree, also in C, yielding
6680parse times that can be a thirtieth of the html5lib parse times.")
6681 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
6682 ;; indicate ASL2.0, including the LICENSE file for the whole project.
6683 (license (list license:asl2.0 license:gpl3))))
6684
6685(define-public python-html5tagger
6686 (package
6687 (name "python-html5tagger")
6688 (version "2.0.0")
6689 (source (origin
6690 (method url-fetch)
6691 (uri (pypi-uri "html5tagger" version))
6692 (sha256
6693 (base32
6694 "090nmjhr0yj3x5iy9zmbmv07dpxn234dqpi2lglk0fa4aj83rvhd"))))
6695 (build-system pyproject-build-system)
6696 (arguments
6697 (list #:tests? #f)) ;no tests in PyPI or Git
6698 (native-inputs
6699 (list python-hatch-vcs python-hatchling))
6700 (home-page "https://github.com/sanic-org/html5tagger")
6701 (synopsis "Create HTML documents from Python")
6702 (description
6703 "@code{html5tagger} provides a simplified HTML5 syntax that can
6704be written directly in Python without templates.")
6705 (license license:unlicense)))
6706
6707(define-public python-minio
6708 (package
6709 (name "python-minio")
6710 (version "7.1.9")
6711 (source
6712 (origin
6713 (method git-fetch)
6714 (uri (git-reference
6715 (url "https://github.com/minio/minio-py")
6716 (commit version)))
6717 (file-name (git-file-name name version))
6718 (sha256
6719 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
6720 (build-system pyproject-build-system)
6721 (arguments
6722 (list
6723 #:test-flags
6724 ;; XXX: requires network access.
6725 #~(list "--ignore=tests/unit/credentials_test.py")))
6726 (native-inputs (list python-pytest python-setuptools))
6727 (propagated-inputs
6728 (list python-certifi python-dateutil python-pytz python-urllib3))
6729 (home-page "https://github.com/minio/minio-py")
6730 (synopsis "Programmatically access Amazon S3 from Python")
6731 (description
6732 "This package provides a Python library for interacting with any
6733Amazon S3 compatible object storage server.")
6734 (license license:asl2.0)))
6735
6736(define-public python-pycrdt
6737 (package
6738 (name "python-pycrdt")
6739 (version "0.13.0")
6740 (source
6741 (origin
6742 (method git-fetch)
6743 (uri (git-reference
6744 (url "https://github.com/y-crdt/pycrdt")
6745 (commit version)))
6746 (file-name (git-file-name name version))
6747 (sha256
6748 (base32 "18mnjbxdlra1w3jl42bf1jb25z9j3inh6s61qighqrvnylgxvxc1"))))
6749 (build-system pyproject-build-system)
6750 (arguments
6751 (list
6752 #:imported-modules `(,@%cargo-build-system-modules
6753 ,@%pyproject-build-system-modules)
6754 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
6755 (guix build pyproject-build-system)
6756 (guix build utils))
6757 #:test-flags #~(list "--ignore=tests/test_types.py")
6758 #:phases
6759 #~(modify-phases %standard-phases
6760 (add-after 'unpack 'relax-requirements
6761 (lambda _
6762 (substitute* "pyproject.toml"
6763 (("requires = \\[\"maturin>=.*\"\\]")
6764 "requires = [\"maturin\"]"))))
6765 (add-after 'unpack 'prepare-cargo-build-system
6766 (lambda args
6767 (for-each
6768 (lambda (phase)
6769 (format #t "Running cargo phase: ~a~%" phase)
6770 (apply (assoc-ref cargo:%standard-phases phase)
6771 #:cargo-target #$(cargo-triplet)
6772 args))
6773 '(unpack-rust-crates
6774 configure
6775 check-for-pregenerated-files
6776 patch-cargo-checksums)))))))
6777 (propagated-inputs
6778 (list python-anyio
6779 python-typing-extensions))
6780 (inputs (cargo-inputs 'pycrdt))
6781 (native-inputs
6782 (append
6783 (list maturin
6784 python-pydantic
6785 python-pytest
6786 rust
6787 `(,rust "cargo"))
6788 (or (and=> (%current-target-system)
6789 (compose list make-rust-sysroot))
6790 '())))
6791 (home-page "https://github.com/y-crdt/pycrdt")
6792 (synopsis "Python CRDTs library ported from Yjs framework")
6793 (description
6794 "Conflict-free Replicated Data Types (CRDTs) allow creating shared
6795documents that can automatically merge changes made concurrently on different
6796copies of the data. When the data lives on different machines, they make it
6797possible to build distributed systems that work with local data, leaving the
6798synchronization and conflict resolution with remote data to the CRDT
6799algorithm, which ensures that all data replicas eventually converge to the
6800same state.
6801
6802This is a Python CRDT library that provides bindings for Yrs, the Rust port of
6803the Yjs framework.")
6804 (license license:expat)))
6805
6806(define-public python-pycrdt-store
6807 (package
6808 (name "python-pycrdt-store")
6809 (version "0.1.3")
6810 (source
6811 (origin
6812 (method git-fetch)
6813 (uri (git-reference
6814 (url "https://github.com/y-crdt/pycrdt-store")
6815 (commit version)))
6816 (file-name (git-file-name name version))
6817 (sha256
6818 (base32 "18yvv5lgxb4v0qlbi8bbkcm1666nxbkmhbx445sxpzab7027fl1a"))))
6819 (build-system pyproject-build-system)
6820 (propagated-inputs
6821 (list python-anyio
6822 python-pycrdt
6823 python-sqlite-anyio))
6824 (native-inputs
6825 (list python-hatchling
6826 python-pytest
6827 python-pytest-rerunfailures
6828 python-trio))
6829 (home-page "https://github.com/y-crdt/pycrdt-store")
6830 (synopsis "Persistent storage for pycrdt")
6831 (description
6832 "This package provides a persistent storage feature for
6833@code{python-pycrdt}.")
6834 (license license:expat)))
6835
6836(define-public python-pycrdt-websocket
6837 (package
6838 (name "python-pycrdt-websocket")
6839 (version "0.16.0")
6840 (source
6841 (origin
6842 (method git-fetch)
6843 (uri (git-reference
6844 (url "https://github.com/y-crdt/pycrdt-websocket")
6845 (commit version)))
6846 (file-name (git-file-name name version))
6847 (sha256
6848 (base32 "1bcxivdra0v5fwlz3hcz98vxi61884bfvcwifsdp3mji28iprv22"))))
6849 (build-system pyproject-build-system)
6850 (arguments
6851 (list
6852 ;; These tests require the unpackaged Yjs.
6853 #:test-flags #~(list "--deselect=tests/test_pycrdt_yjs.py")))
6854 (propagated-inputs
6855 (list python-anyio
6856 python-pycrdt
6857 python-pycrdt-store))
6858 (native-inputs
6859 (list nss-certs-for-test
6860 python-hatchling
6861 python-hypercorn
6862 python-httpx-ws
6863 python-pytest))
6864 (home-page "https://github.com/y-crdt/pycrdt-websocket")
6865 (synopsis "WebSocket connector for pycrdt")
6866 (description "This package provides an asynchronous @code{WebSocket}
6867connector for @code{python-pycrdt}.")
6868 (license license:expat)))
6869
6870(define-public python-pycurl
6871 (package
6872 (name "python-pycurl")
6873 (version "7.45.7")
6874 (source
6875 (origin
6876 (method git-fetch)
6877 (uri (git-reference
6878 (url "https://github.com/pycurl/pycurl")
6879 (commit (string-append
6880 "REL_" (string-replace-substring version "." "_")))))
6881 (file-name (git-file-name name version))
6882 (sha256
6883 (base32 "1gkbv3cvrwd7z3vgqlvcf0wpvm3g6dia8xbx3g4bplnb2cascfiq"))))
6884 (build-system pyproject-build-system)
6885 (arguments
6886 '(#:test-flags
6887 ;; The test suite is not thread safe:
6888 ;; - some tests want to use the same port: address already in use
6889 ;; - some tests use signal.Signal, i.e. main-thread only
6890 (list "-k" (string-append
6891 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
6892 ;; open shared object file: No such file or directory
6893 "not test_libcurl_ssl_gnutls"
6894 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
6895 ;; open shared object file: No such file or directory
6896 " and not test_libcurl_ssl_nss"
6897 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
6898 ;; open shared object file: No such file or directory
6899 " and not test_libcurl_ssl_openssl"
6900 ;; "A requested feature, protocol or option was not
6901 ;; found built-in in this libcurl due to a build-time
6902 ;; decision."
6903 " and not test_issuercert_blob"
6904 " and not test_krb4level"
6905 " and not test_krblevel"))
6906 #:phases (modify-phases %standard-phases
6907 (add-before 'build 'configure-tls-backend
6908 (lambda _
6909 ;; XXX: PycURL fails to automatically determine which
6910 ;; TLS backend to use when cURL is built with
6911 ;; --disable-static. See setup.py and
6912 ;; <https://github.com/pycurl/pycurl/pull/147>.
6913 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
6914 (native-inputs
6915 (list python-bottle
6916 python-flaky
6917 python-flask
6918 python-pytest
6919 python-setuptools
6920 python-wheel))
6921 (inputs
6922 (list curl gnutls))
6923 (home-page "http://pycurl.io/")
6924 (synopsis "Lightweight Python wrapper around libcurl")
6925 (description "Pycurl is a lightweight wrapper around libcurl. It provides
6926high-speed transfers via libcurl and frequently outperforms alternatives.")
6927
6928 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
6929 ;; under the terms of LGPLv2.1+ or Expat.
6930 (license (list license:lgpl2.1+ license:expat))))
6931
6932(define-public python-stamina
6933 (package
6934 (name "python-stamina")
6935 (version "25.2.0")
6936 (source
6937 (origin
6938 (method git-fetch)
6939 (uri (git-reference
6940 (url "https://github.com/hynek/stamina")
6941 (commit version)))
6942 (file-name (git-file-name name version))
6943 (sha256
6944 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
6945 (build-system pyproject-build-system)
6946 (native-inputs
6947 (list python-pytest
6948 python-anyio
6949 python-dirty-equals
6950 python-hatch-fancy-pypi-readme
6951 python-hatch-vcs
6952 python-hatchling
6953 python-structlog))
6954 (propagated-inputs
6955 (list python-tenacity
6956 python-typing-extensions))
6957 (home-page "https://github.com/hynek/stamina")
6958 (synopsis "Retries library for Python")
6959 (description
6960 "@code{stamina} is an opinionated wrapper around the
6961@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
6962 (license license:expat)))
6963
6964(define-public python-stripe
6965 (package
6966 (name "python-stripe")
6967 (version "13.2.0")
6968 (source
6969 (origin
6970 (method git-fetch)
6971 (uri (git-reference
6972 (url "https://github.com/stripe/stripe-python")
6973 (commit (string-append "v" version))))
6974 (file-name (git-file-name name version))
6975 (sha256
6976 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
6977 (build-system pyproject-build-system)
6978 (arguments
6979 '(#:tests? #f)) ;; tests require network
6980 (native-inputs
6981 (list python-flit-core))
6982 (propagated-inputs
6983 (list python-httpx
6984 python-requests))
6985 (home-page "https://github.com/stripe/stripe-python")
6986 (synopsis "Python bindings for the Stripe financial services' API")
6987 (description "This package provides access to the Stripe financial
6988services' API. It includes a pre-defined set of classes for API resources
6989that initialize themselves dynamically from API responses which makes it
6990compatible with a wide range of versions of the Stripe API.")
6991 (license license:expat)))
6992
6993(define-public python-stripe-12
6994 (hidden-package
6995 (package/inherit python-stripe
6996 (name "python-stripe")
6997 (version "12.5.1")
6998 (source
6999 (origin
7000 (inherit (package-source python-stripe))
7001 (uri (git-reference
7002 (url "https://github.com/stripe/stripe-python")
7003 (commit (string-append "v" version))))
7004 (file-name (git-file-name name version))
7005 (sha256 (base32
7006 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
7007 (native-inputs
7008 (list python-setuptools)))))
7009
7010(define-public python-tldextract
7011 (package
7012 (name "python-tldextract")
7013 (version "5.3.0")
7014 (source
7015 (origin
7016 (method url-fetch)
7017 (uri (pypi-uri "tldextract" version))
7018 (sha256
7019 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
7020 (build-system pyproject-build-system)
7021 (arguments
7022 (list
7023 #:phases
7024 #~(modify-phases %standard-phases
7025 (add-after 'unpack 'relax-requirements
7026 (lambda _
7027 (substitute* "pyproject.toml"
7028 (("\"requests-file.*\",")
7029 "\"requests-file\",")))))))
7030 (native-inputs
7031 (list nss-certs-for-test
7032 python-pytest
7033 python-pytest-mock
7034 python-responses
7035 python-setuptools
7036 python-setuptools-scm
7037 python-syrupy))
7038 (propagated-inputs
7039 (list python-filelock
7040 python-idna
7041 python-requests
7042 python-requests-file))
7043 (home-page "https://github.com/john-kurkowski/tldextract")
7044 (synopsis
7045 "Separate the TLD from the registered domain and subdomains of a URL")
7046 (description
7047 "TLDExtract accurately separates the TLD from the registered domain and
7048subdomains of a URL, using the Public Suffix List. By default, this includes
7049the public ICANN TLDs and their exceptions. It can optionally support the
7050Public Suffix List's private domains as well.")
7051 (license license:bsd-3)))
7052
7053(define-public python-tracerite
7054 (package
7055 (name "python-tracerite")
7056 (version "2.5.2")
7057 (source
7058 (origin
7059 (method url-fetch)
7060 (uri (pypi-uri "tracerite" version))
7061 (sha256
7062 (base32 "087i51ybbj62nx5jzx8znhqb6cd7279mi7v9j6lrxf8lhb81nr3r"))))
7063 (build-system pyproject-build-system)
7064 (arguments
7065 (list #:tests? #f)) ;no tests in PyPI or Git
7066 (native-inputs
7067 (list python-hatch-vcs python-hatchling))
7068 (propagated-inputs
7069 (list python-html5tagger))
7070 (home-page "https://github.com/sanic-org/tracerite")
7071 (synopsis "Human-readable HTML tracebacks")
7072 (description
7073 "@code{tracerite} converts Python tracebacks into useful error messages
7074in human-readable HTML format.")
7075 (license license:unlicense)))
7076
7077(define-public python-trio-websocket
7078 (package
7079 (name "python-trio-websocket")
7080 (version "0.12.2")
7081 (source
7082 (origin
7083 (method git-fetch)
7084 (uri (git-reference
7085 (url "https://github.com/HyperionGray/trio-websocket")
7086 (commit version)))
7087 (file-name (git-file-name name version))
7088 (sha256
7089 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
7090 (build-system pyproject-build-system)
7091 (native-inputs
7092 (list python-pytest
7093 python-pytest-trio
7094 python-setuptools
7095 python-trustme))
7096 (propagated-inputs
7097 (list python-outcome
7098 python-trio
7099 python-wsproto))
7100 (home-page "https://github.com/HyperionGray/trio-websocket")
7101 (synopsis "WebSocket library for Trio")
7102 (description "This library implements both server and client aspects of
7103the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
7104striving for safety, correctness, and ergonomics. It is based on the
7105@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
7106@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
7107the majority of the WebSocket protocol, including framing, codecs, and events.
7108This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
7109the Trio framework}.")
7110 (license license:expat)))
7111
7112(define-public python-txacme
7113 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
7114 ;; compatibility with twisted, use the latest commit from trunk branch.
7115 ;;
7116 ;;See: <https://github.com/twisted/txacme/issues/165>.
7117 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
7118 (revision "0"))
7119 (package
7120 (name "python-txacme")
7121 (version (git-version "0.9.3" revision commit))
7122 (source
7123 (origin
7124 (method git-fetch) ;no fresh release in PyPI
7125 (uri (git-reference
7126 (url "https://github.com/twisted/txacme")
7127 (commit commit)))
7128 (file-name (git-file-name name version))
7129 (sha256
7130 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
7131 (build-system pyproject-build-system)
7132 (arguments
7133 (list #:test-backend #~'custom
7134 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
7135 (native-inputs
7136 (list python-setuptools))
7137 (propagated-inputs
7138 (list python-acme
7139 python-attrs
7140 python-eliot
7141 python-josepy
7142 python-pem
7143 python-treq
7144 python-twisted
7145 python-txsni))
7146 (home-page "https://github.com/twisted/txacme")
7147 (synopsis "Twisted implexmentation of the ACME protocol")
7148 (description
7149 "ACME is Automatic Certificate Management Environment, a protocol that
7150allows clients and certificate authorities to automate verification and
7151certificate issuance. The ACME protocol is used by the free Let's Encrypt
7152Certificate Authority.
7153
7154txacme is an implementation of the protocol for Twisted, the event-driven
7155networking engine for Python.")
7156 (license license:expat))))
7157
7158(define-public python-txaio
7159 (package
7160 (name "python-txaio")
7161 (version "25.9.2")
7162 (source
7163 (origin
7164 (method url-fetch)
7165 (uri (pypi-uri "txaio" version))
7166 (sha256
7167 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
7168 (build-system pyproject-build-system)
7169 (native-inputs
7170 (list python-pytest
7171 python-setuptools))
7172 (home-page "https://github.com/crossbario/txaio")
7173 (synopsis "Compatibility layer between Python asyncio and Twisted")
7174 (description
7175 "Txaio provides a compatibility layer between the Python @code{asyncio}
7176 bsmodule and @code{Twisted}.")
7177 (license license:expat)))
7178
7179;; XXX: Potentially abandonware since 2017, consider to remove when nothing
7180;; depends on it or fails to build.
7181(define-public python-txamqp
7182 (package
7183 (name "python-txamqp")
7184 (version "0.8.2")
7185 (source
7186 (origin
7187 (method url-fetch)
7188 (uri (pypi-uri "txAMQP" version))
7189 (sha256
7190 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
7191 (build-system pyproject-build-system)
7192 (arguments
7193 (list #:tests? #f)) ;all tests failed
7194 (native-inputs
7195 (list python-setuptools))
7196 (propagated-inputs
7197 (list python-six python-twisted))
7198 (home-page "https://github.com/txamqp/txamqp")
7199 (synopsis "Communicate with AMQP peers and brokers using Twisted")
7200 (description
7201 "This package provides a Python library for communicating with AMQP peers
7202and brokers using the asynchronous networking framework Twisted. It contains
7203all the necessary code to connect, send and receive messages to/from an
7204AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
7205also includes support for using Thrift RPC over AMQP in Twisted
7206applications.")
7207 (license license:asl2.0)))
7208
7209(define-public python-txsni
7210 (package
7211 (name "python-txsni")
7212 (version "0.2.0")
7213 (source
7214 (origin
7215 (method git-fetch)
7216 (uri (git-reference
7217 (url "https://github.com/glyph/txsni")
7218 (commit (string-append "v" version))))
7219 (file-name (git-file-name name version))
7220 (sha256
7221 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
7222 (build-system pyproject-build-system)
7223 (arguments
7224 (list #:test-backend #~'custom
7225 #:test-flags #~(list "-m" "twisted.trial"
7226 "--temp-directory=/tmp/_trial_temp"
7227 "txsni")))
7228 (native-inputs
7229 (list python-setuptools))
7230 (propagated-inputs
7231 (list python-pyopenssl
7232 python-service-identity
7233 python-twisted))
7234 (home-page "https://github.com/glyph/txsni")
7235 (synopsis "Run TLS servers with Twisted")
7236 (description
7237 "This package provides an easy-to-use SNI endpoint for use with the
7238Twisted web framework.")
7239 (license license:expat)))
7240
7241(define-public python-txtorcon
7242 (package
7243 (name "python-txtorcon")
7244 (version "24.8.0")
7245 (source
7246 (origin
7247 (method url-fetch)
7248 (uri (pypi-uri "txtorcon" version))
7249 (sha256
7250 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
7251 (build-system pyproject-build-system)
7252 (native-inputs
7253 (list python-pytest
7254 python-setuptools
7255 python-wheel))
7256 (inputs
7257 (list lsof))
7258 (propagated-inputs
7259 (list python-automat
7260 python-idna
7261 python-incremental
7262 python-pyopenssl
7263 python-service-identity
7264 python-twisted
7265 python-zope-interface))
7266 (home-page "https://github.com/meejah/txtorcon")
7267 (synopsis "Twisted-based Tor controller client")
7268 (description
7269 "This package provides a Twisted-based Tor controller client,with
7270state-tracking and configuration abstractions.")
7271 (license license:expat)))
7272
7273(define-public python-url-normalize
7274 (package
7275 (name "python-url-normalize")
7276 (version "2.2.1")
7277 (source
7278 (origin
7279 (method git-fetch) ; no tests in PyPI release
7280 (uri (git-reference
7281 (url "https://github.com/niksite/url-normalize")
7282 (commit (string-append "v" version))))
7283 (file-name (git-file-name name version))
7284 (sha256
7285 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
7286 (build-system pyproject-build-system)
7287 (arguments
7288 (list
7289 #:test-flags #~(list "--ignore=tests/test_cli.py")))
7290 (native-inputs
7291 (list python-pytest python-pytest-socket python-setuptools))
7292 (propagated-inputs
7293 (list python-idna))
7294 (home-page "https://github.com/niksite/url-normalize")
7295 (synopsis "URL normalization for Python")
7296 (description
7297 "This package provides a URI Normalization function with following
7298features:
7299@itemize
7300@item take care of IDN domains
7301@item always provide the URI scheme in lowercase characters
7302@item always provide the host, if any, in lowercase characters
7303@item only perform percent-encoding where it is essential
7304@item always use uppercase A-through-F characters when percent-encoding
7305@item prevent dot-segments appearing in non-relative URI paths
7306@item for schemes that define a default authority, use an empty authority if
7307the default is desired
7308@item for schemes that define an empty path to be equivalent to a path of
7309@code{/}, use @code{/}
7310@item for schemes that define a port, use an empty port if the default is
7311desired
7312@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
7313@end itemize")
7314 (license license:expat)))
7315
7316(define-public python-waitress
7317 (package
7318 (name "python-waitress")
7319 (version "3.0.2")
7320 (source
7321 (origin
7322 (method url-fetch)
7323 (uri (pypi-uri "waitress" version))
7324 (sha256
7325 (base32
7326 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
7327 (build-system pyproject-build-system)
7328 (arguments
7329 (list
7330 ;; https://github.com/Pylons/waitress/issues/443
7331 #:test-flags #~(list "-k" "not test_service_port")))
7332 (native-inputs (list python-pytest python-setuptools))
7333 (home-page "https://github.com/Pylons/waitress")
7334 (synopsis "Waitress WSGI server")
7335 (description
7336 "Waitress is meant to be a production-quality pure-Python WSGI server
7337with very acceptable performance.")
7338 (license license:zpl2.1)))
7339
7340(define-public python-weasel
7341 (package
7342 (name "python-weasel")
7343 (version "1.0.0")
7344 (source
7345 (origin
7346 (method git-fetch)
7347 (uri (git-reference
7348 (url "https://github.com/explosion/weasel/")
7349 (commit (string-append "release-v" version))))
7350 (file-name (git-file-name name version))
7351 (sha256
7352 (base32 "1sxcxri9hl9rs1kvdrv81g6mlg7lifhq9xacskracz63v4nyh8na"))))
7353 (build-system pyproject-build-system)
7354 (arguments
7355 (list
7356 #:test-flags
7357 ;; This test raises an error, but not the one expected by pytest.
7358 #~(list (string-append "--deselect=weasel/tests/test_validation.py::"
7359 "test_project_config_interpolation[10_0]")
7360 ;; Network access is required.
7361 #$@(map (lambda (test) (string-append "--deselect="
7362 "weasel/tests/cli/"
7363 test))
7364 (list "test_cli.py::test_project_git_dir_asset"
7365 "test_cli.py::test_project_git_file_asset"
7366 "test_cli_app.py::test_project_assets")))))
7367 (native-inputs
7368 (list python-pytest
7369 python-setuptools))
7370 (propagated-inputs
7371 (list python-cloudpathlib
7372 python-confection
7373 python-httpx
7374 python-packaging
7375 python-pydantic
7376 python-smart-open
7377 python-srsly
7378 python-typer
7379 python-wasabi))
7380 (home-page "https://github.com/explosion/weasel/")
7381 (synopsis "Small and easy workflow system")
7382 (description
7383 "This package provides a minimalistic workflow system to manage and
7384share end-to-end workflows for different use cases and domains.")
7385 (license license:expat)))
7386
7387(define-public python-webencodings
7388 (package
7389 (name "python-webencodings")
7390 (version "0.5.1")
7391 (source
7392 (origin
7393 (method url-fetch)
7394 (uri (pypi-uri "webencodings" version))
7395 (sha256
7396 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
7397 (build-system pyproject-build-system)
7398 (arguments
7399 (list #:test-flags #~(list "webencodings/tests.py")))
7400 (native-inputs
7401 (list python-pytest python-setuptools))
7402 (home-page "https://github.com/SimonSapin/python-webencodings")
7403 (synopsis "Character encoding aliases for legacy web content")
7404 (description
7405 "In order to be compatible with legacy web content when interpreting
7406something like @code{Content-Type: text/html; charset=latin1}, tools need to
7407use a particular set of aliases for encoding labels as well as some overriding
7408rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
7409actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
7410BOM takes precedence over any other encoding declaration. The WHATWG
7411@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
7412details so that implementations do not have to reverse-engineer each other.
7413
7414This module implements the Encoding standard and has encoding labels and BOM
7415detection, but the actual implementation for encoders and decoders is
7416Python’s.")
7417 (license license:bsd-3)))
7418
7419(define-public python-omnipath
7420 (package
7421 (name "python-omnipath")
7422 (version "1.0.10")
7423 (source
7424 (origin
7425 (method git-fetch)
7426 (uri (git-reference
7427 (url "https://github.com/saezlab/omnipath/")
7428 (commit (string-append "v" version))))
7429 (file-name (git-file-name name version))
7430 (sha256
7431 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
7432 (build-system pyproject-build-system)
7433 (arguments
7434 (list
7435 #:test-flags '(list "-k"
7436 (string-append
7437 ;; These require internet access
7438 "not test_download_homologene"
7439 " and not test_complex_genes"
7440 ;; These tests are not compatible with pandas 3
7441 " and not test_no_dtype_conversion"
7442 " and not test_strip_resource_label_no_func"
7443 " and not test_split_unique_join_no_func"
7444 " and not test_auto_dtype"))
7445 #:phases
7446 #~(modify-phases %standard-phases
7447 (add-after 'unpack 'set-home
7448 (lambda _
7449 (setenv "HOME" "/tmp"))))))
7450 (propagated-inputs (list python-attrs
7451 python-docrep
7452 python-inflect
7453 python-networkx
7454 python-packaging
7455 python-pandas
7456 python-requests
7457 python-tqdm
7458 python-typing-extensions
7459 python-urllib3
7460 python-wrapt))
7461 (native-inputs (list nss-certs-for-test
7462 python-bump2version
7463 python-hatchling
7464 python-pytest
7465 python-pytest-mock
7466 python-pytest-socket
7467 python-requests-mock))
7468 (home-page "https://omnipathdb.org/")
7469 (synopsis "Python client for the OmniPath web service")
7470 (description "This package provides a Python client for the OmniPath web
7471service.")
7472 (license license:expat)))
7473
7474(define-public python-openai
7475 (package
7476 (name "python-openai")
7477 (version "2.42.0")
7478 (source
7479 (origin
7480 (method git-fetch)
7481 (uri (git-reference
7482 (url "https://github.com/openai/openai-python")
7483 (commit (string-append "v" version))))
7484 (file-name (git-file-name name version))
7485 (sha256
7486 (base32 "1p0vzy34cx2gfkhsqg2kxzam51cjlpa99q0skzj4426sx2hsw3g6"))))
7487 (build-system pyproject-build-system)
7488 (arguments
7489 (list
7490 #:test-flags
7491 ;; These require internet access and an openai API key.
7492 #~(list "--ignore=openai/tests/asyncio/test_endpoints.py"
7493 "--ignore=openai/tests/test_endpoints.py"
7494 "--ignore-glob=tests/api_resources/*")))
7495 (propagated-inputs
7496 (list python-aiohttp
7497 python-distro
7498 python-httpx
7499 python-jiter
7500 python-pydantic
7501 python-requests
7502 python-tqdm
7503 python-typing-extensions))
7504 (native-inputs
7505 (list nss-certs-for-test
7506 python-dirty-equals
7507 python-hatchling
7508 python-hatch-fancy-pypi-readme
7509 python-inline-snapshot
7510 python-pytest
7511 python-pytest-asyncio
7512 python-pytest-mock
7513 python-pytest-xdist
7514 python-respx
7515 python-rich
7516 python-setuptools))
7517 (home-page "https://github.com/openai/openai-python")
7518 (synopsis "Python client library for the OpenAI API")
7519 (description "This package provides a Python client library for the
7520OpenAI API.")
7521 (license license:expat)))
7522
7523(define-public python-openapi-schema-validator
7524 (package
7525 (name "python-openapi-schema-validator")
7526 (version "0.6.2")
7527 (source
7528 (origin
7529 (method git-fetch) ;no tests in pypi release
7530 (uri (git-reference
7531 (url "https://github.com/p1c2u/openapi-schema-validator")
7532 (commit version)))
7533 (file-name (git-file-name name version))
7534 (sha256
7535 (base32
7536 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
7537 (build-system pyproject-build-system)
7538 (arguments
7539 (list
7540 #:test-flags
7541 ;; This one returns 5 instead of 4 elements
7542 '(list "-k" "not test_array_prefixitems_invalid")
7543 #:phases
7544 #~(modify-phases %standard-phases
7545 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
7546 (add-after 'unpack 'relax-requirements
7547 (lambda _
7548 (substitute* "pyproject.toml"
7549 (("jsonschema-specifications.*")
7550 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
7551 (native-inputs (list python-poetry-core python-pytest))
7552 (propagated-inputs
7553 (list python-isodate
7554 python-jsonschema
7555 python-rfc3339-validator
7556 python-strict-rfc3339))
7557 (home-page "https://github.com/p1c2u/openapi-schema-validator")
7558 (synopsis "OpenAPI schema validation library for Python")
7559 (description "Openapi-schema-validator is a Python library that validates
7560a schema against:
7561@itemize
7562@item OpenAPI Schema Specification v3.0 which is an extended subset of the
7563JSON Schema Specification Wright Draft 00.
7564@item OpenAPI Schema Specification v3.1 which is an extended superset of the
7565JSON Schema Specification Draft 2020-12.
7566@end itemize")
7567 (license license:bsd-3)))
7568
7569(define-public python-openapi-spec-validator
7570 (package
7571 (name "python-openapi-spec-validator")
7572 (version "0.7.1")
7573 (source
7574 (origin
7575 (method git-fetch) ;no tests in pypi release
7576 (uri (git-reference
7577 (url "https://github.com/p1c2u/openapi-spec-validator")
7578 (commit version)))
7579 (file-name (git-file-name name version))
7580 (sha256
7581 (base32
7582 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
7583 (build-system pyproject-build-system)
7584 (arguments
7585 (list
7586 ;; These tests attempt to fetch resources from the Internet
7587 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
7588 "-k" "not example")))
7589 (native-inputs
7590 (list python-poetry-core
7591 python-pytest))
7592 (propagated-inputs
7593 (list python-jsonschema
7594 python-jsonschema-path
7595 python-lazy-object-proxy
7596 python-openapi-schema-validator
7597 python-pyyaml
7598 python-requests
7599 python-setuptools))
7600 (home-page "https://github.com/p1c2u/openapi-spec-validator")
7601 (synopsis "OpenAPI spec validator")
7602 (description "OpenAPI Spec Validator is a Python library that validates an
7603OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
76043.0 and OpenAPI 3.1 specifications. The validator aims to check for full
7605compliance with the specification.")
7606 (license license:asl2.0)))
7607
7608(define-public python-openapi-core
7609 (package
7610 (name "python-openapi-core")
7611 (version "0.19.4")
7612 (source
7613 (origin
7614 (method git-fetch)
7615 (uri (git-reference
7616 (url "https://github.com/p1c2u/openapi-core")
7617 (commit version)))
7618 (file-name (git-file-name name version))
7619 (sha256
7620 (base32
7621 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
7622 (build-system pyproject-build-system)
7623 (arguments
7624 (list
7625 #:test-flags
7626 '(list "tests/unit"
7627 "-k" "not test_chars_valid")))
7628 (native-inputs (list python-django
7629 python-falcon
7630 python-flask
7631 python-mock
7632 python-poetry-core
7633 python-pytest
7634 python-pytest-asyncio
7635 python-responses))
7636 (propagated-inputs
7637 (list python-attrs
7638 python-aiohttp
7639 python-isodate
7640 python-jsonschema
7641 python-lazy-object-proxy
7642 python-more-itertools
7643 python-openapi-schema-validator
7644 python-openapi-spec-validator
7645 python-parse
7646 python-six
7647 python-werkzeug))
7648 (home-page "https://github.com/p1c2u/openapi-core")
7649 (synopsis "OpenAPI core library")
7650 (description "Openapi-core is a Python library that adds client-side and
7651server-side support for the OpenAPI Specification v3. It has features such
7652as:
7653@itemize
7654@item Validation of requests and responses
7655@item Schema casting and unmarshalling
7656@item Media type and parameters deserialization
7657@item Security providers (API keys, Cookie, Basic and Bearer HTTP
7658authentications)
7659@item Custom deserializers and formats
7660@item Integration with libraries and frameworks.
7661@end itemize")
7662 (license license:bsd-3)))
7663
7664(define-public python-openid
7665 (package
7666 (name "python-openid")
7667 (version "3.2.0")
7668 (source
7669 (origin
7670 (method git-fetch)
7671 (uri (git-reference
7672 (url "https://github.com/necaris/python3-openid")
7673 (commit (string-append "v" version))))
7674 (file-name (git-file-name name version))
7675 (sha256
7676 (base32 "1b50wmwb7k5k61zlc7d2b982i20410vp472zgl2yx8gxdnfvn8g1"))))
7677 (build-system pyproject-build-system)
7678 (arguments
7679 (list #:test-backend #~'unittest
7680 #:test-flags #~(list "openid.test.test_suite")))
7681 (propagated-inputs
7682 (list python-defusedxml))
7683 (native-inputs
7684 (list python-psycopg2 python-django python-setuptools))
7685 (home-page "https://github.com/necaris/python3-openid")
7686 (synopsis "OpenID support for servers and consumers")
7687 (description "This library provides OpenID authentication for Python, both
7688for clients and servers.")
7689 (license license:asl2.0)))
7690
7691(define-public python-openid-cla
7692 ;; XXX: Last updated in 2015.
7693 (package
7694 (name "python-openid-cla")
7695 (version "1.2")
7696 (source
7697 (origin
7698 (method url-fetch)
7699 (uri (pypi-uri "python-openid-cla" version))
7700 (sha256
7701 (base32
7702 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
7703 (build-system pyproject-build-system)
7704 (arguments '(#:tests? #f)) ; No tests.
7705 (native-inputs (list python-setuptools python-wheel))
7706 (propagated-inputs (list python-openid python-six))
7707 (home-page "https://github.com/puiterwijk/python-openid-cla/")
7708 (synopsis "Implementation of the OpenID CLA extension for python-openid")
7709 (description "@code{openid-cla} is an implementation of the OpenID
7710contributor license agreement extension for python-openid.")
7711 (license license:bsd-3)))
7712
7713(define-public python-openid-teams
7714 ;; XXX: Last updated in 2018.
7715 (package
7716 (name "python-openid-teams")
7717 (version "1.1")
7718 (source
7719 (origin
7720 (method url-fetch)
7721 (uri (pypi-uri "python-openid-teams" version))
7722 (sha256
7723 (base32
7724 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
7725 (build-system pyproject-build-system)
7726 (arguments '(#:tests? #f)) ; No tests.
7727 (native-inputs (list python-setuptools python-wheel))
7728 (propagated-inputs (list python-openid python-six))
7729 (home-page "https://github.com/puiterwijk/python-openid-teams/")
7730 (synopsis "Implementation of the OpenID teams extension for python-openid")
7731 (description
7732 "@code{openid-teams} is an implementation of the OpenID
7733teams extension for python-openid.")
7734 (license license:bsd-3)))
7735
7736(define-public python-priority
7737 (package
7738 (name "python-priority")
7739 (version "2.0.0")
7740 (source
7741 (origin
7742 (method url-fetch)
7743 (uri (pypi-uri "priority" version))
7744 (sha256
7745 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
7746 (build-system pyproject-build-system)
7747 (native-inputs
7748 (list python-pytest python-setuptools python-wheel))
7749 (home-page "https://python-hyper.org/projects/priority/en/latest/")
7750 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
7751 (description
7752 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
7753set out in RFC 7540 Section 5.3 (Stream Priority).")
7754 (license license:expat)))
7755
7756(define-public python-weblate-language-data
7757 (package
7758 (name "python-weblate-language-data")
7759 (version "2025.8")
7760 (source
7761 (origin
7762 (method url-fetch)
7763 (uri (pypi-uri "weblate_language_data" version))
7764 (sha256
7765 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
7766 (build-system pyproject-build-system)
7767 (arguments (list #:tests? #f)) ;not tests, just data files
7768 (native-inputs
7769 (list python-setuptools))
7770 (propagated-inputs
7771 (list python-translate-toolkit))
7772 (home-page "https://github.com/WeblateOrg/language-data")
7773 (synopsis "Language definitions for Weblate")
7774 (description
7775 "This package provides language definitions used by
7776@url{https://weblate.org/, Weblate}i.")
7777 (license license:expat)))
7778
7779(define-public python-wikidata
7780 (package
7781 (name "python-wikidata")
7782 (version "0.8.1")
7783 (source
7784 (origin
7785 (method git-fetch)
7786 (uri (git-reference
7787 (url "https://github.com/dahlia/wikidata")
7788 (commit version)))
7789 (file-name (git-file-name name version))
7790 (sha256
7791 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
7792 (build-system pyproject-build-system)
7793 (native-inputs
7794 (list python-pytest python-setuptools))
7795 (home-page "https://github.com/dahlia/wikidata")
7796 (synopsis "Wikidata client library")
7797 (description
7798 "This package provides a Python interface to @url{https://www.wikidata.org/,
7799Wikidata}.")
7800 (license license:gpl3+)))
7801
7802(define-public python-wsproto
7803 (package
7804 (name "python-wsproto")
7805 (version "1.3.2")
7806 (source
7807 (origin
7808 (method git-fetch)
7809 (uri (git-reference
7810 (url "https://github.com/python-hyper/wsproto/")
7811 (commit version)))
7812 (file-name (git-file-name name version))
7813 (sha256
7814 (base32 "1n67xnnq3mvnxp61r4d8730hh8hzrq8i9bdrv8jivhj369fhndn9"))))
7815 (build-system pyproject-build-system)
7816 (native-inputs
7817 (list python-pytest
7818 python-setuptools))
7819 (propagated-inputs
7820 (list python-h11))
7821 (home-page "https://github.com/python-hyper/wsproto/")
7822 (synopsis "WebSockets state-machine based protocol implementation")
7823 (description
7824 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
7825stack. It's written from the ground up to be embeddable in whatever program
7826you choose to use, ensuring that you can communicate via WebSockets, as
7827defined in RFC6455, regardless of your programming paradigm.")
7828 (license license:expat)))
7829
7830(define-public hypercorn
7831 (package
7832 (name "hypercorn")
7833 (version "0.18.0")
7834 (source
7835 (origin
7836 (method git-fetch) ;PyPI does not have tests
7837 (uri (git-reference
7838 (url "https://github.com/pgjones/hypercorn")
7839 (commit version)))
7840 (file-name (git-file-name name version))
7841 (sha256
7842 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
7843 (build-system pyproject-build-system)
7844 ;; Propagate because Hypercorn also exposes functionality over a module.
7845 (propagated-inputs (list python-h11
7846 python-h2
7847 python-priority
7848 python-tomli
7849 python-wsproto))
7850 (native-inputs (list nss-certs-for-test
7851 python-httpx
7852 python-pdm-backend
7853 python-poetry-core
7854 python-pytest
7855 python-pytest-asyncio
7856 python-pytest-trio
7857 python-trio))
7858 (home-page "https://gitlab.com/pgjones/hypercorn/")
7859 (synopsis "ASGI Server based on Hyper libraries")
7860 (description
7861 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
7862wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
7863WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
7864can utilise asyncio, uvloop, or trio worker types.")
7865 (license license:expat)))
7866
7867(define-public python-querystring-parser
7868 (package
7869 (name "python-querystring-parser")
7870 (version "1.2.4")
7871 (source
7872 (origin
7873 (method git-fetch)
7874 (uri (git-reference
7875 (url "https://github.com/bernii/querystring-parser")
7876 (commit version)))
7877 (file-name (git-file-name name version))
7878 (sha256
7879 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
7880 (build-system pyproject-build-system)
7881 (arguments
7882 (list
7883 #:test-backend #~'custom
7884 #:test-flags #~(list "querystring_parser/tests.py")
7885 #:phases
7886 #~(modify-phases %standard-phases
7887 (add-after 'unpack 'fix-python-incompatibilities
7888 (lambda _
7889 (substitute* "querystring_parser/tests.py"
7890 ;; XXX FIXME: This test is broken with Python 3.7:
7891 ;; https://github.com/bernii/querystring-parser/issues/35
7892 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
7893 "True")
7894 ;; Removed in Python 3.12.
7895 (("assertEquals")
7896 "assertEqual")))))))
7897 (native-inputs (list python-setuptools))
7898 (propagated-inputs (list python-six))
7899 (home-page "https://github.com/bernii/querystring-parser")
7900 (synopsis "QueryString parser that correctly handles nested dictionaries")
7901 (description
7902 "This package provides a query string parser for Python and Django
7903projects that correctly creates nested dictionaries from sent form/querystring
7904data.")
7905 (license license:expat)))
7906
7907(define-public python-tornado
7908 (package
7909 (name "python-tornado")
7910 (version "6.4.2")
7911 (source
7912 (origin
7913 (method url-fetch)
7914 (uri (pypi-uri "tornado" version))
7915 (sha256
7916 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
7917 (build-system pyproject-build-system)
7918 (arguments
7919 (list
7920 #:test-flags
7921 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
7922 #~(list "--ignore=tornado/test/iostream_test.py")))
7923 (native-inputs
7924 (list python-certifi
7925 python-pytest
7926 python-setuptools))
7927 (home-page "https://www.tornadoweb.org/")
7928 (synopsis "Python web framework and asynchronous networking library")
7929 (description
7930 "Tornado is a Python web framework and asynchronous networking library,
7931originally developed at FriendFeed. By using non-blocking network I/O,
7932Tornado can scale to tens of thousands of open connections, making it ideal
7933for long polling, WebSockets, and other applications that require a long-lived
7934connection to each user.")
7935 (license license:asl2.0)))
7936
7937(define-public python-tornado-http-auth
7938 (package
7939 (name "python-tornado-http-auth")
7940 (version "1.1.1")
7941 (source
7942 (origin
7943 (method git-fetch)
7944 (uri (git-reference
7945 (url "https://github.com/gvalkov/tornado-http-auth")
7946 (commit (string-append "v" version))))
7947 (file-name (git-file-name name version))
7948 (sha256
7949 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
7950 (build-system pyproject-build-system)
7951 ;; XXX: This version is incompatible with current tornado.testing.
7952 (arguments (list #:tests? #f))
7953 (native-inputs (list python-setuptools))
7954 (propagated-inputs (list python-tornado))
7955 (home-page "https://github.com/gvalkov/tornado-http-auth")
7956 (synopsis "Digest and basic authentication module for Tornado")
7957 (description
7958 "Provides support for adding authentication to services using the Tornado
7959web framework, either via the basic or digest authentication schemes.")
7960 (license license:asl2.0)))
7961
7962(define-public python-wsgi-intercept
7963 (package
7964 (name "python-wsgi-intercept")
7965 (version "1.13.1")
7966 (source (origin
7967 (method url-fetch)
7968 (uri (pypi-uri "wsgi_intercept" version))
7969 (sha256
7970 (base32
7971 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
7972 (build-system pyproject-build-system)
7973 (arguments
7974 (list
7975 ;; XXX: tests required internet access
7976 #:tests? #f))
7977 (propagated-inputs
7978 (list python-six))
7979 (native-inputs
7980 (list python-httplib2
7981 python-pytest
7982 python-requests
7983 python-setuptools
7984 python-urllib3
7985 python-wheel))
7986 (synopsis "Puts a WSGI application in place of a real URI for testing")
7987 (description "Wsgi_intercept installs a WSGI application in place of a real
7988URI for testing. Testing a WSGI application normally involves starting a
7989server at a local host and port, then pointing your test code to that address.
7990Instead, this library lets you intercept calls to any specific host/port
7991combination and redirect them into a WSGI application importable by your test
7992program. Thus, you can avoid spawning multiple processes or threads to test
7993your Web app.")
7994 (home-page "https://github.com/cdent/wsgi-intercept")
7995 (license license:expat)))
7996
7997(define-public python-webob
7998 (package
7999 (name "python-webob")
8000 (version "1.8.10")
8001 (source
8002 (origin
8003 (method url-fetch)
8004 (uri (pypi-uri "webob" version))
8005 (sha256
8006 (base32
8007 "0avwfsqqva46aix1p61jbwjsw7kh6zkxvfds9xi3zg07yc8km5hw"))))
8008 (build-system pyproject-build-system)
8009 ;; tests: 2394 passed, 9 skipped, 1 xfailed, 35 warnings
8010 (native-inputs
8011 (list python-pytest
8012 python-setuptools))
8013 (home-page "https://webob.org/")
8014 (synopsis "WSGI request and response object")
8015 (description
8016 "WebOb provides wrappers around the WSGI request environment, and an
8017object to help create WSGI responses.")
8018 (license license:expat)))
8019
8020(define-public python-yewtube-search
8021 (package
8022 (name "python-yewtube-search")
8023 ;; Original repository for python-youtube-search package is archived, see:
8024 ;; <https://github.com/alexmercerind/youtube-search-python/issues/189>.
8025 ;; The most promising fork was
8026 ;; <https://github.com/ahmedayyad-dev/youtube-search-python-fork> which is
8027 ;; archived since <2026-04-04>. This is another fork with a different PyPI
8028 ;; name for python-yewtube.
8029 (version "1.6.7")
8030 (source
8031 (origin
8032 (method url-fetch)
8033 (uri (pypi-uri "yewtube_search_python" version))
8034 (sha256
8035 (base32 "0vjh4wrlqx4lv9qi6572jx2d0rsp6gkvaqf0f2ar4npdz0ldgl47"))))
8036 (build-system pyproject-build-system)
8037 (arguments (list #:tests? #f)) ;no tests in repository
8038 (native-inputs
8039 (list python-setuptools))
8040 (propagated-inputs
8041 (list python-httpx))
8042 (home-page "https://github.com/iamtalhaasghar/youtube-search-python")
8043 (synopsis "Search for YouTube videos, channels & playlists")
8044 (description
8045 "This package provides tools to search for @code{YouTube} videos,
8046channels and playlists; as well as getting video metadata from links. This
8047package does not rely on the @code{YouTube} Data API v3.")
8048 (license license:expat)))
8049
8050(define-public python-zc-lockfile
8051 (package
8052 (name "python-zc-lockfile")
8053 (version "4.0")
8054 (source
8055 (origin
8056 (method git-fetch)
8057 (uri (git-reference
8058 (url "https://github.com/zopefoundation/zc.lockfile")
8059 (commit version)))
8060 (file-name (git-file-name name version))
8061 (sha256
8062 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
8063 (build-system pyproject-build-system)
8064 (arguments
8065 (list
8066 #:phases
8067 #~(modify-phases %standard-phases
8068 (replace 'check
8069 (lambda* (#:key tests? #:allow-other-keys)
8070 (if tests?
8071 (invoke "zope-testrunner" "--test-path=src")
8072 (format #t "test suite not run~%")))))))
8073 (native-inputs (list python-zope-testing python-zope-testrunner
8074 python-setuptools))
8075 (home-page "https://github.com/zopefoundation/zc.lockfile")
8076 (synopsis "Interprocess locks using lock files")
8077 (description
8078 "This package provides an implementation of interprocess locks using lock
8079files. These locks can also be used to mediate access to other files.")
8080 (license license:zpl2.1)))
8081
8082(define-public python-zconfig
8083 (package
8084 (name "python-zconfig")
8085 (version "4.3")
8086 (source
8087 (origin
8088 (method git-fetch)
8089 (uri (git-reference
8090 (url "https://github.com/zopefoundation/ZConfig/")
8091 (commit version)))
8092 (file-name (git-file-name name version))
8093 (sha256
8094 (base32 "06c4vffk51fw03q87r31s81b0xbxg2qqvjfmcl2z4hg21fr088c2"))))
8095 (build-system pyproject-build-system)
8096 (arguments
8097 (list
8098 #:phases
8099 #~(modify-phases %standard-phases
8100 (replace 'check
8101 (lambda* (#:key tests? #:allow-other-keys)
8102 (if tests?
8103 (begin
8104 ;; This test assumes we still have setup.py in the
8105 ;; directory from which we import zconfig, which
8106 ;; does not work after installing the package.
8107 (delete-file-recursively
8108 "src/ZConfig/tests/test_readme.py")
8109 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
8110 (format #t "test suite not run~%")))))))
8111 (native-inputs (list python-docutils python-manuel python-zope-exceptions
8112 python-zope-testrunner python-setuptools))
8113 (home-page "https://github.com/zopefoundation/ZConfig/")
8114 (synopsis "Structured configuration library intended for general use")
8115 (description
8116 "@code{zconfig} is a configuration library intended for general use. It
8117supports a hierarchical schema-driven configuration model that allows a schema
8118to specify data conversion routines written in Python. Its model is very
8119different from the model supported by the @code{configparser} module found in
8120Python's standard library, and is more suitable to configuration-intensive
8121applications.")
8122 (license license:zpl2.1)))
8123
8124(define-public python-zodb
8125 (package
8126 (name "python-zodb")
8127 (version "6.0.1")
8128 (source
8129 (origin
8130 (method url-fetch)
8131 (uri (pypi-uri "zodb" version))
8132 (sha256
8133 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
8134 (build-system pyproject-build-system)
8135 (arguments
8136 (list
8137 #:phases
8138 #~(modify-phases %standard-phases
8139 (replace 'check
8140 (lambda* (#:key tests? #:allow-other-keys)
8141 (if tests?
8142 (begin
8143 ;; This test does not work after installing the
8144 ;; package, since it expects the ZODB source code
8145 ;; to reside in the src/ directory.
8146 (delete-file-recursively
8147 "src/ZODB/tests/testdocumentation.py")
8148 (invoke "zope-testrunner" "-vv" "--test-path=src"
8149 "--all"))
8150 (format #t "test suite not run~%")))))))
8151 (native-inputs
8152 (list python-manuel
8153 python-wheel
8154 python-zope-testing
8155 python-zope-testrunner))
8156 (propagated-inputs
8157 (list python-btrees
8158 python-persistent
8159 python-transaction
8160 python-zc-lockfile
8161 python-zconfig
8162 python-zodbpickle
8163 python-zope-interface))
8164 (home-page "http://zodb-docs.readthedocs.io")
8165 (synopsis "Object-oriented database for Python")
8166 (description
8167 "@code{ZODB} provides an object-oriented and @acronym{ACID,
8168Atomicity Consistency Isolation Durability} compliant database for Python with
8169a high degree of transparency. @code{ZODB} is an object-oriented database,
8170not an object-relational mapping. This comes with several advantaged:
8171
8172@itemize
8173@item no separate language for database operations
8174@item very little impact on your code to make objects persistent
8175@item no database mapper that partially hides the database.
8176@item almost no seam between code and database.
8177@end itemize")
8178 (license license:zpl2.1)))
8179
8180(define-public python-zodbpickle
8181 (package
8182 (name "python-zodbpickle")
8183 (version "3.2")
8184 (source
8185 (origin
8186 (method url-fetch)
8187 (uri (pypi-uri "zodbpickle" version))
8188 (sha256
8189 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
8190 (build-system pyproject-build-system)
8191 (arguments
8192 '(#:phases (modify-phases %standard-phases
8193 (replace 'check
8194 (lambda* (#:key tests? #:allow-other-keys)
8195 (if tests?
8196 (invoke "zope-testrunner" "-vv" "--test-path=src"
8197 "--all")
8198 (format #t "test suite not run~%")))))))
8199 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
8200 (home-page "https://github.com/zopefoundation/zodbpickle")
8201 (synopsis "Uniform pickling interface for @code{zodb}")
8202 (description
8203 "This package is a fork of the @code{pickle} module (and the
8204supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
8205support for the @code{noload} operations used by @code{zodb}.")
8206 (license (list license:psfl license:zpl2.1))))
8207
8208(define-public python-zope-dottedname
8209 (package
8210 (name "python-zope-dottedname")
8211 (version "7.0")
8212 (source
8213 (origin
8214 (method git-fetch)
8215 (uri (git-reference
8216 (url "https://github.com/zopefoundation/zope.dottedname")
8217 (commit version)))
8218 (file-name (git-file-name name version))
8219 (sha256
8220 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
8221 (build-system pyproject-build-system)
8222 (arguments
8223 (list #:test-backend #~'custom
8224 #:test-flags #~(list "src/zope/dottedname/tests.py")))
8225 (native-inputs (list python-setuptools))
8226 (home-page "https://zopedottedname.readthedocs.io")
8227 (synopsis "Resolver for Python dotted names")
8228 (description
8229 "This package provides a @code{resolve()} function that resolves strings
8230containing dotted names into the appropriate Python object.")
8231 (license license:zpl2.1)))
8232
8233(define-public python-zope-event
8234 (package
8235 (name "python-zope-event")
8236 (version "6.0")
8237 (source
8238 (origin
8239 (method git-fetch)
8240 (uri (git-reference
8241 (url "https://github.com/zopefoundation/zope.event")
8242 (commit version)))
8243 (file-name (git-file-name name version))
8244 (sha256
8245 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
8246 (build-system pyproject-build-system)
8247 (arguments
8248 (list
8249 #:test-flags
8250 #~(list "src/zope/event/tests.py")))
8251 (native-inputs (list python-pytest python-setuptools))
8252 (home-page "https://zopeevent.readthedocs.io/en/latest/")
8253 (synopsis "Event publishing system for Python")
8254 (description
8255 "Zope.event provides an event publishing API, intended for use by
8256applications which are unaware of any subscribers to their events. It is a
8257simple event-dispatching system on which more sophisticated event dispatching
8258systems can be built.")
8259 (license license:zpl2.1)))
8260
8261(define-public python-zope-interface
8262 (package
8263 (name "python-zope-interface")
8264 (version "7.2")
8265 (source
8266 (origin
8267 (method git-fetch)
8268 (uri (git-reference
8269 (url "https://github.com/zopefoundation/zope.interface")
8270 (commit version)))
8271 (file-name (git-file-name name version))
8272 (sha256
8273 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
8274 (build-system pyproject-build-system)
8275 (arguments
8276 ;; XXX: test suite can't find python-zope-testing
8277 (list #:tests? #f))
8278 (native-inputs (list python-setuptools))
8279 (home-page "https://zopeinterface.readthedocs.io")
8280 (synopsis "\"Design by contract\" methodology in Python")
8281 (description
8282 "Zope.interface provides an implementation of \"object interfaces\" for
8283Python. Interfaces are a mechanism for labeling objects as conforming to a
8284given API or contract.")
8285 (license license:zpl2.1)))
8286
8287(define-public python-zope-exceptions
8288 (package
8289 (name "python-zope-exceptions")
8290 (version "6.0")
8291 (source
8292 (origin
8293 (method git-fetch)
8294 (uri (git-reference
8295 (url "https://github.com/zopefoundation/zope.exceptions")
8296 (commit version)))
8297 (file-name (git-file-name name version))
8298 (sha256
8299 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
8300 (build-system pyproject-build-system)
8301 (arguments
8302 (list
8303 #:phases
8304 #~(modify-phases %standard-phases
8305 (replace 'check
8306 (lambda* (#:key tests? #:allow-other-keys)
8307 (if tests?
8308 (invoke "zope-testrunner" "--test-path=src")
8309 (format #t "test suite not run~%")))))))
8310 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
8311 (propagated-inputs (list python-zope-interface))
8312 (home-page "https://github.com/zopefoundation/zope.exceptions")
8313 (synopsis "Zope exceptions")
8314 (description
8315 "Zope.exceptions provides general-purpose exception types that have uses
8316outside of the Zope framework.")
8317 (license license:zpl2.1)))
8318
8319(define (python-zope-bootstrap-package orig)
8320 (package
8321 (inherit orig)
8322 (name (string-append (package-name orig) "-bootstrap"))
8323 (arguments
8324 (if (null? (package-arguments orig))
8325 (list
8326 #:tests? #f
8327 #:phases #~(modify-phases %standard-phases
8328 (delete 'sanity-check)))
8329 (substitute-keyword-arguments arguments
8330 ((#:tests? _ #f) #f)
8331 ((#:phases phases '%standard-phases)
8332 #~(modify-phases #$phases
8333 (delete 'sanity-check))))))
8334 (propagated-inputs `())
8335 (native-inputs (list python-setuptools))
8336 (properties `((hidden? . #t)))))
8337
8338(define-public python-zope-exceptions-bootstrap
8339 (python-zope-bootstrap-package python-zope-exceptions))
8340
8341(define-public python-zope-testing
8342 (package
8343 (name "python-zope-testing")
8344 (version "6.0")
8345 (source
8346 (origin
8347 (method git-fetch)
8348 (uri (git-reference
8349 (url "https://github.com/zopefoundation/zope.testing")
8350 (commit version)))
8351 (file-name (git-file-name name version))
8352 (sha256
8353 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
8354 (build-system pyproject-build-system)
8355 (arguments
8356 (list
8357 #:phases
8358 #~(modify-phases %standard-phases
8359 (replace 'check
8360 (lambda* (#:key tests? #:allow-other-keys)
8361 (if tests?
8362 (invoke "zope-testrunner" "--test-path=src")
8363 (format #t "test suite not run~%")))))))
8364 (native-inputs (list python-setuptools
8365 python-zope-interface
8366 python-zope-testrunner-bootstrap))
8367 (home-page "https://zopetesting.readthedocs.io/")
8368 (synopsis "Zope testing helpers")
8369 (description
8370 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
8371servers, regular expressions, and more.")
8372 (license license:zpl2.1)))
8373
8374(define-public python-zope-testrunner
8375 (package
8376 (name "python-zope-testrunner")
8377 (version "7.4")
8378 (source
8379 (origin
8380 (method git-fetch)
8381 (uri (git-reference
8382 (url "https://github.com/zopefoundation/zope.testrunner")
8383 (commit version)))
8384 (file-name (git-file-name name version))
8385 (sha256
8386 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
8387 (build-system pyproject-build-system)
8388 (arguments
8389 (list
8390 #:phases
8391 #~(modify-phases %standard-phases
8392 (add-after 'unpack 'remove-problematic-test
8393 (lambda _
8394 ;; This test contains invalid syntax, which breaks bytecode
8395 ;; compilation. For simplicity just remove it.
8396 (delete-file
8397 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
8398 (replace 'check
8399 (lambda* (#:key tests? #:allow-other-keys)
8400 (if tests?
8401 (invoke "zope-testrunner" "--test-path=src")
8402 (format #t "test suite not run~%")))))))
8403 (native-inputs (list python-setuptools python-zope-testing))
8404 (propagated-inputs (list python-zope-exceptions python-zope-interface))
8405 (home-page "https://zopetestrunner.readthedocs.io")
8406 (synopsis "Zope testrunner script")
8407 (description "This package provides a script for running Python tests.")
8408 (license license:zpl2.1)))
8409
8410(define-public python-zope-testrunner-bootstrap
8411 (package
8412 (inherit (python-zope-bootstrap-package python-zope-testrunner))
8413 (propagated-inputs
8414 (list python-six python-zope-exceptions-bootstrap))
8415 (properties `((hidden? . #t)))))
8416
8417(define-public python-zope-i18nmessageid
8418 (package
8419 (name "python-zope-i18nmessageid")
8420 (version "7.0")
8421 (source
8422 (origin
8423 (method git-fetch)
8424 (uri (git-reference
8425 (url "https://github.com/zopefoundation/zope.i18nmessageid")
8426 (commit version)))
8427 (file-name (git-file-name name version))
8428 (sha256
8429 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
8430 (build-system pyproject-build-system)
8431 (arguments
8432 (list
8433 #:phases
8434 #~(modify-phases %standard-phases
8435 (replace 'check
8436 (lambda* (#:key tests? #:allow-other-keys)
8437 (if tests?
8438 (invoke "zope-testrunner" "--test-path=src")
8439 (format #t "test suite not run~%")))))))
8440 (native-inputs (list python-setuptools python-zope-testrunner))
8441 (home-page "https://zopei18nmessageid.readthedocs.io")
8442 (synopsis "Message identifiers for internationalization")
8443 (description "Zope.i18nmessageid provides facilities for declaring
8444internationalized messages within program source text.")
8445 (license license:zpl2.1)))
8446
8447(define-public python-zope-schema
8448 (package
8449 (name "python-zope-schema")
8450 (version "7.0.1")
8451 (source
8452 (origin
8453 (method git-fetch)
8454 (uri (git-reference
8455 (url "https://github.com/zopefoundation/zope.schema")
8456 (commit version)))
8457 (file-name (git-file-name name version))
8458 (sha256
8459 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
8460 (build-system pyproject-build-system)
8461 (arguments
8462 (list
8463 #:phases
8464 #~(modify-phases %standard-phases
8465 (replace 'check
8466 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8467 (add-installed-pythonpath inputs outputs)
8468 (if tests?
8469 (invoke "zope-testrunner" "--test-path=src")
8470 (format #t "test suite not run.~%")))))))
8471 (propagated-inputs (list python-zope-event python-zope-interface))
8472 (native-inputs (list python-zope-i18nmessageid python-zope-testing
8473 python-zope-testrunner python-setuptools))
8474 (home-page "https://zopeschema.readthedocs.io")
8475 (synopsis "Zope data schemas")
8476 (description "Zope.scheme provides extensions to zope.interface for
8477defining data schemas.")
8478 (license license:zpl2.1)))
8479
8480(define-public python-zope-sqlalchemy
8481 (package
8482 (name "python-zope-sqlalchemy")
8483 (version "1.6")
8484 (source
8485 (origin
8486 (method git-fetch)
8487 (uri (git-reference
8488 (url "https://github.com/zopefoundation/zope.sqlalchemy")
8489 (commit version)))
8490 (file-name (git-file-name name version))
8491 (sha256
8492 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
8493 (build-system pyproject-build-system)
8494 (arguments
8495 (list
8496 #:phases
8497 #~(modify-phases %standard-phases
8498 (replace 'check
8499 (lambda* (#:key tests? #:allow-other-keys)
8500 (if tests?
8501 (invoke "zope-testrunner" "--test-path=src")
8502 (format #t "test suite not run~%")))))))
8503 (propagated-inputs (list python-sqlalchemy python-transaction
8504 python-zope-interface))
8505 (native-inputs (list python-zope-testing python-zope-testrunner
8506 python-setuptools))
8507 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
8508 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
8509 (description
8510 "The aim of this package is to unify the plethora of existing packages
8511integrating SQLAlchemy with Zope's transaction management. As such,it only
8512provides a data manager and makes no attempt to define a @i{zopeish} way to
8513configure engines.")
8514 (license license:zpl2.1)))
8515
8516(define-public python-zope-configuration
8517 (package
8518 (name "python-zope-configuration")
8519 (version "7.0")
8520 (source
8521 (origin
8522 (method git-fetch)
8523 (uri (git-reference
8524 (url "https://github.com/zopefoundation/zope.configuration")
8525 (commit version)))
8526 (file-name (git-file-name name version))
8527 (sha256
8528 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
8529 (build-system pyproject-build-system)
8530 (arguments
8531 (list
8532 #:phases
8533 #~(modify-phases %standard-phases
8534 (replace 'check
8535 (lambda* (#:key tests? #:allow-other-keys)
8536 (if tests?
8537 (invoke "zope-testrunner" "--test-path=src")
8538 (format #t "test suite not run~%")))))))
8539 (native-inputs (list python-manuel python-setuptools python-zope-testing
8540 python-zope-testrunner))
8541 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
8542 python-zope-schema))
8543 (home-page "https://zopeconfiguration.readthedocs.io")
8544 (synopsis "Zope Configuration Markup Language")
8545 (description "Zope.configuration implements ZCML, the Zope Configuration
8546Markup Language.")
8547 (license license:zpl2.1)))
8548
8549(define-public python-zope-configuration-bootstrap
8550 (python-zope-bootstrap-package python-zope-configuration))
8551
8552(define-public python-zope-copy
8553 (package
8554 (name "python-zope-copy")
8555 (version "6.0")
8556 (source
8557 (origin
8558 (method git-fetch)
8559 (uri (git-reference
8560 (url "https://github.com/zopefoundation/zope.copy")
8561 (commit version)))
8562 (file-name (git-file-name name version))
8563 (sha256
8564 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
8565 (build-system pyproject-build-system)
8566 (arguments
8567 (list
8568 #:phases
8569 #~(modify-phases %standard-phases
8570 (replace 'check
8571 (lambda* (#:key tests? #:allow-other-keys)
8572 (if tests?
8573 (invoke "zope-testrunner" "--test-path=src")
8574 (format #t "test suite not run~%")))))))
8575 (propagated-inputs (list python-zope-interface))
8576 (native-inputs
8577 (list python-zodbpickle
8578 python-zope-component-bootstrap
8579 python-zope-location-bootstrap
8580 python-zope-proxy
8581 python-zope-schema
8582 python-zope-testing
8583 python-zope-testrunner
8584 python-setuptools))
8585 (home-page "https://zopecopy.readthedocs.io")
8586 (synopsis "Pluggable object copying mechanism")
8587 (description
8588 "This package provides a pluggable mechanism for copying persistent objects.")
8589 (license license:zpl2.1)))
8590
8591(define-public python-zope-proxy
8592 (package
8593 (name "python-zope-proxy")
8594 (version "7.0")
8595 (source
8596 (origin
8597 (method git-fetch)
8598 (uri (git-reference
8599 (url "https://github.com/zopefoundation/zope.proxy")
8600 (commit version)))
8601 (file-name (git-file-name name version))
8602 (sha256
8603 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
8604 (build-system pyproject-build-system)
8605 (arguments
8606 (list
8607 #:phases
8608 #~(modify-phases %standard-phases
8609 (replace 'check
8610 (lambda* (#:key tests? #:allow-other-keys)
8611 (if tests?
8612 (invoke "zope-testrunner" "--test-path=src")
8613 (format #t "test suite not run~%")))))))
8614 (native-inputs
8615 (list python-zope-location-bootstrap
8616 python-zope-security-bootstrap
8617 python-zope-testrunner
8618 python-setuptools))
8619 (propagated-inputs (list python-zope-interface))
8620 (home-page "https://zopeproxy.readthedocs.io")
8621 (synopsis "Generic, transparent proxies")
8622 (description
8623 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
8624special objects which serve as mostly-transparent wrappers around another
8625object, intervening in the apparent behavior of the wrapped object only when
8626necessary to apply the policy (e.g., access checking, location brokering,
8627etc.) for which the proxy is responsible.")
8628 (license license:zpl2.1)))
8629
8630(define-public python-zope-proxy-bootstrap
8631 (python-zope-bootstrap-package python-zope-proxy))
8632
8633(define-public python-zope-hookable
8634 (package
8635 (name "python-zope-hookable")
8636 (version "7.0")
8637 (source
8638 (origin
8639 (method git-fetch)
8640 (uri (git-reference
8641 (url "https://github.com/zopefoundation/zope.hookable")
8642 (commit version)))
8643 (file-name (git-file-name name version))
8644 (sha256
8645 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
8646 (build-system pyproject-build-system)
8647 (arguments
8648 (list
8649 #:phases
8650 #~(modify-phases %standard-phases
8651 (replace 'check
8652 (lambda* (#:key tests? #:allow-other-keys)
8653 (if tests?
8654 (invoke "zope-testrunner" "--test-path=src")
8655 (format #t "test suite not run~%")))))))
8656 (native-inputs (list python-zope-testing python-zope-testrunner
8657 python-setuptools))
8658 (home-page "https://zopehookable.readthedocs.io")
8659 (synopsis "Zope hookable")
8660 (description
8661 "This package supports the efficient creation of hookable objects, which
8662are callable objects that are meant to be optionally replaced. The idea is
8663that you create a function that does some default thing and make i hookable.
8664Later, someone can modify what it does by calling its sethook method and
8665changing its implementation. All users of the function, including those that
8666imported it, will see the change.")
8667 (license license:zpl2.1)))
8668
8669(define-public python-zope-location
8670 (package
8671 (name "python-zope-location")
8672 (version "6.0")
8673 (source
8674 (origin
8675 (method git-fetch)
8676 (uri (git-reference
8677 (url "https://github.com/zopefoundation/zope.location")
8678 (commit version)))
8679 (file-name (git-file-name name version))
8680 (sha256
8681 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
8682 (build-system pyproject-build-system)
8683 (arguments
8684 (list
8685 #:phases
8686 #~(modify-phases %standard-phases
8687 (replace 'check
8688 (lambda* (#:key tests? #:allow-other-keys)
8689 (if tests?
8690 (invoke "zope-testrunner" "--test-path=src")
8691 (format #t "test suite not run~%")))))))
8692 (native-inputs (list python-zope-testrunner python-setuptools))
8693 (propagated-inputs (list python-zope-interface python-zope-proxy
8694 python-zope-schema))
8695 (home-page "https://zopelocation.readthedocs.io")
8696 (synopsis "Zope location library")
8697 (description
8698 "Zope.location implements the concept of \"locations\" in Zope3, which
8699are are special objects that have a structural location.")
8700 (license license:zpl2.1)))
8701
8702(define-public python-zope-location-bootstrap
8703 (python-zope-bootstrap-package python-zope-location))
8704
8705(define-public python-zope-security
8706 (package
8707 (name "python-zope-security")
8708 (version "7.3")
8709 (source
8710 (origin
8711 (method git-fetch)
8712 (uri (git-reference
8713 (url "https://github.com/zopefoundation/zope.security")
8714 (commit version)))
8715 (file-name (git-file-name name version))
8716 (sha256
8717 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
8718 (build-system pyproject-build-system)
8719 (arguments
8720 (list
8721 #:phases
8722 #~(modify-phases %standard-phases
8723 (replace 'check
8724 (lambda* (#:key tests? #:allow-other-keys)
8725 (if tests?
8726 (invoke "zope-testrunner" "--test-path=src")
8727 (format #t "test suite not run~%")))))))
8728 (propagated-inputs
8729 (list python-zope-component
8730 python-zope-i18nmessageid
8731 python-zope-interface
8732 python-zope-location
8733 python-zope-proxy
8734 python-zope-schema))
8735 (native-inputs
8736 (list python-btrees
8737 python-zope-component-bootstrap
8738 python-zope-configuration-bootstrap
8739 python-zope-location-bootstrap
8740 python-zope-testing
8741 python-zope-testrunner
8742 python-setuptools))
8743 (home-page "https://zopesecurity.readthedocs.io")
8744 (synopsis "Zope security framework")
8745 (description "Zope.security provides a generic mechanism to implement
8746security policies on Python objects.")
8747 (license license:zpl2.1)))
8748
8749(define-public python-zope-security-bootstrap
8750 (package
8751 (inherit (python-zope-bootstrap-package python-zope-security))
8752 (propagated-inputs
8753 (list python-zope-i18nmessageid
8754 python-zope-interface
8755 python-zope-proxy-bootstrap
8756 python-zope-schema))))
8757
8758(define-public python-zope-component
8759 (package
8760 (name "python-zope-component")
8761 (version "7.0")
8762 (source
8763 (origin
8764 (method git-fetch)
8765 (uri (git-reference
8766 (url "https://github.com/zopefoundation/zope.component")
8767 (commit version)))
8768 (file-name (git-file-name name version))
8769 (sha256
8770 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
8771 (build-system pyproject-build-system)
8772 (arguments
8773 (list
8774 #:phases
8775 #~(modify-phases %standard-phases
8776 (replace 'check
8777 (lambda* (#:key tests? #:allow-other-keys)
8778 (if tests?
8779 (invoke "zope-testrunner" "--test-path=src")
8780 (format #t "test suite not run~%")))))))
8781 (native-inputs
8782 (list python-persistent
8783 python-zope-configuration-bootstrap
8784 python-zope-i18nmessageid
8785 python-zope-location-bootstrap
8786 python-zope-proxy-bootstrap
8787 python-zope-security-bootstrap
8788 python-zope-testing
8789 python-zope-testrunner
8790 python-setuptools))
8791 (propagated-inputs
8792 (list python-zope-deferredimport python-zope-deprecation
8793 python-zope-event python-zope-hookable python-zope-interface))
8794 (home-page "https://zopecomponent.readthedocs.io")
8795 (synopsis "Zope Component Architecture")
8796 (description
8797 "Zope.component represents the core of the Zope Component Architecture.
8798Together with the zope.interface package, it provides facilities for defining,
8799registering and looking up components.")
8800 (license license:zpl2.1)))
8801
8802(define-public python-zope-component-bootstrap
8803 (python-zope-bootstrap-package python-zope-component))
8804
8805(define-public python-zope-deferredimport
8806 (package
8807 (name "python-zope-deferredimport")
8808 (version "6.0")
8809 (source
8810 (origin
8811 (method git-fetch)
8812 (uri (git-reference
8813 (url "https://github.com/zopefoundation/zope.deferredimport")
8814 (commit version)))
8815 (file-name (git-file-name name version))
8816 (sha256
8817 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
8818 (build-system pyproject-build-system)
8819 (arguments
8820 (list
8821 #:phases
8822 #~(modify-phases %standard-phases
8823 (replace 'check
8824 (lambda* (#:key tests? #:allow-other-keys)
8825 (if tests?
8826 (invoke "zope-testrunner" "--test-path=src")
8827 (format #t "test suite not run~%")))))))
8828 (propagated-inputs (list python-zope-proxy))
8829 (native-inputs (list python-zope-testrunner python-setuptools))
8830 (home-page "https://zopedeferredimport.readthedocs.io")
8831 (synopsis "Defer imports until used by code")
8832 (description
8833 "Often, especially for package modules, you want to import names for
8834convenience, but not actually perform the imports until necessary. The
8835@code{zope.deferredimport} package provided facilities for defining names in
8836modules that will be imported from somewhere else when used. You can also cause
8837deprecation warnings to be issued when a variable is used.")
8838 (license license:zpl2.1)))
8839
8840(define-public python-ndg-httpsclient
8841 (package
8842 (name "python-ndg-httpsclient")
8843 (version "0.5.1")
8844 (source
8845 (origin
8846 (method git-fetch)
8847 (uri (git-reference
8848 (url "https://github.com/cedadev/ndg_httpsclient/")
8849 (commit version)))
8850 (file-name (git-file-name name version))
8851 (sha256
8852 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
8853 (build-system pyproject-build-system)
8854 (arguments
8855 (list
8856 #:tests? #f)) ;Tests appear to require networking.
8857 (native-inputs (list python-setuptools))
8858 (propagated-inputs (list python-pyasn1 python-pyopenssl))
8859 (synopsis "HTTPS support for Python's httplib and urllib2")
8860 (description
8861 "This is a HTTPS client implementation for httplib and urllib2 based on
8862PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
8863the default provided with Python and, importantly, enables full verification
8864of the SSL peer.")
8865 (home-page "https://github.com/cedadev/ndg_httpsclient/")
8866 (license license:bsd-3)))
8867
8868(define-public python-netaddr
8869 (package
8870 (name "python-netaddr")
8871 (version "1.3.0")
8872 (source
8873 (origin
8874 (method url-fetch)
8875 (uri (pypi-uri "netaddr" version))
8876 (sha256
8877 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
8878 (build-system pyproject-build-system)
8879 (native-inputs (list python-poetry-core
8880 python-pytest
8881 python-setuptools
8882 python-wheel))
8883 (home-page "https://netaddr.readthedocs.io")
8884 (synopsis "Pythonic manipulation of network addresses")
8885 (description
8886 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
8887and MAC network addresses.")
8888 (license license:bsd-3)))
8889
8890(define-public python-nh3
8891 (package
8892 (name "python-nh3")
8893 (version "0.2.20")
8894 (source
8895 (origin
8896 (method url-fetch)
8897 (uri (pypi-uri "nh3" version))
8898 (sha256
8899 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
8900 (build-system pyproject-build-system)
8901 (arguments
8902 (list
8903 #:imported-modules `(,@%cargo-build-system-modules
8904 ,@%pyproject-build-system-modules)
8905 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
8906 (guix build pyproject-build-system)
8907 (guix build utils))
8908 #:phases
8909 #~(modify-phases %standard-phases
8910 (add-after 'unpack 'prepare-cargo-build-system
8911 (lambda args
8912 (for-each
8913 (lambda (phase)
8914 (format #t "Running cargo phase: ~a~%" phase)
8915 (apply (assoc-ref cargo:%standard-phases phase)
8916 #:cargo-target #$(cargo-triplet)
8917 args))
8918 '(unpack-rust-crates
8919 configure
8920 check-for-pregenerated-files
8921 patch-cargo-checksums)))))))
8922 (native-inputs
8923 (append
8924 (list maturin python-pytest rust `(,rust "cargo"))
8925 (or (and=> (%current-target-system)
8926 (compose list make-rust-sysroot))
8927 '())))
8928 (inputs (cargo-inputs 'python-nh3))
8929 (home-page "https://nh3.readthedocs.io")
8930 (synopsis "Python bindings to Ammonia HTML sanitization library")
8931 (description "This package provides Python bindings to Ammonia HTML
8932sanitizer Rust crate.")
8933 (license license:expat)))
8934
8935(define-public python-noiseprotocol
8936 (package
8937 (name "python-noiseprotocol")
8938 (version "0.3.1")
8939 (source
8940 (origin
8941 (method git-fetch)
8942 (uri (git-reference
8943 (url "https://github.com/plizonczyk/noiseprotocol")
8944 (commit (string-append "v" version))))
8945 (file-name (git-file-name name version))
8946 (sha256
8947 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
8948 (build-system pyproject-build-system)
8949 (propagated-inputs (list python-cryptography))
8950 (native-inputs (list python-setuptools python-pytest))
8951 (home-page "https://github.com/plizonczyk/noiseprotocol")
8952 (synopsis "Implementation of Noise Protocol Framework")
8953 (description
8954 "This package provides an implementation of Noise Protocol Framework.")
8955 (license license:expat)))
8956
8957(define-public python-webrtcvad-wheels
8958 (package
8959 (name "python-webrtcvad-wheels")
8960 (version "2.0.14")
8961 (source
8962 (origin
8963 (method git-fetch)
8964 (uri (git-reference
8965 (url "https://github.com/daanzu/py-webrtcvad-wheels")
8966 (commit (string-append "v" version))))
8967 (file-name (git-file-name name version))
8968 (sha256
8969 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
8970 (build-system pyproject-build-system)
8971 (native-inputs (list python-psutil python-pytest python-setuptools))
8972 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
8973 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
8974 (description
8975 "This package provides a Python interface to the Google
8976@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
8977 (license license:expat)))
8978
8979(define-public python-websocket-client
8980 (package
8981 (name "python-websocket-client")
8982 (version "1.8.0")
8983 (source
8984 (origin
8985 (method url-fetch)
8986 (uri (pypi-uri "websocket_client" version))
8987 (sha256
8988 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
8989 (build-system pyproject-build-system)
8990 (arguments
8991 (list
8992 #:test-flags
8993 ;; This test requires networking.
8994 '(list "-k" "not testConnect")))
8995 (native-inputs
8996 (list python-pysocks
8997 python-pytest
8998 python-setuptools
8999 python-websockets
9000 python-wheel))
9001 (home-page "https://github.com/websocket-client/websocket-client")
9002 (synopsis "WebSocket client for Python")
9003 (description "The Websocket-client module provides the low level APIs for
9004WebSocket usage in Python programs.")
9005 (license license:lgpl2.1+)))
9006
9007(define-public python-websocket-client-0.59
9008 (package
9009 (inherit python-websocket-client)
9010 (version "0.59.0")
9011 (source
9012 (origin
9013 (method url-fetch)
9014 (uri (pypi-uri "websocket-client" version))
9015 (sha256
9016 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
9017 (native-inputs
9018 (modify-inputs native-inputs
9019 (append python-six)))))
9020
9021(define-public python-purl
9022 (package
9023 (name "python-purl")
9024 (version "1.6")
9025 (source
9026 (origin
9027 (method git-fetch)
9028 (uri (git-reference
9029 (url "https://github.com/codeinthehole/purl")
9030 (commit version)))
9031 (file-name (git-file-name name version))
9032 (sha256
9033 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
9034 (build-system pyproject-build-system)
9035 (arguments
9036 (list
9037 #:test-flags #~(list "--pyargs" "./tests")))
9038 (native-inputs (list python-pytest python-setuptools))
9039 (propagated-inputs (list python-six))
9040 (home-page "https://github.com/codeinthehole/purl")
9041 (synopsis "Python package for URL manipulation")
9042 (description "Purl is a Python package for handling URLs.")
9043 (license license:expat)))
9044
9045(define-public python-requests
9046 (package
9047 (name "python-requests")
9048 (version "2.34.2")
9049 (source (origin
9050 (method url-fetch)
9051 (uri (pypi-uri "requests" version))
9052 (sha256
9053 (base32
9054 "1vdrc3lq9x848760n7mdhn8whsfslk30pmnnk0v4caafmr69527j"))))
9055 (build-system pyproject-build-system)
9056 (arguments
9057 (list #:test-flags
9058 ;; These require internet access
9059 '(list "--ignore=tests/test_requests.py"
9060 "-k" (string-append "not test_use_proxy_from_environment"
9061 " and not requests.sessions.Session"
9062 " and not requests.models.PreparedRequest"
9063 " and not requests.api.request")
9064 "tests/")))
9065 (propagated-inputs
9066 (list python-certifi
9067 python-charset-normalizer
9068 python-idna
9069 python-urllib3))
9070 (native-inputs
9071 (list python-pytest
9072 python-pytest-mock
9073 python-setuptools))
9074 (home-page "https://requests.readthedocs.io/")
9075 (synopsis "Python HTTP library")
9076 (description
9077 "Requests is a Python HTTP client library. It aims to be easier to use
9078than Python’s urllib2 library.")
9079 (license license:asl2.0)))
9080
9081(define-public python-requests-kerberos
9082 (package
9083 (name "python-requests-kerberos")
9084 (version "0.14.0")
9085 ;; No tests in the PyPI tarball.
9086 (source
9087 (origin
9088 (method git-fetch)
9089 (uri (git-reference
9090 (url "https://github.com/requests/requests-kerberos")
9091 (commit (string-append "v" version))))
9092 (file-name (git-file-name name version))
9093 (sha256
9094 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
9095 (build-system pyproject-build-system)
9096 (propagated-inputs (list python-cryptography
9097 python-pyspnego
9098 python-requests))
9099 (native-inputs (list python-pytest python-pytest-mock python-setuptools
9100 python-wheel))
9101 (home-page "https://github.com/requests/requests-kerberos")
9102 (synopsis "Kerberos authentication handler for python-requests")
9103 (description "This package provides a Kerberos authentication handler for
9104python-requests.")
9105 (license license:isc)))
9106
9107(define-public python-requests-unixsocket2
9108 (package
9109 (name "python-requests-unixsocket2")
9110 (version "1.0.1")
9111 (source
9112 (origin
9113 (method git-fetch)
9114 (uri (git-reference
9115 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
9116 (commit (string-append "v" version))))
9117 (sha256
9118 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
9119 (build-system pyproject-build-system)
9120 (native-inputs
9121 (list nss-certs-for-test
9122 python-hatchling
9123 python-pytest
9124 python-waitress))
9125 (propagated-inputs
9126 (list python-requests
9127 python-urllib3))
9128 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
9129 (synopsis "Talk HTTP via a UNIX domain socket")
9130 (description
9131 "This Python package lets you use the @code{requests} library to talk
9132HTTP via a UNIX domain socket.")
9133 (license license:asl2.0)))
9134
9135(define-public python-requests-ntlm
9136 (package
9137 (name "python-requests-ntlm")
9138 (version "1.3.0")
9139 (source
9140 (origin
9141 (method git-fetch)
9142 (uri (git-reference
9143 (url "https://github.com/requests/requests-ntlm")
9144 (commit (string-append "v" version))))
9145 (file-name (git-file-name name version))
9146 (sha256
9147 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
9148 (build-system pyproject-build-system)
9149 (arguments
9150 (list
9151 #:test-flags
9152 ;; XXX: Connection refused.
9153 #~(list "-k" (string-join
9154 (list "not test_ntlm_http_with_cbt"
9155 "test_ntlm_http_without_cbt"
9156 "test_ntlm_https_with_cbt"
9157 "test_ntlm_https_without_cbt")
9158 " and not "))
9159 #:phases
9160 #~(modify-phases %standard-phases
9161 (add-before 'check 'spawn-test-server
9162 (lambda _
9163 ;; Taken from .github/workflows/ci.yml.
9164 (spawn "python"
9165 (list "python" "-m" "tests.test_server")))))))
9166 (propagated-inputs
9167 (list python-cryptography python-pyspnego python-requests))
9168 (native-inputs (list python-flask python-pytest python-setuptools))
9169 (home-page "https://github.com/requests/requests-ntlm")
9170 (synopsis "NTLM authentication support for Requests")
9171 (description
9172 "This package allows for HTTP NTLM authentication using the requests
9173library.")
9174 (license license:isc)))
9175
9176(define-public python-requests-mock
9177 (package
9178 (name "python-requests-mock")
9179 (version "1.12.1")
9180 (source
9181 (origin
9182 (method url-fetch)
9183 (uri (pypi-uri "requests-mock" version))
9184 (sha256
9185 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
9186 (build-system pyproject-build-system)
9187 (native-inputs
9188 (list python-purl
9189 python-pytest
9190 python-requests-futures
9191 python-setuptools
9192 python-setuptools-scm
9193 python-testtools))
9194 (propagated-inputs
9195 (list python-requests))
9196 (home-page "https://requests-mock.readthedocs.org/")
9197 (synopsis "Mock out responses from the requests package")
9198 (description
9199 "This module provides a building block to stub out the HTTP requests
9200portions of your testing code.")
9201 (license license:asl2.0)))
9202
9203(define-public python-requests-toolbelt
9204 (package
9205 (name "python-requests-toolbelt")
9206 (version "1.0.0")
9207 (source
9208 (origin
9209 (method url-fetch)
9210 (uri (pypi-uri "requests-toolbelt" version))
9211 (sha256
9212 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
9213 (build-system pyproject-build-system)
9214 (arguments
9215 (list
9216 #:test-flags
9217 ;; Requiring networking or fail due not valid certs: AttributeError:
9218 ;; 'MockHTTPResponse' object has no attribute 'close'
9219 #~(list "-k" (string-append "not test_dump_all"
9220 " and not test_dump_response"
9221 " and not test_prepared_request_override_base"
9222 " and not test_prepared_request_with_base"
9223 " and not test_request_override_base"
9224 " and not test_request_with_base"))))
9225 (native-inputs
9226 (list python-betamax
9227 python-mock
9228 python-pyopenssl
9229 python-pytest
9230 python-setuptools
9231 python-trustme
9232 python-wheel))
9233 (propagated-inputs
9234 (list python-requests))
9235 (synopsis "Extensions to python-requests")
9236 (description "This is a toolbelt of useful classes and functions to be used
9237with python-requests.")
9238 (home-page "https://github.com/requests/toolbelt/")
9239 (license license:asl2.0)))
9240
9241(define-public python-requests-ftp
9242 (package
9243 (name "python-requests-ftp")
9244 (version "0.3.1")
9245 (source
9246 (origin
9247 (method git-fetch)
9248 (uri (git-reference
9249 (url "https://github.com/Lukasa/requests-ftp")
9250 (commit (string-append "v" version))))
9251 (file-name (git-file-name name version))
9252 (sha256
9253 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
9254 (build-system pyproject-build-system)
9255 (arguments
9256 ;; XXX: No connection adapters found.
9257 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
9258 (native-inputs
9259 (list python-pyftpdlib python-pytest python-setuptools python-six))
9260 (propagated-inputs (list python-requests))
9261 (home-page "https://github.com/Lukasa/requests-ftp")
9262 (synopsis "FTP Transport Adapter for Requests")
9263 (description "Requests-FTP is an implementation of a simple FTP transport
9264adapter for use with the Requests library.")
9265 (license license:asl2.0)))
9266
9267(define-public python-mohawk
9268 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
9269 (revision "0"))
9270 (package
9271 (name "python-mohawk")
9272 (version (git-version "1.1.0" revision commit))
9273 (source
9274 (origin
9275 (method git-fetch)
9276 (uri (git-reference
9277 (url "https://github.com/kumar303/mohawk")
9278 (commit commit)))
9279 (file-name (git-file-name name version))
9280 (sha256
9281 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
9282 (patches
9283 (search-patches "python-mohawk-pytest.patch"))))
9284 (build-system pyproject-build-system)
9285 (arguments
9286 (list #:test-flags #~(list "mohawk/tests.py")))
9287 (native-inputs (list python-pytest python-setuptools))
9288 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
9289 ;python-six is removed?
9290 (home-page "https://github.com/kumar303/mohawk")
9291 (synopsis "Library for Hawk HTTP authorization")
9292 (description
9293 "Mohawk is an alternate Python implementation of the Hawk HTTP
9294authorization scheme.")
9295 (license license:bsd-3))))
9296
9297(define-public python-msal
9298 (package
9299 (name "python-msal")
9300 (version "1.34.0")
9301 (home-page
9302 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
9303 (source
9304 (origin
9305 (method git-fetch)
9306 (uri (git-reference
9307 (url home-page)
9308 (commit version)))
9309 (file-name (git-file-name name version))
9310 (sha256
9311 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
9312 (patches (search-patches "python-msal-requests.patch"))))
9313 (build-system pyproject-build-system)
9314 (arguments
9315 (list
9316 #:test-flags
9317 #~(list
9318 "--ignore=tests/test_benchmark.py"
9319 ;; XXX: Ignoring cryptography version scheme tests.
9320 "-k"
9321 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
9322 ;; XXX: These tests try to access the network.
9323 "--ignore=tests/test_application.py"
9324 "--ignore=tests/test_ccs.py"
9325 ;; XXX: These tests assume they are run on Windows.
9326 "--ignore=tests/test_mi.py")
9327 #:phases
9328 #~(modify-phases %standard-phases
9329 (add-after 'unpack 'set-cryptography-version
9330 (lambda _
9331 (substitute* "tests/test_cryptography.py"
9332 (("^latest_cryptography_version = @version@")
9333 (format #f "latest_cryptography_version = ~s"
9334 #$(package-version
9335 (this-package-input "python-cryptography")))))))
9336 (add-before 'check 'configure-tests
9337 (lambda* (#:key tests? #:allow-other-keys)
9338 (when tests?
9339 (setenv "TRAVIS_TAG" "1")))))))
9340 (native-inputs
9341 (list nss-certs-for-test python-mock python-pytest python-setuptools))
9342 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
9343 (synopsis "Microsoft Authentication Library (MSAL) for Python")
9344 (description
9345 "The Microsoft Authentication Library for Python enables applications to
9346integrate with the Microsoft identity platform. It allows you to sign in
9347users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
9348Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
9349Microsoft Graph or your own APIs registered with the Microsoft identity
9350platform. It is built using industry standard OAuth2 and OpenID Connect
9351protocols.")
9352 (license license:expat)))
9353
9354(define-public python-oauthlib
9355 (package
9356 (name "python-oauthlib")
9357 (version "3.3.1")
9358 (source
9359 (origin
9360 (method git-fetch)
9361 (uri (git-reference
9362 (url "https://github.com/oauthlib/oauthlib")
9363 (commit (string-append "v" version))))
9364 (file-name (git-file-name name version))
9365 (sha256
9366 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
9367 (build-system pyproject-build-system)
9368 (native-inputs (list python-pytest python-mock python-setuptools))
9369 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
9370 (home-page "https://github.com/oauthlib/oauthlib")
9371 (synopsis "OAuth implementation for Python")
9372 (description
9373 "Oauthlib is a generic, spec-compliant, thorough implementation of the
9374OAuth request-signing logic.")
9375 (license license:bsd-3)))
9376
9377(define-public python-urllib3
9378 (package
9379 (name "python-urllib3")
9380 (version "2.7.0")
9381 (source
9382 (origin
9383 (method url-fetch)
9384 (uri (pypi-uri "urllib3" version))
9385 (sha256
9386 (base32
9387 "0k2za0kdl4y8mdhay0wbnf6522n4ybr61gk7gik19srwnv1hw7i3"))))
9388 (build-system pyproject-build-system)
9389 (arguments `(#:tests? #f))
9390 (native-inputs
9391 (list python-hatch-vcs
9392 python-hatchling
9393 python-setuptools-scm))
9394 (propagated-inputs
9395 (append
9396 ;; These 5 inputs are used to build urrlib3[secure]
9397 (list python-certifi
9398 python-idna
9399 python-pysocks)
9400 (if (member (%current-system)
9401 (package-transitive-supported-systems python-cryptography))
9402 (list python-cryptography)
9403 '())
9404 (if (member (%current-system)
9405 (package-transitive-supported-systems python-pyopenssl))
9406 (list python-pyopenssl)
9407 '())))
9408 (home-page "https://urllib3.readthedocs.io/")
9409 (synopsis "HTTP library with thread-safe connection pooling")
9410 (description
9411 "Urllib3 supports features left out of urllib and urllib2 libraries. It
9412can reuse the same socket connection for multiple requests, it can POST files,
9413supports url redirection and retries, and also gzip and deflate decoding.")
9414 (license license:expat)))
9415
9416(define-public python-urllib3-1.26
9417 (package
9418 (inherit python-urllib3)
9419 (version "1.26.17")
9420 (source
9421 (origin
9422 (method url-fetch)
9423 (uri (pypi-uri "urllib3" version))
9424 (sha256
9425 (base32
9426 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
9427 (native-inputs
9428 (list python-setuptools
9429 python-wheel))))
9430
9431(define-public python-wsgiproxy2
9432 (package
9433 (name "python-wsgiproxy2")
9434 (version "0.5.1")
9435 (source
9436 (origin
9437 (method git-fetch)
9438 (uri (git-reference
9439 (url "https://github.com/gawel/WSGIProxy2/")
9440 (commit version)))
9441 (file-name (git-file-name name version))
9442 (sha256
9443 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
9444 (build-system pyproject-build-system)
9445 (arguments (list #:test-backend #~'unittest))
9446 (native-inputs (list python-webtest python-setuptools))
9447 (propagated-inputs (list python-requests python-six python-urllib3
9448 python-webob))
9449 (home-page "https://github.com/gawel/WSGIProxy2/")
9450 (synopsis "WSGI Proxy with various http client backends")
9451 (description
9452 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
9453function calls into HTTP requests. It also includes code to sign requests and
9454pass private data, and to spawn subprocesses to handle requests.")
9455 (license license:expat)))
9456
9457(define-public python-pastedeploy
9458 (package
9459 (name "python-pastedeploy")
9460 (version "3.1.0")
9461 (source
9462 (origin
9463 (method url-fetch)
9464 (uri (pypi-uri "PasteDeploy" version))
9465 (sha256
9466 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
9467 (build-system pyproject-build-system)
9468 (native-inputs (list python-pytest python-setuptools))
9469 (home-page "https://pylonsproject.org/")
9470 (synopsis "Load, configure, and compose WSGI applications and servers")
9471 (description
9472 "This tool provides code to load WSGI applications and servers from URIs;
9473these URIs can refer to Python Eggs for INI-style configuration files. Paste
9474Script provides commands to serve applications based on this configuration
9475file.")
9476 (license license:expat)))
9477
9478(define-public python-webtest
9479 (package
9480 (name "python-webtest")
9481 (version "3.0.6")
9482 (source
9483 (origin
9484 (method url-fetch)
9485 (uri (pypi-uri "webtest" version))
9486 (sha256
9487 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
9488 (build-system pyproject-build-system)
9489 (arguments
9490 ;; Tests require python-pyquery, which creates a circular dependency.
9491 `(#:tests? #f))
9492 (native-inputs
9493 (list python-setuptools))
9494 (propagated-inputs
9495 (list python-beautifulsoup4
9496 python-waitress
9497 python-webob))
9498 (home-page "https://docs.pylonsproject.org/projects/webtest/")
9499 (synopsis "Helper to test WSGI applications")
9500 (description
9501 "Webtest allows you to test your Python web applications without
9502starting an HTTP server. It supports anything that supports the minimum of
9503WSGI.")
9504 (license license:expat)))
9505
9506(define-public python-flask
9507 (package
9508 (name "python-flask")
9509 (version "3.1.3")
9510 (source
9511 (origin
9512 (method git-fetch)
9513 (uri (git-reference
9514 (url "https://github.com/pallets/flask")
9515 (commit version)))
9516 (file-name (git-file-name name version))
9517 (sha256
9518 (base32 "006s5rm4syg48ymmwlnrkx8f8j758waksvhdsfiqx51zv52c0p8l"))))
9519 (build-system pyproject-build-system)
9520 (arguments
9521 (list
9522 #:test-flags
9523 ;; assert 404 == 400
9524 ;; This test is removed on master branch.
9525 #~(list (string-append "--deselect=tests/test_reqctx.py"
9526 "::test_bad_environ_raises_bad_request"))))
9527 (native-inputs
9528 (list python-flit-core
9529 python-pytest))
9530 (propagated-inputs
9531 (list python-blinker
9532 python-click
9533 python-itsdangerous
9534 python-jinja2
9535 python-markupsafe
9536 python-werkzeug
9537 ;; [optional]
9538 python-asgiref
9539 python-dotenv))
9540 (home-page "https://palletsprojects.com/p/flask/")
9541 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
9542 (description "Flask is a micro web framework based on the Werkzeug toolkit
9543and Jinja2 template engine. It is called a micro framework because it does not
9544presume or force a developer to use a particular tool or library.")
9545 (license license:bsd-3)))
9546
9547(define-public python-flask-compress
9548 (package
9549 (name "python-flask-compress")
9550 (version "1.24")
9551 (source
9552 (origin
9553 (method git-fetch)
9554 (uri (git-reference
9555 (url "https://github.com/colour-science/flask-compress")
9556 (commit (string-append "v" version))))
9557 (file-name (git-file-name name version))
9558 (sha256
9559 (base32 "0mid5c34r75vax1r7l2l5sjjhs6bl8rbsdmhc7kz39snq6xw3cr5"))))
9560 (build-system pyproject-build-system)
9561 (native-inputs
9562 (list python-flask-caching
9563 python-pytest
9564 python-setuptools
9565 python-setuptools-scm))
9566 (propagated-inputs
9567 (list python-backports-zstd
9568 python-brotli
9569 python-flask))
9570 (home-page "https://github.com/colour-science/flask-compress")
9571 (synopsis "Compress responses in a Flask app")
9572 (description
9573 "This package lets you compress Flask application responses and static
9574files with gzip, deflate or brotli. Flask-Compress both adds the various
9575headers required for a compressed response and compresses the response data.")
9576 (license license:expat)))
9577
9578(define-public python-flask-seasurf
9579 (package
9580 (name "python-flask-seasurf")
9581 (version "2.0.0")
9582 (source (origin
9583 (method url-fetch)
9584 (uri (pypi-uri "Flask-SeaSurf" version))
9585 (sha256
9586 (base32
9587 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
9588 (build-system pyproject-build-system)
9589 (arguments
9590 (list #:tests? #false)) ;there are none
9591 (propagated-inputs (list python-flask))
9592 (native-inputs (list python-setuptools python-wheel))
9593 (home-page "https://github.com/maxcountryman/flask-seasurf/")
9594 (synopsis "CSRF extension for Flask")
9595 (description "SeaSurf is a Flask extension for preventing cross-site
9596request forgery (CSRF). CSRF attacks are problematic because the mechanism
9597they use is relatively easy to exploit. This extension attempts to aid you in
9598securing your application from such attacks. This extension is based on the
9599Django middleware.")
9600 (license license:bsd-3)))
9601
9602(define-public python-flask-wtf
9603 (package
9604 (name "python-flask-wtf")
9605 (version "1.2.2")
9606 (source
9607 (origin
9608 (method url-fetch)
9609 (uri (pypi-uri "Flask-WTF" version))
9610 (sha256
9611 (base32
9612 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
9613 (build-system pyproject-build-system)
9614 (propagated-inputs
9615 (list python-flask python-flask python-itsdangerous python-wtforms))
9616 (native-inputs
9617 (list python-hatchling python-pytest))
9618 (home-page "https://github.com/lepture/flask-wtf")
9619 (synopsis "Simple integration of Flask and WTForms")
9620 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
9621upload, and reCAPTCHA.")
9622 (license license:bsd-3)))
9623
9624(define-public python-flask-multistatic
9625 (package
9626 (name "python-flask-multistatic")
9627 (version "1.0")
9628 (source
9629 (origin
9630 (method url-fetch)
9631 (uri (pypi-uri "flask-multistatic" version))
9632 (sha256
9633 (base32
9634 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
9635 (build-system pyproject-build-system)
9636 (arguments (list #:tests? #f)) ; No tests upstream.
9637 (native-inputs (list python-setuptools))
9638 (propagated-inputs (list python-flask))
9639 (home-page "https://pagure.io/flask-multistatic")
9640 (synopsis "Flask plugin to allow overriding static files")
9641 (description "@code{flask-multistatic} is a flask plugin that adds support
9642for overriding static files.")
9643 (license license:gpl3+)))
9644
9645(define-public python-responses
9646 (package
9647 (name "python-responses")
9648 (version "0.25.3")
9649 (source (origin
9650 (method url-fetch)
9651 (uri (pypi-uri "responses" version))
9652 (sha256
9653 (base32
9654 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
9655 (build-system pyproject-build-system)
9656 (native-inputs
9657 (list python-pytest
9658 python-pytest-asyncio
9659 python-pytest-httpserver
9660 python-setuptools
9661 python-tomli
9662 python-tomli-w
9663 python-wheel))
9664 (propagated-inputs
9665 (list python-requests
9666 python-pyyaml
9667 python-urllib3))
9668 (home-page "https://github.com/getsentry/responses")
9669 (synopsis "Utility for mocking out the `requests` Python library")
9670 (description "A utility library for mocking out the `requests` Python
9671library.")
9672 (license license:asl2.0)))
9673
9674(define-public python-grequests
9675 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
9676 (revision "0"))
9677 (package
9678 (name "python-grequests")
9679 (version (git-version "0.7.0" revision commit))
9680 (source
9681 (origin
9682 (method git-fetch)
9683 (uri (git-reference
9684 (url "https://github.com/kennethreitz/grequests")
9685 (commit commit)))
9686 (file-name (git-file-name name version))
9687 (sha256
9688 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
9689 (build-system pyproject-build-system)
9690 (arguments
9691 (list
9692 ;; XXX: Most failing tests seem to be caused by network access,
9693 ;; but there is no easy/flag way to disable tests selectively.
9694 #:tests? #f
9695 #:test-backend #~'unittest
9696 #:test-flags #~(list "tests.py")))
9697 (propagated-inputs (list python-gevent python-requests))
9698 (native-inputs (list python-setuptools))
9699 (home-page "https://github.com/kennethreitz/grequests")
9700 (synopsis "Python library for asynchronous HTTP requests")
9701 (description
9702 "GRequests is a Python library that allows you to use @code{Requests}
9703with @code{Gevent} to make asynchronous HTTP Requests easily.")
9704 (license license:bsd-2))))
9705
9706(define-public python-gwebsockets
9707 (package
9708 (name "python-gwebsockets")
9709 (version "0.7")
9710 (source
9711 (origin
9712 (method git-fetch)
9713 (uri (git-reference
9714 (url "https://github.com/sugarlabs/gwebsockets")
9715 (commit (string-append "v" version))))
9716 (file-name (git-file-name name version))
9717 (sha256
9718 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
9719 (build-system pyproject-build-system)
9720 (arguments (list #:tests? #f)) ; No tests upstream.
9721 (native-inputs (list python-setuptools))
9722 (propagated-inputs (list python-pygobject))
9723 (home-page "https://github.com/sugarlabs/gwebsockets")
9724 (synopsis "GLib based websockets server")
9725 (description
9726 "This package provides a websocket server written in Python. It uses GIO
9727for network communication and hence it easily integrates with the GLib
9728mainloop.")
9729 (license license:asl2.0)))
9730
9731(define-public python-geventhttpclient
9732 (package
9733 (name "python-geventhttpclient")
9734 (version "2.3.9")
9735 (source (origin
9736 (method git-fetch)
9737 (uri (git-reference
9738 (url "https://github.com/geventhttpclient/geventhttpclient")
9739 (commit version)
9740 (recursive? #true)))
9741 (file-name (git-file-name name version))
9742 (sha256
9743 (base32
9744 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
9745 (build-system pyproject-build-system)
9746 (arguments
9747 (list
9748 #:test-flags
9749 ;; Disable network tests.
9750 '(list "-k"
9751 (string-append "not test_client_simple"
9752 " and not test_client_ssl"
9753 " and not test_client_with_default_headers"
9754 " and not test_client_without_leading_slash"
9755 " and not test_download"
9756 " and not test_fail_invalid_ca_certificate"
9757 " and not test_httpbin_multipart"
9758 " and not test_multi_queries_greenlet_safe"
9759 " and not test_no_form_encode_header"
9760 " and not test_no_form_encoded_header"
9761 " and not test_request_with_headers"
9762 " and not test_response_context_manager"
9763 " and not test_urllib_request"))))
9764 (native-inputs (list nss-certs-for-test
9765 python-dpkt python-pytest python-requests
9766 python-setuptools python-wheel))
9767 (propagated-inputs (list python-brotli python-certifi python-gevent
9768 python-urllib3))
9769 (home-page "https://github.com/geventhttpclient/geventhttpclient")
9770 (synopsis "HTTP client library for gevent")
9771 (description "@code{python-geventhttpclient} is a high performance,
9772concurrent HTTP client library for python using @code{gevent}.")
9773 (license license:expat)))
9774
9775(define-public python-gevent-websocket
9776 (package
9777 (name "python-gevent-websocket")
9778 (version "0.10.1")
9779 (source
9780 (origin
9781 (method url-fetch)
9782 (uri (pypi-uri "gevent-websocket" version))
9783 (sha256
9784 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
9785 (build-system pyproject-build-system)
9786 (arguments
9787 (list #:tests? #f)) ; no tests in PyPI or git
9788 (native-inputs
9789 (list python-setuptools
9790 python-wheel))
9791 (propagated-inputs
9792 (list python-gevent))
9793 (home-page "https://gitlab.com/noppo/gevent-websocket")
9794 (synopsis "Websocket handler for the gevent pywsgi server")
9795 (description
9796 "Websocket handler for the gevent pywsgi server, a Python network
9797library.
9798
9799Features include:
9800@itemize
9801@item integration on both socket level or using an abstract interface
9802@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
9803Protocol, WAMP}
9804@item easily extendible using a simple WebSocket protocol plugin API
9805@end itemize")
9806 (license license:asl2.0)))
9807
9808(define-public python-requests-oauthlib
9809 (package
9810 (name "python-requests-oauthlib")
9811 (version "2.0.0")
9812 (source
9813 (origin
9814 (method git-fetch)
9815 (uri (git-reference (url
9816 "https://github.com/requests/requests-oauthlib")
9817 (commit (string-append "v" version))))
9818 (file-name (git-file-name name version))
9819 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
9820 (build-system pyproject-build-system)
9821 (arguments
9822 (list
9823 #:test-flags
9824 #~(list
9825 "--ignore=tests/test_core.py" ; requires network access.
9826 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
9827 "-k" "not test_fetch_access_token"))) ; flaky tests.
9828 (native-inputs
9829 (list python-requests-mock python-pytest python-setuptools))
9830 (propagated-inputs
9831 (list python-oauthlib python-requests))
9832 (home-page "https://github.com/requests/requests-oauthlib")
9833 (synopsis "OAuthlib authentication support for Requests")
9834 (description
9835 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
9836provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
9837 (license license:isc)))
9838
9839(define-public python-s3fs
9840 (package
9841 (name "python-s3fs")
9842 (version "2026.1.0")
9843 (source
9844 (origin
9845 (method url-fetch)
9846 (uri (pypi-uri "s3fs" version))
9847 (sha256
9848 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
9849 (build-system pyproject-build-system)
9850 ;; TODO: Many tests fail with "No such file or directory" raised by the
9851 ;; HTTP client.
9852 (arguments (list #:tests? #false))
9853 (native-inputs
9854 (list python-setuptools))
9855 (propagated-inputs
9856 (list python-aiobotocore
9857 python-aiohttp
9858 python-fsspec))
9859 (home-page "https://github.com/fsspec/s3fs/")
9860 (synopsis "Convenient filesystem interface over S3")
9861 (description "This package provides a convenient filesystem interface over
9862S3.")
9863 (license license:bsd-3)))
9864
9865(define-public python-s3transfer
9866 (package
9867 (name "python-s3transfer")
9868 (version "0.16.0")
9869 (source
9870 (origin
9871 (method url-fetch)
9872 (uri (pypi-uri "s3transfer" version))
9873 (sha256
9874 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
9875 (build-system pyproject-build-system)
9876 (arguments
9877 (list
9878 ;; tests: 630 passed, 51 skipped
9879 #:test-flags
9880 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
9881 ;; Tests require networking.
9882 "--ignore" "tests/integration")))
9883 (native-inputs
9884 (list python-pytest
9885 python-pytest-xdist
9886 python-setuptools))
9887 (propagated-inputs
9888 (list python-botocore))
9889 (home-page "https://github.com/boto/s3transfer")
9890 (synopsis "Amazon S3 Transfer Manager")
9891 (description
9892 "S3transfer is a Python library for managing Amazon S3 transfers.")
9893 (license license:asl2.0)))
9894
9895(define-public python-flask-restful
9896 (package
9897 (name "python-flask-restful")
9898 (version "0.3.10")
9899 (source
9900 (origin
9901 (method url-fetch)
9902 (uri (pypi-uri "Flask-RESTful" version))
9903 (sha256
9904 (base32
9905 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
9906 (build-system pyproject-build-system)
9907 (arguments
9908 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
9909 (list #:tests? #f))
9910 (propagated-inputs
9911 (list python-aniso8601 python-flask python-pytz))
9912 (native-inputs
9913 (list python-blinker
9914 python-mock
9915 python-pytest
9916 python-setuptools
9917 python-six))
9918 (home-page "https://github.com/flask-restful/flask-restful/")
9919 (synopsis "Flask module for creating REST APIs")
9920 (description
9921 "This package contains a Flask module for creating REST APIs.")
9922 (license license:bsd-3)))
9923
9924(define-public python-flask-sqlalchemy
9925 (package
9926 (name "python-flask-sqlalchemy")
9927 ;; Released version fails tests in Python 3.12.
9928 (properties '((commit . "168cb4b7b50fe5176307a10d873781bfafc6eeda")
9929 (revision . "0")))
9930 (version (git-version "3.1.1"
9931 (assoc-ref properties 'revision)
9932 (assoc-ref properties 'commit)))
9933 (source
9934 (origin
9935 (method git-fetch)
9936 (uri (git-reference
9937 (url "https://github.com/pallets-eco/flask-sqlalchemy")
9938 (commit (assoc-ref properties 'commit))))
9939 (file-name (git-file-name name version))
9940 (sha256
9941 (base32
9942 "0xw8v1540m21x9crpgb0i3rxyhh1d24ldg354vndw9cif74ls5p6"))))
9943 (build-system pyproject-build-system)
9944 (arguments
9945 (list
9946 #:test-flags
9947 #~(list "-k" (string-append "not test_explicit_table[db2]"
9948 " and not test_explicit_table[db4]")
9949 "-W" "ignore::DeprecationWarning")))
9950 (native-inputs
9951 (list python-flit-core
9952 python-pytest))
9953 (propagated-inputs
9954 (list python-flask
9955 python-sqlalchemy-2))
9956 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
9957 (synopsis "Module adding SQLAlchemy support to your Flask application")
9958 (description
9959 "This package adds SQLAlchemy support to your Flask application.")
9960 (license license:bsd-3)))
9961
9962(define-public python-flask-restful-swagger
9963 (package
9964 (name "python-flask-restful-swagger")
9965 (version "0.20.1")
9966 ;; XXX: Unbundle minified javascript.
9967 (source
9968 (origin
9969 (method git-fetch)
9970 (uri (git-reference
9971 (url "https://github.com/rantav/flask-restful-swagger")
9972 (commit version)))
9973 (file-name (git-file-name name version))
9974 (sha256
9975 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
9976 (build-system pyproject-build-system)
9977 (arguments (list #:tests? #f)) ; No tests.
9978 (native-inputs (list python-setuptools))
9979 (propagated-inputs (list python-flask-restful python-six))
9980 (home-page "https://github.com/rantav/flask-restful-swagger")
9981 (synopsis "Extract Swagger specs from Flask-Restful projects")
9982 (description "This package lets you extract Swagger API documentation
9983specs from your Flask-Restful projects.")
9984 (license license:expat)))
9985
9986(define-public python-htmlmin
9987 (package
9988 (name "python-htmlmin")
9989 (version "0.1.12")
9990 (source
9991 (origin
9992 (method url-fetch)
9993 (uri (pypi-uri "htmlmin" version))
9994 (sha256
9995 (base32
9996 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
9997 (build-system pyproject-build-system)
9998 (arguments
9999 (list #:tests? #f)) ; no tests
10000 (native-inputs (list python-setuptools))
10001 (home-page "https://htmlmin.readthedocs.org/en/latest/")
10002 (synopsis "HTML minifier")
10003 (description "@code{htmlmin} is an HTML minifier that just works.
10004It comes with safe defaults and easily configurable options.")
10005 (license license:bsd-3)))
10006
10007;; XXX: Forked renamed and updated version.
10008(define-public python-htmlmin2
10009 (package/inherit python-htmlmin
10010 (name "python-htmlmin2")
10011 (version "0.1.13")
10012 (source
10013 (origin
10014 (method git-fetch)
10015 (uri (git-reference
10016 (url "https://github.com/wilhelmer/htmlmin")
10017 (commit (string-append "v" version))))
10018 (file-name (git-file-name name version))
10019 (sha256
10020 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
10021 (build-system pyproject-build-system)
10022 (arguments (list #:test-backend #~'unittest))
10023 (native-inputs (list python-setuptools))
10024 (home-page "https://github.com/wilhelmer/htmlmin")
10025 (description
10026 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
10027defaults and easily configurable options. This variant is an updated fork of
10028the original @code{python-htmlmin}.")
10029 (license license:bsd-3)))
10030
10031(define-public python-flask-htmlmin
10032 (package
10033 (name "python-flask-htmlmin")
10034 (version "3.0.0")
10035 (source
10036 (origin
10037 (method git-fetch)
10038 (uri (git-reference
10039 (url "https://github.com/hamidfzm/Flask-HTMLmin")
10040 (commit (string-append "v" version))))
10041 (file-name (git-file-name name version))
10042 (sha256
10043 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
10044 (build-system pyproject-build-system)
10045 (native-inputs (list python-pytest python-setuptools))
10046 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
10047 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
10048 (synopsis "HTML response minifier for Flask")
10049 (description
10050 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
10051 (license license:bsd-3)))
10052
10053(define-public python-jsmin
10054 (package
10055 (name "python-jsmin")
10056 (version "3.0.1")
10057 (source
10058 (origin
10059 (method url-fetch)
10060 (uri (pypi-uri "jsmin" version))
10061 (sha256
10062 (base32
10063 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
10064 (build-system pyproject-build-system)
10065 (arguments (list #:test-backend #~'unittest))
10066 (native-inputs
10067 (list python-setuptools))
10068 (home-page "https://github.com/tikitu/jsmin/")
10069 (synopsis "Python JavaScript minifier")
10070 (description
10071 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
10072on the command line.")
10073 (license license:expat)))
10074
10075(define-public python-flask-login
10076 (let ((commit "c8bba84b9ba6768e878317fc46c54bd13fa1ac07")
10077 (revision "0"))
10078 (package
10079 (name "python-flask-login")
10080 (version (git-version "0.6.3" revision commit))
10081 (source
10082 (origin
10083 (method git-fetch)
10084 (uri (git-reference
10085 (url "https://github.com/maxcountryman/flask-login")
10086 (commit commit)))
10087 (file-name (git-file-name name version))
10088 (sha256
10089 (base32 "0q0ga1zwm06kvpnsf50ckmsc77959i1spx7z2y3jkbwaa4klsyli"))))
10090 (build-system pyproject-build-system)
10091 (propagated-inputs
10092 (list python-flask))
10093 (native-inputs
10094 ;; For tests.
10095 (list python-blinker
10096 python-flit-core
10097 python-mock
10098 python-pytest
10099 python-semantic-version
10100 python-werkzeug))
10101 (home-page "https://github.com/maxcountryman/flask-login")
10102 (synopsis "User session management for Flask")
10103 (description
10104 "@code{Flask-Login} provides user session management for Flask. It
10105handles the common tasks of logging in, logging out, and remembering your
10106users' sessions over extended periods of time.")
10107 (license license:expat))))
10108
10109(define-public python-oauth2client
10110 (package
10111 (name "python-oauth2client")
10112 (version "4.1.3")
10113 (source
10114 (origin
10115 (method git-fetch)
10116 (uri (git-reference
10117 (url "https://github.com/google/oauth2client/")
10118 (commit (string-append "v" version))))
10119 (file-name (git-file-name name version))
10120 (sha256
10121 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
10122 (build-system pyproject-build-system)
10123 (arguments
10124 (list #:tests? #f))
10125 (native-inputs
10126 (list python-setuptools))
10127 (propagated-inputs
10128 (list python-httplib2
10129 python-pyasn1
10130 python-pyasn1-modules
10131 python-pyparsing
10132 python-rsa
10133 python-six))
10134 (home-page "https://github.com/google/oauth2client/")
10135 (synopsis "OAuth 2.0 client library")
10136 (description "@code{python-oauth2client} provides an OAuth 2.0 client
10137library for Python")
10138 (license license:asl2.0)))
10139
10140(define-public python-flask-oidc
10141 ;; XXX: Project is unmaintained since 2022, see:
10142 ;; <https://github.com/puiterwijk/flask-oidc/issues/146>.
10143 (package
10144 (name "python-flask-oidc")
10145 (version "2.4.0")
10146 (source
10147 (origin
10148 (method url-fetch)
10149 (uri (pypi-uri "flask_oidc" version))
10150 (sha256
10151 (base32
10152 "0lr15s5y61qkgic54pln1j82l2c32wgscdj8hymwr44gxby7h8z7"))))
10153 (build-system pyproject-build-system)
10154 (arguments
10155 (list
10156 #:test-flags
10157 #~(list (string-append "--deselect=tests/test_flask_oidc.py"
10158 "::test_accept_token_no_token"))))
10159 (propagated-inputs
10160 (list python-authlib
10161 python-blinker
10162 python-flask
10163 python-requests
10164 python-responses))
10165 (native-inputs
10166 (list python-pytest python-poetry-core))
10167 (home-page "https://github.com/puiterwijk/flask-oidc")
10168 (synopsis "OpenID Connect extension for Flask")
10169 (description "@code{python-flask-oidc} provides an OpenID Connect extension
10170for Flask.")
10171 (license license:bsd-2)))
10172
10173(define-public python-webassets
10174 (package
10175 (name "python-webassets")
10176 (version "3.0.0")
10177 (source
10178 (origin
10179 (method git-fetch)
10180 (uri (git-reference
10181 (url "https://github.com/miracle2k/webassets")
10182 (commit version)))
10183 (file-name (git-file-name name version))
10184 (sha256
10185 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
10186 (build-system pyproject-build-system)
10187 (propagated-inputs (list python-pyyaml python-zope-dottedname))
10188 (native-inputs (list python-hatchling python-pytest))
10189 (home-page "https://github.com/miracle2k/webassets")
10190 (synopsis "Media asset management")
10191 (description
10192 "This package provides utilities to merge, minify and compress Javascript
10193and CSS files,supporting a variety of different filters, including YUI, jsmin,
10194jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
10195 (license license:bsd-2)))
10196
10197(define-public python-flask-migrate
10198 (package
10199 (name "python-flask-migrate")
10200 (version "4.1.0")
10201 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
10202 (source (origin
10203 (method git-fetch)
10204 (uri (git-reference (url home-page)
10205 (commit (string-append "v" version))))
10206 (file-name (git-file-name name version))
10207 (sha256
10208 (base32
10209 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
10210 (build-system pyproject-build-system)
10211 (propagated-inputs
10212 (list python-flask python-alembic python-flask-sqlalchemy))
10213 (native-inputs
10214 (list python-pytest python-setuptools python-wheel))
10215 (synopsis "SQLAlchemy database migrations for Flask programs using
10216Alembic")
10217 (description "This package contains SQLAlchemy database migration tools
10218for Flask programs that are using @code{python-alembic}.")
10219 (license license:expat)))
10220
10221(define-public python-genshi
10222 (package
10223 (name "python-genshi")
10224 (version "0.7.10")
10225 (source
10226 (origin
10227 (method git-fetch)
10228 (uri (git-reference
10229 (url "https://github.com/edgewall/genshi")
10230 (commit version)))
10231 (file-name (git-file-name name version))
10232 (sha256
10233 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
10234 (build-system pyproject-build-system)
10235 (arguments (list #:test-backend #~'unittest))
10236 (native-inputs (list python-setuptools))
10237 (propagated-inputs (list python-six))
10238 (home-page "https://genshi.edgewall.org/")
10239 (synopsis "Toolkit for generation of output for the web")
10240 (description "Genshi is a Python library that provides an integrated set
10241of components for parsing, generating, and processing HTML, XML or other
10242textual content for output generation on the web.")
10243 (license license:bsd-3)))
10244
10245(define-public python-flask-principal
10246 (package
10247 (name "python-flask-principal")
10248 (version "0.4.0")
10249 (source
10250 (origin
10251 (method git-fetch)
10252 (uri (git-reference
10253 (url "https://github.com/pallets-eco/flask-principal")
10254 (commit version)))
10255 (file-name (git-file-name name version))
10256 (sha256
10257 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
10258 (build-system pyproject-build-system)
10259 (propagated-inputs (list python-blinker))
10260 (native-inputs (list python-flask python-pynose python-setuptools))
10261 (home-page "https://github.com/pallets-eco/flask-principal")
10262 (synopsis "Identity management for Flask")
10263 (description
10264 "@code{flask_principal} is a identity management library for Flask. It
10265supports managing both authentication and authorization data in a thread-local
10266variable.")
10267 (license license:expat)))
10268
10269(define-public python-flask-httpauth
10270 (package
10271 (name "python-flask-httpauth")
10272 (version "4.8.0")
10273 (source
10274 (origin
10275 (method url-fetch)
10276 (uri (pypi-uri "Flask-HTTPAuth" version))
10277 (sha256
10278 (base32
10279 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
10280 (build-system pyproject-build-system)
10281 (propagated-inputs (list python-flask))
10282 (native-inputs
10283 (list nss-certs-for-test
10284 python-pytest
10285 python-setuptools
10286 python-wheel))
10287 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
10288 (synopsis "Basic and Digest HTTP authentication for Flask routes")
10289 (description "@code{flask_httpauth} provides Basic and Digest HTTP
10290authentication for Flask routes.")
10291 (license license:expat)))
10292
10293(define-public python-uritemplate
10294 (package
10295 (name "python-uritemplate")
10296 (version "4.2.0")
10297 (source
10298 (origin
10299 (method url-fetch)
10300 (uri (pypi-uri "uritemplate" version))
10301 (sha256
10302 (base32
10303 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
10304 (build-system pyproject-build-system)
10305 (native-inputs (list python-pytest python-setuptools))
10306 (home-page "https://uritemplate.readthedocs.io/")
10307 (synopsis "Library to deal with URI Templates")
10308 (description "@code{uritemplate} provides Python library to deal with URI
10309Templates.")
10310 ;; The software is made available under the terms of *either* of the
10311 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
10312 ;; are made under *both* licenses (excerpt from the LICENSE file).
10313 (license (list license:bsd-2 license:asl2.0))))
10314
10315(define-public python-uritemplate-3
10316 (package
10317 (inherit python-uritemplate)
10318 (name "python-uritemplate")
10319 (version "3.0.1")
10320 (source (origin
10321 (method url-fetch)
10322 (uri (pypi-uri "uritemplate" version))
10323 (sha256
10324 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
10325
10326(define-public python-publicsuffix2
10327 (package
10328 (name "python-publicsuffix2")
10329 (version "2.2019-12-21")
10330 (source
10331 (origin
10332 (method git-fetch)
10333 (uri (git-reference
10334 (url "https://github.com/pombredanne/python-publicsuffix2")
10335 (commit (string-append "release-" version))))
10336 (file-name (git-file-name name version))
10337 (sha256
10338 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
10339 (build-system pyproject-build-system)
10340 (arguments
10341 (list
10342 #:tests? #f ;the test suite requires network access
10343 #:phases
10344 #~(modify-phases %standard-phases
10345 (add-after 'unpack 'ignore-maintainer-inputs
10346 (lambda _
10347 ;; Comment out a demand for python-requests, which is used only by
10348 ;; the unused ‘update_psl’ helper command.
10349 (substitute* "setup.py"
10350 (("'requests " match)
10351 (format #f "# ~a" match))))))))
10352 (native-inputs (list python-setuptools))
10353 (home-page "https://github.com/pombredanne/python-publicsuffix2")
10354 (synopsis
10355 "Get a public suffix for a domain name using the Public Suffix List")
10356 (description
10357 "Get a public suffix for a domain name using the Public Suffix List.
10358Forked from and using the same API as the publicsuffix package.")
10359 (license (list license:expat license:mpl2.0))))
10360
10361(define-public python-werkzeug
10362 (package
10363 (name "python-werkzeug")
10364 (version "3.1.8")
10365 (source
10366 (origin
10367 (method git-fetch)
10368 (uri (git-reference
10369 (url "https://github.com/pallets/werkzeug")
10370 (commit version)))
10371 (file-name (git-file-name name version))
10372 (sha256
10373 (base32 "1jwrrjv50n5rcfzax4qf0237znkcpcafd17hx0r77f997yv3ghlv"))))
10374 (build-system pyproject-build-system)
10375 (arguments
10376 (list
10377 #:test-flags
10378 #~(list "-m" "not dev_server")))
10379 (native-inputs
10380 (list python-ephemeral-port-reserve
10381 python-flit-core
10382 python-pytest
10383 python-pytest-timeout
10384 python-watchdog))
10385 (propagated-inputs
10386 (list python-markupsafe))
10387 (home-page "https://palletsprojects.com/p/werkzeug/")
10388 (synopsis "Utilities for WSGI applications")
10389 (description "One of the most advanced WSGI utility modules. It includes a
10390powerful debugger, full-featured request and response objects, HTTP utilities to
10391handle entity tags, cache control headers, HTTP dates, cookie handling, file
10392uploads, a powerful URL routing system and a bunch of community-contributed
10393addon modules.")
10394 (license license:x11)))
10395
10396(define-public python-werkzeug-1.0
10397 (package
10398 (inherit python-werkzeug)
10399 (version "1.0.1")
10400 (source (origin
10401 (method url-fetch)
10402 (uri (pypi-uri "Werkzeug" version))
10403 (sha256
10404 (base32
10405 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
10406 (patches (search-patches "python-werkzeug-tests.patch"))))
10407 (arguments
10408 (list
10409 #:phases
10410 '(modify-phases %standard-phases
10411 (add-after 'unpack 'ignore-warnings
10412 (lambda _
10413 (substitute* "setup.cfg"
10414 ((" error.*") "")))))))
10415 (propagated-inputs
10416 (list python-requests))
10417 (native-inputs
10418 (list python-pytest python-pytest-timeout python-setuptools
10419 python-wheel))))
10420
10421(define-public python-wtforms
10422 (package
10423 (name "python-wtforms")
10424 (version "3.2.2")
10425 (source
10426 (origin
10427 (method url-fetch)
10428 (uri (pypi-uri "wtforms" version))
10429 (sha256
10430 (base32 "14qbayp2gfmahaqn5migwyz2h1cq3gcdr4q2vd75vwvhhqzwf03v"))))
10431 (build-system pyproject-build-system)
10432 (native-inputs
10433 (list python-babel
10434 python-email-validator
10435 python-hatchling
10436 python-pytest
10437 python-setuptools))
10438 (propagated-inputs (list python-markupsafe))
10439 (home-page "https://wtforms.readthedocs.io/")
10440 (synopsis
10441 "Form validation and rendering library for Python web development")
10442 (description
10443 "WTForms is a flexible forms validation and rendering library
10444for Python web development. It is very similar to the web form API
10445available in Django, but is a standalone package.")
10446 (license license:bsd-3)))
10447
10448(define-public python-wtforms-sqlalchemy
10449 (package
10450 (name "python-wtforms-sqlalchemy")
10451 (version "0.4.1")
10452 (source
10453 (origin
10454 (method url-fetch)
10455 (uri (pypi-uri "WTForms-SQLAlchemy" version))
10456 (sha256
10457 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
10458 (build-system pyproject-build-system)
10459 (native-inputs (list python-pytest python-setuptools python-wheel))
10460 (propagated-inputs (list python-sqlalchemy python-wtforms))
10461 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
10462 (synopsis "SQLAlchemy tools for WTForms")
10463 (description
10464 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
10465package from WTForms. The package has been renamed to
10466@code{wtforms_sqlalchemy} but otherwise should function the same as
10467@code{wtforms.ext.sqlalchemy} did.")
10468 (license license:bsd-3)))
10469
10470(define-public python-urlgrabber
10471 (package
10472 (name "python-urlgrabber")
10473 (version "4.1.0")
10474 (source
10475 (origin
10476 (method url-fetch)
10477 (uri (pypi-uri "urlgrabber" version))
10478 (sha256
10479 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
10480 (build-system pyproject-build-system)
10481 (arguments
10482 (list
10483 #:tests? #f ; Most tests require network access.
10484 #:phases
10485 #~(modify-phases %standard-phases
10486 (replace 'check
10487 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
10488 (when tests?
10489 (invoke "python" "test/runtests.py")))))))
10490 (native-inputs (list python-setuptools))
10491 (propagated-inputs
10492 (list python-pycurl python-setuptools python-six))
10493 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
10494 (synopsis "High-level cross protocol url-grabber")
10495 (description
10496 "@code{urlgrabber} is a library that unifies access to files available on
10497the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
10498supports features like HTTP keep-alive, reget, throttling and more.")
10499 (license license:lgpl2.1+)))
10500
10501(define-public python-pycares
10502 (package
10503 (name "python-pycares")
10504 (version "4.11.0")
10505 (source
10506 (origin
10507 (method git-fetch)
10508 (uri (git-reference
10509 (url "https://github.com/saghul/pycares")
10510 (commit (string-append "v" version))))
10511 (file-name (git-file-name name version))
10512 (sha256
10513 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
10514 (snippet #~(begin
10515 (rmdir "deps/c-ares")))))
10516 (build-system pyproject-build-system)
10517 (arguments
10518 (list
10519 ;; XXX: Half of the tests require internet access
10520 ;; There is currently no markers to avoid running them.
10521 #:tests? #f
10522 #:phases
10523 #~(modify-phases %standard-phases
10524 (add-after 'unpack 'configure-system-lib
10525 (lambda _
10526 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
10527 (native-inputs (list python-pytest python-setuptools))
10528 (inputs (list c-ares))
10529 (propagated-inputs (list python-cffi))
10530 (home-page "https://github.com/saghul/pycares")
10531 (synopsis "Python interface for @code{c-ares}")
10532 (description
10533 "@code{pycares} is a Python module which provides an interface to
10534@code{c-ares}, a C library that performs DNS requests and name resolutions
10535asynchronously.")
10536 (license license:expat)))
10537
10538(define-public python-yarl
10539 (package
10540 (name "python-yarl")
10541 (version "1.18.3")
10542 (source
10543 (origin
10544 (method url-fetch)
10545 (uri (pypi-uri "yarl" version))
10546 (sha256
10547 (base32
10548 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
10549 (build-system pyproject-build-system)
10550 (arguments
10551 (list
10552 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
10553 #:phases
10554 '(modify-phases %standard-phases
10555 (add-after 'unpack 'avoid-pytest-cov-preload
10556 (lambda _
10557 (substitute* "pytest.ini"
10558 (("-p pytest_cov") ""))))
10559 (add-after 'unpack 'patch-build-system
10560 (lambda _
10561 ;; XXX: I don't know how to tell it to build the extensions in
10562 ;; place.
10563 (substitute* "packaging/pep517_backend/_backend.py"
10564 (("build_inplace=False") "build_inplace=True")))))))
10565 (native-inputs
10566 (list python-cython
10567 python-expandvars
10568 python-pytest
10569 python-pytest-xdist
10570 python-setuptools
10571 python-tomli))
10572 (propagated-inputs
10573 (list python-packaging python-idna python-multidict python-propcache))
10574 (home-page "https://github.com/aio-libs/yarl/")
10575 (synopsis "Yet another URL library")
10576 (description "@code{yarl} module provides handy @code{URL} class
10577for URL parsing and changing.")
10578 (license license:asl2.0)))
10579
10580(define-public python-google
10581 (package
10582 (name "python-google")
10583 (version "3.0.0")
10584 (source
10585 (origin
10586 (method url-fetch)
10587 (uri (pypi-uri "google" version))
10588 (sha256
10589 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
10590 (build-system pyproject-build-system)
10591 (arguments (list #:tests? #f)) ;There are no tests.
10592 (native-inputs (list python-setuptools))
10593 (propagated-inputs (list python-beautifulsoup4))
10594 (home-page "https://breakingcode.wordpress.com/")
10595 (synopsis "Python bindings to the Google search engine")
10596 (description
10597 "This package provides Python bindings for using the Google search
10598engine. Its module is called @code{googlesearch}.")
10599 (license license:bsd-3)))
10600
10601(define-public python-google-api-client
10602 (package
10603 (name "python-google-api-client")
10604 (version "2.198.0")
10605 (source
10606 (origin
10607 (method git-fetch)
10608 (uri (git-reference
10609 (url "https://github.com/google/google-api-python-client")
10610 (commit (string-append "v" version))))
10611 (file-name (git-file-name name version))
10612 (sha256
10613 (base32 "1adjr3ylp8bwbvywxm11hs4y913pvaga0dn6nwmb3622y62zxfhg"))))
10614 (build-system pyproject-build-system)
10615 (arguments
10616 (list
10617 #:test-flags
10618 #~(list
10619 "-k"
10620 (string-join
10621 (list
10622 ;; XXX: Deprecated behavior.
10623 "not test_client_options_universe_configured_with_mtls"
10624 "test_universe_env_var_configured_with_mtls"
10625 ;; XXX: Requires CA certificates.
10626 "test_credentials_and_credentials_file_mutually_exclusive")
10627 " and not ")
10628 "tests")))
10629 (native-inputs
10630 (list python-parameterized
10631 python-pytest
10632 python-setuptools))
10633 (propagated-inputs
10634 (list python-google-api-core
10635 python-google-auth
10636 python-google-auth-httplib2
10637 python-httplib2
10638 python-pyparsing
10639 python-uritemplate-3))
10640 (home-page "https://github.com/google/google-api-python-client")
10641 (synopsis "Core Python library for accessing Google APIs")
10642 (description "Python client library for Google's discovery based APIs")
10643 (license license:asl2.0)))
10644
10645(define-public python-google-auth-httplib2
10646 (package
10647 (name "python-google-auth-httplib2")
10648 (version "0.4.0")
10649 (source (origin
10650 (method url-fetch)
10651 (uri (pypi-uri "google_auth_httplib2" version))
10652 (sha256
10653 (base32 "0dgdzy2ps3z71dc2b4s1fhmyx094nq0sg75sagav995p0ji31c6m"))))
10654 (build-system pyproject-build-system)
10655 (propagated-inputs
10656 (list python-google-auth python-httplib2))
10657 (native-inputs
10658 (list python-pytest
10659 python-pyparsing
10660 python-pytest-localserver
10661 python-flask
10662 python-setuptools))
10663 (home-page "https://github.com/googleapis/google-cloud-python")
10664 (synopsis "Google Authentication Library: httplib2 transport")
10665 (description "This package provides a Google Authentication Library plugin
10666for httplib2 transport.")
10667 (license license:asl2.0)))
10668
10669(define-public python-google-auth-oauthlib
10670 (package
10671 (name "python-google-auth-oauthlib")
10672 (version "1.2.4")
10673 (home-page
10674 "https://github.com/GoogleCloudPlatform/\
10675google-auth-library-python-oauthlib")
10676 (source
10677 (origin
10678 (method git-fetch)
10679 (uri (git-reference
10680 (url home-page)
10681 (commit (string-append "v" version))))
10682 (file-name (git-file-name name version))
10683 (sha256
10684 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
10685 (build-system pyproject-build-system)
10686 (propagated-inputs (list python-google-auth python-requests-oauthlib))
10687 (native-inputs
10688 (list python-click python-mock python-pytest python-setuptools))
10689 (synopsis "Google Authentication Library: oauthlib")
10690 (description "This package provides a Google Authentication Library plugin
10691with oauthlib.")
10692 (license license:asl2.0)))
10693
10694(define-public whoogle-search
10695 (package
10696 (name "whoogle-search")
10697 (version "0.8.4")
10698 (source (origin
10699 (method url-fetch)
10700 (uri (pypi-uri "whoogle-search" version))
10701 (sha256
10702 (base32
10703 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
10704 (build-system pyproject-build-system)
10705 (arguments
10706 (list
10707 ;; The tests need network access
10708 #:tests? #f))
10709 (propagated-inputs
10710 (list python-beautifulsoup4
10711 python-brotli
10712 python-cryptography
10713 python-cssutils
10714 python-defusedxml
10715 python-flask
10716 python-dotenv
10717 python-requests
10718 python-stem
10719 python-validators
10720 python-waitress))
10721 (native-inputs (list python-setuptools python-wheel))
10722 (home-page "https://github.com/benbusby/whoogle-search")
10723 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
10724 (description
10725 "Get Google results, but without any ads, javascript, AMP links,
10726cookies, or IP address tracking. Quick and simple to implement as a primary
10727search engine replacement on both desktop and mobile.")
10728 (license license:expat)))
10729
10730(define-public python-hawkauthlib
10731 (package
10732 (name "python-hawkauthlib")
10733 (version "2.0.0")
10734 (source
10735 (origin
10736 (method git-fetch)
10737 (uri (git-reference
10738 (url "https://github.com/mozilla-services/hawkauthlib")
10739 (commit (string-append "v" version))))
10740 (file-name (git-file-name name version))
10741 (sha256
10742 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
10743 (build-system pyproject-build-system)
10744 (arguments
10745 (list
10746 #:test-backend #~'unittest
10747 #:phases
10748 #~(modify-phases %standard-phases
10749 (add-after 'unpack 'fix-python-incompatibilities
10750 (lambda _
10751 (substitute* (find-files "hawkauthlib/tests" "\\.py$")
10752 (("assertEquals") "assertEqual")))))))
10753 (native-inputs (list python-setuptools))
10754 (propagated-inputs (list python-requests python-webob))
10755 (home-page "https://github.com/mozilla-services/hawkauthlib")
10756 (synopsis "Hawk Access Authentication protocol")
10757 (description
10758 "This is a low-level Python library for implementing Hawk Access
10759Authentication, a simple HTTP request-signing scheme.")
10760 (license license:mpl2.0)))
10761
10762(define-public python-pybrowserid
10763 (package
10764 (name "python-pybrowserid")
10765 (version "0.14.0")
10766 (source
10767 (origin
10768 (method git-fetch)
10769 (uri (git-reference
10770 (url "https://github.com/mozilla/PyBrowserID")
10771 (commit version)))
10772 (file-name (git-file-name name version))
10773 (sha256
10774 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
10775 (build-system pyproject-build-system)
10776 (arguments
10777 (list
10778 #:test-backend #~'unittest
10779 #:phases
10780 #~(modify-phases %standard-phases
10781 (add-after 'unpack 'python-3.12-compatibility
10782 (lambda _
10783 (substitute* (find-files "browserid/tests" "\\.py")
10784 (("assertEquals") "assertEqual")))))))
10785 (propagated-inputs (list python-requests))
10786 (native-inputs (list python-mock python-setuptools))
10787 (home-page "https://github.com/mozilla/PyBrowserID")
10788 (synopsis "Python library for the BrowserID protocol")
10789 (description
10790 "This is a Python client library for the BrowserID protocol that
10791underlies Mozilla Persona.")
10792 (license license:mpl2.0)))
10793
10794(define-public python-pyfxa
10795 (package
10796 (name "python-pyfxa")
10797 (version "0.8.1")
10798 (source
10799 (origin
10800 (method git-fetch)
10801 (uri (git-reference
10802 (url "https://github.com/mozilla/PyFxA")
10803 (commit (string-append "v" version))))
10804 (file-name (git-file-name name version))
10805 (sha256
10806 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
10807 (build-system pyproject-build-system)
10808 (arguments
10809 (list
10810 ;; These tests require network access
10811 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
10812 (propagated-inputs
10813 (list python-cryptography
10814 python-pyjwt
10815 python-parameterized
10816 python-hawkauthlib
10817 python-requests))
10818 (native-inputs
10819 (list python-grequests
10820 python-hatchling
10821 python-mock
10822 python-pytest
10823 python-responses))
10824 (home-page "https://github.com/mozilla/PyFxA")
10825 (synopsis "Firefox Accounts client library for Python")
10826 (description
10827 "This is a Python library for interacting with the Firefox Accounts
10828ecosystem.")
10829 (license license:mpl2.0)))
10830
10831(define-public python-hyperlink
10832 (package
10833 (name "python-hyperlink")
10834 (version "21.0.0")
10835 (source
10836 (origin
10837 (method url-fetch)
10838 (uri (pypi-uri "hyperlink" version))
10839 (sha256
10840 (base32
10841 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
10842 (build-system pyproject-build-system)
10843 (arguments
10844 (list #:phases
10845 #~(modify-phases %standard-phases
10846 (add-before 'check 'pretend-to-be-CI
10847 (lambda _
10848 ;; Pretend to be a CI system to skip flaky tests.
10849 (setenv "CI" "true"))))))
10850 (native-inputs
10851 (list python-pytest python-setuptools python-wheel))
10852 (propagated-inputs
10853 (list python-idna))
10854 (home-page "https://github.com/python-hyper/hyperlink")
10855 (synopsis "Python module to create immutable URLs according to spec")
10856 (description "This package provides a Python module to create immutable, and
10857correct URLs for Python according to RFCs 3986 and 3987.")
10858 (license license:expat)))
10859
10860(define-public python-treq
10861 (package
10862 (name "python-treq")
10863 (version "24.9.1")
10864 (source
10865 (origin
10866 (method url-fetch)
10867 (uri (pypi-uri "treq" version))
10868 (sha256
10869 (base32
10870 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
10871 (build-system pyproject-build-system)
10872 (native-inputs
10873 (list python-httpbin
10874 python-pytest
10875 python-service-identity
10876 python-setuptools
10877 python-wheel))
10878 (propagated-inputs
10879 (list python-attrs
10880 python-hyperlink
10881 python-incremental
10882 python-requests
10883 python-twisted
10884 python-typing-extensions))
10885 (home-page "https://github.com/twisted/treq")
10886 (synopsis "Requests-like API built on top of twisted.web's Agent")
10887 (description "This package provides an HTTP library inspired by
10888@code{requests} but written on top of Twisted's @code{Agents}. It offers a
10889high level API for making HTTP requests when using Twisted.")
10890 (license license:expat)))
10891
10892(define-public python-ws4py
10893 (package
10894 (name "python-ws4py")
10895 (version "0.6.0")
10896 (source
10897 (origin
10898 (method git-fetch)
10899 (uri (git-reference
10900 (url "https://github.com/Lawouach/WebSocket-for-Python")
10901 (commit version)))
10902 (file-name (git-file-name name version))
10903 (sha256
10904 (base32
10905 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
10906 (build-system pyproject-build-system)
10907 (arguments
10908 (list
10909 #:phases
10910 #~(modify-phases %standard-phases
10911 (add-after 'unpack 'remove-cherrypy-support
10912 (lambda _
10913 (delete-file "ws4py/server/cherrypyserver.py")
10914 (delete-file "test/test_cherrypy.py"))))))
10915 (native-inputs (list python-setuptools python-pytest))
10916 (propagated-inputs
10917 (list python-gevent python-tornado))
10918 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
10919 (synopsis "WebSocket client and server library")
10920 (description
10921 "This package provides a WebSocket client and server library for Python.")
10922 (license license:bsd-3)))
10923
10924(define-public python-slowapi
10925 (package
10926 (name "python-slowapi")
10927 (version "0.1.9")
10928 (source
10929 (origin
10930 (method git-fetch)
10931 (uri (git-reference
10932 (url "https://github.com/laurents/slowapi")
10933 (commit (string-append "v" version))))
10934 (file-name (git-file-name name version))
10935 (sha256
10936 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
10937 (build-system pyproject-build-system)
10938 (arguments
10939 (list
10940 #:test-flags
10941 ;; These tests fail because the timestamp contains more decimal points
10942 ;; than expected, so a simple equality comparison fails.
10943 '(list "-k" (string-append "not test_headers_no_breach"
10944 " and not test_headers_breach"))))
10945 (propagated-inputs (list python-limits python-redis))
10946 (native-inputs
10947 (list python-fastapi
10948 python-hiro
10949 python-mock
10950 python-poetry-core
10951 python-pytest))
10952 (home-page "https://github.com/laurents/slowapi")
10953 (synopsis "Rate limiting extension for Starlette and Fastapi")
10954 (description
10955 "This package provides a rate limiting extension for Starlette and
10956Fastapi.")
10957 (license license:expat)))
10958
10959(define-public python-slugify
10960 (package
10961 (name "python-slugify")
10962 (version "8.0.4")
10963 (source
10964 (origin
10965 (method git-fetch)
10966 (uri (git-reference
10967 (url "https://github.com/un33k/python-slugify")
10968 (commit (string-append "v" version))))
10969 (file-name (git-file-name name version))
10970 (sha256
10971 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
10972 (build-system pyproject-build-system)
10973 (arguments (list #:test-backend #~'unittest))
10974 (native-inputs (list python-setuptools))
10975 (propagated-inputs (list python-unidecode python-text-unidecode))
10976 (home-page "https://github.com/un33k/python-slugify")
10977 (synopsis "Python Slugify application that handles Unicode")
10978 (description "This package provides a @command{slufigy} command and
10979library to create slugs from unicode strings while keeping it DRY.")
10980 (license license:expat)))
10981
10982(define-public python-tinycss2
10983 (package
10984 (name "python-tinycss2")
10985 (version "1.5.1")
10986 (source
10987 (origin
10988 (method git-fetch)
10989 (uri (git-reference
10990 (url "https://github.com/Kozea/tinycss2")
10991 (commit (string-append "v" version))
10992 (recursive? #true)))
10993 (file-name (git-file-name name version))
10994 (sha256
10995 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
10996 (build-system pyproject-build-system)
10997 (native-inputs
10998 (list python-flit-core
10999 python-pytest))
11000 (propagated-inputs
11001 (list python-webencodings))
11002 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
11003 (synopsis "Low-level CSS parser for Python")
11004 (description "@code{tinycss2} can parse strings, return Python objects
11005representing tokens and blocks, and generate CSS strings corresponding to
11006these objects.
11007
11008Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
11009grammar of CSS but doesn’t know specific rules, properties or values supported
11010in various CSS modules.")
11011 (license license:bsd-3)))
11012
11013(define-public python-tinyhtml5
11014 (package
11015 (name "python-tinyhtml5")
11016 (version "2.1.0")
11017 (source
11018 (origin
11019 (method git-fetch)
11020 (uri (git-reference
11021 (url "https://github.com/CourtBouillon/tinyhtml5")
11022 (commit version)))
11023 (file-name (git-file-name name version))
11024 (sha256
11025 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
11026 (build-system pyproject-build-system)
11027 (propagated-inputs
11028 (list python-webencodings))
11029 (native-inputs
11030 (list python-flit-core
11031 python-pytest))
11032 (home-page "https://github.com/CourtBouillon/tinyhtml5")
11033 (synopsis "Small HTML parser based on the WHATWG HTML specification")
11034 (description "This Python module is a HTML5 parser that transforms a
11035possibly malformed HTML document into an ElementTree tree. This module is a
11036simplified fork of html5lib.")
11037 (license license:expat)))
11038
11039(define-public python-uvloop
11040 (package
11041 (name "python-uvloop")
11042 (version "0.22.1")
11043 (source
11044 (origin
11045 (method git-fetch)
11046 (uri (git-reference
11047 (url "https://github.com/MagicStack/uvloop")
11048 (commit (string-append "v" version))))
11049 (file-name (git-file-name name version))
11050 (sha256
11051 (base32 "1qbykwwz4ac3f7472g22z4i5rrd5kcr8hmxn5kswmja57j1nxlpl"))
11052 (modules '((guix build utils)))
11053 (snippet
11054 '(begin
11055 (delete-file-recursively "vendor")))))
11056 (build-system pyproject-build-system)
11057 (arguments
11058 (list
11059 ;; tests: 470 passed, 32 skipped, 8 deselected, 5 warnings, 104 subtests passed
11060 #:test-flags
11061 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
11062 ;; to get a meaningful idea about where.
11063 #~(list "--timeout=300"
11064 "--timeout-method=thread"
11065 "-k" (string-join
11066 (list
11067 ;; Timeout, because SIGINT cannot be sent to child.
11068 "not test_signals_sigint_pycode_continue"
11069 "test_signals_sigint_pycode_stop"
11070 "test_signals_sigint_uvcode"
11071 "test_signals_sigint_uvcode_two_loop_runs"
11072 #$@(if (target-riscv64?)
11073 `("test_renegotiation")
11074 `()))
11075 " and not "))
11076 #:phases
11077 #~(modify-phases %standard-phases
11078 (add-after 'unpack 'preparations
11079 (lambda _
11080 ;; Use packaged libuv.
11081 (substitute* "setup.py" (("self.use_system_libuv = False")
11082 "self.use_system_libuv = True"))
11083 ;; Replace hardcoded shell command.
11084 (substitute* "uvloop/loop.pyx"
11085 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))
11086 (substitute* "tests/test_process.py"
11087 (("'env'") (string-append "'" (which "env") "'")))))
11088 #$@(if (target-riscv64?)
11089 `((add-after 'unpack 'adjust-test-timeouts
11090 (lambda _
11091 (substitute* '("tests/test_tcp.py"
11092 "tests/test_unix.py")
11093 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
11094 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
11095 '())
11096 (add-before 'check 'pre-check
11097 (lambda* (#:key tests? #:allow-other-keys)
11098 (when tests?
11099 ;; Remove Python module, which conflicts with the installed
11100 ;; version, but lacks the built C module.
11101 (delete-file-recursively "uvloop")))))))
11102 (native-inputs
11103 (list python-aiohttp
11104 python-cython
11105 python-psutil
11106 python-pyopenssl
11107 python-pytest
11108 python-pytest-timeout
11109 python-setuptools))
11110 (inputs
11111 (list libuv))
11112 (home-page "https://github.com/MagicStack/uvloop")
11113 (synopsis "Fast implementation of asyncio event loop on top of libuv")
11114 (description
11115 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
11116event loop. It is implemented in Cython and uses libuv under the hood.")
11117 (license license:expat)))
11118
11119(define-public python-httptools
11120 (package
11121 (name "python-httptools")
11122 (version "0.7.1")
11123 (source
11124 (origin
11125 ;; PyPI tarball comes with a vendored http-parser and no tests.
11126 (method git-fetch)
11127 (uri (git-reference
11128 (url "https://github.com/MagicStack/httptools")
11129 (commit (string-append "v" version))))
11130 (file-name (git-file-name name version))
11131 (sha256
11132 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
11133 (modules '((guix build utils)))
11134 (snippet
11135 #~(begin (delete-file-recursively "vendor")))))
11136 (build-system pyproject-build-system)
11137 (arguments
11138 (list
11139 #:test-flags
11140 ;; XXX: AssertionError: HttpParserError not raised.
11141 #~(list "-k" "not test_parser_response_leninent_headers_1")
11142 #:phases
11143 #~(modify-phases %standard-phases
11144 (add-after 'unpack 'configure-build-ext
11145 (lambda _
11146 (with-output-to-file "setup.cfg"
11147 (lambda ()
11148 (display "\
11149[build_ext]
11150use_system_llhttp = true
11151use_system_http_parser = true
11152cython_always = true"))))))))
11153 (native-inputs
11154 (list python-cython
11155 python-pytest
11156 python-setuptools))
11157 (inputs
11158 (list http-parser
11159 llhttp))
11160 (home-page "https://github.com/MagicStack/httptools")
11161 (synopsis "Collection of framework independent HTTP protocol utils")
11162 (description
11163 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
11164 (license license:expat)))
11165
11166(define-public python-uvicorn
11167 (package
11168 (name "python-uvicorn")
11169 ;; 0.49.0 (2026-06-03), release does not work with python-websockets 16.0,
11170 ;; see: <https://github.com/Kludex/uvicorn/pull/2985>.
11171 (properties '((commit . "e8a31bca03254b8457c4c89596e310282cc33edc")
11172 (revision . "0")))
11173 (version (git-version "0.49.0"
11174 (assoc-ref properties 'revision)
11175 (assoc-ref properties 'commit)))
11176 (source
11177 (origin
11178 (method git-fetch)
11179 (uri (git-reference
11180 (url "https://github.com/encode/uvicorn")
11181 (commit (assoc-ref properties 'commit))))
11182 (file-name (git-file-name name version))
11183 (sha256
11184 (base32 "1vd1680a1k3jcdgc3jd5p3a6zmhz4r8bgzb7v7zhpxrkkdsisrxj"))))
11185 (build-system pyproject-build-system)
11186 (arguments
11187 (list
11188 #:test-flags
11189 #~(list "--ignore=tests/benchmarks"
11190 #$@(cond
11191 ((or (target-aarch64?)
11192 (target-riscv64?))
11193 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
11194 (#t '())))))
11195 (native-inputs
11196 (list nss-certs-for-test
11197 python-a2wsgi
11198 python-hatchling
11199 python-httpx-bootstrap
11200 python-pytest
11201 python-pytest-asyncio
11202 python-pytest-mock
11203 python-pytest-xdist
11204 python-requests
11205 python-trustme
11206 python-wsproto))
11207 (propagated-inputs
11208 (list python-a2wsgi
11209 python-click
11210 python-dotenv
11211 python-h11
11212 python-httptools
11213 python-pyyaml
11214 python-uvloop
11215 python-watchfiles
11216 python-websockets))
11217 (home-page "https://github.com/encode/uvicorn")
11218 (synopsis "Fast ASGI server implementation")
11219 (description
11220 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
11221and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
11222for HTTP/2 is planned.")
11223 (license license:bsd-3)))
11224
11225(define-public python-translation-finder
11226 (package
11227 (name "python-translation-finder")
11228 (version "2.22")
11229 (source
11230 (origin
11231 (method url-fetch)
11232 (uri (pypi-uri "translation_finder" version))
11233 (sha256
11234 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
11235 (build-system pyproject-build-system)
11236 (arguments
11237 (list
11238 #:test-flags
11239 ;; AssertionError: 31 != 30 : Mismatched count of results
11240 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
11241 (native-inputs
11242 (list python-pytest
11243 python-setuptools))
11244 (propagated-inputs
11245 (list python-charset-normalizer
11246 python-ruamel.yaml
11247 python-weblate-language-data))
11248 (home-page "https://weblate.org/")
11249 (synopsis "Translation file finder for Weblate")
11250 (description "This package provides a function to find translation file in
11251the source code of a project. It supports many translation file formats and
11252is part of the Weblate translation platform.")
11253 (license license:gpl3+)))
11254
11255(define-public python-gitlab
11256 (package
11257 (name "python-gitlab")
11258 (version "7.0.0")
11259 (source
11260 (origin
11261 (method git-fetch)
11262 (uri (git-reference
11263 (url "https://github.com/python-gitlab/python-gitlab")
11264 (commit (string-append "v" version))))
11265 (file-name (git-file-name name version))
11266 (sha256
11267 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
11268 (build-system pyproject-build-system)
11269 (arguments
11270 (list
11271 #:test-flags
11272 #~(list "--ignore=tests/unit/test_graphql.py"
11273 ;; XXX: Missing helper script.
11274 "-k" "not test_data_from_helper" "tests/unit")))
11275 (native-inputs
11276 (list python-anyio
11277 python-pytest
11278 python-responses
11279 python-setuptools))
11280 (propagated-inputs (list python-requests python-requests-toolbelt))
11281 (home-page "https://github.com/python-gitlab/python-gitlab")
11282 (synopsis "Interact with GitLab API")
11283 (description "This package provides an extended library for interacting
11284with GitLab instances through their API.")
11285 (license license:lgpl3+)))
11286
11287(define-public python-path-and-address
11288 (package
11289 (name "python-path-and-address")
11290 (version "2.0.1")
11291 (source
11292 (origin
11293 (method git-fetch)
11294 (uri (git-reference
11295 (url "https://github.com/joeyespo/path-and-address")
11296 (commit (string-append "v" version))))
11297 (file-name (git-file-name name version))
11298 (sha256
11299 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
11300 (build-system pyproject-build-system)
11301 (native-inputs
11302 (list python-pytest python-setuptools))
11303 (home-page "https://github.com/joeyespo/path-and-address")
11304 (synopsis "Functions for command-line server tools used by humans")
11305 (description "Path-and-address resolves ambiguities of command-line
11306interfaces, inferring which argument is the path, and which is the address.")
11307 (license license:expat)))
11308
11309(define-public python-port-for
11310 (package
11311 (name "python-port-for")
11312 (version "0.7.4")
11313 (source
11314 (origin
11315 (method url-fetch)
11316 (uri (pypi-uri "port_for" version))
11317 (sha256
11318 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
11319 (build-system pyproject-build-system)
11320 (propagated-inputs
11321 (list python-urllib3))
11322 (native-inputs
11323 (list python-pytest python-setuptools python-wheel))
11324 (home-page "https://github.com/kmike/port-for/")
11325 (synopsis "TCP localhost port finder and association manager")
11326 (description
11327 "This package provides a utility that helps with local TCP ports
11328management. It can find an unused TCP localhost port and remember the
11329association.")
11330 (license license:expat)))
11331
11332(define-public python-livereload
11333 (package
11334 (name "python-livereload")
11335 (version "2.7.1")
11336 (source
11337 (origin
11338 (method git-fetch)
11339 (uri (git-reference
11340 (url "https://github.com/lepture/python-livereload")
11341 (commit (string-append "v" version))))
11342 (file-name (git-file-name name version))
11343 (sha256
11344 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
11345 (build-system pyproject-build-system)
11346 (arguments (list #:test-backend #~'unittest))
11347 (native-inputs (list python-django python-setuptools))
11348 (propagated-inputs (list python-tornado))
11349 (home-page "https://github.com/lepture/python-livereload")
11350 (synopsis "Python LiveReload")
11351 (description
11352 "Python LiveReload provides a command line utility, @command{livereload},
11353for starting a web server in a directory. It can trigger arbitrary commands
11354and serve updated contents upon changes to the directory.")
11355 (license license:bsd-3)))
11356
11357(define-public python-vf-1
11358 (package
11359 (name "python-vf-1")
11360 (version "1.0.0")
11361 (source
11362 (origin
11363 (method git-fetch)
11364 (uri (git-reference
11365 (url "https://git.sr.ht/~solderpunk/VF-1")
11366 (commit (string-append "v" version))))
11367 (file-name (git-file-name name version))
11368 (sha256
11369 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
11370 (build-system pyproject-build-system)
11371 (arguments (list #:tests? #f)) ; No tests.
11372 (native-inputs (list python-setuptools))
11373 (home-page "https://git.sr.ht/~solderpunk/VF-1")
11374 (synopsis "Command line gopher client")
11375 (description "@code{VF-1} is a command line gopher client with
11376@acronym{TLS, Transport Layer Security} support.")
11377 (license license:bsd-2)))
11378
11379(define-public python-httpcore
11380 (package
11381 (name "python-httpcore")
11382 (version "1.0.9")
11383 (source
11384 (origin
11385 ;; PyPI tarball does not contain tests.
11386 (method git-fetch)
11387 (uri (git-reference
11388 (url "https://github.com/encode/httpcore")
11389 (commit version)))
11390 (file-name (git-file-name name version))
11391 (sha256
11392 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
11393 (build-system pyproject-build-system)
11394 (native-inputs
11395 (list nss-certs-for-test
11396 python-hatch-fancy-pypi-readme
11397 python-hatchling
11398 python-pytest
11399 python-pytest-asyncio
11400 python-pytest-httpbin
11401 python-pytest-trio
11402 python-uvicorn
11403 python-trustme))
11404 (propagated-inputs
11405 (list python-anyio
11406 python-certifi
11407 python-h11
11408 python-h2
11409 python-sniffio
11410 python-socksio
11411 python-trio
11412 python-trio-typing))
11413 (home-page "https://github.com/encode/httpcore")
11414 (synopsis "Minimal, low-level HTTP client")
11415 (description
11416 "HTTP Core provides a minimal and low-level HTTP client, which does one
11417thing only: send HTTP requests.
11418
11419Some things HTTP Core does do:
11420
11421@itemize
11422@item Sending HTTP requests.
11423@item Provides both sync and async interfaces.
11424@item Supports HTTP/1.1 and HTTP/2.
11425@item Async backend support for asyncio and trio.
11426@item Automatic connection pooling.
11427@item HTTP(S) proxy support.
11428@end itemize")
11429 (license license:bsd-3)))
11430
11431;;; Variant used to break a cycle between python-httpx and python-uvicorn.
11432(define-public python-httpcore-bootstrap
11433 (hidden-package
11434 (package/inherit python-httpcore
11435 (name "python-httpcore-bootstrap")
11436 (arguments (list #:tests? #f))
11437 (native-inputs (list python-hatchling
11438 python-hatch-fancy-pypi-readme)))))
11439
11440(define-public python-httpx
11441 (package
11442 (name "python-httpx")
11443 (version "0.28.1")
11444 (source
11445 (origin
11446 ;; PyPI tarball does not contain tests.
11447 (method git-fetch)
11448 (uri (git-reference
11449 (url "https://github.com/encode/httpx")
11450 (commit version)))
11451 (file-name (git-file-name name version))
11452 (sha256
11453 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
11454 (build-system pyproject-build-system)
11455 (arguments
11456 (list
11457 ;; 1401 passed, 1 skipped, 5 deselected
11458 #:test-flags
11459 #~(list "-o" "asyncio_mode=auto"
11460 ;; CLI tests are broken.
11461 "--ignore=tests/test_main.py"
11462 "-k" (string-join
11463 ;; These tests try to open an outgoing connection.
11464 (list "not test_async_proxy_close"
11465 "test_sync_proxy_clos"
11466 "test_write_timeout")
11467 " and not "))))
11468 (native-inputs
11469 (list nss-certs-for-test
11470 python-chardet
11471 python-cryptography
11472 python-hatch-fancy-pypi-readme
11473 python-hatchling
11474 python-pytest
11475 python-pytest-asyncio
11476 python-pytest-trio
11477 python-setuptools
11478 python-trio
11479 python-trustme
11480 python-uvicorn))
11481 (propagated-inputs
11482 (list python-anyio
11483 python-certifi
11484 python-httpcore
11485 python-idna
11486 ;; [brotli]
11487 python-brotli
11488 ;; [http2]
11489 python-h2
11490 ;; [socks]
11491 python-socksio
11492 ;; [zstd]
11493 python-zstandard
11494 ;; For trio, see:
11495 ;; <https://github.com/python-trio/trio/issues/2802>.
11496 python-sniffio))
11497 (home-page "https://www.python-httpx.org/")
11498 (synopsis "HTTP client for Python")
11499 (description
11500 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
11501and async APIs, and support for both HTTP/1.1 and HTTP/2.
11502
11503HTTPX builds on the well-established usability of requests, and gives you:
11504
11505@itemize
11506@item A broadly requests-compatible API.
11507@item Standard synchronous interface, but with async support if you need it.
11508@item HTTP/1.1 and HTTP/2 support.
11509@item Ability to make requests directly to WSGI applications or ASGI applications.
11510@item Strict timeouts everywhere.
11511@item Fully type annotated.
11512@item 99% test coverage.
11513@end itemize
11514
11515Plus all the standard features of requests:
11516
11517@itemize
11518@item International Domains and URLs
11519@item Keep-Alive & Connection Pooling
11520@item Sessions with Cookie Persistence
11521@item Browser-style SSL Verification
11522@item Basic/Digest Authentication
11523@item Elegant Key/Value Cookies
11524@item Automatic Decompression
11525@item Automatic Content Decoding
11526@item Unicode Response Bodies
11527@item Multipart File Uploads
11528@item HTTP(S) Proxy Support
11529@item Connection Timeouts
11530@item Streaming Downloads
11531@item .netrc Support
11532@item Chunked Requests
11533@end itemize")
11534 (license license:bsd-3)))
11535
11536;;; Variant used to break a cycle with python-uvicorn.
11537(define-public python-httpx-bootstrap
11538 (hidden-package
11539 (package/inherit python-httpx
11540 (name "python-httpx-bootstrap")
11541 (arguments (list #:tests? #f))
11542 (native-inputs
11543 (list python-hatchling
11544 python-hatch-fancy-pypi-readme))
11545 (propagated-inputs
11546 (modify-inputs propagated-inputs
11547 (replace "python-httpcore" python-httpcore-bootstrap))))))
11548
11549(define-public python-httpx-sse
11550 (package
11551 (name "python-httpx-sse")
11552 (version "0.4.3")
11553 (source
11554 (origin
11555 (method git-fetch)
11556 (uri (git-reference
11557 (url "https://github.com/florimondmanca/httpx-sse")
11558 (commit version)))
11559 (file-name (git-file-name name version))
11560 (sha256
11561 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
11562 (build-system pyproject-build-system)
11563 (native-inputs
11564 (list python-pytest
11565 python-pytest-asyncio
11566 python-setuptools
11567 python-setuptools-scm
11568 python-sse-starlette))
11569 (propagated-inputs (list python-httpx))
11570 (home-page "https://github.com/florimondmanca/httpx-sse")
11571 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
11572 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
11573 (license license:expat)))
11574
11575(define-public python-httpx-ws
11576 (package
11577 (name "python-httpx-ws")
11578 (version "0.9.0")
11579 (source
11580 (origin
11581 (method git-fetch)
11582 (uri (git-reference
11583 (url "https://github.com/frankie567/httpx-ws")
11584 (commit (string-append "v" version))))
11585 (file-name (git-file-name name version))
11586 (sha256
11587 (base32 "1hin6fndvfnx3mjgy30x0ghgjalikxavyj24klcknnly9sqzg83v"))))
11588 (build-system pyproject-build-system)
11589 (propagated-inputs
11590 (list python-anyio
11591 python-httpcore
11592 python-httpx
11593 python-wsproto))
11594 (native-inputs
11595 (list nss-certs-for-test
11596 python-hatch-regex-commit
11597 python-hatchling
11598 python-pytest
11599 python-pytest-cov
11600 python-starlette
11601 python-uvicorn))
11602 (home-page "https://github.com/frankie567/httpx-ws")
11603 (synopsis "WebSockets support for HTTPX")
11604 (description "This package provides @code{WebSockets} support for HTTPX.")
11605 (license license:expat)))
11606
11607(define-public python-wsgiprox
11608 (package
11609 (name "python-wsgiprox")
11610 (version "1.5.2")
11611 (source
11612 (origin
11613 (method url-fetch)
11614 (uri (pypi-uri "wsgiprox" version))
11615 (sha256
11616 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
11617 (build-system pyproject-build-system)
11618 (arguments
11619 ;; The test suite hangs (see:
11620 ;; https://github.com/webrecorder/wsgiprox/issues/6).
11621 (list
11622 #:tests? #f
11623 #:phases
11624 #~(modify-phases %standard-phases
11625 (add-after 'unpack 'fix-pytest-argument
11626 (lambda _
11627 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
11628 (substitute* "setup.py"
11629 (("--doctest-module")
11630 "--doctest-modules")))))))
11631 (propagated-inputs
11632 (list python-certauth
11633 python-gevent
11634 python-six
11635 python-websocket-client))
11636 (native-inputs
11637 (list python-mock python-waitress python-setuptools))
11638 (home-page "https://github.com/webrecorder/wsgiprox")
11639 (synopsis "HTTP/S proxy with WebSockets over WSGI")
11640 (description
11641 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
11642middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
11643The library accepts HTTP and HTTPS proxy connections, and routes them to a
11644designated prefix.")
11645 (license license:asl2.0)))
11646
11647(define-public python-warcio
11648 ;; The PyPI release is missing some test support files (see:
11649 ;; https://github.com/webrecorder/warcio/issues/132).
11650 (package
11651 (name "python-warcio")
11652 (version "1.8.1")
11653 (source
11654 (origin
11655 (method git-fetch)
11656 (uri (git-reference
11657 (url "https://github.com/webrecorder/warcio")
11658 (commit (string-append "v" version))))
11659 (file-name (git-file-name name version))
11660 (sha256
11661 (base32
11662 "19wwg7zmx33c942dbahdkng1byiwr4c9cd1ayrsh13f818n17zps"))))
11663 (build-system pyproject-build-system)
11664 (arguments
11665 (list
11666 #:test-flags ; These tests fail due to networking requirements.
11667 '(list "-k" (format #f "not ~a"
11668 (string-join
11669 '("test_post_chunked"
11670 "test_remote"
11671 "test_capture_http_proxy"
11672 "test_capture_https_proxy"
11673 "test_capture_https_proxy_same_session")
11674 " and not "))
11675 ; The following test requires the hookdns package.
11676 "--ignore=test/test_capture_http_proxy.py")))
11677 (native-inputs
11678 (list python-httpbin
11679 python-pytest
11680 python-requests
11681 python-setuptools
11682 python-wsgiprox))
11683 (home-page "https://github.com/webrecorder/warcio")
11684 (synopsis "Streaming web archival archive (WARC) library")
11685 (description "warcio is a Python library to read and write the WARC format
11686commonly used in Web archives. It is designed for fast, low-level access to
11687web archival content, oriented around a stream of WARC records rather than
11688files.")
11689 (license license:asl2.0)))
11690
11691(define-public python-websockets
11692 (package
11693 (name "python-websockets")
11694 (version "16.0")
11695 (source
11696 (origin
11697 (method git-fetch)
11698 (uri (git-reference
11699 (url "https://github.com/aaugustin/websockets")
11700 (commit version)))
11701 (file-name (git-file-name name version))
11702 (sha256
11703 (base32
11704 "1f71siwmjxn8b671x8lkkxx56q3xm99f2kmjqpzfcv3air9n94gg"))))
11705 (build-system pyproject-build-system)
11706 (arguments
11707 (list #:test-backend #~'unittest
11708 #:phases
11709 #~(modify-phases %standard-phases
11710 (add-before 'check 'extend-test-timeout
11711 (lambda _
11712 ;; Some architectures need an even longer timeout. Make it
11713 ;; long enough that it should never fail due to timeout.
11714 #$@(if (target-riscv64?)
11715 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
11716 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
11717 (native-inputs
11718 (list python-setuptools))
11719 (home-page "https://github.com/aaugustin/websockets")
11720 (synopsis
11721 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
11722 (description
11723 "@code{websockets} is a library for building WebSocket servers and clients
11724in Python with a focus on correctness and simplicity.
11725
11726Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
11727it provides an elegant coroutine-based API.")
11728 (license license:bsd-3)))
11729
11730(define-public selenium-manager
11731 (package
11732 (name "selenium-manager")
11733 (version "4.34.2")
11734 (source
11735 (origin
11736 (method git-fetch)
11737 (uri (git-reference
11738 (url "https://github.com/SeleniumHQ/selenium")
11739 (commit (string-append "selenium-" version "-python"))))
11740 (file-name (git-file-name name version))
11741 (sha256
11742 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
11743 (build-system cargo-build-system)
11744 (arguments
11745 (list
11746 ;; XXX: Almost all tests require either browsers or network access.
11747 #:tests? #f
11748 #:install-source? #f ; Most likely intended as a leaf.
11749 #:phases
11750 #~(modify-phases %standard-phases
11751 (add-after 'unpack 'chdir
11752 (lambda _
11753 (chdir "rust"))))))
11754 (native-inputs (list pkg-config))
11755 (inputs (cons* (list zstd "lib") xz
11756 (cargo-inputs 'selenium-manager)))
11757 (home-page "https://www.selenium.dev")
11758 (synopsis "CLI tool to manager the browser test infrastructure")
11759 (description
11760 "Selenium simplifies web browser automation. It specifically provides
11761infrastructure for the W3C WebDriver specification — a platform and
11762language-neutral coding interface compatible with all major web browsers.
11763
11764Selenium Manager is a CLI tool that automatically manages the browser/driver
11765infrastructure required by Selenium.")
11766 (license license:asl2.0)))
11767
11768(define-public python-selenium
11769 (package/inherit selenium-manager
11770 (name "python-selenium")
11771 (build-system pyproject-build-system)
11772 (arguments
11773 (list
11774 ;; XXX: Disable failing tests.
11775 #:test-flags
11776 #~(list "--ignore-glob=test/selenium/webdriver/*"
11777 ;; Probably requires those.
11778 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
11779 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
11780 ;; XXX: SSL certificates access.
11781 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
11782 "-k" "not test_missing_cdp_devtools_version_falls_back")
11783 #:phases
11784 #~(modify-phases %standard-phases
11785 (add-after 'unpack 'chdir
11786 (lambda _
11787 (chdir "py")))
11788 (add-after 'chdir 'inject-selenium-manager-binary
11789 (lambda* (#:key inputs #:allow-other-keys)
11790 (substitute* "selenium/webdriver/common/selenium_manager.py"
11791 (("compiled_path = Path.*")
11792 (format #f "return Path(~s)~%"
11793 (search-input-file inputs "bin/selenium-manager"))))
11794 (substitute* "pyproject.toml"
11795 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
11796 "")
11797 (("target = \"selenium\\.webdriver\\.common.*\"")
11798 ""))))
11799 (add-after 'chdir 'relax-requirements
11800 (lambda _
11801 (substitute* "pyproject.toml"
11802 (("\"(typing_extensions|trio|urllib3.*)~=.*\"," _ target)
11803 (format #f "~s," target))))))))
11804 (propagated-inputs (list python-certifi
11805 python-trio
11806 python-trio-websocket
11807 python-typing-extensions
11808 python-urllib3
11809 python-websocket-client))
11810 (inputs (list selenium-manager))
11811 (native-inputs (list python-filetype
11812 python-pytest
11813 python-pytest-mock
11814 python-pytest-trio
11815 python-setuptools
11816 python-setuptools-rust))
11817 (synopsis "Python bindings for Selenium")
11818 (description
11819 "Selenium enables web browser automation. It specifically provides
11820infrastructure for the W3C WebDriver specification — a platform and
11821language-neutral coding interface compatible with all major web browsers.")))
11822
11823(define-public python-rapidjson
11824 (package
11825 (name "python-rapidjson")
11826 (version "1.23")
11827 (source
11828 (origin
11829 (method git-fetch)
11830 (uri (git-reference
11831 (url "https://github.com/python-rapidjson/python-rapidjson")
11832 (commit (string-append "v" version))))
11833 (file-name (git-file-name name version))
11834 (sha256
11835 (base32 "0ajf919gg3qmi68jb0m6v80al2n65cn2ac36qz46s0h6zh92cl86"))
11836 (modules '((guix build utils)))
11837 (snippet
11838 '(delete-file-recursively "rapidjson"))))
11839 (build-system pyproject-build-system)
11840 (arguments
11841 (list
11842 #:test-flags '(list "tests")
11843 #:phases
11844 #~(modify-phases %standard-phases
11845 ;; We cannot seem to use #:configure-flags with the
11846 ;; pyproject-build-system to override rj_include_dir.
11847 (add-after 'unpack 'override-rapidjson-sources
11848 (lambda _
11849 (substitute* "setup.py"
11850 (("^rj_include_dir =.*")
11851 (string-append "rj_include_dir = '"
11852 #$(this-package-native-input "rapidjson")
11853 "/include/rapidjson" "'"))
11854 (("if not os.path.isdir.*") "if False:")))))))
11855 (native-inputs
11856 (list rapidjson python-pytest python-pytz python-setuptools))
11857 (home-page "https://github.com/python-rapidjson/python-rapidjson")
11858 (synopsis "Python wrapper around rapidjson")
11859 (description "This package provides a python wrapper around rapidjson.")
11860 (license license:expat)))
11861
11862(define-public python-venusian
11863 (package
11864 (name "python-venusian")
11865 (version "3.1.1")
11866 (source
11867 (origin
11868 (method url-fetch)
11869 (uri (pypi-uri "venusian" version))
11870 (sha256
11871 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
11872 (build-system pyproject-build-system)
11873 (native-inputs
11874 (list python-pytest
11875 python-setuptools))
11876 (home-page "https://docs.pylonsproject.org/projects/venusian")
11877 (synopsis "Library for deferring decorator actions")
11878 (description
11879 "Venusian is a library which allows framework authors to defer decorator
11880actions. Instead of taking actions when a function (or class) decorator is
11881executed at import time, you can defer the action usually taken by the
11882decorator until a separate scan phase.")
11883 (license license:repoze)))
11884
11885(define-public python-zope-deprecation
11886 (package
11887 (name "python-zope-deprecation")
11888 (version "6.0")
11889 (source (origin
11890 (method url-fetch)
11891 (uri (pypi-uri "zope_deprecation" version))
11892 (sha256
11893 (base32
11894 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
11895 (build-system pyproject-build-system)
11896 (arguments
11897 (list #:tests? #f)) ;no tests in PyPI
11898 (native-inputs
11899 (list python-setuptools))
11900 (home-page "https://zopedeprecation.readthedocs.io/")
11901 (synopsis "Function for marking deprecations")
11902 (description "The @code{zope.deprecation} module provides a function for
11903marking modules, classes, functions, methods and properties as deprecated,
11904displaying warnings when usaged in application code.")
11905 (license license:zpl2.1)))
11906
11907(define-public python-translationstring
11908 (package
11909 (name "python-translationstring")
11910 (version "1.4")
11911 (source (origin
11912 (method url-fetch)
11913 (uri (pypi-uri "translationstring" version))
11914 (sha256
11915 (base32
11916 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
11917 (build-system pyproject-build-system)
11918 (native-inputs
11919 (list python-pytest
11920 python-setuptools))
11921 (home-page "https://docs.pylonsproject.org/projects/translationstring")
11922 (synopsis "Internationalization tooling for the Pylons project")
11923 (description "This package provides a library used by various Pylons
11924project packages for internationalization (i18n) duties related to
11925translation.")
11926 (license license:repoze)))
11927
11928(define-public python-plaster
11929 (package
11930 (name "python-plaster")
11931 (version "1.1.2")
11932 (source (origin
11933 (method url-fetch)
11934 (uri (pypi-uri "plaster" version))
11935 (sha256
11936 (base32
11937 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
11938 (build-system pyproject-build-system)
11939 (native-inputs
11940 (list python-pytest
11941 python-setuptools))
11942 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
11943 (synopsis "Configuration loader for multiple config file formats")
11944 (description
11945 "Plaster is a loader interface around multiple config file formats. It
11946exists to define a common API for applications to use when they wish to load
11947configuration. The library itself does not aim to handle anything except a
11948basic API that applications may use to find and load configuration settings.
11949Any specific constraints should be implemented in a pluggable loader which can
11950be registered via an entrypoint.")
11951 (license license:repoze)))
11952
11953(define-public python-plaster-pastedeploy
11954 (package
11955 (name "python-plaster-pastedeploy")
11956 (version "1.0.1")
11957 (source (origin
11958 (method url-fetch)
11959 (uri (pypi-uri "plaster_pastedeploy" version))
11960 (sha256
11961 (base32
11962 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
11963 (build-system pyproject-build-system)
11964 (native-inputs
11965 (list python-pytest
11966 python-setuptools))
11967 (propagated-inputs
11968 (list python-plaster python-pastedeploy))
11969 (home-page "https://github.com/Pylons/plaster_pastedeploy")
11970 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
11971 (description
11972 "This plugin for @code{python-plaster} adds support for PasteDeploy
11973syntax, it provides a plaster @code{Loader} object that can parse ini files
11974according to the standard set by PasteDeploy")
11975 (license license:expat)))
11976
11977(define-public python-hupper
11978 (package
11979 (name "python-hupper")
11980 (version "1.12.1")
11981 (source
11982 (origin
11983 (method url-fetch)
11984 (uri (pypi-uri "hupper" version))
11985 (sha256
11986 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
11987 (build-system pyproject-build-system)
11988 (arguments
11989 (list
11990 ;; RuntimeError: timeout waiting for change to
11991 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
11992 #:test-flags #~(list "--ignore=tests/test_it.py")))
11993 (native-inputs
11994 (list python-pytest python-setuptools python-wheel))
11995 (propagated-inputs
11996 (list python-watchdog))
11997 (home-page "https://readthedocs.org/projects/hupper")
11998 (synopsis "Integrated process monitor tracking changes to imported Python files")
11999 (description
12000 "Hupper is an integrated process monitor that will track changes to any
12001imported Python files in sys.modules as well as custom paths. When files are
12002changed the process is restarted.")
12003 (license license:expat)))
12004
12005(define-public python-pyowm
12006 (package
12007 (name "python-pyowm")
12008 (version "3.3.0")
12009 (source
12010 (origin
12011 (method git-fetch)
12012 (uri (git-reference
12013 (url "https://github.com/csparpa/pyowm")
12014 (commit version)))
12015 (file-name (git-file-name name version))
12016 (sha256
12017 (base32
12018 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
12019 (build-system pyproject-build-system)
12020 (arguments (list #:test-flags #~(list "tests/unit")))
12021 (native-inputs (list python-pytest python-setuptools python-wheel))
12022 (propagated-inputs
12023 (list python-geojson-for-pyowm
12024 python-pysocks
12025 python-requests))
12026 (home-page "https://github.com/csparpa/pyowm")
12027 (synopsis "Python wrapper around OpenWeatherMap web APIs")
12028 (description
12029 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
12030 (license license:expat)))
12031
12032(define-public python-pyramid
12033 (package
12034 (name "python-pyramid")
12035 (version "2.1")
12036 (source
12037 (origin
12038 (method git-fetch)
12039 (uri (git-reference
12040 (url "https://github.com/Pylons/pyramid")
12041 (commit version)))
12042 (file-name (git-file-name name version))
12043 (sha256
12044 (base32 "0my03b81009w9zqx5cdn9qixh0jah49hr0379n98kx2j3b8cfk1p"))))
12045 (build-system pyproject-build-system)
12046 (native-inputs
12047 (list python-pytest
12048 python-setuptools
12049 python-webtest
12050 python-zope-component))
12051 (propagated-inputs
12052 (list python-hupper
12053 python-plaster
12054 python-plaster-pastedeploy
12055 python-translationstring
12056 python-venusian
12057 python-webob
12058 python-zope-deprecation
12059 python-zope-interface))
12060 (home-page "https://trypyramid.com/")
12061 (synopsis "Python web-framework suitable for small and large sites")
12062 (description
12063 "Pyramid makes it easy to write web applications. From minimal
12064request/response web apps to larger, grown applications.")
12065 (license license:repoze)))
12066
12067(define-public python-pyramid-chameleon
12068 ;; PyPI lacks a fresh release, use the latest commit associated with
12069 ;; unrleased version, see:
12070 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
12071 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
12072 (revision "0"))
12073 (package
12074 (name "python-pyramid-chameleon")
12075 (version (git-version "0.4.dev0" revision commit))
12076 (source
12077 (origin
12078 (method git-fetch)
12079 (uri (git-reference
12080 (url "https://github.com/Pylons/pyramid_chameleon")
12081 (commit commit)))
12082 (file-name (git-file-name name version))
12083 (sha256
12084 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
12085 (build-system pyproject-build-system)
12086 (native-inputs
12087 (list python-pytest
12088 python-setuptools))
12089 (propagated-inputs
12090 (list python-chameleon
12091 python-pyramid))
12092 (home-page "https://github.com/Pylons/pyramid_chameleon")
12093 (synopsis "Chameleon template compiler for pyramid")
12094 (description
12095 "These package provides bindings for the Chameleon templating system
12096 for the Pyramid web framework.")
12097 (license license:repoze))))
12098
12099(define-public python-pyramid-debugtoolbar
12100 (package
12101 (name "python-pyramid-debugtoolbar")
12102 (version "4.12.1")
12103 (source
12104 (origin
12105 (method git-fetch)
12106 (uri (git-reference
12107 (url "https://github.com/Pylons/pyramid_debugtoolbar")
12108 (commit version)))
12109 (file-name (git-file-name name version))
12110 (sha256
12111 (base32 "0kalb5rsrlcz62zv9a39kp28mvwg9j6gymvzxbybdnvk51v9if56"))))
12112 (build-system pyproject-build-system)
12113 (arguments
12114 (list
12115 #:test-flags
12116 ;; Large diff assertion not equal faileurs.
12117 #~(list #$@(map (lambda (test)
12118 (string-append "--deselect=tests"
12119 "/test_panels/test_sqla.py::" test))
12120 (list "TestSimpleSelect::test_panel"
12121 "TestTransactionCommit::test_panel"
12122 "TestTransactionRollback::test_panel")))))
12123 (native-inputs
12124 (list python-pytest
12125 python-setuptools
12126 python-webtest))
12127 (propagated-inputs
12128 (list python-pyramid
12129 python-pyramid-chameleon
12130 python-pyramid-jinja2
12131 python-pyramid-mako
12132 python-selenium
12133 python-sqlalchemy
12134 python-waitress))
12135 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
12136 (synopsis "Pyramid debug toolbar")
12137 (description
12138 "This package provides an interactive HTML debugger for Pyramid
12139application development.")
12140 (license license:bsd-3)))
12141
12142(define-public python-pyramid-jinja2
12143 (package
12144 (name "python-pyramid-jinja2")
12145 (version "2.10.1")
12146 (source
12147 (origin
12148 (method url-fetch)
12149 (uri (pypi-uri "pyramid_jinja2" version))
12150 (sha256
12151 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
12152 (build-system pyproject-build-system)
12153 (arguments
12154 (list
12155 #:test-flags
12156 ;; Two tests failed with assertion not equal.
12157 #~(list "-k" "not test_it_relative_to_package and not test_options")))
12158 (native-inputs
12159 (list python-pytest
12160 python-setuptools
12161 python-webtest))
12162 (propagated-inputs
12163 (list python-jinja2
12164 python-markupsafe
12165 python-pyramid
12166 python-zope-deprecation))
12167 (home-page "https://github.com/Pylons/pyramid_jinja2")
12168 (synopsis "Jinja2 template bindings for the Pyramid web framework")
12169 (description "This package provides Jinja2 template bindings for the
12170Pyramid web framework.")
12171 (license license:repoze)))
12172
12173(define-public python-pyramid-mako
12174 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
12175 ;; master, us the latest commit for now.
12176 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
12177 (revision "0"))
12178 (package
12179 (name "python-pyramid-mako")
12180 (version (git-version "1.1.0" revision commit))
12181 (source
12182 (origin
12183 (method git-fetch)
12184 (uri (git-reference
12185 (url "https://github.com/Pylons/pyramid_mako")
12186 (commit commit)))
12187 (file-name (git-file-name name version))
12188 (sha256
12189 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
12190 (build-system pyproject-build-system)
12191 (native-inputs
12192 (list python-pytest
12193 python-setuptools))
12194 (propagated-inputs
12195 (list python-mako
12196 python-pyramid))
12197 (home-page "https://github.com/Pylons/pyramid_mako")
12198 (synopsis "Mako template bindings for the Pyramid web framework")
12199 (description
12200 "This package provides Mako template bindings for the Pyramid web
12201framework.")
12202 (license license:repoze))))
12203
12204(define-public python-pyramid-retry
12205 (package
12206 (name "python-pyramid-retry")
12207 (version "2.1.1")
12208 (source
12209 (origin
12210 (method url-fetch)
12211 (uri (pypi-uri "pyramid_retry" version))
12212 (sha256
12213 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
12214 (build-system pyproject-build-system)
12215 (native-inputs
12216 (list python-pytest
12217 python-setuptools
12218 python-webtest))
12219 (propagated-inputs
12220 (list python-pyramid
12221 python-zope-interface))
12222 (home-page "https://github.com/Pylons/pyramid_retry")
12223 (synopsis "Pyramid execution policy supporting retrying failed requests")
12224 (description
12225 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
12226and can retry them a configurable number of times under certain \"retryable\"
12227error conditions before indicating a failure to the client.")
12228 (license license:expat)))
12229
12230(define-public python-pyramid-tm
12231 (package
12232 (name "python-pyramid-tm")
12233 (version "2.6")
12234 (source
12235 (origin
12236 (method url-fetch)
12237 (uri (pypi-uri "pyramid_tm" version))
12238 (sha256
12239 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
12240 (build-system pyproject-build-system)
12241 (native-inputs
12242 (list python-pytest
12243 python-setuptools
12244 python-webtest))
12245 (propagated-inputs
12246 (list python-pyramid
12247 python-transaction))
12248 (home-page "https://github.com/Pylons/pyramid_tm")
12249 (synopsis "Centralized transaction management for Pyramid")
12250 (description
12251 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
12252active @url{https://pypi.org/project/transaction/, transaction} as provided by
12253the Python transaction package.")
12254 (license license:repoze)))
12255
12256(define-public python-random-user-agent
12257 (package
12258 (name "python-random-user-agent")
12259 (version "1.0.1")
12260 (source
12261 (origin
12262 (method url-fetch)
12263 (uri (pypi-uri "random_user_agent" version))
12264 (sha256
12265 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
12266 (build-system pyproject-build-system)
12267 (arguments (list #:tests? #f)) ; No tests.
12268 (native-inputs (list python-setuptools))
12269 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
12270 (synopsis "List of user agents")
12271 (description
12272 "This package provides a list of user agents, from a collection of more
12273than 326,000 known user-agents. Users can pick a random one, or select one
12274based on filters.")
12275 (license license:expat)))
12276
12277(define-public python-rangehttpserver
12278 (package
12279 (name "python-rangehttpserver")
12280 (version "1.4.0")
12281 (source
12282 (origin
12283 (method git-fetch)
12284 (uri (git-reference
12285 (url "https://github.com/danvk/RangeHTTPServer")
12286 (commit version)))
12287 (file-name (git-file-name name version))
12288 (sha256
12289 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
12290 (build-system pyproject-build-system)
12291 (native-inputs
12292 (list python-pytest
12293 python-requests
12294 python-setuptools))
12295 (home-page "https://github.com/danvk/RangeHTTPServer")
12296 (synopsis "SimpleHTTPServer with support for range requests")
12297 (description
12298 "This tool provides a simple HTTP server with support for Range
12299requests.")
12300 (license license:asl2.0)))
12301
12302(define-public python-flask-restx
12303 (package
12304 (name "python-flask-restx")
12305 (version "1.3.0")
12306 (source
12307 (origin
12308 (method git-fetch) ;no tests in PyPI archive
12309 (uri (git-reference
12310 (url "https://github.com/python-restx/flask-restx")
12311 (commit version)))
12312 (file-name (git-file-name name version))
12313 (sha256
12314 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
12315 (build-system pyproject-build-system)
12316 (arguments
12317 (list
12318 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
12319 #:test-flags
12320 #~(list "--benchmark-skip"
12321 ;; ValueError: http://www.google.com is not a valid URL. Domain
12322 ;; does not exists.
12323 "--deselect=tests/test_inputs.py::URLTest::test_check"
12324 "-k" (string-join
12325 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
12326 (list "not test_rfc822_value"
12327 "test_iso8601_value"
12328 ;; assert 404 == 2000
12329 "test_specs_endpoint_host_and_subdomain"
12330 ;; ValueError: [email protected] is not a valid email
12331 "test_valid_value_check")
12332 " and not "))))
12333 (native-inputs
12334 (list python-blinker
12335 python-faker
12336 python-pytest
12337 python-pytest-benchmark
12338 python-pytest-flask
12339 python-pytest-mock
12340 python-setuptools))
12341 (propagated-inputs
12342 (list python-aniso8601
12343 python-flask
12344 python-importlib-resources
12345 python-jsonschema
12346 python-pytz
12347 python-werkzeug))
12348 (home-page "https://github.com/python-restx/flask-restx")
12349 (synopsis
12350 "Framework for fast, easy and documented API development with Flask")
12351 (description
12352 "Flask-RESTX is an extension for Flask that adds support for quickly building
12353REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
12354 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
12355decorators and tools to describe your API and expose its documentation properly using
12356Swagger.")
12357 (license license:bsd-3)))
12358
12359(define-public python-flask-socketio
12360 (package
12361 (name "python-flask-socketio")
12362 (version "5.6.1")
12363 (source
12364 (origin
12365 (method git-fetch)
12366 (uri (git-reference
12367 (url "https://github.com/miguelgrinberg/Flask-SocketIO/")
12368 (commit (string-append "v" version))))
12369 (file-name (git-file-name name version))
12370 (sha256
12371 (base32 "1bs594bxggwn78yhf86whv6bcs8gb7mhrm5dnk5x4c3jb20nhfmm"))))
12372 (build-system pyproject-build-system)
12373 (native-inputs
12374 (list python-pytest
12375 python-redis
12376 python-setuptools))
12377 (propagated-inputs
12378 (list python-flask
12379 python-socketio))
12380 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
12381 (synopsis "Socket.IO integration for Flask applications")
12382 (description "Socket.IO integration for Flask applications")
12383 (license license:expat)))
12384
12385(define-public python-manuel
12386 (package
12387 (name "python-manuel")
12388 (version "1.13.0")
12389 (source
12390 (origin
12391 (method url-fetch)
12392 (uri (pypi-uri "manuel" version))
12393 (sha256
12394 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
12395 (build-system pyproject-build-system)
12396 (arguments
12397 (list
12398 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
12399 #:tests? #f))
12400 (propagated-inputs
12401 (list python-setuptools)) ;install requires
12402 (home-page "https://pypi.org/project/manuel/")
12403 (synopsis "Build tested documentation")
12404 (description
12405 "Manuel lets you mix and match traditional doctests with custom test syntax.")
12406 (license license:asl2.0)))
12407
12408(define-public python-marshmallow-jsonapi
12409 (package
12410 (name "python-marshmallow-jsonapi")
12411 (version "0.26.0")
12412 (source
12413 (origin
12414 (method git-fetch)
12415 (uri (git-reference
12416 ;; XXX: Deprecated upstream: This repository has been archived
12417 ;; by the owner on Jun 6, 2024. It is now read-only.
12418 ;; Using a maintained fork. The pypi name of this fork
12419 ;; is marshmallow-jsonapi-minfork.
12420 (url "https://github.com/tadams42/marshmallow-jsonapi")
12421 (commit version)))
12422 (file-name (git-file-name name version))
12423 (sha256
12424 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
12425 (build-system pyproject-build-system)
12426 (native-inputs
12427 (list python-faker
12428 python-flask
12429 python-pytest
12430 python-setuptools))
12431 (propagated-inputs (list python-marshmallow))
12432 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
12433 (synopsis "JSON:API 1.0 formatting with Marshmallow")
12434 (description
12435 "The marshmallow-jsonapi package provides a simple way to produce
12436@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
12437framework. It includes optional utilities to integrate with Flask. This is a
12438forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
12439 (license license:expat)))
12440
12441(define-public python-pecan
12442 (package
12443 (name "python-pecan")
12444 (version "1.8.0")
12445 (source
12446 (origin
12447 (method git-fetch)
12448 (uri (git-reference
12449 (url "https://github.com/pecan/pecan")
12450 (commit version)))
12451 (file-name (git-file-name name version))
12452 (sha256
12453 (base32 "0w693jpnjy358992f3jrrlf31knkqn0jvz2jx0iz7ziikprc61p8"))))
12454 (build-system pyproject-build-system)
12455 (arguments
12456 (list
12457 #:test-flags '(list "--pyargs" "pecan")))
12458 (native-inputs
12459 (list gunicorn
12460 python-genshi
12461 python-jinja2
12462 python-pytest
12463 python-sqlalchemy-2
12464 python-webtest))
12465 (propagated-inputs
12466 (list python-mako
12467 python-webob))
12468 (home-page "http://github.com/pecan/pecan")
12469 (synopsis "WSGI object-dispatching web framework")
12470 (description "This package provides a WSGI object-dispatching web
12471framework, designed to be lean and fast, with few dependencies.")
12472 (license license:bsd-3)))
12473
12474(define-public python-persistent
12475 (package
12476 (name "python-persistent")
12477 (version "6.1.1")
12478 (source
12479 (origin
12480 (method git-fetch)
12481 (uri (git-reference
12482 (url "https://github.com/zopefoundation/persistent/")
12483 (commit version)))
12484 (file-name (git-file-name name version))
12485 (sha256
12486 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
12487 (build-system pyproject-build-system)
12488 (arguments
12489 (list
12490 #:phases
12491 #~(modify-phases %standard-phases
12492 (replace 'check
12493 (lambda* (#:key tests? #:allow-other-keys)
12494 (if tests?
12495 (invoke "zope-testrunner" "--test-path=src"
12496 ;; XXX: Ignore doc tests.
12497 "!persistent.tests.test_docs")
12498 (format #t "test suite not run~%")))))))
12499 (propagated-inputs
12500 (list python-cffi
12501 python-zope-deferredimport
12502 python-zope-interface
12503 python-zope-testrunner))
12504 (native-inputs
12505 (list python-manuel python-zope-testrunner python-setuptools))
12506 (home-page "https://github.com/zopefoundation/persistent/")
12507 (synopsis "Translucent persistent objects")
12508 (description
12509 "This package contains a generic persistence implementation for Python.
12510It forms the core protocol for making objects interact \"transparently\" with
12511a database such as the ZODB.")
12512 (license license:zpl2.1)))
12513
12514(define-public python-transaction
12515 (package
12516 (name "python-transaction")
12517 (version "5.0")
12518 (source
12519 (origin
12520 (method url-fetch)
12521 (uri (pypi-uri "transaction" version))
12522 (sha256
12523 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
12524 (build-system pyproject-build-system)
12525 (native-inputs
12526 (list python-pytest
12527 python-setuptools))
12528 (propagated-inputs
12529 (list python-zope-interface))
12530 (home-page "https://github.com/zopefoundation/transaction")
12531 (synopsis "Transaction management for Python")
12532 (description "This package contains a generic transaction implementation
12533for Python. It is mainly used by the ZODB.")
12534 (license license:zpl2.1)))
12535
12536(define-public python-truststore
12537 (package
12538 (name "python-truststore")
12539 (version "0.10.4")
12540 (source
12541 (origin
12542 (method url-fetch)
12543 (uri (pypi-uri "truststore" version))
12544 (sha256
12545 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
12546 (build-system pyproject-build-system)
12547 (arguments
12548 (list #:tests? #f)) ;all tests require Internet access
12549 (native-inputs
12550 (list python-flit-core))
12551 (home-page "https://github.com/sethmlarson/truststore")
12552 (synopsis "Verify certificates using native system trust stores")
12553 (description
12554 "Truststore is a library which exposes native system certificate stores (ie
12555\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
12556Python applications no longer need to rely on certifi as a root certificate
12557store.")
12558 (license license:expat)))
12559
12560(define-public python-robot-detection
12561 (package
12562 (name "python-robot-detection")
12563 (version "0.4.0")
12564 (source
12565 (origin
12566 (method git-fetch)
12567 (uri (git-reference
12568 (url "https://github.com/rory/robot-detection")
12569 (commit (string-append "v" version))))
12570 (file-name (git-file-name name version))
12571 (sha256
12572 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
12573 (build-system pyproject-build-system)
12574 (arguments (list #:test-backend #~'unittest))
12575 (native-inputs (list python-setuptools))
12576 (propagated-inputs (list python-six))
12577 (home-page "https://github.com/rory/robot-detection")
12578 (synopsis "Detect web crawlers")
12579 (description
12580 "@code{robot_detection} is a python module to detect if a given HTTP User
12581Agent is a web crawler. It uses the list of registered robots from
12582@url{http://www.robotstxt.org}.")
12583 (license license:gpl3+)))
12584
12585(define-public python-robotframework-requests
12586 (package
12587 (name "python-robotframework-requests")
12588 (version "0.9.7")
12589 (source
12590 (origin
12591 (method git-fetch) ; no tests in PyPI release
12592 (uri (git-reference
12593 (url "https://github.com/MarketSquare/robotframework-requests")
12594 (commit (string-append "v" version))))
12595 (file-name (git-file-name name version))
12596 (sha256
12597 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
12598 (build-system pyproject-build-system)
12599 (native-inputs
12600 (list python-pytest
12601 python-setuptools
12602 python-wheel))
12603 (propagated-inputs
12604 (list python-requests
12605 python-robotframework))
12606 (home-page "https://github.com/MarketSquare/robotframework-requests")
12607 (synopsis "Robot Framework keyword library wrapper around requests")
12608 (description
12609 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
12610Framework} library aimed to provide HTTP API testing functionalities by
12611wrapping the @code{requests} Python library.")
12612 (license license:expat)))
12613
12614(define-public python-pysolr
12615 (package
12616 (name "python-pysolr")
12617 (version "3.10.0")
12618 (source
12619 (origin
12620 (method url-fetch)
12621 (uri (pypi-uri "pysolr" version))
12622 (sha256
12623 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
12624 (build-system pyproject-build-system)
12625 (arguments
12626 '(#:tests? #f)) ; Tests require network access.
12627 (native-inputs
12628 (list python-setuptools
12629 python-setuptools-scm
12630 python-wheel))
12631 (propagated-inputs
12632 (list python-requests))
12633 (home-page "https://github.com/django-haystack/pysolr/")
12634 (synopsis "Lightweight python wrapper for Apache Solr")
12635 (description
12636 "This module provides an interface that queries the Apache Solr server
12637using a pure Python implementation.")
12638 (license license:bsd-3)))
12639
12640(define-public python-pyjsparser
12641 ;; XXX: This project is potentially abandonware, consider to remove in next
12642 ;; refresh cycle, see:
12643 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
12644 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
12645 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
12646 (package
12647 (name "python-pyjsparser")
12648 (version "2.7.1")
12649 (source
12650 (origin
12651 (method url-fetch)
12652 (uri (pypi-uri "pyjsparser" version))
12653 (sha256
12654 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
12655 (build-system pyproject-build-system)
12656 (arguments
12657 '(#:tests? #f)) ;no tests in PyPI
12658 (native-inputs (list python-setuptools))
12659 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
12660 (synopsis "Fast JavaScript parser")
12661 (description
12662 "This package provides a fast JavaScript parser (based on esprima.js)")
12663 (license license:expat)))
12664
12665(define-public python-js2py
12666 (package
12667 (name "python-js2py")
12668 (properties '((commit . "2e017b86e2f18a6c8a842293b1687f2ce7baa12e")
12669 (revision . "0")))
12670 (version (git-version "0.74"
12671 (assoc-ref properties 'revision)
12672 (assoc-ref properties 'commit)))
12673 (source
12674 (origin
12675 (method git-fetch)
12676 (uri (git-reference
12677 (url "https://github.com/PiotrDabkowski/Js2Py")
12678 (commit (assoc-ref properties 'commit))))
12679 (file-name (git-file-name name version))
12680 (sha256
12681 (base32 "0rsac03shkm0yxq91hzxdvhb96wy168bxdw8azi25bvlm8s3l27p"))
12682 (patches
12683 (list
12684 (origin
12685 (method url-fetch)
12686 (uri (string-append "https://github.com/PiotrDabkowski/Js2Py/commit"
12687 "/fd7df4a91fb08060914c7b1d9e94583d18f3371b"
12688 ".patch"))
12689 (file-name (string-append name "-" version "-pull-327.patch"))
12690 (sha256
12691 (base32 "14v89v8qqrsq0d63xbilkvx19l1rk59mlrbxvd4sj138lk7160ki")))))))
12692 (build-system pyproject-build-system)
12693 (arguments
12694 (list #:tests? #f)) ; tests require Node
12695 (native-inputs
12696 (list python-setuptools))
12697 (propagated-inputs
12698 (list python-pyjsparser
12699 python-six
12700 python-tzlocal))
12701 (home-page "https://github.com/PiotrDabkowski/Js2Py")
12702 (synopsis "JavaScript to Python translator")
12703 (description
12704 "This package provides a JavaScript to Python translator and a JavaScript
12705interpreter written in pure Python.")
12706 (license license:expat)))
12707
12708(define-public python-http-ece
12709 (package
12710 (name "python-http-ece")
12711 (version "1.2.1")
12712 (source
12713 (origin
12714 (method git-fetch)
12715 (uri (git-reference
12716 (url "https://github.com/web-push-libs/encrypted-content-encoding")
12717 (commit (string-append "v" version))))
12718 (file-name (git-file-name name version))
12719 (sha256
12720 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
12721 (build-system pyproject-build-system)
12722 (arguments
12723 `(#:phases
12724 (modify-phases %standard-phases
12725 (add-after 'unpack 'change-directory
12726 (lambda _ (chdir "python") #t)))))
12727 (native-inputs
12728 (list python-pytest python-setuptools))
12729 (propagated-inputs
12730 (list python-cryptography))
12731 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
12732 (synopsis "Encrypted Content Encoding for HTTP")
12733 (description
12734 "This package provides a simple implementation of Encrypted Content
12735Encoding for HTTP.")
12736 (license license:expat)))
12737
12738(define-public python-imap-tools
12739 (package
12740 (name "python-imap-tools")
12741 (version "1.9.0")
12742 (source
12743 (origin
12744 (method git-fetch) ; no tests in PyPI release
12745 (uri (git-reference
12746 (url "https://github.com/ikvk/imap_tools")
12747 (commit (string-append "v" version))))
12748 (file-name (git-file-name name version))
12749 (sha256
12750 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
12751 (arguments
12752 (list
12753 #:test-flags
12754 ;; Tests require a network connection
12755 #~(list "-k" (string-append "not test_action"
12756 " and not test_attributes"
12757 " and not test_connection"
12758 " and not test_folders"
12759 " and not test_idle"
12760 " and not test_live"))))
12761 (build-system pyproject-build-system)
12762 (native-inputs
12763 (list python-pytest python-setuptools python-wheel))
12764 (home-page "https://github.com/ikvk/imap_tools")
12765 (synopsis "Work with email and mailbox by IMAP")
12766 (description
12767 "This Python library provides tools to deal with email and mailboxes
12768over IMAP:
12769
12770@itemize
12771@item Parsed email message attributes
12772@item Query builder for searching emails
12773@item Work with emails in folders (copy, delete, flag, move, seen)
12774@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
12775@end itemize")
12776 (license license:asl2.0)))
12777
12778(define-public python-giturlparse
12779 (package
12780 (name "python-giturlparse")
12781 (version "0.12.0")
12782 (source
12783 (origin
12784 (method git-fetch)
12785 (uri (git-reference
12786 (url "https://github.com/nephila/giturlparse")
12787 (commit version)))
12788 (file-name (git-file-name name version))
12789 (sha256
12790 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
12791 (build-system pyproject-build-system)
12792 (native-inputs (list python-pytest python-setuptools))
12793 (home-page "https://github.com/nephila/giturlparse")
12794 (synopsis "Git URL parsing module")
12795 (description
12796 "This package provides a git URL parsing module which supports parsing
12797and rewriting of remote git URLs from various hosting providers.")
12798 (license license:asl2.0)))
12799
12800(define-public python-hstspreload
12801 (package
12802 (name "python-hstspreload")
12803 (version "2025.1.1")
12804 (source
12805 (origin
12806 (method git-fetch)
12807 (uri (git-reference
12808 (url "https://github.com/sethmlarson/hstspreload")
12809 (commit version)))
12810 (file-name (git-file-name name version))
12811 (sha256
12812 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
12813 (build-system pyproject-build-system)
12814 (arguments (list #:tests? #f)) ; tests require external resources.
12815 (native-inputs (list python-setuptools))
12816 (home-page "https://github.com/sethmlarson/hstspreload")
12817 (synopsis "Chromium HSTS Preload list as a Python package")
12818 (description
12819 "@code{python-hstspreload} contains Chromium HSTS Preload list
12820as a Python package.")
12821 (license license:bsd-3)))
12822
12823(define-public python-sanic-routing
12824 (package
12825 (name "python-sanic-routing")
12826 (version "23.12.0")
12827 (source
12828 (origin
12829 (method url-fetch)
12830 (uri (pypi-uri "sanic-routing" version))
12831 (sha256
12832 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
12833 (build-system pyproject-build-system)
12834 (arguments
12835 ;; PyPi sources does not contain tests, recursive dependency on
12836 ;; python-sanic.
12837 (list #:tests? #f))
12838 (native-inputs (list python-setuptools python-wheel))
12839 (home-page "https://github.com/sanic-org/sanic-routing/")
12840 (synopsis "Routing component for Sanic")
12841 (description "Internal package for @code{python-sanic}, which provides
12842the @code{BasicRouter}.")
12843 (license license:expat)))
12844
12845(define-public python-sanic-testing
12846 (package
12847 (name "python-sanic-testing")
12848 (version "23.12.0")
12849 (source
12850 (origin
12851 (method url-fetch)
12852 (uri (pypi-uri "sanic-testing" version))
12853 (sha256
12854 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
12855 (build-system pyproject-build-system)
12856 (arguments
12857 ;; PyPi sources does not contain tests, recursive dependency on
12858 ;; python-sanic.
12859 (list #:tests? #f))
12860 (propagated-inputs (list python-httpx python-sanic-bootstrap))
12861 (native-inputs (list python-setuptools python-wheel))
12862 (home-page "https://github.com/sanic-org/sanic-testing/")
12863 (synopsis "Test clients for Sanic")
12864 (description "Internal package for @code{python-sanic}, which is
12865meant to be the core testing utility and clients for testing Sanic
12866applications.")
12867 (license license:expat)))
12868
12869(define-public python-sanic
12870 (package
12871 (name "python-sanic")
12872 (version "25.12.1")
12873 (source
12874 (origin
12875 (method url-fetch)
12876 (uri (pypi-uri "sanic" version))
12877 (sha256
12878 (base32 "0zxll83cvmcpiad3rri7cn9y8wi8xn7x0b00dimg0c20irhbylbv"))
12879 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
12880 (modules '((guix build utils)))
12881 (snippet #~(substitute* "setup.py"
12882 (("setuptools>=[0-9.]*")
12883 "setuptools")))))
12884 (build-system pyproject-build-system)
12885 (arguments
12886 (list
12887 #:test-flags
12888 #~(list "--asyncio-mode=auto"
12889 "--ignore=tests/benchmark/"
12890 "--ignore=tests/typing/test_typing.py"
12891 ;; Most tests hang or fail
12892 "--ignore=tests/test_cli.py"
12893 "--ignore=tests/worker/test_worker_serve.py"
12894 "-k"
12895 (string-append
12896 ;; PyPi sources lack examples module.
12897 "not test_gunicorn_"
12898 ;; Does not expect brotli and reordered headers.
12899 " and not test_raw_headers"
12900 ;; These look like buggy testcases.
12901 " and not test_zero_downtime"
12902 " and not test_non_default_uvloop_config_raises_warning"
12903 " and not test_listeners_triggered"
12904 " and not test_keep_alive_connection_context"
12905 " and not test_keep_alive_client_timeout"
12906 " and not test_conflicting_body_methods_overload"
12907 " and not test_unix_connection"
12908 ;; Unclear why they fail since core-updates merge.
12909 " and not test_missing_sni"
12910 " and not test_no_matching_cert"
12911 " and not test_wildcards"
12912 ;; These tests fail because subprotocols appear to be
12913 ;; parameterized as None
12914 " and not test_websocket_route_with_subprotocols"
12915 ;; AF_UNIX path too long
12916 " and not test_setup_and_teardown_unix"
12917 " and not test_configure_socket"
12918 ;; Freezes
12919 " and not test_server_run_with_repl"
12920 " and not test_server_run"
12921 " and not test_no_workers"
12922 ;; Raises DaemonError: Group 'root' does not exist
12923 " and not test_validate_user_sets_uid_and_gid"
12924 " and not test_validate_group_sets_gid"
12925 ;; Raises AssertionError:
12926 ;; assert 'text/xml; charset=utf-8' == 'application/xml'
12927 " and not test_guess_content_type"
12928 ;; Don't know.
12929 " and not test_chained_exception_handler"))))
12930 (propagated-inputs
12931 (list python-aiofiles
12932 python-aioquic
12933 python-html5tagger
12934 python-httptools
12935 python-multidict
12936 python-sanic-routing
12937 python-tracerite
12938 python-typing-extensions
12939 python-ujson
12940 python-uvloop
12941 python-websockets))
12942 (native-inputs
12943 (list python-bandit
12944 python-beautifulsoup4
12945 python-chardet
12946 python-cryptography
12947 python-docutils
12948 python-pygments
12949 python-pytest
12950 python-pytest-asyncio
12951 python-pytest-benchmark
12952 python-pytest-sanic
12953 python-pytest-xdist
12954 python-sanic-testing
12955 python-setuptools
12956 python-slotscheck
12957 python-towncrier
12958 python-types-ujson
12959 python-uvicorn))
12960 (home-page "https://github.com/sanic-org/sanic/")
12961 (synopsis "Async Python web server/framework")
12962 (description
12963 "Sanic is a Python web server and web framework that's written to go
12964fast. It allows the usage of the @code{async/await} syntax added in Python
129653.5, which makes your code non-blocking and speedy.")
12966 (license license:expat)))
12967
12968(define-public python-sanic-bootstrap
12969 (package
12970 (inherit python-sanic)
12971 (name "python-sanic-bootstrap")
12972 (arguments (list #:tests? #f))
12973 (native-inputs (list python-setuptools))))
12974
12975(define-public python-socketio
12976 (package
12977 (name "python-socketio")
12978 (version "5.16.4")
12979 (source
12980 (origin
12981 (method git-fetch)
12982 (uri (git-reference
12983 (url "https://github.com/miguelgrinberg/python-socketio/")
12984 (commit (string-append "v" version))))
12985 (file-name (git-file-name name version))
12986 (sha256
12987 (base32 "0695mq1nijlljkmpgn3nk6gfv34rzpgxrdsld1l1vix6gxyxna0y"))))
12988 (build-system pyproject-build-system)
12989 (arguments
12990 (list
12991 ;; tests: 642 passed, 5 warnings
12992 #:test-flags
12993 ;; Tests freeze.
12994 #~(list "--ignore=tests/async/test_admin.py"
12995 "--ignore=tests/common/test_admin.py")))
12996 (native-inputs
12997 (list python-msgpack
12998 python-pytest
12999 python-pytest-asyncio
13000 python-pytest-timeout
13001 python-redis
13002 python-setuptools
13003 python-uvicorn
13004 python-valkey))
13005 (propagated-inputs
13006 (list python-bidict
13007 python-engineio
13008 ;; [optional]
13009 python-aiohttp
13010 python-requests
13011 python-websocket-client))
13012 (home-page "https://github.com/miguelgrinberg/python-socketio/")
13013 (synopsis "Python Socket.IO server")
13014 (description
13015 "This package provides a Python implementation of the @code{Socket.IO}
13016realtime client and server.")
13017 (license license:expat)))
13018
13019(define-public python-socks
13020 (package
13021 (name "python-socks")
13022 (version "2.8.1")
13023 (source
13024 (origin
13025 (method git-fetch)
13026 (uri (git-reference
13027 (url "https://github.com/romis2012/python-socks")
13028 (commit (string-append "v" version))))
13029 (file-name (git-file-name name version))
13030 (sha256
13031 (base32 "1x95i9w3izivdgz6hadh5kiil12i4ljk4ashgh3g0rjv2rw33vhj"))))
13032 (build-system pyproject-build-system)
13033 (propagated-inputs (list python-trio))
13034 (native-inputs
13035 (list python-anyio
13036 python-flask
13037 python-pytest
13038 python-pytest-asyncio
13039 python-pytest-trio
13040 python-setuptools
13041 python-tiny-proxy
13042 python-trustme
13043 python-yarl))
13044 (home-page "https://github.com/romis2012/python-socks")
13045 (synopsis
13046 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
13047 (description
13048 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
13049 functionality.")
13050 (license license:asl2.0)))
13051
13052(define-public python-socksio
13053 (package
13054 (name "python-socksio")
13055 (version "1.0.0")
13056 (source
13057 (origin
13058 (method url-fetch)
13059 (uri (pypi-uri "socksio" version))
13060 (sha256
13061 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
13062 (build-system pyproject-build-system)
13063 (native-inputs
13064 (list python-flit-core python-pytest))
13065 (home-page "https://github.com/sethmlarson/socksio")
13066 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
13067 (description "The @code{socksio} Python module is a client-side sans-I/O
13068SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
13069@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
13070means the library itself does not handle the actual sending of the bytes
13071through the network, it only deals with the implementation details of the
13072SOCKS protocols. It can be paired with any I/O library.")
13073 (license license:expat)))
13074
13075(define-public python-simple-websocket
13076 (package
13077 (name "python-simple-websocket")
13078 (version "1.1.0")
13079 (source
13080 (origin
13081 (method url-fetch)
13082 (uri (pypi-uri "simple_websocket" version))
13083 (sha256
13084 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
13085 (build-system pyproject-build-system)
13086 (arguments
13087 ;; Requires Internet access to resolve example.com
13088 (list #:test-flags '(list "--ignore=tests/test_client.py")))
13089 (propagated-inputs (list python-wsproto))
13090 (native-inputs (list python-pytest
13091 python-setuptools))
13092 (home-page "https://github.com/miguelgrinberg/simple-websocket")
13093 (synopsis "Simple WebSocket server and client for Python")
13094 (description "This package provides a simple @code{WebSocket} server and
13095client for Python.")
13096 (license license:expat)))
13097
13098(define-public python-siosocks
13099 (package
13100 (name "python-siosocks")
13101 (version "0.3.0")
13102 (source
13103 (origin
13104 (method git-fetch)
13105 (uri (git-reference
13106 (url "https://github.com/pohmelie/siosocks")
13107 (commit (string-append "v" version))))
13108 (file-name (git-file-name name version))
13109 (sha256
13110 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
13111 (build-system pyproject-build-system)
13112 (native-inputs
13113 (list python-pytest
13114 python-pytest-asyncio
13115 python-pytest-trio
13116 python-setuptools))
13117 (propagated-inputs (list python-trio))
13118 (home-page "https://github.com/pohmelie/siosocks")
13119 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
13120 (description
13121 "This package provides a Python module and framework for sans-io socks proxy
13122client/server with couple io backends.
13123
13124Features:
13125@itemize
13126@item Only TCP connect (no BIND, no UDP)
13127@item Both client and server
13128@item SOCKS versions: 4, 4a, 5
13129@item SOCKSv5 auth: no auth, username/password
13130@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
13131@item One-shot socks server (@code{python -m siosocks})
13132@end itemize")
13133 (license license:expat)))
13134
13135(define-public python-tiny-proxy
13136 (package
13137 (name "python-tiny-proxy")
13138 (version "0.2.1")
13139 (source
13140 (origin
13141 (method url-fetch)
13142 (uri (pypi-uri "tiny_proxy" version))
13143 (sha256
13144 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
13145 (build-system pyproject-build-system)
13146 ;; There are only a handful of tests and they require the as yet
13147 ;; unpackaged httpx_socks.
13148 (arguments (list #:tests? #false))
13149 (propagated-inputs (list python-anyio))
13150 (native-inputs
13151 (list python-httpx
13152 python-pytest
13153 python-setuptools
13154 python-wheel))
13155 (home-page "https://github.com/romis2012/tiny-proxy")
13156 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
13157 (description "This package provides a simple proxy server (SOCKS4(a),
13158SOCKS5(h), HTTP tunnel).")
13159 (license license:asl2.0)))
13160
13161(define-public python-google-auth
13162 (package
13163 (name "python-google-auth")
13164 (version "2.56.0")
13165 (source
13166 (origin
13167 (method url-fetch)
13168 (uri (pypi-uri "google_auth" version))
13169 (sha256
13170 (base32 "0lx5cw49lfjqvd9vx1vlslrxyh9q0xd6d46np5a2dab9nlqa03zr"))))
13171 (build-system pyproject-build-system)
13172 (propagated-inputs
13173 (list python-aiohttp
13174 python-cryptography
13175 python-pyasn1-modules
13176 python-requests
13177 python-rsa
13178 python-urllib3))
13179 (native-inputs
13180 (list nss-certs-for-test
13181 python-aiohttp
13182 python-aioresponses
13183 python-flask
13184 python-freezegun
13185 python-grpcio
13186 python-oauth2client
13187 python-packaging
13188 python-pyjwt
13189 python-pyopenssl
13190 python-pytest
13191 python-pytest-asyncio
13192 python-pytest-localserver
13193 python-pyu2f
13194 python-requests
13195 python-responses
13196 python-rsa
13197 python-setuptools
13198 python-urllib3))
13199 (home-page "https://github.com/googleapis/google-auth-library-python")
13200 (synopsis "Google Authentication Library")
13201 (description "This library simplifies using Google's various
13202server-to-server authentication mechanisms to access Google APIs.")
13203 (license license:asl2.0)))
13204
13205(define-public python-google-resumable-media
13206 (package
13207 (name "python-google-resumable-media")
13208 (version "2.8.0")
13209 (source
13210 (origin
13211 (method git-fetch)
13212 (uri (git-reference
13213 (url
13214 "https://github.com/googleapis/google-resumable-media-python")
13215 (commit (string-append "v" version))))
13216 (file-name (git-file-name name version))
13217 (sha256
13218 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
13219 (build-system pyproject-build-system)
13220 (arguments
13221 (list
13222 #:test-flags
13223 #~(list
13224 ;; XXX: Missing test_utils.retry.
13225 "--ignore-glob=tests*/system/"
13226 ;; XXX: md5_hash is not mock.sentinel.md5_hash
13227 "-k" (string-join
13228 (list "not test_brotli"
13229 "test_constructor"
13230 "test_decompress")
13231 " and not "))))
13232 (propagated-inputs (list python-google-crc32c))
13233 (native-inputs
13234 (list python-google-auth
13235 python-mock
13236 python-pytest
13237 python-pytest-asyncio
13238 python-setuptools
13239 python-test-utils))
13240 (home-page "https://github.com/googleapis/google-resumable-media-python")
13241 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
13242 (description "This package provides utilities for Google Media Downloads
13243and Resumable Uploads.")
13244 (license license:asl2.0)))
13245
13246(define-public python-googleapis-common-protos
13247 (package
13248 (name "python-googleapis-common-protos")
13249 (version "1.66.0")
13250 (source
13251 (origin
13252 (method git-fetch)
13253 (uri (git-reference
13254 (url "https://github.com/googleapis/python-api-common-protos")
13255 (commit (string-append "v" version))))
13256 (file-name (git-file-name name version))
13257 (sha256
13258 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
13259 (build-system pyproject-build-system)
13260 (propagated-inputs (list python-protobuf))
13261 (native-inputs (list python-pytest python-setuptools))
13262 (home-page "https://github.com/googleapis/python-api-common-protos")
13263 (synopsis "Common protobufs used in Google APIs")
13264 (description
13265 "This package contains Python classes generated from the common protos in
13266the @code{googleapis/api-common-protos} repository.")
13267 (license license:asl2.0)))
13268
13269(define-public python-google-api-core
13270 (package
13271 (name "python-google-api-core")
13272 (version "2.29.0")
13273 (source
13274 (origin
13275 (method git-fetch)
13276 (uri (git-reference
13277 (url "https://github.com/googleapis/python-api-core")
13278 (commit (string-append "v" version))))
13279 (file-name (git-file-name name version))
13280 (sha256
13281 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
13282 (build-system pyproject-build-system)
13283 (arguments
13284 (list
13285 #:test-flags
13286 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13287 ;; deprecated and scheduled for removal in a future version. Use
13288 ;; timezone-aware objects to represent datetimes in UTC:
13289 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13290 #~(list "-W" "ignore::DeprecationWarning")))
13291 (propagated-inputs
13292 (list python-google-auth
13293 python-googleapis-common-protos
13294 python-protobuf
13295 python-proto-plus
13296 python-requests))
13297 (native-inputs
13298 (list python-mock
13299 python-pytest
13300 python-pytest-asyncio
13301 python-pytest-mock
13302 python-setuptools))
13303 (home-page "https://github.com/googleapis/python-api-core")
13304 (synopsis "Google API client core library")
13305 (description
13306 "This library defines common helpers used by all Google API clients.")
13307 (license license:asl2.0)))
13308
13309(define-public python-google-cloud-core
13310 (package
13311 (name "python-google-cloud-core")
13312 (version "2.5.0")
13313 (source
13314 (origin
13315 (method git-fetch)
13316 (uri (git-reference
13317 (url "https://github.com/googleapis/python-cloud-core")
13318 (commit (string-append "v" version))))
13319 (file-name (git-file-name name version))
13320 (sha256
13321 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
13322 (build-system pyproject-build-system)
13323 (arguments
13324 (list
13325 #:test-flags
13326 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13327 ;; deprecated and scheduled for removal in a future version. Use
13328 ;; timezone-aware objects to represent datetimes in UTC:
13329 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13330 #~(list "-W" "ignore::DeprecationWarning")))
13331 (propagated-inputs (list python-google-api-core python-google-auth))
13332 (native-inputs
13333 (list python-grpcio
13334 python-grpcio-status
13335 python-pytest
13336 python-setuptools))
13337 (home-page "https://github.com/googleapis/python-cloud-core")
13338 (synopsis "Google Cloud API client core library")
13339 (description
13340 "This library defines common helpers (e.g. base @code{Client} classes)
13341used by all of the @code{google-cloud-*} packages.")
13342 (license license:asl2.0)))
13343
13344(define-public python-google-cloud-storage
13345 (package
13346 (name "python-google-cloud-storage")
13347 (version "2.19.0")
13348 (source
13349 (origin
13350 (method git-fetch)
13351 (uri (git-reference
13352 (url "https://github.com/googleapis/python-storage")
13353 (commit (string-append "v" version))))
13354 (file-name (git-file-name name version))
13355 (sha256
13356 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
13357 (build-system pyproject-build-system)
13358 (arguments
13359 (list
13360 #:test-flags
13361 #~(list
13362 ;; XXX: Missing test_utils.retry.
13363 "--ignore=tests/system/"
13364 ;; Needs docker.
13365 "--ignore=tests/conformance/"
13366 ;; XXX: Deprecations.
13367 "-k" (string-join
13368 (list "not test_set_api_request_attr"
13369 "test_create_bucket_w_custom_endpoint"
13370 "test_ctor_w_api_endpoint_override"
13371 "test_ctor_w_custom_endpoint_use_auth"
13372 "test_list_buckets_w_custom_endpoint")
13373 " and not ")
13374 "tests")))
13375 (native-inputs
13376 (list python-googleapis-common-protos
13377 python-mock
13378 python-pytest
13379 python-test-utils
13380 python-setuptools))
13381 (propagated-inputs
13382 (list python-google-api-core
13383 python-google-auth
13384 python-google-cloud-core
13385 python-google-resumable-media
13386 python-protobuf
13387 python-requests))
13388 (home-page "https://github.com/googleapis/python-storage")
13389 (synopsis "Google Cloud Storage API client library")
13390 (description
13391 "Google Cloud Storage allows you to store data on Google infrastructure,
13392and it can be used to distribute large data objects to users via direct
13393download. This package provides a Google Cloud Storage API client library for
13394Python.")
13395 (license license:asl2.0)))
13396
13397(define-public python-smart-open
13398 (package
13399 (name "python-smart-open")
13400 (version "7.3.0")
13401 (source
13402 (origin
13403 (method git-fetch) ;no tests in PyPI archive
13404 (uri (git-reference
13405 (url "https://github.com/piskvorky/smart_open")
13406 (commit (string-append "v" version))))
13407 (file-name (git-file-name name version))
13408 (sha256
13409 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
13410 (build-system pyproject-build-system)
13411 (arguments
13412 (list
13413 #:test-flags
13414 #~(list "--ignore=ci_helpers/"
13415 "--ignore=integration-tests/"
13416 ;; FIXME: Enable when guix/guix#1436 is resolved.
13417 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
13418 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
13419 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
13420 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
13421 "--ignore=tests/test_gcs.py")))
13422 (propagated-inputs
13423 (list python-azure-common
13424 python-azure-core
13425 python-azure-storage-blob
13426 python-boto3
13427 ;; python-google-cloud-storage ;see guix/guix#1436
13428 python-paramiko
13429 python-requests
13430 python-wrapt
13431 python-zstandard))
13432 (native-inputs
13433 (list python-numpy
13434 python-moto
13435 python-pytest
13436 python-pytest-rerunfailures
13437 python-responses
13438 python-setuptools
13439 python-setuptools-scm
13440 python-wheel))
13441 (home-page "https://github.com/piskvorky/smart_open")
13442 (synopsis "Utilities for streaming large files")
13443 (description
13444 "This package provides utilities for streaming large files (S3, HDFS,
13445GCS, Azure Blob Storage, gzip, bz2, etc.)")
13446 (license license:expat)))
13447
13448(define-public python-smart-open-6
13449 (package
13450 (inherit python-smart-open)
13451 (name "python-smart-open")
13452 (version "6.4.0")
13453 (source
13454 (origin
13455 (method git-fetch)
13456 (uri (git-reference
13457 (url "https://github.com/piskvorky/smart_open")
13458 (commit (string-append "v" version))))
13459 (file-name (git-file-name name version))
13460 (sha256
13461 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
13462 (arguments
13463 (list
13464 ;; XXX: Tests need some older native inputs, disable for now.
13465 #:tests? #f))))
13466
13467(define-public python-w3lib
13468 (package
13469 (name "python-w3lib")
13470 (version "2.3.1")
13471 (source
13472 (origin
13473 (method url-fetch)
13474 (uri (pypi-uri "w3lib" version))
13475 (sha256
13476 (base32
13477 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
13478 (build-system pyproject-build-system)
13479 (native-inputs
13480 (list python-pytest python-setuptools python-wheel))
13481 (home-page "https://github.com/scrapy/w3lib")
13482 (synopsis "Python library of web-related functions")
13483 (description
13484 "This is a Python library of web-related functions, such as: remove
13485comments, or tags from HTML snippets, extract base url from HTML snippets,
13486translate entities on HTML strings, among other things.")
13487 (license license:bsd-3)))
13488
13489(define-public python-webcolors
13490 (package
13491 (name "python-webcolors")
13492 (version "25.10.0")
13493 (source
13494 (origin
13495 (method git-fetch)
13496 (uri (git-reference
13497 (url "https://github.com/ubernostrum/webcolors")
13498 (commit version)))
13499 (sha256
13500 (base32 "1wknzir5252y30wcpwxb04ngmrdw1llzqmrpiajyhkm81x2lgrym"))))
13501 (build-system pyproject-build-system)
13502 (native-inputs
13503 (list python-pdm-backend python-pytest))
13504 (home-page "https://github.com/ubernostrum/webcolors")
13505 (synopsis "HTML/CSS color definitions library")
13506 (description "@code{python-webcolors} is a module for working with
13507HTML/CSS color definitions. Normalizing and converting between the following
13508formats is supported.
13509@itemize
13510@item Specification-defined color names
13511@item Six-digit hexadecimal
13512@item Three-digit hexadecimal
13513@item Integer rgb() triplet
13514@item Percentage rgb() triplet
13515@end itemize
13516Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
13517can be handled by the @code{colorsys} module in the Python standard library.")
13518 (license license:bsd-3)))
13519
13520(define-public python-woob
13521 ;; TODO: woob requires backends which are currently installed on the fly in
13522 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
13523 ;; them in the store instead. Many modules are included in the modules
13524 ;; directory in the source tree, but it is unclear how to install them.
13525 ;; Many modules require extra dependencies though, so maybe they should be
13526 ;; packaged independently of woob itself.
13527 (package
13528 (name "python-woob")
13529 (version "3.7")
13530 (source
13531 (origin
13532 (method git-fetch)
13533 (uri (git-reference
13534 (url "https://gitlab.com/woob/woob.git")
13535 (commit version)))
13536 (file-name (git-file-name name version))
13537 (sha256
13538 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
13539 (build-system pyproject-build-system)
13540 (arguments
13541 (list
13542 #:test-flags
13543 ;; Deselect tests that require DNS lookup.
13544 #~(list
13545 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
13546 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
13547 #:phases
13548 #~(modify-phases %standard-phases
13549 (add-before 'build 'relax-requirements
13550 (lambda _
13551 (substitute* "pyproject.toml"
13552 ;; packaging ~= 23.0
13553 (("\"packaging .*\",")
13554 "")
13555 ;; rich~=13.0
13556 (("\"rich .*\",")
13557 "\"rich\",")))))))
13558 (native-inputs
13559 (list nss-certs-for-test
13560 python-pytest
13561 python-setuptools))
13562 (propagated-inputs
13563 (list python-babel
13564 python-colorama
13565 python-cssselect
13566 python-dateutil
13567 python-feedparser
13568 python-html2text
13569 python-lxml
13570 python-packaging
13571 python-pillow
13572 python-prettytable
13573 python-pycountry
13574 python-pyyaml
13575 python-requests
13576 python-responses
13577 python-rich
13578 python-termcolor
13579 python-unidecode))
13580 (home-page "https://woob.tech/")
13581 (synopsis "Woob, Web Outside Of Browsers")
13582 (description
13583 "Woob is a collection of applications able to interact with
13584websites, without requiring the user to open them in a browser. It also
13585provides well-defined APIs to talk to websites lacking one.")
13586 (license license:lgpl3+)))
13587
13588(define-public python-flask-combo-jsonapi
13589 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
13590 (revision "0"))
13591 (package
13592 (name "python-flask-combo-jsonapi")
13593 (version (git-version "1.1.0" revision commit))
13594 (source
13595 (origin
13596 (method git-fetch)
13597 (uri (git-reference
13598 (url "https://github.com/AdCombo/flask-combo-jsonapi")
13599 (commit commit)))
13600 (file-name (git-file-name name version))
13601 (sha256
13602 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
13603 (build-system pyproject-build-system)
13604 (arguments
13605 (list
13606 #:test-flags
13607 #~(list
13608 "-k"
13609 (string-join
13610 (list
13611 ;; XXX: This tests a feature that doesn't make sense when dropping
13612 ;; marshmallow < 3 support.
13613 "not test_compute_schema_propagate_context"
13614 ;; The following tests fail for unknown reasons (see:
13615 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
13616 "test_get_list_with_simple_filter_relationship_custom_qs_api"
13617 "test_get_list_with_simple_filter_relationship_error")
13618 " and not "))
13619 #:phases
13620 #~(modify-phases %standard-phases
13621 (add-after 'unpack 'loosen-requirements
13622 (lambda _
13623 ;; Don't pin specific versions of dependencies.
13624 (substitute* "requirements.txt"
13625 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
13626 (string-append dep "\n"))
13627 (("^marshmallow_jsonapi[=<>].*")
13628 "marshmallow_jsonapi_minfork\n"))
13629 ;; Drop support for marshmallow < 3.
13630 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
13631 "flask_combo_jsonapi/schema.py")
13632 (("from marshmallow\\.base import SchemaABC")
13633 "from marshmallow import Schema")
13634 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
13635 "if isinstance(related_schema_cls, Schema):"))
13636 (substitute* "tests/test_sqlalchemy_data_layer.py"
13637 (("default=None")
13638 "dump_default=None")
13639 (("missing=")
13640 "load_default=")))))))
13641 (propagated-inputs
13642 (list python-flask
13643 python-marshmallow
13644 python-marshmallow-jsonapi
13645 python-simplejson
13646 python-sqlalchemy
13647 python-apispec
13648 python-simplejson
13649 python-six))
13650 (native-inputs
13651 (list python-pytest python-setuptools))
13652 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
13653 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
13654 (description
13655 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
13656APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
13657specification.
13658
13659It tries to combine the power of Flask-Restless with the flexibility of
13660Flask-RESTful to quickly build APIs that fit the complexity of existing
13661real-life projects with legacy data and diverse storage providers.")
13662 (license license:expat))))
13663
13664(define-public python-mwparserfromhell
13665 (package
13666 (name "python-mwparserfromhell")
13667 (version "0.7.2")
13668 (source
13669 (origin
13670 (method git-fetch)
13671 (uri (git-reference
13672 (url "https://github.com/earwig/mwparserfromhell")
13673 (commit (string-append "v" version))))
13674 (file-name (git-file-name name version))
13675 (sha256
13676 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
13677 (build-system pyproject-build-system)
13678 (native-inputs (list python-pytest python-setuptools))
13679 (home-page "https://github.com/earwig/mwparserfromhell")
13680 (synopsis "Python parser for MediaWiki wikicode")
13681 (description
13682 "The MediaWiki Parser From Hell is a python library package that provides
13683a parser for MediaWiki.
13684
13685It exposes parses as normal string objects with additional methods giving
13686access to the special Wikicode features it contains (hyperlinks, tags,
13687templates…). The parser doesn't interpolate strings at all, it remains at a
13688purely formal level.
13689
13690Full documentation may be found at
13691@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
13692 (license license:expat)))
13693
13694(define-public python-tweepy
13695 (package
13696 (name "python-tweepy")
13697 (version "4.16.0")
13698 (source
13699 (origin
13700 (method git-fetch)
13701 (uri
13702 (git-reference
13703 (url "https://github.com/tweepy/tweepy")
13704 (commit (string-append "v" version))))
13705 (file-name (git-file-name name version))
13706 (sha256
13707 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
13708 (build-system pyproject-build-system)
13709 (arguments
13710 ;; tests: 149 passed, 3 skipped, 1 warning
13711 (list #:test-backend #~'unittest
13712 #:test-flags #~(list "discover" "tests")))
13713 (native-inputs
13714 (list nss-certs-for-test
13715 python-flit-core
13716 python-urllib3-1.26
13717 python-vcrpy))
13718 (propagated-inputs
13719 (list python-aiohttp
13720 python-async-lru
13721 python-oauthlib
13722 python-requests
13723 python-requests-oauthlib))
13724 (home-page "https://www.tweepy.org/")
13725 (synopsis "Twitter library for Python")
13726 (description
13727 "This package provides @code{Tweepy}, an easy-to-use Python library for
13728accessing the Twitter API.")
13729 (license license:expat)))
13730
13731(define-public python-quart
13732 (package
13733 (name "python-quart")
13734 (version "0.20.0")
13735 (source
13736 (origin
13737 (method git-fetch)
13738 (uri (git-reference
13739 (url "https://github.com/pallets/quart")
13740 (commit version)))
13741 (file-name (git-file-name name version))
13742 (sha256
13743 (base32 "1gk6vg2cwpn70aald3m50xibjqjamgpz7an11h82w1fig6zmw2il"))))
13744 (build-system pyproject-build-system)
13745 (arguments
13746 (list
13747 #:test-flags
13748 ;; Not sure why test fails; related to a change in dependencies.
13749 #~(list "-k" "not test_cli_blueprints[cli_group2-args2]")))
13750 (native-inputs
13751 (list python-flit-core
13752 python-pytest
13753 python-pytest-asyncio))
13754 (propagated-inputs
13755 (list hypercorn
13756 python-aiofiles
13757 python-blinker
13758 python-click
13759 python-dotenv
13760 python-flask
13761 python-itsdangerous
13762 python-jinja2
13763 python-markupsafe
13764 python-toml
13765 python-werkzeug))
13766 (home-page "https://gitlab.com/pgjones/quart/")
13767 (synopsis "Python ASGI web microframework with the same API as Flask")
13768 (description
13769 "This package provides a Python ASGI web microframework with the same API
13770as Flask.")
13771 (license license:expat)))
13772
13773(define-public python-quart-trio
13774 (package
13775 (name "python-quart-trio")
13776 (version "0.12.0")
13777 (source
13778 (origin
13779 (method url-fetch)
13780 (uri (pypi-uri "quart_trio" version))
13781 (sha256
13782 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
13783 (build-system pyproject-build-system)
13784 (arguments
13785 (list
13786 #:phases
13787 #~(modify-phases %standard-phases
13788 (add-after 'unpack 'remove-coverage-pytest-options
13789 (lambda _
13790 (substitute* "pyproject.toml"
13791 (("--no-cov-on-fail") "")))))))
13792 (native-inputs
13793 (list python-pdm-backend
13794 python-pytest
13795 python-pytest-sugar
13796 python-pytest-trio))
13797 (propagated-inputs
13798 (list hypercorn
13799 python-quart
13800 python-trio))
13801 (home-page "https://github.com/pgjones/quart-trio")
13802 (synopsis "Extension for Quart to support the Trio event loop")
13803 (description
13804 "This package provides a Quart extension to provide Trio support. This
13805is an alternative to using the asyncio event loop present in the Python
13806standard library and supported by default in Quart.")
13807 (license license:expat)))
13808
13809(define-public python-protego
13810 (package
13811 (name "python-protego")
13812 (version "0.4.0")
13813 (source
13814 (origin
13815 (method url-fetch)
13816 (uri (pypi-uri "protego" version))
13817 (sha256
13818 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
13819 (build-system pyproject-build-system)
13820 (native-inputs (list python-pytest python-setuptools python-wheel))
13821 (home-page "https://github.com/scrapy/protego")
13822 (synopsis "Python robots.txt parser with support for modern conventions")
13823 (description "Protego is a pure-Python @file{robots.txt} parser with support
13824for modern conventions.")
13825 (license license:bsd-3)))
13826
13827(define-public python-parsel
13828 (package
13829 (name "python-parsel")
13830 (version "1.10.0")
13831 (source
13832 (origin
13833 (method url-fetch)
13834 (uri (pypi-uri "parsel" version))
13835 (sha256
13836 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
13837 (build-system pyproject-build-system)
13838 (propagated-inputs
13839 (list python-cssselect
13840 python-jmespath
13841 python-lxml
13842 python-typing-extensions
13843 python-w3lib))
13844 (native-inputs
13845 (list python-psutil python-pytest python-setuptools python-wheel))
13846 (home-page "https://github.com/scrapy/parsel")
13847 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
13848 (description "Parsel is a library to extract and remove data from
13849HTML and XML using XPath and CSS selectors, optionally combined with
13850regular expressions.")
13851 (license license:bsd-3)))
13852
13853(define-public python-scrapy
13854 (package
13855 (name "python-scrapy")
13856 (version "2.13.3")
13857 (source
13858 (origin
13859 (method url-fetch)
13860 (uri (pypi-uri "scrapy" version))
13861 (sha256
13862 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
13863 (build-system pyproject-build-system)
13864 (arguments
13865 (list #:test-flags
13866 #~(list "--numprocesses" (number->string (parallel-job-count))
13867 "-k" (string-join
13868 ;; ConnectionRefusedError: [Errno 111] Connection
13869 ;; refused
13870 (list "not test_append"
13871 "test_append_active_mode"
13872 "test_overwrite"
13873 "test_overwrite_active_mode"
13874 "test_persist"
13875 ;; AssertionError
13876 "test_start_deprecated_super")
13877 " and not ")
13878 ;; Skip documentation testing.
13879 "--ignore=docs")
13880 #:phases
13881 #~(modify-phases %standard-phases
13882 (add-before 'check 'prepare-test-environment
13883 (lambda _
13884 (setenv "HOME" "/tmp"))))))
13885 (propagated-inputs
13886 (list python-cryptography
13887 python-cssselect
13888 python-defusedxml
13889 python-itemadapter
13890 python-itemloaders
13891 python-lxml
13892 python-packaging
13893 python-parsel
13894 python-protego
13895 python-pydispatcher
13896 python-pyopenssl
13897 python-pypydispatcher
13898 python-queuelib
13899 python-service-identity
13900 python-tldextract
13901 python-twisted
13902 python-w3lib
13903 python-zope-interface))
13904 (native-inputs
13905 (list nss-certs-for-test
13906 python-hatchling
13907 python-pexpect
13908 python-pytest
13909 python-pytest-xdist
13910 python-setuptools
13911 python-sybil
13912 python-testfixtures))
13913 (home-page "https://scrapy.org")
13914 (synopsis "High-level Web crawling and Web scraping framework")
13915 (description "Scrapy is a fast high-level web crawling and web
13916scraping framework, used to crawl websites and extract structured data
13917from their pages. It can be used for a wide range of purposes, from data
13918mining to monitoring and automated testing.")
13919 (license license:bsd-3)))
13920
13921(define sdmx-test-data
13922 (let* ((commit "cd7899341b46e179e9f19b638478d70197e12c74")
13923 (revision "1")
13924 (name "sdmx-test-data")
13925 (version (git-version "0" revision commit)))
13926 (origin
13927 (method git-fetch)
13928 (uri (git-reference
13929 (url "https://github.com/khaeru/sdmx-test-data")
13930 (commit commit)))
13931 (file-name (git-file-name name version))
13932 (sha256
13933 (base32 "1n9y83raxxpgljbi0wjj27lhmyn19fnc2325a6cchwsa3b65ywv7")))))
13934
13935(define-public python-sdmx1
13936 (package
13937 (name "python-sdmx1")
13938 (version "2.26.0")
13939 (source
13940 (origin
13941 (method git-fetch)
13942 (uri (git-reference
13943 (url "https://github.com/khaeru/sdmx")
13944 (commit (string-append "v" version))))
13945 (file-name (git-file-name name version))
13946 (sha256
13947 (base32 "096c60pxzcw71bc9fj3hpjprrdiia365rqalapxx56g6g1vkgka9"))))
13948 (build-system pyproject-build-system)
13949 (arguments
13950 (list
13951 #:test-flags
13952 #~(list
13953 ;; 804 passed, 122 skipped, 28 deselected, 23 xfailed, 1 xpassed, 3 warnings
13954 ;; XXX: 'Version' object has no attribute 'pre'
13955 "--ignore=sdmx/tests/model/test_version.py"
13956 ;; Most of these tests require network connection.
13957 "--ignore=sdmx/tests/test_client.py"
13958 "--ignore=sdmx/tests/test_sources.py"
13959 "--ignore=sdmx/tests/test_docs.py"
13960 "--ignore=sdmx/tests/test_session.py"
13961 "--ignore=sdmx/tests/writer/test_xml.py"
13962 "--ignore=sdmx/tests/reader/test_xml_v21.py"
13963 "--deselect=sdmx/tests/convert/test_pandas.py::test_dataset_constraint"
13964 ;; Wrong python-flaky version
13965 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas_in_user_cache"
13966 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas"
13967 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v2_1_samples"
13968 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v3_0_samples"
13969 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_doc"
13970 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_message_type"
13971 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_max_errors"
13972 ;; sqlite3.OperationalError
13973 "--deselect=sdmx/tests/util/test_requests.py::TestOfflineAdapter::test_raises")
13974 #:phases
13975 #~(modify-phases %standard-phases
13976 (add-after 'unpack 'fix-version
13977 (lambda _
13978 ;; versioningit needs git tags; patch pyproject.toml to use
13979 ;; static version and create _version.py directly.
13980 (substitute* "pyproject.toml"
13981 (("version.source = \"versioningit\"")
13982 "
13983[tool.hatch.version]
13984path = \"sdmx/_version.py\"")
13985 ((", \"versioningit\"")
13986 ""))
13987 (call-with-output-file "sdmx/_version.py"
13988 (lambda (port)
13989 (format port "__version__ = \"~a\"~%" #$version)))))
13990 (add-before 'check 'pre-check
13991 (lambda _
13992 (setenv "SDMX_TEST_DATA" #$sdmx-test-data)
13993 (setenv "HOME" (dirname (getcwd))))))))
13994 (propagated-inputs
13995 (list python-dateutil
13996 python-lxml
13997 python-pandas
13998 python-platformdirs
13999 python-requests))
14000 (native-inputs
14001 (list python-filelock
14002 python-flaky
14003 python-hatchling
14004 python-jinja2
14005 python-pyarrow
14006 python-pytest
14007 python-pytest-cov
14008 python-pytest-xdist
14009 python-requests-mock
14010 python-requests-cache
14011 python-responses))
14012 (home-page "https://sdmx1.readthedocs.io")
14013 (synopsis "Statistical Data and Metadata eXchange (SDMX) for Python")
14014 (description "This package provides a Python implementation of the
14015SDMX 2.1 and 3.0 standards for Statistical Data and Metadata eXchange.
14016These standards are developed and used by statistical agencies and
14017international organisations. This package can be used to:
14018@itemize
14019@item Explore and retrieve data available from SDMX-REST web services
14020operated by providers including the World Bank, International Monetary
14021Fund, Eurostat, OECD, and United Nations;
14022@item Read and write data and metadata in file formats including
14023SDMX-ML (XML), SDMX-JSON, and SDMX-CSV;
14024@item Convert data and metadata into @code{python-pandas} objects, for
14025use with the analysis, plotting, and other tools in the Python data
14026science ecosystem;
14027@item Apply the SDMX information model (IM) to structure and publish
14028your own data.
14029@end itemize")
14030 (license license:asl2.0)))
14031
14032(define-public python-jstyleson
14033 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
14034 (revision "0"))
14035 (package
14036 (name "python-jstyleson")
14037 (version (git-version "0.0.2" revision commit))
14038 (source
14039 (origin
14040 (method git-fetch)
14041 (uri (git-reference
14042 (url "https://github.com/linjackson78/jstyleson")
14043 (commit commit)))
14044 (file-name (git-file-name name version))
14045 (sha256
14046 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
14047 (build-system pyproject-build-system)
14048 (native-inputs (list python-pytest python-setuptools))
14049 (home-page "https://github.com/linjackson78/jstyleson")
14050 (synopsis "JSON parser supporting js-style comments")
14051 (description
14052 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
14053standard Python @code{json} library, it understands js-style comments.
14054Trailing comma is also supported.")
14055 (license license:expat))))
14056
14057(define-public python-html-text
14058 (package
14059 (name "python-html-text")
14060 (version "0.7.0")
14061 (source
14062 (origin
14063 (method url-fetch)
14064 (uri (pypi-uri "html_text" version))
14065 (sha256
14066 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
14067 (build-system pyproject-build-system)
14068 (native-inputs
14069 (list python-pytest
14070 python-setuptools
14071 python-wheel))
14072 (propagated-inputs
14073 (list python-lxml
14074 python-lxml-html-clean))
14075 (home-page "https://github.com/TeamHG-Memex/html-text")
14076 (synopsis "Extract text from HTML")
14077 (description "HTML to Text is a Python library for extract text from HTML.
14078Contrary to other solution such as LXML or Beautiful Soup, the text extracted
14079with @code{html_text} does not contain elements such as JavaScript or inline
14080styles not normally visible to users. It also normalizes white space
14081characters in a smarter, more visually pleasing style.")
14082 (license license:expat)))
14083
14084(define-public python-mf2py
14085 (package
14086 (name "python-mf2py")
14087 (version "2.0.1")
14088 (source
14089 (origin
14090 (method git-fetch)
14091 (uri (git-reference
14092 (url "https://github.com/microformats/mf2py")
14093 (commit (string-append "v" version))))
14094 (file-name (git-file-name name version))
14095 (sha256
14096 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
14097 (build-system pyproject-build-system)
14098 (native-inputs (list python-mock python-poetry-core python-pytest))
14099 (propagated-inputs
14100 (list python-beautifulsoup4 python-html5lib python-requests))
14101 (home-page "https://github.com/microformats/mf2py")
14102 (synopsis "Python Microformats2 parser")
14103 (description
14104 "This Python library provides a Microformats2 parser implementing the
14105full Microformats2 (mf2) specification, including backward compatibility with
14106Microformats1 (mf1).")
14107 (license license:expat)))
14108
14109(define-public python-wadllib
14110 (package
14111 (name "python-wadllib")
14112 (version "2.0.0")
14113 (source
14114 (origin
14115 (method url-fetch)
14116 (uri (pypi-uri "wadllib" version))
14117 (sha256
14118 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
14119 (build-system pyproject-build-system)
14120 (arguments
14121 (list
14122 ;; XXX: Doctests are currently failing.
14123 #:tests? #f
14124 #:phases
14125 #~(modify-phases %standard-phases
14126 (replace 'check
14127 (lambda* (#:key tests? #:allow-other-keys)
14128 (if tests?
14129 (invoke "zope-testrunner" "--test-path=src")
14130 (format #t "test suite not run~%")))))))
14131 (native-inputs
14132 (list python-multipart python-setuptools python-zope-testrunner))
14133 (propagated-inputs (list python-lazr-uri))
14134 (home-page "https://launchpad.net/wadllib")
14135 (synopsis "Web Application Description Language (WADL) navigation library")
14136 (description "The @code{wadllib} Python library allows navigating HTTP
14137resources using Web Application Description Language (WADL) files as guides.")
14138 (license license:lgpl3)))
14139
14140(define-public python-zeep
14141 (package
14142 (name "python-zeep")
14143 (version "4.3.1")
14144 (source
14145 (origin
14146 (method url-fetch)
14147 (uri (pypi-uri "zeep" version))
14148 (sha256
14149 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
14150 (build-system pyproject-build-system)
14151 (arguments
14152 (list
14153 #:phases
14154 '(modify-phases %standard-phases
14155 (add-after 'unpack 'compatibility
14156 (lambda _
14157 ;; Relax requests-file requirement.
14158 (substitute* "pyproject.toml"
14159 (("\"requests-file.*\",")
14160 "\"requests-file\","))
14161 ;; httpx removed the "proxies" keyword. It's now either "mounts"
14162 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
14163 (substitute* "src/zeep/transports.py"
14164 (("proxies=") "proxy="))))
14165 ;; One test requires write access
14166 (add-before 'check 'set-HOME
14167 (lambda _ (setenv "HOME" (getcwd)))))))
14168 (propagated-inputs
14169 (list python-attrs
14170 python-isodate
14171 python-lxml
14172 python-platformdirs
14173 python-pytz
14174 python-requests
14175 python-requests-file
14176 python-requests-toolbelt))
14177 (native-inputs
14178 (list nss-certs-for-test
14179 python-freezegun
14180 python-pretend
14181 python-pytest
14182 python-pytest-asyncio
14183 python-pytest-httpx
14184 python-requests-mock
14185 python-setuptools
14186 python-wheel))
14187 (home-page "https://docs.python-zeep.org/en/stable/")
14188 (synopsis "Python SOAP client based on lxml / requests")
14189 (description "Zeep is a Python SOAP client. Highlights:
14190
14191@itemize
14192@item Build on top of @code{lxml} and @code{requests}.
14193@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
14194@item Support for WS-Addressing headers.
14195@item Support for WSSE (UserNameToken / x.509 signing).
14196@item Support for @code{asyncio} via @code{httpx}.
14197@item Experimental support for XOP messages.
14198@end itemize")
14199 (license license:expat)))
14200
14201(define-public python-http-client
14202 (package
14203 (name "python-http-client")
14204 (version "3.3.7")
14205 (source
14206 (origin
14207 (method git-fetch)
14208 (uri (git-reference
14209 (url "https://github.com/sendgrid/python-http-client")
14210 (commit version)))
14211 (file-name (git-file-name name version))
14212 (sha256
14213 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
14214 (build-system pyproject-build-system)
14215 (arguments
14216 (list
14217 #:test-backend #~'unittest
14218 #:phases
14219 #~(modify-phases %standard-phases
14220 (add-after 'unpack 'fix-tests
14221 (lambda _
14222 ;; The test expects the copyright to be updated each year.
14223 (substitute* "tests/test_daterange.py"
14224 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
14225 (native-inputs
14226 (list python-setuptools))
14227 (home-page "https://github.com/sendgrid/python-http-client")
14228 (synopsis "HTTP REST client for Python")
14229 (description
14230 "This package provides access to any RESTful or RESTful-like API.")
14231 (license license:expat)))
14232
14233(define-public python-sendgrid
14234 (package
14235 (name "python-sendgrid")
14236 (version "6.9.7")
14237 (source
14238 (origin
14239 (method git-fetch)
14240 (uri (git-reference
14241 (url "https://github.com/sendgrid/sendgrid-python")
14242 (commit version)))
14243 (file-name (git-file-name name version))
14244 (sha256
14245 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
14246 (build-system pyproject-build-system)
14247 (arguments
14248 (list
14249 #:test-flags
14250 #~(list "--ignore=test/integ"
14251 ;; Network access is required.
14252 "--ignore=live_test.py")))
14253 (native-inputs
14254 (list python-pytest
14255 python-setuptools))
14256 (propagated-inputs
14257 (list python-cryptography
14258 python-http-client
14259 python-flask
14260 python-pyyaml
14261 python-six ;hard dependency
14262 python-starkbank-ecdsa
14263 python-werkzeug))
14264 (home-page "https://github.com/sendgrid/sendgrid-python/")
14265 (synopsis "SendGrid API library for Python")
14266 (description
14267 "The @code{sendgrid} Python library allows access to the
14268SendGrid Web API v3. Version 3+ of the library provides full support for all
14269SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
14270 (license license:expat)))
14271
14272(define-public python-sse-starlette
14273 (package
14274 (name "python-sse-starlette")
14275 (version "3.4.4")
14276 (source
14277 (origin
14278 (method git-fetch)
14279 (uri (git-reference
14280 (url "https://github.com/sysid/sse-starlette")
14281 (commit (string-append "v" version))))
14282 (file-name (git-file-name name version))
14283 (sha256
14284 (base32 "0jzy3mjszl7fr524cggyf8k97x6jpykvmxldmm2ckmrqjpyj8jmz"))))
14285 (build-system pyproject-build-system)
14286 (arguments
14287 (list
14288 #:test-flags
14289 #~(list
14290 ;; XXX: Server fails to start.
14291 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
14292 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
14293 ;; XXX: Missing test dependency - testcontainers, Docker is required.
14294 "--ignore=tests/integration/test_multiple_consumers.py")))
14295 (native-inputs
14296 (list python-asgi-lifespan
14297 python-httpx
14298 python-portend
14299 python-pytest
14300 python-pytest-asyncio
14301 python-psutil
14302 python-setuptools
14303 python-tenacity
14304 python-uvicorn))
14305 (propagated-inputs
14306 (list python-anyio
14307 python-starlette))
14308 (home-page "https://github.com/sysid/sse-starlette")
14309 (synopsis "SSE plugin for Starlette")
14310 (description
14311 "This package provides SSE plugin for Starlette.")
14312 (license license:bsd-3)))
14313
14314(define-public python-sseclient-py
14315 (package
14316 (name "python-sseclient-py")
14317 (version "1.9.0")
14318 (source
14319 (origin
14320 (method git-fetch)
14321 (uri (git-reference
14322 (url "https://github.com/mpetazzoni/sseclient")
14323 (commit (string-append "sseclient-py-" version))))
14324 (file-name (git-file-name name version))
14325 (sha256
14326 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
14327 (build-system pyproject-build-system)
14328 (native-inputs (list python-hatchling python-pytest))
14329 (arguments
14330 (list
14331 #:test-backend #~'unittest
14332 #:test-flags #~'("discover" "--verbose" "tests")))
14333 (home-page "https://github.com/mpetazzoni/sseclient")
14334 (synopsis "Pure-Python Server Side Events (SSE) client")
14335 (description
14336 "This package provides a Python client for SSE event sources that
14337seamlessly integrates with @code{urllib3} and @code{requests}.")
14338 (license license:asl2.0)))
14339
14340(define-public python-starlette
14341 (package
14342 (name "python-starlette")
14343 (version "0.49.1")
14344 (source (origin
14345 (method git-fetch)
14346 (uri (git-reference
14347 (url "https://github.com/encode/starlette")
14348 (commit version)))
14349 (file-name (git-file-name name version))
14350 (sha256
14351 (base32
14352 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
14353 (build-system pyproject-build-system)
14354 (propagated-inputs (list python-anyio
14355 python-typing-extensions
14356 ;; [all] extra dependencies:
14357 python-itsdangerous
14358 python-jinja2
14359 python-multipart
14360 python-pyyaml
14361 python-requests))
14362 (native-inputs (list python-hatchling
14363 python-httpx
14364 python-pytest
14365 python-typing-extensions))
14366 (home-page "https://github.com/encode/starlette")
14367 (synopsis "Little ASGI library")
14368 (description
14369 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
14370Interface) framework/toolkit for building async web services in Python.")
14371 (license license:bsd-3)))
14372
14373(define-public python-starsessions
14374 (package
14375 (name "python-starsessions")
14376 (version "1.3.0")
14377 (source (origin
14378 (method git-fetch)
14379 (uri (git-reference
14380 (url "https://github.com/alex-oleshkevich/starsessions")
14381 (commit (string-append "v" version))))
14382 (file-name (git-file-name name version))
14383 (sha256
14384 (base32
14385 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
14386 (build-system pyproject-build-system)
14387 (arguments
14388 (list
14389 #:test-flags
14390 ;; These tests require a running redis server
14391 '(list "--ignore=tests/backends/test_redis.py"
14392 ;; XXX: this failure indicates a real compatibility problem, but
14393 ;; it seems restricted to the tests only.
14394 ;; AttributeError: 'Cookies' object has no attribute
14395 ;; 'clear_session_cookies'
14396 "-k"
14397 (string-append "not test_session_clears_on_tab_close"
14398 ;; This fails because an error is not raised.
14399 " and not test_session_wants_secret_key"))
14400 #:phases
14401 '(modify-phases %standard-phases
14402 (add-after 'unpack 'compatibilitiy
14403 (lambda _
14404 ;; aioredis has been renamed
14405 (substitute* "starsessions/backends/redis.py"
14406 (("aioredis") "redis")))))))
14407 (propagated-inputs
14408 (list python-redis
14409 python-itsdangerous
14410 python-starlette))
14411 (native-inputs
14412 (list python-httpx
14413 python-poetry-core
14414 python-pytest
14415 python-pytest-asyncio
14416 python-requests))
14417 (home-page "https://github.com/alex-oleshkevich/starsessions")
14418 (synopsis "Pluggable session support for Starlette and FastAPI")
14419 (description
14420 "This package adds pluggable session backends and ships default
14421@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
14422and FastAPI.")
14423 (license license:expat)))
14424
14425(define-public python-whereismyip
14426 (package
14427 (name "python-whereismyip")
14428 (version "0.1.0")
14429 (source
14430 (origin
14431 (method url-fetch)
14432 (uri (pypi-uri "whereismyip" version))
14433 (sha256
14434 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
14435 (build-system pyproject-build-system)
14436 (arguments (list #:tests? #false)) ; There are no tests.
14437 (native-inputs (list python-setuptools))
14438 (home-page "https://pypi.org/project/whereismyip/")
14439 (synopsis "Queries multiple geolocation services until one succeeds")
14440 (description
14441 "This package provides a simple Python library that queries multiple geolocation
14442services until one succeeds.")
14443 (license license:gpl3)))
14444
14445(define-public python-whitenoise
14446 (package
14447 (name "python-whitenoise")
14448 (version "6.9.0")
14449 (source (origin
14450 (method git-fetch) ; PyPI missing test fails
14451 (uri (git-reference
14452 (url "https://github.com/evansd/whitenoise")
14453 (commit version)))
14454 (file-name (git-file-name name version))
14455 (sha256
14456 (base32
14457 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
14458 (build-system pyproject-build-system)
14459 (arguments
14460 (list
14461 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
14462 (native-inputs (list python-brotli
14463 python-django
14464 python-requests
14465 python-pytest
14466 python-setuptools
14467 python-wheel))
14468 (home-page "https://github.com/evansd/whitenoise")
14469 (synopsis "Static file serving for WSGI applications")
14470 (description
14471 "WhiteNoise allows your web app to serve its own static files, making it
14472a self-contained unit that can be deployed anywhere without relying on nginx,
14473Amazon S3 or any other external service.")
14474 (license license:expat)))
14475
14476(define-public python-suds
14477 (package
14478 (name "python-suds")
14479 (version "1.2.0")
14480 (source
14481 (origin
14482 (method url-fetch)
14483 (uri (pypi-uri "suds" version))
14484 (sha256
14485 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
14486 (build-system pyproject-build-system)
14487 (arguments
14488 (list #:phases
14489 #~(modify-phases %standard-phases
14490 ;; XXX: chirp expects suds instead of suds_community
14491 (add-after 'install 'add-custom-dist-info
14492 (lambda _
14493 (for-each
14494 (lambda (dir)
14495 (with-directory-excursion (dirname dir)
14496 (symlink
14497 (basename dir)
14498 (string-append "suds-" #$version ".dist-info"))))
14499 (find-files #$output
14500 (lambda (file stat)
14501 (string-suffix? ".dist-info" file))
14502 #:directories? #t)))))))
14503 (native-inputs
14504 (list python-pytest
14505 python-setuptools
14506 python-wheel))
14507 (home-page "https://github.com/suds-community/suds")
14508 (synopsis "Lightweight SOAP python client for consuming Web Services")
14509 (description
14510 "Suds is a lightweight SOAP-based web service client for Python.")
14511 (license license:lgpl3+)))
14512
14513(define-public python-fastapi
14514 (package
14515 (name "python-fastapi")
14516 (version "0.137.1")
14517 (source
14518 (origin
14519 (method url-fetch)
14520 (uri (pypi-uri "fastapi" version))
14521 (sha256
14522 (base32 "072lzn48rwf9rjix4nqb5ym6hnaj2fb3jxclilym7n9h89q608w2"))))
14523 (build-system pyproject-build-system)
14524 (arguments
14525 (list
14526 ;; tests: 1126 passed, 12 skipped, 2 deselected
14527 #:test-backend #~'custom
14528 #:test-flags
14529 #~(list
14530 ;; Cannot import 'scripts' with just 'pytest'.
14531 "-m" "pytest"
14532 ;; Needs strawberry and sqlmodel.
14533 "--ignore=tests/test_tutorial/"
14534 ;; Fails due to failure to capture stdout.
14535 "--ignore=tests/test_fastapi_cli.py")))
14536 (native-inputs
14537 (list python-anyio
14538 python-dirty-equals
14539 python-flask
14540 python-inline-snapshot
14541 python-pdm-backend
14542 ;; python-pwdlib
14543 python-pyjwt
14544 python-pytest
14545 python-pytest-timeout
14546 python-pytest-xdist
14547 python-sqlalchemy-2
14548 ;; python-sqlmodel
14549 python-types-orjson
14550 python-types-ujson))
14551 (propagated-inputs
14552 (list python-starlette
14553 python-pydantic
14554 python-typing-extensions
14555 python-annotated-doc
14556 ;; [optional]
14557 python-email-validator
14558 python-fastapi-cli
14559 ;; python-fastar
14560 python-httpx
14561 python-itsdangerous
14562 python-jinja2
14563 python-multipart
14564 python-orjson
14565 python-pydantic
14566 python-pydantic-extra-types
14567 python-pydantic-settings
14568 python-pyyaml
14569 python-ujson
14570 python-uvicorn))
14571 (home-page "https://github.com/fastapi/fastapi")
14572 (synopsis "Web framework based on type hints")
14573 (description "FastAPI provides a web API framework based on pydantic and
14574starlette.")
14575 (license license:expat)))
14576
14577(define-public python-fastapi-csrf-protect
14578 (package
14579 (name "python-fastapi-csrf-protect")
14580 (version "0.3.3")
14581 (source (origin
14582 (method git-fetch)
14583 (uri (git-reference
14584 (url "https://github.com/aekasitt/fastapi-csrf-protect")
14585 (commit (string-append "v" version))))
14586 (file-name (git-file-name name version))
14587 (sha256
14588 (base32
14589 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
14590 (build-system pyproject-build-system)
14591 (propagated-inputs
14592 (list python-fastapi python-itsdangerous
14593 python-pydantic))
14594 (native-inputs
14595 (list python-poetry-core
14596 python-pytest))
14597 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
14598 (synopsis "Cross-Site Request Forgery (XSRF) protection")
14599 (description
14600 "This package provides a stateless implementation of @dfn{Cross-Site
14601Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
14602pattern.")
14603 (license license:expat)))
14604
14605(define-public python-fastapi-pagination-minimal
14606 (package
14607 (name "python-fastapi-pagination-minimal")
14608 (version "0.15.15")
14609 (source (origin
14610 (method git-fetch)
14611 (uri (git-reference
14612 (url "https://github.com/uriyyo/fastapi-pagination")
14613 (commit version)))
14614 (file-name (git-file-name name version))
14615 (sha256
14616 (base32
14617 "0jfmk5m2yrki9rw9izci2fxamam45mk36gl77rwbd5hnngkqbahv"))))
14618 (build-system pyproject-build-system)
14619 ;; We run the tests in python-fastapi-pagination only.
14620 (arguments (list #:tests? #false))
14621 ;; These are the only required dependencies,
14622 ;; please add all optional dependencies to the
14623 ;; full python-fastapi-pagination below.
14624 (propagated-inputs (list python-fastapi python-pydantic))
14625 (native-inputs (list python-hatchling))
14626 (home-page "https://github.com/uriyyo/fastapi-pagination")
14627 (synopsis "FastAPI pagination library")
14628 (description "@code{fastapi-pagination} is a Python library designed to
14629simplify pagination in FastAPI applications. It provides a set of utility
14630functions and data models to help you paginate your database queries and
14631return paginated responses to your clients.")
14632 (license license:expat)))
14633
14634(define-public python-fastapi-pagination
14635 (package
14636 (inherit python-fastapi-pagination-minimal)
14637 (name "python-fastapi-pagination")
14638 (arguments
14639 (list
14640 #:test-flags
14641 #~(list "--asyncio-mode=auto"
14642 "--ignore=tests/ext"
14643 ;; Netwok access is required.
14644 "-k" (string-join
14645 (list "not test_optional_params[postgres-default]"
14646 "test_optional_params[postgres-limit-offset]"
14647 "test_optional_params[sqlite-default]"
14648 "test_optional_params[sqlite-limit-offset]")
14649 " and not "))
14650 #:phases
14651 '(modify-phases %standard-phases
14652 (add-after 'unpack 'patch-tests
14653 (lambda _
14654 ;; We don't have a package for python-cassandra or motor, but we
14655 ;; also don't need them as we only run the unit tests anyway.
14656 (substitute* "tests/conftest.py"
14657 (("from cassandra.*") "")
14658 (("from motor.*") "")))))))
14659 (propagated-inputs
14660 (modify-inputs (package-propagated-inputs
14661 python-fastapi-pagination-minimal)
14662 (prepend python-asyncpg
14663 python-databases
14664 python-django
14665 python-fastapi
14666 python-pydantic
14667 python-sqlalchemy
14668 (package
14669 (inherit python-tortoise-orm)
14670 (arguments
14671 (substitute-keyword-arguments (package-arguments
14672 python-tortoise-orm)
14673 ((#:phases phases '%standard-phases)
14674 `(modify-phases ,phases
14675 (delete 'sanity-check)))))
14676 (propagated-inputs
14677 (modify-inputs propagated-inputs
14678 (replace "python-aiosqlite" python-aiosqlite)))))))
14679 (native-inputs
14680 (list python-aiosqlite
14681 python-asgi-lifespan
14682 python-asyncpg
14683 python-dirty-equals
14684 python-faker
14685 python-hatchling
14686 python-httpx
14687 python-pytest
14688 python-pytest-asyncio
14689 python-sqlalchemy
14690 python-typing-extensions))
14691 (description
14692 (string-append (package-description python-fastapi-pagination-minimal)
14693 "
14694
14695This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
14696all available optional dependencies supported by mainline
14697@code{fastapi-pagination}."))))
14698
14699(define-public python-fastapi-cli
14700 (package
14701 (name "python-fastapi-cli")
14702 (version "0.0.7")
14703 (source
14704 (origin
14705 (method url-fetch)
14706 (uri (pypi-uri "fastapi_cli" version))
14707 (sha256
14708 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
14709 (build-system pyproject-build-system)
14710 ;; Tests require fastapi, which depends on this package.
14711 (arguments (list #:tests? #false))
14712 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
14713 (native-inputs
14714 (list python-inline-snapshot python-pdm-backend python-pytest))
14715 (home-page "https://pypi.org/project/fastapi-cli/")
14716 (synopsis
14717 "Run and manage FastAPI apps from the command line with FastAPI CLI")
14718 (description
14719 "FastAPI CLI is a command line program fastapi that you can use to serve
14720your FastAPI app, manage your FastAPI project, and more.")
14721 (license license:expat)))
14722
14723(define-public python-pyactiveresource
14724 (package
14725 (name "python-pyactiveresource")
14726 (version "2.2.2")
14727 (source
14728 (origin
14729 (method git-fetch)
14730 (uri (git-reference
14731 (url "https://github.com/Shopify/pyactiveresource")
14732 (commit (string-append "v" version))))
14733 (file-name (git-file-name name version))
14734 (sha256
14735 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
14736 (build-system pyproject-build-system)
14737 ;; XXX: The package is fine, but the tests started failing on [email protected].
14738 ;; The package is not actively maintained, consider removing it once leaf.
14739 (arguments (list #:tests? #f))
14740 (native-inputs
14741 (list python-dateutil python-pytest python-pyyaml python-setuptools))
14742 (propagated-inputs (list python-six))
14743 (home-page "https://github.com/Shopify/pyactiveresource/")
14744 (synopsis "ActiveResource for Python")
14745 (description
14746 "This package provides a Python port of the ActiveResource project.
14747
14748Active Resource attempts to provide a coherent wrapper object-relational
14749mapping for REST web services. It follows the same philosophy as Active
14750Record, in that one of its prime aims is to reduce the amount of code needed
14751to map to these resources. This is made possible by relying on a number of
14752code- and protocol-based conventions that make it easy for Active Resource to
14753infer complex relations and structures.")
14754 (license license:expat)))
14755
14756(define-public python-shopifyapi
14757 (package
14758 (name "python-shopifyapi")
14759 (version "12.7.0")
14760 (source
14761 (origin
14762 (method git-fetch)
14763 (uri (git-reference
14764 (url "https://github.com/Shopify/shopify_python_api")
14765 (commit (string-append "v" version))))
14766 (file-name (git-file-name name version))
14767 (sha256
14768 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
14769 (build-system pyproject-build-system)
14770 (arguments
14771 (list
14772 #:test-flags
14773 #~'("-k"
14774 ;; Disable a failing test.
14775 "not test_raises_if_aud_doesnt_match_api_key")))
14776 (native-inputs (list python-mock python-pytest python-setuptools))
14777 (propagated-inputs (list python-pyactiveresource python-pyjwt
14778 python-pyyaml python-six))
14779 (home-page "https://github.com/Shopify/shopify_python_api")
14780 (synopsis "Shopify API for Python")
14781 (description
14782 "This package provides the Shopify API for Python.
14783
14784The ShopifyAPI library allows Python developers to programmatically access the
14785admin section of stores using an ActiveResource-like interface similar the
14786ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
14787list, create, update, or delete resources (e.g. Order, Product, Collection).")
14788 (license license:expat)))
14789
14790(define-public python-pybadges
14791 (package
14792 (name "python-pybadges")
14793 (version "3.0.1")
14794 (source (origin
14795 (method git-fetch)
14796 (uri (git-reference
14797 (url "https://github.com/google/pybadges")
14798 (commit version)))
14799 (file-name (git-file-name name version))
14800 (sha256
14801 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
14802 (build-system pyproject-build-system)
14803 (arguments
14804 (list
14805 #:test-flags
14806 #~'("-k"
14807 ;; Disable network dependent tests.
14808 "not test_changes and not test_not_image_url and not test_http_url")))
14809 (propagated-inputs (list python-jinja2 python-requests python-setuptools))
14810 (native-inputs (list python-flask
14811 python-fonttools
14812 python-pillow
14813 python-pytest
14814 python-wheel
14815 python-xmldiff))
14816 (home-page "https://github.com/google/pybadges")
14817 (synopsis "Generate Github-style badges on the command-line")
14818 (description
14819 "This package provides @code{python-pybadges}: a library and command-line
14820tool for generating Github-style badges as SVG images.")
14821 (license license:asl2.0)))
14822
14823(define-public python-grid5000
14824 (package
14825 (name "python-grid5000")
14826 (version "1.2.4")
14827 (source (origin
14828 (method git-fetch)
14829 (uri (git-reference
14830 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
14831 (commit (string-append "v" version))))
14832 (file-name (git-file-name name version))
14833 (sha256
14834 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
14835 (build-system pyproject-build-system)
14836 (arguments
14837 (list #:tests? #f)) ; No tests.
14838 (native-inputs (list python-setuptools))
14839 (propagated-inputs (list python-requests python-ipython python-pyyaml))
14840 (home-page "https://pypi.org/project/python-grid5000/")
14841 (synopsis "Grid5000 python client")
14842 (description
14843 "python-grid5000 is a python package wrapping the Grid5000 REST API.
14844You can use it as a library in your python project or you can explore the
14845Grid5000 resources interactively using the embedded shell.")
14846 (license license:gpl3+)))
14847
14848(define-public python-pynetbox
14849 (package
14850 (name "python-pynetbox")
14851 (version "7.4.1")
14852 (source (origin
14853 (method url-fetch)
14854 (uri (pypi-uri "pynetbox" version))
14855 (sha256
14856 (base32
14857 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
14858 (build-system pyproject-build-system)
14859 (arguments
14860 (list
14861 #:test-flags
14862 ;; Integration tests depend on docker.
14863 '(list "--ignore=tests/integration")))
14864 (propagated-inputs (list python-packaging python-requests))
14865 (native-inputs
14866 (list python-pytest
14867 python-setuptools
14868 python-setuptools-scm
14869 python-wheel))
14870 (home-page "https://github.com/netbox-community/pynetbox")
14871 (synopsis "NetBox API client library")
14872 (description "Python module to query and edit data stored in a
14873@url{https://netbox.dev,NetBox} instance.")
14874 (license license:asl2.0)))
14875
14876(define-public python-waybackpack
14877 (package
14878 (name "python-waybackpack")
14879 (version "0.6.4")
14880 (source
14881 (origin
14882 (method url-fetch)
14883 (uri (pypi-uri "waybackpack" version))
14884 (sha256
14885 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14886 (build-system pyproject-build-system)
14887 (arguments
14888 (list #:tests? #f)) ; would require network (and SSL certificates)
14889 (propagated-inputs (list python-requests))
14890 (native-inputs (list python-pytest python-setuptools python-wheel))
14891 (home-page "https://github.com/jsvine/waybackpack")
14892 (synopsis
14893 "Download the entire Wayback Machine archive for a given URL")
14894 (description
14895 "This package provides a library and a command-line tool that lets
14896you download the entire Wayback Machine archive for a given URL.")
14897 (license license:expat)))
14898
14899(define-public python-xyzservices
14900 (package
14901 (name "python-xyzservices")
14902 (version "2025.4.0")
14903 (source
14904 (origin
14905 (method url-fetch)
14906 (uri (pypi-uri "xyzservices" version))
14907 (sha256
14908 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14909 (build-system pyproject-build-system)
14910 (arguments
14911 (list
14912 #:test-flags #~(list "-m" "not request")))
14913 (native-inputs
14914 (list python-pytest
14915 python-mercantile
14916 python-requests
14917 python-setuptools
14918 python-setuptools-scm))
14919 (home-page "https://github.com/geopandas/xyzservices")
14920 (synopsis "Source of XYZ tiles providers")
14921 (description "@code{xyzservices} is a lightweight library providing a
14922repository of available XYZ services offering raster basemap tiles. The
14923repository is provided via Python API and as a compressed JSON file.")
14924 (license license:bsd-3)))
14925
14926(define-public s3cmd
14927 (package
14928 (name "s3cmd")
14929 (version "2.4.0")
14930 (source
14931 (origin
14932 (method git-fetch)
14933 (uri (git-reference
14934 (url "https://github.com/s3tools/s3cmd")
14935 (commit (string-append "v" version))))
14936 (file-name (git-file-name name version))
14937 (sha256
14938 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14939 (build-system pyproject-build-system)
14940 (arguments
14941 (list
14942 #:tests? #f ; XXX: Tests require network access.
14943 #:phases
14944 #~(modify-phases %standard-phases
14945 (add-after 'unpack 'hide-wrapping
14946 (lambda _
14947 (substitute* "S3/MultiPart.py"
14948 (("sys\\.argv\\[0\\]")
14949 "\"s3cmd\""))
14950 (substitute* "s3cmd"
14951 (("optparser\\.get_prog_name\\(\\)")
14952 "\"s3cmd\"")))))))
14953 (native-inputs (list python-setuptools))
14954 (inputs (list python-dateutil python-magic))
14955 (home-page "https://s3tools.org/s3cmd")
14956 (synopsis "Command line tool for S3-compatible storage services")
14957 (description
14958 "S3cmd is a command line tool for uploading, retrieving and managing data
14959in storage services that are compatible with the Amazon Simple Storage
14960Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14961GnuPG encryption, and more. It also supports management of Amazon's
14962CloudFront content delivery network.")
14963 (license license:gpl2+)))